texlive[73427] Build/source/libs: harfbuzz 10.2.0

commits+kakuto at tug.org commits+kakuto at tug.org
Sun Jan 12 00:22:13 CET 2025


Revision: 73427
          https://tug.org/svn/texlive?view=revision&revision=73427
Author:   kakuto
Date:     2025-01-12 00:22:13 +0100 (Sun, 12 Jan 2025)
Log Message:
-----------
harfbuzz 10.2.0

Modified Paths:
--------------
    trunk/Build/source/libs/README
    trunk/Build/source/libs/harfbuzz/ChangeLog
    trunk/Build/source/libs/harfbuzz/TLpatches/ChangeLog
    trunk/Build/source/libs/harfbuzz/TLpatches/TL-Changes
    trunk/Build/source/libs/harfbuzz/configure
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/CMakeLists.txt
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/NEWS
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/meson.build
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/OT/Color/COLR/COLR.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-def.py
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-indic-table.py
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/harfbuzz-config.cmake.in
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/harfbuzz-subset.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-cairo.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-config.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext-font.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft-colr.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-null.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cmap-table.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-os2-table.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shaper-indic-machine.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shaper-indic-machine.rl
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shaper-indic-table.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shaper-myanmar-machine.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shaper-myanmar-machine.rl
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shaper-use-machine.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shaper-use-machine.rl
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-tag-table.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var-common.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var-gvar-table.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-paint.h
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-sanitize.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-serialize.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shape.h
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-input.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-plan.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-plan.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.h
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-utf.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/meson.build
    trunk/Build/source/libs/harfbuzz/include/Makefile.am
    trunk/Build/source/libs/harfbuzz/include/Makefile.in
    trunk/Build/source/libs/harfbuzz/version.ac

Added Paths:
-----------
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-serialize.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-serialize.h

Removed Paths:
-------------
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-repacker.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-repacker.h

Modified: trunk/Build/source/libs/README
===================================================================
--- trunk/Build/source/libs/README	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/README	2025-01-11 23:22:13 UTC (rev 73427)
@@ -28,7 +28,7 @@
   https://sourceforge.net/projects/silgraphite/files/graphite2/
   (requires C++11)
 
-harfbuzz 10.1.0 - checked 06nov24
+harfbuzz 10.2.0 - checked 12jan25
   https://github.com/harfbuzz/harfbuzz/releases/latest
 
 icu 76.1 - checked 27oct24 (requires C++17, e.g., g++13)

Modified: trunk/Build/source/libs/harfbuzz/ChangeLog
===================================================================
--- trunk/Build/source/libs/harfbuzz/ChangeLog	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/ChangeLog	2025-01-11 23:22:13 UTC (rev 73427)
@@ -1,3 +1,8 @@
+2025-01-12  Akira Kakuto  <kakuto at jcom.zaq.ne.jp>
+
+	Import harfbuzz-10.2.0.
+	* version.ac, include/Makefile.am: Adjusted.
+
 2024-11-06  Akira Kakuto  <kakuto at jcom.zaq.ne.jp>
 
 	Import harfbuzz-10.1.0.

Modified: trunk/Build/source/libs/harfbuzz/TLpatches/ChangeLog
===================================================================
--- trunk/Build/source/libs/harfbuzz/TLpatches/ChangeLog	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/TLpatches/ChangeLog	2025-01-11 23:22:13 UTC (rev 73427)
@@ -1,3 +1,8 @@
+2025-01-12  Akira Kakuto  <kakuto at jcom.zaq.ne.jp>
+
+	Imported harfbuzz-10.2.0 source tree from:
+	https://github.com/harfbuzz/harfbuzz/releases/download/10.2.0/
+
 2024-11-06  Akira Kakuto  <kakuto at jcom.zaq.ne.jp>
 
 	Imported harfbuzz-10.1.0 source tree from:

Modified: trunk/Build/source/libs/harfbuzz/TLpatches/TL-Changes
===================================================================
--- trunk/Build/source/libs/harfbuzz/TLpatches/TL-Changes	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/TLpatches/TL-Changes	2025-01-11 23:22:13 UTC (rev 73427)
@@ -1,5 +1,5 @@
-Changes applied to the harfbuzz-10.1.0/ tree as obtained from:
-	https://github.com/harfbuzz/harfbuzz/releases/download/10.1.0/
+Changes applied to the harfbuzz-10.2.0/ tree as obtained from:
+	https://github.com/harfbuzz/harfbuzz/releases/download/10.2.0/
 
 Removed:
 	.clang-format

Modified: trunk/Build/source/libs/harfbuzz/configure
===================================================================
--- trunk/Build/source/libs/harfbuzz/configure	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/configure	2025-01-11 23:22:13 UTC (rev 73427)
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.72 for harfbuzz (TeX Live) 10.1.0.
+# Generated by GNU Autoconf 2.72 for harfbuzz (TeX Live) 10.2.0.
 #
 # Report bugs to <tex-k at tug.org>.
 #
@@ -604,8 +604,8 @@
 # Identity of this package.
 PACKAGE_NAME='harfbuzz (TeX Live)'
 PACKAGE_TARNAME='harfbuzz--tex-live-'
-PACKAGE_VERSION='10.1.0'
-PACKAGE_STRING='harfbuzz (TeX Live) 10.1.0'
+PACKAGE_VERSION='10.2.0'
+PACKAGE_STRING='harfbuzz (TeX Live) 10.2.0'
 PACKAGE_BUGREPORT='tex-k at tug.org'
 PACKAGE_URL=''
 
@@ -1341,7 +1341,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-'configure' configures harfbuzz (TeX Live) 10.1.0 to adapt to many kinds of systems.
+'configure' configures harfbuzz (TeX Live) 10.2.0 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1413,7 +1413,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of harfbuzz (TeX Live) 10.1.0:";;
+     short | recursive ) echo "Configuration of harfbuzz (TeX Live) 10.2.0:";;
    esac
   cat <<\_ACEOF
 
@@ -1518,7 +1518,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-harfbuzz (TeX Live) configure 10.1.0
+harfbuzz (TeX Live) configure 10.2.0
 generated by GNU Autoconf 2.72
 
 Copyright (C) 2023 Free Software Foundation, Inc.
@@ -2075,7 +2075,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by harfbuzz (TeX Live) $as_me 10.1.0, which was
+It was created by harfbuzz (TeX Live) $as_me 10.2.0, which was
 generated by GNU Autoconf 2.72.  Invocation command line was
 
   $ $0$ac_configure_args_raw
@@ -5252,7 +5252,7 @@
 
 # Define the identity of the package.
  PACKAGE='harfbuzz--tex-live-'
- VERSION='10.1.0'
+ VERSION='10.2.0'
 
 
 # Some tools Automake needs.
@@ -5441,9 +5441,9 @@
 
 
 HB_VERSION_MAJOR=10
-HB_VERSION_MINOR=1
+HB_VERSION_MINOR=2
 HB_VERSION_MICRO=0
-HB_VERSION=10.1.0
+HB_VERSION=10.2.0
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -9292,7 +9292,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by harfbuzz (TeX Live) $as_me 10.1.0, which was
+This file was extended by harfbuzz (TeX Live) $as_me 10.2.0, which was
 generated by GNU Autoconf 2.72.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -9360,7 +9360,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config='$ac_cs_config_escaped'
 ac_cs_version="\\
-harfbuzz (TeX Live) config.status 10.1.0
+harfbuzz (TeX Live) config.status 10.2.0
 configured by $0, generated by GNU Autoconf 2.72,
   with options \\"\$ac_cs_config\\"
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/CMakeLists.txt
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/CMakeLists.txt	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/CMakeLists.txt	2025-01-11 23:22:13 UTC (rev 73427)
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.12)
+cmake_minimum_required(VERSION 3.14)
 project(harfbuzz)
 
 message(WARN "HarfBuzz has a Meson port and tries to migrate all the other build systems to it, please consider using it as we might remove our cmake port soon.")
@@ -6,20 +6,6 @@
 set(CMAKE_CXX_STANDARD 11)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
 
-## Limit framework build to Xcode generator
-if (BUILD_FRAMEWORK)
-  # for a framework build on macOS, use:
-  # cmake -DBUILD_FRAMEWORK=ON -Bbuild -H. -GXcode && cmake --build build
-  if (NOT "${CMAKE_GENERATOR}" STREQUAL "Xcode")
-    message(FATAL_ERROR
-      "You should use Xcode generator with BUILD_FRAMEWORK enabled")
-  endif ()
-  set (CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_32_64_BIT)")
-  set (CMAKE_MACOSX_RPATH ON)
-  set (BUILD_SHARED_LIBS ON)
-endif ()
-
-
 ## Disallow in-source builds, as CMake generated make files can collide with autotools ones
 if (NOT MSVC AND "${PROJECT_BINARY_DIR}" STREQUAL "${PROJECT_SOURCE_DIR}")
   message(FATAL_ERROR
@@ -73,6 +59,14 @@
   set (HB_HAVE_GLIB ON)
 endif ()
 
+if (APPLE)
+  option(BUILD_FRAMEWORK "Build as Apple Frameworks" OFF)
+endif ()
+if (BUILD_FRAMEWORK)
+  set (CMAKE_MACOSX_RPATH ON)
+  set (BUILD_SHARED_LIBS OFF)
+endif ()
+
 include_directories(AFTER
   ${PROJECT_SOURCE_DIR}/src
   ${PROJECT_BINARY_DIR}/src
@@ -168,7 +162,7 @@
      ${PROJECT_SOURCE_DIR}/src/hb-subset-plan.cc
      ${PROJECT_SOURCE_DIR}/src/hb-subset-plan.hh
      ${PROJECT_SOURCE_DIR}/src/hb-subset-plan-member-list.hh
-     ${PROJECT_SOURCE_DIR}/src/hb-subset-repacker.cc
+     ${PROJECT_SOURCE_DIR}/src/hb-subset-serialize.cc
      ${PROJECT_SOURCE_DIR}/src/hb-subset.cc
      ${PROJECT_SOURCE_DIR}/src/hb-subset.hh
      ${PROJECT_SOURCE_DIR}/src/hb-repacker.hh
@@ -219,7 +213,7 @@
 )
 set (subset_project_headers
      ${PROJECT_SOURCE_DIR}/src/hb-subset.h
-     ${PROJECT_SOURCE_DIR}/src/hb-subset-repacker.h
+     ${PROJECT_SOURCE_DIR}/src/hb-subset-serialize.h
 )
 
 ## Find and include needed header folders and libraries
@@ -506,6 +500,21 @@
 
   if (BUILD_SHARED_LIBS)
     set_target_properties(harfbuzz harfbuzz-icu PROPERTIES VISIBILITY_INLINES_HIDDEN TRUE)
+
+    if (BUILD_FRAMEWORK)
+      set_target_properties(harfbuzz harfbuzz-icu PROPERTIES
+        FRAMEWORK TRUE
+        FRAMEWORK_VERSION "${HB_VERSION}"
+        PUBLIC_HEADER "${project_headers}"
+        PRODUCT_BUNDLE_IDENTIFIER "harfbuzz.harfbuzz-icu"
+        XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
+        OUTPUT_NAME "harfbuzz-icu"
+        XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY ""
+        MACOSX_FRAMEWORK_IDENTIFIER "harfbuzz-icu"
+        MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${HB_VERSION}"
+        MACOSX_FRAMEWORK_BUNDLE_VERSION "${HB_VERSION}"
+      )
+    endif ()
   endif ()
 endif ()
 
@@ -513,12 +522,27 @@
 ## Define harfbuzz-subset library
 if (HB_BUILD_SUBSET)
   add_library(harfbuzz-subset ${subset_project_sources} ${subset_project_headers})
-  list(APPEND project_headers ${PROJECT_SOURCE_DIR}/src/hb-subset.h ${PROJECT_SOURCE_DIR}/src/hb-subset-repacker.h)
+  list(APPEND project_headers ${PROJECT_SOURCE_DIR}/src/hb-subset.h ${PROJECT_SOURCE_DIR}/src/hb-subset-serialize.h)
   add_dependencies(harfbuzz-subset harfbuzz)
   target_link_libraries(harfbuzz-subset harfbuzz ${THIRD_PARTY_LIBS})
 
   if (BUILD_SHARED_LIBS)
     set_target_properties(harfbuzz harfbuzz-subset PROPERTIES VISIBILITY_INLINES_HIDDEN TRUE)
+
+    if (BUILD_FRAMEWORK)
+      set_target_properties(harfbuzz harfbuzz-subset PROPERTIES
+        FRAMEWORK TRUE
+        FRAMEWORK_VERSION "${HB_VERSION}"
+        PUBLIC_HEADER "${project_headers}"
+        PRODUCT_BUNDLE_IDENTIFIER "harfbuzz.harfbuzz-subset"
+        XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
+        OUTPUT_NAME "harfbuzz-subset"
+        XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY ""
+        MACOSX_FRAMEWORK_IDENTIFIER "harfbuzz-subset"
+        MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${HB_VERSION}"
+        MACOSX_FRAMEWORK_BUNDLE_VERSION "${HB_VERSION}"
+      )
+    endif ()
   endif ()
 endif ()
 
@@ -568,7 +592,22 @@
   target_link_libraries(harfbuzz-gobject harfbuzz ${GOBJECT_LIBRARIES} ${THIRD_PARTY_LIBS})
 
   if (BUILD_SHARED_LIBS)
-    set_target_properties(harfbuzz-gobject PROPERTIES VISIBILITY_INLINES_HIDDEN TRUE)
+    set_target_properties(harfbuzz harfbuzz-gobject PROPERTIES VISIBILITY_INLINES_HIDDEN TRUE)
+
+    if (BUILD_FRAMEWORK)
+      set_target_properties(harfbuzz-gobject PROPERTIES
+        FRAMEWORK TRUE
+        FRAMEWORK_VERSION "${HB_VERSION}"
+        PUBLIC_HEADER "${project_headers}"
+        PRODUCT_BUNDLE_IDENTIFIER "harfbuzz.harfbuzz-gobject"
+        XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
+        OUTPUT_NAME "harfbuzz-gobject"
+        XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY ""
+        MACOSX_FRAMEWORK_IDENTIFIER "harfbuzz-gobject"
+        MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${HB_VERSION}"
+        MACOSX_FRAMEWORK_BUNDLE_VERSION "${HB_VERSION}"
+      )
+    endif ()
   endif ()
 endif ()
 
@@ -581,6 +620,21 @@
 
   if (BUILD_SHARED_LIBS)
     set_target_properties(harfbuzz-cairo PROPERTIES VISIBILITY_INLINES_HIDDEN TRUE)
+
+    if (BUILD_FRAMEWORK)
+      set_target_properties(harfbuzz-cairo PROPERTIES
+        FRAMEWORK TRUE
+        FRAMEWORK_VERSION "${HB_VERSION}"
+        PUBLIC_HEADER "${project_headers}"
+        PRODUCT_BUNDLE_IDENTIFIER "harfbuzz.harbuzz-cairo"
+        XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
+        OUTPUT_NAME "harfbuzz-cairo"
+        XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY ""
+        MACOSX_FRAMEWORK_IDENTIFIER "harfbuzz-cairo"
+        MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${HB_VERSION}"
+        MACOSX_FRAMEWORK_BUNDLE_VERSION "${HB_VERSION}"
+      )
+    endif ()
   endif ()
 endif()
 
@@ -719,8 +773,12 @@
   set (CMAKE_MACOSX_RPATH ON)
   set_target_properties(harfbuzz PROPERTIES
     FRAMEWORK TRUE
+    FRAMEWORK_VERSION "${HB_VERSION}"
     PUBLIC_HEADER "${project_headers}"
+    PRODUCT_BUNDLE_IDENTIFIER "harfbuzz"
     XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
+    OUTPUT_NAME "harfbuzz"
+    XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY ""
   )
   set (MACOSX_FRAMEWORK_IDENTIFIER "harfbuzz")
   set (MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${HB_VERSION}")
@@ -881,7 +939,8 @@
     ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
     LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
     RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
-    FRAMEWORK DESTINATION Library/Frameworks
+    FRAMEWORK DESTINATION Library/Frameworks 
+    COMPONENT runtime OPTIONAL
   )
   make_pkgconfig_pc_file("harfbuzz")
   install(EXPORT harfbuzzConfig
@@ -893,7 +952,8 @@
       ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
       LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
       RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
-      FRAMEWORK DESTINATION Library/Frameworks
+      FRAMEWORK DESTINATION Library/Frameworks 
+      COMPONENT runtime OPTIONAL
     )
     make_pkgconfig_pc_file("harfbuzz-icu")
   endif ()
@@ -902,13 +962,19 @@
       ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
       LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
       RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
-      FRAMEWORK DESTINATION Library/Frameworks
+      FRAMEWORK DESTINATION Library/Frameworks 
+      COMPONENT runtime OPTIONAL
     )
     make_pkgconfig_pc_file("harfbuzz-cairo")
   endif ()
   if (HB_BUILD_SUBSET)
     install(TARGETS harfbuzz-subset
+      EXPORT harfbuzz-subset
       ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+      LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+      RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+      FRAMEWORK DESTINATION Library/Frameworks 
+      COMPONENT runtime OPTIONAL
     )
     make_pkgconfig_pc_file("harfbuzz-subset")
   endif ()
@@ -943,9 +1009,12 @@
   endif ()
   if (HB_HAVE_GOBJECT)
     install(TARGETS harfbuzz-gobject
+      EXPORT harfbuzz-gobject
       ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
       LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
       RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+      FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR} 
+      COMPONENT runtime OPTIONAL
     )
     make_pkgconfig_pc_file("harfbuzz-gobject")
     if (HB_HAVE_INTROSPECTION)

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/NEWS
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/NEWS	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/NEWS	2025-01-11 23:22:13 UTC (rev 73427)
@@ -1,3 +1,32 @@
+Overview of changes leading to 10.2.0
+Saturday, January 11, 2025
+====================================
+- Consider Unicode Variation Selectors when subsetting “cmap” table.
+- Guard hb_cairo_glyphs_from_buffer() against malformed UTF-8 strings.
+- Fix incorrect “COLR” v1 glyph scaling in hb-cairo.
+- Use locale-independent parsing of double numbers is “hb-subset” command line
+  tool.
+- Fix incorrect zeroing of advance width of base glyphs in various “Courier New”
+  font versions due to incorrect “GDEF” glyph classes.
+- Fix handling of long language codes with “HB_LEAN” configuration.
+- Update OpenType language system registry.
+- Allow all Myanmar tone marks (including visarga) in any order
+- Don’t insert U+25CC DOTTED CIRCLE before superscript/subscript digits
+- Handle Garay script as right to left script.
+- New API for serializing font tables and potentially repacking them in optimal
+  way. This was a previously experimental-only API.
+- New API for converting font variation setting from and to strings.
+- Various build fixes
+- Various subsetter and instancer fixes.
+
+- New API:
++hb_subset_serialize_link_t
++hb_subset_serialize_object_t
++hb_subset_serialize_or_fail()
++hb_subset_axis_range_from_string()
++hb_subset_axis_range_to_string()
+
+
 Overview of changes leading to 10.1.0
 Tuesday, November 5, 2024
 ====================================

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/meson.build
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/meson.build	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/meson.build	2025-01-11 23:22:13 UTC (rev 73427)
@@ -1,6 +1,6 @@
 project('harfbuzz', 'c', 'cpp',
   meson_version: '>= 0.55.0',
-  version: '10.1.0',
+  version: '10.2.0',
   default_options: [
     'cpp_eh=none',          # Just to support msvc, we are passing -fno-exceptions also anyway
     # 'cpp_rtti=false',     # Do NOT enable, wraps inherit it and ICU needs RTTI

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/OT/Color/COLR/COLR.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/OT/Color/COLR/COLR.hh	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/OT/Color/COLR/COLR.hh	2025-01-11 23:22:13 UTC (rev 73427)
@@ -1003,7 +1003,7 @@
   void paint_glyph (hb_paint_context_t *c) const
   {
     TRACE_PAINT (this);
-    (this+transform).paint_glyph (c);
+    (this+transform).paint_glyph (c); // This does a push_transform()
     c->recurse (this+src);
     c->funcs->pop_transform (c->data);
   }

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-def.py
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-def.py	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-def.py	2025-01-11 23:22:13 UTC (rev 73427)
@@ -20,7 +20,6 @@
 	# Move these to harfbuzz-sections.txt when got stable
 	experimental_symbols = \
 """hb_shape_justify
-hb_subset_repack_or_fail
 hb_subset_input_override_name_table
 """.splitlines ()
 	symbols = [x for x in symbols if x not in experimental_symbols]

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-indic-table.py
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-indic-table.py	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-indic-table.py	2025-01-11 23:22:13 UTC (rev 73427)
@@ -102,6 +102,7 @@
     'CM',
     'Symbol',
     'CS',
+    'SMPst',
   ],
   'khmer' : [
     'VAbv',
@@ -435,6 +436,8 @@
 indic_data = {}
 for k, (cat, pos, block) in combined.items():
   cat = category_map[cat]
+  if cat == 'SM' and pos == 'Not_Applicable':
+    cat = 'SMPst'
   pos = position_map[pos]
   indic_data[k] = (cat, pos, block)
 
@@ -454,7 +457,7 @@
 # Keep in sync with CONSONANT_FLAGS in the shaper
 consonant_categories = ('C', 'CS', 'Ra','CM', 'V', 'PLACEHOLDER', 'DOTTEDCIRCLE')
 matra_categories = ('M', 'MPst')
-smvd_categories = ('SM', 'VD', 'A', 'Symbol')
+smvd_categories = ('SM', 'SMPst', 'VD', 'A', 'Symbol')
 for k, (cat, pos, block) in indic_data.items():
   if cat in consonant_categories:
     pos = 'BASE_C'
@@ -530,6 +533,7 @@
 	"Repha":		'Rf',
 	"PLACEHOLDER":		'GB',
 	"DOTTEDCIRCLE":		'DC',
+	"SMPst":		'SP',
 	"VPst":			'VR',
 	"VPre":			'VL',
 	"Robatic":		'Rt',

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/harfbuzz-config.cmake.in
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/harfbuzz-config.cmake.in	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/harfbuzz-config.cmake.in	2025-01-11 23:22:13 UTC (rev 73427)
@@ -2,6 +2,8 @@
 
 set_and_check(HARFBUZZ_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@")
 
+set(HARFBUZZ_VERSION "@HARFBUZZ_VERSION@")
+
 # Add the libraries.
 add_library(harfbuzz::harfbuzz @HB_LIBRARY_TYPE@ IMPORTED)
 set_target_properties(harfbuzz::harfbuzz PROPERTIES

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/harfbuzz-subset.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/harfbuzz-subset.cc	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/harfbuzz-subset.cc	2025-01-11 23:22:13 UTC (rev 73427)
@@ -58,7 +58,7 @@
 #include "hb-subset-instancer-iup.cc"
 #include "hb-subset-instancer-solver.cc"
 #include "hb-subset-plan.cc"
-#include "hb-subset-repacker.cc"
+#include "hb-subset-serialize.cc"
 #include "hb-subset.cc"
 #include "hb-ucd.cc"
 #include "hb-unicode.cc"

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-cairo.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-cairo.cc	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-cairo.cc	2025-01-11 23:22:13 UTC (rev 73427)
@@ -180,7 +180,7 @@
 
   hb_position_t x_scale, y_scale;
   hb_font_get_scale (font, &x_scale, &y_scale);
-  cairo_scale (cr, x_scale, y_scale);
+  cairo_scale (cr, x_scale, -y_scale);
 
   cairo_glyph_t cairo_glyph = { glyph, 0, 0 };
   cairo_set_scaled_font (cr, c->scaled_font);
@@ -597,7 +597,9 @@
 
   hb_position_t x_scale, y_scale;
   hb_font_get_scale (font, &x_scale, &y_scale);
-  cairo_scale (cr, +1./x_scale, -1./y_scale);
+  cairo_scale (cr,
+	       +1. / (x_scale ? x_scale : 1),
+	       -1. / (y_scale ? y_scale : 1));
 
   hb_font_draw_glyph (font, glyph, hb_cairo_draw_get_funcs (), cr);
 
@@ -628,7 +630,9 @@
   hb_color_t color = HB_COLOR (0, 0, 0, 255);
   hb_position_t x_scale, y_scale;
   hb_font_get_scale (font, &x_scale, &y_scale);
-  cairo_scale (cr, +1./x_scale, -1./y_scale);
+  cairo_scale (cr,
+	       +1. / (x_scale ? x_scale : 1),
+	       -1. / (y_scale ? y_scale : 1));
 
   hb_cairo_context_t c;
   c.scaled_font = scaled_font;
@@ -1000,6 +1004,7 @@
 	    end = start + hb_glyph[i].cluster - hb_glyph[i+1].cluster;
 	  else
 	    end = (const char *) hb_utf_offset_to_pointer<hb_utf8_t> ((const uint8_t *) start,
+								      (const uint8_t *) utf8, utf8_len,
 								      (signed) (hb_glyph[i].cluster - hb_glyph[i+1].cluster));
 	  (*clusters)[cluster].num_bytes = end - start;
 	  start = end;
@@ -1020,6 +1025,7 @@
 	    end = start + hb_glyph[i].cluster - hb_glyph[i-1].cluster;
 	  else
 	    end = (const char *) hb_utf_offset_to_pointer<hb_utf8_t> ((const uint8_t *) start,
+								      (const uint8_t *) utf8, utf8_len,
 								      (signed) (hb_glyph[i].cluster - hb_glyph[i-1].cluster));
 	  (*clusters)[cluster].num_bytes = end - start;
 	  start = end;

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.cc	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.cc	2025-01-11 23:22:13 UTC (rev 73427)
@@ -625,6 +625,9 @@
     /* Unicode-14.0 additions */
     case HB_SCRIPT_OLD_UYGHUR:
 
+    /* Unicode-16.0 additions */
+    case HB_SCRIPT_GARAY:
+
       return HB_DIRECTION_RTL;
 
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-config.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-config.hh	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-config.hh	2025-01-11 23:22:13 UTC (rev 73427)
@@ -68,8 +68,6 @@
 #define HB_NO_FACE_COLLECT_UNICODES
 #define HB_NO_GETENV
 #define HB_NO_HINTING
-#define HB_NO_LANGUAGE_LONG
-#define HB_NO_LANGUAGE_PRIVATE_SUBTAG
 #define HB_NO_LAYOUT_FEATURE_PARAMS
 #define HB_NO_LAYOUT_COLLECT_GLYPHS
 #define HB_NO_LAYOUT_RARELY_USED

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext-font.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext-font.cc	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext-font.cc	2025-01-11 23:22:13 UTC (rev 73427)
@@ -34,8 +34,12 @@
 #include "hb-font.hh"
 #include "hb-machinery.hh"
 
-#if MAC_OS_X_VERSION_MIN_REQUIRED < 101100
+#if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1080) \
+    || (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 60000) \
+    || (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 90000)
 #  define kCTFontOrientationDefault kCTFontDefaultOrientation
+#  define kCTFontOrientationHorizontal kCTFontHorizontalOrientation
+#  define kCTFontOrientationVertical kCTFontVerticalOrientation
 #endif
 
 #define MAX_GLYPHS 64u

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.cc	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.cc	2025-01-11 23:22:13 UTC (rev 73427)
@@ -470,7 +470,8 @@
  * @tag: The #hb_tag_t of the table to query
  *
  * Fetches a reference to the specified table within
- * the specified face.
+ * the specified face. Returns an empty blob if referencing table data is not
+ * possible.
  *
  * Return value: (transfer full): A pointer to the @tag table within @face
  *

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft-colr.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft-colr.hh	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft-colr.hh	2025-01-11 23:22:13 UTC (rev 73427)
@@ -547,7 +547,9 @@
     c.funcs->push_root_transform (c.data, font);
 
     if (is_bounded)
+     {
       c.recurse (paint);
+     }
 
     c.funcs->pop_transform (c.data);
     c.funcs->pop_clip (c.data);

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft.cc	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft.cc	2025-01-11 23:22:13 UTC (rev 73427)
@@ -931,11 +931,15 @@
   hb_lock_t lock (ft_font->lock);
   FT_Face ft_face = ft_font->ft_face;
 
+  FT_Long load_flags = ft_font->load_flags | FT_LOAD_NO_BITMAP | FT_LOAD_COLOR;
+#if (FREETYPE_MAJOR*10000 + FREETYPE_MINOR*100 + FREETYPE_PATCH) >= 21301
+  load_flags |= FT_LOAD_NO_SVG;
+#endif
+
   /* We release the lock before calling into glyph callbacks, such that
    * eg. draw API can call back into the face.*/
 
-  if (unlikely (FT_Load_Glyph (ft_face, gid,
-			       ft_font->load_flags | FT_LOAD_COLOR)))
+  if (unlikely (FT_Load_Glyph (ft_face, gid, load_flags)))
     return;
 
   if (ft_face->glyph->format == FT_GLYPH_FORMAT_OUTLINE)

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-null.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-null.hh	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-null.hh	2025-01-11 23:22:13 UTC (rev 73427)
@@ -176,7 +176,7 @@
 static inline Type& Crap () {
   static_assert (hb_null_size (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
   Type *obj = reinterpret_cast<Type *> (_hb_CrapPool);
-  memcpy (obj, std::addressof (Null (Type)), sizeof (*obj));
+  memcpy (reinterpret_cast<void*>(obj), std::addressof (Null (Type)), sizeof (*obj));
   return *obj;
 }
 template <typename QType>

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cmap-table.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cmap-table.hh	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cmap-table.hh	2025-01-11 23:22:13 UTC (rev 73427)
@@ -1397,6 +1397,9 @@
     hb_vector_t<hb_pair_t<unsigned, unsigned>> obj_indices;
     for (int i = src_tbl->record.len - 1; i >= 0; i--)
     {
+      if (!unicodes->has(src_tbl->record[i].varSelector))
+        continue;
+
       hb_pair_t<unsigned, unsigned> result = src_tbl->record[i].copy (c, unicodes, glyphs_requested, glyph_map, base);
       if (result.first || result.second)
 	obj_indices.push (result);
@@ -1453,6 +1456,7 @@
   {
     + hb_iter (record)
     | hb_filter (hb_bool, &VariationSelectorRecord::nonDefaultUVS)
+    | hb_filter (unicodes, &VariationSelectorRecord::varSelector)
     | hb_map (&VariationSelectorRecord::nonDefaultUVS)
     | hb_map (hb_add (this))
     | hb_apply ([=] (const NonDefaultUVS& _) { _.closure_glyphs (unicodes, glyphset); })

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos.hh	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos.hh	2025-01-11 23:22:13 UTC (rev 73427)
@@ -1462,6 +1462,7 @@
 	unsigned int this_comp = _hb_glyph_info_get_lig_comp (&buffer->cur());
 	if (this_comp == 0)
 	  this_comp = last_num_components;
+	assert (components_so_far >= last_num_components);
 	unsigned int new_lig_comp = components_so_far - last_num_components +
 				    hb_min (this_comp, last_num_components);
 	  _hb_glyph_info_set_lig_props_for_mark (&buffer->cur(), lig_id, new_lig_comp);
@@ -1487,6 +1488,7 @@
       unsigned this_comp = _hb_glyph_info_get_lig_comp (&buffer->info[i]);
       if (!this_comp) break;
 
+      assert (components_so_far >= last_num_components);
       unsigned new_lig_comp = components_so_far - last_num_components +
 			      hb_min (this_comp, last_num_components);
       _hb_glyph_info_set_lig_props_for_mark (&buffer->info[i], lig_id, new_lig_comp);
@@ -1542,6 +1544,7 @@
   TRACE_APPLY (nullptr);
 
   hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_context;
+  assert (start_index >= 1);
   skippy_iter.reset (start_index - 1);
   skippy_iter.set_match_func (match_func, match_data);
   skippy_iter.set_glyph_data (lookahead);
@@ -1852,6 +1855,7 @@
   if (match_positions != match_positions_input)
     hb_free (match_positions);
 
+  assert (end >= 0);
   (void) buffer->move_to (end);
 }
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout.cc	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout.cc	2025-01-11 23:22:13 UTC (rev 73427)
@@ -246,6 +246,18 @@
     /* sha1sum: c26e41d567ed821bed997e937bc0c41435689e85  Padauk.ttf
      *  "Padauk Regular" "Version 2.5", see https://crbug.com/681813 */
     case HB_CODEPOINT_ENCODE3 (1004, 59092, 14836):
+    /* 88d2006ca084f04af2df1954ed714a8c71e8400f  Courier New.ttf from macOS 15 */
+    case HB_CODEPOINT_ENCODE3 (588, 5078, 14418):
+    /* 608e3ebb6dd1aee521cff08eb07d500a2c59df68  Courier New Bold.ttf from macOS 15 */
+    case HB_CODEPOINT_ENCODE3 (588, 5078, 14238):
+    /* d13221044ff054efd78f1cd8631b853c3ce85676  cour.ttf from Windows 10 */
+    case HB_CODEPOINT_ENCODE3 (894, 17162, 33960):
+    /* 68ed4a22d8067fcf1622ac6f6e2f4d3a2e3ec394  courbd.ttf from Windows 10 */
+    case HB_CODEPOINT_ENCODE3 (894, 17154, 34472):
+    /* 4cdb0259c96b7fd7c103821bb8f08f7cc6b211d7  cour.ttf from Windows 8.1 */
+    case HB_CODEPOINT_ENCODE3 (816, 7868, 17052):
+    /* 920483d8a8ed37f7f0afdabbe7f679aece7c75d8  courbd.ttf from Windows 8.1 */
+    case HB_CODEPOINT_ENCODE3 (816, 7868, 17138):
       return true;
   }
   return false;

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-os2-table.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-os2-table.hh	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-os2-table.hh	2025-01-11 23:22:13 UTC (rev 73427)
@@ -284,8 +284,8 @@
         os2_prime->usWidthClass = width_class;
     }
 
-    os2_prime->usFirstCharIndex = hb_min (0xFFFFu, c->plan->unicodes.get_min ());
-    os2_prime->usLastCharIndex  = hb_min (0xFFFFu, c->plan->unicodes.get_max ());
+    os2_prime->usFirstCharIndex = hb_min (0xFFFFu, c->plan->os2_info.min_cmap_codepoint);
+    os2_prime->usLastCharIndex  = hb_min (0xFFFFu, c->plan->os2_info.max_cmap_codepoint);
 
     if (c->plan->flags & HB_SUBSET_FLAGS_NO_PRUNE_UNICODE_RANGES)
       return_trace (true);

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shaper-indic-machine.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shaper-indic-machine.hh	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shaper-indic-machine.hh	2025-01-11 23:22:13 UTC (rev 73427)
@@ -68,6 +68,7 @@
 #define indic_syllable_machine_ex_Ra 15u
 #define indic_syllable_machine_ex_Repha 14u
 #define indic_syllable_machine_ex_SM 8u
+#define indic_syllable_machine_ex_SMPst 57u
 #define indic_syllable_machine_ex_Symbol 17u
 #define indic_syllable_machine_ex_V 2u
 #define indic_syllable_machine_ex_VD 9u
@@ -76,251 +77,916 @@
 #define indic_syllable_machine_ex_ZWNJ 5u
 
 
-#line 80 "hb-ot-shaper-indic-machine.hh"
+#line 81 "hb-ot-shaper-indic-machine.hh"
 static const unsigned char _indic_syllable_machine_trans_keys[] = {
-	8u, 8u, 4u, 13u, 5u, 13u, 5u, 13u, 13u, 13u, 4u, 13u, 4u, 13u, 4u, 13u, 
-	8u, 8u, 5u, 13u, 5u, 13u, 13u, 13u, 4u, 13u, 4u, 13u, 4u, 13u, 4u, 13u, 
-	8u, 8u, 5u, 13u, 5u, 13u, 13u, 13u, 4u, 13u, 4u, 13u, 4u, 13u, 8u, 8u, 
-	5u, 13u, 5u, 13u, 13u, 13u, 4u, 13u, 4u, 13u, 5u, 13u, 8u, 8u, 1u, 18u, 
-	3u, 16u, 3u, 16u, 4u, 16u, 1u, 15u, 5u, 9u, 5u, 9u, 9u, 9u, 5u, 9u, 
-	1u, 15u, 1u, 15u, 1u, 15u, 3u, 13u, 4u, 13u, 5u, 13u, 5u, 13u, 4u, 13u, 
-	5u, 9u, 3u, 9u, 5u, 9u, 3u, 16u, 3u, 16u, 3u, 16u, 3u, 16u, 4u, 16u, 
-	1u, 15u, 3u, 16u, 3u, 16u, 4u, 16u, 1u, 15u, 5u, 9u, 9u, 9u, 5u, 9u, 
-	1u, 15u, 1u, 15u, 3u, 13u, 4u, 13u, 5u, 13u, 5u, 13u, 4u, 13u, 5u, 9u, 
-	5u, 9u, 3u, 9u, 5u, 9u, 3u, 16u, 3u, 16u, 4u, 13u, 3u, 16u, 3u, 16u, 
-	4u, 16u, 1u, 15u, 3u, 16u, 1u, 15u, 5u, 9u, 9u, 9u, 5u, 9u, 1u, 15u, 
-	1u, 15u, 3u, 13u, 4u, 13u, 5u, 13u, 5u, 13u, 3u, 16u, 4u, 13u, 5u, 9u, 
-	5u, 9u, 3u, 9u, 5u, 9u, 3u, 16u, 4u, 13u, 4u, 13u, 3u, 16u, 3u, 16u, 
-	4u, 16u, 1u, 15u, 3u, 16u, 1u, 15u, 5u, 9u, 9u, 9u, 5u, 9u, 1u, 15u, 
-	1u, 15u, 3u, 13u, 4u, 13u, 5u, 13u, 5u, 13u, 3u, 16u, 4u, 13u, 5u, 9u, 
-	5u, 9u, 3u, 9u, 5u, 9u, 1u, 16u, 3u, 16u, 1u, 16u, 4u, 13u, 5u, 13u, 
-	5u, 13u, 9u, 9u, 5u, 9u, 1u, 15u, 3u, 9u, 5u, 9u, 5u, 9u, 9u, 9u, 
+	8u, 57u, 4u, 57u, 5u, 57u, 5u, 57u, 13u, 13u, 4u, 57u, 4u, 57u, 4u, 57u, 
+	8u, 57u, 5u, 57u, 5u, 57u, 13u, 13u, 4u, 57u, 4u, 57u, 4u, 57u, 4u, 57u, 
+	8u, 57u, 5u, 57u, 5u, 57u, 13u, 13u, 4u, 57u, 4u, 57u, 4u, 57u, 8u, 57u, 
+	5u, 57u, 5u, 57u, 13u, 13u, 4u, 57u, 4u, 57u, 5u, 57u, 8u, 57u, 1u, 57u, 
+	3u, 57u, 3u, 57u, 4u, 57u, 1u, 57u, 5u, 57u, 5u, 57u, 9u, 9u, 5u, 9u, 
+	1u, 57u, 1u, 57u, 1u, 57u, 3u, 57u, 4u, 57u, 5u, 57u, 5u, 57u, 4u, 57u, 
+	5u, 57u, 3u, 57u, 5u, 57u, 3u, 57u, 3u, 57u, 3u, 57u, 3u, 57u, 4u, 57u, 
+	1u, 57u, 3u, 57u, 3u, 57u, 4u, 57u, 1u, 57u, 5u, 57u, 9u, 9u, 5u, 9u, 
+	1u, 57u, 1u, 57u, 3u, 57u, 4u, 57u, 5u, 57u, 5u, 57u, 4u, 57u, 5u, 57u, 
+	5u, 57u, 3u, 57u, 5u, 57u, 3u, 57u, 3u, 57u, 4u, 57u, 3u, 57u, 3u, 57u, 
+	4u, 57u, 1u, 57u, 3u, 57u, 1u, 57u, 5u, 57u, 9u, 9u, 5u, 9u, 1u, 57u, 
+	1u, 57u, 3u, 57u, 4u, 57u, 5u, 57u, 5u, 57u, 3u, 57u, 4u, 57u, 5u, 57u, 
+	5u, 57u, 3u, 57u, 5u, 57u, 3u, 57u, 4u, 57u, 4u, 57u, 3u, 57u, 3u, 57u, 
+	4u, 57u, 1u, 57u, 3u, 57u, 1u, 57u, 5u, 57u, 9u, 9u, 5u, 9u, 1u, 57u, 
+	1u, 57u, 3u, 57u, 4u, 57u, 5u, 57u, 5u, 57u, 3u, 57u, 4u, 57u, 5u, 57u, 
+	5u, 57u, 3u, 57u, 5u, 57u, 1u, 57u, 3u, 57u, 1u, 57u, 4u, 57u, 5u, 57u, 
+	5u, 57u, 9u, 9u, 5u, 9u, 1u, 57u, 3u, 57u, 5u, 57u, 5u, 57u, 9u, 9u, 
 	5u, 9u, 1u, 15u, 0
 };
 
 static const char _indic_syllable_machine_key_spans[] = {
-	1, 10, 9, 9, 1, 10, 10, 10, 
-	1, 9, 9, 1, 10, 10, 10, 10, 
-	1, 9, 9, 1, 10, 10, 10, 1, 
-	9, 9, 1, 10, 10, 9, 1, 18, 
-	14, 14, 13, 15, 5, 5, 1, 5, 
-	15, 15, 15, 11, 10, 9, 9, 10, 
-	5, 7, 5, 14, 14, 14, 14, 13, 
-	15, 14, 14, 13, 15, 5, 1, 5, 
-	15, 15, 11, 10, 9, 9, 10, 5, 
-	5, 7, 5, 14, 14, 10, 14, 14, 
-	13, 15, 14, 15, 5, 1, 5, 15, 
-	15, 11, 10, 9, 9, 14, 10, 5, 
-	5, 7, 5, 14, 10, 10, 14, 14, 
-	13, 15, 14, 15, 5, 1, 5, 15, 
-	15, 11, 10, 9, 9, 14, 10, 5, 
-	5, 7, 5, 16, 14, 16, 10, 9, 
-	9, 1, 5, 15, 7, 5, 5, 1, 
+	50, 54, 53, 53, 1, 54, 54, 54, 
+	50, 53, 53, 1, 54, 54, 54, 54, 
+	50, 53, 53, 1, 54, 54, 54, 50, 
+	53, 53, 1, 54, 54, 53, 50, 57, 
+	55, 55, 54, 57, 53, 53, 1, 5, 
+	57, 57, 57, 55, 54, 53, 53, 54, 
+	53, 55, 53, 55, 55, 55, 55, 54, 
+	57, 55, 55, 54, 57, 53, 1, 5, 
+	57, 57, 55, 54, 53, 53, 54, 53, 
+	53, 55, 53, 55, 55, 54, 55, 55, 
+	54, 57, 55, 57, 53, 1, 5, 57, 
+	57, 55, 54, 53, 53, 55, 54, 53, 
+	53, 55, 53, 55, 54, 54, 55, 55, 
+	54, 57, 55, 57, 53, 1, 5, 57, 
+	57, 55, 54, 53, 53, 55, 54, 53, 
+	53, 55, 53, 57, 55, 57, 54, 53, 
+	53, 1, 5, 57, 55, 53, 53, 1, 
 	5, 15
 };
 
 static const short _indic_syllable_machine_index_offsets[] = {
-	0, 2, 13, 23, 33, 35, 46, 57, 
-	68, 70, 80, 90, 92, 103, 114, 125, 
-	136, 138, 148, 158, 160, 171, 182, 193, 
-	195, 205, 215, 217, 228, 239, 249, 251, 
-	270, 285, 300, 314, 330, 336, 342, 344, 
-	350, 366, 382, 398, 410, 421, 431, 441, 
-	452, 458, 466, 472, 487, 502, 517, 532, 
-	546, 562, 577, 592, 606, 622, 628, 630, 
-	636, 652, 668, 680, 691, 701, 711, 722, 
-	728, 734, 742, 748, 763, 778, 789, 804, 
-	819, 833, 849, 864, 880, 886, 888, 894, 
-	910, 926, 938, 949, 959, 969, 984, 995, 
-	1001, 1007, 1015, 1021, 1036, 1047, 1058, 1073, 
-	1088, 1102, 1118, 1133, 1149, 1155, 1157, 1163, 
-	1179, 1195, 1207, 1218, 1228, 1238, 1253, 1264, 
-	1270, 1276, 1284, 1290, 1307, 1322, 1339, 1350, 
-	1360, 1370, 1372, 1378, 1394, 1402, 1408, 1414, 
-	1416, 1422
+	0, 51, 106, 160, 214, 216, 271, 326, 
+	381, 432, 486, 540, 542, 597, 652, 707, 
+	762, 813, 867, 921, 923, 978, 1033, 1088, 
+	1139, 1193, 1247, 1249, 1304, 1359, 1413, 1464, 
+	1522, 1578, 1634, 1689, 1747, 1801, 1855, 1857, 
+	1863, 1921, 1979, 2037, 2093, 2148, 2202, 2256, 
+	2311, 2365, 2421, 2475, 2531, 2587, 2643, 2699, 
+	2754, 2812, 2868, 2924, 2979, 3037, 3091, 3093, 
+	3099, 3157, 3215, 3271, 3326, 3380, 3434, 3489, 
+	3543, 3597, 3653, 3707, 3763, 3819, 3874, 3930, 
+	3986, 4041, 4099, 4155, 4213, 4267, 4269, 4275, 
+	4333, 4391, 4447, 4502, 4556, 4610, 4666, 4721, 
+	4775, 4829, 4885, 4939, 4995, 5050, 5105, 5161, 
+	5217, 5272, 5330, 5386, 5444, 5498, 5500, 5506, 
+	5564, 5622, 5678, 5733, 5787, 5841, 5897, 5952, 
+	6006, 6060, 6116, 6170, 6228, 6284, 6342, 6397, 
+	6451, 6505, 6507, 6513, 6571, 6627, 6681, 6735, 
+	6737, 6743
 };
 
 static const unsigned char _indic_syllable_machine_indicies[] = {
-	1, 0, 2, 3, 3, 4, 5, 0, 
-	0, 0, 0, 4, 0, 3, 3, 4, 
-	6, 0, 0, 0, 0, 4, 0, 3, 
-	3, 4, 5, 0, 0, 0, 0, 4, 
-	0, 4, 0, 7, 3, 3, 4, 5, 
-	0, 0, 0, 0, 4, 0, 2, 3, 
-	3, 4, 5, 0, 0, 0, 8, 4, 
-	0, 10, 11, 11, 12, 13, 9, 9, 
-	9, 9, 12, 9, 14, 9, 11, 11, 
-	12, 15, 9, 9, 9, 9, 12, 9, 
-	11, 11, 12, 13, 9, 9, 9, 9, 
-	12, 9, 12, 9, 16, 11, 11, 12, 
-	13, 9, 9, 9, 9, 12, 9, 10, 
-	11, 11, 12, 13, 9, 9, 9, 17, 
-	12, 9, 10, 11, 11, 12, 13, 9, 
-	9, 9, 18, 12, 9, 20, 21, 21, 
-	22, 23, 19, 19, 19, 24, 22, 19, 
-	25, 19, 21, 21, 22, 27, 26, 26, 
-	26, 26, 22, 26, 21, 21, 22, 23, 
-	19, 19, 19, 19, 22, 19, 22, 26, 
-	20, 21, 21, 22, 23, 19, 19, 19, 
-	19, 22, 19, 28, 21, 21, 22, 23, 
-	19, 19, 19, 19, 22, 19, 30, 31, 
-	31, 32, 33, 29, 29, 29, 34, 32, 
+	1, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 1, 0, 2, 3, 3, 4, 5, 
+	0, 0, 0, 0, 4, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	5, 0, 3, 3, 4, 6, 0, 0, 
+	0, 0, 4, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 6, 0, 
+	3, 3, 4, 5, 0, 0, 0, 0, 
+	4, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 5, 0, 4, 0, 
+	7, 3, 3, 4, 5, 0, 0, 0, 
+	0, 4, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 5, 0, 2, 
+	3, 3, 4, 5, 0, 0, 0, 8, 
+	4, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 5, 0, 10, 11, 
+	11, 12, 13, 9, 9, 9, 9, 12, 
+	9, 9, 9, 9, 9, 9, 9, 9, 
+	9, 9, 9, 9, 9, 9, 9, 9, 
+	9, 9, 9, 9, 9, 9, 9, 9, 
+	9, 9, 9, 9, 9, 9, 9, 9, 
+	9, 9, 9, 9, 9, 9, 9, 9, 
+	9, 9, 9, 13, 9, 14, 9, 9, 
+	9, 9, 9, 9, 9, 9, 9, 9, 
+	9, 9, 9, 9, 9, 9, 9, 9, 
+	9, 9, 9, 9, 9, 9, 9, 9, 
+	9, 9, 9, 9, 9, 9, 9, 9, 
+	9, 9, 9, 9, 9, 9, 9, 9, 
+	9, 9, 9, 9, 9, 9, 14, 9, 
+	11, 11, 12, 15, 9, 9, 9, 9, 
+	12, 9, 9, 9, 9, 9, 9, 9, 
+	9, 9, 9, 9, 9, 9, 9, 9, 
+	9, 9, 9, 9, 9, 9, 9, 9, 
+	9, 9, 9, 9, 9, 9, 9, 9, 
+	9, 9, 9, 9, 9, 9, 9, 9, 
+	9, 9, 9, 9, 15, 9, 11, 11, 
+	12, 13, 9, 9, 9, 9, 12, 9, 
+	9, 9, 9, 9, 9, 9, 9, 9, 
+	9, 9, 9, 9, 9, 9, 9, 9, 
+	9, 9, 9, 9, 9, 9, 9, 9, 
+	9, 9, 9, 9, 9, 9, 9, 9, 
+	9, 9, 9, 9, 9, 9, 9, 9, 
+	9, 9, 13, 9, 12, 9, 16, 11, 
+	11, 12, 13, 9, 9, 9, 9, 12, 
+	9, 9, 9, 9, 9, 9, 9, 9, 
+	9, 9, 9, 9, 9, 9, 9, 9, 
+	9, 9, 9, 9, 9, 9, 9, 9, 
+	9, 9, 9, 9, 9, 9, 9, 9, 
+	9, 9, 9, 9, 9, 9, 9, 9, 
+	9, 9, 9, 13, 9, 10, 11, 11, 
+	12, 13, 9, 9, 9, 17, 12, 9, 
+	9, 9, 9, 9, 9, 9, 9, 9, 
+	9, 9, 9, 9, 9, 9, 9, 9, 
+	9, 9, 9, 9, 9, 9, 9, 9, 
+	9, 9, 9, 9, 9, 9, 9, 9, 
+	9, 9, 9, 9, 9, 9, 9, 9, 
+	9, 9, 13, 9, 10, 11, 11, 12, 
+	13, 9, 9, 9, 18, 12, 9, 9, 
+	9, 9, 9, 9, 9, 9, 9, 9, 
+	9, 9, 9, 9, 9, 9, 9, 9, 
+	9, 9, 9, 9, 9, 9, 9, 9, 
+	9, 9, 9, 9, 9, 9, 9, 9, 
+	9, 9, 9, 9, 9, 9, 9, 9, 
+	9, 13, 9, 20, 21, 21, 22, 23, 
+	19, 19, 19, 24, 22, 19, 19, 19, 
+	19, 19, 19, 19, 19, 19, 19, 19, 
+	19, 19, 19, 19, 19, 19, 19, 19, 
+	19, 19, 19, 19, 19, 19, 19, 19, 
+	19, 19, 19, 19, 19, 19, 19, 19, 
+	19, 19, 19, 19, 19, 19, 19, 19, 
+	23, 19, 25, 19, 19, 19, 19, 19, 
+	19, 19, 19, 19, 19, 19, 19, 19, 
+	19, 19, 19, 19, 19, 19, 19, 19, 
+	19, 19, 19, 19, 19, 19, 19, 19, 
+	19, 19, 19, 19, 19, 19, 19, 19, 
+	19, 19, 19, 19, 19, 19, 19, 19, 
+	19, 19, 19, 25, 19, 21, 21, 22, 
+	27, 26, 26, 26, 26, 22, 26, 26, 
+	26, 26, 26, 26, 26, 26, 26, 26, 
+	26, 26, 26, 26, 26, 26, 26, 26, 
+	26, 26, 26, 26, 26, 26, 26, 26, 
+	26, 26, 26, 26, 26, 26, 26, 26, 
+	26, 26, 26, 26, 26, 26, 26, 26, 
+	26, 27, 26, 21, 21, 22, 23, 19, 
+	19, 19, 19, 22, 19, 19, 19, 19, 
+	19, 19, 19, 19, 19, 19, 19, 19, 
+	19, 19, 19, 19, 19, 19, 19, 19, 
+	19, 19, 19, 19, 19, 19, 19, 19, 
+	19, 19, 19, 19, 19, 19, 19, 19, 
+	19, 19, 19, 19, 19, 19, 19, 23, 
+	19, 22, 26, 20, 21, 21, 22, 23, 
+	19, 19, 19, 19, 22, 19, 19, 19, 
+	19, 19, 19, 19, 19, 19, 19, 19, 
+	19, 19, 19, 19, 19, 19, 19, 19, 
+	19, 19, 19, 19, 19, 19, 19, 19, 
+	19, 19, 19, 19, 19, 19, 19, 19, 
+	19, 19, 19, 19, 19, 19, 19, 19, 
+	23, 19, 28, 21, 21, 22, 23, 19, 
+	19, 19, 19, 22, 19, 19, 19, 19, 
+	19, 19, 19, 19, 19, 19, 19, 19, 
+	19, 19, 19, 19, 19, 19, 19, 19, 
+	19, 19, 19, 19, 19, 19, 19, 19, 
+	19, 19, 19, 19, 19, 19, 19, 19, 
+	19, 19, 19, 19, 19, 19, 19, 23, 
+	19, 30, 31, 31, 32, 33, 29, 29, 
+	29, 34, 32, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 33, 29, 
+	35, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
 	29, 35, 29, 31, 31, 32, 36, 29, 
-	29, 29, 29, 32, 29, 31, 31, 32, 
-	33, 29, 29, 29, 29, 32, 29, 32, 
+	29, 29, 29, 32, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 36, 
+	29, 31, 31, 32, 33, 29, 29, 29, 
+	29, 32, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 33, 29, 32, 
 	29, 30, 31, 31, 32, 33, 29, 29, 
-	29, 29, 32, 29, 37, 31, 31, 32, 
-	33, 29, 29, 29, 29, 32, 29, 21, 
+	29, 29, 32, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 33, 29, 
+	37, 31, 31, 32, 33, 29, 29, 29, 
+	29, 32, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 33, 29, 21, 
 	21, 22, 38, 0, 0, 0, 0, 22, 
-	0, 40, 39, 42, 43, 44, 45, 46, 
-	47, 22, 23, 48, 49, 49, 24, 22, 
-	50, 51, 52, 53, 54, 41, 56, 57, 
-	58, 59, 4, 5, 60, 55, 55, 8, 
-	4, 55, 55, 61, 55, 62, 57, 63, 
-	63, 4, 5, 60, 55, 55, 55, 4, 
-	55, 55, 61, 55, 57, 63, 63, 4, 
-	5, 60, 55, 55, 55, 4, 55, 55, 
-	61, 55, 42, 55, 55, 55, 64, 65, 
-	55, 1, 60, 55, 55, 55, 55, 55, 
-	42, 55, 66, 66, 55, 1, 60, 55, 
-	60, 55, 55, 67, 60, 55, 60, 55, 
-	60, 55, 55, 55, 60, 55, 42, 55, 
-	68, 55, 66, 66, 55, 1, 60, 55, 
-	55, 55, 55, 55, 42, 55, 42, 55, 
-	55, 55, 66, 66, 55, 1, 60, 55, 
-	55, 55, 55, 55, 42, 55, 42, 55, 
-	55, 55, 66, 65, 55, 1, 60, 55, 
-	55, 55, 55, 55, 42, 55, 69, 70, 
-	71, 71, 4, 5, 60, 55, 55, 55, 
-	4, 55, 70, 71, 71, 4, 5, 60, 
-	55, 55, 55, 4, 55, 71, 71, 4, 
-	5, 60, 55, 55, 55, 4, 55, 60, 
-	55, 55, 67, 60, 55, 55, 55, 4, 
-	55, 72, 73, 73, 4, 5, 60, 55, 
-	55, 55, 4, 55, 64, 74, 55, 1, 
-	60, 55, 64, 55, 66, 66, 55, 1, 
-	60, 55, 66, 74, 55, 1, 60, 55, 
-	56, 57, 63, 63, 4, 5, 60, 55, 
-	55, 55, 4, 55, 55, 61, 55, 56, 
-	57, 58, 63, 4, 5, 60, 55, 55, 
-	8, 4, 55, 55, 61, 55, 76, 77, 
-	78, 79, 12, 13, 80, 75, 75, 18, 
-	12, 75, 75, 81, 75, 82, 77, 83, 
-	79, 12, 13, 80, 75, 75, 75, 12, 
-	75, 75, 81, 75, 77, 83, 79, 12, 
-	13, 80, 75, 75, 75, 12, 75, 75, 
-	81, 75, 84, 75, 75, 75, 85, 86, 
-	75, 14, 80, 75, 75, 75, 75, 75, 
-	84, 75, 87, 77, 88, 89, 12, 13, 
-	80, 75, 75, 17, 12, 75, 75, 81, 
-	75, 90, 77, 83, 83, 12, 13, 80, 
-	75, 75, 75, 12, 75, 75, 81, 75, 
-	77, 83, 83, 12, 13, 80, 75, 75, 
-	75, 12, 75, 75, 81, 75, 84, 75, 
-	75, 75, 91, 86, 75, 14, 80, 75, 
-	75, 75, 75, 75, 84, 75, 80, 75, 
-	75, 92, 80, 75, 80, 75, 80, 75, 
-	75, 75, 80, 75, 84, 75, 93, 75, 
-	91, 91, 75, 14, 80, 75, 75, 75, 
-	75, 75, 84, 75, 84, 75, 75, 75, 
-	91, 91, 75, 14, 80, 75, 75, 75, 
-	75, 75, 84, 75, 94, 95, 96, 96, 
-	12, 13, 80, 75, 75, 75, 12, 75, 
-	95, 96, 96, 12, 13, 80, 75, 75, 
-	75, 12, 75, 96, 96, 12, 13, 80, 
-	75, 75, 75, 12, 75, 80, 75, 75, 
-	92, 80, 75, 75, 75, 12, 75, 97, 
-	98, 98, 12, 13, 80, 75, 75, 75, 
-	12, 75, 85, 99, 75, 14, 80, 75, 
-	91, 91, 75, 14, 80, 75, 85, 75, 
-	91, 91, 75, 14, 80, 75, 91, 99, 
-	75, 14, 80, 75, 87, 77, 83, 83, 
-	12, 13, 80, 75, 75, 75, 12, 75, 
-	75, 81, 75, 87, 77, 88, 83, 12, 
-	13, 80, 75, 75, 17, 12, 75, 75, 
-	81, 75, 10, 11, 11, 12, 13, 75, 
-	75, 75, 75, 12, 75, 76, 77, 83, 
-	79, 12, 13, 80, 75, 75, 75, 12, 
-	75, 75, 81, 75, 101, 45, 102, 102, 
-	22, 23, 48, 100, 100, 100, 22, 100, 
-	100, 52, 100, 45, 102, 102, 22, 23, 
-	48, 100, 100, 100, 22, 100, 100, 52, 
-	100, 103, 100, 100, 100, 104, 105, 100, 
-	25, 48, 100, 100, 100, 100, 100, 103, 
-	100, 44, 45, 106, 107, 22, 23, 48, 
-	100, 100, 24, 22, 100, 100, 52, 100, 
-	103, 100, 100, 100, 108, 105, 100, 25, 
-	48, 100, 100, 100, 100, 100, 103, 100, 
-	48, 100, 100, 109, 48, 100, 48, 100, 
-	48, 100, 100, 100, 48, 100, 103, 100, 
-	110, 100, 108, 108, 100, 25, 48, 100, 
-	100, 100, 100, 100, 103, 100, 103, 100, 
-	100, 100, 108, 108, 100, 25, 48, 100, 
-	100, 100, 100, 100, 103, 100, 111, 112, 
-	113, 113, 22, 23, 48, 100, 100, 100, 
-	22, 100, 112, 113, 113, 22, 23, 48, 
-	100, 100, 100, 22, 100, 113, 113, 22, 
-	23, 48, 100, 100, 100, 22, 100, 48, 
-	100, 100, 109, 48, 100, 100, 100, 22, 
-	100, 44, 45, 102, 102, 22, 23, 48, 
-	100, 100, 100, 22, 100, 100, 52, 100, 
-	114, 115, 115, 22, 23, 48, 100, 100, 
-	100, 22, 100, 104, 116, 100, 25, 48, 
-	100, 108, 108, 100, 25, 48, 100, 104, 
-	100, 108, 108, 100, 25, 48, 100, 108, 
-	116, 100, 25, 48, 100, 44, 45, 106, 
-	102, 22, 23, 48, 100, 100, 24, 22, 
-	100, 100, 52, 100, 20, 21, 21, 22, 
-	23, 117, 117, 117, 24, 22, 117, 20, 
-	21, 21, 22, 23, 117, 117, 117, 117, 
-	22, 117, 119, 120, 121, 122, 32, 33, 
-	123, 118, 118, 34, 32, 118, 118, 124, 
-	118, 125, 120, 122, 122, 32, 33, 123, 
-	118, 118, 118, 32, 118, 118, 124, 118, 
-	120, 122, 122, 32, 33, 123, 118, 118, 
-	118, 32, 118, 118, 124, 118, 126, 118, 
-	118, 118, 127, 128, 118, 35, 123, 118, 
-	118, 118, 118, 118, 126, 118, 119, 120, 
-	121, 49, 32, 33, 123, 118, 118, 34, 
-	32, 118, 118, 124, 118, 126, 118, 118, 
-	118, 129, 128, 118, 35, 123, 118, 118, 
-	118, 118, 118, 126, 118, 123, 118, 118, 
-	130, 123, 118, 123, 118, 123, 118, 118, 
-	118, 123, 118, 126, 118, 131, 118, 129, 
-	129, 118, 35, 123, 118, 118, 118, 118, 
-	118, 126, 118, 126, 118, 118, 118, 129, 
-	129, 118, 35, 123, 118, 118, 118, 118, 
-	118, 126, 118, 132, 133, 134, 134, 32, 
-	33, 123, 118, 118, 118, 32, 118, 133, 
-	134, 134, 32, 33, 123, 118, 118, 118, 
-	32, 118, 134, 134, 32, 33, 123, 118, 
-	118, 118, 32, 118, 123, 118, 118, 130, 
-	123, 118, 118, 118, 32, 118, 119, 120, 
-	122, 122, 32, 33, 123, 118, 118, 118, 
-	32, 118, 118, 124, 118, 135, 136, 136, 
-	32, 33, 123, 118, 118, 118, 32, 118, 
-	127, 137, 118, 35, 123, 118, 129, 129, 
-	118, 35, 123, 118, 127, 118, 129, 129, 
-	118, 35, 123, 118, 129, 137, 118, 35, 
-	123, 118, 42, 43, 44, 45, 106, 102, 
-	22, 23, 48, 49, 49, 24, 22, 100, 
-	42, 52, 100, 56, 138, 58, 59, 4, 
-	5, 60, 55, 55, 8, 4, 55, 55, 
-	61, 55, 42, 43, 44, 45, 139, 140, 
-	22, 141, 142, 55, 49, 24, 22, 55, 
-	42, 52, 55, 20, 143, 143, 22, 141, 
-	60, 55, 55, 24, 22, 55, 60, 55, 
-	55, 67, 60, 55, 55, 55, 22, 55, 
-	142, 55, 55, 144, 142, 55, 55, 55, 
-	22, 55, 142, 55, 142, 55, 55, 55, 
-	142, 55, 42, 55, 68, 20, 143, 143, 
-	22, 141, 60, 55, 55, 55, 22, 55, 
-	42, 55, 146, 145, 147, 147, 145, 40, 
-	148, 145, 147, 147, 145, 40, 148, 145, 
-	148, 145, 145, 149, 148, 145, 148, 145, 
-	148, 145, 145, 145, 148, 145, 42, 117, 
-	117, 117, 117, 117, 117, 117, 117, 49, 
-	117, 117, 117, 117, 42, 117, 0
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 38, 0, 40, 39, 39, 
+	39, 39, 39, 39, 39, 39, 39, 39, 
+	39, 39, 39, 39, 39, 39, 39, 39, 
+	39, 39, 39, 39, 39, 39, 39, 39, 
+	39, 39, 39, 39, 39, 39, 39, 39, 
+	39, 39, 39, 39, 39, 39, 39, 39, 
+	39, 39, 39, 39, 39, 39, 40, 39, 
+	42, 43, 44, 45, 46, 47, 22, 23, 
+	48, 49, 49, 24, 22, 50, 51, 52, 
+	53, 54, 41, 41, 41, 41, 41, 41, 
+	41, 41, 41, 41, 41, 41, 41, 41, 
+	41, 41, 41, 41, 41, 41, 41, 41, 
+	41, 41, 41, 41, 41, 41, 41, 41, 
+	41, 41, 41, 41, 41, 41, 41, 41, 
+	55, 41, 57, 58, 59, 60, 4, 5, 
+	61, 56, 56, 8, 4, 56, 56, 62, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	5, 56, 63, 58, 64, 64, 4, 5, 
+	61, 56, 56, 56, 4, 56, 56, 62, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	5, 56, 58, 64, 64, 4, 5, 61, 
+	56, 56, 56, 4, 56, 56, 62, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 5, 
+	56, 42, 56, 56, 56, 65, 66, 56, 
+	1, 61, 56, 56, 56, 56, 56, 42, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 1, 56, 67, 67, 56, 1, 61, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 1, 
+	56, 61, 56, 56, 68, 61, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 68, 56, 61, 
+	56, 61, 56, 56, 56, 61, 56, 42, 
+	56, 69, 56, 67, 67, 56, 1, 61, 
+	56, 56, 56, 56, 56, 42, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 1, 
+	56, 42, 56, 56, 56, 67, 67, 56, 
+	1, 61, 56, 56, 56, 56, 56, 42, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 1, 56, 42, 56, 56, 56, 67, 
+	66, 56, 1, 61, 56, 56, 56, 56, 
+	56, 42, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 1, 56, 70, 71, 72, 
+	72, 4, 5, 61, 56, 56, 56, 4, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 5, 56, 71, 72, 72, 
+	4, 5, 61, 56, 56, 56, 4, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 5, 56, 72, 72, 4, 5, 
+	61, 56, 56, 56, 4, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	5, 56, 61, 56, 56, 68, 61, 56, 
+	56, 56, 4, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 68, 56, 
+	73, 74, 74, 4, 5, 61, 56, 56, 
+	56, 4, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 5, 56, 65, 
+	75, 56, 1, 61, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 1, 56, 65, 56, 67, 
+	67, 56, 1, 61, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 1, 56, 67, 75, 56, 
+	1, 61, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 1, 56, 57, 58, 64, 64, 4, 
+	5, 61, 56, 56, 56, 4, 56, 56, 
+	62, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 5, 56, 57, 58, 59, 64, 4, 
+	5, 61, 56, 56, 8, 4, 56, 56, 
+	62, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 5, 56, 77, 78, 79, 80, 12, 
+	13, 81, 76, 76, 18, 12, 76, 76, 
+	82, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 13, 76, 83, 78, 84, 80, 12, 
+	13, 81, 76, 76, 76, 12, 76, 76, 
+	82, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 13, 76, 78, 84, 80, 12, 13, 
+	81, 76, 76, 76, 12, 76, 76, 82, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	13, 76, 85, 76, 76, 76, 86, 87, 
+	76, 14, 81, 76, 76, 76, 76, 76, 
+	85, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 14, 76, 88, 78, 89, 90, 
+	12, 13, 81, 76, 76, 17, 12, 76, 
+	76, 82, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 13, 76, 91, 78, 84, 84, 
+	12, 13, 81, 76, 76, 76, 12, 76, 
+	76, 82, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 13, 76, 78, 84, 84, 12, 
+	13, 81, 76, 76, 76, 12, 76, 76, 
+	82, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 13, 76, 85, 76, 76, 76, 92, 
+	87, 76, 14, 81, 76, 76, 76, 76, 
+	76, 85, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 14, 76, 81, 76, 76, 
+	93, 81, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 93, 76, 81, 76, 81, 76, 76, 
+	76, 81, 76, 85, 76, 94, 76, 92, 
+	92, 76, 14, 81, 76, 76, 76, 76, 
+	76, 85, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 14, 76, 85, 76, 76, 
+	76, 92, 92, 76, 14, 81, 76, 76, 
+	76, 76, 76, 85, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 14, 76, 95, 
+	96, 97, 97, 12, 13, 81, 76, 76, 
+	76, 12, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 13, 76, 96, 
+	97, 97, 12, 13, 81, 76, 76, 76, 
+	12, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 13, 76, 97, 97, 
+	12, 13, 81, 76, 76, 76, 12, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 13, 76, 81, 76, 76, 93, 
+	81, 76, 76, 76, 12, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	93, 76, 98, 99, 99, 12, 13, 81, 
+	76, 76, 76, 12, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 13, 
+	76, 86, 100, 76, 14, 81, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 14, 76, 92, 
+	92, 76, 14, 81, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 14, 76, 86, 76, 92, 
+	92, 76, 14, 81, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 14, 76, 92, 100, 76, 
+	14, 81, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 14, 76, 88, 78, 84, 84, 12, 
+	13, 81, 76, 76, 76, 12, 76, 76, 
+	82, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 13, 76, 88, 78, 89, 84, 12, 
+	13, 81, 76, 76, 17, 12, 76, 76, 
+	82, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 13, 76, 10, 11, 11, 12, 13, 
+	76, 76, 76, 76, 12, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	13, 76, 77, 78, 84, 80, 12, 13, 
+	81, 76, 76, 76, 12, 76, 76, 82, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	76, 76, 76, 76, 76, 76, 76, 76, 
+	13, 76, 102, 45, 103, 103, 22, 23, 
+	48, 101, 101, 101, 22, 101, 101, 52, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	23, 101, 45, 103, 103, 22, 23, 48, 
+	101, 101, 101, 22, 101, 101, 52, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 23, 
+	101, 104, 101, 101, 101, 105, 106, 101, 
+	25, 48, 101, 101, 101, 101, 101, 104, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 25, 101, 44, 45, 107, 108, 22, 
+	23, 48, 101, 101, 24, 22, 101, 101, 
+	52, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 23, 101, 104, 101, 101, 101, 109, 
+	106, 101, 25, 48, 101, 101, 101, 101, 
+	101, 104, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 25, 101, 48, 101, 101, 
+	110, 48, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 110, 101, 48, 101, 48, 101, 101, 
+	101, 48, 101, 104, 101, 111, 101, 109, 
+	109, 101, 25, 48, 101, 101, 101, 101, 
+	101, 104, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 25, 101, 104, 101, 101, 
+	101, 109, 109, 101, 25, 48, 101, 101, 
+	101, 101, 101, 104, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 25, 101, 112, 
+	113, 114, 114, 22, 23, 48, 101, 101, 
+	101, 22, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 23, 101, 113, 
+	114, 114, 22, 23, 48, 101, 101, 101, 
+	22, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 23, 101, 114, 114, 
+	22, 23, 48, 101, 101, 101, 22, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 23, 101, 48, 26, 26, 110, 
+	48, 26, 26, 26, 22, 26, 26, 26, 
+	26, 26, 26, 26, 26, 26, 26, 26, 
+	26, 26, 26, 26, 26, 26, 26, 26, 
+	26, 26, 26, 26, 26, 26, 26, 26, 
+	26, 26, 26, 26, 26, 26, 26, 26, 
+	26, 26, 26, 26, 26, 26, 26, 26, 
+	110, 26, 44, 45, 103, 103, 22, 23, 
+	48, 101, 101, 101, 22, 101, 101, 52, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	23, 101, 115, 116, 116, 22, 23, 48, 
+	101, 101, 101, 22, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 23, 
+	101, 105, 117, 101, 25, 48, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 25, 101, 109, 
+	109, 101, 25, 48, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 25, 101, 105, 101, 109, 
+	109, 101, 25, 48, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 25, 101, 109, 117, 101, 
+	25, 48, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 25, 101, 44, 45, 107, 103, 22, 
+	23, 48, 101, 101, 24, 22, 101, 101, 
+	52, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 23, 101, 20, 21, 21, 22, 23, 
+	118, 118, 118, 24, 22, 118, 118, 118, 
+	118, 118, 118, 118, 118, 118, 118, 118, 
+	118, 118, 118, 118, 118, 118, 118, 118, 
+	118, 118, 118, 118, 118, 118, 118, 118, 
+	118, 118, 118, 118, 118, 118, 118, 118, 
+	118, 118, 118, 118, 118, 118, 118, 118, 
+	23, 118, 20, 21, 21, 22, 23, 118, 
+	118, 118, 118, 22, 118, 118, 118, 118, 
+	118, 118, 118, 118, 118, 118, 118, 118, 
+	118, 118, 118, 118, 118, 118, 118, 118, 
+	118, 118, 118, 118, 118, 118, 118, 118, 
+	118, 118, 118, 118, 118, 118, 118, 118, 
+	118, 118, 118, 118, 118, 118, 118, 23, 
+	118, 120, 121, 122, 123, 32, 33, 124, 
+	119, 119, 34, 32, 119, 119, 125, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 33, 
+	119, 126, 121, 123, 123, 32, 33, 124, 
+	119, 119, 119, 32, 119, 119, 125, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 33, 
+	119, 121, 123, 123, 32, 33, 124, 119, 
+	119, 119, 32, 119, 119, 125, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 33, 119, 
+	127, 119, 119, 119, 128, 129, 119, 35, 
+	124, 119, 119, 119, 119, 119, 127, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	35, 119, 120, 121, 122, 49, 32, 33, 
+	124, 119, 119, 34, 32, 119, 119, 125, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	33, 119, 127, 119, 119, 119, 130, 129, 
+	119, 35, 124, 119, 119, 119, 119, 119, 
+	127, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 35, 119, 124, 119, 119, 131, 
+	124, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	131, 119, 124, 119, 124, 119, 119, 119, 
+	124, 119, 127, 119, 132, 119, 130, 130, 
+	119, 35, 124, 119, 119, 119, 119, 119, 
+	127, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 35, 119, 127, 119, 119, 119, 
+	130, 130, 119, 35, 124, 119, 119, 119, 
+	119, 119, 127, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 35, 119, 133, 134, 
+	135, 135, 32, 33, 124, 119, 119, 119, 
+	32, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 33, 119, 134, 135, 
+	135, 32, 33, 124, 119, 119, 119, 32, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 33, 119, 135, 135, 32, 
+	33, 124, 119, 119, 119, 32, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 33, 119, 124, 119, 119, 131, 124, 
+	119, 119, 119, 32, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 131, 
+	119, 120, 121, 123, 123, 32, 33, 124, 
+	119, 119, 119, 32, 119, 119, 125, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 33, 
+	119, 136, 137, 137, 32, 33, 124, 119, 
+	119, 119, 32, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 33, 119, 
+	128, 138, 119, 35, 124, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 35, 119, 130, 130, 
+	119, 35, 124, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 35, 119, 128, 119, 130, 130, 
+	119, 35, 124, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 35, 119, 130, 138, 119, 35, 
+	124, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	119, 119, 119, 119, 119, 119, 119, 119, 
+	35, 119, 42, 43, 44, 45, 107, 103, 
+	22, 23, 48, 49, 49, 24, 22, 101, 
+	42, 52, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 101, 101, 101, 101, 101, 101, 
+	101, 101, 23, 101, 57, 139, 59, 60, 
+	4, 5, 61, 56, 56, 8, 4, 56, 
+	56, 62, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 5, 56, 42, 43, 44, 45, 
+	140, 141, 22, 142, 143, 56, 49, 24, 
+	22, 56, 42, 52, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 142, 56, 20, 144, 
+	144, 22, 142, 61, 56, 56, 24, 22, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 142, 56, 61, 56, 56, 
+	68, 61, 56, 56, 56, 22, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 68, 56, 143, 56, 56, 145, 143, 
+	56, 56, 56, 22, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 145, 
+	56, 143, 56, 143, 56, 56, 56, 143, 
+	56, 42, 56, 69, 20, 144, 144, 22, 
+	142, 61, 56, 56, 56, 22, 56, 42, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 142, 56, 147, 146, 148, 148, 146, 
+	40, 149, 146, 146, 146, 146, 146, 146, 
+	146, 146, 146, 146, 146, 146, 146, 146, 
+	146, 146, 146, 146, 146, 146, 146, 146, 
+	146, 146, 146, 146, 146, 146, 146, 146, 
+	146, 146, 146, 146, 146, 146, 146, 146, 
+	146, 146, 146, 146, 146, 146, 146, 146, 
+	146, 40, 146, 148, 148, 146, 40, 149, 
+	146, 146, 146, 146, 146, 146, 146, 146, 
+	146, 146, 146, 146, 146, 146, 146, 146, 
+	146, 146, 146, 146, 146, 146, 146, 146, 
+	146, 146, 146, 146, 146, 146, 146, 146, 
+	146, 146, 146, 146, 146, 146, 146, 146, 
+	146, 146, 146, 146, 146, 146, 146, 40, 
+	146, 149, 146, 146, 150, 149, 146, 146, 
+	146, 146, 146, 146, 146, 146, 146, 146, 
+	146, 146, 146, 146, 146, 146, 146, 146, 
+	146, 146, 146, 146, 146, 146, 146, 146, 
+	146, 146, 146, 146, 146, 146, 146, 146, 
+	146, 146, 146, 146, 146, 146, 146, 146, 
+	146, 146, 146, 146, 146, 150, 146, 149, 
+	146, 149, 146, 146, 146, 149, 146, 42, 
+	118, 118, 118, 118, 118, 118, 118, 118, 
+	49, 118, 118, 118, 118, 42, 118, 0
 };
 
 static const unsigned char _indic_syllable_machine_trans_targs[] = {
@@ -330,41 +996,41 @@
 	93, 84, 31, 19, 98, 31, 107, 24, 
 	113, 116, 117, 108, 26, 122, 127, 31, 
 	134, 31, 32, 53, 79, 81, 100, 101, 
-	85, 102, 123, 124, 94, 132, 137, 31, 
-	33, 35, 6, 52, 38, 47, 34, 1, 
-	36, 40, 0, 39, 41, 44, 45, 3, 
-	48, 5, 49, 31, 54, 56, 14, 77, 
-	62, 70, 55, 7, 57, 72, 64, 58, 
-	13, 76, 59, 8, 63, 65, 67, 68, 
-	10, 71, 12, 73, 31, 80, 20, 82, 
-	96, 87, 15, 99, 16, 86, 88, 90, 
-	91, 18, 95, 21, 97, 31, 31, 103, 
-	105, 22, 27, 109, 118, 104, 106, 120, 
-	111, 23, 110, 112, 114, 115, 25, 119, 
-	28, 121, 125, 126, 131, 128, 129, 29, 
-	130, 31, 133, 30, 135, 136
+	85, 102, 123, 124, 94, 132, 137, 92, 
+	31, 33, 35, 6, 52, 38, 47, 34, 
+	1, 36, 40, 0, 39, 41, 44, 45, 
+	3, 48, 5, 49, 31, 54, 56, 14, 
+	77, 62, 70, 55, 7, 57, 72, 64, 
+	58, 13, 76, 59, 8, 63, 65, 67, 
+	68, 10, 71, 12, 73, 31, 80, 20, 
+	82, 96, 87, 15, 99, 16, 86, 88, 
+	90, 91, 18, 95, 21, 97, 31, 31, 
+	103, 105, 22, 27, 109, 118, 104, 106, 
+	120, 111, 23, 110, 112, 114, 115, 25, 
+	119, 28, 121, 125, 126, 131, 128, 129, 
+	29, 130, 31, 133, 30, 135, 136
 };
 
 static const char _indic_syllable_machine_trans_actions[] = {
 	1, 0, 2, 0, 2, 0, 0, 2, 
 	2, 3, 2, 0, 2, 0, 0, 0, 
-	2, 2, 2, 4, 2, 0, 5, 0, 
+	2, 2, 2, 4, 2, 0, 5, 5, 
 	5, 0, 6, 0, 2, 7, 2, 0, 
 	2, 0, 2, 0, 0, 2, 0, 8, 
 	0, 11, 2, 2, 5, 0, 12, 12, 
 	0, 2, 5, 2, 5, 2, 0, 13, 
-	2, 0, 0, 2, 0, 2, 2, 0, 
+	14, 2, 0, 0, 2, 0, 2, 2, 
+	0, 2, 2, 0, 0, 2, 2, 2, 
+	0, 0, 0, 2, 15, 2, 0, 0, 
+	2, 0, 2, 2, 0, 2, 2, 2, 
+	2, 0, 2, 2, 0, 0, 2, 2, 
+	2, 0, 0, 0, 2, 16, 5, 0, 
+	5, 2, 2, 0, 5, 0, 0, 2, 
+	5, 5, 0, 0, 0, 2, 17, 18, 
+	2, 0, 0, 0, 0, 2, 2, 2, 
 	2, 2, 0, 0, 2, 2, 2, 0, 
-	0, 0, 2, 14, 2, 0, 0, 2, 
-	0, 2, 2, 0, 2, 2, 2, 2, 
-	0, 2, 2, 0, 0, 2, 2, 2, 
-	0, 0, 0, 2, 15, 5, 0, 5, 
-	2, 2, 0, 5, 0, 0, 2, 5, 
-	5, 0, 0, 0, 2, 16, 17, 2, 
-	0, 0, 0, 0, 2, 2, 2, 2, 
-	2, 0, 0, 2, 2, 2, 0, 0, 
-	0, 2, 0, 18, 18, 0, 0, 0, 
-	0, 19, 2, 0, 0, 0
+	0, 0, 2, 0, 19, 19, 0, 0, 
+	0, 0, 20, 2, 0, 0, 0
 };
 
 static const char _indic_syllable_machine_to_state_actions[] = {
@@ -414,20 +1080,20 @@
 	10, 10, 10, 10, 10, 10, 10, 20, 
 	20, 27, 20, 27, 20, 20, 30, 30, 
 	30, 30, 30, 30, 30, 1, 40, 0, 
-	56, 56, 56, 56, 56, 56, 56, 56, 
-	56, 56, 56, 56, 56, 56, 56, 56, 
-	56, 56, 56, 56, 56, 76, 76, 76, 
-	76, 76, 76, 76, 76, 76, 76, 76, 
-	76, 76, 76, 76, 76, 76, 76, 76, 
-	76, 76, 76, 76, 76, 76, 76, 101, 
-	101, 101, 101, 101, 101, 101, 101, 101, 
-	101, 101, 101, 101, 101, 101, 101, 101, 
-	101, 101, 101, 101, 118, 118, 119, 119, 
-	119, 119, 119, 119, 119, 119, 119, 119, 
-	119, 119, 119, 119, 119, 119, 119, 119, 
-	119, 119, 119, 101, 56, 56, 56, 56, 
-	56, 56, 56, 56, 146, 146, 146, 146, 
-	146, 118
+	57, 57, 57, 57, 57, 57, 57, 57, 
+	57, 57, 57, 57, 57, 57, 57, 57, 
+	57, 57, 57, 57, 57, 77, 77, 77, 
+	77, 77, 77, 77, 77, 77, 77, 77, 
+	77, 77, 77, 77, 77, 77, 77, 77, 
+	77, 77, 77, 77, 77, 77, 77, 102, 
+	102, 102, 102, 102, 102, 102, 102, 102, 
+	102, 102, 102, 102, 27, 102, 102, 102, 
+	102, 102, 102, 102, 119, 119, 120, 120, 
+	120, 120, 120, 120, 120, 120, 120, 120, 
+	120, 120, 120, 120, 120, 120, 120, 120, 
+	120, 120, 120, 102, 57, 57, 57, 57, 
+	57, 57, 57, 57, 147, 147, 147, 147, 
+	147, 119
 };
 
 static const int indic_syllable_machine_start = 31;
@@ -441,7 +1107,7 @@
 
 
 
-#line 118 "hb-ot-shaper-indic-machine.rl"
+#line 121 "hb-ot-shaper-indic-machine.rl"
 
 
 #define found_syllable(syllable_type) \
@@ -460,7 +1126,7 @@
   int cs;
   hb_glyph_info_t *info = buffer->info;
   
-#line 464 "hb-ot-shaper-indic-machine.hh"
+#line 1130 "hb-ot-shaper-indic-machine.hh"
 	{
 	cs = indic_syllable_machine_start;
 	ts = 0;
@@ -468,7 +1134,7 @@
 	act = 0;
 	}
 
-#line 138 "hb-ot-shaper-indic-machine.rl"
+#line 141 "hb-ot-shaper-indic-machine.rl"
 
 
   p = 0;
@@ -476,7 +1142,7 @@
 
   unsigned int syllable_serial = 1;
   
-#line 480 "hb-ot-shaper-indic-machine.hh"
+#line 1146 "hb-ot-shaper-indic-machine.hh"
 	{
 	int _slen;
 	int _trans;
@@ -490,7 +1156,7 @@
 #line 1 "NONE"
 	{ts = p;}
 	break;
-#line 494 "hb-ot-shaper-indic-machine.hh"
+#line 1160 "hb-ot-shaper-indic-machine.hh"
 	}
 
 	_keys = _indic_syllable_machine_trans_keys + (cs<<1);
@@ -513,51 +1179,51 @@
 	{te = p+1;}
 	break;
 	case 11:
-#line 114 "hb-ot-shaper-indic-machine.rl"
+#line 117 "hb-ot-shaper-indic-machine.rl"
 	{te = p+1;{ found_syllable (indic_non_indic_cluster); }}
 	break;
-	case 13:
-#line 109 "hb-ot-shaper-indic-machine.rl"
+	case 14:
+#line 111 "hb-ot-shaper-indic-machine.rl"
 	{te = p;p--;{ found_syllable (indic_consonant_syllable); }}
 	break;
-	case 14:
-#line 110 "hb-ot-shaper-indic-machine.rl"
+	case 15:
+#line 112 "hb-ot-shaper-indic-machine.rl"
 	{te = p;p--;{ found_syllable (indic_vowel_syllable); }}
 	break;
-	case 17:
-#line 111 "hb-ot-shaper-indic-machine.rl"
+	case 18:
+#line 113 "hb-ot-shaper-indic-machine.rl"
 	{te = p;p--;{ found_syllable (indic_standalone_cluster); }}
 	break;
-	case 19:
-#line 112 "hb-ot-shaper-indic-machine.rl"
+	case 20:
+#line 114 "hb-ot-shaper-indic-machine.rl"
 	{te = p;p--;{ found_syllable (indic_symbol_cluster); }}
 	break;
-	case 15:
-#line 113 "hb-ot-shaper-indic-machine.rl"
+	case 16:
+#line 116 "hb-ot-shaper-indic-machine.rl"
 	{te = p;p--;{ found_syllable (indic_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }}
 	break;
-	case 16:
-#line 114 "hb-ot-shaper-indic-machine.rl"
+	case 17:
+#line 117 "hb-ot-shaper-indic-machine.rl"
 	{te = p;p--;{ found_syllable (indic_non_indic_cluster); }}
 	break;
 	case 1:
-#line 109 "hb-ot-shaper-indic-machine.rl"
+#line 111 "hb-ot-shaper-indic-machine.rl"
 	{{p = ((te))-1;}{ found_syllable (indic_consonant_syllable); }}
 	break;
 	case 3:
-#line 110 "hb-ot-shaper-indic-machine.rl"
+#line 112 "hb-ot-shaper-indic-machine.rl"
 	{{p = ((te))-1;}{ found_syllable (indic_vowel_syllable); }}
 	break;
 	case 7:
-#line 111 "hb-ot-shaper-indic-machine.rl"
+#line 113 "hb-ot-shaper-indic-machine.rl"
 	{{p = ((te))-1;}{ found_syllable (indic_standalone_cluster); }}
 	break;
 	case 8:
-#line 112 "hb-ot-shaper-indic-machine.rl"
+#line 114 "hb-ot-shaper-indic-machine.rl"
 	{{p = ((te))-1;}{ found_syllable (indic_symbol_cluster); }}
 	break;
 	case 4:
-#line 113 "hb-ot-shaper-indic-machine.rl"
+#line 116 "hb-ot-shaper-indic-machine.rl"
 	{{p = ((te))-1;}{ found_syllable (indic_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }}
 	break;
 	case 6:
@@ -567,33 +1233,42 @@
 	{{p = ((te))-1;} found_syllable (indic_consonant_syllable); }
 	break;
 	case 5:
+	{{p = ((te))-1;} found_syllable (indic_non_indic_cluster); }
+	break;
+	case 6:
 	{{p = ((te))-1;} found_syllable (indic_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }
 	break;
-	case 6:
+	case 7:
 	{{p = ((te))-1;} found_syllable (indic_non_indic_cluster); }
 	break;
 	}
 	}
 	break;
-	case 18:
+	case 19:
 #line 1 "NONE"
 	{te = p+1;}
-#line 109 "hb-ot-shaper-indic-machine.rl"
+#line 111 "hb-ot-shaper-indic-machine.rl"
 	{act = 1;}
 	break;
-	case 5:
+	case 13:
 #line 1 "NONE"
 	{te = p+1;}
-#line 113 "hb-ot-shaper-indic-machine.rl"
+#line 115 "hb-ot-shaper-indic-machine.rl"
 	{act = 5;}
 	break;
-	case 12:
+	case 5:
 #line 1 "NONE"
 	{te = p+1;}
-#line 114 "hb-ot-shaper-indic-machine.rl"
+#line 116 "hb-ot-shaper-indic-machine.rl"
 	{act = 6;}
 	break;
-#line 597 "hb-ot-shaper-indic-machine.hh"
+	case 12:
+#line 1 "NONE"
+	{te = p+1;}
+#line 117 "hb-ot-shaper-indic-machine.rl"
+	{act = 7;}
+	break;
+#line 1272 "hb-ot-shaper-indic-machine.hh"
 	}
 
 _again:
@@ -602,7 +1277,7 @@
 #line 1 "NONE"
 	{ts = 0;}
 	break;
-#line 606 "hb-ot-shaper-indic-machine.hh"
+#line 1281 "hb-ot-shaper-indic-machine.hh"
 	}
 
 	if ( ++p != pe )
@@ -618,7 +1293,7 @@
 
 	}
 
-#line 146 "hb-ot-shaper-indic-machine.rl"
+#line 149 "hb-ot-shaper-indic-machine.rl"
 
 }
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shaper-indic-machine.rl
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shaper-indic-machine.rl	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shaper-indic-machine.rl	2025-01-11 23:22:13 UTC (rev 73427)
@@ -80,6 +80,7 @@
 export CM    = 16;
 export Symbol= 17;
 export CS    = 18;
+export SMPst = 57;
 
 
 c = (C | Ra);			# is_consonant
@@ -86,11 +87,12 @@
 n = ((ZWNJ?.RS)? (N.N?)?);	# is_consonant_modifier
 z = ZWJ|ZWNJ;			# is_joiner
 reph = (Ra H | Repha);		# possible reph
+sm = SM | SMPst;
 
 cn = c.ZWJ?.n?;
 symbol = Symbol.N?;
-matra_group = z*.(M | SM? MPst).N?.H?;
-syllable_tail = (z?.SM.SM?.ZWNJ?)? (A | VD)*;
+matra_group = z*.(M | sm? MPst).N?.H?;
+syllable_tail = (z?.sm.sm?.ZWNJ?)? (A | VD)*;
 halant_group = (z?.H.(ZWJ.N?)?);
 final_halant_group = halant_group | H.ZWNJ;
 medial_group = CM?;
@@ -110,6 +112,7 @@
 	vowel_syllable		=> { found_syllable (indic_vowel_syllable); };
 	standalone_cluster	=> { found_syllable (indic_standalone_cluster); };
 	symbol_cluster		=> { found_syllable (indic_symbol_cluster); };
+	SMPst			=> { found_syllable (indic_non_indic_cluster); };
 	broken_cluster		=> { found_syllable (indic_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; };
 	other			=> { found_syllable (indic_non_indic_cluster); };
 *|;

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shaper-indic-table.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shaper-indic-table.cc	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shaper-indic-table.cc	2025-01-11 23:22:13 UTC (rev 73427)
@@ -48,6 +48,7 @@
 #define OT_CM I_Cat(CM)
 #define OT_Symbol I_Cat(Symbol)
 #define OT_CS I_Cat(CS)
+#define OT_SMPst I_Cat(SMPst)
 /* khmer */
 #define OT_VAbv K_Cat(VAbv)
 #define OT_VBlw K_Cat(VBlw)
@@ -94,7 +95,8 @@
 #define _OT_R    OT_Ra           /*  14 chars; Ra */
 #define _OT_Rf   OT_Repha        /*   1 chars; Repha */
 #define _OT_Rt   OT_Robatic      /*   3 chars; Robatic */
-#define _OT_SM   OT_SM           /*  56 chars; SM */
+#define _OT_SM   OT_SM           /*  50 chars; SM */
+#define _OT_SP   OT_SMPst        /*   6 chars; SMPst */
 #define _OT_S    OT_Symbol       /*  22 chars; Symbol */
 #define _OT_V    OT_V            /* 172 chars; V */
 #define _OT_VA   OT_VAbv         /*  18 chars; VAbv */
@@ -145,7 +147,7 @@
 
   /* Latin-1 Supplement */
 
-  /* 00B0 */  _(X,X),  _(X,X),_(SM,SM),_(SM,SM),  _(X,X),  _(X,X),  _(X,X),  _(X,X),
+  /* 00B0 */  _(X,X),  _(X,X),_(SP,SM),_(SP,SM),  _(X,X),  _(X,X),  _(X,X),  _(X,X),
   /* 00B8 */  _(X,X),  _(X,X),  _(X,X),  _(X,X),  _(X,X),  _(X,X),  _(X,X),  _(X,X),
   /* 00C0 */  _(X,X),  _(X,X),  _(X,X),  _(X,X),  _(X,X),  _(X,X),  _(X,X),  _(X,X),
   /* 00C8 */  _(X,X),  _(X,X),  _(X,X),  _(X,X),  _(X,X),  _(X,X),  _(X,X),  _(X,X),
@@ -398,9 +400,9 @@
 
   /* Superscripts and Subscripts */
 
-  /* 2070 */  _(X,X),  _(X,X),  _(X,X),  _(X,X),_(SM,SM),  _(X,X),  _(X,X),  _(X,X),
+  /* 2070 */  _(X,X),  _(X,X),  _(X,X),  _(X,X),_(SP,SM),  _(X,X),  _(X,X),  _(X,X),
   /* 2078 */  _(X,X),  _(X,X),  _(X,X),  _(X,X),  _(X,X),  _(X,X),  _(X,X),  _(X,X),
-  /* 2080 */  _(X,X),  _(X,X),_(SM,SM),_(SM,SM),_(SM,SM),  _(X,X),  _(X,X),  _(X,X),
+  /* 2080 */  _(X,X),  _(X,X),_(SP,SM),_(SP,SM),_(SP,SM),  _(X,X),  _(X,X),  _(X,X),
 
 #define indic_offset_0x25f8u 1592
 
@@ -540,6 +542,7 @@
 #undef _OT_Rf
 #undef _OT_Rt
 #undef _OT_SM
+#undef _OT_SP
 #undef _OT_S
 #undef _OT_V
 #undef _OT_VA

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shaper-myanmar-machine.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shaper-myanmar-machine.hh	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shaper-myanmar-machine.hh	2025-01-11 23:22:13 UTC (rev 73427)
@@ -68,6 +68,7 @@
 #define myanmar_syllable_machine_ex_PT 39u
 #define myanmar_syllable_machine_ex_Ra 15u
 #define myanmar_syllable_machine_ex_SM 8u
+#define myanmar_syllable_machine_ex_SMPst 57u
 #define myanmar_syllable_machine_ex_VAbv 20u
 #define myanmar_syllable_machine_ex_VBlw 21u
 #define myanmar_syllable_machine_ex_VPre 22u
@@ -77,35 +78,35 @@
 #define myanmar_syllable_machine_ex_ZWNJ 5u
 
 
-#line 81 "hb-ot-shaper-myanmar-machine.hh"
+#line 82 "hb-ot-shaper-myanmar-machine.hh"
 static const unsigned char _myanmar_syllable_machine_trans_keys[] = {
-	1u, 41u, 3u, 41u, 5u, 39u, 5u, 8u, 3u, 41u, 3u, 39u, 3u, 39u, 5u, 39u, 
-	5u, 39u, 3u, 39u, 3u, 39u, 3u, 41u, 5u, 39u, 1u, 15u, 3u, 39u, 3u, 39u, 
-	3u, 40u, 3u, 39u, 3u, 41u, 3u, 41u, 3u, 39u, 3u, 41u, 3u, 41u, 3u, 41u, 
-	3u, 41u, 3u, 41u, 5u, 39u, 5u, 8u, 3u, 41u, 3u, 39u, 3u, 39u, 5u, 39u, 
-	5u, 39u, 3u, 39u, 3u, 39u, 3u, 41u, 5u, 39u, 1u, 15u, 3u, 41u, 3u, 39u, 
-	3u, 39u, 3u, 40u, 3u, 39u, 3u, 41u, 3u, 41u, 3u, 39u, 3u, 41u, 3u, 41u, 
-	3u, 41u, 3u, 41u, 3u, 41u, 3u, 41u, 3u, 41u, 1u, 41u, 1u, 15u, 0
+	1u, 57u, 3u, 57u, 5u, 57u, 5u, 57u, 3u, 57u, 5u, 57u, 3u, 57u, 3u, 57u, 
+	3u, 57u, 3u, 57u, 3u, 57u, 5u, 57u, 1u, 15u, 3u, 57u, 3u, 57u, 3u, 57u, 
+	3u, 57u, 3u, 57u, 3u, 57u, 3u, 57u, 3u, 57u, 3u, 57u, 3u, 57u, 3u, 57u, 
+	3u, 57u, 5u, 57u, 5u, 57u, 3u, 57u, 5u, 57u, 3u, 57u, 3u, 57u, 3u, 57u, 
+	3u, 57u, 3u, 57u, 5u, 57u, 1u, 15u, 3u, 57u, 3u, 57u, 3u, 57u, 3u, 57u, 
+	3u, 57u, 3u, 57u, 3u, 57u, 3u, 57u, 3u, 57u, 3u, 57u, 3u, 57u, 3u, 57u, 
+	3u, 57u, 3u, 57u, 3u, 57u, 1u, 57u, 1u, 15u, 0
 };
 
 static const char _myanmar_syllable_machine_key_spans[] = {
-	41, 39, 35, 4, 39, 37, 37, 35, 
-	35, 37, 37, 39, 35, 15, 37, 37, 
-	38, 37, 39, 39, 37, 39, 39, 39, 
-	39, 39, 35, 4, 39, 37, 37, 35, 
-	35, 37, 37, 39, 35, 15, 39, 37, 
-	37, 38, 37, 39, 39, 37, 39, 39, 
-	39, 39, 39, 39, 39, 41, 15
+	57, 55, 53, 53, 55, 53, 55, 55, 
+	55, 55, 55, 53, 15, 55, 55, 55, 
+	55, 55, 55, 55, 55, 55, 55, 55, 
+	55, 53, 53, 55, 53, 55, 55, 55, 
+	55, 55, 53, 15, 55, 55, 55, 55, 
+	55, 55, 55, 55, 55, 55, 55, 55, 
+	55, 55, 55, 57, 15
 };
 
 static const short _myanmar_syllable_machine_index_offsets[] = {
-	0, 42, 82, 118, 123, 163, 201, 239, 
-	275, 311, 349, 387, 427, 463, 479, 517, 
-	555, 594, 632, 672, 712, 750, 790, 830, 
-	870, 910, 950, 986, 991, 1031, 1069, 1107, 
-	1143, 1179, 1217, 1255, 1295, 1331, 1347, 1387, 
-	1425, 1463, 1502, 1540, 1580, 1620, 1658, 1698, 
-	1738, 1778, 1818, 1858, 1898, 1938, 1980
+	0, 58, 114, 168, 222, 278, 332, 388, 
+	444, 500, 556, 612, 666, 682, 738, 794, 
+	850, 906, 962, 1018, 1074, 1130, 1186, 1242, 
+	1298, 1354, 1408, 1462, 1518, 1572, 1628, 1684, 
+	1740, 1796, 1852, 1906, 1922, 1978, 2034, 2090, 
+	2146, 2202, 2258, 2314, 2370, 2426, 2482, 2538, 
+	2594, 2650, 2706, 2762, 2820
 };
 
 static const char _myanmar_syllable_machine_indicies[] = {
@@ -114,273 +115,378 @@
 	0, 8, 0, 9, 10, 11, 12, 0, 
 	0, 0, 0, 0, 0, 0, 0, 13, 
 	0, 0, 14, 15, 16, 17, 18, 19, 
-	20, 0, 22, 23, 24, 24, 21, 25, 
-	26, 21, 21, 21, 21, 21, 21, 21, 
-	21, 21, 21, 27, 28, 29, 30, 21, 
-	21, 21, 21, 21, 21, 21, 21, 31, 
-	21, 21, 32, 33, 34, 35, 36, 37, 
-	38, 21, 24, 24, 21, 25, 21, 21, 
-	21, 21, 21, 21, 21, 21, 21, 21, 
-	21, 21, 21, 21, 30, 21, 21, 21, 
-	21, 21, 21, 21, 21, 39, 21, 21, 
-	21, 21, 21, 21, 36, 21, 24, 24, 
-	21, 25, 21, 22, 21, 24, 24, 21, 
-	25, 26, 21, 21, 21, 21, 21, 21, 
-	21, 21, 21, 21, 40, 21, 21, 30, 
-	21, 21, 21, 21, 21, 21, 21, 21, 
-	41, 21, 21, 42, 21, 21, 21, 36, 
-	21, 41, 21, 22, 21, 24, 24, 21, 
-	25, 26, 21, 21, 21, 21, 21, 21, 
-	21, 21, 21, 21, 21, 21, 21, 30, 
-	21, 21, 21, 21, 21, 21, 21, 21, 
-	21, 21, 21, 21, 21, 21, 21, 36, 
-	21, 43, 21, 24, 24, 21, 25, 36, 
-	21, 21, 21, 21, 21, 21, 21, 21, 
-	21, 21, 21, 21, 21, 21, 21, 21, 
-	21, 21, 21, 21, 21, 21, 44, 21, 
-	21, 21, 21, 21, 21, 36, 21, 24, 
-	24, 21, 25, 21, 21, 21, 21, 21, 
-	21, 21, 21, 21, 21, 21, 21, 21, 
-	21, 21, 21, 21, 21, 21, 21, 21, 
-	21, 21, 44, 21, 21, 21, 21, 21, 
-	21, 36, 21, 24, 24, 21, 25, 21, 
-	21, 21, 21, 21, 21, 21, 21, 21, 
-	21, 21, 21, 21, 21, 21, 21, 21, 
-	21, 21, 21, 21, 21, 21, 21, 21, 
-	21, 21, 21, 21, 21, 36, 21, 22, 
-	21, 24, 24, 21, 25, 26, 21, 21, 
-	21, 21, 21, 21, 21, 21, 21, 21, 
-	40, 21, 21, 30, 21, 21, 21, 21, 
-	21, 21, 21, 21, 21, 21, 21, 21, 
-	21, 21, 21, 36, 21, 22, 21, 24, 
-	24, 21, 25, 26, 21, 21, 21, 21, 
-	21, 21, 21, 21, 21, 21, 40, 21, 
-	21, 30, 21, 21, 21, 21, 21, 21, 
-	21, 21, 41, 21, 21, 21, 21, 21, 
-	21, 36, 21, 22, 21, 24, 24, 21, 
-	25, 26, 21, 21, 21, 21, 21, 21, 
-	21, 21, 21, 21, 40, 21, 21, 30, 
-	21, 21, 21, 21, 21, 21, 21, 21, 
-	41, 21, 21, 21, 21, 21, 21, 36, 
-	21, 41, 21, 24, 24, 21, 25, 21, 
-	21, 21, 21, 21, 21, 21, 21, 21, 
-	21, 21, 21, 21, 21, 30, 21, 21, 
-	21, 21, 21, 21, 21, 21, 21, 21, 
-	21, 21, 21, 21, 21, 36, 21, 1, 
-	1, 21, 21, 21, 21, 21, 21, 21, 
-	21, 21, 21, 21, 21, 1, 21, 22, 
-	21, 24, 24, 21, 25, 26, 21, 21, 
-	21, 21, 21, 21, 21, 21, 21, 21, 
-	27, 28, 21, 30, 21, 21, 21, 21, 
-	21, 21, 21, 21, 21, 21, 21, 21, 
-	21, 21, 21, 36, 21, 22, 21, 24, 
-	24, 21, 25, 26, 21, 21, 21, 21, 
-	21, 21, 21, 21, 21, 21, 21, 28, 
-	21, 30, 21, 21, 21, 21, 21, 21, 
-	21, 21, 21, 21, 21, 21, 21, 21, 
-	21, 36, 21, 22, 21, 24, 24, 21, 
-	25, 26, 21, 21, 21, 21, 21, 21, 
-	21, 21, 21, 21, 27, 28, 29, 30, 
-	21, 21, 21, 21, 21, 21, 21, 21, 
-	21, 21, 21, 21, 21, 21, 21, 36, 
-	45, 21, 22, 21, 24, 24, 21, 25, 
-	26, 21, 21, 21, 21, 21, 21, 21, 
-	21, 21, 21, 27, 28, 29, 30, 21, 
-	21, 21, 21, 21, 21, 21, 21, 21, 
-	21, 21, 21, 21, 21, 21, 36, 21, 
-	22, 21, 24, 24, 21, 25, 26, 21, 
-	21, 21, 21, 21, 21, 21, 21, 21, 
-	21, 27, 28, 29, 30, 21, 21, 21, 
-	21, 21, 21, 21, 21, 31, 21, 21, 
-	32, 33, 34, 35, 36, 21, 38, 21, 
-	22, 21, 24, 24, 21, 25, 26, 21, 
-	21, 21, 21, 21, 21, 21, 21, 21, 
-	21, 27, 28, 29, 30, 21, 21, 21, 
-	21, 21, 21, 21, 21, 45, 21, 21, 
-	21, 21, 21, 21, 36, 21, 38, 21, 
-	22, 21, 24, 24, 21, 25, 26, 21, 
-	21, 21, 21, 21, 21, 21, 21, 21, 
-	21, 27, 28, 29, 30, 21, 21, 21, 
-	21, 21, 21, 21, 21, 45, 21, 21, 
-	21, 21, 21, 21, 36, 21, 22, 21, 
-	24, 24, 21, 25, 26, 21, 21, 21, 
-	21, 21, 21, 21, 21, 21, 21, 27, 
-	28, 29, 30, 21, 21, 21, 21, 21, 
-	21, 21, 21, 21, 21, 21, 32, 21, 
-	34, 21, 36, 21, 38, 21, 22, 21, 
-	24, 24, 21, 25, 26, 21, 21, 21, 
-	21, 21, 21, 21, 21, 21, 21, 27, 
-	28, 29, 30, 21, 21, 21, 21, 21, 
-	21, 21, 21, 45, 21, 21, 32, 21, 
-	21, 21, 36, 21, 38, 21, 22, 21, 
-	24, 24, 21, 25, 26, 21, 21, 21, 
-	21, 21, 21, 21, 21, 21, 21, 27, 
-	28, 29, 30, 21, 21, 21, 21, 21, 
-	21, 21, 21, 46, 21, 21, 32, 33, 
-	34, 21, 36, 21, 38, 21, 22, 21, 
-	24, 24, 21, 25, 26, 21, 21, 21, 
-	21, 21, 21, 21, 21, 21, 21, 27, 
-	28, 29, 30, 21, 21, 21, 21, 21, 
-	21, 21, 21, 21, 21, 21, 32, 33, 
-	34, 21, 36, 21, 38, 21, 22, 23, 
-	24, 24, 21, 25, 26, 21, 21, 21, 
-	21, 21, 21, 21, 21, 21, 21, 27, 
-	28, 29, 30, 21, 21, 21, 21, 21, 
-	21, 21, 21, 31, 21, 21, 32, 33, 
-	34, 35, 36, 21, 38, 21, 48, 48, 
+	20, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	21, 0, 23, 24, 25, 25, 22, 26, 
+	27, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 28, 29, 30, 31, 22, 
+	22, 22, 22, 22, 22, 22, 22, 32, 
+	22, 22, 33, 34, 35, 36, 37, 38, 
+	39, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	26, 22, 25, 25, 22, 26, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 31, 22, 22, 22, 
+	22, 22, 22, 22, 22, 40, 22, 22, 
+	22, 22, 22, 22, 37, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 26, 22, 
+	25, 25, 22, 26, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 37, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 26, 22, 41, 22, 
+	25, 25, 22, 26, 37, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 26, 22, 22, 22, 22, 
+	22, 22, 37, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 26, 22, 25, 25, 
+	22, 26, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	22, 26, 22, 22, 22, 22, 22, 22, 
+	37, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 26, 22, 23, 22, 25, 25, 
+	22, 26, 27, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 42, 22, 22, 
+	31, 22, 22, 22, 22, 22, 22, 22, 
+	22, 43, 22, 22, 44, 22, 22, 22, 
+	37, 22, 43, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 26, 22, 23, 22, 25, 25, 
+	22, 26, 27, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	31, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	37, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 26, 22, 23, 22, 25, 25, 
+	22, 26, 27, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 42, 22, 22, 
+	31, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	37, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 26, 22, 23, 22, 25, 25, 
+	22, 26, 27, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 42, 22, 22, 
+	31, 22, 22, 22, 22, 22, 22, 22, 
+	22, 43, 22, 22, 22, 22, 22, 22, 
+	37, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 26, 22, 23, 22, 25, 25, 
+	22, 26, 27, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 42, 22, 22, 
+	31, 22, 22, 22, 22, 22, 22, 22, 
+	22, 43, 22, 22, 22, 22, 22, 22, 
+	37, 22, 43, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 26, 22, 25, 25, 22, 26, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 31, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 37, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	26, 22, 1, 1, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	1, 22, 23, 22, 25, 25, 22, 26, 
+	27, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 28, 29, 22, 31, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 37, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	26, 22, 23, 22, 25, 25, 22, 26, 
+	27, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 29, 22, 31, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 37, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	26, 22, 23, 22, 25, 25, 22, 26, 
+	27, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 28, 29, 30, 31, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 37, 45, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	26, 22, 23, 22, 25, 25, 22, 26, 
+	27, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 28, 29, 30, 31, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 37, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	26, 22, 23, 22, 25, 25, 22, 26, 
+	27, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 28, 29, 30, 31, 22, 
+	22, 22, 22, 22, 22, 22, 22, 32, 
+	22, 22, 33, 34, 35, 36, 37, 22, 
+	39, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	26, 22, 23, 22, 25, 25, 22, 26, 
+	27, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 28, 29, 30, 31, 22, 
+	22, 22, 22, 22, 22, 22, 22, 45, 
+	22, 22, 22, 22, 22, 22, 37, 22, 
+	39, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	26, 22, 23, 22, 25, 25, 22, 26, 
+	27, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 28, 29, 30, 31, 22, 
+	22, 22, 22, 22, 22, 22, 22, 45, 
+	22, 22, 22, 22, 22, 22, 37, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	26, 22, 23, 22, 25, 25, 22, 26, 
+	27, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 28, 29, 30, 31, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 33, 22, 35, 22, 37, 22, 
+	39, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	26, 22, 23, 22, 25, 25, 22, 26, 
+	27, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 28, 29, 30, 31, 22, 
+	22, 22, 22, 22, 22, 22, 22, 45, 
+	22, 22, 33, 22, 22, 22, 37, 22, 
+	39, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	26, 22, 23, 22, 25, 25, 22, 26, 
+	27, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 28, 29, 30, 31, 22, 
+	22, 22, 22, 22, 22, 22, 22, 46, 
+	22, 22, 33, 34, 35, 22, 37, 22, 
+	39, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	26, 22, 23, 22, 25, 25, 22, 26, 
+	27, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 28, 29, 30, 31, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 33, 34, 35, 22, 37, 22, 
+	39, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	26, 22, 23, 24, 25, 25, 22, 26, 
+	27, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 28, 29, 30, 31, 22, 
+	22, 22, 22, 22, 22, 22, 22, 32, 
+	22, 22, 33, 34, 35, 36, 37, 22, 
+	39, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	26, 22, 48, 48, 47, 5, 47, 47, 
+	47, 47, 47, 47, 47, 47, 47, 47, 
+	47, 47, 47, 47, 12, 47, 47, 47, 
+	47, 47, 47, 47, 47, 49, 47, 47, 
+	47, 47, 47, 47, 18, 47, 47, 47, 
+	47, 47, 47, 47, 47, 47, 47, 47, 
+	47, 47, 47, 47, 47, 47, 5, 47, 
+	48, 48, 50, 5, 50, 50, 50, 50, 
+	50, 50, 50, 50, 50, 50, 50, 50, 
+	50, 50, 50, 50, 50, 50, 50, 50, 
+	50, 50, 50, 50, 50, 50, 50, 50, 
+	50, 50, 18, 50, 50, 50, 50, 50, 
+	50, 50, 50, 50, 50, 50, 50, 50, 
+	50, 50, 50, 50, 5, 50, 51, 47, 
+	48, 48, 47, 5, 18, 47, 47, 47, 
+	47, 47, 47, 47, 47, 47, 47, 47, 
+	47, 47, 47, 47, 47, 47, 47, 47, 
+	47, 47, 47, 5, 47, 47, 47, 47, 
+	47, 47, 18, 47, 47, 47, 47, 47, 
+	47, 47, 47, 47, 47, 47, 47, 47, 
+	47, 47, 47, 47, 5, 47, 48, 48, 
 	47, 5, 47, 47, 47, 47, 47, 47, 
 	47, 47, 47, 47, 47, 47, 47, 47, 
+	47, 47, 47, 47, 47, 47, 47, 47, 
+	47, 5, 47, 47, 47, 47, 47, 47, 
+	18, 47, 47, 47, 47, 47, 47, 47, 
+	47, 47, 47, 47, 47, 47, 47, 47, 
+	47, 47, 5, 47, 2, 47, 48, 48, 
+	47, 5, 6, 47, 47, 47, 47, 47, 
+	47, 47, 47, 47, 47, 52, 47, 47, 
 	12, 47, 47, 47, 47, 47, 47, 47, 
-	47, 49, 47, 47, 47, 47, 47, 47, 
-	18, 47, 48, 48, 47, 5, 47, 2, 
-	47, 48, 48, 47, 5, 6, 47, 47, 
+	47, 53, 47, 47, 54, 47, 47, 47, 
+	18, 47, 53, 47, 47, 47, 47, 47, 
 	47, 47, 47, 47, 47, 47, 47, 47, 
-	50, 47, 47, 12, 47, 47, 47, 47, 
-	47, 47, 47, 47, 51, 47, 47, 52, 
-	47, 47, 47, 18, 47, 51, 47, 2, 
-	47, 48, 48, 47, 5, 6, 47, 47, 
+	47, 47, 5, 47, 2, 47, 48, 48, 
+	47, 5, 6, 47, 47, 47, 47, 47, 
 	47, 47, 47, 47, 47, 47, 47, 47, 
-	47, 47, 47, 12, 47, 47, 47, 47, 
+	12, 47, 47, 47, 47, 47, 47, 47, 
 	47, 47, 47, 47, 47, 47, 47, 47, 
-	47, 47, 47, 18, 47, 53, 47, 48, 
-	48, 47, 5, 18, 47, 47, 47, 47, 
+	18, 47, 47, 47, 47, 47, 47, 47, 
 	47, 47, 47, 47, 47, 47, 47, 47, 
+	47, 47, 5, 47, 2, 47, 48, 48, 
+	47, 5, 6, 47, 47, 47, 47, 47, 
+	47, 47, 47, 47, 47, 52, 47, 47, 
+	12, 47, 47, 47, 47, 47, 47, 47, 
 	47, 47, 47, 47, 47, 47, 47, 47, 
-	47, 47, 54, 47, 47, 47, 47, 47, 
-	47, 18, 47, 48, 48, 47, 5, 47, 
+	18, 47, 47, 47, 47, 47, 47, 47, 
 	47, 47, 47, 47, 47, 47, 47, 47, 
+	47, 47, 5, 47, 2, 47, 48, 48, 
+	47, 5, 6, 47, 47, 47, 47, 47, 
+	47, 47, 47, 47, 47, 52, 47, 47, 
+	12, 47, 47, 47, 47, 47, 47, 47, 
+	47, 53, 47, 47, 47, 47, 47, 47, 
+	18, 47, 47, 47, 47, 47, 47, 47, 
 	47, 47, 47, 47, 47, 47, 47, 47, 
-	47, 47, 47, 47, 47, 47, 54, 47, 
-	47, 47, 47, 47, 47, 18, 47, 48, 
-	48, 47, 5, 47, 47, 47, 47, 47, 
+	47, 47, 5, 47, 2, 47, 48, 48, 
+	47, 5, 6, 47, 47, 47, 47, 47, 
+	47, 47, 47, 47, 47, 52, 47, 47, 
+	12, 47, 47, 47, 47, 47, 47, 47, 
+	47, 53, 47, 47, 47, 47, 47, 47, 
+	18, 47, 53, 47, 47, 47, 47, 47, 
 	47, 47, 47, 47, 47, 47, 47, 47, 
+	47, 47, 5, 47, 48, 48, 47, 5, 
 	47, 47, 47, 47, 47, 47, 47, 47, 
+	47, 47, 47, 47, 47, 47, 12, 47, 
 	47, 47, 47, 47, 47, 47, 47, 47, 
-	47, 18, 47, 2, 47, 48, 48, 47, 
-	5, 6, 47, 47, 47, 47, 47, 47, 
-	47, 47, 47, 47, 50, 47, 47, 12, 
+	47, 47, 47, 47, 47, 47, 18, 47, 
 	47, 47, 47, 47, 47, 47, 47, 47, 
-	47, 47, 47, 47, 47, 47, 47, 18, 
-	47, 2, 47, 48, 48, 47, 5, 6, 
 	47, 47, 47, 47, 47, 47, 47, 47, 
-	47, 47, 50, 47, 47, 12, 47, 47, 
-	47, 47, 47, 47, 47, 47, 51, 47, 
-	47, 47, 47, 47, 47, 18, 47, 2, 
-	47, 48, 48, 47, 5, 6, 47, 47, 
+	5, 47, 55, 55, 47, 47, 47, 47, 
 	47, 47, 47, 47, 47, 47, 47, 47, 
-	50, 47, 47, 12, 47, 47, 47, 47, 
-	47, 47, 47, 47, 51, 47, 47, 47, 
-	47, 47, 47, 18, 47, 51, 47, 48, 
-	48, 47, 5, 47, 47, 47, 47, 47, 
+	55, 47, 2, 3, 48, 48, 47, 5, 
+	6, 47, 47, 47, 47, 47, 47, 47, 
+	47, 47, 47, 9, 10, 11, 12, 47, 
+	47, 47, 47, 47, 47, 47, 47, 13, 
+	47, 47, 14, 15, 16, 17, 18, 19, 
+	20, 47, 47, 47, 47, 47, 47, 47, 
 	47, 47, 47, 47, 47, 47, 47, 47, 
-	47, 12, 47, 47, 47, 47, 47, 47, 
+	5, 47, 2, 47, 48, 48, 47, 5, 
+	6, 47, 47, 47, 47, 47, 47, 47, 
+	47, 47, 47, 9, 10, 47, 12, 47, 
 	47, 47, 47, 47, 47, 47, 47, 47, 
-	47, 18, 47, 55, 55, 47, 47, 47, 
+	47, 47, 47, 47, 47, 47, 18, 47, 
 	47, 47, 47, 47, 47, 47, 47, 47, 
-	47, 55, 47, 2, 3, 48, 48, 47, 
-	5, 6, 47, 47, 47, 47, 47, 47, 
-	47, 47, 47, 47, 9, 10, 11, 12, 
 	47, 47, 47, 47, 47, 47, 47, 47, 
-	13, 47, 47, 14, 15, 16, 17, 18, 
-	19, 20, 47, 2, 47, 48, 48, 47, 
-	5, 6, 47, 47, 47, 47, 47, 47, 
-	47, 47, 47, 47, 9, 10, 47, 12, 
+	5, 47, 2, 47, 48, 48, 47, 5, 
+	6, 47, 47, 47, 47, 47, 47, 47, 
+	47, 47, 47, 47, 10, 47, 12, 47, 
 	47, 47, 47, 47, 47, 47, 47, 47, 
-	47, 47, 47, 47, 47, 47, 47, 18, 
-	47, 2, 47, 48, 48, 47, 5, 6, 
+	47, 47, 47, 47, 47, 47, 18, 47, 
 	47, 47, 47, 47, 47, 47, 47, 47, 
-	47, 47, 47, 10, 47, 12, 47, 47, 
 	47, 47, 47, 47, 47, 47, 47, 47, 
-	47, 47, 47, 47, 47, 18, 47, 2, 
-	47, 48, 48, 47, 5, 6, 47, 47, 
+	5, 47, 2, 47, 48, 48, 47, 5, 
+	6, 47, 47, 47, 47, 47, 47, 47, 
+	47, 47, 47, 9, 10, 11, 12, 47, 
 	47, 47, 47, 47, 47, 47, 47, 47, 
-	9, 10, 11, 12, 47, 47, 47, 47, 
+	47, 47, 47, 47, 47, 47, 18, 56, 
 	47, 47, 47, 47, 47, 47, 47, 47, 
-	47, 47, 47, 18, 56, 47, 2, 47, 
-	48, 48, 47, 5, 6, 47, 47, 47, 
-	47, 47, 47, 47, 47, 47, 47, 9, 
-	10, 11, 12, 47, 47, 47, 47, 47, 
 	47, 47, 47, 47, 47, 47, 47, 47, 
-	47, 47, 18, 47, 2, 47, 48, 48, 
-	47, 5, 6, 47, 47, 47, 47, 47, 
-	47, 47, 47, 47, 47, 9, 10, 11, 
-	12, 47, 47, 47, 47, 47, 47, 47, 
-	47, 13, 47, 47, 14, 15, 16, 17, 
-	18, 47, 20, 47, 2, 47, 48, 48, 
-	47, 5, 6, 47, 47, 47, 47, 47, 
-	47, 47, 47, 47, 47, 9, 10, 11, 
-	12, 47, 47, 47, 47, 47, 47, 47, 
-	47, 56, 47, 47, 47, 47, 47, 47, 
-	18, 47, 20, 47, 2, 47, 48, 48, 
-	47, 5, 6, 47, 47, 47, 47, 47, 
-	47, 47, 47, 47, 47, 9, 10, 11, 
-	12, 47, 47, 47, 47, 47, 47, 47, 
-	47, 56, 47, 47, 47, 47, 47, 47, 
-	18, 47, 2, 47, 48, 48, 47, 5, 
+	5, 47, 2, 47, 48, 48, 47, 5, 
 	6, 47, 47, 47, 47, 47, 47, 47, 
 	47, 47, 47, 9, 10, 11, 12, 47, 
 	47, 47, 47, 47, 47, 47, 47, 47, 
+	47, 47, 47, 47, 47, 47, 18, 47, 
+	47, 47, 47, 47, 47, 47, 47, 47, 
+	47, 47, 47, 47, 47, 47, 47, 47, 
+	5, 47, 2, 47, 48, 48, 47, 5, 
+	6, 47, 47, 47, 47, 47, 47, 47, 
+	47, 47, 47, 9, 10, 11, 12, 47, 
+	47, 47, 47, 47, 47, 47, 47, 13, 
+	47, 47, 14, 15, 16, 17, 18, 47, 
+	20, 47, 47, 47, 47, 47, 47, 47, 
+	47, 47, 47, 47, 47, 47, 47, 47, 
+	5, 47, 2, 47, 48, 48, 47, 5, 
+	6, 47, 47, 47, 47, 47, 47, 47, 
+	47, 47, 47, 9, 10, 11, 12, 47, 
+	47, 47, 47, 47, 47, 47, 47, 56, 
+	47, 47, 47, 47, 47, 47, 18, 47, 
+	20, 47, 47, 47, 47, 47, 47, 47, 
+	47, 47, 47, 47, 47, 47, 47, 47, 
+	5, 47, 2, 47, 48, 48, 47, 5, 
+	6, 47, 47, 47, 47, 47, 47, 47, 
+	47, 47, 47, 9, 10, 11, 12, 47, 
+	47, 47, 47, 47, 47, 47, 47, 56, 
+	47, 47, 47, 47, 47, 47, 18, 47, 
+	47, 47, 47, 47, 47, 47, 47, 47, 
+	47, 47, 47, 47, 47, 47, 47, 47, 
+	5, 47, 2, 47, 48, 48, 47, 5, 
+	6, 47, 47, 47, 47, 47, 47, 47, 
+	47, 47, 47, 9, 10, 11, 12, 47, 
+	47, 47, 47, 47, 47, 47, 47, 47, 
 	47, 47, 14, 47, 16, 47, 18, 47, 
-	20, 47, 2, 47, 48, 48, 47, 5, 
+	20, 47, 47, 47, 47, 47, 47, 47, 
+	47, 47, 47, 47, 47, 47, 47, 47, 
+	5, 47, 2, 47, 48, 48, 47, 5, 
 	6, 47, 47, 47, 47, 47, 47, 47, 
 	47, 47, 47, 9, 10, 11, 12, 47, 
 	47, 47, 47, 47, 47, 47, 47, 56, 
 	47, 47, 14, 47, 47, 47, 18, 47, 
-	20, 47, 2, 47, 48, 48, 47, 5, 
+	20, 47, 47, 47, 47, 47, 47, 47, 
+	47, 47, 47, 47, 47, 47, 47, 47, 
+	5, 47, 2, 47, 48, 48, 47, 5, 
 	6, 47, 47, 47, 47, 47, 47, 47, 
 	47, 47, 47, 9, 10, 11, 12, 47, 
 	47, 47, 47, 47, 47, 47, 47, 57, 
 	47, 47, 14, 15, 16, 47, 18, 47, 
-	20, 47, 2, 47, 48, 48, 47, 5, 
+	20, 47, 47, 47, 47, 47, 47, 47, 
+	47, 47, 47, 47, 47, 47, 47, 47, 
+	5, 47, 2, 47, 48, 48, 47, 5, 
 	6, 47, 47, 47, 47, 47, 47, 47, 
 	47, 47, 47, 9, 10, 11, 12, 47, 
 	47, 47, 47, 47, 47, 47, 47, 47, 
 	47, 47, 14, 15, 16, 47, 18, 47, 
-	20, 47, 2, 3, 48, 48, 47, 5, 
+	20, 47, 47, 47, 47, 47, 47, 47, 
+	47, 47, 47, 47, 47, 47, 47, 47, 
+	5, 47, 2, 3, 48, 48, 47, 5, 
 	6, 47, 47, 47, 47, 47, 47, 47, 
 	47, 47, 47, 9, 10, 11, 12, 47, 
 	47, 47, 47, 47, 47, 47, 47, 13, 
 	47, 47, 14, 15, 16, 17, 18, 47, 
-	20, 47, 22, 23, 24, 24, 21, 25, 
-	26, 21, 21, 21, 21, 21, 21, 21, 
-	21, 21, 21, 27, 28, 29, 30, 21, 
-	21, 21, 21, 21, 21, 21, 21, 58, 
-	21, 21, 32, 33, 34, 35, 36, 37, 
-	38, 21, 22, 59, 24, 24, 21, 25, 
-	26, 21, 21, 21, 21, 21, 21, 21, 
-	21, 21, 21, 27, 28, 29, 30, 21, 
-	21, 21, 21, 21, 21, 21, 21, 31, 
-	21, 21, 32, 33, 34, 35, 36, 21, 
-	38, 21, 1, 1, 2, 3, 48, 48, 
+	20, 47, 47, 47, 47, 47, 47, 47, 
+	47, 47, 47, 47, 47, 47, 47, 47, 
+	5, 47, 23, 24, 25, 25, 22, 26, 
+	27, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 28, 29, 30, 31, 22, 
+	22, 22, 22, 22, 22, 22, 22, 58, 
+	22, 22, 33, 34, 35, 36, 37, 38, 
+	39, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	26, 22, 23, 59, 25, 25, 22, 26, 
+	27, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 28, 29, 30, 31, 22, 
+	22, 22, 22, 22, 22, 22, 22, 32, 
+	22, 22, 33, 34, 35, 36, 37, 22, 
+	39, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	26, 22, 1, 1, 2, 3, 48, 48, 
 	47, 5, 6, 1, 1, 47, 47, 47, 
 	1, 47, 47, 47, 47, 9, 10, 11, 
 	12, 47, 47, 47, 47, 47, 47, 47, 
 	47, 13, 47, 47, 14, 15, 16, 17, 
-	18, 19, 20, 47, 1, 1, 60, 60, 
+	18, 19, 20, 47, 47, 47, 47, 47, 
+	47, 47, 47, 47, 47, 47, 47, 47, 
+	47, 47, 5, 47, 1, 1, 60, 60, 
 	60, 60, 60, 60, 60, 1, 1, 60, 
 	60, 60, 1, 60, 0
 };
 
 static const char _myanmar_syllable_machine_trans_targs[] = {
-	0, 1, 26, 37, 0, 27, 29, 51, 
-	54, 39, 40, 41, 28, 43, 44, 46, 
-	47, 48, 30, 50, 45, 0, 2, 13, 
-	0, 3, 5, 14, 15, 16, 4, 18, 
-	19, 21, 22, 23, 6, 25, 20, 12, 
-	9, 10, 11, 7, 8, 17, 24, 0, 
-	0, 36, 33, 34, 35, 31, 32, 38, 
-	42, 49, 52, 53, 0
+	0, 1, 25, 35, 0, 26, 30, 49, 
+	52, 37, 38, 39, 29, 41, 42, 44, 
+	45, 46, 27, 48, 43, 26, 0, 2, 
+	12, 0, 3, 7, 13, 14, 15, 6, 
+	17, 18, 20, 21, 22, 4, 24, 19, 
+	11, 5, 8, 9, 10, 16, 23, 0, 
+	0, 34, 0, 28, 31, 32, 33, 36, 
+	40, 47, 50, 51, 0
 };
 
 static const char _myanmar_syllable_machine_trans_actions[] = {
-	3, 0, 0, 0, 4, 0, 0, 0, 
+	3, 0, 0, 0, 4, 5, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
-	0, 0, 0, 0, 0, 5, 0, 0, 
-	6, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 6, 7, 0, 
+	0, 8, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
-	0, 0, 0, 0, 0, 0, 0, 7, 
-	8, 0, 0, 0, 0, 0, 0, 0, 
-	0, 0, 0, 0, 9
+	0, 0, 0, 0, 0, 0, 0, 9, 
+	10, 0, 11, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 12
 };
 
 static const char _myanmar_syllable_machine_to_state_actions[] = {
@@ -390,7 +496,7 @@
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
-	0, 0, 0, 0, 0, 0, 0
+	0, 0, 0, 0, 0
 };
 
 static const char _myanmar_syllable_machine_from_state_actions[] = {
@@ -400,17 +506,17 @@
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
-	0, 0, 0, 0, 0, 0, 0
+	0, 0, 0, 0, 0
 };
 
 static const short _myanmar_syllable_machine_eof_trans[] = {
-	0, 22, 22, 22, 22, 22, 22, 22, 
-	22, 22, 22, 22, 22, 22, 22, 22, 
-	22, 22, 22, 22, 22, 22, 22, 22, 
-	22, 22, 48, 48, 48, 48, 48, 48, 
+	0, 23, 23, 23, 23, 23, 23, 23, 
+	23, 23, 23, 23, 23, 23, 23, 23, 
+	23, 23, 23, 23, 23, 23, 23, 23, 
+	23, 48, 51, 48, 48, 48, 48, 48, 
 	48, 48, 48, 48, 48, 48, 48, 48, 
 	48, 48, 48, 48, 48, 48, 48, 48, 
-	48, 48, 48, 22, 22, 48, 61
+	48, 23, 23, 48, 61
 };
 
 static const int myanmar_syllable_machine_start = 0;
@@ -424,7 +530,7 @@
 
 
 
-#line 117 "hb-ot-shaper-myanmar-machine.rl"
+#line 118 "hb-ot-shaper-myanmar-machine.rl"
 
 
 #define found_syllable(syllable_type) \
@@ -443,7 +549,7 @@
   int cs;
   hb_glyph_info_t *info = buffer->info;
   
-#line 447 "hb-ot-shaper-myanmar-machine.hh"
+#line 553 "hb-ot-shaper-myanmar-machine.hh"
 	{
 	cs = myanmar_syllable_machine_start;
 	ts = 0;
@@ -451,7 +557,7 @@
 	act = 0;
 	}
 
-#line 137 "hb-ot-shaper-myanmar-machine.rl"
+#line 138 "hb-ot-shaper-myanmar-machine.rl"
 
 
   p = 0;
@@ -459,7 +565,7 @@
 
   unsigned int syllable_serial = 1;
   
-#line 463 "hb-ot-shaper-myanmar-machine.hh"
+#line 569 "hb-ot-shaper-myanmar-machine.hh"
 	{
 	int _slen;
 	int _trans;
@@ -473,7 +579,7 @@
 #line 1 "NONE"
 	{ts = p;}
 	break;
-#line 477 "hb-ot-shaper-myanmar-machine.hh"
+#line 583 "hb-ot-shaper-myanmar-machine.hh"
 	}
 
 	_keys = _myanmar_syllable_machine_trans_keys + (cs<<1);
@@ -491,36 +597,60 @@
 		goto _again;
 
 	switch ( _myanmar_syllable_machine_trans_actions[_trans] ) {
-	case 6:
-#line 110 "hb-ot-shaper-myanmar-machine.rl"
+	case 8:
+#line 111 "hb-ot-shaper-myanmar-machine.rl"
 	{te = p+1;{ found_syllable (myanmar_consonant_syllable); }}
 	break;
 	case 4:
-#line 111 "hb-ot-shaper-myanmar-machine.rl"
+#line 112 "hb-ot-shaper-myanmar-machine.rl"
 	{te = p+1;{ found_syllable (myanmar_non_myanmar_cluster); }}
 	break;
-	case 8:
-#line 112 "hb-ot-shaper-myanmar-machine.rl"
+	case 10:
+#line 113 "hb-ot-shaper-myanmar-machine.rl"
 	{te = p+1;{ found_syllable (myanmar_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }}
 	break;
 	case 3:
-#line 113 "hb-ot-shaper-myanmar-machine.rl"
+#line 114 "hb-ot-shaper-myanmar-machine.rl"
 	{te = p+1;{ found_syllable (myanmar_non_myanmar_cluster); }}
 	break;
-	case 5:
-#line 110 "hb-ot-shaper-myanmar-machine.rl"
+	case 7:
+#line 111 "hb-ot-shaper-myanmar-machine.rl"
 	{te = p;p--;{ found_syllable (myanmar_consonant_syllable); }}
 	break;
-	case 7:
-#line 112 "hb-ot-shaper-myanmar-machine.rl"
+	case 9:
+#line 113 "hb-ot-shaper-myanmar-machine.rl"
 	{te = p;p--;{ found_syllable (myanmar_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }}
 	break;
-	case 9:
-#line 113 "hb-ot-shaper-myanmar-machine.rl"
+	case 12:
+#line 114 "hb-ot-shaper-myanmar-machine.rl"
 	{te = p;p--;{ found_syllable (myanmar_non_myanmar_cluster); }}
 	break;
-#line 523 "hb-ot-shaper-myanmar-machine.hh"
+	case 11:
+#line 1 "NONE"
+	{	switch( act ) {
+	case 2:
+	{{p = ((te))-1;} found_syllable (myanmar_non_myanmar_cluster); }
+	break;
+	case 3:
+	{{p = ((te))-1;} found_syllable (myanmar_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }
+	break;
 	}
+	}
+	break;
+	case 6:
+#line 1 "NONE"
+	{te = p+1;}
+#line 112 "hb-ot-shaper-myanmar-machine.rl"
+	{act = 2;}
+	break;
+	case 5:
+#line 1 "NONE"
+	{te = p+1;}
+#line 113 "hb-ot-shaper-myanmar-machine.rl"
+	{act = 3;}
+	break;
+#line 653 "hb-ot-shaper-myanmar-machine.hh"
+	}
 
 _again:
 	switch ( _myanmar_syllable_machine_to_state_actions[cs] ) {
@@ -528,7 +658,7 @@
 #line 1 "NONE"
 	{ts = 0;}
 	break;
-#line 532 "hb-ot-shaper-myanmar-machine.hh"
+#line 662 "hb-ot-shaper-myanmar-machine.hh"
 	}
 
 	if ( ++p != pe )
@@ -544,7 +674,7 @@
 
 	}
 
-#line 145 "hb-ot-shaper-myanmar-machine.rl"
+#line 146 "hb-ot-shaper-myanmar-machine.rl"
 
 }
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shaper-myanmar-machine.rl
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shaper-myanmar-machine.rl	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shaper-myanmar-machine.rl	2025-01-11 23:22:13 UTC (rev 73427)
@@ -72,6 +72,7 @@
 export A    = 9;
 export Ra   = 15;
 export CS   = 18;
+export SMPst= 57;
 
 export VAbv = 20;
 export VBlw = 21;
@@ -91,15 +92,15 @@
 
 j = ZWJ|ZWNJ;			# Joiners
 k = (Ra As H);			# Kinzi
-
+sm = SM | SMPst;
 c = C|Ra;			# is_consonant
 
 medial_group = MY? As? MR? ((MW MH? ML? | MH ML? | ML) As?)?;
 main_vowel_group = (VPre.VS?)* VAbv* VBlw* A* (DB As?)?;
 post_vowel_group = VPst MH? ML? As* VAbv* A* (DB As?)?;
-pwo_tone_group = PT A* DB? As?;
+tone_group = sm | PT A* DB? As?;
 
-complex_syllable_tail = As* medial_group main_vowel_group post_vowel_group* pwo_tone_group* SM* j?;
+complex_syllable_tail = As* medial_group main_vowel_group post_vowel_group* tone_group* j?;
 syllable_tail = (H (c|IV).VS?)* (H | complex_syllable_tail);
 
 consonant_syllable =	(k|CS)? (c|IV|GB|DOTTEDCIRCLE).VS? syllable_tail;
@@ -108,7 +109,7 @@
 
 main := |*
 	consonant_syllable	=> { found_syllable (myanmar_consonant_syllable); };
-	j			=> { found_syllable (myanmar_non_myanmar_cluster); };
+	j | SMPst		=> { found_syllable (myanmar_non_myanmar_cluster); };
 	broken_cluster		=> { found_syllable (myanmar_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; };
 	other			=> { found_syllable (myanmar_non_myanmar_cluster); };
 *|;

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shaper-use-machine.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shaper-use-machine.hh	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shaper-use-machine.hh	2025-01-11 23:22:13 UTC (rev 73427)
@@ -166,556 +166,556 @@
 	19, 20, 21, 8, 22, 23, 24, 25, 
 	5, 26, 27, 28, 5, 29, 30, 31, 
 	32, 33, 34, 35, 32, 1, 5, 36, 
-	5, 37, 5, 5, 35, 5, 39, 40, 
-	38, 41, 38, 38, 38, 38, 38, 38, 
-	38, 42, 43, 44, 45, 46, 47, 48, 
-	49, 50, 39, 51, 52, 53, 54, 38, 
-	55, 56, 57, 38, 58, 59, 38, 60, 
-	61, 62, 63, 60, 38, 38, 38, 38, 
-	64, 38, 38, 63, 38, 39, 40, 38, 
-	41, 38, 38, 38, 38, 38, 38, 38, 
-	42, 43, 44, 45, 46, 47, 48, 49, 
-	50, 39, 51, 52, 53, 54, 38, 55, 
-	56, 57, 38, 38, 38, 38, 60, 61, 
-	62, 63, 60, 38, 38, 38, 38, 64, 
-	38, 38, 63, 38, 39, 38, 38, 38, 
-	38, 38, 38, 38, 38, 38, 38, 38, 
-	38, 41, 38, 38, 38, 38, 38, 38, 
-	38, 38, 43, 44, 45, 46, 38, 38, 
-	38, 38, 38, 38, 38, 38, 38, 38, 
-	55, 56, 57, 38, 38, 38, 38, 38, 
-	61, 62, 63, 65, 38, 38, 38, 38, 
-	43, 38, 41, 38, 38, 38, 38, 38, 
-	38, 38, 38, 43, 44, 45, 46, 38, 
-	38, 38, 38, 38, 38, 38, 38, 38, 
-	38, 55, 56, 57, 38, 38, 38, 38, 
-	38, 61, 62, 63, 65, 38, 41, 38, 
-	38, 38, 38, 38, 38, 38, 38, 38, 
-	44, 45, 46, 38, 38, 38, 38, 38, 
-	38, 38, 38, 38, 38, 38, 38, 38, 
-	38, 38, 38, 38, 38, 61, 62, 63, 
-	38, 41, 38, 38, 38, 38, 38, 38, 
-	38, 38, 38, 38, 45, 46, 38, 38, 
-	38, 38, 38, 38, 38, 38, 38, 38, 
-	38, 38, 38, 38, 38, 38, 38, 38, 
-	61, 62, 63, 38, 41, 38, 38, 38, 
-	38, 38, 38, 38, 38, 38, 38, 38, 
-	46, 38, 38, 38, 38, 38, 38, 38, 
-	38, 38, 38, 38, 38, 38, 38, 38, 
-	38, 38, 38, 61, 62, 63, 38, 41, 
-	38, 38, 38, 38, 38, 38, 38, 38, 
-	38, 38, 38, 38, 38, 38, 38, 38, 
-	38, 38, 38, 38, 38, 38, 38, 38, 
-	38, 38, 38, 38, 38, 38, 61, 62, 
-	38, 41, 38, 38, 38, 38, 38, 38, 
-	38, 38, 38, 38, 38, 38, 38, 38, 
-	38, 38, 38, 38, 38, 38, 38, 38, 
-	38, 38, 38, 38, 38, 38, 38, 38, 
-	38, 62, 38, 41, 38, 41, 38, 38, 
-	38, 38, 38, 38, 38, 38, 38, 44, 
-	45, 46, 38, 38, 38, 38, 38, 38, 
-	38, 38, 38, 38, 55, 56, 57, 38, 
-	38, 38, 38, 38, 61, 62, 63, 65, 
-	38, 41, 38, 38, 38, 38, 38, 38, 
-	38, 38, 38, 44, 45, 46, 38, 38, 
-	38, 38, 38, 38, 38, 38, 38, 38, 
-	38, 56, 57, 38, 38, 38, 38, 38, 
-	61, 62, 63, 65, 38, 41, 38, 38, 
-	38, 38, 38, 38, 38, 38, 38, 44, 
-	45, 46, 38, 38, 38, 38, 38, 38, 
-	38, 38, 38, 38, 38, 38, 57, 38, 
-	38, 38, 38, 38, 61, 62, 63, 65, 
-	38, 66, 38, 38, 38, 38, 38, 38, 
-	38, 38, 38, 38, 38, 38, 41, 38, 
-	41, 38, 38, 38, 38, 38, 38, 38, 
-	38, 38, 44, 45, 46, 38, 38, 38, 
-	38, 38, 38, 38, 38, 38, 38, 38, 
-	38, 38, 38, 38, 38, 38, 38, 61, 
-	62, 63, 65, 38, 41, 38, 38, 38, 
-	38, 38, 38, 38, 42, 43, 44, 45, 
-	46, 38, 38, 38, 38, 38, 38, 52, 
-	53, 54, 38, 55, 56, 57, 38, 38, 
-	38, 38, 38, 61, 62, 63, 65, 38, 
-	38, 38, 38, 43, 38, 41, 38, 38, 
-	38, 38, 38, 38, 38, 38, 43, 44, 
-	45, 46, 38, 38, 38, 38, 38, 38, 
-	52, 53, 54, 38, 55, 56, 57, 38, 
-	38, 38, 38, 38, 61, 62, 63, 65, 
-	38, 38, 38, 38, 43, 38, 41, 38, 
-	38, 38, 38, 38, 38, 38, 38, 43, 
-	44, 45, 46, 38, 38, 38, 38, 38, 
-	38, 38, 53, 54, 38, 55, 56, 57, 
-	38, 38, 38, 38, 38, 61, 62, 63, 
-	65, 38, 38, 38, 38, 43, 38, 41, 
-	38, 38, 38, 38, 38, 38, 38, 38, 
-	43, 44, 45, 46, 38, 38, 38, 38, 
-	38, 38, 38, 38, 54, 38, 55, 56, 
-	57, 38, 38, 38, 38, 38, 61, 62, 
-	63, 65, 38, 38, 38, 38, 43, 38, 
-	67, 38, 41, 38, 38, 38, 38, 38, 
-	38, 38, 42, 43, 44, 45, 46, 38, 
-	48, 49, 38, 38, 38, 52, 53, 54, 
-	38, 55, 56, 57, 38, 38, 38, 38, 
-	38, 61, 62, 63, 65, 38, 38, 38, 
-	38, 43, 38, 41, 38, 38, 38, 38, 
-	38, 38, 38, 38, 43, 44, 45, 46, 
-	38, 38, 38, 38, 38, 38, 38, 38, 
-	38, 38, 55, 56, 57, 38, 38, 38, 
-	38, 38, 61, 62, 63, 65, 38, 38, 
-	38, 38, 43, 38, 67, 38, 41, 38, 
-	38, 38, 38, 38, 38, 38, 42, 43, 
-	44, 45, 46, 38, 38, 49, 38, 38, 
-	38, 52, 53, 54, 38, 55, 56, 57, 
-	38, 38, 38, 38, 38, 61, 62, 63, 
-	65, 38, 38, 38, 38, 43, 38, 67, 
-	38, 41, 38, 38, 38, 38, 38, 38, 
-	38, 42, 43, 44, 45, 46, 38, 38, 
-	38, 38, 38, 38, 52, 53, 54, 38, 
-	55, 56, 57, 38, 38, 38, 38, 38, 
-	61, 62, 63, 65, 38, 38, 38, 38, 
-	43, 38, 67, 38, 41, 38, 38, 38, 
-	38, 38, 38, 38, 42, 43, 44, 45, 
-	46, 47, 48, 49, 38, 38, 38, 52, 
-	53, 54, 38, 55, 56, 57, 38, 38, 
-	38, 38, 38, 61, 62, 63, 65, 38, 
-	38, 38, 38, 43, 38, 39, 40, 38, 
-	41, 38, 38, 38, 38, 38, 38, 38, 
-	42, 43, 44, 45, 46, 47, 48, 49, 
-	50, 38, 51, 52, 53, 54, 38, 55, 
-	56, 57, 38, 38, 38, 38, 60, 61, 
-	62, 63, 60, 38, 38, 38, 38, 64, 
-	38, 38, 63, 38, 39, 38, 38, 38, 
-	38, 38, 38, 38, 38, 38, 38, 38, 
-	38, 41, 38, 39, 38, 38, 38, 38, 
-	38, 38, 38, 38, 38, 38, 38, 38, 
-	41, 38, 38, 38, 38, 38, 38, 38, 
-	38, 43, 44, 45, 46, 38, 38, 38, 
-	38, 38, 38, 38, 38, 38, 38, 55, 
-	56, 57, 38, 38, 38, 38, 38, 61, 
-	62, 63, 65, 38, 41, 38, 38, 38, 
-	38, 38, 38, 38, 38, 38, 38, 38, 
-	38, 38, 38, 38, 38, 38, 38, 38, 
-	38, 38, 38, 38, 38, 38, 38, 58, 
-	59, 38, 41, 38, 38, 38, 38, 38, 
-	38, 38, 38, 38, 38, 38, 38, 38, 
-	38, 38, 38, 38, 38, 38, 38, 38, 
-	38, 38, 38, 38, 38, 38, 59, 38, 
-	4, 69, 68, 70, 68, 68, 68, 68, 
-	68, 68, 68, 71, 72, 73, 74, 75, 
-	76, 77, 78, 79, 4, 80, 81, 82, 
-	83, 68, 84, 85, 86, 68, 68, 68, 
-	68, 87, 88, 89, 90, 91, 68, 68, 
-	68, 68, 92, 68, 68, 93, 68, 4, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	68, 68, 68, 68, 70, 68, 68, 68, 
-	68, 68, 68, 68, 68, 72, 73, 74, 
-	75, 68, 68, 68, 68, 68, 68, 68, 
-	68, 68, 68, 84, 85, 86, 68, 68, 
-	68, 68, 68, 88, 89, 90, 94, 68, 
-	68, 68, 68, 72, 68, 70, 68, 68, 
-	68, 68, 68, 68, 68, 68, 72, 73, 
-	74, 75, 68, 68, 68, 68, 68, 68, 
-	68, 68, 68, 68, 84, 85, 86, 68, 
-	68, 68, 68, 68, 88, 89, 90, 94, 
-	68, 70, 68, 68, 68, 68, 68, 68, 
-	68, 68, 68, 73, 74, 75, 68, 68, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	88, 89, 90, 68, 70, 68, 68, 68, 
-	68, 68, 68, 68, 68, 68, 68, 74, 
-	75, 68, 68, 68, 68, 68, 68, 68, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	68, 68, 68, 88, 89, 90, 68, 70, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	68, 68, 68, 75, 68, 68, 68, 68, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	68, 68, 68, 68, 68, 68, 88, 89, 
-	90, 68, 70, 68, 68, 68, 68, 68, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	68, 88, 89, 68, 70, 68, 68, 68, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	68, 68, 68, 68, 89, 68, 70, 68, 
-	70, 68, 68, 68, 68, 68, 68, 68, 
-	68, 68, 73, 74, 75, 68, 68, 68, 
-	68, 68, 68, 68, 68, 68, 68, 84, 
-	85, 86, 68, 68, 68, 68, 68, 88, 
-	89, 90, 94, 68, 70, 68, 68, 68, 
-	68, 68, 68, 68, 68, 68, 73, 74, 
-	75, 68, 68, 68, 68, 68, 68, 68, 
-	68, 68, 68, 68, 85, 86, 68, 68, 
-	68, 68, 68, 88, 89, 90, 94, 68, 
-	70, 68, 68, 68, 68, 68, 68, 68, 
-	68, 68, 73, 74, 75, 68, 68, 68, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	68, 86, 68, 68, 68, 68, 68, 88, 
-	89, 90, 94, 68, 96, 95, 95, 95, 
-	95, 95, 95, 95, 95, 95, 95, 95, 
-	95, 97, 95, 70, 68, 68, 68, 68, 
-	68, 68, 68, 68, 68, 73, 74, 75, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	68, 68, 88, 89, 90, 94, 68, 70, 
-	68, 68, 68, 68, 68, 68, 68, 71, 
-	72, 73, 74, 75, 68, 68, 68, 68, 
-	68, 68, 81, 82, 83, 68, 84, 85, 
-	86, 68, 68, 68, 68, 68, 88, 89, 
-	90, 94, 68, 68, 68, 68, 72, 68, 
-	70, 68, 68, 68, 68, 68, 68, 68, 
-	68, 72, 73, 74, 75, 68, 68, 68, 
-	68, 68, 68, 81, 82, 83, 68, 84, 
-	85, 86, 68, 68, 68, 68, 68, 88, 
-	89, 90, 94, 68, 68, 68, 68, 72, 
-	68, 70, 68, 68, 68, 68, 68, 68, 
-	68, 68, 72, 73, 74, 75, 68, 68, 
-	68, 68, 68, 68, 68, 82, 83, 68, 
-	84, 85, 86, 68, 68, 68, 68, 68, 
-	88, 89, 90, 94, 68, 68, 68, 68, 
-	72, 68, 70, 68, 68, 68, 68, 68, 
-	68, 68, 68, 72, 73, 74, 75, 68, 
-	68, 68, 68, 68, 68, 68, 68, 83, 
-	68, 84, 85, 86, 68, 68, 68, 68, 
-	68, 88, 89, 90, 94, 68, 68, 68, 
-	68, 72, 68, 98, 68, 70, 68, 68, 
-	68, 68, 68, 68, 68, 71, 72, 73, 
-	74, 75, 68, 77, 78, 68, 68, 68, 
-	81, 82, 83, 68, 84, 85, 86, 68, 
-	68, 68, 68, 68, 88, 89, 90, 94, 
-	68, 68, 68, 68, 72, 68, 70, 68, 
-	68, 68, 68, 68, 68, 68, 68, 72, 
-	73, 74, 75, 68, 68, 68, 68, 68, 
-	68, 68, 68, 68, 68, 84, 85, 86, 
-	68, 68, 68, 68, 68, 88, 89, 90, 
-	94, 68, 68, 68, 68, 72, 68, 98, 
-	68, 70, 68, 68, 68, 68, 68, 68, 
-	68, 71, 72, 73, 74, 75, 68, 68, 
-	78, 68, 68, 68, 81, 82, 83, 68, 
-	84, 85, 86, 68, 68, 68, 68, 68, 
-	88, 89, 90, 94, 68, 68, 68, 68, 
-	72, 68, 98, 68, 70, 68, 68, 68, 
-	68, 68, 68, 68, 71, 72, 73, 74, 
-	75, 68, 68, 68, 68, 68, 68, 81, 
-	82, 83, 68, 84, 85, 86, 68, 68, 
-	68, 68, 68, 88, 89, 90, 94, 68, 
-	68, 68, 68, 72, 68, 98, 68, 70, 
-	68, 68, 68, 68, 68, 68, 68, 71, 
-	72, 73, 74, 75, 76, 77, 78, 68, 
-	68, 68, 81, 82, 83, 68, 84, 85, 
-	86, 68, 68, 68, 68, 68, 88, 89, 
-	90, 94, 68, 68, 68, 68, 72, 68, 
-	4, 69, 68, 70, 68, 68, 68, 68, 
-	68, 68, 68, 71, 72, 73, 74, 75, 
-	76, 77, 78, 79, 68, 80, 81, 82, 
-	83, 68, 84, 85, 86, 68, 68, 68, 
-	68, 87, 88, 89, 90, 91, 68, 68, 
-	68, 68, 92, 68, 68, 93, 68, 4, 
-	99, 99, 99, 99, 99, 99, 99, 99, 
-	99, 99, 99, 99, 100, 99, 4, 95, 
-	95, 95, 95, 95, 95, 95, 95, 95, 
-	95, 95, 95, 97, 95, 4, 68, 68, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	68, 68, 70, 68, 68, 68, 68, 68, 
-	68, 68, 68, 72, 73, 74, 75, 68, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	68, 84, 85, 86, 68, 68, 68, 68, 
-	68, 88, 89, 90, 94, 68, 100, 99, 
-	102, 103, 101, 6, 104, 104, 104, 104, 
-	104, 104, 104, 104, 104, 105, 104, 106, 
-	107, 68, 70, 68, 68, 68, 68, 68, 
-	68, 68, 108, 109, 110, 111, 112, 113, 
-	114, 115, 116, 106, 117, 118, 119, 120, 
-	68, 121, 122, 123, 68, 58, 59, 68, 
-	124, 125, 126, 127, 128, 68, 68, 68, 
-	68, 129, 68, 68, 130, 68, 106, 107, 
-	68, 70, 68, 68, 68, 68, 68, 68, 
-	68, 108, 109, 110, 111, 112, 113, 114, 
-	115, 116, 106, 117, 118, 119, 120, 68, 
-	121, 122, 123, 68, 68, 68, 68, 124, 
-	125, 126, 127, 128, 68, 68, 68, 68, 
-	129, 68, 68, 130, 68, 106, 68, 68, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	68, 68, 70, 68, 68, 68, 68, 68, 
-	68, 68, 68, 109, 110, 111, 112, 68, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	68, 121, 122, 123, 68, 68, 68, 68, 
-	68, 125, 126, 127, 131, 68, 68, 68, 
-	68, 109, 68, 70, 68, 68, 68, 68, 
-	68, 68, 68, 68, 109, 110, 111, 112, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	68, 68, 121, 122, 123, 68, 68, 68, 
-	68, 68, 125, 126, 127, 131, 68, 70, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	68, 110, 111, 112, 68, 68, 68, 68, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	68, 68, 68, 68, 68, 68, 125, 126, 
-	127, 68, 70, 68, 68, 68, 68, 68, 
-	68, 68, 68, 68, 68, 111, 112, 68, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	68, 125, 126, 127, 68, 70, 68, 68, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	68, 112, 68, 68, 68, 68, 68, 68, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	68, 68, 68, 68, 125, 126, 127, 68, 
-	70, 68, 68, 68, 68, 68, 68, 68, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	68, 68, 68, 68, 68, 68, 68, 125, 
-	126, 68, 70, 68, 68, 68, 68, 68, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	68, 68, 126, 68, 70, 68, 70, 68, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	110, 111, 112, 68, 68, 68, 68, 68, 
-	68, 68, 68, 68, 68, 121, 122, 123, 
-	68, 68, 68, 68, 68, 125, 126, 127, 
-	131, 68, 70, 68, 68, 68, 68, 68, 
-	68, 68, 68, 68, 110, 111, 112, 68, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	68, 68, 122, 123, 68, 68, 68, 68, 
-	68, 125, 126, 127, 131, 68, 70, 68, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	110, 111, 112, 68, 68, 68, 68, 68, 
-	68, 68, 68, 68, 68, 68, 68, 123, 
-	68, 68, 68, 68, 68, 125, 126, 127, 
-	131, 68, 132, 95, 95, 95, 95, 95, 
-	95, 95, 95, 95, 95, 95, 95, 97, 
-	95, 70, 68, 68, 68, 68, 68, 68, 
-	68, 68, 68, 110, 111, 112, 68, 68, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	125, 126, 127, 131, 68, 70, 68, 68, 
-	68, 68, 68, 68, 68, 108, 109, 110, 
-	111, 112, 68, 68, 68, 68, 68, 68, 
-	118, 119, 120, 68, 121, 122, 123, 68, 
-	68, 68, 68, 68, 125, 126, 127, 131, 
-	68, 68, 68, 68, 109, 68, 70, 68, 
-	68, 68, 68, 68, 68, 68, 68, 109, 
-	110, 111, 112, 68, 68, 68, 68, 68, 
-	68, 118, 119, 120, 68, 121, 122, 123, 
-	68, 68, 68, 68, 68, 125, 126, 127, 
-	131, 68, 68, 68, 68, 109, 68, 70, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	109, 110, 111, 112, 68, 68, 68, 68, 
-	68, 68, 68, 119, 120, 68, 121, 122, 
-	123, 68, 68, 68, 68, 68, 125, 126, 
-	127, 131, 68, 68, 68, 68, 109, 68, 
-	70, 68, 68, 68, 68, 68, 68, 68, 
-	68, 109, 110, 111, 112, 68, 68, 68, 
-	68, 68, 68, 68, 68, 120, 68, 121, 
-	122, 123, 68, 68, 68, 68, 68, 125, 
-	126, 127, 131, 68, 68, 68, 68, 109, 
-	68, 133, 68, 70, 68, 68, 68, 68, 
-	68, 68, 68, 108, 109, 110, 111, 112, 
-	68, 114, 115, 68, 68, 68, 118, 119, 
-	120, 68, 121, 122, 123, 68, 68, 68, 
-	68, 68, 125, 126, 127, 131, 68, 68, 
-	68, 68, 109, 68, 70, 68, 68, 68, 
-	68, 68, 68, 68, 68, 109, 110, 111, 
-	112, 68, 68, 68, 68, 68, 68, 68, 
-	68, 68, 68, 121, 122, 123, 68, 68, 
-	68, 68, 68, 125, 126, 127, 131, 68, 
-	68, 68, 68, 109, 68, 133, 68, 70, 
-	68, 68, 68, 68, 68, 68, 68, 108, 
-	109, 110, 111, 112, 68, 68, 115, 68, 
-	68, 68, 118, 119, 120, 68, 121, 122, 
-	123, 68, 68, 68, 68, 68, 125, 126, 
-	127, 131, 68, 68, 68, 68, 109, 68, 
-	133, 68, 70, 68, 68, 68, 68, 68, 
-	68, 68, 108, 109, 110, 111, 112, 68, 
-	68, 68, 68, 68, 68, 118, 119, 120, 
-	68, 121, 122, 123, 68, 68, 68, 68, 
-	68, 125, 126, 127, 131, 68, 68, 68, 
-	68, 109, 68, 133, 68, 70, 68, 68, 
-	68, 68, 68, 68, 68, 108, 109, 110, 
-	111, 112, 113, 114, 115, 68, 68, 68, 
-	118, 119, 120, 68, 121, 122, 123, 68, 
-	68, 68, 68, 68, 125, 126, 127, 131, 
-	68, 68, 68, 68, 109, 68, 106, 107, 
-	68, 70, 68, 68, 68, 68, 68, 68, 
-	68, 108, 109, 110, 111, 112, 113, 114, 
-	115, 116, 68, 117, 118, 119, 120, 68, 
-	121, 122, 123, 68, 68, 68, 68, 124, 
-	125, 126, 127, 128, 68, 68, 68, 68, 
-	129, 68, 68, 130, 68, 106, 99, 99, 
-	99, 99, 99, 99, 99, 99, 99, 99, 
-	99, 99, 100, 99, 106, 95, 95, 95, 
-	95, 95, 95, 95, 95, 95, 95, 95, 
-	95, 97, 95, 106, 68, 68, 68, 68, 
-	68, 68, 68, 68, 68, 68, 68, 68, 
-	70, 68, 68, 68, 68, 68, 68, 68, 
-	68, 109, 110, 111, 112, 68, 68, 68, 
-	68, 68, 68, 68, 68, 68, 68, 121, 
-	122, 123, 68, 68, 68, 68, 68, 125, 
-	126, 127, 131, 68, 100, 99, 8, 9, 
-	134, 11, 134, 134, 134, 134, 134, 134, 
-	134, 13, 14, 15, 16, 17, 18, 19, 
-	20, 21, 8, 22, 23, 24, 25, 134, 
-	26, 27, 28, 134, 134, 134, 134, 32, 
-	33, 34, 35, 32, 134, 134, 134, 134, 
-	37, 134, 134, 35, 134, 8, 134, 134, 
-	134, 134, 134, 134, 134, 134, 134, 134, 
-	134, 134, 11, 134, 134, 134, 134, 134, 
-	134, 134, 134, 14, 15, 16, 17, 134, 
-	134, 134, 134, 134, 134, 134, 134, 134, 
-	134, 26, 27, 28, 134, 134, 134, 134, 
-	134, 33, 34, 35, 135, 134, 134, 134, 
-	134, 14, 134, 11, 134, 134, 134, 134, 
-	134, 134, 134, 134, 14, 15, 16, 17, 
-	134, 134, 134, 134, 134, 134, 134, 134, 
-	134, 134, 26, 27, 28, 134, 134, 134, 
-	134, 134, 33, 34, 35, 135, 134, 11, 
-	134, 134, 134, 134, 134, 134, 134, 134, 
-	134, 15, 16, 17, 134, 134, 134, 134, 
-	134, 134, 134, 134, 134, 134, 134, 134, 
-	134, 134, 134, 134, 134, 134, 33, 34, 
-	35, 134, 11, 134, 134, 134, 134, 134, 
-	134, 134, 134, 134, 134, 16, 17, 134, 
-	134, 134, 134, 134, 134, 134, 134, 134, 
-	134, 134, 134, 134, 134, 134, 134, 134, 
-	134, 33, 34, 35, 134, 11, 134, 134, 
-	134, 134, 134, 134, 134, 134, 134, 134, 
-	134, 17, 134, 134, 134, 134, 134, 134, 
-	134, 134, 134, 134, 134, 134, 134, 134, 
-	134, 134, 134, 134, 33, 34, 35, 134, 
-	11, 134, 134, 134, 134, 134, 134, 134, 
-	134, 134, 134, 134, 134, 134, 134, 134, 
-	134, 134, 134, 134, 134, 134, 134, 134, 
-	134, 134, 134, 134, 134, 134, 134, 33, 
-	34, 134, 11, 134, 134, 134, 134, 134, 
-	134, 134, 134, 134, 134, 134, 134, 134, 
-	134, 134, 134, 134, 134, 134, 134, 134, 
-	134, 134, 134, 134, 134, 134, 134, 134, 
-	134, 134, 34, 134, 11, 134, 11, 134, 
-	134, 134, 134, 134, 134, 134, 134, 134, 
-	15, 16, 17, 134, 134, 134, 134, 134, 
-	134, 134, 134, 134, 134, 26, 27, 28, 
-	134, 134, 134, 134, 134, 33, 34, 35, 
-	135, 134, 11, 134, 134, 134, 134, 134, 
-	134, 134, 134, 134, 15, 16, 17, 134, 
-	134, 134, 134, 134, 134, 134, 134, 134, 
-	134, 134, 27, 28, 134, 134, 134, 134, 
-	134, 33, 34, 35, 135, 134, 11, 134, 
-	134, 134, 134, 134, 134, 134, 134, 134, 
-	15, 16, 17, 134, 134, 134, 134, 134, 
-	134, 134, 134, 134, 134, 134, 134, 28, 
-	134, 134, 134, 134, 134, 33, 34, 35, 
-	135, 134, 136, 134, 134, 134, 134, 134, 
-	134, 134, 134, 134, 134, 134, 134, 11, 
-	134, 11, 134, 134, 134, 134, 134, 134, 
-	134, 134, 134, 15, 16, 17, 134, 134, 
-	134, 134, 134, 134, 134, 134, 134, 134, 
-	134, 134, 134, 134, 134, 134, 134, 134, 
-	33, 34, 35, 135, 134, 11, 134, 134, 
-	134, 134, 134, 134, 134, 13, 14, 15, 
-	16, 17, 134, 134, 134, 134, 134, 134, 
-	23, 24, 25, 134, 26, 27, 28, 134, 
-	134, 134, 134, 134, 33, 34, 35, 135, 
-	134, 134, 134, 134, 14, 134, 11, 134, 
-	134, 134, 134, 134, 134, 134, 134, 14, 
-	15, 16, 17, 134, 134, 134, 134, 134, 
-	134, 23, 24, 25, 134, 26, 27, 28, 
-	134, 134, 134, 134, 134, 33, 34, 35, 
-	135, 134, 134, 134, 134, 14, 134, 11, 
-	134, 134, 134, 134, 134, 134, 134, 134, 
-	14, 15, 16, 17, 134, 134, 134, 134, 
-	134, 134, 134, 24, 25, 134, 26, 27, 
-	28, 134, 134, 134, 134, 134, 33, 34, 
-	35, 135, 134, 134, 134, 134, 14, 134, 
-	11, 134, 134, 134, 134, 134, 134, 134, 
-	134, 14, 15, 16, 17, 134, 134, 134, 
-	134, 134, 134, 134, 134, 25, 134, 26, 
-	27, 28, 134, 134, 134, 134, 134, 33, 
-	34, 35, 135, 134, 134, 134, 134, 14, 
-	134, 137, 134, 11, 134, 134, 134, 134, 
-	134, 134, 134, 13, 14, 15, 16, 17, 
-	134, 19, 20, 134, 134, 134, 23, 24, 
-	25, 134, 26, 27, 28, 134, 134, 134, 
-	134, 134, 33, 34, 35, 135, 134, 134, 
-	134, 134, 14, 134, 11, 134, 134, 134, 
-	134, 134, 134, 134, 134, 14, 15, 16, 
-	17, 134, 134, 134, 134, 134, 134, 134, 
-	134, 134, 134, 26, 27, 28, 134, 134, 
-	134, 134, 134, 33, 34, 35, 135, 134, 
-	134, 134, 134, 14, 134, 137, 134, 11, 
-	134, 134, 134, 134, 134, 134, 134, 13, 
-	14, 15, 16, 17, 134, 134, 20, 134, 
-	134, 134, 23, 24, 25, 134, 26, 27, 
-	28, 134, 134, 134, 134, 134, 33, 34, 
-	35, 135, 134, 134, 134, 134, 14, 134, 
-	137, 134, 11, 134, 134, 134, 134, 134, 
-	134, 134, 13, 14, 15, 16, 17, 134, 
-	134, 134, 134, 134, 134, 23, 24, 25, 
-	134, 26, 27, 28, 134, 134, 134, 134, 
-	134, 33, 34, 35, 135, 134, 134, 134, 
-	134, 14, 134, 137, 134, 11, 134, 134, 
-	134, 134, 134, 134, 134, 13, 14, 15, 
-	16, 17, 18, 19, 20, 134, 134, 134, 
-	23, 24, 25, 134, 26, 27, 28, 134, 
-	134, 134, 134, 134, 33, 34, 35, 135, 
-	134, 134, 134, 134, 14, 134, 8, 9, 
-	134, 11, 134, 134, 134, 134, 134, 134, 
-	134, 13, 14, 15, 16, 17, 18, 19, 
-	20, 21, 134, 22, 23, 24, 25, 134, 
-	26, 27, 28, 134, 134, 134, 134, 32, 
-	33, 34, 35, 32, 134, 134, 134, 134, 
-	37, 134, 134, 35, 134, 8, 134, 134, 
-	134, 134, 134, 134, 134, 134, 134, 134, 
-	134, 134, 11, 134, 8, 134, 134, 134, 
-	134, 134, 134, 134, 134, 134, 134, 134, 
-	134, 11, 134, 134, 134, 134, 134, 134, 
-	134, 134, 14, 15, 16, 17, 134, 134, 
-	134, 134, 134, 134, 134, 134, 134, 134, 
-	26, 27, 28, 134, 134, 134, 134, 134, 
-	33, 34, 35, 135, 134, 138, 134, 134, 
-	134, 134, 134, 134, 134, 134, 134, 11, 
-	134, 10, 11, 134, 4, 134, 134, 134, 
-	4, 134, 134, 134, 134, 134, 8, 9, 
-	10, 11, 134, 134, 134, 134, 134, 134, 
-	134, 13, 14, 15, 16, 17, 18, 19, 
-	20, 21, 8, 22, 23, 24, 25, 134, 
-	26, 27, 28, 134, 29, 30, 134, 32, 
-	33, 34, 35, 32, 134, 134, 134, 134, 
-	37, 134, 134, 35, 134, 11, 134, 134, 
-	134, 134, 134, 134, 134, 134, 134, 134, 
-	134, 134, 134, 134, 134, 134, 134, 134, 
-	134, 134, 134, 134, 134, 134, 134, 134, 
-	29, 30, 134, 11, 134, 134, 134, 134, 
-	134, 134, 134, 134, 134, 134, 134, 134, 
-	134, 134, 134, 134, 134, 134, 134, 134, 
-	134, 134, 134, 134, 134, 134, 134, 30, 
-	134, 4, 139, 139, 139, 4, 139, 141, 
-	140, 140, 140, 140, 140, 140, 140, 140, 
-	140, 140, 140, 140, 140, 140, 140, 140, 
-	140, 140, 140, 140, 140, 140, 140, 140, 
-	140, 140, 140, 140, 140, 140, 140, 140, 
-	140, 140, 140, 142, 140, 143, 140, 143, 
-	144, 140, 141, 140, 140, 140, 140, 140, 
-	140, 140, 140, 140, 140, 140, 140, 140, 
-	140, 140, 140, 140, 140, 140, 140, 140, 
-	140, 140, 140, 140, 140, 140, 140, 140, 
-	140, 140, 140, 140, 140, 1, 142, 142, 
-	140, 141, 140, 140, 140, 140, 140, 140, 
-	140, 140, 140, 140, 140, 140, 140, 140, 
-	140, 140, 140, 140, 140, 140, 140, 140, 
-	140, 140, 140, 140, 140, 140, 140, 140, 
-	140, 140, 140, 140, 140, 142, 140, 143, 
-	140, 141, 140, 140, 140, 140, 140, 140, 
-	140, 140, 140, 140, 140, 140, 140, 140, 
-	140, 140, 140, 140, 140, 140, 140, 140, 
-	140, 140, 140, 140, 140, 140, 140, 140, 
-	140, 140, 140, 140, 140, 142, 140, 143, 
-	140, 143, 140, 39, 40, 38, 41, 38, 
-	38, 38, 38, 38, 38, 38, 42, 43, 
-	44, 45, 46, 47, 48, 49, 50, 39, 
-	51, 52, 53, 54, 38, 55, 56, 57, 
-	38, 58, 59, 38, 60, 61, 62, 63, 
-	60, 1, 38, 2, 38, 64, 38, 38, 
-	63, 38, 0
+	5, 37, 5, 5, 38, 5, 40, 41, 
+	39, 42, 39, 39, 39, 39, 39, 39, 
+	39, 43, 44, 45, 46, 47, 48, 49, 
+	50, 51, 40, 52, 53, 54, 55, 39, 
+	56, 57, 58, 39, 59, 60, 39, 61, 
+	62, 63, 64, 61, 39, 39, 39, 39, 
+	65, 39, 39, 64, 39, 40, 41, 39, 
+	42, 39, 39, 39, 39, 39, 39, 39, 
+	43, 44, 45, 46, 47, 48, 49, 50, 
+	51, 40, 52, 53, 54, 55, 39, 56, 
+	57, 58, 39, 39, 39, 39, 61, 62, 
+	63, 64, 61, 39, 39, 39, 39, 65, 
+	39, 39, 64, 39, 40, 39, 39, 39, 
+	39, 39, 39, 39, 39, 39, 39, 39, 
+	39, 42, 39, 39, 39, 39, 39, 39, 
+	39, 39, 44, 45, 46, 47, 39, 39, 
+	39, 39, 39, 39, 39, 39, 39, 39, 
+	56, 57, 58, 39, 39, 39, 39, 39, 
+	62, 63, 64, 66, 39, 39, 39, 39, 
+	44, 39, 42, 39, 39, 39, 39, 39, 
+	39, 39, 39, 44, 45, 46, 47, 39, 
+	39, 39, 39, 39, 39, 39, 39, 39, 
+	39, 56, 57, 58, 39, 39, 39, 39, 
+	39, 62, 63, 64, 66, 39, 42, 39, 
+	39, 39, 39, 39, 39, 39, 39, 39, 
+	45, 46, 47, 39, 39, 39, 39, 39, 
+	39, 39, 39, 39, 39, 39, 39, 39, 
+	39, 39, 39, 39, 39, 62, 63, 64, 
+	39, 42, 39, 39, 39, 39, 39, 39, 
+	39, 39, 39, 39, 46, 47, 39, 39, 
+	39, 39, 39, 39, 39, 39, 39, 39, 
+	39, 39, 39, 39, 39, 39, 39, 39, 
+	62, 63, 64, 39, 42, 39, 39, 39, 
+	39, 39, 39, 39, 39, 39, 39, 39, 
+	47, 39, 39, 39, 39, 39, 39, 39, 
+	39, 39, 39, 39, 39, 39, 39, 39, 
+	39, 39, 39, 62, 63, 64, 39, 42, 
+	39, 39, 39, 39, 39, 39, 39, 39, 
+	39, 39, 39, 39, 39, 39, 39, 39, 
+	39, 39, 39, 39, 39, 39, 39, 39, 
+	39, 39, 39, 39, 39, 39, 62, 63, 
+	39, 42, 39, 39, 39, 39, 39, 39, 
+	39, 39, 39, 39, 39, 39, 39, 39, 
+	39, 39, 39, 39, 39, 39, 39, 39, 
+	39, 39, 39, 39, 39, 39, 39, 39, 
+	39, 63, 39, 42, 39, 42, 39, 39, 
+	39, 39, 39, 39, 39, 39, 39, 45, 
+	46, 47, 39, 39, 39, 39, 39, 39, 
+	39, 39, 39, 39, 56, 57, 58, 39, 
+	39, 39, 39, 39, 62, 63, 64, 66, 
+	39, 42, 39, 39, 39, 39, 39, 39, 
+	39, 39, 39, 45, 46, 47, 39, 39, 
+	39, 39, 39, 39, 39, 39, 39, 39, 
+	39, 57, 58, 39, 39, 39, 39, 39, 
+	62, 63, 64, 66, 39, 42, 39, 39, 
+	39, 39, 39, 39, 39, 39, 39, 45, 
+	46, 47, 39, 39, 39, 39, 39, 39, 
+	39, 39, 39, 39, 39, 39, 58, 39, 
+	39, 39, 39, 39, 62, 63, 64, 66, 
+	39, 67, 39, 39, 39, 39, 39, 39, 
+	39, 39, 39, 39, 39, 39, 42, 39, 
+	42, 39, 39, 39, 39, 39, 39, 39, 
+	39, 39, 45, 46, 47, 39, 39, 39, 
+	39, 39, 39, 39, 39, 39, 39, 39, 
+	39, 39, 39, 39, 39, 39, 39, 62, 
+	63, 64, 66, 39, 42, 39, 39, 39, 
+	39, 39, 39, 39, 43, 44, 45, 46, 
+	47, 39, 39, 39, 39, 39, 39, 53, 
+	54, 55, 39, 56, 57, 58, 39, 39, 
+	39, 39, 39, 62, 63, 64, 66, 39, 
+	39, 39, 39, 44, 39, 42, 39, 39, 
+	39, 39, 39, 39, 39, 39, 44, 45, 
+	46, 47, 39, 39, 39, 39, 39, 39, 
+	53, 54, 55, 39, 56, 57, 58, 39, 
+	39, 39, 39, 39, 62, 63, 64, 66, 
+	39, 39, 39, 39, 44, 39, 42, 39, 
+	39, 39, 39, 39, 39, 39, 39, 44, 
+	45, 46, 47, 39, 39, 39, 39, 39, 
+	39, 39, 54, 55, 39, 56, 57, 58, 
+	39, 39, 39, 39, 39, 62, 63, 64, 
+	66, 39, 39, 39, 39, 44, 39, 42, 
+	39, 39, 39, 39, 39, 39, 39, 39, 
+	44, 45, 46, 47, 39, 39, 39, 39, 
+	39, 39, 39, 39, 55, 39, 56, 57, 
+	58, 39, 39, 39, 39, 39, 62, 63, 
+	64, 66, 39, 39, 39, 39, 44, 39, 
+	68, 39, 42, 39, 39, 39, 39, 39, 
+	39, 39, 43, 44, 45, 46, 47, 39, 
+	49, 50, 39, 39, 39, 53, 54, 55, 
+	39, 56, 57, 58, 39, 39, 39, 39, 
+	39, 62, 63, 64, 66, 39, 39, 39, 
+	39, 44, 39, 42, 39, 39, 39, 39, 
+	39, 39, 39, 39, 44, 45, 46, 47, 
+	39, 39, 39, 39, 39, 39, 39, 39, 
+	39, 39, 56, 57, 58, 39, 39, 39, 
+	39, 39, 62, 63, 64, 66, 39, 39, 
+	39, 39, 44, 39, 68, 39, 42, 39, 
+	39, 39, 39, 39, 39, 39, 43, 44, 
+	45, 46, 47, 39, 39, 50, 39, 39, 
+	39, 53, 54, 55, 39, 56, 57, 58, 
+	39, 39, 39, 39, 39, 62, 63, 64, 
+	66, 39, 39, 39, 39, 44, 39, 68, 
+	39, 42, 39, 39, 39, 39, 39, 39, 
+	39, 43, 44, 45, 46, 47, 39, 39, 
+	39, 39, 39, 39, 53, 54, 55, 39, 
+	56, 57, 58, 39, 39, 39, 39, 39, 
+	62, 63, 64, 66, 39, 39, 39, 39, 
+	44, 39, 68, 39, 42, 39, 39, 39, 
+	39, 39, 39, 39, 43, 44, 45, 46, 
+	47, 48, 49, 50, 39, 39, 39, 53, 
+	54, 55, 39, 56, 57, 58, 39, 39, 
+	39, 39, 39, 62, 63, 64, 66, 39, 
+	39, 39, 39, 44, 39, 40, 41, 39, 
+	42, 39, 39, 39, 39, 39, 39, 39, 
+	43, 44, 45, 46, 47, 48, 49, 50, 
+	51, 39, 52, 53, 54, 55, 39, 56, 
+	57, 58, 39, 39, 39, 39, 61, 62, 
+	63, 64, 61, 39, 39, 39, 39, 65, 
+	39, 39, 64, 39, 40, 39, 39, 39, 
+	39, 39, 39, 39, 39, 39, 39, 39, 
+	39, 42, 39, 40, 39, 39, 39, 39, 
+	39, 39, 39, 39, 39, 39, 39, 39, 
+	42, 39, 39, 39, 39, 39, 39, 39, 
+	39, 44, 45, 46, 47, 39, 39, 39, 
+	39, 39, 39, 39, 39, 39, 39, 56, 
+	57, 58, 39, 39, 39, 39, 39, 62, 
+	63, 64, 66, 39, 42, 39, 39, 39, 
+	39, 39, 39, 39, 39, 39, 39, 39, 
+	39, 39, 39, 39, 39, 39, 39, 39, 
+	39, 39, 39, 39, 39, 39, 39, 59, 
+	60, 39, 42, 39, 39, 39, 39, 39, 
+	39, 39, 39, 39, 39, 39, 39, 39, 
+	39, 39, 39, 39, 39, 39, 39, 39, 
+	39, 39, 39, 39, 39, 39, 60, 39, 
+	4, 70, 69, 71, 69, 69, 69, 69, 
+	69, 69, 69, 72, 73, 74, 75, 76, 
+	77, 78, 79, 80, 4, 81, 82, 83, 
+	84, 69, 85, 86, 87, 69, 69, 69, 
+	69, 88, 89, 90, 91, 92, 69, 69, 
+	69, 69, 93, 69, 69, 94, 69, 4, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	69, 69, 69, 69, 71, 69, 69, 69, 
+	69, 69, 69, 69, 69, 73, 74, 75, 
+	76, 69, 69, 69, 69, 69, 69, 69, 
+	69, 69, 69, 85, 86, 87, 69, 69, 
+	69, 69, 69, 89, 90, 91, 95, 69, 
+	69, 69, 69, 73, 69, 71, 69, 69, 
+	69, 69, 69, 69, 69, 69, 73, 74, 
+	75, 76, 69, 69, 69, 69, 69, 69, 
+	69, 69, 69, 69, 85, 86, 87, 69, 
+	69, 69, 69, 69, 89, 90, 91, 95, 
+	69, 71, 69, 69, 69, 69, 69, 69, 
+	69, 69, 69, 74, 75, 76, 69, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	89, 90, 91, 69, 71, 69, 69, 69, 
+	69, 69, 69, 69, 69, 69, 69, 75, 
+	76, 69, 69, 69, 69, 69, 69, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	69, 69, 69, 89, 90, 91, 69, 71, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	69, 69, 69, 76, 69, 69, 69, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	69, 69, 69, 69, 69, 69, 89, 90, 
+	91, 69, 71, 69, 69, 69, 69, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	69, 89, 90, 69, 71, 69, 69, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	69, 69, 69, 69, 90, 69, 71, 69, 
+	71, 69, 69, 69, 69, 69, 69, 69, 
+	69, 69, 74, 75, 76, 69, 69, 69, 
+	69, 69, 69, 69, 69, 69, 69, 85, 
+	86, 87, 69, 69, 69, 69, 69, 89, 
+	90, 91, 95, 69, 71, 69, 69, 69, 
+	69, 69, 69, 69, 69, 69, 74, 75, 
+	76, 69, 69, 69, 69, 69, 69, 69, 
+	69, 69, 69, 69, 86, 87, 69, 69, 
+	69, 69, 69, 89, 90, 91, 95, 69, 
+	71, 69, 69, 69, 69, 69, 69, 69, 
+	69, 69, 74, 75, 76, 69, 69, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	69, 87, 69, 69, 69, 69, 69, 89, 
+	90, 91, 95, 69, 97, 96, 96, 96, 
+	96, 96, 96, 96, 96, 96, 96, 96, 
+	96, 98, 96, 71, 69, 69, 69, 69, 
+	69, 69, 69, 69, 69, 74, 75, 76, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	69, 69, 89, 90, 91, 95, 69, 71, 
+	69, 69, 69, 69, 69, 69, 69, 72, 
+	73, 74, 75, 76, 69, 69, 69, 69, 
+	69, 69, 82, 83, 84, 69, 85, 86, 
+	87, 69, 69, 69, 69, 69, 89, 90, 
+	91, 95, 69, 69, 69, 69, 73, 69, 
+	71, 69, 69, 69, 69, 69, 69, 69, 
+	69, 73, 74, 75, 76, 69, 69, 69, 
+	69, 69, 69, 82, 83, 84, 69, 85, 
+	86, 87, 69, 69, 69, 69, 69, 89, 
+	90, 91, 95, 69, 69, 69, 69, 73, 
+	69, 71, 69, 69, 69, 69, 69, 69, 
+	69, 69, 73, 74, 75, 76, 69, 69, 
+	69, 69, 69, 69, 69, 83, 84, 69, 
+	85, 86, 87, 69, 69, 69, 69, 69, 
+	89, 90, 91, 95, 69, 69, 69, 69, 
+	73, 69, 71, 69, 69, 69, 69, 69, 
+	69, 69, 69, 73, 74, 75, 76, 69, 
+	69, 69, 69, 69, 69, 69, 69, 84, 
+	69, 85, 86, 87, 69, 69, 69, 69, 
+	69, 89, 90, 91, 95, 69, 69, 69, 
+	69, 73, 69, 99, 69, 71, 69, 69, 
+	69, 69, 69, 69, 69, 72, 73, 74, 
+	75, 76, 69, 78, 79, 69, 69, 69, 
+	82, 83, 84, 69, 85, 86, 87, 69, 
+	69, 69, 69, 69, 89, 90, 91, 95, 
+	69, 69, 69, 69, 73, 69, 71, 69, 
+	69, 69, 69, 69, 69, 69, 69, 73, 
+	74, 75, 76, 69, 69, 69, 69, 69, 
+	69, 69, 69, 69, 69, 85, 86, 87, 
+	69, 69, 69, 69, 69, 89, 90, 91, 
+	95, 69, 69, 69, 69, 73, 69, 99, 
+	69, 71, 69, 69, 69, 69, 69, 69, 
+	69, 72, 73, 74, 75, 76, 69, 69, 
+	79, 69, 69, 69, 82, 83, 84, 69, 
+	85, 86, 87, 69, 69, 69, 69, 69, 
+	89, 90, 91, 95, 69, 69, 69, 69, 
+	73, 69, 99, 69, 71, 69, 69, 69, 
+	69, 69, 69, 69, 72, 73, 74, 75, 
+	76, 69, 69, 69, 69, 69, 69, 82, 
+	83, 84, 69, 85, 86, 87, 69, 69, 
+	69, 69, 69, 89, 90, 91, 95, 69, 
+	69, 69, 69, 73, 69, 99, 69, 71, 
+	69, 69, 69, 69, 69, 69, 69, 72, 
+	73, 74, 75, 76, 77, 78, 79, 69, 
+	69, 69, 82, 83, 84, 69, 85, 86, 
+	87, 69, 69, 69, 69, 69, 89, 90, 
+	91, 95, 69, 69, 69, 69, 73, 69, 
+	4, 70, 69, 71, 69, 69, 69, 69, 
+	69, 69, 69, 72, 73, 74, 75, 76, 
+	77, 78, 79, 80, 69, 81, 82, 83, 
+	84, 69, 85, 86, 87, 69, 69, 69, 
+	69, 88, 89, 90, 91, 92, 69, 69, 
+	69, 69, 93, 69, 69, 94, 69, 4, 
+	100, 100, 100, 100, 100, 100, 100, 100, 
+	100, 100, 100, 100, 101, 100, 4, 96, 
+	96, 96, 96, 96, 96, 96, 96, 96, 
+	96, 96, 96, 98, 96, 4, 69, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	69, 69, 71, 69, 69, 69, 69, 69, 
+	69, 69, 69, 73, 74, 75, 76, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	69, 85, 86, 87, 69, 69, 69, 69, 
+	69, 89, 90, 91, 95, 69, 101, 100, 
+	103, 104, 102, 6, 105, 105, 105, 105, 
+	105, 105, 105, 105, 105, 106, 105, 107, 
+	108, 69, 71, 69, 69, 69, 69, 69, 
+	69, 69, 109, 110, 111, 112, 113, 114, 
+	115, 116, 117, 107, 118, 119, 120, 121, 
+	69, 122, 123, 124, 69, 59, 60, 69, 
+	125, 126, 127, 128, 129, 69, 69, 69, 
+	69, 130, 69, 69, 131, 69, 107, 108, 
+	69, 71, 69, 69, 69, 69, 69, 69, 
+	69, 109, 110, 111, 112, 113, 114, 115, 
+	116, 117, 107, 118, 119, 120, 121, 69, 
+	122, 123, 124, 69, 69, 69, 69, 125, 
+	126, 127, 128, 129, 69, 69, 69, 69, 
+	130, 69, 69, 131, 69, 107, 69, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	69, 69, 71, 69, 69, 69, 69, 69, 
+	69, 69, 69, 110, 111, 112, 113, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	69, 122, 123, 124, 69, 69, 69, 69, 
+	69, 126, 127, 128, 132, 69, 69, 69, 
+	69, 110, 69, 71, 69, 69, 69, 69, 
+	69, 69, 69, 69, 110, 111, 112, 113, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	69, 69, 122, 123, 124, 69, 69, 69, 
+	69, 69, 126, 127, 128, 132, 69, 71, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	69, 111, 112, 113, 69, 69, 69, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	69, 69, 69, 69, 69, 69, 126, 127, 
+	128, 69, 71, 69, 69, 69, 69, 69, 
+	69, 69, 69, 69, 69, 112, 113, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	69, 126, 127, 128, 69, 71, 69, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	69, 113, 69, 69, 69, 69, 69, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	69, 69, 69, 69, 126, 127, 128, 69, 
+	71, 69, 69, 69, 69, 69, 69, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	69, 69, 69, 69, 69, 69, 69, 126, 
+	127, 69, 71, 69, 69, 69, 69, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	69, 69, 127, 69, 71, 69, 71, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	111, 112, 113, 69, 69, 69, 69, 69, 
+	69, 69, 69, 69, 69, 122, 123, 124, 
+	69, 69, 69, 69, 69, 126, 127, 128, 
+	132, 69, 71, 69, 69, 69, 69, 69, 
+	69, 69, 69, 69, 111, 112, 113, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	69, 69, 123, 124, 69, 69, 69, 69, 
+	69, 126, 127, 128, 132, 69, 71, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	111, 112, 113, 69, 69, 69, 69, 69, 
+	69, 69, 69, 69, 69, 69, 69, 124, 
+	69, 69, 69, 69, 69, 126, 127, 128, 
+	132, 69, 133, 96, 96, 96, 96, 96, 
+	96, 96, 96, 96, 96, 96, 96, 98, 
+	96, 71, 69, 69, 69, 69, 69, 69, 
+	69, 69, 69, 111, 112, 113, 69, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	126, 127, 128, 132, 69, 71, 69, 69, 
+	69, 69, 69, 69, 69, 109, 110, 111, 
+	112, 113, 69, 69, 69, 69, 69, 69, 
+	119, 120, 121, 69, 122, 123, 124, 69, 
+	69, 69, 69, 69, 126, 127, 128, 132, 
+	69, 69, 69, 69, 110, 69, 71, 69, 
+	69, 69, 69, 69, 69, 69, 69, 110, 
+	111, 112, 113, 69, 69, 69, 69, 69, 
+	69, 119, 120, 121, 69, 122, 123, 124, 
+	69, 69, 69, 69, 69, 126, 127, 128, 
+	132, 69, 69, 69, 69, 110, 69, 71, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	110, 111, 112, 113, 69, 69, 69, 69, 
+	69, 69, 69, 120, 121, 69, 122, 123, 
+	124, 69, 69, 69, 69, 69, 126, 127, 
+	128, 132, 69, 69, 69, 69, 110, 69, 
+	71, 69, 69, 69, 69, 69, 69, 69, 
+	69, 110, 111, 112, 113, 69, 69, 69, 
+	69, 69, 69, 69, 69, 121, 69, 122, 
+	123, 124, 69, 69, 69, 69, 69, 126, 
+	127, 128, 132, 69, 69, 69, 69, 110, 
+	69, 134, 69, 71, 69, 69, 69, 69, 
+	69, 69, 69, 109, 110, 111, 112, 113, 
+	69, 115, 116, 69, 69, 69, 119, 120, 
+	121, 69, 122, 123, 124, 69, 69, 69, 
+	69, 69, 126, 127, 128, 132, 69, 69, 
+	69, 69, 110, 69, 71, 69, 69, 69, 
+	69, 69, 69, 69, 69, 110, 111, 112, 
+	113, 69, 69, 69, 69, 69, 69, 69, 
+	69, 69, 69, 122, 123, 124, 69, 69, 
+	69, 69, 69, 126, 127, 128, 132, 69, 
+	69, 69, 69, 110, 69, 134, 69, 71, 
+	69, 69, 69, 69, 69, 69, 69, 109, 
+	110, 111, 112, 113, 69, 69, 116, 69, 
+	69, 69, 119, 120, 121, 69, 122, 123, 
+	124, 69, 69, 69, 69, 69, 126, 127, 
+	128, 132, 69, 69, 69, 69, 110, 69, 
+	134, 69, 71, 69, 69, 69, 69, 69, 
+	69, 69, 109, 110, 111, 112, 113, 69, 
+	69, 69, 69, 69, 69, 119, 120, 121, 
+	69, 122, 123, 124, 69, 69, 69, 69, 
+	69, 126, 127, 128, 132, 69, 69, 69, 
+	69, 110, 69, 134, 69, 71, 69, 69, 
+	69, 69, 69, 69, 69, 109, 110, 111, 
+	112, 113, 114, 115, 116, 69, 69, 69, 
+	119, 120, 121, 69, 122, 123, 124, 69, 
+	69, 69, 69, 69, 126, 127, 128, 132, 
+	69, 69, 69, 69, 110, 69, 107, 108, 
+	69, 71, 69, 69, 69, 69, 69, 69, 
+	69, 109, 110, 111, 112, 113, 114, 115, 
+	116, 117, 69, 118, 119, 120, 121, 69, 
+	122, 123, 124, 69, 69, 69, 69, 125, 
+	126, 127, 128, 129, 69, 69, 69, 69, 
+	130, 69, 69, 131, 69, 107, 100, 100, 
+	100, 100, 100, 100, 100, 100, 100, 100, 
+	100, 100, 101, 100, 107, 96, 96, 96, 
+	96, 96, 96, 96, 96, 96, 96, 96, 
+	96, 98, 96, 107, 69, 69, 69, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	71, 69, 69, 69, 69, 69, 69, 69, 
+	69, 110, 111, 112, 113, 69, 69, 69, 
+	69, 69, 69, 69, 69, 69, 69, 122, 
+	123, 124, 69, 69, 69, 69, 69, 126, 
+	127, 128, 132, 69, 101, 100, 8, 9, 
+	135, 11, 135, 135, 135, 135, 135, 135, 
+	135, 13, 14, 15, 16, 17, 18, 19, 
+	20, 21, 8, 22, 23, 24, 25, 135, 
+	26, 27, 28, 135, 135, 135, 135, 32, 
+	33, 34, 38, 32, 135, 135, 135, 135, 
+	37, 135, 135, 38, 135, 8, 135, 135, 
+	135, 135, 135, 135, 135, 135, 135, 135, 
+	135, 135, 11, 135, 135, 135, 135, 135, 
+	135, 135, 135, 14, 15, 16, 17, 135, 
+	135, 135, 135, 135, 135, 135, 135, 135, 
+	135, 26, 27, 28, 135, 135, 135, 135, 
+	135, 33, 34, 38, 136, 135, 135, 135, 
+	135, 14, 135, 11, 135, 135, 135, 135, 
+	135, 135, 135, 135, 14, 15, 16, 17, 
+	135, 135, 135, 135, 135, 135, 135, 135, 
+	135, 135, 26, 27, 28, 135, 135, 135, 
+	135, 135, 33, 34, 38, 136, 135, 11, 
+	135, 135, 135, 135, 135, 135, 135, 135, 
+	135, 15, 16, 17, 135, 135, 135, 135, 
+	135, 135, 135, 135, 135, 135, 135, 135, 
+	135, 135, 135, 135, 135, 135, 33, 34, 
+	38, 135, 11, 135, 135, 135, 135, 135, 
+	135, 135, 135, 135, 135, 16, 17, 135, 
+	135, 135, 135, 135, 135, 135, 135, 135, 
+	135, 135, 135, 135, 135, 135, 135, 135, 
+	135, 33, 34, 38, 135, 11, 135, 135, 
+	135, 135, 135, 135, 135, 135, 135, 135, 
+	135, 17, 135, 135, 135, 135, 135, 135, 
+	135, 135, 135, 135, 135, 135, 135, 135, 
+	135, 135, 135, 135, 33, 34, 38, 135, 
+	11, 135, 135, 135, 135, 135, 135, 135, 
+	135, 135, 135, 135, 135, 135, 135, 135, 
+	135, 135, 135, 135, 135, 135, 135, 135, 
+	135, 135, 135, 135, 135, 135, 135, 33, 
+	34, 135, 11, 135, 135, 135, 135, 135, 
+	135, 135, 135, 135, 135, 135, 135, 135, 
+	135, 135, 135, 135, 135, 135, 135, 135, 
+	135, 135, 135, 135, 135, 135, 135, 135, 
+	135, 135, 34, 135, 11, 137, 11, 135, 
+	135, 135, 135, 135, 135, 135, 135, 135, 
+	15, 16, 17, 135, 135, 135, 135, 135, 
+	135, 135, 135, 135, 135, 26, 27, 28, 
+	135, 135, 135, 135, 135, 33, 34, 38, 
+	136, 135, 11, 135, 135, 135, 135, 135, 
+	135, 135, 135, 135, 15, 16, 17, 135, 
+	135, 135, 135, 135, 135, 135, 135, 135, 
+	135, 135, 27, 28, 135, 135, 135, 135, 
+	135, 33, 34, 38, 136, 135, 11, 135, 
+	135, 135, 135, 135, 135, 135, 135, 135, 
+	15, 16, 17, 135, 135, 135, 135, 135, 
+	135, 135, 135, 135, 135, 135, 135, 28, 
+	135, 135, 135, 135, 135, 33, 34, 38, 
+	136, 135, 138, 135, 135, 135, 135, 135, 
+	135, 135, 135, 135, 135, 135, 135, 11, 
+	135, 11, 135, 135, 135, 135, 135, 135, 
+	135, 135, 135, 15, 16, 17, 135, 135, 
+	135, 135, 135, 135, 135, 135, 135, 135, 
+	135, 135, 135, 135, 135, 135, 135, 135, 
+	33, 34, 38, 136, 135, 11, 135, 135, 
+	135, 135, 135, 135, 135, 13, 14, 15, 
+	16, 17, 135, 135, 135, 135, 135, 135, 
+	23, 24, 25, 135, 26, 27, 28, 135, 
+	135, 135, 135, 135, 33, 34, 38, 136, 
+	135, 135, 135, 135, 14, 135, 11, 135, 
+	135, 135, 135, 135, 135, 135, 135, 14, 
+	15, 16, 17, 135, 135, 135, 135, 135, 
+	135, 23, 24, 25, 135, 26, 27, 28, 
+	135, 135, 135, 135, 135, 33, 34, 38, 
+	136, 135, 135, 135, 135, 14, 135, 11, 
+	135, 135, 135, 135, 135, 135, 135, 135, 
+	14, 15, 16, 17, 135, 135, 135, 135, 
+	135, 135, 135, 24, 25, 135, 26, 27, 
+	28, 135, 135, 135, 135, 135, 33, 34, 
+	38, 136, 135, 135, 135, 135, 14, 135, 
+	11, 135, 135, 135, 135, 135, 135, 135, 
+	135, 14, 15, 16, 17, 135, 135, 135, 
+	135, 135, 135, 135, 135, 25, 135, 26, 
+	27, 28, 135, 135, 135, 135, 135, 33, 
+	34, 38, 136, 135, 135, 135, 135, 14, 
+	135, 139, 135, 11, 135, 135, 135, 135, 
+	135, 135, 135, 13, 14, 15, 16, 17, 
+	135, 19, 20, 135, 135, 135, 23, 24, 
+	25, 135, 26, 27, 28, 135, 135, 135, 
+	135, 135, 33, 34, 38, 136, 135, 135, 
+	135, 135, 14, 135, 11, 135, 135, 135, 
+	135, 135, 135, 135, 135, 14, 15, 16, 
+	17, 135, 135, 135, 135, 135, 135, 135, 
+	135, 135, 135, 26, 27, 28, 135, 135, 
+	135, 135, 135, 33, 34, 38, 136, 135, 
+	135, 135, 135, 14, 135, 139, 135, 11, 
+	135, 135, 135, 135, 135, 135, 135, 13, 
+	14, 15, 16, 17, 135, 135, 20, 135, 
+	135, 135, 23, 24, 25, 135, 26, 27, 
+	28, 135, 135, 135, 135, 135, 33, 34, 
+	38, 136, 135, 135, 135, 135, 14, 135, 
+	139, 135, 11, 135, 135, 135, 135, 135, 
+	135, 135, 13, 14, 15, 16, 17, 135, 
+	135, 135, 135, 135, 135, 23, 24, 25, 
+	135, 26, 27, 28, 135, 135, 135, 135, 
+	135, 33, 34, 38, 136, 135, 135, 135, 
+	135, 14, 135, 139, 135, 11, 135, 135, 
+	135, 135, 135, 135, 135, 13, 14, 15, 
+	16, 17, 18, 19, 20, 135, 135, 135, 
+	23, 24, 25, 135, 26, 27, 28, 135, 
+	135, 135, 135, 135, 33, 34, 38, 136, 
+	135, 135, 135, 135, 14, 135, 8, 9, 
+	135, 11, 135, 135, 135, 135, 135, 135, 
+	135, 13, 14, 15, 16, 17, 18, 19, 
+	20, 21, 135, 22, 23, 24, 25, 135, 
+	26, 27, 28, 135, 135, 135, 135, 32, 
+	33, 34, 38, 32, 135, 135, 135, 135, 
+	37, 135, 135, 38, 135, 8, 135, 135, 
+	135, 135, 135, 135, 135, 135, 135, 135, 
+	135, 135, 11, 135, 8, 135, 135, 135, 
+	135, 135, 135, 135, 135, 135, 135, 135, 
+	135, 11, 135, 135, 135, 135, 135, 135, 
+	135, 135, 14, 15, 16, 17, 135, 135, 
+	135, 135, 135, 135, 135, 135, 135, 135, 
+	26, 27, 28, 135, 135, 135, 135, 135, 
+	33, 34, 38, 136, 135, 140, 135, 135, 
+	135, 135, 135, 135, 135, 135, 135, 11, 
+	135, 10, 11, 135, 4, 135, 135, 135, 
+	4, 135, 135, 135, 135, 135, 8, 9, 
+	10, 11, 135, 135, 135, 135, 135, 135, 
+	135, 13, 14, 15, 16, 17, 18, 19, 
+	20, 21, 8, 22, 23, 24, 25, 135, 
+	26, 27, 28, 135, 29, 30, 135, 32, 
+	33, 34, 38, 32, 135, 135, 135, 135, 
+	37, 135, 135, 38, 135, 11, 135, 135, 
+	135, 135, 135, 135, 135, 135, 135, 135, 
+	135, 135, 135, 135, 135, 135, 135, 135, 
+	135, 135, 135, 135, 135, 135, 135, 135, 
+	29, 30, 135, 11, 135, 135, 135, 135, 
+	135, 135, 135, 135, 135, 135, 135, 135, 
+	135, 135, 135, 135, 135, 135, 135, 135, 
+	135, 135, 135, 135, 135, 135, 135, 30, 
+	135, 4, 141, 141, 141, 4, 141, 143, 
+	142, 142, 142, 142, 142, 142, 142, 142, 
+	142, 142, 142, 142, 142, 142, 142, 142, 
+	142, 142, 142, 142, 142, 142, 142, 142, 
+	142, 142, 142, 142, 142, 142, 142, 142, 
+	142, 142, 142, 144, 142, 145, 142, 145, 
+	146, 142, 143, 142, 142, 142, 142, 142, 
+	142, 142, 142, 142, 142, 142, 142, 142, 
+	142, 142, 142, 142, 142, 142, 142, 142, 
+	142, 142, 142, 142, 142, 142, 142, 142, 
+	142, 142, 142, 142, 142, 1, 144, 144, 
+	142, 143, 142, 142, 142, 142, 142, 142, 
+	142, 142, 142, 142, 142, 142, 142, 142, 
+	142, 142, 142, 142, 142, 142, 142, 142, 
+	142, 142, 142, 142, 142, 142, 142, 142, 
+	142, 142, 142, 142, 142, 144, 142, 145, 
+	142, 143, 142, 142, 142, 142, 142, 142, 
+	142, 142, 142, 142, 142, 142, 142, 142, 
+	142, 142, 142, 142, 142, 142, 142, 142, 
+	142, 142, 142, 142, 142, 142, 142, 142, 
+	142, 142, 142, 142, 142, 144, 142, 145, 
+	142, 145, 142, 40, 41, 39, 42, 39, 
+	39, 39, 39, 39, 39, 39, 43, 44, 
+	45, 46, 47, 48, 49, 50, 51, 40, 
+	52, 53, 54, 55, 39, 56, 57, 58, 
+	39, 59, 60, 39, 61, 62, 63, 64, 
+	61, 1, 39, 2, 39, 65, 39, 39, 
+	64, 39, 0
 };
 
 static const char _use_syllable_machine_trans_targs[] = {
@@ -723,21 +723,21 @@
 	90, 91, 116, 1, 118, 104, 92, 93, 
 	94, 95, 108, 110, 111, 112, 113, 105, 
 	106, 107, 99, 100, 101, 119, 120, 121, 
-	114, 96, 97, 98, 126, 115, 1, 3, 
-	4, 1, 17, 5, 6, 7, 8, 21, 
-	23, 24, 25, 26, 18, 19, 20, 12, 
-	13, 14, 29, 30, 27, 9, 10, 11, 
-	28, 15, 16, 22, 1, 32, 1, 45, 
-	33, 34, 35, 36, 49, 51, 52, 53, 
-	54, 46, 47, 48, 40, 41, 42, 55, 
-	37, 38, 39, 56, 57, 58, 43, 1, 
-	44, 1, 50, 1, 1, 1, 60, 1, 
-	1, 1, 62, 63, 76, 64, 65, 66, 
-	67, 80, 82, 83, 84, 85, 77, 78, 
-	79, 71, 72, 73, 86, 68, 69, 70, 
-	87, 88, 89, 74, 75, 81, 1, 102, 
-	103, 109, 117, 1, 1, 1, 123, 124, 
-	125
+	114, 96, 97, 98, 126, 115, 98, 1, 
+	3, 4, 1, 17, 5, 6, 7, 8, 
+	21, 23, 24, 25, 26, 18, 19, 20, 
+	12, 13, 14, 29, 30, 27, 9, 10, 
+	11, 28, 15, 16, 22, 1, 32, 1, 
+	45, 33, 34, 35, 36, 49, 51, 52, 
+	53, 54, 46, 47, 48, 40, 41, 42, 
+	55, 37, 38, 39, 56, 57, 58, 43, 
+	1, 44, 1, 50, 1, 1, 1, 60, 
+	1, 1, 1, 62, 63, 76, 64, 65, 
+	66, 67, 80, 82, 83, 84, 85, 77, 
+	78, 79, 71, 72, 73, 86, 68, 69, 
+	70, 87, 88, 89, 74, 75, 81, 1, 
+	102, 1, 103, 109, 117, 1, 1, 1, 
+	123, 124, 125
 };
 
 static const char _use_syllable_machine_trans_actions[] = {
@@ -745,21 +745,21 @@
 	0, 0, 0, 5, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
-	0, 0, 0, 0, 6, 0, 7, 0, 
-	0, 8, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 6, 7, 0, 8, 9, 
+	0, 0, 10, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
-	0, 0, 0, 0, 9, 0, 10, 0, 
+	0, 0, 0, 0, 0, 11, 0, 12, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
-	0, 0, 0, 0, 0, 0, 0, 11, 
-	0, 12, 0, 13, 14, 15, 0, 16, 
-	17, 18, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
+	13, 0, 14, 0, 15, 16, 17, 0, 
+	18, 19, 20, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
-	0, 0, 0, 0, 0, 0, 19, 0, 
-	0, 0, 0, 20, 21, 22, 0, 0, 
-	0
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 21, 
+	0, 22, 0, 0, 0, 23, 24, 25, 
+	0, 0, 0
 };
 
 static const char _use_syllable_machine_to_state_actions[] = {
@@ -801,22 +801,22 @@
 };
 
 static const short _use_syllable_machine_eof_trans[] = {
-	1, 0, 39, 39, 39, 39, 39, 39, 
-	39, 39, 39, 39, 39, 39, 39, 39, 
-	39, 39, 39, 39, 39, 39, 39, 39, 
-	39, 39, 39, 39, 39, 39, 39, 69, 
-	69, 69, 69, 69, 69, 69, 69, 69, 
-	69, 69, 69, 96, 69, 69, 69, 69, 
-	69, 69, 69, 69, 69, 69, 69, 100, 
-	96, 69, 100, 102, 105, 69, 69, 69, 
-	69, 69, 69, 69, 69, 69, 69, 69, 
-	69, 69, 96, 69, 69, 69, 69, 69, 
-	69, 69, 69, 69, 69, 69, 100, 96, 
-	69, 100, 135, 135, 135, 135, 135, 135, 
-	135, 135, 135, 135, 135, 135, 135, 135, 
-	135, 135, 135, 135, 135, 135, 135, 135, 
-	135, 135, 135, 135, 135, 135, 135, 135, 
-	135, 140, 141, 141, 141, 141, 39
+	1, 0, 40, 40, 40, 40, 40, 40, 
+	40, 40, 40, 40, 40, 40, 40, 40, 
+	40, 40, 40, 40, 40, 40, 40, 40, 
+	40, 40, 40, 40, 40, 40, 40, 70, 
+	70, 70, 70, 70, 70, 70, 70, 70, 
+	70, 70, 70, 97, 70, 70, 70, 70, 
+	70, 70, 70, 70, 70, 70, 70, 101, 
+	97, 70, 101, 103, 106, 70, 70, 70, 
+	70, 70, 70, 70, 70, 70, 70, 70, 
+	70, 70, 97, 70, 70, 70, 70, 70, 
+	70, 70, 70, 70, 70, 70, 101, 97, 
+	70, 101, 136, 136, 136, 136, 136, 136, 
+	136, 136, 138, 136, 136, 136, 136, 136, 
+	136, 136, 136, 136, 136, 136, 136, 136, 
+	136, 136, 136, 136, 136, 136, 136, 136, 
+	136, 142, 143, 143, 143, 143, 40
 };
 
 static const int use_syllable_machine_start = 1;
@@ -830,7 +830,7 @@
 
 
 
-#line 185 "hb-ot-shaper-use-machine.rl"
+#line 186 "hb-ot-shaper-use-machine.rl"
 
 
 #define found_syllable(syllable_type) \
@@ -937,7 +937,7 @@
 	act = 0;
 	}
 
-#line 285 "hb-ot-shaper-use-machine.rl"
+#line 286 "hb-ot-shaper-use-machine.rl"
 
 
   unsigned int syllable_serial = 1;
@@ -974,80 +974,80 @@
 		goto _again;
 
 	switch ( _use_syllable_machine_trans_actions[_trans] ) {
-	case 6:
+	case 7:
 #line 1 "NONE"
 	{te = p+1;}
 	break;
-	case 14:
+	case 16:
 #line 173 "hb-ot-shaper-use-machine.rl"
 	{te = p+1;{ found_syllable (use_virama_terminated_cluster); }}
 	break;
-	case 12:
+	case 14:
 #line 174 "hb-ot-shaper-use-machine.rl"
 	{te = p+1;{ found_syllable (use_sakot_terminated_cluster); }}
 	break;
-	case 10:
+	case 12:
 #line 175 "hb-ot-shaper-use-machine.rl"
 	{te = p+1;{ found_syllable (use_standard_cluster); }}
 	break;
-	case 18:
+	case 20:
 #line 176 "hb-ot-shaper-use-machine.rl"
 	{te = p+1;{ found_syllable (use_number_joiner_terminated_cluster); }}
 	break;
-	case 16:
+	case 18:
 #line 177 "hb-ot-shaper-use-machine.rl"
 	{te = p+1;{ found_syllable (use_numeral_cluster); }}
 	break;
-	case 8:
+	case 10:
 #line 178 "hb-ot-shaper-use-machine.rl"
 	{te = p+1;{ found_syllable (use_symbol_cluster); }}
 	break;
-	case 22:
+	case 25:
 #line 179 "hb-ot-shaper-use-machine.rl"
 	{te = p+1;{ found_syllable (use_hieroglyph_cluster); }}
 	break;
 	case 5:
-#line 180 "hb-ot-shaper-use-machine.rl"
+#line 181 "hb-ot-shaper-use-machine.rl"
 	{te = p+1;{ found_syllable (use_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }}
 	break;
 	case 4:
-#line 181 "hb-ot-shaper-use-machine.rl"
+#line 182 "hb-ot-shaper-use-machine.rl"
 	{te = p+1;{ found_syllable (use_non_cluster); }}
 	break;
-	case 13:
+	case 15:
 #line 173 "hb-ot-shaper-use-machine.rl"
 	{te = p;p--;{ found_syllable (use_virama_terminated_cluster); }}
 	break;
-	case 11:
+	case 13:
 #line 174 "hb-ot-shaper-use-machine.rl"
 	{te = p;p--;{ found_syllable (use_sakot_terminated_cluster); }}
 	break;
-	case 9:
+	case 11:
 #line 175 "hb-ot-shaper-use-machine.rl"
 	{te = p;p--;{ found_syllable (use_standard_cluster); }}
 	break;
-	case 17:
+	case 19:
 #line 176 "hb-ot-shaper-use-machine.rl"
 	{te = p;p--;{ found_syllable (use_number_joiner_terminated_cluster); }}
 	break;
-	case 15:
+	case 17:
 #line 177 "hb-ot-shaper-use-machine.rl"
 	{te = p;p--;{ found_syllable (use_numeral_cluster); }}
 	break;
-	case 7:
+	case 9:
 #line 178 "hb-ot-shaper-use-machine.rl"
 	{te = p;p--;{ found_syllable (use_symbol_cluster); }}
 	break;
-	case 21:
+	case 24:
 #line 179 "hb-ot-shaper-use-machine.rl"
 	{te = p;p--;{ found_syllable (use_hieroglyph_cluster); }}
 	break;
-	case 19:
-#line 180 "hb-ot-shaper-use-machine.rl"
+	case 21:
+#line 181 "hb-ot-shaper-use-machine.rl"
 	{te = p;p--;{ found_syllable (use_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }}
 	break;
-	case 20:
-#line 181 "hb-ot-shaper-use-machine.rl"
+	case 23:
+#line 182 "hb-ot-shaper-use-machine.rl"
 	{te = p;p--;{ found_syllable (use_non_cluster); }}
 	break;
 	case 1:
@@ -1054,8 +1054,32 @@
 #line 178 "hb-ot-shaper-use-machine.rl"
 	{{p = ((te))-1;}{ found_syllable (use_symbol_cluster); }}
 	break;
-#line 1058 "hb-ot-shaper-use-machine.hh"
+	case 22:
+#line 1 "NONE"
+	{	switch( act ) {
+	case 8:
+	{{p = ((te))-1;} found_syllable (use_non_cluster); }
+	break;
+	case 9:
+	{{p = ((te))-1;} found_syllable (use_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }
+	break;
 	}
+	}
+	break;
+	case 6:
+#line 1 "NONE"
+	{te = p+1;}
+#line 180 "hb-ot-shaper-use-machine.rl"
+	{act = 8;}
+	break;
+	case 8:
+#line 1 "NONE"
+	{te = p+1;}
+#line 181 "hb-ot-shaper-use-machine.rl"
+	{act = 9;}
+	break;
+#line 1082 "hb-ot-shaper-use-machine.hh"
+	}
 
 _again:
 	switch ( _use_syllable_machine_to_state_actions[cs] ) {
@@ -1063,7 +1087,7 @@
 #line 1 "NONE"
 	{ts = 0;}
 	break;
-#line 1067 "hb-ot-shaper-use-machine.hh"
+#line 1091 "hb-ot-shaper-use-machine.hh"
 	}
 
 	if ( ++p != pe )
@@ -1079,7 +1103,7 @@
 
 	}
 
-#line 290 "hb-ot-shaper-use-machine.rl"
+#line 291 "hb-ot-shaper-use-machine.rl"
 
 }
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shaper-use-machine.rl
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shaper-use-machine.rl	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shaper-use-machine.rl	2025-01-11 23:22:13 UTC (rev 73427)
@@ -177,6 +177,7 @@
 	numeral_cluster ZWNJ?			=> { found_syllable (use_numeral_cluster); };
 	symbol_cluster ZWNJ?			=> { found_syllable (use_symbol_cluster); };
 	hieroglyph_cluster ZWNJ?		=> { found_syllable (use_hieroglyph_cluster); };
+	FMPst					=> { found_syllable (use_non_cluster); };
 	broken_cluster ZWNJ?			=> { found_syllable (use_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; };
 	other					=> { found_syllable (use_non_cluster); };
 *|;

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-tag-table.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-tag-table.hh	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-tag-table.hh	2025-01-11 23:22:13 UTC (rev 73427)
@@ -6,8 +6,8 @@
  *
  * on files with these headers:
  *
- * <meta name="updated_at" content="2024-07-07 12:57 AM" />
- * File-Date: 2024-06-14
+ * <meta name="updated_at" content="2024-12-05 07:13 PM" />
+ * File-Date: 2024-11-19
  */
 
 #ifndef HB_OT_TAG_TABLE_HH
@@ -830,6 +830,7 @@
   {HB_TAG('k','f','x',' '),	HB_TAG('K','U','L',' ')},	/* Kullu Pahari -> Kulvi */
   {HB_TAG('k','f','y',' '),	HB_TAG('K','M','N',' ')},	/* Kumaoni */
   {HB_TAG('k','g','e',' '),	HB_TAG_NONE	       },	/* Komering != Khutsuri Georgian */
+/*{HB_TAG('k','g','f',' '),	HB_TAG('K','G','F',' ')},*/	/* Kube */
   {HB_TAG('k','h','a',' '),	HB_TAG('K','S','I',' ')},	/* Khasi */
   {HB_TAG('k','h','b',' '),	HB_TAG('X','B','D',' ')},	/* Lü */
   {HB_TAG('k','h','k',' '),	HB_TAG('M','N','G',' ')},	/* Halh Mongolian -> Mongolian */
@@ -855,6 +856,7 @@
   {HB_TAG('k','l','m',' '),	HB_TAG_NONE	       },	/* Migum != Kalmyk */
   {HB_TAG('k','l','n',' '),	HB_TAG('K','A','L',' ')},	/* Kalenjin [macrolanguage] */
   {HB_TAG('k','m','b',' '),	HB_TAG('M','B','N',' ')},	/* Kimbundu -> Mbundu */
+/*{HB_TAG('k','m','g',' '),	HB_TAG('K','M','G',' ')},*/	/* Kâte */
   {HB_TAG('k','m','n',' '),	HB_TAG_NONE	       },	/* Awtuw != Kumaoni */
   {HB_TAG('k','m','o',' '),	HB_TAG_NONE	       },	/* Kwoma != Komo */
   {HB_TAG('k','m','r',' '),	HB_TAG('K','U','R',' ')},	/* Northern Kurdish -> Kurdish */
@@ -898,6 +900,7 @@
   {HB_TAG('k','s','i',' '),	HB_TAG_NONE	       },	/* Krisa != Khasi */
   {HB_TAG('k','s','m',' '),	HB_TAG_NONE	       },	/* Kumba != Kildin Sami */
   {HB_TAG('k','s','s',' '),	HB_TAG('K','I','S',' ')},	/* Southern Kisi -> Kisii */
+/*{HB_TAG('k','s','u',' '),	HB_TAG('K','S','U',' ')},*/	/* Khamyang */
   {HB_TAG('k','s','w',' '),	HB_TAG('K','S','W',' ')},	/* S’gaw Karen */
   {HB_TAG('k','s','w',' '),	HB_TAG('K','R','N',' ')},	/* S'gaw Karen -> Karen */
   {HB_TAG('k','t','b',' '),	HB_TAG('K','E','B',' ')},	/* Kambaata -> Kebena */
@@ -911,6 +914,7 @@
   {HB_TAG('k','u','y',' '),	HB_TAG_NONE	       },	/* Kuuku-Ya'u != Kuy */
   {HB_TAG('k','v','b',' '),	HB_TAG('M','L','Y',' ')},	/* Kubu -> Malay */
   {HB_TAG('k','v','l',' '),	HB_TAG('K','R','N',' ')},	/* Kayaw -> Karen */
+  {HB_TAG('k','v','q',' '),	HB_TAG('K','V','Q',' ')},	/* Geba Karen */
   {HB_TAG('k','v','q',' '),	HB_TAG('K','R','N',' ')},	/* Geba Karen -> Karen */
   {HB_TAG('k','v','r',' '),	HB_TAG('M','L','Y',' ')},	/* Kerinci -> Malay */
   {HB_TAG('k','v','t',' '),	HB_TAG('K','R','N',' ')},	/* Lahta Karen -> Karen */
@@ -1146,6 +1150,7 @@
   {HB_TAG('n','o','d',' '),	HB_TAG('N','T','A',' ')},	/* Northern Thai -> Northern Tai */
 /*{HB_TAG('n','o','e',' '),	HB_TAG('N','O','E',' ')},*/	/* Nimadi */
 /*{HB_TAG('n','o','g',' '),	HB_TAG('N','O','G',' ')},*/	/* Nogai */
+/*{HB_TAG('n','o','p',' '),	HB_TAG('N','O','P',' ')},*/	/* Numanggang */
 /*{HB_TAG('n','o','v',' '),	HB_TAG('N','O','V',' ')},*/	/* Novial */
   {HB_TAG('n','p','i',' '),	HB_TAG('N','E','P',' ')},	/* Nepali */
   {HB_TAG('n','p','l',' '),	HB_TAG('N','A','H',' ')},	/* Southeastern Puebla Nahuatl -> Nahuatl */
@@ -1156,6 +1161,7 @@
   {HB_TAG('n','s','u',' '),	HB_TAG('N','A','H',' ')},	/* Sierra Negra Nahuatl -> Nahuatl */
   {HB_TAG('n','t','o',' '),	HB_TAG_NONE	       },	/* Ntomba != Esperanto */
   {HB_TAG('n','u','e',' '),	HB_TAG('B','A','D','0')},	/* Ngundu -> Banda */
+/*{HB_TAG('n','u','k',' '),	HB_TAG('N','U','K',' ')},*/	/* Nuu-chah-nulth */
   {HB_TAG('n','u','u',' '),	HB_TAG('B','A','D','0')},	/* Ngbundu -> Banda */
   {HB_TAG('n','u','z',' '),	HB_TAG('N','A','H',' ')},	/* Tlamacazapa Nahuatl -> Nahuatl */
   {HB_TAG('n','w','e',' '),	HB_TAG('B','M','L',' ')},	/* Ngwe -> Bamileke */
@@ -1399,8 +1405,10 @@
   {HB_TAG('s','i','z',' '),	HB_TAG('B','B','R',' ')},	/* Siwi -> Berber */
 /*{HB_TAG('s','j','a',' '),	HB_TAG('S','J','A',' ')},*/	/* Epena */
   {HB_TAG('s','j','d',' '),	HB_TAG('K','S','M',' ')},	/* Kildin Sami */
+/*{HB_TAG('s','j','e',' '),	HB_TAG('S','J','E',' ')},*/	/* Pite Sami */
   {HB_TAG('s','j','o',' '),	HB_TAG('S','I','B',' ')},	/* Xibe -> Sibe */
   {HB_TAG('s','j','s',' '),	HB_TAG('B','B','R',' ')},	/* Senhaja De Srair -> Berber */
+/*{HB_TAG('s','j','u',' '),	HB_TAG('S','J','U',' ')},*/	/* Ume Sami */
   {HB_TAG('s','k','g',' '),	HB_TAG('M','L','G',' ')},	/* Sakalava Malagasy -> Malagasy */
   {HB_TAG('s','k','r',' '),	HB_TAG('S','R','K',' ')},	/* Saraiki */
   {HB_TAG('s','k','s',' '),	HB_TAG_NONE	       },	/* Maia != Skolt Sami */
@@ -1461,6 +1469,7 @@
   {HB_TAG('t','a','q',' '),	HB_TAG('B','B','R',' ')},	/* Tamasheq -> Berber */
   {HB_TAG('t','a','s',' '),	HB_TAG('C','P','P',' ')},	/* Tay Boi -> Creoles */
   {HB_TAG('t','a','u',' '),	HB_TAG('A','T','H',' ')},	/* Upper Tanana -> Athapaskan */
+/*{HB_TAG('t','b','v',' '),	HB_TAG('T','B','V',' ')},*/	/* Tobo */
   {HB_TAG('t','c','b',' '),	HB_TAG('A','T','H',' ')},	/* Tanacross -> Athapaskan */
   {HB_TAG('t','c','e',' '),	HB_TAG('A','T','H',' ')},	/* Southern Tutchone -> Athapaskan */
   {HB_TAG('t','c','h',' '),	HB_TAG('C','P','P',' ')},	/* Turks And Caicos Creole English -> Creoles */
@@ -1623,7 +1632,7 @@
   {HB_TAG('y','b','a',' '),	HB_TAG_NONE	       },	/* Yala != Yoruba */
   {HB_TAG('y','b','b',' '),	HB_TAG('B','M','L',' ')},	/* Yemba -> Bamileke */
   {HB_TAG('y','b','d',' '),	HB_TAG('A','R','K',' ')},	/* Yangbye (retired code) -> Rakhine */
-  {HB_TAG('y','c','r',' '),	HB_TAG_NONE	       },	/* Yilan Creole != Y-Cree */
+  {HB_TAG('y','c','r',' '),	HB_TAG('C','P','P',' ')},	/* Yilan Creole -> Creoles */
   {HB_TAG('y','d','d',' '),	HB_TAG('J','I','I',' ')},	/* Eastern Yiddish -> Yiddish */
 /*{HB_TAG('y','g','p',' '),	HB_TAG('Y','G','P',' ')},*/	/* Gepo */
   {HB_TAG('y','i','h',' '),	HB_TAG('J','I','I',' ')},	/* Western Yiddish -> Yiddish */

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var-common.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var-common.hh	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var-common.hh	2025-01-11 23:22:13 UTC (rev 73427)
@@ -885,9 +885,9 @@
      * no need to do find_shared_points () again */
     hb_vector_t<char> *shared_points_bytes = nullptr;
 
-    /* total compiled byte size as TupleVariationData format, initialized to its
-     * min_size: 4 */
-    unsigned compiled_byte_size = 4;
+    /* total compiled byte size as TupleVariationData format, initialized to 0 */
+    unsigned compiled_byte_size = 0;
+    bool needs_padding = false;
 
     /* for gvar iup delta optimization: whether this is a composite glyph */
     bool is_composite = false;
@@ -1219,12 +1219,21 @@
     bool compile_bytes (const hb_map_t& axes_index_map,
                         const hb_map_t& axes_old_index_tag_map,
                         bool use_shared_points,
+                        bool is_gvar = false,
                         const hb_hashmap_t<const hb_vector_t<char>*, unsigned>* shared_tuples_idx_map = nullptr)
     {
+      // return true for empty glyph
+      if (!tuple_vars)
+        return true;
+
       // compile points set and store data in hashmap
       if (!compile_all_point_sets ())
         return false;
 
+      /* total compiled byte size as TupleVariationData format, initialized to its
+       * min_size: 4 */
+      compiled_byte_size += 4;
+
       if (use_shared_points)
       {
         find_shared_points ();
@@ -1253,6 +1262,13 @@
           return false;
         compiled_byte_size += tuple.compiled_tuple_header.length + points_data_length + tuple.compiled_deltas.length;
       }
+
+      if (is_gvar && (compiled_byte_size % 2))
+      {
+        needs_padding = true;
+        compiled_byte_size += 1;
+      }
+
       return true;
     }
 
@@ -1295,7 +1311,7 @@
       }
 
       /* padding for gvar */
-      if (is_gvar && (compiled_byte_size % 2))
+      if (is_gvar && needs_padding)
       {
         HBUINT8 pad;
         pad = 0;

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var-gvar-table.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var-gvar-table.hh	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var-gvar-table.hh	2025-01-11 23:22:13 UTC (rev 73427)
@@ -140,6 +140,7 @@
     for (tuple_variations_t& vars: glyph_variations)
       if (!vars.compile_bytes (axes_index_map, axes_old_index_tag_map,
                                true, /* use shared points*/
+                               true,
                                &shared_tuples_idx_map))
         return false;
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-paint.h
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-paint.h	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-paint.h	2025-01-11 23:22:13 UTC (rev 73427)
@@ -146,7 +146,7 @@
  *
  * A virtual method for the #hb_paint_funcs_t to render a color glyph by glyph index.
  *
- * Return value: %true if the glyph was painted, %false otherwise.
+ * Return value: `true` if the glyph was painted, `false` otherwise.
  *
  * Since: 8.2.0
  */

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-sanitize.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-sanitize.hh	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-sanitize.hh	2025-01-11 23:22:13 UTC (rev 73427)
@@ -72,8 +72,8 @@
  *
  * === The sanitize() contract ===
  *
- * The sanitize() method of each object type shall return true if it's safe to
- * call other methods of the object, and %false otherwise.
+ * The sanitize() method of each object type shall return `true` if it's safe to
+ * call other methods of the object, and `false` otherwise.
  *
  * Note that what sanitize() checks for might align with what the specification
  * describes as valid table data, but does not have to be.  In particular, we

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-serialize.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-serialize.hh	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-serialize.hh	2025-01-11 23:22:13 UTC (rev 73427)
@@ -36,9 +36,7 @@
 #include "hb-map.hh"
 #include "hb-pool.hh"
 
-#ifdef HB_EXPERIMENTAL_API
-#include "hb-subset-repacker.h"
-#endif
+#include "hb-subset-serialize.h"
 
 /*
  * Serialize
@@ -75,8 +73,7 @@
 
     object_t () = default;
 
-#ifdef HB_EXPERIMENTAL_API
-    object_t (const hb_object_t &o)
+    object_t (const hb_subset_serialize_object_t &o)
     {
       head = o.head;
       tail = o.tail;
@@ -89,7 +86,6 @@
       for (unsigned i = 0; i < o.num_virtual_links; i++)
         virtual_links.push (o.virtual_links[i]);
     }
-#endif
 
     bool add_virtual_link (objidx_t objidx)
     {
@@ -148,8 +144,7 @@
 
       link_t () = default;
 
-#ifdef HB_EXPERIMENTAL_API
-      link_t (const hb_link_t &o)
+      link_t (const hb_subset_serialize_link_t &o)
       {
         width = o.width;
         is_signed = 0;
@@ -158,7 +153,6 @@
         bias = 0;
         objidx = o.objidx;
       }
-#endif
 
       HB_INTERNAL static int cmp (const void* a, const void* b)
       {
@@ -400,6 +394,7 @@
       {
         merge_virtual_links (obj, objidx);
 	obj->fini ();
+        object_pool.release (obj);
 	return objidx;
       }
     }
@@ -463,9 +458,11 @@
     while (packed.length > 1 &&
 	   packed.tail ()->head < tail)
     {
-      packed_map.del (packed.tail ());
-      assert (!packed.tail ()->next);
-      packed.tail ()->fini ();
+      object_t *obj = packed.tail ();
+      packed_map.del (obj);
+      assert (!obj->next);
+      obj->fini ();
+      object_pool.release (obj);
       packed.pop ();
     }
     if (packed.length > 1)

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shape.h
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shape.h	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shape.h	2025-01-11 23:22:13 UTC (rev 73427)
@@ -53,6 +53,7 @@
 	       unsigned int        num_features,
 	       const char * const *shaper_list);
 
+#ifdef HB_EXPERIMENTAL_API
 HB_EXTERN hb_bool_t
 hb_shape_justify (hb_font_t          *font,
 		  hb_buffer_t        *buffer,
@@ -64,6 +65,7 @@
 		  float              *advance, /* IN/OUT */
 		  hb_tag_t           *var_tag, /* OUT */
 		  float              *var_value /* OUT */);
+#endif
 
 HB_EXTERN const char **
 hb_shape_list_shapers (void);

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-input.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-input.cc	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-input.cc	2025-01-11 23:22:13 UTC (rev 73427)
@@ -534,7 +534,6 @@
  *
  * Note: input min value can not be bigger than input max value. If the input
  * default value is not within the new min/max range, it'll be clamped.
- * Note: currently it supports gvar and cvar tables only.
  *
  * Return value: `true` if success, `false` otherwise
  *
@@ -597,6 +596,144 @@
   *axis_max_value = triple->maximum;
   return true;
 }
+
+/**
+ * hb_subset_axis_range_from_string:
+ * @str: a string to parse
+ * @len: length of @str, or -1 if str is NULL terminated
+ * @axis_min_value: (out): the axis min value to initialize with the parsed value
+ * @axis_max_value: (out): the axis max value to initialize with the parsed value
+ * @axis_def_value: (out): the axis default value to initialize with the parse
+ * value
+ *
+ * Parses a string into a subset axis range(min, def, max).
+ * Axis positions string is in the format of min:def:max or min:max
+ * When parsing axis positions, empty values as meaning the existing value for that part
+ * E.g: :300:500
+ * Specifies min = existing, def = 300, max = 500
+ * In the output axis_range, if a value should be set to it's default value,
+ * then it will be set to NaN
+ *
+ * Return value:
+ * `true` if @str is successfully parsed, `false` otherwise
+ *
+ * Since: 10.2.0
+ */
+HB_EXTERN hb_bool_t
+hb_subset_axis_range_from_string (const char *str, int len,
+                                  float *axis_min_value,
+                                  float *axis_max_value,
+                                  float *axis_def_value)
+{
+  if (len < 0)
+    len = strlen (str);
+
+  const char *end = str + len;
+  const char* part = strpbrk (str, ":");
+  if (!part)
+  {
+    // Single value.
+    if (strcmp (str, "drop") == 0)
+    {
+      *axis_min_value = NAN;
+      *axis_def_value = NAN;
+      *axis_max_value = NAN;
+      return true;
+    }
+
+    double v;
+    if (!hb_parse_double (&str, end, &v)) return false;
+
+    *axis_min_value = v;
+    *axis_def_value = v;
+    *axis_max_value = v;
+    return true;
+  }
+
+  float values[3];
+  int count = 0;
+  for (int i = 0; i < 3; i++) {
+    count++;
+    if (!*str || part == str)
+    {
+      values[i] = NAN;
+
+      if (part == NULL) break;
+      str = part + 1;
+      part = strpbrk (str, ":");
+      continue;
+    }
+
+    double v;
+    if (!hb_parse_double (&str, part, &v)) return false;
+    values[i] = v;
+
+    if (part == NULL) break;
+    str = part + 1;
+    part = strpbrk (str, ":");
+  }
+
+  if (count == 2)
+  {
+    *axis_min_value = values[0];
+    *axis_def_value = NAN;
+    *axis_max_value = values[1];
+    return true;
+  }
+  else if (count == 3)
+  {
+    *axis_min_value = values[0];
+    *axis_def_value = values[1];
+    *axis_max_value = values[2];
+    return true;
+  }
+  return false;
+}
+
+/**
+ * hb_subset_axis_range_to_string:
+ * @input: a #hb_subset_input_t object.
+ * @axis_tag: an axis to convert
+ * @buf: (array length=size) (out caller-allocates): output string
+ * @size: the allocated size of @buf
+ *
+ * Converts an axis range into a `NULL`-terminated string in the format
+ * understood by hb_subset_axis_range_from_string(). The client in responsible for
+ * allocating big enough size for @buf, 128 bytes is more than enough.
+ *
+ * Since: 10.2.0
+ */
+HB_EXTERN void
+hb_subset_axis_range_to_string (hb_subset_input_t *input,
+                                hb_tag_t axis_tag,
+                                char *buf, unsigned size)
+{
+  if (unlikely (!size)) return;
+  Triple* triple;
+  if (!input->axes_location.has(axis_tag, &triple)) {
+    return;
+  }
+
+  char s[128];
+  unsigned len = 0;
+
+  hb_locale_t clocale HB_UNUSED;
+  hb_locale_t oldlocale HB_UNUSED;
+  oldlocale = hb_uselocale (clocale = newlocale (LC_ALL_MASK, "C", NULL));
+  len += hb_max (0, snprintf (s, ARRAY_LENGTH (s) - len, "%g", (double) triple->minimum));
+  s[len++] = ':';
+
+  len += hb_max (0, snprintf (s + len, ARRAY_LENGTH (s) - len, "%g", (double) triple->middle));
+  s[len++] = ':';
+
+  len += hb_max (0, snprintf (s + len, ARRAY_LENGTH (s) - len, "%g", (double) triple->maximum));
+  (void) hb_uselocale (((void) freelocale (clocale), oldlocale));
+
+  assert (len < ARRAY_LENGTH (s));
+  len = hb_min (len, size - 1);
+  hb_memcpy (buf, s, len);
+  buf[len] = '\0';
+}
 #endif
 
 /**

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-plan.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-plan.cc	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-plan.cc	2025-01-11 23:22:13 UTC (rev 73427)
@@ -678,7 +678,8 @@
                               hb_subset_plan_t *plan)
 {
   OT::cmap::accelerator_t cmap (plan->source);
-  unsigned size_threshold = plan->source->get_num_glyphs ();
+  unsigned size_threshold = plan->source->get_num_glyphs ();  
+
   if (glyphs->is_empty () && unicodes->get_population () < size_threshold)
   {
 
@@ -797,6 +798,21 @@
     plan->unicodes.add_sorted_array (&arr.arrayZ->first, arr.length, sizeof (*arr.arrayZ));
     plan->_glyphset_gsub.add_array (&arr.arrayZ->second, arr.length, sizeof (*arr.arrayZ));
   }
+
+  // Variation selectors don't have glyphs associated with them in the cmap so they will have been filtered out above
+  // but should still be retained. Add them back here.
+
+  // However, the min and max codepoints for OS/2 should be calculated without considering variation selectors,
+  // so record those first.
+  plan->os2_info.min_cmap_codepoint = plan->unicodes.get_min();
+  plan->os2_info.max_cmap_codepoint = plan->unicodes.get_max();
+  
+  hb_set_t variation_selectors_to_retain;
+  cmap.collect_variation_selectors(&variation_selectors_to_retain);
+  + variation_selectors_to_retain.iter()
+  | hb_filter(unicodes)
+  | hb_sink(&plan->unicodes)
+  ;
 }
 
 static unsigned

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-plan.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-plan.hh	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-plan.hh	2025-01-11 23:22:13 UTC (rev 73427)
@@ -41,6 +41,13 @@
 struct Feature;
 }
 
+struct os2_info_t {
+  hb_codepoint_t min_cmap_codepoint;
+  hb_codepoint_t max_cmap_codepoint;
+};
+
+typedef struct os2_info_t os2_info_t;
+
 struct head_maxp_info_t
 {
   head_maxp_info_t ()
@@ -180,6 +187,8 @@
   //recalculated head/maxp table info after instancing
   mutable head_maxp_info_t head_maxp_info;
 
+  os2_info_t os2_info;
+
   const hb_subset_accelerator_t* accelerator;
   hb_subset_accelerator_t* inprogress_accelerator;
 

Deleted: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-repacker.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-repacker.cc	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-repacker.cc	2025-01-11 23:22:13 UTC (rev 73427)
@@ -1,58 +0,0 @@
-/*
- * Copyright © 2022  Google, Inc.
- *
- *  This is part of HarfBuzz, a text shaping library.
- *
- * Permission is hereby granted, without written agreement and without
- * license or royalty fees, to use, copy, modify, and distribute this
- * software and its documentation for any purpose, provided that the
- * above copyright notice and the following two paragraphs appear in
- * all copies of this software.
- *
- * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
- * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
- * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
- * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- *
- * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
- * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
- * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
- *
- */
-#include "hb-repacker.hh"
-
-#ifdef HB_EXPERIMENTAL_API
-
-/**
- * hb_subset_repack_or_fail:
- * @table_tag: tag of the table being packed, needed to allow table specific optimizations.
- * @hb_objects: raw array of struct hb_object_t, which provides
- * object graph info
- * @num_hb_objs: number of hb_object_t in the hb_objects array.
- *
- * Given the input object graph info, repack a table to eliminate
- * offset overflows. A nullptr is returned if the repacking attempt fails.
- * Table specific optimizations (eg. extension promotion in GSUB/GPOS) may be performed.
- * Passing HB_TAG_NONE will disable table specific optimizations.
- *
- * XSince: EXPERIMENTAL
- **/
-hb_blob_t* hb_subset_repack_or_fail (hb_tag_t table_tag,
-                                     hb_object_t* hb_objects,
-                                     unsigned num_hb_objs)
-{
-  hb_vector_t<const hb_object_t *> packed;
-  packed.alloc (num_hb_objs + 1);
-  packed.push (nullptr);
-  for (unsigned i = 0 ; i < num_hb_objs ; i++)
-    packed.push (&(hb_objects[i]));
-
-  return hb_resolve_overflows (packed,
-                               table_tag,
-                               20,
-                               true);
-}
-#endif

Deleted: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-repacker.h
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-repacker.h	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-repacker.h	2025-01-11 23:22:13 UTC (rev 73427)
@@ -1,81 +0,0 @@
-/*
- * Copyright © 2022  Google, Inc.
- *
- *  This is part of HarfBuzz, a text shaping library.
- *
- * Permission is hereby granted, without written agreement and without
- * license or royalty fees, to use, copy, modify, and distribute this
- * software and its documentation for any purpose, provided that the
- * above copyright notice and the following two paragraphs appear in
- * all copies of this software.
- *
- * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
- * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
- * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
- * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- *
- * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
- * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
- * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
- *
- */
-
-#ifndef HB_SUBSET_REPACKER_H
-#define HB_SUBSET_REPACKER_H
-
-#include "hb.h"
-
-HB_BEGIN_DECLS
-
-#ifdef HB_EXPERIMENTAL_API
-/*
- * struct hb_link_t
- * width:    offsetSize in bytes
- * position: position of the offset field in bytes
- * from beginning of subtable
- * objidx:   index of subtable
- */
-struct hb_link_t
-{
-  unsigned width;
-  unsigned position;
-  unsigned objidx;
-};
-
-typedef struct hb_link_t hb_link_t;
-
-/*
- * struct hb_object_t
- * head:    start of object data
- * tail:    end of object data
- * num_real_links:    num of offset field in the object
- * real_links:        pointer to array of offset info
- * num_virtual_links: num of objects that must be packed
- * after current object in the final serialized order
- * virtual_links:     array of virtual link info
- */
-struct hb_object_t
-{
-  char *head;
-  char *tail;
-  unsigned num_real_links;
-  hb_link_t *real_links;
-  unsigned num_virtual_links;
-  hb_link_t *virtual_links;
-};
-
-typedef struct hb_object_t hb_object_t;
-
-HB_EXTERN hb_blob_t*
-hb_subset_repack_or_fail (hb_tag_t table_tag,
-                          hb_object_t* hb_objects,
-                          unsigned num_hb_objs);
-
-#endif
-
-HB_END_DECLS
-
-#endif /* HB_SUBSET_REPACKER_H */

Added: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-serialize.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-serialize.cc	                        (rev 0)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-serialize.cc	2025-01-11 23:22:13 UTC (rev 73427)
@@ -0,0 +1,57 @@
+/*
+ * Copyright © 2022  Google, Inc.
+ *
+ *  This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ */
+
+#include "hb.hh"
+
+#include "hb-subset-serialize.h"
+#include "hb-repacker.hh"
+
+/**
+ * hb_subset_serialize_or_fail:
+ * @table_tag: tag of the table being packed, needed to allow table specific optimizations.
+ * @hb_objects: raw array of struct hb_subset_serialize_object_t, which provides
+ * object graph info
+ * @num_hb_objs: number of hb_subset_serialize_object_t in the hb_objects array.
+ *
+ * Given the input object graph info, repack a table to eliminate offset overflows and
+ * serialize it into a continuous array of bytes. A nullptr is returned if the serializing attempt fails.
+ * Table specific optimizations (eg. extension promotion in GSUB/GPOS) may be performed.
+ * Passing HB_TAG_NONE will disable table specific optimizations.
+ *
+ * Since: 10.2.0
+ **/
+HB_EXTERN hb_blob_t *
+hb_subset_serialize_or_fail (hb_tag_t                      table_tag,
+                             hb_subset_serialize_object_t *hb_objects,
+                             unsigned                      num_hb_objs)
+{
+  hb_vector_t<const hb_subset_serialize_object_t *> packed;
+  packed.alloc (num_hb_objs + 1);
+  packed.push (nullptr);
+  for (unsigned i = 0 ; i < num_hb_objs ; i++)
+    packed.push (&(hb_objects[i]));
+
+  return hb_resolve_overflows (packed, table_tag, 20, true);
+}

Added: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-serialize.h
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-serialize.h	                        (rev 0)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-serialize.h	2025-01-11 23:22:13 UTC (rev 73427)
@@ -0,0 +1,83 @@
+/*
+ * Copyright © 2022  Google, Inc.
+ *
+ *  This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ */
+
+#ifndef HB_SUBSET_SERIALIZE_H
+#define HB_SUBSET_SERIALIZE_H
+
+#include "hb.h"
+
+HB_BEGIN_DECLS
+
+/**
+ * hb_subset_serialize_link_t:
+ * @width: offsetSize in bytes
+ * @position: position of the offset field in bytes from
+ *            beginning of subtable
+ * @objidx: index of subtable
+ *
+ * Represents a link between two objects in the object graph
+ * to be serialized.
+ *
+ * Since: 10.2.0
+ */
+typedef struct hb_subset_serialize_link_t {
+  unsigned int width;
+  unsigned int position;
+  unsigned int objidx;
+} hb_subset_serialize_link_t;
+
+/**
+ * hb_subset_serialize_object_t:
+ * @head: start of object data
+ * @tail: end of object data
+ * @num_real_links: number of offset field in the object
+ * @real_links: array of offset info
+ * @num_virtual_links: number of objects that must be packed
+ *                     after current object in the final
+ *                     serialized order
+ * @virtual_links: array of virtual link info
+ *
+ * Represents an object in the object graph to be serialized.
+ *
+ * Since: 10.2.0
+ */
+typedef struct hb_subset_serialize_object_t {
+  char *head;
+  char *tail;
+  unsigned int num_real_links;
+  hb_subset_serialize_link_t *real_links;
+  unsigned int num_virtual_links;
+  hb_subset_serialize_link_t *virtual_links;
+} hb_subset_serialize_object_t;
+
+HB_EXTERN hb_blob_t *
+hb_subset_serialize_or_fail (hb_tag_t                      table_tag,
+                             hb_subset_serialize_object_t *hb_objects,
+                             unsigned                      num_hb_objs);
+
+
+HB_END_DECLS
+
+#endif /* HB_SUBSET_SERIALIZE_H */

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.cc	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.cc	2025-01-11 23:22:13 UTC (rev 73427)
@@ -295,7 +295,7 @@
   DEBUG_MSG (SUBSET, nullptr, "OT::%c%c%c%c ran out of room; reallocating to %u bytes.",
              HB_UNTAG (c->table_tag), buf_size);
 
-  if (unlikely (buf_size > c->source_blob->length * 16 ||
+  if (unlikely (buf_size > c->source_blob->length * 256 ||
 		!buf->alloc (buf_size, true)))
   {
     DEBUG_MSG (SUBSET, nullptr, "OT::%c%c%c%c failed to reallocate %u bytes.",

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.h
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.h	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.h	2025-01-11 23:22:13 UTC (rev 73427)
@@ -203,6 +203,18 @@
 				float               axis_max_value,
 				float               axis_def_value);
 
+HB_EXTERN hb_bool_t
+hb_subset_axis_range_from_string (const char *str, int len,
+				  float *axis_min_value,
+				  float *axis_max_value,
+				  float *axis_def_value);
+
+HB_EXTERN void
+hb_subset_axis_range_to_string (hb_subset_input_t *input,
+				hb_tag_t axis_tag,
+				char *buf,
+				unsigned size);
+
 #ifdef HB_EXPERIMENTAL_API
 HB_EXTERN hb_bool_t
 hb_subset_input_override_name_table (hb_subset_input_t  *input,

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-utf.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-utf.hh	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-utf.hh	2025-01-11 23:22:13 UTC (rev 73427)
@@ -458,6 +458,8 @@
 template <typename utf_t>
 static inline const typename utf_t::codepoint_t *
 hb_utf_offset_to_pointer (const typename utf_t::codepoint_t *start,
+			  const typename utf_t::codepoint_t *text,
+			  unsigned text_len,
 			  signed offset)
 {
   hb_codepoint_t unicode;
@@ -464,13 +466,13 @@
 
   while (offset-- > 0)
     start = utf_t::next (start,
-			 start + utf_t::max_len,
+			 text + text_len,
 			 &unicode,
 			 HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT);
 
   while (offset++ < 0)
     start = utf_t::prev (start,
-			 start - utf_t::max_len,
+			 text,
 			 &unicode,
 			 HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT);
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/meson.build
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/meson.build	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/meson.build	2025-01-11 23:22:13 UTC (rev 73427)
@@ -383,7 +383,7 @@
   'hb-subset-plan.cc',
   'hb-subset-plan.hh',
   'hb-subset-plan-member-list.hh',
-  'hb-subset-repacker.cc',
+  'hb-subset-serialize.cc',
   'graph/gsubgpos-context.cc',
   'graph/gsubgpos-context.hh',
   'graph/gsubgpos-graph.hh',
@@ -398,7 +398,7 @@
 
 hb_subset_headers = files(
   'hb-subset.h',
-  'hb-subset-repacker.h'
+  'hb-subset-serialize.h'
 )
 
 hb_gobject_sources = files(
@@ -875,6 +875,7 @@
 cmake_config.set('PACKAGE_CMAKE_INSTALL_INCLUDEDIR', '${PACKAGE_PREFIX_DIR}/@0@'.format(cmake_install_includedir))
 cmake_config.set('PACKAGE_CMAKE_INSTALL_LIBDIR', '${PACKAGE_PREFIX_DIR}/@0@'.format(cmake_install_libdir))
 cmake_config.set('PACKAGE_INCLUDE_INSTALL_DIR', '${PACKAGE_PREFIX_DIR}/@0@/@1@'.format(cmake_install_includedir, meson.project_name()))
+cmake_config.set('HARFBUZZ_VERSION', meson.project_version())
 cmake_config.set('HB_HAVE_GOBJECT', have_gobject ? 'YES' : 'NO')
 cmake_config.set('HB_LIBRARY_TYPE', get_option('default_library') == 'static' ? 'STATIC' : 'SHARED')
 

Modified: trunk/Build/source/libs/harfbuzz/include/Makefile.am
===================================================================
--- trunk/Build/source/libs/harfbuzz/include/Makefile.am	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/include/Makefile.am	2025-01-11 23:22:13 UTC (rev 73427)
@@ -30,7 +30,7 @@
 	$(HARFBUZZ_SRC)/hb-shape.h \
 	$(HARFBUZZ_SRC)/hb-shape-plan.h \
 	$(HARFBUZZ_SRC)/hb-style.h \
-	$(HARFBUZZ_SRC)/hb-subset-repacker.h \
+	$(HARFBUZZ_SRC)/hb-subset-serialize.h \
 	$(HARFBUZZ_SRC)/hb-unicode.h \
 	$(HARFBUZZ_BLD)/hb-version.h
 

Modified: trunk/Build/source/libs/harfbuzz/include/Makefile.in
===================================================================
--- trunk/Build/source/libs/harfbuzz/include/Makefile.in	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/include/Makefile.in	2025-01-11 23:22:13 UTC (rev 73427)
@@ -259,7 +259,7 @@
 	$(HARFBUZZ_SRC)/hb-paint.h $(HARFBUZZ_SRC)/hb-set.h \
 	$(HARFBUZZ_SRC)/hb-shape.h $(HARFBUZZ_SRC)/hb-shape-plan.h \
 	$(HARFBUZZ_SRC)/hb-style.h \
-	$(HARFBUZZ_SRC)/hb-subset-repacker.h \
+	$(HARFBUZZ_SRC)/hb-subset-serialize.h \
 	$(HARFBUZZ_SRC)/hb-unicode.h $(HARFBUZZ_BLD)/hb-version.h \
 	$(HARFBUZZ_SRC)/hb-ot.h $(HARFBUZZ_SRC)/hb-ot-color.h \
 	$(HARFBUZZ_SRC)/hb-ot-font.h $(HARFBUZZ_SRC)/hb-ot-layout.h \

Modified: trunk/Build/source/libs/harfbuzz/version.ac
===================================================================
--- trunk/Build/source/libs/harfbuzz/version.ac	2025-01-11 21:04:50 UTC (rev 73426)
+++ trunk/Build/source/libs/harfbuzz/version.ac	2025-01-11 23:22:13 UTC (rev 73427)
@@ -8,4 +8,4 @@
 dnl --------------------------------------------------------
 dnl
 dnl  m4-include this file to define the current harfbuzz version
-m4_define([harfbuzz_version], [10.1.0])
+m4_define([harfbuzz_version], [10.2.0])



More information about the tex-live-commits mailing list.