[
  {
    "path": ".bookignore",
    "content": "# Blacklist most files since documentation is co-located with the rest\n# of the source to avoid that GitBook copies them to the output\n# directory.\n*.*\n*-*\nCOPYING\nMakefile\ntigrc\n\n## Whitelist AsciiDoc and GitBook files\n!*.adoc\n!*.md\n!*.json\n\n# ... except the manual man-page\ndoc/tigmanual.7.adoc\n"
  },
  {
    "path": ".github/workflows/linux.yml",
    "content": "name: Linux\n\non: [push, pull_request]\n\njobs:\n  ci:\n    runs-on: ubuntu-latest\n\n    strategy:\n      matrix:\n        compiler: [clang, gcc]\n        tig_build: [autoconf, \"config.make\"]\n        include:\n          - name: Address Sanitizer\n            compiler: clang\n            tig_build: \"address-sanitizer\"\n\n          - name: Valgrind\n            compiler: gcc\n            tig_build: valgrind\n\n    steps:\n      - uses: actions/checkout@v4\n      - name: Test Tig\n        shell: 'script -q -e -c \"sh {0}\"' # Workaround to get a TTY, see https://github.com/gfx/example-github-actions-with-tty\n        run: |\n          set -ex\n          export LANG=en_US.utf8\n          sudo apt update\n          sudo DEBIAN_FRONTEND=noninteractive apt -yq install --no-install-recommends \\\n            asciidoc valgrind xmlto\n          CC=${{ matrix.compiler }} TIG_BUILD=${{ matrix.tig_build }} tools/travis.sh\n"
  },
  {
    "path": ".github/workflows/macos.yml",
    "content": "name: macOS\n\non: [push, pull_request]\n\njobs:\n  install:\n    runs-on: macos-latest\n    if: github.ref == 'refs/heads/master'\n\n    strategy:\n      matrix:\n        compiler: [clang, gcc]\n\n    steps:\n      - name: Patch\n        run: |\n          brew tap homebrew/core\n          cd \"$(brew --repo homebrew/core)\" && patch -p1 <<\\EOF\n          diff --git a/Formula/t/tig.rb b/Formula/t/tig.rb\n          index c726e53c519..920b0fbc1c2 100644\n          --- a/Formula/t/tig.rb\n          +++ b/Formula/t/tig.rb\n          @@ -31,9 +31,11 @@ class Tig < Formula\n             depends_on \"readline\"\n           \n             def install\n          +    ENV.deparallelize\n               system \"./autogen.sh\" if build.head?\n               system \"./configure\", \"--prefix=#{prefix}\", \"--sysconfdir=#{etc}\"\n               system \"make\"\n          +    system \"make\", \"test\"\n               # Ensure the configured `sysconfdir` is used during runtime by\n               # installing in a separate step.\n               system \"make\", \"install\", \"sysconfdir=#{pkgshare}/examples\"\n          EOF\n      - name: Install latest Tig\n        shell: 'script -q typescript sh {0}' # Workaround to get a TTY, see https://github.com/gfx/example-github-actions-with-tty\n        run: HOMEBREW_NO_INSTALL_FROM_API=1 HOMEBREW_CC=${{ matrix.compiler }} HOMEBREW_NO_AUTO_UPDATE=1 brew install --HEAD tig\n\n  ci:\n    runs-on: macos-latest\n    if: github.ref != 'refs/heads/master'\n\n    steps:\n      - uses: actions/checkout@v4\n      - name: Test Tig\n        shell: 'script -q typescript sh {0}' # Workaround to get a TTY, see https://github.com/gfx/example-github-actions-with-tty\n        run: |\n          brew install asciidoc autoconf automake coreutils gnu-sed ncurses xmlto\n          TIG_BUILD=autoconf tools/travis.sh\n"
  },
  {
    "path": ".gitignore",
    "content": "*.gcno\n*.gcda\n*.html\n*.o\n*.swp\n*~\n.deps\n/_book\n/config.make\n/node_modules/\naclocal.m4\nautom4te.cache\n/compile_commands/\n/compile_commands.json\nconfig.h\nconfig.h.in\nconfig.log\nconfig.status\nconfigure\ncscope.out\nctags\ndoc/*.[157]\ndoc/*.xml\ndoc/manual.html-chunked\ndoc/manual.pdf\ndoc/manual.toc\ndoc/release-docs/\nsrc/builtin-config.c\nsrc/tig\ntags\ntest/coverage\ntest/tools/test-graph\ntest/tmp\ntig-*.tar.gz\ntig-*.tar.gz.sha256\ntig.spec\ntools/doc-gen\ntig.dSYM\n"
  },
  {
    "path": ".mailmap",
    "content": "Jonas Fonseca <jonas.fonseca@gmail.com> <fonseca@diku.dk>\nJonas Fonseca <jonas.fonseca@gmail.com> <jonas.fonseca@savoirfairelinux.com>\nJonas Fonseca <jonas.fonseca@gmail.com> <fonseca@antimatter.localdomain>\n"
  },
  {
    "path": "COPYING",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 2, June 1991\n\n Copyright (C) 1989, 1991 Free Software Foundation, Inc.,\n 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicense is intended to guarantee your freedom to share and change free\nsoftware--to make sure the software is free for all its users.  This\nGeneral Public License applies to most of the Free Software\nFoundation's software and to any other program whose authors commit to\nusing it.  (Some other Free Software Foundation software is covered by\nthe GNU Lesser General Public License instead.)  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthis service if you wish), that you receive source code or can get it\nif you want it, that you can change the software or use pieces of it\nin new free programs; and that you know you can do these things.\n\n  To protect your rights, we need to make restrictions that forbid\nanyone to deny you these rights or to ask you to surrender the rights.\nThese restrictions translate to certain responsibilities for you if you\ndistribute copies of the software, or if you modify it.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must give the recipients all the rights that\nyou have.  You must make sure that they, too, receive or can get the\nsource code.  And you must show them these terms so they know their\nrights.\n\n  We protect your rights with two steps: (1) copyright the software, and\n(2) offer you this license which gives you legal permission to copy,\ndistribute and/or modify the software.\n\n  Also, for each author's protection and ours, we want to make certain\nthat everyone understands that there is no warranty for this free\nsoftware.  If the software is modified by someone else and passed on, we\nwant its recipients to know that what they have is not the original, so\nthat any problems introduced by others will not reflect on the original\nauthors' reputations.\n\n  Finally, any free program is threatened constantly by software\npatents.  We wish to avoid the danger that redistributors of a free\nprogram will individually obtain patent licenses, in effect making the\nprogram proprietary.  To prevent this, we have made it clear that any\npatent must be licensed for everyone's free use or not licensed at all.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                    GNU GENERAL PUBLIC LICENSE\n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License applies to any program or other work which contains\na notice placed by the copyright holder saying it may be distributed\nunder the terms of this General Public License.  The \"Program\", below,\nrefers to any such program or work, and a \"work based on the Program\"\nmeans either the Program or any derivative work under copyright law:\nthat is to say, a work containing the Program or a portion of it,\neither verbatim or with modifications and/or translated into another\nlanguage.  (Hereinafter, translation is included without limitation in\nthe term \"modification\".)  Each licensee is addressed as \"you\".\n\nActivities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning the Program is not restricted, and the output from the Program\nis covered only if its contents constitute a work based on the\nProgram (independent of having been made by running the Program).\nWhether that is true depends on what the Program does.\n\n  1. You may copy and distribute verbatim copies of the Program's\nsource code as you receive it, in any medium, provided that you\nconspicuously and appropriately publish on each copy an appropriate\ncopyright notice and disclaimer of warranty; keep intact all the\nnotices that refer to this License and to the absence of any warranty;\nand give any other recipients of the Program a copy of this License\nalong with the Program.\n\nYou may charge a fee for the physical act of transferring a copy, and\nyou may at your option offer warranty protection in exchange for a fee.\n\n  2. You may modify your copy or copies of the Program or any portion\nof it, thus forming a work based on the Program, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) You must cause the modified files to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    b) You must cause any work that you distribute or publish, that in\n    whole or in part contains or is derived from the Program or any\n    part thereof, to be licensed as a whole at no charge to all third\n    parties under the terms of this License.\n\n    c) If the modified program normally reads commands interactively\n    when run, you must cause it, when started running for such\n    interactive use in the most ordinary way, to print or display an\n    announcement including an appropriate copyright notice and a\n    notice that there is no warranty (or else, saying that you provide\n    a warranty) and that users may redistribute the program under\n    these conditions, and telling the user how to view a copy of this\n    License.  (Exception: if the Program itself is interactive but\n    does not normally print such an announcement, your work based on\n    the Program is not required to print an announcement.)\n\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Program,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Program, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote it.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Program.\n\nIn addition, mere aggregation of another work not based on the Program\nwith the Program (or with a work based on the Program) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may copy and distribute the Program (or a work based on it,\nunder Section 2) in object code or executable form under the terms of\nSections 1 and 2 above provided that you also do one of the following:\n\n    a) Accompany it with the complete corresponding machine-readable\n    source code, which must be distributed under the terms of Sections\n    1 and 2 above on a medium customarily used for software interchange; or,\n\n    b) Accompany it with a written offer, valid for at least three\n    years, to give any third party, for a charge no more than your\n    cost of physically performing source distribution, a complete\n    machine-readable copy of the corresponding source code, to be\n    distributed under the terms of Sections 1 and 2 above on a medium\n    customarily used for software interchange; or,\n\n    c) Accompany it with the information you received as to the offer\n    to distribute corresponding source code.  (This alternative is\n    allowed only for noncommercial distribution and only if you\n    received the program in object code or executable form with such\n    an offer, in accord with Subsection b above.)\n\nThe source code for a work means the preferred form of the work for\nmaking modifications to it.  For an executable work, complete source\ncode means all the source code for all modules it contains, plus any\nassociated interface definition files, plus the scripts used to\ncontrol compilation and installation of the executable.  However, as a\nspecial exception, the source code distributed need not include\nanything that is normally distributed (in either source or binary\nform) with the major components (compiler, kernel, and so on) of the\noperating system on which the executable runs, unless that component\nitself accompanies the executable.\n\nIf distribution of executable or object code is made by offering\naccess to copy from a designated place, then offering equivalent\naccess to copy the source code from the same place counts as\ndistribution of the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\n  4. You may not copy, modify, sublicense, or distribute the Program\nexcept as expressly provided under this License.  Any attempt\notherwise to copy, modify, sublicense or distribute the Program is\nvoid, and will automatically terminate your rights under this License.\nHowever, parties who have received copies, or rights, from you under\nthis License will not have their licenses terminated so long as such\nparties remain in full compliance.\n\n  5. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Program or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Program (or any work based on the\nProgram), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Program or works based on it.\n\n  6. Each time you redistribute the Program (or any work based on the\nProgram), the recipient automatically receives a license from the\noriginal licensor to copy, distribute or modify the Program subject to\nthese terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties to\nthis License.\n\n  7. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Program at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Program by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Program.\n\nIf any portion of this section is held invalid or unenforceable under\nany particular circumstance, the balance of the section is intended to\napply and the section as a whole is intended to apply in other\ncircumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system, which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\n  8. If the distribution and/or use of the Program is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Program under this License\nmay add an explicit geographical distribution limitation excluding\nthose countries, so that distribution is permitted only in or among\ncountries not thus excluded.  In such case, this License incorporates\nthe limitation as if written in the body of this License.\n\n  9. The Free Software Foundation may publish revised and/or new versions\nof the General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Program\nspecifies a version number of this License which applies to it and \"any\nlater version\", you have the option of following the terms and conditions\neither of that version or of any later version published by the Free\nSoftware Foundation.  If the Program does not specify a version number of\nthis License, you may choose any version ever published by the Free Software\nFoundation.\n\n  10. If you wish to incorporate parts of the Program into other free\nprograms whose distribution conditions are different, write to the author\nto ask for permission.  For software which is copyrighted by the Free\nSoftware Foundation, write to the Free Software Foundation; we sometimes\nmake exceptions for this.  Our decision will be guided by the two goals\nof preserving the free status of all derivatives of our free software and\nof promoting the sharing and reuse of software generally.\n\n                            NO WARRANTY\n\n  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\nFOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN\nOTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\nPROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\nOR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS\nTO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE\nPROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\nREPAIR OR CORRECTION.\n\n  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\nREDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\nINCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\nOUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\nTO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\nYOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\nPROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGES.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nconvey the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software; you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation; either version 2 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License along\n    with this program; if not, write to the Free Software Foundation, Inc.,\n    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\n\nAlso add information on how to contact you by electronic and paper mail.\n\nIf the program is interactive, make it output a short notice like this\nwhen it starts in an interactive mode:\n\n    Gnomovision version 69, Copyright (C) year name of author\n    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, the commands you use may\nbe called something other than `show w' and `show c'; they could even be\nmouse-clicks or menu items--whatever suits your program.\n\nYou should also get your employer (if you work as a programmer) or your\nschool, if any, to sign a \"copyright disclaimer\" for the program, if\nnecessary.  Here is a sample; alter the names:\n\n  Yoyodyne, Inc., hereby disclaims all copyright interest in the program\n  `Gnomovision' (which makes passes at compilers) written by James Hacker.\n\n  <signature of Ty Coon>, 1 April 1989\n  Ty Coon, President of Vice\n\nThis General Public License does not permit incorporating your program into\nproprietary programs.  If your program is a subroutine library, you may\nconsider it more useful to permit linking proprietary applications with the\nlibrary.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.\n"
  },
  {
    "path": "INSTALL.adoc",
    "content": "Installation instructions\n=========================\n:docext: adoc\n\nDownload a tarball from https://github.com/jonas/tig/releases[] or clone the Tig\nrepository https://github.com/jonas/tig[https://github.com/jonas/tig.git].\n\nThe latest version is:\nhttps://github.com/jonas/tig/releases/download/tig-2.6.0/tig-2.6.0.tar.gz[tig-2.6.0]\nhttps://github.com/jonas/tig/releases/download/tig-2.6.0/tig-2.6.0.tar.gz.sha256[(sha256)]\n\n*Note:* Do not use the tar.gz file for version 2.0 because it will fail\nto compile due to issue https://github.com/jonas/tig/pull/283[#283] and\nhttps://github.com/jonas/tig/issues/337[#337]\n\nThe quick and simple way to install Tig is:\n\n\t$ make\n\t$ make install\n\nBy default, `tig` is installed in `$HOME/bin`. To install `tig` elsewhere set\n`prefix` to the desired path:\n\n\t$ make prefix=/usr/local\n\t$ sudo make install prefix=/usr/local\n\nAdditional build options can be defined in the `config.make` file, which is\nloaded automatically when running `make` if it exists. By default,\n`contrib/config.make-$kernel_name` is loaded if it exists (currently\navailable for Linux, macOS [`Darwin`] and Cygwin but Linux users should\nprefer the `configure` script). See `contrib/config.make` for example build\noptions.\n\nDocumentation files, such as manpages, are distributed in the release tarballs,\nand can be installed using:\n\n\t$ make install-doc\n\nWhen installing directly from the Tig repository, `make install-doc` will assume\nthat the documentation tool chain is available and build the documentation\nlocally. In case you do not wish to install the required tools, documentation\ncan be installed from the 'release' branch using:\n\n\t$ make install-release-doc\n\nBefore upgrading, you are advised to read link:NEWS.{docext}[the release notes].\n\nInstallation using `configure`\n------------------------------\n\nIf you prefer an autotools-based installation process, you can use the\n`configure` script to detect dependencies and enable features. If you downloaded\nthe Tig sources from https://github.com/jonas/tig/releases/[a release tarball]\nthere's already a `configure` script. However, if you are building from the Tig\nrepository, you need to ensure that `autoconf` is installed on your system and\ngenerate the `configure` script yourself.\n\nTo install using `configure`, run the following commands:\n\n\t$ make configure # Only run if you are building from the Git repository\n\t$ ./configure\n\t$ make\n\t$ make install\n\nIf your `iconv` library is not in the default library and include path, you need\nto pass the `--with-libiconv` option to `configure` to tell it where to look.\n\nIf you have installed ncurses with brew, run configure with the following\nflags to have it properly detected (note this done out of the box if you\nbuild without `configure`):\n\n        $ ./configure LDFLAGS=-L/usr/local/opt/ncurses/lib CPPFLAGS=-I/usr/local/opt/ncurses/include\n\nInstallation using Homebrew\n---------------------------\n\nYou can use link:https://brew.sh[Homebrew] to install Tig on macOS and Linux:\n\n        $ brew install tig\n\nNote, for older installations of Tig, Homebrew does not automatically\nupdate the system-wide `tigrc` file when upgrading Tig and the\nlink:https://github.com/Homebrew/homebrew-core/commit/5600463d68620d68c9745acc490af7f8a16a75cb[behavior]\nwas changed in 2015 to install the system-wide `tigrc` in the\n`/usr/local/share/tig/examples` directory so Tig always uses the\ndefaults compiled into the binary.\n\nIf you see warnings when starting Tig after upgrading, e.g.:\n\n\ttig warning: Errors while loading /usr/local/etc/tigrc\n\nIt means you either need to manually update `/usr/local/etc/tigrc` with\nchanges from `/usr/local/share/tig/examples` rename the file if you\nnever made any changes to it.\n\n\t$ mv /usr/local/etc/tigrc{,.old}\n\n\nInstallation using Nix\n----------------------\n\nYou can use link:https://nixos.org/nix/[Nix] to install Tig on NixOS, or any Linux/macOS distribution with Nix installed:\n\n        $ nix-env -i tig\n\t\nInstallation on Linux\n---------------------\n\nDepending on your distribution, you may be able to use one of the following commands to install Tig on Linux:\n\n        $ apt-get install tig (Debian, Ubuntu)\n        $ dnf install tig (Fedora)\n        $ pacman -S tig (Arch Linux)\n        $ apk add tig (Alpine)\n\nInstallation on FreeBSD\n-----------------------\n\nYou can use link:https://man.freebsd.org/pkg/8[pkg] to install Tig on FreeBSD:\n\n        $ pkg install tig\n\nInstallation on Windows\n-----------------------\n\nEasiest way is to install link:https://gitforwindows.org/[Git-for-Windows]. As \nof version `2.14.2`, it comes bundled with `tig`.\n\nAlternatively, you can also use it by installing link:https://www.cygwin.com/[cygwin].\nYou must then install the packages `git`, `gcc-core`, `make`, `libiconv-devel`\nand `libncurses-devel`. Extract the tarball and install by using `configure`\nas explained above.\n\nIf you want to install from the sources, then you will also need the `automake`\npackage (which will also install `autoconf`). Then run `make configure` and install\nby using `configure` as explained above.\n\nBuild configuration\n-------------------\n\nBuild settings are read from the file `config.make` and for certain systems also\nfrom `contrib/config.make-$kernel`. An example of the latter is macOS, where\n`contrib/config.make-Darwin` provides out-of-the-box configuration for using the\nsystem ncurses library and linking with the iconv library. This makes it easy to\nconfigure the build without having to use the `configure` script. As a side\nnote, `configure` itself generates a `config.make` file.\n\nApart from the different standard `make` build variables (`CC`, `CFLAGS`, etc.)\nand standard `configure` variables (`prefix`, `bindir`, etc.), build settings\ncan be one of the following flags:\n\n - `NO_SETENV`: Define this variable to enable work-around for missing\n   `setenv()`.\n - `NO_MKSTEMPS`: Define this variable to enable work-around for missing\n   `mkstemps()`.\n - `NO_WORDEXP`: Define this variable to enable work-around for missing\n   `wordexp()`.\n - `NO_BUILTIN_TIGRC`: Reduce the size of the binary by not including a\n   built-in tigrc. The built-in tigrc is used as a fallback when no\n   `tigrc` is found in the system configuration directory (e.g. `/etc`).\n - `TIG_USER_CONFIG`: Allow to customize the `tigrc` path (default `~/.tigrc`).\n\nThe following example `config.make` manually configures Tig to use the ncurses\nlibrary with wide character support and include the proper ncurses header file\n(see tig.h for more information):\n\n\tLDLIBS = -lncursesw\n\tCPPFLAGS = -DHAVE_NCURSESW_CURSES_H\n\nFor more examples of build settings, see `contrib/config.make` and\n`config.make.in`.\n\nTools and packages\n------------------\n\nThe following tools and packages are needed:\n\n[cols=\"2<,8<\",options=\"header\"]\n|=============================================================================\n|Tool\t\t\t\t|Description\n|git-core\t\t\t|Tig is just a frontend for Git.\n|ncurses or ncursesw\t\t|Be sure to have the development files\n\t\t\t\t installed. Usually they are available in a\n\t\t\t\t separate package ending with `-dev`.\n\n\t\t\t\t Ncurses with wide character support (ncursesw)\n\t\t\t\t is required to properly handle UTF-8 encoded\n\t\t\t\t strings.\n\n\t\t\t\t Note for packagers: For Tig's `configure`\n\t\t\t\t script to work as expected you should avoid\n\t\t\t\t configuring and building ncurses using\n\t\t\t\t `--with-shared`.\n|iconv\t\t\t\t|If iconv is not provided by the c library\n\t\t\t\t you need to change the Makefile to link it\n\t\t\t\t into the binary.\n|=============================================================================\n\nThe following tools and packages are optional and mainly needed for creating the\nconfigure script and building documentation:\n\n[cols=\"2<,8<\",options=\"header\"]\n|=============================================================================\n|Tool\t\t\t\t|Description\n|readline\t\t\t|Adds support for completion and history in\n\t\t\t\t search and command prompts.\n|PCRE\t\t\t\t|Adds support for Perl Compatible Regular\n\t\t\t\t Expressions in searches.\n|autoconf\t\t\t|Contains autoreconf for generating configure\n\t\t\t\t from configure.ac.\n|asciidoc (>= 8.4)\t\t|Generates HTML and (DocBook) XML from text.\n|xmlto\t\t\t\t|Generates manpages and chunked HTML from XML.\n|DocBook XSL (>= 1.72.0)\t|Used by xmlto for building manpages.\n|DocBook (DSSL/Jade) tools\t|Generates PDF from XML.\n\t\t\t\t Also known as docbook-utils.\n|=============================================================================\n"
  },
  {
    "path": "Makefile",
    "content": "## Makefile for tig\n\n# The last tagged version. Can be overridden either by the version from\n# git or from the value of the DIST_VERSION environment variable.\nVERSION\t= 2.6.0\n\nall:\n\n# Include kernel specific configuration\nkernel_name := $(shell sh -c 'uname -s 2>/dev/null || echo unknown')\n-include contrib/config.make-$(kernel_name)\n\n# Include setting from the configure script\n-include config.make\n\n# Optional defaults.\n# TIG_ variables are set by contrib/config.make-$(kernel_name).\nTIG_NCURSES ?= -lcurses\nLDFLAGS ?= $(TIG_LDFLAGS)\nCPPFLAGS ?= $(TIG_CPPFLAGS)\nLDLIBS ?= $(TIG_NCURSES) $(TIG_LDLIBS)\nCFLAGS ?= -Wall -O2 $(TIG_CFLAGS)\n\nprefix ?= $(HOME)\nbindir ?= $(prefix)/bin\ndatarootdir ?= $(prefix)/share\nsysconfdir ?= $(prefix)/etc\ndocdir ?= $(datarootdir)/doc\nmandir ?= $(datarootdir)/man\n# DESTDIR=\n\nifneq (,$(wildcard .git))\nGITDESC\t= $(subst tig-,,$(shell git describe 2>/dev/null))\nCOMMIT := $(if $(GITDESC),$(GITDESC),$(VERSION)-g$(shell git describe --always))\nWTDIRTY\t= $(if $(shell git diff-index HEAD 2>/dev/null),-dirty)\nVERSION\t= $(COMMIT)$(WTDIRTY)\nendif\nifdef DIST_VERSION\nVERSION = $(DIST_VERSION)\nendif\n\n# Split the version \"TAG-OFFSET-gSHA1-DIRTY\" into \"TAG OFFSET\"\n# and append 0 as a fallback offset for \"exact\" tagged versions.\nRPM_VERLIST = $(filter-out g% dirty,$(subst -, ,$(VERSION))) 0\nRPM_VERSION = $(word 1,$(RPM_VERLIST))\nRPM_RELEASE = $(word 2,$(RPM_VERLIST))$(if $(WTDIRTY),.dirty)\n\nDFLAGS\t= -g -DDEBUG -Werror -O0\nEXE\t= src/tig\nTOOLS\t= test/tools/test-graph tools/doc-gen\nTXTDOC\t= doc/tig.1.adoc doc/tigrc.5.adoc doc/manual.adoc NEWS.adoc README.adoc INSTALL.adoc test/API.adoc\nMANDOC\t= doc/tig.1 doc/tigrc.5 doc/tigmanual.7\nHTMLDOC = doc/tig.1.html doc/tigrc.5.html doc/manual.html README.html INSTALL.html NEWS.html\nALLDOC\t= $(MANDOC) $(HTMLDOC) doc/manual.html-chunked doc/manual.pdf\n\n# Never include the release number in the tarname for tagged\n# versions.\nifneq ($(if $(DIST_VERSION),$(words $(RPM_VERLIST))),2)\nTARNAME\t= tig-$(RPM_VERSION)-$(RPM_RELEASE)\nelse\nTARNAME\t= tig-$(RPM_VERSION)\nendif\n\noverride CPPFLAGS += '-DTIG_VERSION=\"$(VERSION)\"'\noverride CPPFLAGS += '-DSYSCONFDIR=\"$(sysconfdir)\"'\nifdef TIG_USER_CONFIG\noverride CPPFLAGS += '-DTIG_USER_CONFIG=\"$(TIG_USER_CONFIG)\"'\nendif\n\nASCIIDOC ?= asciidoc\nASCIIDOC_FLAGS = -aversion=$(VERSION) -asysconfdir=$(sysconfdir) \\\n\t\t-arevdate=$(shell git show -s --format=%cs) -f doc/asciidoc.conf\nXMLTO ?= xmlto\nDOCBOOK2PDF ?= docbook2pdf\n\nLCOV ?= lcov\nGENHTML ?= genhtml\nifneq (,$(shell which gsed 2>/dev/null))\nSED ?= gsed\nelse\nSED ?= sed\nendif\nifneq (,$(shell which gtar 2>/dev/null))\nTAR ?= gtar\nelse\nTAR ?= tar\nendif\n\nGENERATE_COMPILATION_DATABASE ?= no\nifeq ($(GENERATE_COMPILATION_DATABASE),yes)\ncompdb_check = $(shell $(CC) $(ALL_CFLAGS) \\\n\t-c -MJ /dev/null \\\n\t-x c /dev/null -o /dev/null 2>&1; \\\n\techo $$?)\nifneq ($(compdb_check),0)\noverride GENERATE_COMPILATION_DATABASE = no\n$(warning GENERATE_COMPILATION_DATABASE is set to \"yes\", but your compiler does not \\\nsupport generating compilation database entries)\nendif\nelse\nifneq ($(GENERATE_COMPILATION_DATABASE),no)\n$(error please set GENERATE_COMPILATION_DATABASE to \"yes\" or \"no\" \\\n(not \"$(GENERATE_COMPILATION_DATABASE)\"))\nendif\nendif\n\ncompdb_dir = compile_commands\nifeq ($(GENERATE_COMPILATION_DATABASE),yes)\nmissing_compdb_dir = $(compdb_dir)\n$(missing_compdb_dir):\n\t@mkdir -p $@\n\ncompdb_file = $(compdb_dir)/$(subst /,-,$@.json)\ncompdb_args = -MJ $(compdb_file)\nelse\nmissing_compdb_dir = \ncompdb_args =\nendif\n\nall: $(EXE) $(TOOLS)\nall-debug: all\nall-debug: CFLAGS += $(DFLAGS)\ndoc: $(ALLDOC)\ndoc-man: $(MANDOC)\ndoc-html: $(HTMLDOC)\n\nifeq ($(GENERATE_COMPILATION_DATABASE),yes)\nall: compile_commands.json\ncompile_commands.json:\n\t$(QUIET_GEN)sed -e '1s/^/[/' -e '$$s/,$$/]/' $(compdb_dir)/*.o.json > $@+\n\t@if test -s $@+; then mv $@+ $@; else $(RM) $@+; fi\nendif\n\nexport sysconfdir\n\ninstall: all\n\t$(QUIET_INSTALL)tools/install.sh bin $(EXE) \"$(DESTDIR)$(bindir)\"\n\t$(QUIET_INSTALL)tools/install.sh data tigrc \"$(DESTDIR)$(sysconfdir)\"\n\ninstall-doc-man: doc-man\n\t$(Q)$(foreach doc, $(filter %.1, $(MANDOC)), \\\n\t\t$(QUIET_INSTALL_EACH)tools/install.sh data $(doc) \"$(DESTDIR)$(mandir)/man1\";)\n\t$(Q)$(foreach doc, $(filter %.5, $(MANDOC)), \\\n\t\t$(QUIET_INSTALL_EACH)tools/install.sh data $(doc) \"$(DESTDIR)$(mandir)/man5\";)\n\t$(Q)$(foreach doc, $(filter %.7, $(MANDOC)), \\\n\t\t$(QUIET_INSTALL_EACH)tools/install.sh data $(doc) \"$(DESTDIR)$(mandir)/man7\";)\n\ninstall-release-doc-man:\n\tGIT_INDEX_FILE=.tmp-doc-index git read-tree origin/release\n\tGIT_INDEX_FILE=.tmp-doc-index git checkout-index -f --prefix=./ $(MANDOC)\n\trm -f .tmp-doc-index\n\t$(MAKE) install-doc-man\n\ninstall-doc-html: doc-html\n\t$(Q)$(foreach doc, $(HTMLDOC), \\\n\t\t$(QUIET_INSTALL_EACH)tools/install.sh data $(doc) \"$(DESTDIR)$(docdir)/tig\";)\n\ninstall-release-doc-html:\n\tGIT_INDEX_FILE=.tmp-doc-index git read-tree origin/release\n\tGIT_INDEX_FILE=.tmp-doc-index git checkout-index -f --prefix=./ $(HTMLDOC)\n\trm -f .tmp-doc-index\n\t$(MAKE) install-doc-html\n\ninstall-doc: install-doc-man install-doc-html\ninstall-release-doc: install-release-doc-man install-release-doc-html\n\nuninstall:\n\t$(QUIET_UNINSTALL)tools/uninstall.sh \"$(DESTDIR)$(bindir)/$(EXE:src/%=%)\"\n\t$(QUIET_UNINSTALL)tools/uninstall.sh \"$(DESTDIR)$(sysconfdir)/tigrc\"\n\t$(Q)$(foreach doc, $(filter %.1, $(MANDOC:doc/%=%)), \\\n\t\t$(QUIET_UNINSTALL_EACH)tools/uninstall.sh \"$(DESTDIR)$(mandir)/man1/$(doc)\";)\n\t$(Q)$(foreach doc, $(filter %.5, $(MANDOC:doc/%=%)), \\\n\t\t$(QUIET_UNINSTALL_EACH)tools/uninstall.sh \"$(DESTDIR)$(mandir)/man5/$(doc)\";)\n\t$(Q)$(foreach doc, $(filter %.7, $(MANDOC:doc/%=%)), \\\n\t\t$(QUIET_UNINSTALL_EACH)tools/uninstall.sh \"$(DESTDIR)$(mandir)/man7/$(doc)\";)\n\t$(Q)$(foreach doc, $(HTMLDOC:doc/%=%), \\\n\t\t$(QUIET_UNINSTALL_EACH)tools/uninstall.sh \"$(DESTDIR)$(docdir)/tig/$(doc)\";)\n\nclean: clean-test clean-coverage\n\t$(Q)$(RM) -r $(TARNAME) tig-*.tar.gz tig-*.tar.gz.sha256 .deps _book node_modules\n\t$(Q)$(RM) -r $(compdb_dir) compile_commands.json\n\t$(Q)$(RM) $(EXE) $(TOOLS) $(OBJS) core doc/*.xml src/builtin-config.c\n\t$(Q)$(RM) $(OBJS:%.o=%.gcda) $(OBJS:%.o=%.gcno)\n\ndistclean: clean\n\t$(RM) -r doc/manual.html-chunked autom4te.cache\n\t$(RM) doc/*.toc configure~\n\t$(RM) config.h config.log config.make config.status config.h.in~\n\nveryclean: distclean\n\t$(RM) tig.spec $(ALLDOC) aclocal.m4 configure config.h.in\n\nspell-check:\n\tfor file in $(TXTDOC) src/tig.c; do \\\n\t\taspell --lang=en --dont-backup \\\n\t\t       --personal=./tools/aspell.dict check $$file; \\\n\tdone\n\nstrip: $(EXE)\n\tstrip $(EXE)\n\nupdate-headers:\n\t@for file in include/tig/*.h src/*.c tools/*.c test/tools/*.c; do \\\n\t\tgrep -q '/* Copyright' \"$$file\" && \\\n\t\t\t$(SED) '0,/.*\\*\\//d' < \"$$file\" | \\\n\t\t\tgrep -v '/* vim: set' > \"$$file.tmp\"; \\\n\t\t{ cat tools/header.h \"$$file.tmp\"; \\\n\t\t  echo \"/* vim: set ts=8 sw=8 noexpandtab: */\"; } > \"$$file\"; \\\n\t\trm \"$$file.tmp\"; \\\n\t\techo \"Updated $$file\"; \\\n\tdone\n\nupdate-docs: tools/doc-gen\n\tdoc=\"doc/tigrc.5.adoc\"; \\\n\t$(SED) -n '0,/ifndef::DOC_GEN_ACTIONS/p' < \"$$doc\" > \"$$doc.gen\"; \\\n\t./tools/doc-gen actions >> \"$$doc.gen\"; \\\n\t$(SED) -n '/endif::DOC_GEN_ACTIONS/,$$p' < \"$$doc\" >> \"$$doc.gen\" ; \\\n\tmv \"$$doc.gen\" \"$$doc\"\n\ndist: configure config.h.in aclocal.m4 tig.spec\n\t$(Q)mkdir -p $(TARNAME) && \\\n\tcp Makefile tig.spec configure config.h.in aclocal.m4 $(TARNAME) && \\\n\t$(SED) -i \"s/VERSION\\s\\+=\\s\\+[0-9]\\+\\([.][0-9]\\+\\)\\+/VERSION\t= $(VERSION)/\" $(TARNAME)/Makefile\n\tgit archive --format=tar --prefix=$(TARNAME)/ HEAD | \\\n\t$(TAR) --delete $(TARNAME)/Makefile > $(TARNAME).tar && \\\n\tfind $(TARNAME) -type f -print0 | LC_ALL=C sort -z | $(TAR) --mtime=$(shell git show -s --format=@%ct) --mode=o=rX,ug+rw,a-s --owner=root --group=root --null -T - -rf $(TARNAME).tar && \\\n\tgzip -f -n -9 $(TARNAME).tar && \\\n\tsha256sum $(TARNAME).tar.gz > $(TARNAME).tar.gz.sha256\n\t$(Q)$(RM) -r $(TARNAME)\n\nrpm: dist\n\trpmbuild -ta $(TARNAME).tar.gz\n\nCOVERAGE_CFLAGS ?= -fprofile-arcs -ftest-coverage\nall-coverage: all\nall-coverage: CFLAGS += $(COVERAGE_CFLAGS)\n\nCOVERAGE_DIR \t?= test/coverage\n\nclean-coverage:\n\t@$(RM) -rf $(COVERAGE_DIR)\n\nreset-coverage: clean-coverage\n\t$(LCOV) --reset-counters\n\ntest-coverage: clean-coverage all-coverage test $(COVERAGE_DIR)/index.html\n\n$(COVERAGE_DIR)/trace:\n\t@mkdir -p $(COVERAGE_DIR)\n\t$(QUIET_LCOV)$(LCOV) $(Q:@=--quiet) --capture --no-external --directory . --output-file $@\n\n$(COVERAGE_DIR)/index.html: $(COVERAGE_DIR)/trace\n\t$(QUIET_GENHTML)$(GENHTML) $(Q:@=--quiet) --output-directory $(COVERAGE_DIR) $<\n\nADDRESS_SANITIZER_CFLAGS ?= -fsanitize=address -fno-omit-frame-pointer\nall-address-sanitizer: all\nall-address-sanitizer: CFLAGS += $(ADDRESS_SANITIZER_CFLAGS)\n\ntest-address-sanitizer: clean all-address-sanitizer test\ntest-address-sanitizer: export TIG_ADDRESS_SANITIZER_ENABLED=yes\n\nTESTS  = $(sort $(shell find test -type f -name '*-test'))\nTESTS_TODO = $(sort $(shell find test -type f -name '*-test' -exec grep -l '\\(test_todo\\|-todo=\\)' {} \\+))\n\nclean-test:\n\t$(Q)$(RM) -r test/tmp\n\ntest: clean-test $(TESTS)\n\t$(QUIET_SUMMARY)test/tools/show-results.sh\n\nifneq (,$(strip $(V:@=)))\nexport MAKE_TEST_OPTS = no-indent\nelse\nexport MAKE_TEST_OPTS =\nendif\n\n$(TESTS): PATH := $(CURDIR)/test/tools:$(CURDIR)/src:$(PATH)\n$(TESTS): $(EXE) test/tools/test-graph\n\t$(QUIET_TEST)$(TEST_SHELL) $@\n\ntest-todo: MAKE_TEST_OPTS += todo\ntest-todo: $(TESTS_TODO)\n\n# Other autoconf-related rules are hidden in config.make.in so that\n# they don't confuse Make when we aren't actually using ./configure\nconfigure config.h.in aclocal.m4: configure.ac tools/*.m4\n\t$(QUIET_GEN)./autogen.sh\n\nsite:\n\tgitbook install\n\tgitbook build\n\tfind _book -type f | grep -E -v '(gitbook|json|html)' | xargs rm\n\n.PHONY: all all-coverage all-debug clean clean-coverage clean-test doc \\\n\tdoc-man doc-html dist distclean install install-doc \\\n\tinstall-doc-man install-doc-html install-release-doc-html \\\n\tinstall-release-doc-man rpm spell-check strip test \\\n\ttest-coverage update-docs update-headers veryclean $(TESTS)\n\nifdef NO_MKSTEMPS\nCOMPAT_CPPFLAGS += -DNO_MKSTEMPS\nCOMPAT_OBJS += compat/mkstemps.o\nendif\n\nifdef NO_SETENV\nCOMPAT_CPPFLAGS += -DNO_SETENV\nCOMPAT_OBJS += compat/setenv.o\nendif\n\nifdef NO_STRNDUP\nCOMPAT_CPPFLAGS += -DNO_STRNDUP\nCOMPAT_OBJS += compat/strndup.o\nendif\n\nifdef NO_WORDEXP\nCOMPAT_CPPFLAGS += -DNO_WORDEXP\nCOMPAT_OBJS += compat/wordexp.o\nendif\n\nCOMPAT_OBJS += compat/hashtab.o compat/utf8proc.o\n\noverride CPPFLAGS += $(COMPAT_CPPFLAGS)\n\nGRAPH_OBJS = src/graph.o src/graph-v1.o src/graph-v2.o\n\nTIG_OBJS = \\\n\tsrc/tig.o \\\n\tsrc/types.o \\\n\tsrc/string.o \\\n\tsrc/util.o \\\n\tsrc/map.o \\\n\tsrc/argv.o \\\n\tsrc/io.o \\\n\tsrc/refdb.o \\\n\tsrc/builtin-config.o \\\n\tsrc/request.o \\\n\tsrc/line.o \\\n\tsrc/keys.o \\\n\tsrc/repo.o \\\n\tsrc/options.o \\\n\tsrc/draw.o \\\n\tsrc/prompt.o \\\n\tsrc/display.o \\\n\tsrc/view.o \\\n\tsrc/search.o \\\n\tsrc/parse.o \\\n\tsrc/watch.o \\\n\tsrc/pager.o \\\n\tsrc/log.o \\\n\tsrc/reflog.o \\\n\tsrc/diff.o \\\n\tsrc/help.o \\\n\tsrc/tree.o \\\n\tsrc/blob.o \\\n\tsrc/blame.o \\\n\tsrc/refs.o \\\n\tsrc/status.o \\\n\tsrc/stage.o \\\n\tsrc/main.o \\\n\tsrc/stash.o \\\n\tsrc/grep.o \\\n\tsrc/ui.o \\\n\tsrc/apps.o \\\n\t$(GRAPH_OBJS) \\\n\t$(COMPAT_OBJS)\n\nsrc/tig: $(TIG_OBJS)\n\nTEST_GRAPH_OBJS = test/tools/test-graph.o src/string.o src/util.o src/io.o $(GRAPH_OBJS) $(COMPAT_OBJS)\ntest/tools/test-graph: $(TEST_GRAPH_OBJS)\n\nDOC_GEN_OBJS = tools/doc-gen.o src/string.o src/types.o src/util.o src/request.o $(COMPAT_OBJS)\ntools/doc-gen: $(DOC_GEN_OBJS)\n\nOBJS = $(sort $(TIG_OBJS) $(TEST_GRAPH_OBJS) $(DOC_GEN_OBJS))\n\nDEPS_CFLAGS ?= -MMD -MP -MF .deps/$*.d\n\n%: %.o\n\t$(QUIET_LINK)$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $^ $(LDLIBS) -o $@\n\n%.o: %.c $(CONFIG_H) $(missing_compdb_dir)\n\t@mkdir -p .deps/$(*D)\n\t$(QUIET_CC)$(CC) -I. -Iinclude $(compdb_args) $(CFLAGS) $(DEPS_CFLAGS) $(CPPFLAGS) -c -o $@ $<\n\n-include $(OBJS:%.o=.deps/%.d)\n\nsrc/builtin-config.c: tigrc tools/make-builtin-config.sh\n\t$(QUIET_GEN)tools/make-builtin-config.sh $< > $@\n\ntig.spec: contrib/tig.spec.in\n\t$(QUIET_GEN)$(SED) -e 's/@@VERSION@@/$(RPM_VERSION)/g' \\\n\t    -e 's/@@RELEASE@@/$(RPM_RELEASE)/g' < $< > $@\n\ndoc/manual.html: doc/manual.toc\ndoc/manual.html: ASCIIDOC_FLAGS += -ainclude-manual-toc\n%.toc: %.adoc\n\t$(QUIET_GEN)$(SED) -n '/^\\[\\[/,/\\(---\\|~~~\\)/p' < $< | while read line; do \\\n\t\tcase \"$$line\" in \\\n\t\t\"----\"*)  echo \". <<$$ref>>\"; ref= ;; \\\n\t\t\"~~~~\"*)  echo \"- <<$$ref>>\"; ref= ;; \\\n\t\t\"[[\"*\"]]\") ref=\"$$line\" ;; \\\n\t\t*)\t   ref=\"$$ref, $$line\" ;; \\\n\t\tesac; done | $(SED) 's/\\[\\[\\(.*\\)\\]\\]/\\1/' > $@\n\nREADME.html: README.adoc doc/asciidoc.conf\n\t$(QUIET_ASCIIDOC)$(ASCIIDOC) $(ASCIIDOC_FLAGS) -b xhtml11 -d article -a readme $<\n\nINSTALL.html: INSTALL.adoc doc/asciidoc.conf\n\t$(QUIET_ASCIIDOC)$(ASCIIDOC) $(ASCIIDOC_FLAGS) -b xhtml11 -d article $<\n\nNEWS.html: NEWS.adoc doc/asciidoc.conf\n\t$(QUIET_ASCIIDOC)$(ASCIIDOC) $(ASCIIDOC_FLAGS) -b xhtml11 -d article $<\n\ndoc/tigmanual.7: doc/manual.adoc\n\ntest/API.adoc: test/tools/libtest.sh\n\t@printf '%s\\n%s\\n' 'Testing API' '-----------' > $@\n\t$(QUIET_ASCIIDOC)egrep '^#\\|' test/tools/libtest.sh | $(SED) 's/^#| \\{0,1\\}//' | cat -s >> $@\n\n%.1.html : %.1.adoc doc/asciidoc.conf\n\t$(QUIET_ASCIIDOC)$(ASCIIDOC) $(ASCIIDOC_FLAGS) -b xhtml11 -d manpage $<\n\n%.1.xml : %.1.adoc doc/asciidoc.conf\n\t$(QUIET_ASCIIDOC)$(ASCIIDOC) $(ASCIIDOC_FLAGS) -b docbook -d manpage $<\n\n%.5.html : %.5.adoc doc/asciidoc.conf\n\t$(QUIET_ASCIIDOC)$(ASCIIDOC) $(ASCIIDOC_FLAGS) -b xhtml11 -d manpage $<\n\n%.5.xml : %.5.adoc doc/asciidoc.conf\n\t$(QUIET_ASCIIDOC)$(ASCIIDOC) $(ASCIIDOC_FLAGS) -b docbook -d manpage $<\n\n%.7.xml : %.7.adoc doc/asciidoc.conf\n\t$(QUIET_ASCIIDOC)$(ASCIIDOC) $(ASCIIDOC_FLAGS) -b docbook -d manpage $<\n\n%.html: ASCIIDOC_FLAGS += -adocext=html -afooter-style=revdate\n%.html : %.adoc doc/asciidoc.conf\n\t$(QUIET_ASCIIDOC)$(ASCIIDOC) $(ASCIIDOC_FLAGS) -b xhtml11 -d article -n $<\n\n%.xml : %.adoc doc/asciidoc.conf\n\t$(QUIET_ASCIIDOC)$(ASCIIDOC) $(ASCIIDOC_FLAGS) -b docbook -d article $<\n\n% : %.xml\n\t$(QUIET_XMLTO)$(XMLTO) man -o doc $<\n\n%.html-chunked : %.xml\n\t$(QUIET_XMLTO)$(XMLTO) html -o $@ $<\n\n%.pdf : %.xml\n\t$(QUIET_DB2PDF)$(DOCBOOK2PDF) -o doc $<\n\n#############################################################################\n# Quiet make\n#############################################################################\n\nifneq ($(findstring $(MAKEFLAGS),s),s)\nV\t\t\t= @\nQ\t\t\t= $(V:1=)\nQUIET_CC\t\t= $(Q:@=@echo    '        CC  '$@;)\nQUIET_LINK\t\t= $(Q:@=@echo    '      LINK  '$@;)\nQUIET_GEN\t\t= $(Q:@=@echo    '       GEN  '$@;)\nQUIET_ASCIIDOC\t\t= $(Q:@=@echo    '  ASCIIDOC  '$@;)\nQUIET_XMLTO\t\t= $(Q:@=@echo    '     XMLTO  '$@;)\nQUIET_DB2PDF\t\t= $(Q:@=@echo    '    DB2PDF  '$@;)\n# tools/install.sh will print 'file -> $install_dir/file'\nQUIET_INSTALL\t\t= $(Q:@=@printf  '   INSTALL  ';)\nQUIET_INSTALL_EACH\t= $(Q:@=printf   '   INSTALL  ';)\nQUIET_UNINSTALL\t\t= $(Q:@=@printf  ' UNINSTALL  ';)\nQUIET_UNINSTALL_EACH\t= $(Q:@=printf   ' UNINSTALL  ';)\nQUIET_TEST\t\t= $(Q:@=@echo    '      TEST  '$@;)\nQUIET_SUMMARY\t\t= $(Q:@=@printf  '   SUMMARY  ';)\nQUIET_LCOV\t\t= $(Q:@=@echo    '      LCOV  '$@;)\nQUIET_GENHTML\t\t= $(Q:@=@echo    '   GENHTML  '$@;)\n\nexport V\nendif\n"
  },
  {
    "path": "NEWS.adoc",
    "content": "Release notes\n=============\n\ntig-2.6.0\n---------\n\nBug fixes:\n\n - Initialise %(head) from command line arguments. (#1366)\n - Make `$GIT_EDITOR` value interpreted by the shell. (#1367)\n - Use correct line from recursively blamed commit. (#1369, #1370)\n - Use correct line when using `:parent` in blame view. (#1372)\n - Fix the incorrect line shift after stage file. (#1371)\n - Update display after setting column option. (#1384)\n - Fix file mode diff header handling.\n - Fix crash caused by too many diff cells. (#1389)\n - Fix issue with blame when using absolute file paths. (#1391)\n\nImprovements:\n\n - Add color for cursor in backgrounded view. (#1374)\n - Blame view now works without a working tree.\n - Open diff view from blame at the correct line. (#1375)\n - Document how to get a `<` within TIG_SCRIPT. (#1357)\n - Allow to hide +/- signs in the diff view. (#855, #901)\n - Add toggle options to help. (#1381)\n - Add expand/collapse all options to help. (#1382)\n - Expand relevant sections only when opening the help view. (#782, #886)\n - Introduce committer column.\n - Open the blame and blob views from diffstat.\n - Update utf8proc to v2.11.0, supporting Unicode 17.\n\nNote: Users should update the settings for the blame, main, reflog, and\nrefs views in their ~/.tigrc file to include the committer column.\n\ntig-2.5.12\n----------\n\nBug fixes:\n\n - Fix empty blame view when opened from the diff view on i586. (#1362)\n\ntig-2.5.11\n----------\n\nIncompatibilities:\n\n - Update remote repo variables. (#1358)\n\nBug fixes:\n\n - Fix various issues with `diff.noprefix` and `--no-prefix`.\n - Fix `Ctrl-C` behavior within the Readline prompt. (#1342)\n - Fix message upon edit from diffstat without patch.\n - Fix missing dates in the refs view.\n - Don't report an error when diff-highlight is killed intentionally.\n - Fix parsing of reflog designator in timestamp format.\n\nImprovements:\n\n - Open the blob corresponding to the diff line. (#1334)\n - Keep cursor position in the main view when toggling\n   file-filter and rev-filter.\n - Make errors visible in views showing Git output. (#1346)\n - Allow different colors for all references types.\n - Enable search in sections titles. (#1043)\n - Show committer date by default in the date column. (#294)\n - Update utf8proc to v2.10.0, supporting Unicode 16.\n - Only show stash, notes and prefetch in the refs view when\n   invoked with `tig refs --all`. (#1359)\n\ntig-2.5.10\n----------\n\nBug fixes:\n\n - Fix `stat-*` coloring file names in `tig status` instead of just\n   markers (regression in 2.5.9). (#1326)\n - Fix keybinding with +[cmd] not triggering view refreshing. (#1324)\n - Fix reopening the blame view from the main view.\n - Fix editing when stdin is redirected. (#1330)\n - Fix compilation warnings with ncurses 6.5.\n - Make `Ctrl-C` to kill only the command running in the foreground. (#1331)\n\ntig-2.5.9\n---------\n\nImprovements:\n\n - Update utf8proc to v2.9.0, supporting Unicode 15.1.\n - Also use lightweight tags in the Refs line of the diff view. (#1235)\n - Support %(text) in all views with a text column. (#1275)\n - Use HTTPS for GitHub clone URLs. (#1310)\n - Move default log view options to tigrc.\n - Allow to go to stage view without Enter. (#1284)\n - Add new \"prefetch\" reference type for refs created by `git maintenance`\n   (hidden in default config). (#1318)\n - Show the selected commit in the blame view title window.\n - Improve the blob view experience.\n - Clear keybinding from all keymaps (unbind) with `bind generic <key> none`.\n\nBug fixes:\n\n - Fix \"dangling pointer\" warning. (#1268)\n - Don't use array size in function arguments. (#1269)\n - Fix rpmbuild -ta. (#1276)\n - Initialise struct timezone. (#1291)\n - Fix NULL dereference at startup. (#1293)\n - Enforce a blank before view scroll percentage.\n - Fix refresh-mode periodic not updating branch labels. (#1270)\n - Fix display non-ascii character. (#1299)\n - Fix readline echo when stdin is redirected. (#1229)\n - Fix tig blame --reverse. (#1300)\n - Fix status view lockup.\n - Fix untracked changes and chunk staging behaviour in plain stage view.\n - Reset state variables when selecting a commit with no reference.\n - Fix parsing of `git ls-tree` for submodules. (#1282)\n\ntig-2.5.8\n---------\n\nImprovements:\n\n - Update utf8proc to v2.8.0, supporting Unicode 15.\n - Support editing from the pager and the log (-p) views. (#1243)\n - Adjust build for native Apple Silicon.\n - Autoscroll the pager view while loading. (#1223)\n - Automatically show next diff in the status view. (#413, #469)\n - Replace `Unknown` author with `Not Committed Yet`.\n - Allow use of regular expressions for coloring. (#1249)\n - Add support for option word-diff-regex. (#1252)\n - Include original blob name in temporary filename. (#1254)\n\nBug fixes:\n\n - Use %(file_old) for old filename in the blame view. (#1226)\n - Correctly report which version of libncurses was linked. (#1240, #1241)\n - Fix stage view closing when holding the ] key. (#1245)\n - Make tests work from a path with symlinks.\n - Fix encoding of very long lines. (#1227)\n - Fix diffstat color for tig log -p.\n - Clean IO before closing a view or quitting.\n\ntig-2.5.7\n---------\n\nBug fixes:\n\n - Fix running tests as root. (#1224)\n - Fix parsing of status.showUntrackedFiles. (#1219)\n - Avoid incorrect history path when $XDG_DATA_HOME is valid. (#1215, #1217)\n\ntig-2.5.6\n---------\n\nBug fixes:\n\n - Fix `:goto <tag>`. (#1178)\n - Fix typo in ui.c.\n - Revert terminal hacks and workarounds. (#748, #943, #1180, #1182)\n - Fix opening of an ambiguous ref in refs view.\n - Fix search when view is loading.\n - Use the full width for diffstat in the stage view.\n - Improve escaping of variables in external commands.\n - Fix cursor behaviour during staging. (#842, #1028)\n - Fix navigation in split tree view.\n - Enable textconv in the stage view.\n - Enable textconv in the blame view and fix blame -L. (#978, #1189)\n - Update lineno for untracked files. (#1192)\n - Fix alignment of transliterated text. (#1195)\n - Fix word diff in the stage, stash and blame views. (#1207)\n - Fix reading the value of status.showUntrackedFiles. (#1211)\n - Honor commit_title:no in view settings.\n - Fix segfault with PCRE.\n\ntig-2.5.5\n---------\n\nImprovements:\n\n - Make word-diff a toggleable option. (#1119, #1125)\n - Add Linux installation instructions. (#1121, #1126)\n - Allow :back to work across separate blame views. (#1123, #1127)\n - Add auto-refresh to log view. (#1128)\n - Expose `%(file_old)`, useful for deleted and renamed files. (#1132)\n - Enable jumping back in main view. (#628, #1138)\n - Add PCRE (Perl Compatible Regular Expressions) support. (#1137, #1143)\n - Pass command line args through to diff-files in status view. (#1152, #1155)\n - Remove quotes from TIG_LS_REMOTE to allow inline shell commands. (#1160, #1161)\n - Avoid pushing identical history state in main view.\n - Replace useless strncpy to avoid compilation warning with GCC 8.\n - Update utf8proc to v2.7.0.\n - Update distclean rule to preserve tarball contents. (#1167, #1169)\n - Add reference types stash and other. (#1160, #1172)\n - Auto refresh view upon option change.\n - Allow to toggle revision filtering. (#1173)\n\nBug fixes:\n\n - Fix null dereferences on unset format strings. (#1136, #1159)\n - Fix invalid read in log_read. (#1128)\n - Restore support for tig log --graph. (#1128)\n - Further fix to fullscreen navigation.\n - Fix blame when opened from an initial diff view. (#1135)\n - Fix stash view when using tig --all or tig revs. (#1146, #1147)\n - Avoiding null pointer dereference. (#1096)\n - Fix navigation between chunks after splitting chunk. (#1101, #1162)\n - Fix status line when toggling general options. (#1163, #1164)\n - Honor reference-format = hide:tag in diff view. (#1168, #1170)\n - Fix crash on :toggle file-args.\n\ntig-2.5.4\n---------\n\nImprovements:\n\n - Add FreeBSD installation instructions. (#1093)\n - Add TIG_EDITOR environment variable to configure editor. (#889, #1098)\n - Enable mailmap by default to match git log's behaviour. (#1104, #1105)\n - Enable tilde expansion for diff-highlight. (#1107)\n\nBug fixes:\n\n - Escape variables with %% in external commands. (#1091, #1095)\n - Fix parsing of -L argument. (#1100)\n - Bugfix: smart-case does not work when search term contains a space. (#1108)\n - Use ncursesw by default on Linux. (#920)\n - Replace obsolete macro `AC_CONFIG_HEADER' in configure.ac.\n\ntig-2.5.3\n---------\n\nBug fixes:\n\n - Fix autoconf checking for readline. (#1072)\n - Fix segfault when saving a view with no column.\n - Reset view->parent when main view is promoted.\n - Fix segfault when pressing Enter in a child main view.\n - Restore lazy navigation.\n - Format time_t values portably and fix other values too. (#1084, #1085)\n - Fix loop when wrapping line with ISO-8859-1 character. (#1087, #1088)\n\ntig-2.5.2\n---------\n\nIncompatibilities:\n\n - Change directory from the next argument, from now use `tig -C /path/to/repo`. (#1079)\n\nImprovements:\n\n - Jump from blame to commit. (#355)\n - Start blame of an uncommitted deleted line from HEAD so the line's origin can be traced. (#1008, #1009)\n - Add line-graphics = auto. (#834, #1019)\n - Allow maxwidth to be expressed in % of the view width. (#1021)\n - Pass stash args through. (#1022, #1030)\n - Make build work on IBM i. (#1051, #1052)\n - Restore fullscreen navigation. (#1053)\n - Update utf8proc to v2.6.1.\n - Add some range so control chars ^^ and ^_ are also supported. (#1041, #1058)\n - Disable ncurses extended key values so that esc-codes can be used. (#1046, #1049)\n - Use id column for commit id only. (#1025, #1056)\n - Some minor updates for scrolling and for a double-click in diff. (#1060)\n - Add scroll-half-page-up and scroll-half-page-down actions. (#531, #1075)\n - Allow to generate a compilation database. (#1064)\n - New command stage-update-part.\n - The line number before a diff was applied is exposed as `%(lineno_old)`. (#1081)\n\nBug fixes:\n\n - Fix wrapping of lines with multibyte characters. (#988)\n - Improve highlighting of search with $ regex. (#1000)\n - Update tracking branch when refreshing status view. (#1015)\n - Fix vertical lines in Putty with UTF-8 graphics. (#981, #983)\n - Fix parsing of three-way chunk headers with extra dashes.\n - Update tracking branch when refreshing status view. (#1015, #1020)\n - Handle filename with space in diff view. (#1035)\n - The stash view requires a working tree.\n - Replace useless strncpy to avoid compilation warning. (#1036)\n - Zsh completion fixes. (#940, #1047)\n - Handle undefined __git_complete. (#1011, #1055)\n - Fix help messages for half-page and page up. (#1054)\n - Let `-S`, `-G` and `--grep=` pattern override readline history.\n - Fix bash completion issue with worktrees (#1018).\n - Fix parsing of commit line from `git log --left-right` output in pager view.\n - Fix %(lineno) computation for hunk postimages that span only one line. (#1062)\n - Align relative-compact dates to the right. (#1067)\n - Fix empty split diff view when navigating quickly in the stash view.\n - Avoid depending on wcwidth in test by removing Variation Selector. (#1065)\n - Open the blob view with the cursor correctly positioned.\n - Update %(text) when navigating diff contents. (#1082)\n\ntig-2.5.1\n---------\n\nImprovements:\n\n - bash/zsh completion: reimplement and decrease runtime by factor 1863. (#795)\n - Add binding to reflog view to toggle reference display.\n - Fail if tig is given an invalid or ambiguous ref. (#980)\n - Make tig process-group leader an option. (#986, #951)\n - Handle GIT_WORK_TREE environment variable.\n - The blame view requires a working tree.\n - Fix use of deprecated vwprintw() function.\n - Update utf8proc to v2.5.0.\n - Add --word-diff=plain colorizing support. (#221)\n\nBug fixes:\n\n - Fix segmentation fault. (#971)\n - Fix cursor position after \"Move to parent\" in blame view. (#973)\n - Fix crash on adding a line to a view. (#523)\n - Fix memory leak in diff unit.\n - Fix loop after refresh or change in refs/main split view. (#991)\n - Fix occasional crash on custom key bindings. (#1001)\n\ntig-2.5.0\n---------\n\nImprovements:\n\n - Single file view enters blame mode on \"b\". (#804)\n - Show untracked files in the default view. (#762)\n - Disable graph if log.follow is enabled and there is only one pathspec. (#881)\n - Disable graph for author searches.\n - git_colors: interpret 'ul' as 'underline'.\n - Add refname variable. (#900)\n - Add -C option to specify the working directory. (#570)\n - Improve behaviour of auto and periodic refresh modes. (#389, #441, #482, #794, #888, #932)\n - Add support for repos created with git --work-tree. (#872)\n - Add diff-highlight to pager mode.\n - Show annotated commits in main view. (#819)\n - Introduce reflog view. (#538)\n - Add option to start with cursor on HEAD commit. (#755)\n - Support combined diffs with more than 2 parents.\n - Improve how a toggle option value is shown on the status line. (#879)\n - Add options to filter refs output. (#694)\n - Update utf8proc to v2.4.0. (#961)\n\nBug fixes:\n\n - Fix garbled cursor line with older ncurses versions.\n - Fix diff highlighting of removed lines starting with -- and added lines\n   starting with ++. (#871, #875)\n - Fix loop when displaying search result if regex matches an empty string. (#866)\n - Add synchronous command description in tigrc.\n - Fix parsing of git rev-parse output. (#884)\n - Propagate --first-parent to diff arguments. (#861)\n - Use proper type for hash table size. (#858)\n - Fix incorrect cppcheck warning about realloc() use.\n - Don't shift signed int by 31 bits.\n - Fix Vim going background after running Tig outside of a git repository. (#906)\n - make-builtin-config: use \"read -r\". (#912)\n - Fix segfaults with readline 8.0. (#893)\n - Reset state before closing stage view automatically.\n - Don't use a child view as previous view.\n - Force reload of VIEW_FLEX_WIDTH views only when needed.\n - Combined diff uses @@@ as hunk marker.\n - Fix memory leak induced by 'tig grep'.\n - Fix memory leak in main view.\n - Exit gracefully if refs view was defined without ref column. (#897)\n - Fix pager view not moving up when child view is open.\n - make-builtin-config: Fix unportable sed usage in read_tigrc().\n - Properly detect combined diffs. (#942)\n\ntig-2.4.1\n---------\n\nBug fixes:\n\n - Add `CURSES_CFLAGS` to `CPPFLAGS`. (#856, Linuxbrew/homebrew-core#8440)\n\ntig-2.4.0\n---------\n\nImprovements:\n\n - Add 'send-child-enter' option to control interaction with child views. (#791)\n - Update make config defaults for Cygwin to ncurses6. (#792)\n - Build against netbsd-curses. (#789)\n - Change the blame view to render more like `git blame`. (#812)\n - Improve worktree and submodule support. (#459, #781, #783)\n - Support running Tig via a Git alias. (#763)\n - Use ISO-8601 letters for short relative dates. (#759, #760)\n - Change date formatting to show time zones by default. (#428, #811)\n - Use utf8proc to handle Unicode characters. (#827)\n\nBug fixes:\n\n - Fix `file(1)` argument on Linux used for resolving encodings. (#788)\n - Fix underflow in the file search. (#800, #801)\n - Fix line numbers in grep view when scrolled. (#813)\n - Pass command line args through to the stage view. (#569, #823)\n - Fix resource leak. (#780)\n - Fix various compiler warnings and pointer arithmetic. (#799, #803)\n - Workaround potential null pointer dereferences. (#824)\n - Bind to single and double quotes by using the *<SingleQuote>* and\n   *<DoubleQuote>* key mappings. (#821)\n - Make Tig the process-group leader and clean child processes. (#828, #837)\n - Fix sh compatibility in `contrib/tig-pick`. (#832)\n - Fix incorrect behaviour of up and down keys in diff view when opened from\n   diff preview. (#802, #835)\n - Open the stage view when maximizing a split diff view of (un)staged changes.\n   (#836)\n - Use fully qualified reference name for tags when conflicting with branch\n   name. (#746, #787, #849)\n - Fix resize not working after entering command. (#845) (#846)\n - Use stack allocated memory to handle `TIG_LS_REMOTE`. (#839)\n - Fix deleted file mode line remains highlighted after hovering in diff or stage view. (#851)\n - Fix `TIG_LS_REMOTE` not working with git-ls-remote(1). (#853, #854)\n\ntig-2.3.3\n---------\n\nBug fixes:\n\n - Revert \"Handle \\n like \\r (#758)\". (GH #769)\n - Fix GH #164 by catching SIGHUP.\n - Change `refs_tags` type to `size_t`.\n\ntig-2.3.2\n---------\n\nBug fixes:\n\n - Fix busy loop detection to handle large repos. (GH #164)\n\ntig-2.3.1\n---------\n\nImprovements:\n\n - Restore TTY attributes. (GH #725)\n - Handle `\\n` like `\\r`. (GH #758)\n\nBug fixes:\n\n - Add workaround that detects busy loops when Tig loses the TTY. This may\n   happen if Tig does not receive the HUP signal (e.g. when started with\n   `nohup`). (GH #164)\n - Fix compatibility with ncurses-5.4 which caused copy-pasting to not work\n   in the prompt. (GH #767)\n - tig(1): document correct environment variable. (GH #752)\n\ntig-2.3.0\n---------\n\nIncompatibilities:\n\n - The `width` setting on the `status`, `text` and `commit-title` columns was\n   never applied and has been removed. (GH #617)\n\nImprovements:\n\n - Improve load performance by throttling screen updates. (GH #622, #629)\n - Speed up graph rendering. (GH #638)\n - Enable scroll optimizations for Terminal.app and iTerm2. (GH #637)\n - Improve the test suite portability to not depend on GNU sed. (GH #609, #614)\n - Make build reproducible. (https://reproducible-builds.org/) (GH #613)\n - Enable binding to more symbolic keys and keys with control modifier:\n   `F13`-`F19`, `ShiftLeft`, `ShiftRight`, `ShiftDel`, `ShiftHome`, `ShiftEnd`,\n   `ShiftTab`, `Ctrl-C`, `Ctrl-V`, `Ctrl-S`, and `Ctrl-@`. (GH #314, #619, #642)\n - Persist readline history to `~/.tig_history` or `$XDG_DATA_HOME/tig/history`.\n   Use `history-size` to control the number of entries to save. (GH #620, #713,\n   #714, #718)\n - Preload last search from persistent history. (GH #630)\n - Add `view-close-no-quit` action, unbound by default. (GH #607)\n - Add `mouse-wheel-cursor` option (off by default) when set to true causes\n   wheel actions to prefer moving the cursor instead of scrolling. (GH #608)\n - Add `truncation-delimiter` option, set to `~` by default. (GH #646)\n - Add `-q` parameter to `source` for \"source-if-present\". (GH #612)\n - Add `:echo` prompt command to display text in the status bar. (GH #626, #636)\n - Make `diff-highlight` colors configurable. (GH #625, #633)\n - Let Ctrl-C exit Y/N dialog, menu prompts and the file finder. (GH #632, #648)\n - Hide cursor unless at textual prompt. (GH #643)\n - Expand tilde ('~') in `:script` paths. (GH #674)\n - Show single-line output of external command in status bar. (GH #200, #557,\n   #678)\n - Disable the graph when `--no-merges` is passed. (GH #687) \n - Print backtraces on segfault in debug mode.\n - Ignore script lines starting with `#` (comment). (GH #705)\n - Complete `repo:*` variables when readline is enabled. (GH #702)\n - Incorporate XTerm's `wcwidth.c` to find Unicode widths. (GH #691)\n\nBug fixes:\n\n - Fix graph display issues. (GH #419, #638)\n - Fix and improve rendering of Unicode characters. (GH #330, #621, #644, #682)\n - Handle hyphenated directory names when listing content. (GH #602)\n - Do not jump to next match when cancelling the search prompt. (GH #627)\n - Fix clearing of the status line after `Ctrl-C`. (GH #623, #649)\n - Fix handling of width on line-number and trimmed width of 1. (GH #617)\n - Set cursor position when not updating prompt contents. (GH #647)\n - Erase status line at exit time for users without altscreen-capable terminals.\n   (GH #589)\n - Fix unexpected keys when restoring from suspend (`Ctrl-Z`). (GH #232)\n - contrib/vim.tigrc: Also bind G in the main as a workaround for limitations of\n   the `none` action. (GH #594, #599)\n - Only override `blame-options` when commands are given and fix parsing of\n   `-C`. (GH #597)\n - Fix diff name discovery to better handle prefixes.\n - Interpret button5 as wheel-down. (GH #321, #606)\n - Fix `back` / `parent` in tree view. (GH #641)\n - Fix memory corruption in `concat_argv` and file finder. (GH #634, #655)\n - Fix reading from stdin for `tig show`.\n - Document problem of outdated system-wide `tigrc` files in Homebrew. (GH #598)\n - Repaint the display when toggling `line-graphics`. (GH #527)\n - Fix custom date formatting support longer strings. (GH #522)\n - Don't segfault on \":exec\" irregular args. (GH #686)\n - Fix segfault when calling htab_empty. (GH #663, #745)\n\ntig-2.2.2\n---------\n\nUpgrade instructions:\n\n - The `status-untracked-dirs` option was renamed to\n   `status-show-untracked-dirs` to match the new `status-show-untracked-files`\n   option.\n\nImprovements:\n\n - Use `diff-options` when preparing the diff in the stage view to make the diff\n   state configurable. (GH #545)\n - Add 'status-show-untracked-files' option mirroring Git's\n   'status.showUntrackedFiles' to toggle display of untracked files.  in the\n   status view. On by default. (GH #562)\n - Update `ax_with_curses.m4` and use `pkg-config` to detect. (GH #546)\n - Add `tig-pick` script for using Tig as a commit picker. (GH #575, #580)\n - Add \"smart case\" option ('set ignore-case = smart-case') to ignore case when\n   the search string is lower-case only. (GH #320, #579)\n\nBug fixes:\n\n - Fix author ident cache being keyed by email only. (GH #424, #526, #547)\n - Fix periodic refresh mode to properly detect ref changes. (GH #430, #591)\n - Add workaround for detecting failure to start the diff-highlight process.\n - Show diffs in the stash view when `set mailmap = true`. (GH #556)\n - Fix parsing of git-log revision arguments, such as `--exclude=...` in\n   conjunction with `--all`. (GH #555)\n - Fix diff stat parsing for binary copies.\n - Fix crash when resizing terminal while search is in progress. (GH #515, #550)\n - Fix argument filtering to pass more arguments through to Git.\n - Check for termcap support in split tinfo libs. (GH #568, #585)\n\ntig-2.2.1\n---------\n\nTarballs should now be downloaded from GitHub. Either go to\nhttps://github.com/jonas/tig/releases or use the following pattern:\n\n    https://github.com/jonas/tig/releases/download/tig-VERSION/tig-VERSION.tar.gz\n\nMD5 checksums can be found at:\n\n    https://github.com/jonas/tig/releases/download/tig-VERSION/tig-VERSION.tar.gz.md5\n\nSimilarly, the home page is now also on GitHub at https://jonas.github.io/tig/.\nA big thanks to Simon L. B. Nielsen for generously hosting Tig on nitro.dk!\n\nImprovements:\n\n - Support Git's 'diff-highlight' program when `diff-highlight` is set to either\n   true or the path of the script to use for post-processing.\n - Add navigation between merge commits. (GH #525)\n - Add 'A' as a binding to apply a stash without dropping it.\n - Bind 'Ctrl-D' and 'Ctrl-U' to half-page movements by default.\n - manual: Mention how to change default Up/Down behavior in diff view.\n\nBug fixes:\n\n - Reorganize checking of libraries for termcap functions.\n - Fix `:goto <id>` error message.\n\ntig-2.2\n-------\n\nIncompatibilities:\n\n - Note that all user-defined commands are now executed at the repository root\n   instead of whatever subdirectory Tig was started in. (GH #412)\n - Remove `cmdline-args` option to avoid problems where setting it in `~/.tigrc`\n   potentially breaks other views due to its \"context-sensitive\" nature, where\n   a `git-log` option maybe cause `git-grep` to fail. (GH #431)\n\nImprovements:\n\n - Use .mailmap to show canonical name and email addresses, off by default.\n   Add `set mailmap = yes` to `~/.tigrc` to enable. (GH #411)\n - Highlight search results, configurable via `search-result` color. (GH #493)\n - Wrap around when searching, configurable via `wrap-search` setting.\n - Populate `%(file)` with file names from diff stat. (GH #404)\n - `tig --merge` implies `--boundary` similar to gitk.\n - Expose repository variables to external commands, e.g. `%(repo:head)` gives the\n   branch name of the current HEAD and `%(repo:cdup)` for the repo root path.\n - Add `make uninstall`. (GH #417)\n - Add ZSH completion file (based on Bash completion) (GH #433)\n - Expose the text of the currently selected line as the %(text) (GH #457)\n - Allow users to specify rev arguments to blame (GH #439)\n - Update OSX make config to find brew installed ncurses\n - Add sample git-flow keybinding (GH #421)\n - Add chocolate theme (GH #432)\n - Show stash diffs. (GH #328)\n - Make user tigrc location configurable. (GH #479)\n - Compact relative date display mode. (GH #331)\n - Add date column option controlling whether to show local date.\n - Move to parent commit in the main view. (GH #388)\n - Add `:goto <rev>` prompt command to go to a `git-rev-parse`d revision, e.g.\n   `:goto some/branch` or `:goto %(commit)^2`.\n - Respect the XDG standard for configuration files. (GH #513)\n - Show tracking information in `tig status` (GH #504)\n - Resolve diff paths when `diff.noprefix` is true. (GH #487, #488)\n - Support for custom `strftime(3)` date formats, e.g.:\n\n\tset main-view-date = custom\n\tset main-view-date-format = \"%Y-%m-%d\"\n\nBug fixes:\n\n - Prevent staged rename from displaying unstaged changes (GH #472, #491)\n - Fix corrupt chunk header during staging of single lines. (GH #410)\n - Fix out of bounds read in graph-v2 module. (GH #402)\n - Add currently checked out branch to `%(branch)`. (GH #416)\n - Size diff stats correctly for split views.\n - Fix `git-worktree` support by using `git-show-ref`. (GH #437)\n - Add currently checked out branch to `%(branch)` (GH #416)\n - Fix segfault when hitting return in empty file search (GH #464)\n - Remove separator on horizontal split when switching from vertical split\n - Do not expand `--all` when parsing `%(revargs)` (GH #442, #462)\n - Fix exit when the main view is reloaded due to option toggling. (GH #470)\n - Expand all whitespace and control characters to spaces. (GH #485)\n - Restore ability to unbind a default keybinding with `none`. (GH #483)\n - Fix blob view to honor the `wrap-lines` setting.\n\ntig-2.1.1\n---------\n\nImprovements:\n\n - Add support for key combos. (GH #67)\n - See `contrib/vim.tigrc` for Vim-like keybindings. (GH #273, #351)\n - Add GitHub inspired file finder to search for and open any file. (GH #342)\n - Add `search` keymap for navigating file finder search results.\n\nBug fixes:\n\n - Fix display of multiple references per commit. (GH #390, #391)\n - Sync the prompt's cursor position with readline's internal position. (GH #396)\n - Keep unstaged changes view open after an staging command. (GH #399)\n\ntig-2.1\n-------\n\nImprovements:\n\n - Improve C99 compliance so Tig compiles with the native compilers on\n   Solaris (SunStudio cc) and AIX (xlc). (GH #380)\n - Add move-half-page-up and move-half-page-down actions. (GH #323)\n - Preserve the cursor position when changing the diff context.\n - Show 'Unstaged changes' above 'Staged changes' in the main view. (GH #383)\n - Add `:exec <flags><args...>` prompt command to execute commands.\n - Add shorthand for changing the view settings of a single column,\n   eg. `set main-view-author = short`. (GH #318)\n - Show better diff context info in the stage view.\n - Add `%(lineno)` state variable. (GH #304)\n - Use hash table to speed up refs lookup. (GH #350)\n - Show the file path in the blob view when available.\n - Use `set commit-order = default` to use Git's default commit order, even when\n   the commit graph is enabled. The option will turn off automatic enabling of\n   `--topo-order` when the graph is shown in the main view. (GH #310, #324)\n - Speed up the diff view in large repos by loading git-describe info after the\n   diff content has been read. (GH #324)\n - Add the old graph rendering as an option. (GH #310, #324)\n - Add `main-options` setting for specifying default main view options.\n   Example: `set main-options = --max-count=1000`. (GH #368)\n - See `contrib/large-repo.tigrc` for settings that will help to speed up Tig in\n   large repos. (GH #368)\n - Add `:save-options <file>` prompt command to save config to file. (GH #315)\n\nBug fixes:\n\n - Update manual to reflect default keybinding changes. (GH #325)\n - Fix graph support for `--first-parent`. (GH #326)\n - Fix off-by-one error when opening editor from the grep view.\n - Fix status on-branch information.\n - Fix main view to handle the case when git-log doesn't find any commits.\n - Fix corner case when parsing diff chunk when lines information is missing.\n - Ensure main view changes commits are shown right before the current HEAD.\n - Fix rendering of boundary commits.\n - Fix compilation with GNU Make 3.80 by removing `$(abspath)`. (GH #362)\n - Fix config parsing to support shell-like quoting in user-defined command,\n   e.g. `bind generic <Ctrl-f> :!git log -G\"%(prompt Prompt: )\"` (GH #371)\n - Make diff meta information colors more consistent with Git. (GH #375)\n - Fix segfault when updating changes in a maximized stage view opened via the\n   main view. (GH #376)\n - Handle line number configs where the interval is not specified. (GH #378)\n - Fix display of error messages during startup. (GH #385)\n - Show untracked files outside the current directory like git-status. (GH #230)\n\ntig-2.0.3\n---------\n\nImprovements:\n\n - Add `:save-display <file>` prompt command to save the current display.\n - Add `:script <file>` prompt command for scripting the Tig UI.\n - Add test framework and convert existing tests to use it.\n - Add command-line option for starting in refs view: `tig refs`. (GH #309)\n - Make blame commit ID colors stable across reloads. (GH #303)\n - Increase blame ID and graph rendering color palette to 14 colors.\n - New setting 'split-view-width' controls the width for vertical splits. It\n   takes the width of the right-most view either as a number or a percentage.\n - Expose settings holding command line argument lists: `file-args`, `rev-args`,\n   and `cmdline-args`. They are mainly intended for testing purposes but also\n   allows to change the filtering arguments dynamically. (GH #306)\n - Add `log-options` setting for specifying default log view options.\n   Example: `set log-options = --pretty=fuller`.\n - Use option specific view flags to reload view after `:set` commands.\n\nBug fixes:\n\n - Refresh the current view when returning from an external command and\n   `refresh-mode=after-command`. (GH #289)\n - Fix readline completion.\n - Fix '/' to `find-next` when readline support is enabled. (GH #302)\n - Fix readline prompt to correctly handle UTF-8 characters.\n - Add warnings for more obsolete actions and colors.\n - Fix passing of commit IDS via stdin to the main view.\n - Fix commit title overflow drawing for multibyte text. (GH #307)\n - Fix installation directory permissions.\n - Handle binary files matches reported by git-grep.\n - Toggling of \"args\"-typed options without any arguments will clear the current\n   arguments. Example: `:toggle blame-options`.\n - Detect custom `pretty.format` settings that break the log view and fallback\n   to use the `medium` format. (GH #225)\n - Fix invocation of git-diff for the blame view's line tracking. (GH #316)\n - Fix blame completion of directory names. (GH #317)\n - Fix display of conflicts in the main view when 'show-changes' is enabled.\n - Fix off-by-one error when displaying line numbers in the grep view.\n - When showing the commit graph ensure that either topo, date or author-date\n   commit order is used. (Debian #757692) (GH #238)\n\ntig-2.0.2\n---------\n\nImprovements:\n\n - Use git-status for diffing the index.\n - Group toggle options together in the help view.\n\nBug fixes:\n\n - Fix refs, main and grep loading when 'gui.encoding' is set. (GH #287)\n - Ignore 'gui.encoding' and 'i18n.commitencoding' when set to 'UTF-8'.\n - Add work-around for missing strndup() on Mac OS X v10.6. (GH #286)\n - Fix spurious abbreviation of author names. (GH #288)\n - Don't show empty action groups in the help view.\n\ntig-2.0.1\n---------\n\nBug fixes:\n\n - Fix compilation in watch.c.\n - Fix parsing of key bindings mapped to '^' and '<'. (GH #280, #282)\n\ntig-2.0\n-------\n\nNote to packagers:\n\n - Add `.adoc` extension to AsciiDoc files so they show correctly on GitHub.\n   This includes `README`, `INSTALL`, and `NEWS` and files in `doc/` directory.\n - `BUGS` file has been merged into `README.adoc`.\n - Default keybindings have been moved to a system-level `tigrc` file, which is\n   installed to ${sysconfdir} by default. The content of the `tigrc` file is\n   included inside the binary as a fall-back. Pass `NO_BUILTIN_TIGRC=y` to not\n   include the system `tigrc` content and reduce the size of the binary.\n - The example `contrib/tigrc` file (made obsolete by `tigrc`) has been removed.\n - Source files have been moved to `src` and `include` and `tig.c` was split up.\n - Build output is less verbose by default; use `make V=1` for old output.\n\nIncompatibilities:\n\n - In preparation for key combo support, key mappings for symbolic keys (e.g.\n   `Up` and `Down`) must now start with `<` and end with `>`, e.g. `<Up>` and\n   `<Down>`. Furthermore, escape key combos must now use `<Esc>key` instead of\n   `^[key`, and control key mappings must now use `<Ctrl-key>` instead of\n   `^key`.\n - Only use 'diff-options' for the diff view and introduce '%(cmdlineargs)' to\n   hold non-file and non-revision flags passed on the command line. Affects all\n   user-defined commands that expect '%(diffargs)' to hold both 'diff-options'\n   arguments and those passed on the command line. (GH #228)\n - Remove built-in keybinding for `git gc`. Add the following line to `~/.tigrc`\n   to restore it: `bind generic G ?git gc`.\n - To support view specific colors, '.' can no longer be used interchangeably\n   with '-' and '_' in settings names and in particular color names.\n - Replace 'stage-next' action with prompt command using a predefined search\n   (see below) and add binding (`@` by default) to also work in the diff view.\n - Most view display options must now be set via the new `*-view` options in\n   tigrc. Existing options are no longer recognized, but a warning is shown.\n - Remap default bindings to have more consistent convention: use lower-case\n   keys primarily for view switching and non-destructive actions, use upper-case\n   keys for view-specific actions including user-defined commands. To preserve\n   old default key bindings see `contrib/bindings-v1.x.tigrc`. (GH #257)\n\nImprovements:\n\n - Add mouse support: scroll view, click line to move cursor, double click line\n   (or click again) to \"Enter\" cursor line, e.g. open commit diff. Disabled by\n   default, since it makes text selection less intuitive. If you enable this\n   remember to hold down Shift (or Option on Mac) when selecting text.\n - Rewrite and improve the rendering of the commit graph. (GH #144, #46)\n - Add completion and history support to the prompt via readline. (GH #185)\n - Options can be configured and toggled individually for each view. Use the new\n   view settings to configure the order and display options for each view\n   columns. See system tigrc and tigrc(5) for examples. (GH #89, #222)\n - Add grep view as a front-end to git-grep(1): `tig grep -p strchr`. From\n   within Tig, the key for switching or grepping is bound to 'g' by default.\n - Rename 'branch' view to 'refs' view and show tags. (GH #134)\n - Add main view pager mode that reads git-log's '--pretty=raw' data\n   from stdin, e.g. `git reflog --pretty=raw | tig --pretty=raw`.\n - Add support for `--graph` and highlight diff stats in the log view.\n - Add default command bindings: `!` to delete branch, `!` to drop stash.\n - Add 'stage-split-chunk' action for splitting chunks in the stage view.\n   Bound to '\\' by default. (GH #107)\n - Add 'back' action bound to '<' by default, which will return the blame view\n   to the previous revision and line after moving e.g. to the parent. (GH #124)\n - Auto-refresh views based on watched repository changes. Configure by setting\n   `refresh-mode` to 'manual', 'auto', 'after-command', or 'periodic'. (GH #190)\n - All default settings are in well-documented system `tigrc`.\n - Add `:toggle` prompt command to manipulate options using keybindings. For\n   example: `bind diff D :toggle diff-options --patience --notes`. (GH #69)\n - Add a new \"auto\" value for the 'vertical-split' option to let Tig choose the\n   split orientation (this is the new default behavior). Can be toggled.\n - Make it possible to toggle the display of files in untracked directories.\n - Allow Tig to be started with no default configuration by specifying an\n   alternative system `tigrc` file, e.g.: `TIGRC_SYSTEM=~/.tigrc.safe tig`. Set\n   `TIGRC_SYSTEM` to the empty string to use built-in configuration instead of\n - Key mappings can contain UTF-8 multibyte unicode keys.\n - Warn about conflicting keybindings using Ctrl, e.g. `<Ctrl-f>` and\n   `<Ctrl-F>`. (GH #218)\n - Extend key bindings for prompt commands (ie. `bind <keymap> <key> :<prompt>`)\n   to support predefined searches, eg.: `bind stage 2 :?^@@`.\n - Git color mappings can be configured in tigrc.\n - More informative configuration error messages.\n - Make reference label formatting configurable, for example:\n   `set reference-format = (branch) <tags> remote`. (GH #201)\n - Adjust author width and other view columns automatically. (GH #49)\n - Support view specific colors: `color stage.diff-add yellow default`.\n - Copy `-S`, `-G` and `--grep=` pattern to search buffer so 'find-next' and\n   'find-prev' work as expected.\n - Optionally specify custom prompt for `%(prompt)` in shell commands, e.g.\n   `bind main B ?git checkout -b \"%(prompt Enter new branch name: )\"`.\n - Add `%(remote)` and `%(tag)` symbols to complement `%(branch)`.\n - User-defined commands can now be prefixed with any of the supported flags,\n   e.g. `?git checkout -b %(branch)`.\n - Open editor at line number for combined diffs e.g. diffs of unmerged files.\n - Add build configuration for Cygwin (OS name: CYGWIN_NT-6.1). (GH #92)\n - Document the Git commands supported by the pager mode.  (GH #1)\n   system `tigrc` configuration. (GH #235)\n\nBug fixes:\n\n - Fix stash diff display when reloading the stash view after a deleting.\n - Set the commit reference when opening the blame view from the blob view.\n - Correctly identify and highlight the remote branch tracked by HEAD.\n - Pass --no-color after user defined arguments to ensure that colors do not\n   break the output parsing. (GH #191)\n - Close stdin when pager mode is not supported.\n - Show newly created branches in the main view. (GH #196)\n - File with 0 changes breaks diffstat highlighting (GH #215)\n - Update %(branch) variable in the main view. (GH #223)\n - Disable graph rendering when either of `--reverse`, `-S`, `-G`, and `--grep`\n   are passed to the main view. (GH #127)\n - Only refresh views that support it.\n - Fix author and date annotation of renamed entries in the tree view.\n - Fix use of unsafe methods in the signal handler. (GH #245)\n - Fix rendering in non-UTF8 terminals.\n - Fix stage-update-line by rewriting the diff chunk containing the line instead\n   of using `--unidiff-zero` and a diff context of zero. (GH #130)\n - Fix status-update to work for untracked directories. (GH #236)\n - Don't pass log parameters given on the command line to the diff view.\n\ntig-1.2.1\n---------\n\nIncompatibilities:\n\n - Move manual and man pages to doc/ directory and rename AsciiDoc files\n   to have .asciidoc as the extension to make them render on GitHub.\n\nImprovements:\n\n - Show blob sizes in the tree view either as bytes or using binary unit\n   prefixes. Example: `set show-file-size = units`. (GH #163)\n - Reduce main view memory usage and startup time, especially when revision\n   graph rendering is disabled. (GH #160)\n\nBug fixes:\n\n - Fix submodule-related setup to check for non-zero return value from\n   setenv(). (GH #188)\n\ntig-1.2\n-------\n\n - Tig now has its own tag on Stack Overflow, where users are invited to\n   ask questions: https://stackoverflow.com/questions/tagged/tig\n\nImprovements:\n\n - Prompt commands can be bound to keys. For example:\n   `bind diff F :set diff-options = --full-diff`. (GH #69, #116)\n - Add a diff-options setting for specifying default diff options.\n   Example: `set diff-options = --patience`. (GH #116)\n - Options in diff-options and blame-options matching Tig browsing state\n   variables are replaced.\n - Show diff stats as wide as the terminal. (GH #109)\n - Show line numbers in the branch view. (GH #135)\n - Add toggles for showing author email or email user names. (GH #115)\n - Open editor at the selected line by prefixing the file argument with\n   `+<lineno>`. Tested in vi, Vim, Emacs, Nano, Gedit, Geany. Disable\n   by adding `set editor-line-number = no` to ~/.tigrc. (GH #118, #119)\n - Add toggle-files to control whether to show full commit diff or only\n   the diff concerning the currently selected file, e.g. for blame.\n - Optionally highlight exceeding characters in long commit titles.\n   The default title max width is 50 characters. Customize using:\n   `set title-overflow = 50` (GH #125)\n - Add +ESC key bindings. Example: `bind generic ^[v move-page-up` (GH #120)\n - Create temporary files in TMPDIR, TEMP, or TMP before defaulting to /tmp.\n - Reenable `tig log` as a subcommand. (GH #146)\n - Enable tilde expansion in ~/.tigrc \"source\" commands. (GH #168)\n - Introduce the stash view, bound to the 'y' keybinding. (GH #169, #174)\n\nBug fixes:\n\n - Fix blame and status to work in directories starting with a dot. (GH #172)\n - Reload current branch name when reloading the status view. (GH #93)\n - Fix compile errors on old Solaris. (GH #97)\n - Reload HEAD info when reloading the stage view. (GH #104, #93)\n - Fix disappearing branch labels after external commands. (GH #148)\n - Fix diff view display for staged/unstaged changes when using 'd'.\n - Fix display of status messages when toggling view options. (GH #111)\n - Fix illegal memory access. (GH #98)\n - Fix display of all branches label in repos with short branch names.\n - Fix rendering glitch for branch names.\n - Do not apply diff styling to untracked files in the stage view. (GH #153)\n - Fix tree indentation for entries containing combining characters. (GH #170)\n - Ignore unrepresentable characters when transliterating text for rendering.\n - Transliterate text to output encoding before trimming it to avoid\n   misalignment. (GH #86)\n - Introduce a more natural context-sensitive log display. (GH #155)\n\ntig-1.1\n-------\n\nIncompatibilities:\n\n - Disable diff move/copy detection by default, boosting diff\n   performance on larger projects. Use git config 'diff.renames' option\n   (Git-wide) to set your preferred behavior. Environment variable\n   TIG_DIFF_OPTS can be used to restore the old behavior.\n - Fix manual keybinding for stage-single-line. (GH #108)\n - Values set for author-width and filename-width will result in widths\n   one character bigger than previously.\n\nImprovements:\n\n - Typing a text in the prompt will be interpreted as a Tig command.\n   Prefixing the command with a '!' will execute this system command in\n   an external pager. Entering a single key will execute the\n   corresponding key binding.\n - Basic support for wrapping long line in pager, diff, and stage views.\n   Enable using: `set wrap-lines = yes`. (GH #2)\n - User-defined commands prefixed with a '?' means prompt before\n   execution. Example: `bind main B !?git rebase -i %(commit)`.\n - User-defined commands prefixed with a '<' means exit after execution.\n   Example: `bind main C !<git commit`. (GH #66)\n - User-defined commands are executed unquoted to support shell commands.\n   Example: `bind generic I !@sh -c \"echo -n %(commit) | xclip -selection c\"`.\n   (GH #65)\n - Configure case-insensitive searches using: `set ignore-case = yes`.\n - Add \"deleted mode\" line type for better diff coloring.\n - Open editor when requesting edit action from within a file diff.\n - Update AX_WITH_CURSES to build under Cygwin.\n - Improve tigrc(5) documentation. (Debian #682766)\n - Allow to build on Mac OS 10.7 without the configure script. (GH #25)\n - Add option to split the view vertically instead of horizontally.\n   Example: `set vertical-split = yes'. (GH #76)\n - Add 'show-id' and 'id-width' options to configure the display of\n   commit IDs in the main view and ID width in the blame view. (GH #77)\n - Allow to override Git based encoding to UTF-8 by setting\n   'i18n.commitencoding' or 'gui.encoding'.\n - Improve autobuild support to track generated files and work with\n   autoreconf 2.61.\n - Commit IDs are read from stdin when --stdin is given; works for main\n   and diff view, e.g. `tig --no-walk --stdin < cherry-picks.txt`.\n - Add option to disable focusing of the child view when it's opened.\n   Disable using: `set focus-child = no`. (GH #83)\n - Allow to open blob related with added content in a diff. (GH #91)\n\nBug fixes:\n\n - Fix commit graph regression when a path spec is specified. (GH #53)\n - Main view: only show staged/unstaged changes for the current branch.\n - Support submodules created with current version of git. (GH #54)\n - Fix diff status message for file diffs with no content changes.\n - Fix parent blaming when Tig is launched in subdirectory. (GH #70)\n - Do not show deleted branch when reloading the branch view.\n\ntig-1.0\n-------\n\nThe master repository is git://github.com/jonas/tig.git, and the old\nmaster repository (http://jonas.nitro.dk/tig/tig.git) will be retired.\n\nImprovements:\n\n - Use git-log(1)s default commit ordering. The old behavior can be\n   restored by adding `set commit-order = topo` to ~/.tigrc.\n - Support staging of single lines. Bound to '1' default. (GH #21)\n - Use +<lineno> to open the initial view at an arbitrary line. (GH #20)\n - Add show-notes ~/.tigrc option. Notes are displayed by default.\n - Support jumping to specific SHAs in the main view.\n - Decorate replaced commits.\n - Display line numbers in main view.\n - Colorize binary diff stats. (GH #17)\n - Custom colorization of lines matching a string prefix (GH #16).\n   Example configuration: color \"Reported-by:\" green default\n - Use Git's color settings for the main, status and diff views.\n   Put `set read-git-colors = no` in ~/.tigrc to disable.\n - Handle editor options with multiple arguments. (GH #12)\n - Show filename when running tig blame with copy detection. (GH #19)\n - Use 'source <path>' command to load additional files from ~/.tigrc\n - User-defined commands prefixed with '@' are run with no console\n   output, e.g.\n\n   \tbind generic 3 !@rm sys$command\n\n - Make display of space changes togglable in the diff and stage view.\n   Bound to 'W' by default.\n - Use per-file encoding specified in gitattributes(5) for blobs and\n   unstaged files.\n - Obsolete commit-encoding option and pass --encoding=UTF-8 to revision\n   commands.\n - Main view: show uncommitted changes as staged/unstaged commits.\n   Can be disabled by putting `set show-changes = no` in ~/.tigrc.\n - Add %(prompt) external command variable, which will prompt for the\n   argument value.\n - Log information about Git commands when the TIG_TRACE environment\n   variable is set. Example: `TIG_TRACE=/tmp/tig.log tig`\n - Branch view: Show the title of the last commit.\n - Increase the author auto-abbreviation threshold to 10. (GH #49)\n - For old commits show number of years in relative dates. (GH #50)\n\nBug fixes:\n\n - Fix navigation behavior when going from branch to main view. (GH #38)\n - Fix segfault when sorting the tree view by author name.\n - Fix diff stat navigation for unmodified files with stat changes.\n - Show branches/refs which names are a substring of the current branch.\n - Stage view: fix off-by-one error when jumping to a file in a diff\n   with only one file.\n - Fix diff-header colorization. (GH #15)\n\ntig-0.18\n--------\n\nIncompatibilities:\n\n - Remove support for the deprecated TIG_{MAIN,DIFF,LOG,TREE,BLOB}_CMD\n   environment variables.\n\nImprovements:\n\n - Pressing enter on diff stat file lines will jump to file's diff.\n - Naïvely color blame IDs to distinguish lines.\n - Document palette color options used for revision graph and blame IDs.\n - Add support for blaming diff lines.\n - Add diff-context option and bindings to increase the diff context in\n   the diff and stage view.\n - (GH-6) Make blame configurable via extra options passed from the command\n   line and blame-options setting from ~/.tigrc. For example:\n\n   \tset blame-options = -C -C -C\n\nBug fixes:\n\n - Expand browsing state variables for prompt. (LP #694780, Debian #635546)\n - Fix segfault when sorting the branch view by author.\n - Expand %(directory) to . for the root directory. (GH-3)\n - Accept 'utf-8' for the line-graphics option as indicated in the docs.\n - Use erasechar() to check for the correct backspace character.\n\ntig-0.17\n--------\n\nImprovements:\n\n - Start rewrite of the revision graph renderer. Three modes are\n   supported UTF-8, ncurses line graphics, and ASCII. Also, enable\n   revision graph rendering by default.\n\nBug fixes:\n\n - Fix ncurses 5.8 issue by passing non-zero column size to newwin().\n - Fix opening of diffs when browsing branches.\n\ntig-0.16.2\n----------\n\nBug fixes:\n\n - Fix regression causing empty tree view.\n - Fix set_tabsize() compile error for older versions of ncurses.\n\ntig-0.16.1\n----------\n\nImprovements:\n\n - Add scroll-first-col action to jump to the first column. Bound to '|'\n   by default.\n - Add 'status-untracked-dirs' option to ignore unknown directories\n   contents in the status view. On by default.\n\nBug fixes:\n\n - Fix 'tig show <commit>' to show the provided commit.\n - Fix problem with empty diff views when file specs were passed on the\n   command line.\n - Fix segfault when starting Tig in pager mode.\n\ntig-0.16\n--------\n\nIncompatibilities:\n\n - Encode everything internally as UTF-8. This can affect performance,\n   but should in general improve handling of character lengths etc.\n   Also, to properly handle UTF-8 environments use ncurses with wide\n   character support.\n - The use of TIG_{MAIN,DIFF,LOG,TREE,BLOB}_CMD environment variables\n   has been deprecated. To allow configuration of the diff view,\n   TIG_DIFF_OPTS can be used.\n\nImprovements:\n\n - Plug several memory leaks.\n - Command line arguments are split into diff, revision, and file\n   arguments and made available as %(diffargs), %(revargs), and\n   %(fileargs). Diff view will limit diffs using %(fileargs).\n - Status view: update the file variable when a line is selected so\n   %(file) works as expected.\n - Branch view: add %(branch) symbol providing access to the selected\n   branch.\n - Branch view: add entry to browse all branches (uses git-log's --all\n   flag).\n - Abbreviation of author names can now be configured and toggled.\n - Mark detached heads with [HEAD].\n - Add support for displaying dates in local time.\n\nBug fixes:\n\n - Status view: fix usage from sub directories, which was broken by the\n   changes made to support blame view from sub directories.\n - Fix text expansion to not truncate long lines\n - Fix parsing of boolean show-date values.\n - Fix relative date.\n - Fix unbind to behave as if the keybinding was never defined.\n - Fix unbind to also cover built-in run requests.\n - Fix parsing of unknown keymap names.\n - Blame view: fix parent blame to detect renames. It uses \"previous\"\n   line info from the blame porcelain output added in Git version 1.6.3.\n\ntig-0.15\n--------\n\nIncompatibilities:\n\n - Setting the cursor color no longer automatically sets the text to\n   bold. The old 'lazy' behavior was a bug.\n - Remove check for git-repo-config, which was officially deprecated in\n   Git version 1.5.4. The configure script no longer depends on Git\n   being installed.\n\nImprovements:\n\n - Provide the manual as a man page named tigmanual(7).\n - Add ability to toggle between showing shorter dates (without time\n   info) and relative dates. Use 'D' to toggle between date formats.\n - Show the active (instead of the default) keybindings in the help\n   view. Furthermore, honor the keymap when suggesting actions in the\n   help messages.\n - Add branch view for choosing which branch to display in the main\n   view. Bound to 'H' by default.\n - Tree view: show entry to parent directory ('..') when running from\n   subdirectory.\n - Tree view: sort entries by name, date or author. Toggling is bound to\n   'i' by default, with 'I' controlling whether or not to sort in\n   ascending order.\n - Make height of the lower view in a split view configurable by setting\n   the 'split-view-height' variable to a number or a percentage.\n   Defaults to 2/3 of the total view height.\n - Allow multiple text attributes for color commands:\n\n\tcolor cursor white blue underline bold\n\nBug fixes:\n\n - Blame view: fix loading of blame data when opened from the tree view\n   and CWD is not the repo root. (Debian bug 540766)\n - Tree view: fix searching.\n\ntig-0.14.1\n----------\n\nImprovements:\n\n - Status view: improve \"on branch\" information inspired by the prompt\n   code in Git's bash completion script.\n - Colors for 256-capable terminals can be specified as colorN.\n - Entering a number in the prompt will jump to that line number.\n - Handle core.worktree by setting GIT_DIR and GIT_WORK_TREE.\n - Make behavior of horizontal scrolling configurable by setting the\n   'horizontal-scroll' variable to a number or a percentage. Defaults to\n   scrolling 50% of the view width.\n\nBug fixes:\n\n - Status view: show error when failing to open a file.\n - Status view: report failures to update a file.\n - Blame view: fix problem with uninitialized variable.\n - Blame view: use line number information when loading blame for\n   specific commit.\n - Fix handling of quoted strings in the config file.\n - Fix horizontal scrolling glitches.\n\ntig-0.14\n--------\n\nIncompatibilities:\n\n - The screen-resize action has been deprecated. It had no real use for\n   users and was never meant to be exposed.\n - The \"tree-parent\" action was renamed to \"parent\". Warnings will be\n   emitted for transition.\n - Remove parsing of deprecated option -S and subcommands log and diff.\n - The \"author\" color replaces \"main-author\". Setting the latter will\n   now set the \"author\" color.\n\nImprovements:\n\n - Horizontal scrolling. Bound to Left/Right by default.\n - Read tigrc(5) options from Git configuration files using the syntax:\n\n\t[tig] show-rev-graph = true\n\t[tig \"color\"] cursor = yellow red bold\n\t[tig \"bind\"] generic = P parent\n\n - Tree view: avoid flickering when updating.\n - Tree view: annotate entries with commit information.\n - Tree & blob view: open any blob in an editor.\n - Stage & main view: restore view position when reloading.\n - Blame view: load blame for parent commit. For merge commits the parent\n   is queried. Bound to ',' by default via the existing \"parent\" action.\n - Abbreviate author names to initials when the width of the author column\n   is below 6 characters.\n\nBug fixes:\n\n - Tree view: fix memory corruption bug when updating.\n - Tree view: improve handling of empty trees.\n - Status view: fix reverting of unmerged files.\n - Fix regression for non-UTF-8 locales corrupting the view data.\n - Fix regression parsing multiple spaces in ~/.tigrc.\n\ntig-0.13\n--------\n\nIncompatibilities:\n\n - Commands from the environment (e.g. TIG_MAIN_CMD) will no longer have\n   access to shell features, such as subshells and variable expansion.\n   The easiest way to upgrade your configuration is to put such commands\n   in a script file or as a Git alias.\n\nImprovements:\n\n - Display repository references in the sorted order: tags, heads,\n   tracked remotes, remotes.\n - Add bash completion for blame.\n - Tree view: edit files of the current branch.\n - Run requests: new identifiers %(directory), %(file), and %(ref)\n - Improve responsiveness and view loading speed by using select(2).\n\nBug fixes:\n\n - Separate blame revision and file argument by \"--\" to avoid problems.\n - Main view: fix redrawing of the last commit wrt. the revision graph.\n - Fix waiting for input after executing a run request in pager mode.\n - Status & stage view: refuse to open directories and deleted files.\n - Tree view: show error when requesting blame for all non-file entries.\n - Do not draw loading views, which are not displayed.\n - Fix launching of mergetool from a subdirectory.\n\ntig-0.12.1\n----------\n\nImprovements:\n\n - Status view: revert uncommitted diff chunks and unstaged files with\n   changes. Bound to '!' by default.\n - Main view: use --topo-order also when rev-list arguments are given on\n   the command line.\n - Log view: support for refreshing.\n\nBug fixes:\n\n - Status view: use ls-files' --exclude-standard so user specific ignore\n   rules are effective. The option was added in Git version 1.5.4.\n - Stage view: fix assertion failure triggered when updating while\n   status view is not displayed.\n - Help view: avoid confusion by showing \"(no key)\" instead of \"'?'\" for\n   unbound requests.\n - Reload repository references when refreshing the main (and log) view.\n - Do not maximize views when refreshing.\n\ntig-0.12\n--------\n\nImprovements:\n\n - F5 also refreshes the current view.\n - Allow line graphics to be disabled with new line-graphics option.\n - Main view: also include the reference names when searching.\n - Main view: support for refreshing.\n - Main view: disable boundary commits by default. Use --boundary when\n   they should be shown. (Debian bug 498628)\n - Stage view: add stage-next action to jump to next diff chunk that can\n   be staged. By default bound to '@'.\n - Configure: check for the ncurses header files.\n - Add author-width option to customize the width of the author column.\n   For example, put the following in ~/.tigrc: set author-width = 10\n\nBug fixes:\n\n - Fix regression when staging all diff chunks in a section.\n - Bind the maximize view action to 'O'; it conflicted with the\n   keybinding to launch the merge tool in the status view.\n - Fix problem with $(cmd) usage in shell code. Some shells (jsh)\n   installed as /bin/sh does not support it.\n - Do not show incomplete boundary commits when --no-walk is used.\n - Documentation: Rename gitlink macro to support AsciiDoc 8.2.3.\n - Ignore pipe reads with errno \"Success\" reported after a signals,\n   for example when refreshing doing background loading.\n\ntig-0.11\n--------\n\nIncompatibilities:\n\n - Remove parsing of deprecated options: -g, -l, -d.\n - The first seen '--' will stop option parsing and is passed to Git\n   instead of breaking out of Tig's option parsing.\n\nNew features:\n\n - Blame view; bound to 'B' by default, reachable from the command line\n   and the tree, status, and stage views.\n - Blame/main view: allow display of date, author, and references to be\n   toggled on/off. Bound to 'D', 'A', and 'F' respectively.\n - Add action to maximize the current view.\n\nImprovements:\n\n - Show the current branch in the status view.\n - Show local/light-weight tags.\n\nBug fixes:\n\n - Fix regressions for the pager mode.\n - Fix refreshing of the index with working directory info.\n\ntig-0.10.1\n----------\n\nImprovements:\n\n - Status view: detect renamed files and show them with 'R'.\n - Status view: refresh the index to avoid \"empty diffs\".\n - Diff view: make diff headers more verbose to include e.g. committer.\n - Configure: check for the ncursesw library.\n\nBug fixes:\n\n - Fix UTF-8 handling for tag names and commit messages.\n - Fix the check for git-config(1) in configure to handle the case when\n   Git has been installed using a libexecdir which is not in the path.\n - Fix replacing of SYSCONFDIR when installing from released tarballs.\n\ntig-0.10\n---------\n\nIncompatibilities:\n\n - Deprecate most Tig specific command line options to make Tig more\n   compatible with gitk. The deprecated options are: -g, -l, -d, and -S.\n   Use of any of them will result in a warning being printed to stderr.\n   Instead of '-S', use the new 'status' subcommand.\n - Make man page building depend on DocBook XSL version >= 1.72.0.\n - Install man pages in $(prefix)/share/man.\n - Implement the cherry pick action (bound to 'C') using new support for\n   running external commands. This obsoletes the TIG_CHEERY_PICK\n   environment variable\n\nNew features:\n\n - Add support for binding keys to external commands. To bind '.' to\n   running git-commit(1), add the line: \"bind generic . !git commit\" to\n   your ~/.tigrc. Each command can have replacement string such as\n   %(commit), %(head), and %(blob), which are substituted before the\n   command is run.\n - Add system-wide configuration file defaulting to $(prefix)/etc/tigrc.\n - Add the environment variables TIGRC_USER and TIGRC_SYSTEM to change\n   user and system-wide configuration files, respectively.\n\nImprovements:\n\n - Main view: color the revision graph.\n - Main view: show boundary commits; they are marked with '^' in the\n   revision graph.\n - Tree view: add tree-parent action to jump to view of the parent tree.\n   Bound to ',' by default.\n - Allow the default terminal colors to be overwritten. To use black\n   text on white, add the line \"color default white black\" to your\n   ~/.tigrc.\n - Misc. documentation improvements.\n\nBug fixes:\n\n - Use git-diff-index(1) and git-diff-files(1) instead of git-diff(1) to\n   avoid running external diff drivers.\n - Use --no-color when calling git-log(1).\n - Fix crash when opening mergetool for lines that are not unmerged.\n\ntig-0.9.1\n---------\n\nIncompatibilities:\n\n - Make the clean rule to never remove generated documentation files.\n   Use the distclean rule for accomplishing this.\n\nNew features:\n\n - Add support for cherry-picking commits in the main view to the\n   current branch. Bound to 'C' by default.\n\nImprovements:\n\n - Add support for launching git-mergetool(1) from the status view.\n   Bound to 'M' by default.\n - Add support for refreshing/reloading the status view\n - Detect working trees and disable the status view when it is missing.\n\nBug fixes:\n\n - Fix iconv() checking in configure.\n - Fix editor invocation to make paths relative to the project root.\n - Fix out-of-range current line when reloading the status view.\n - Include autoconf files in the tarball generated by `make dist`.\n\ntig-0.9\n-------\n\nNew features:\n\n - Add bash completion script for Tig (contrib/tig-completion.bash).\n - Add optional autoconf-based build infrastructure.\n - Add stage view for showing changes in the working tree and add\n   support for staging individual diff chunks for commit.\n\nImprovements:\n\n - Status view: allow all files in a section to be staged for commit.\n - Status view: Add support for opening files in an editor. Bound to 'e'\n   by default.\n - Tree view: use a stack for remembering the lines for parent tree.\n\n/* vim: set tw=80: */\n"
  },
  {
    "path": "README.adoc",
    "content": "Tig: text-mode interface for Git\n================================\n:docext: adoc\n\nimage:https://github.com/jonas/tig/workflows/Linux/badge.svg[Linux CI,link=https://github.com/jonas/tig/actions?query=workflow%3ALinux]\nimage:https://github.com/jonas/tig/workflows/macOS/badge.svg[macOS CI,link=https://github.com/jonas/tig/actions?query=workflow%3AmacOS]\nimage:https://ci.appveyor.com/api/projects/status/jxt1uf52o7r0a8r7/branch/master?svg=true[AppVeyor Build,link=https://ci.appveyor.com/project/fonseca/tig]\n\nWhat is Tig?\n------------\nTig is an ncurses-based text-mode interface for git. It functions mainly\nas a Git repository browser, but can also assist in staging changes for\ncommit at chunk level and act as a pager for output from various Git\ncommands.\n\nResources\n---------\n\n - Homepage:\thttps://github.com/jonas/tig[]\n - Manual:\thttps://www.mankier.com/7/tigmanual[]\n - Tarballs:\thttps://github.com/jonas/tig/releases[]\n - Q&A:\t\thttps://stackoverflow.com/questions/tagged/tig[]\n\nBugs and Feature Requests\n-------------------------\nBugs and feature requests can be reported using the\nhttps://github.com/jonas/tig/issues[issue tracker] or by mail to the\nhttps://lore.kernel.org/git/[Git mailing list]. Ensure that the word\n\"tig\" is in the subject. For other Tig related questions please use\nStack Overflow: https://stackoverflow.com/questions/tagged/tig[].\n\nIf you are sending a bug report, please include the following information:\n\n- What Tig and ncurses versions are you using?\n  (`tig -v`)\n- What system do you have?\n  (`uname -a`, `lsb_release -a`)\n- What Git version are you using?\n  (`git -v`)\n\nInstallation and News\n---------------------\n\nInformation on how to build and install Tig are found in\nlink:INSTALL.{docext}[the installation instructions].\n\nNews about releases and latest features and bug fixes are found in\nlink:NEWS.{docext}[the release notes].\n"
  },
  {
    "path": "appveyor.yml",
    "content": "environment:\n  matrix:\n  - TARGET: cygwin64\n    ARCH: x86_64\n\ninstall:\n - appveyor DownloadFile https://cygwin.com/setup-%ARCH%.exe -FileName C:\\%TARGET%\\setup-%ARCH%.exe\n - cmd: C:\\%TARGET%\\setup-%ARCH%.exe -qgnNdO -l C:\\%TARGET%\\var\\cache\\setup -R C:\\%TARGET% -s https://cygwin.mirror.constant.com -P git -P gcc-code -P make -P automake -P libiconv-devel -P libncurses-devel\n - cmd: SET PATH=C:\\%TARGET%\\bin;%PATH%\n - git config --global --add safe.directory /cygdrive/c/projects/tig\n\nbuild_script:\n - make configure\n - sh configure\n - make\n\ntest_script:\n - make test\n"
  },
  {
    "path": "autogen.sh",
    "content": "#!/bin/sh\n\nexport WARNINGS=\"all\"\nset -e\n\n# Ideally, we could just do this:\n#\n#${AUTORECONF:-autoreconf} -v -I tools\n#\n# Unfortunately, Autoconf 2.61's autoreconf(1) (found in Mac OS X 10.5\n# Leopard) neglects to pass the -I on to aclocal(1), which is\n# precisely where we need it!  So we do basically what it would have\n# done.\n\nrun () {\n    test \"${V}\" = 1 && echo $0: running: \"$@\"\n    \"$@\"\n}\n\nrun ${ACLOCAL:-aclocal} -I tools\nrun ${AUTOCONF:-autoconf} --include=tools\nrun ${AUTOHEADER:-autoheader} --include=tools\n"
  },
  {
    "path": "book.json",
    "content": "{\n  \"gitbook\": \"3.2.x\",\n  \"title\": \"Tig - Text-mode interface for Git\",\n  \"structure\": {\n     \"readme\": \"README.adoc\",\n     \"summary\": \"book.md\"\n  },\n  \"links\": {\n    \"sharing\": {\n      \"twitter\": false,\n      \"facebook\": false,\n      \"google\": false,\n      \"all\": false\n    }\n  }\n}\n"
  },
  {
    "path": "book.md",
    "content": "# Summary\n\n - [Installation](INSTALL.adoc)\n - [Release notes](NEWS.adoc)\n - [tig(1)](doc/tig.1.adoc)\n - [tigrc(5)](doc/tigrc.5.adoc)\n - [Manual](doc/manual.adoc)\n - [Screenshots](https://www.flickr.com/photos/jonasfonseca/albums/72157614470764617)\n - Developer Documentation \n   - [Testing](test/README.adoc)\n"
  },
  {
    "path": "compat/ansidecl.h",
    "content": "/* Compiler compatibility macros\n   Copyright (C) 1991-2025 Free Software Foundation, Inc.\n   This file is part of the GNU C Library.\n\nThis program is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program; if not, write to the Free Software\nFoundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */\n\n/* For ease of writing code which uses GCC extensions but needs to be\n   portable to other compilers, we provide the GCC_VERSION macro that\n   simplifies testing __GNUC__ and __GNUC_MINOR__ together, and various\n   wrappers around __attribute__.  Also, __extension__ will be #defined\n   to nothing if it doesn't work.  See below.  */\n\n#ifndef\t_ANSIDECL_H\n#define _ANSIDECL_H\t1\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Every source file includes this file,\n   so they will all get the switch for lint.  */\n/* LINTLIBRARY */\n\n/* Using MACRO(x,y) in cpp #if conditionals does not work with some\n   older preprocessors.  Thus we can't define something like this:\n\n#define HAVE_GCC_VERSION(MAJOR, MINOR) \\\n  (__GNUC__ > (MAJOR) || (__GNUC__ == (MAJOR) && __GNUC_MINOR__ >= (MINOR)))\n\nand then test \"#if HAVE_GCC_VERSION(2,7)\".\n\nSo instead we use the macro below and test it against specific values.  */\n\n/* This macro simplifies testing whether we are using gcc, and if it\n   is of a particular minimum version. (Both major & minor numbers are\n   significant.)  This macro will evaluate to 0 if we are not using\n   gcc at all.  */\n#ifndef GCC_VERSION\n#define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__)\n#endif /* GCC_VERSION */\n\n/* inline requires special treatment; it's in C99, and GCC >=2.7 supports\n   it too, but it's not in C89.  */\n#undef inline\n#if (!defined(__cplusplus) && __STDC_VERSION__ >= 199901L) || defined(__cplusplus) || (defined(__SUNPRO_C) && defined(__C99FEATURES__))\n/* it's a keyword */\n#else\n# if GCC_VERSION >= 2007\n#  define inline __inline__   /* __inline__ prevents -pedantic warnings */\n# else\n#  define inline  /* nothing */\n# endif\n#endif\n\n/* Define macros for some gcc attributes.  This permits us to use the\n   macros freely, and know that they will come into play for the\n   version of gcc in which they are supported.  */\n\n#if (GCC_VERSION < 2007)\n# define __attribute__(x)\n#endif\n\n/* Attribute __malloc__ on functions was valid as of gcc 2.96. */\n#ifndef ATTRIBUTE_MALLOC\n# if (GCC_VERSION >= 2096)\n#  define ATTRIBUTE_MALLOC __attribute__ ((__malloc__))\n# else\n#  define ATTRIBUTE_MALLOC\n# endif /* GNUC >= 2.96 */\n#endif /* ATTRIBUTE_MALLOC */\n\n/* Attributes on labels were valid as of gcc 2.93 and g++ 4.5.  For\n   g++ an attribute on a label must be followed by a semicolon.  */\n#ifndef ATTRIBUTE_UNUSED_LABEL\n# ifndef __cplusplus\n#  if GCC_VERSION >= 2093\n#   define ATTRIBUTE_UNUSED_LABEL ATTRIBUTE_UNUSED\n#  else\n#   define ATTRIBUTE_UNUSED_LABEL\n#  endif\n# else\n#  if GCC_VERSION >= 4005\n#   define ATTRIBUTE_UNUSED_LABEL ATTRIBUTE_UNUSED ;\n#  else\n#   define ATTRIBUTE_UNUSED_LABEL\n#  endif\n# endif\n#endif\n\n/* Similarly to ARG_UNUSED below.  Prior to GCC 3.4, the C++ frontend\n   couldn't parse attributes placed after the identifier name, and now\n   the entire compiler is built with C++.  */\n#ifndef ATTRIBUTE_UNUSED\n#if GCC_VERSION >= 3004\n#  define ATTRIBUTE_UNUSED __attribute__ ((__unused__))\n#else\n#define ATTRIBUTE_UNUSED\n#endif\n#endif /* ATTRIBUTE_UNUSED */\n\n/* Before GCC 3.4, the C++ frontend couldn't parse attributes placed after the\n   identifier name.  */\n#if ! defined(__cplusplus) || (GCC_VERSION >= 3004)\n# define ARG_UNUSED(NAME) NAME ATTRIBUTE_UNUSED\n#else /* !__cplusplus || GNUC >= 3.4 */\n# define ARG_UNUSED(NAME) NAME\n#endif /* !__cplusplus || GNUC >= 3.4 */\n\n#ifndef ATTRIBUTE_NORETURN\n#define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))\n#endif /* ATTRIBUTE_NORETURN */\n\n/* Attribute `nonnull' was valid as of gcc 3.3.  */\n#ifndef ATTRIBUTE_NONNULL\n# if (GCC_VERSION >= 3003)\n#  define ATTRIBUTE_NONNULL(m) __attribute__ ((__nonnull__ (m)))\n# else\n#  define ATTRIBUTE_NONNULL(m)\n# endif /* GNUC >= 3.3 */\n#endif /* ATTRIBUTE_NONNULL */\n\n/* Attribute `returns_nonnull' was valid as of gcc 4.9.  */\n#ifndef ATTRIBUTE_RETURNS_NONNULL\n# if (GCC_VERSION >= 4009)\n#  define ATTRIBUTE_RETURNS_NONNULL __attribute__ ((__returns_nonnull__))\n# else\n#  define ATTRIBUTE_RETURNS_NONNULL\n# endif /* GNUC >= 4.9 */\n#endif /* ATTRIBUTE_RETURNS_NONNULL */\n\n/* Attribute `pure' was valid as of gcc 3.0.  */\n#ifndef ATTRIBUTE_PURE\n# if (GCC_VERSION >= 3000)\n#  define ATTRIBUTE_PURE __attribute__ ((__pure__))\n# else\n#  define ATTRIBUTE_PURE\n# endif /* GNUC >= 3.0 */\n#endif /* ATTRIBUTE_PURE */\n\n/* Use ATTRIBUTE_PRINTF when the format specifier must not be NULL.\n   This was the case for the `printf' format attribute by itself\n   before GCC 3.3, but as of 3.3 we need to add the `nonnull'\n   attribute to retain this behavior.  */\n#ifndef ATTRIBUTE_PRINTF\n#define ATTRIBUTE_PRINTF(m, n) __attribute__ ((__format__ (__printf__, m, n))) ATTRIBUTE_NONNULL(m)\n#define ATTRIBUTE_PRINTF_1 ATTRIBUTE_PRINTF(1, 2)\n#define ATTRIBUTE_PRINTF_2 ATTRIBUTE_PRINTF(2, 3)\n#define ATTRIBUTE_PRINTF_3 ATTRIBUTE_PRINTF(3, 4)\n#define ATTRIBUTE_PRINTF_4 ATTRIBUTE_PRINTF(4, 5)\n#define ATTRIBUTE_PRINTF_5 ATTRIBUTE_PRINTF(5, 6)\n#endif /* ATTRIBUTE_PRINTF */\n\n/* Use ATTRIBUTE_FPTR_PRINTF when the format attribute is to be set on\n   a function pointer.  Format attributes were allowed on function\n   pointers as of gcc 3.1.  */\n#ifndef ATTRIBUTE_FPTR_PRINTF\n# if (GCC_VERSION >= 3001)\n#  define ATTRIBUTE_FPTR_PRINTF(m, n) ATTRIBUTE_PRINTF(m, n)\n# else\n#  define ATTRIBUTE_FPTR_PRINTF(m, n)\n# endif /* GNUC >= 3.1 */\n# define ATTRIBUTE_FPTR_PRINTF_1 ATTRIBUTE_FPTR_PRINTF(1, 2)\n# define ATTRIBUTE_FPTR_PRINTF_2 ATTRIBUTE_FPTR_PRINTF(2, 3)\n# define ATTRIBUTE_FPTR_PRINTF_3 ATTRIBUTE_FPTR_PRINTF(3, 4)\n# define ATTRIBUTE_FPTR_PRINTF_4 ATTRIBUTE_FPTR_PRINTF(4, 5)\n# define ATTRIBUTE_FPTR_PRINTF_5 ATTRIBUTE_FPTR_PRINTF(5, 6)\n#endif /* ATTRIBUTE_FPTR_PRINTF */\n\n/* Use ATTRIBUTE_NULL_PRINTF when the format specifier may be NULL.  A\n   NULL format specifier was allowed as of gcc 3.3.  */\n#ifndef ATTRIBUTE_NULL_PRINTF\n# if (GCC_VERSION >= 3003)\n#  define ATTRIBUTE_NULL_PRINTF(m, n) __attribute__ ((__format__ (__printf__, m, n)))\n# else\n#  define ATTRIBUTE_NULL_PRINTF(m, n)\n# endif /* GNUC >= 3.3 */\n# define ATTRIBUTE_NULL_PRINTF_1 ATTRIBUTE_NULL_PRINTF(1, 2)\n# define ATTRIBUTE_NULL_PRINTF_2 ATTRIBUTE_NULL_PRINTF(2, 3)\n# define ATTRIBUTE_NULL_PRINTF_3 ATTRIBUTE_NULL_PRINTF(3, 4)\n# define ATTRIBUTE_NULL_PRINTF_4 ATTRIBUTE_NULL_PRINTF(4, 5)\n# define ATTRIBUTE_NULL_PRINTF_5 ATTRIBUTE_NULL_PRINTF(5, 6)\n#endif /* ATTRIBUTE_NULL_PRINTF */\n\n/* Attribute `sentinel' was valid as of gcc 3.5.  */\n#ifndef ATTRIBUTE_SENTINEL\n# if (GCC_VERSION >= 3005)\n#  define ATTRIBUTE_SENTINEL __attribute__ ((__sentinel__))\n# else\n#  define ATTRIBUTE_SENTINEL\n# endif /* GNUC >= 3.5 */\n#endif /* ATTRIBUTE_SENTINEL */\n\n\n#ifndef ATTRIBUTE_ALIGNED_ALIGNOF\n# if (GCC_VERSION >= 3000)\n#  define ATTRIBUTE_ALIGNED_ALIGNOF(m) __attribute__ ((__aligned__ (__alignof__ (m))))\n# else\n#  define ATTRIBUTE_ALIGNED_ALIGNOF(m)\n# endif /* GNUC >= 3.0 */\n#endif /* ATTRIBUTE_ALIGNED_ALIGNOF */\n\n/* Useful for structures whose layout must match some binary specification\n   regardless of the alignment and padding qualities of the compiler.  */\n#ifndef ATTRIBUTE_PACKED\n# define ATTRIBUTE_PACKED __attribute__ ((packed))\n#endif\n\n/* Attribute `hot' and `cold' was valid as of gcc 4.3.  */\n#ifndef ATTRIBUTE_COLD\n# if (GCC_VERSION >= 4003)\n#  define ATTRIBUTE_COLD __attribute__ ((__cold__))\n# else\n#  define ATTRIBUTE_COLD\n# endif /* GNUC >= 4.3 */\n#endif /* ATTRIBUTE_COLD */\n#ifndef ATTRIBUTE_HOT\n# if (GCC_VERSION >= 4003)\n#  define ATTRIBUTE_HOT __attribute__ ((__hot__))\n# else\n#  define ATTRIBUTE_HOT\n# endif /* GNUC >= 4.3 */\n#endif /* ATTRIBUTE_HOT */\n\n/* Attribute 'no_sanitize_undefined' was valid as of gcc 4.9.  */\n#ifndef ATTRIBUTE_NO_SANITIZE_UNDEFINED\n# if (GCC_VERSION >= 4009)\n#  define ATTRIBUTE_NO_SANITIZE_UNDEFINED __attribute__ ((no_sanitize_undefined))\n# else\n#  define ATTRIBUTE_NO_SANITIZE_UNDEFINED\n# endif /* GNUC >= 4.9 */\n#endif /* ATTRIBUTE_NO_SANITIZE_UNDEFINED */\n\n/* Attribute 'nonstring' was valid as of gcc 8.  */\n#ifndef ATTRIBUTE_NONSTRING\n# if GCC_VERSION >= 8000\n#  define ATTRIBUTE_NONSTRING __attribute__ ((__nonstring__))\n# else\n#  define ATTRIBUTE_NONSTRING\n# endif\n#endif\n\n/* Attribute `alloc_size' was valid as of gcc 4.3.  */\n#ifndef ATTRIBUTE_RESULT_SIZE_1\n# if (GCC_VERSION >= 4003)\n#  define ATTRIBUTE_RESULT_SIZE_1 __attribute__ ((alloc_size (1)))\n# else\n#  define ATTRIBUTE_RESULT_SIZE_1\n#endif\n#endif\n\n#ifndef ATTRIBUTE_RESULT_SIZE_2\n# if (GCC_VERSION >= 4003)\n#  define ATTRIBUTE_RESULT_SIZE_2 __attribute__ ((alloc_size (2)))\n# else\n#  define ATTRIBUTE_RESULT_SIZE_2\n#endif\n#endif\n\n#ifndef ATTRIBUTE_RESULT_SIZE_1_2\n# if (GCC_VERSION >= 4003)\n#  define ATTRIBUTE_RESULT_SIZE_1_2 __attribute__ ((alloc_size (1, 2)))\n# else\n#  define ATTRIBUTE_RESULT_SIZE_1_2\n#endif\n#endif\n\n/* Attribute `warn_unused_result' was valid as of gcc 3.3.  */\n#ifndef ATTRIBUTE_WARN_UNUSED_RESULT\n# if GCC_VERSION >= 3003\n#  define ATTRIBUTE_WARN_UNUSED_RESULT __attribute__ ((__warn_unused_result__))\n# else\n#  define ATTRIBUTE_WARN_UNUSED_RESULT\n# endif\n#endif\n\n/* We use __extension__ in some places to suppress -pedantic warnings\n   about GCC extensions.  This feature didn't work properly before\n   gcc 2.8.  */\n#if GCC_VERSION < 2008\n#define __extension__\n#endif\n\n/* This is used to declare a const variable which should be visible\n   outside of the current compilation unit.  Use it as\n     EXPORTED_CONST int i = 1;\n   This is because the semantics of const are different in C and C++.\n   \"extern const\" is permitted in C but it looks strange, and gcc\n   warns about it when -Wc++-compat is not used.  */\n#ifdef __cplusplus\n#define EXPORTED_CONST extern const\n#else\n#define EXPORTED_CONST const\n#endif\n\n/* Be conservative and only use enum bitfields with C++ or GCC.\n   FIXME: provide a complete autoconf test for buggy enum bitfields.  */\n\n#ifdef __cplusplus\n#define ENUM_BITFIELD(TYPE) enum TYPE\n#elif (GCC_VERSION > 2000)\n#define ENUM_BITFIELD(TYPE) __extension__ enum TYPE\n#else\n#define ENUM_BITFIELD(TYPE) unsigned int\n#endif\n\n#if defined(__cplusplus) && __cpp_constexpr >= 200704\n#define CONSTEXPR constexpr\n#else\n#define CONSTEXPR\n#endif\n\n/* A macro to disable the copy constructor and assignment operator.\n   When building with C++11 and above, the methods are explicitly\n   deleted, causing a compile-time error if something tries to copy.\n   For C++03, this just declares the methods, causing a link-time\n   error if the methods end up called (assuming you don't\n   define them).  For C++03, for best results, place the macro\n   under the private: access specifier, like this,\n\n   class name_lookup\n   {\n     private:\n       DISABLE_COPY_AND_ASSIGN (name_lookup);\n   };\n\n   so that most attempts at copy are caught at compile-time.  */\n\n#if defined(__cplusplus) && __cplusplus >= 201103\n#define DISABLE_COPY_AND_ASSIGN(TYPE)\t\t\\\n  TYPE (const TYPE&) = delete;\t\t\t\\\n  void operator= (const TYPE &) = delete\n  #else\n#define DISABLE_COPY_AND_ASSIGN(TYPE)\t\t\\\n  TYPE (const TYPE&);\t\t\t\t\\\n  void operator= (const TYPE &)\n#endif /* __cplusplus >= 201103 */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\t/* ansidecl.h\t*/\n"
  },
  {
    "path": "compat/compat.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n * Copyright (c) 2013 Drew Northup <n1xim.email@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_COMPAT_H\n#define TIG_COMPAT_H\n\n#ifndef HAVE_CONFIG_H\n/*\n * Enable inclusion of header files checked by configure.\n */\n#define HAVE_STDINT_H\n#define HAVE_STDLIB_H\n#define HAVE_STRING_H\n#define HAVE_SYS_TIME_H\n#define HAVE_UNISTD_H\n#define HAVE_WORDEXP_H\n#endif\n\n/*\n * XXX: Compatibility code must never be enabled by default.\n */\n\n#ifdef NO_MKSTEMPS\n#define mkstemps compat_mkstemps\nint compat_mkstemps(char *pattern, int suffix_len);\n#endif\n\n#ifdef NO_SETENV\n#define setenv compat_setenv\nint compat_setenv(const char *name, const char *value, int replace);\n#endif\n\n#ifdef NO_STRNDUP\n#include <stddef.h>\n#define strndup compat_strndup\nchar *compat_strndup(const char *s, size_t n);\n#endif\n\n#ifdef NO_WORDEXP\n#define wordexp compat_wordexp\n#define wordfree compat_wordfree\n#define WRDE_NOCMD 4\ntypedef struct\n{\n\tchar **we_wordv;\n} wordexp_t;\nint compat_wordexp (const char *words, wordexp_t *pwordexp, int flags);\nvoid compat_wordfree (wordexp_t *pwordexp);\n#else\n#include <wordexp.h>\n#endif\n\n#endif\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "compat/hashtab.c",
    "content": "/* An expandable hash tables datatype.\n   Copyright (C) 1999-2025 Free Software Foundation, Inc.\n   Contributed by Vladimir Makarov (vmakarov@cygnus.com).\n\nThis file is part of the libiberty library.\nLibiberty is free software; you can redistribute it and/or\nmodify it under the terms of the GNU Library General Public\nLicense as published by the Free Software Foundation; either\nversion 2 of the License, or (at your option) any later version.\n\nLibiberty is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\nLibrary General Public License for more details.\n\nYou should have received a copy of the GNU Library General Public\nLicense along with libiberty; see the file COPYING.LIB.  If\nnot, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,\nBoston, MA 02110-1301, USA.  */\n\n/* This package implements basic hash table functionality.  It is possible\n   to search for an entry, create an entry and destroy an entry.\n\n   Elements in the table are generic pointers.\n\n   The size of the table is not fixed; if the occupancy of the table\n   grows too high the hash table will be expanded.\n\n   The abstract data implementation is based on generalized Algorithm D\n   from Knuth's book \"The art of computer programming\".  Hash table is\n   expanded by creation of new hash table and transferring elements from\n   the old table to the new table. */\n\n#ifdef HAVE_CONFIG_H\n#include \"config.h\"\n#endif\n\n#include \"compat.h\"\n\n#include <sys/types.h>\n\n#ifdef HAVE_STDLIB_H\n#include <stdlib.h>\n#endif\n#ifdef HAVE_STRING_H\n#include <string.h>\n#endif\n#ifdef HAVE_MALLOC_H\n#include <malloc.h>\n#endif\n#ifdef HAVE_LIMITS_H\n#include <limits.h>\n#endif\n#ifdef HAVE_INTTYPES_H\n#include <inttypes.h>\n#endif\n#ifdef HAVE_STDINT_H\n#include <stdint.h>\n#endif\n\n#include <stdio.h>\n\n#if 0\n#include \"libiberty.h\"\n#endif\n#include \"ansidecl.h\"\n#include \"hashtab.h\"\n\n#ifndef CHAR_BIT\n#define CHAR_BIT 8\n#endif\n\nstatic unsigned int higher_prime_index (unsigned long);\nstatic hashval_t htab_mod_1 (hashval_t, hashval_t, hashval_t, int);\nstatic hashval_t htab_mod (hashval_t, htab_t);\nstatic hashval_t htab_mod_m2 (hashval_t, htab_t);\nstatic hashval_t hash_pointer (const void *);\nstatic int eq_pointer (const void *, const void *);\nstatic int htab_expand (htab_t);\nstatic void **find_empty_slot_for_expand (htab_t, hashval_t);\n\n/* At some point, we could make these be NULL, and modify the\n   hash-table routines to handle NULL specially; that would avoid\n   function-call overhead for the common case of hashing pointers.  */\nhtab_hash htab_hash_pointer = hash_pointer;\nhtab_eq htab_eq_pointer = eq_pointer;\n\n/* Table of primes and multiplicative inverses.\n\n   Note that these are not minimally reduced inverses.  Unlike when generating\n   code to divide by a constant, we want to be able to use the same algorithm\n   all the time.  All of these inverses (are implied to) have bit 32 set.\n\n   For the record, here's the function that computed the table; it's a\n   vastly simplified version of the function of the same name from gcc.  */\n\n#if 0\nunsigned int\nceil_log2 (unsigned int x)\n{\n  int i;\n  for (i = 31; i >= 0 ; --i)\n    if (x > (1u << i))\n      return i+1;\n  abort ();\n}\n\nunsigned int\nchoose_multiplier (unsigned int d, unsigned int *mlp, unsigned char *shiftp)\n{\n  unsigned long long mhigh;\n  double nx;\n  int lgup, post_shift;\n  int pow, pow2;\n  int n = 32, precision = 32;\n\n  lgup = ceil_log2 (d);\n  pow = n + lgup;\n  pow2 = n + lgup - precision;\n\n  nx = ldexp (1.0, pow) + ldexp (1.0, pow2);\n  mhigh = nx / d;\n\n  *shiftp = lgup - 1;\n  *mlp = mhigh;\n  return mhigh >> 32;\n}\n#endif\n\nstruct prime_ent\n{\n  hashval_t prime;\n  hashval_t inv;\n  hashval_t inv_m2;\t/* inverse of prime-2 */\n  hashval_t shift;\n};\n\nstatic struct prime_ent const prime_tab[] = {\n  {          7, 0x24924925, 0x9999999b, 2 },\n  {         13, 0x3b13b13c, 0x745d1747, 3 },\n  {         31, 0x08421085, 0x1a7b9612, 4 },\n  {         61, 0x0c9714fc, 0x15b1e5f8, 5 },\n  {        127, 0x02040811, 0x0624dd30, 6 },\n  {        251, 0x05197f7e, 0x073260a5, 7 },\n  {        509, 0x01824366, 0x02864fc8, 8 },\n  {       1021, 0x00c0906d, 0x014191f7, 9 },\n  {       2039, 0x0121456f, 0x0161e69e, 10 },\n  {       4093, 0x00300902, 0x00501908, 11 },\n  {       8191, 0x00080041, 0x00180241, 12 },\n  {      16381, 0x000c0091, 0x00140191, 13 },\n  {      32749, 0x002605a5, 0x002a06e6, 14 },\n  {      65521, 0x000f00e2, 0x00110122, 15 },\n  {     131071, 0x00008001, 0x00018003, 16 },\n  {     262139, 0x00014002, 0x0001c004, 17 },\n  {     524287, 0x00002001, 0x00006001, 18 },\n  {    1048573, 0x00003001, 0x00005001, 19 },\n  {    2097143, 0x00004801, 0x00005801, 20 },\n  {    4194301, 0x00000c01, 0x00001401, 21 },\n  {    8388593, 0x00001e01, 0x00002201, 22 },\n  {   16777213, 0x00000301, 0x00000501, 23 },\n  {   33554393, 0x00001381, 0x00001481, 24 },\n  {   67108859, 0x00000141, 0x000001c1, 25 },\n  {  134217689, 0x000004e1, 0x00000521, 26 },\n  {  268435399, 0x00000391, 0x000003b1, 27 },\n  {  536870909, 0x00000019, 0x00000029, 28 },\n  { 1073741789, 0x0000008d, 0x00000095, 29 },\n  { 2147483647, 0x00000003, 0x00000007, 30 },\n  /* Avoid \"decimal constant so large it is unsigned\" for 4294967291.  */\n  { 0xfffffffb, 0x00000006, 0x00000008, 31 }\n};\n\n/* The following function returns an index into the above table of the\n   nearest prime number which is greater than N, and near a power of two. */\n\nstatic unsigned int\nhigher_prime_index (unsigned long n)\n{\n  unsigned int low = 0;\n  unsigned int high = sizeof(prime_tab) / sizeof(prime_tab[0]);\n\n  while (low != high)\n    {\n      unsigned int mid = low + (high - low) / 2;\n      if (n > prime_tab[mid].prime)\n\tlow = mid + 1;\n      else\n\thigh = mid;\n    }\n\n  /* If we've run out of primes, abort.  */\n  if (n > prime_tab[low].prime)\n    {\n      fprintf (stderr, \"Cannot find prime bigger than %lu\\n\", n);\n      abort ();\n    }\n\n  return low;\n}\n\n/* Returns non-zero if P1 and P2 are equal.  */\n\nstatic int\neq_pointer (const void *p1, const void *p2)\n{\n  return p1 == p2;\n}\n\n\n/* The parens around the function names in the next two definitions\n   are essential in order to prevent macro expansions of the name.\n   The bodies, however, are expanded as expected, so they are not\n   recursive definitions.  */\n\n/* Return the current size of given hash table.  */\n\n#define htab_size(htab)  ((htab)->size)\n\nsize_t\n(htab_size) (htab_t htab)\n{\n  return htab_size (htab);\n}\n\n/* Return the current number of elements in given hash table. */\n\n#define htab_elements(htab)  ((htab)->n_elements - (htab)->n_deleted)\n\nsize_t\n(htab_elements) (htab_t htab)\n{\n  return htab_elements (htab);\n}\n\n/* Return X % Y.  */\n\nstatic inline hashval_t\nhtab_mod_1 (hashval_t x, hashval_t y, hashval_t inv, int shift)\n{\n  /* The multiplicative inverses computed above are for 32-bit types, and\n     requires that we be able to compute a highpart multiply.  */\n#ifdef UNSIGNED_64BIT_TYPE\n  __extension__ typedef UNSIGNED_64BIT_TYPE ull;\n  if (sizeof (hashval_t) * CHAR_BIT <= 32)\n    {\n      hashval_t t1, t2, t3, t4, q, r;\n\n      t1 = ((ull)x * inv) >> 32;\n      t2 = x - t1;\n      t3 = t2 >> 1;\n      t4 = t1 + t3;\n      q  = t4 >> shift;\n      r  = x - (q * y);\n\n      return r;\n    }\n#endif\n\n  /* Otherwise just use the native division routines.  */\n  return x % y;\n}\n\n/* Compute the primary hash for HASH given HTAB's current size.  */\n\nstatic inline hashval_t\nhtab_mod (hashval_t hash, htab_t htab)\n{\n  const struct prime_ent *p = &prime_tab[htab->size_prime_index];\n  return htab_mod_1 (hash, p->prime, p->inv, p->shift);\n}\n\n/* Compute the secondary hash for HASH given HTAB's current size.  */\n\nstatic inline hashval_t\nhtab_mod_m2 (hashval_t hash, htab_t htab)\n{\n  const struct prime_ent *p = &prime_tab[htab->size_prime_index];\n  return 1 + htab_mod_1 (hash, p->prime - 2, p->inv_m2, p->shift);\n}\n\n/* This function creates table with length slightly longer than given\n   source length.  Created hash table is initiated as empty (all the\n   hash table entries are HTAB_EMPTY_ENTRY).  The function returns the\n   created hash table, or NULL if memory allocation fails.  */\n\nhtab_t\nhtab_create_alloc (size_t size, htab_hash hash_f, htab_eq eq_f,\n                   htab_del del_f, htab_alloc alloc_f, htab_free free_f)\n{\n  return htab_create_typed_alloc (size, hash_f, eq_f, del_f, alloc_f, alloc_f,\n\t\t\t\t  free_f);\n}\n\n/* As above, but uses the variants of ALLOC_F and FREE_F which accept\n   an extra argument.  */\n\nhtab_t\nhtab_create_alloc_ex (size_t size, htab_hash hash_f, htab_eq eq_f,\n\t\t      htab_del del_f, void *alloc_arg,\n\t\t      htab_alloc_with_arg alloc_f,\n\t\t      htab_free_with_arg free_f)\n{\n  htab_t result;\n  unsigned int size_prime_index;\n\n  size_prime_index = higher_prime_index (size);\n  size = prime_tab[size_prime_index].prime;\n\n  result = (htab_t) (*alloc_f) (alloc_arg, 1, sizeof (struct htab));\n  if (result == NULL)\n    return NULL;\n  result->entries = (void **) (*alloc_f) (alloc_arg, size, sizeof (void *));\n  if (result->entries == NULL)\n    {\n      if (free_f != NULL)\n\t(*free_f) (alloc_arg, result);\n      return NULL;\n    }\n  result->size = size;\n  result->size_prime_index = size_prime_index;\n  result->hash_f = hash_f;\n  result->eq_f = eq_f;\n  result->del_f = del_f;\n  result->alloc_arg = alloc_arg;\n  result->alloc_with_arg_f = alloc_f;\n  result->free_with_arg_f = free_f;\n  return result;\n}\n\n/*\n\n@deftypefn Supplemental htab_t htab_create_typed_alloc (size_t @var{size}, @\nhtab_hash @var{hash_f}, htab_eq @var{eq_f}, htab_del @var{del_f}, @\nhtab_alloc @var{alloc_tab_f}, htab_alloc @var{alloc_f}, @\nhtab_free @var{free_f})\n\nThis function creates a hash table that uses two different allocators\n@var{alloc_tab_f} and @var{alloc_f} to use for allocating the table itself\nand its entries respectively.  This is useful when variables of different\ntypes need to be allocated with different allocators.\n\nThe created hash table is slightly larger than @var{size} and it is\ninitially empty (all the hash table entries are @code{HTAB_EMPTY_ENTRY}).\nThe function returns the created hash table, or @code{NULL} if memory\nallocation fails.\n\n@end deftypefn\n\n*/\n\nhtab_t\nhtab_create_typed_alloc (size_t size, htab_hash hash_f, htab_eq eq_f,\n\t\t\t htab_del del_f, htab_alloc alloc_tab_f,\n\t\t\t htab_alloc alloc_f, htab_free free_f)\n{\n  htab_t result;\n  unsigned int size_prime_index;\n\n  size_prime_index = higher_prime_index (size);\n  size = prime_tab[size_prime_index].prime;\n\n  result = (htab_t) (*alloc_tab_f) (1, sizeof (struct htab));\n  if (result == NULL)\n    return NULL;\n  result->entries = (void **) (*alloc_f) (size, sizeof (void *));\n  if (result->entries == NULL)\n    {\n      if (free_f != NULL)\n\t(*free_f) (result);\n      return NULL;\n    }\n  result->size = size;\n  result->size_prime_index = size_prime_index;\n  result->hash_f = hash_f;\n  result->eq_f = eq_f;\n  result->del_f = del_f;\n  result->alloc_f = alloc_f;\n  result->free_f = free_f;\n  return result;\n}\n\n\n/* Update the function pointers and allocation parameter in the htab_t.  */\n\nvoid\nhtab_set_functions_ex (htab_t htab, htab_hash hash_f, htab_eq eq_f,\n                       htab_del del_f, void *alloc_arg,\n                       htab_alloc_with_arg alloc_f, htab_free_with_arg free_f)\n{\n  htab->hash_f = hash_f;\n  htab->eq_f = eq_f;\n  htab->del_f = del_f;\n  htab->alloc_arg = alloc_arg;\n  htab->alloc_with_arg_f = alloc_f;\n  htab->free_with_arg_f = free_f;\n}\n\n/* These functions exist solely for backward compatibility.  */\n\n#undef htab_create\n#if 0\nhtab_t\nhtab_create (size_t size, htab_hash hash_f, htab_eq eq_f, htab_del del_f)\n{\n  return htab_create_alloc (size, hash_f, eq_f, del_f, xcalloc, free);\n}\n\nhtab_t\nhtab_try_create (size_t size, htab_hash hash_f, htab_eq eq_f, htab_del del_f)\n{\n  return htab_create_alloc (size, hash_f, eq_f, del_f, calloc, free);\n}\n#endif\n\n/* This function frees all memory allocated for given hash table.\n   Naturally the hash table must already exist. */\n\nvoid\nhtab_delete (htab_t htab)\n{\n  size_t size = htab_size (htab);\n  void **entries = htab->entries;\n  int i;\n\n  if (htab->del_f)\n    for (i = size - 1; i >= 0; i--)\n      if (entries[i] != HTAB_EMPTY_ENTRY && entries[i] != HTAB_DELETED_ENTRY)\n\t(*htab->del_f) (entries[i]);\n\n  if (htab->free_f != NULL)\n    {\n      (*htab->free_f) (entries);\n      (*htab->free_f) (htab);\n    }\n  else if (htab->free_with_arg_f != NULL)\n    {\n      (*htab->free_with_arg_f) (htab->alloc_arg, entries);\n      (*htab->free_with_arg_f) (htab->alloc_arg, htab);\n    }\n}\n\n/* This function clears all entries in the given hash table.  */\n\nvoid\nhtab_empty (htab_t htab)\n{\n  size_t size = htab_size (htab);\n  void **entries = htab->entries;\n  int i;\n\n  if (htab->del_f)\n    for (i = size - 1; i >= 0; i--)\n      if (entries[i] != HTAB_EMPTY_ENTRY && entries[i] != HTAB_DELETED_ENTRY)\n\t(*htab->del_f) (entries[i]);\n\n  /* Instead of clearing megabyte, downsize the table.  */\n  if (size > 1024*1024 / sizeof (void *))\n    {\n      int nindex = higher_prime_index (1024 / sizeof (void *));\n      int nsize = prime_tab[nindex].prime;\n\n      if (htab->free_f != NULL)\n\t(*htab->free_f) (htab->entries);\n      else if (htab->free_with_arg_f != NULL)\n\t(*htab->free_with_arg_f) (htab->alloc_arg, htab->entries);\n      if (htab->alloc_with_arg_f != NULL)\n\thtab->entries = (void **) (*htab->alloc_with_arg_f) (htab->alloc_arg, nsize,\n\t\t\t\t\t\t\t     sizeof (void *));\n      else\n\thtab->entries = (void **) (*htab->alloc_f) (nsize, sizeof (void *));\n     htab->size = nsize;\n     htab->size_prime_index = nindex;\n    }\n  else\n    memset (entries, 0, size * sizeof (void *));\n  htab->n_deleted = 0;\n  htab->n_elements = 0;\n}\n\n/* Similar to htab_find_slot, but without several unwanted side effects:\n    - Does not call htab->eq_f when it finds an existing entry.\n    - Does not change the count of elements/searches/collisions in the\n      hash table.\n   This function also assumes there are no deleted entries in the table.\n   HASH is the hash value for the element to be inserted.  */\n\nstatic void **\nfind_empty_slot_for_expand (htab_t htab, hashval_t hash)\n{\n  hashval_t index = htab_mod (hash, htab);\n  size_t size = htab_size (htab);\n  void **slot = htab->entries + index;\n  hashval_t hash2;\n\n  if (*slot == HTAB_EMPTY_ENTRY)\n    return slot;\n  else if (*slot == HTAB_DELETED_ENTRY)\n    abort ();\n\n  hash2 = htab_mod_m2 (hash, htab);\n  for (;;)\n    {\n      index += hash2;\n      if (index >= size)\n\tindex -= size;\n\n      slot = htab->entries + index;\n      if (*slot == HTAB_EMPTY_ENTRY)\n\treturn slot;\n      else if (*slot == HTAB_DELETED_ENTRY)\n\tabort ();\n    }\n}\n\n/* The following function changes size of memory allocated for the\n   entries and repeatedly inserts the table elements.  The occupancy\n   of the table after the call will be about 50%.  Naturally the hash\n   table must already exist.  Remember also that the place of the\n   table entries is changed.  If memory allocation failures are allowed,\n   this function will return zero, indicating that the table could not be\n   expanded.  If all goes well, it will return a non-zero value.  */\n\nstatic int\nhtab_expand (htab_t htab)\n{\n  void **oentries;\n  void **olimit;\n  void **p;\n  void **nentries;\n  size_t nsize, osize, elts;\n  unsigned int oindex, nindex;\n\n  oentries = htab->entries;\n  oindex = htab->size_prime_index;\n  osize = htab->size;\n  olimit = oentries + osize;\n  elts = htab_elements (htab);\n\n  /* Resize only when table after removal of unused elements is either\n     too full or too empty.  */\n  if (elts * 2 > osize || (elts * 8 < osize && osize > 32))\n    {\n      nindex = higher_prime_index (elts * 2);\n      nsize = prime_tab[nindex].prime;\n    }\n  else\n    {\n      nindex = oindex;\n      nsize = osize;\n    }\n\n  if (htab->alloc_with_arg_f != NULL)\n    nentries = (void **) (*htab->alloc_with_arg_f) (htab->alloc_arg, nsize,\n\t\t\t\t\t\t    sizeof (void *));\n  else\n    nentries = (void **) (*htab->alloc_f) (nsize, sizeof (void *));\n  if (nentries == NULL)\n    return 0;\n  htab->entries = nentries;\n  htab->size = nsize;\n  htab->size_prime_index = nindex;\n  htab->n_elements -= htab->n_deleted;\n  htab->n_deleted = 0;\n\n  p = oentries;\n  do\n    {\n      void *x = *p;\n\n      if (x != HTAB_EMPTY_ENTRY && x != HTAB_DELETED_ENTRY)\n\t{\n\t  void **q = find_empty_slot_for_expand (htab, (*htab->hash_f) (x));\n\n\t  *q = x;\n\t}\n\n      p++;\n    }\n  while (p < olimit);\n\n  if (htab->free_f != NULL)\n    (*htab->free_f) (oentries);\n  else if (htab->free_with_arg_f != NULL)\n    (*htab->free_with_arg_f) (htab->alloc_arg, oentries);\n  return 1;\n}\n\n/* This function searches for a hash table entry equal to the given\n   element.  It cannot be used to insert or delete an element.  */\n\nvoid *\nhtab_find_with_hash (htab_t htab, const void *element, hashval_t hash)\n{\n  hashval_t index, hash2;\n  size_t size;\n  void *entry;\n\n  htab->searches++;\n  size = htab_size (htab);\n  index = htab_mod (hash, htab);\n\n  entry = htab->entries[index];\n  if (entry == HTAB_EMPTY_ENTRY\n      || (entry != HTAB_DELETED_ENTRY && (*htab->eq_f) (entry, element)))\n    return entry;\n\n  hash2 = htab_mod_m2 (hash, htab);\n  for (;;)\n    {\n      htab->collisions++;\n      index += hash2;\n      if (index >= size)\n\tindex -= size;\n\n      entry = htab->entries[index];\n      if (entry == HTAB_EMPTY_ENTRY\n\t  || (entry != HTAB_DELETED_ENTRY && (*htab->eq_f) (entry, element)))\n\treturn entry;\n    }\n}\n\n/* Like htab_find_slot_with_hash, but compute the hash value from the\n   element.  */\n\nvoid *\nhtab_find (htab_t htab, const void *element)\n{\n  return htab_find_with_hash (htab, element, (*htab->hash_f) (element));\n}\n\n/* This function searches for a hash table slot containing an entry\n   equal to the given element.  To delete an entry, call this with\n   insert=NO_INSERT, then call htab_clear_slot on the slot returned\n   (possibly after doing some checks).  To insert an entry, call this\n   with insert=INSERT, then write the value you want into the returned\n   slot.  When inserting an entry, NULL may be returned if memory\n   allocation fails.  */\n\nvoid **\nhtab_find_slot_with_hash (htab_t htab, const void *element,\n                          hashval_t hash, enum insert_option insert)\n{\n  void **first_deleted_slot;\n  hashval_t index, hash2;\n  size_t size;\n  void *entry;\n\n  size = htab_size (htab);\n  if (insert == INSERT && size * 3 <= htab->n_elements * 4)\n    {\n      if (htab_expand (htab) == 0)\n\treturn NULL;\n      size = htab_size (htab);\n    }\n\n  index = htab_mod (hash, htab);\n\n  htab->searches++;\n  first_deleted_slot = NULL;\n\n  entry = htab->entries[index];\n  if (entry == HTAB_EMPTY_ENTRY)\n    goto empty_entry;\n  else if (entry == HTAB_DELETED_ENTRY)\n    first_deleted_slot = &htab->entries[index];\n  else if ((*htab->eq_f) (entry, element))\n    return &htab->entries[index];\n\n  hash2 = htab_mod_m2 (hash, htab);\n  for (;;)\n    {\n      htab->collisions++;\n      index += hash2;\n      if (index >= size)\n\tindex -= size;\n\n      entry = htab->entries[index];\n      if (entry == HTAB_EMPTY_ENTRY)\n\tgoto empty_entry;\n      else if (entry == HTAB_DELETED_ENTRY)\n\t{\n\t  if (!first_deleted_slot)\n\t    first_deleted_slot = &htab->entries[index];\n\t}\n      else if ((*htab->eq_f) (entry, element))\n\treturn &htab->entries[index];\n    }\n\n empty_entry:\n  if (insert == NO_INSERT)\n    return NULL;\n\n  if (first_deleted_slot)\n    {\n      htab->n_deleted--;\n      *first_deleted_slot = HTAB_EMPTY_ENTRY;\n      return first_deleted_slot;\n    }\n\n  htab->n_elements++;\n  return &htab->entries[index];\n}\n\n/* Like htab_find_slot_with_hash, but compute the hash value from the\n   element.  */\n\nvoid **\nhtab_find_slot (htab_t htab, const void *element, enum insert_option insert)\n{\n  return htab_find_slot_with_hash (htab, element, (*htab->hash_f) (element),\n\t\t\t\t   insert);\n}\n\n/* This function deletes an element with the given value from hash\n   table (the hash is computed from the element).  If there is no matching\n   element in the hash table, this function does nothing.  */\n\nvoid\nhtab_remove_elt (htab_t htab, const void *element)\n{\n  htab_remove_elt_with_hash (htab, element, (*htab->hash_f) (element));\n}\n\n\n/* This function deletes an element with the given value from hash\n   table.  If there is no matching element in the hash table, this\n   function does nothing.  */\n\nvoid\nhtab_remove_elt_with_hash (htab_t htab, const void *element, hashval_t hash)\n{\n  void **slot;\n\n  slot = htab_find_slot_with_hash (htab, element, hash, NO_INSERT);\n  if (slot == NULL)\n    return;\n\n  if (htab->del_f)\n    (*htab->del_f) (*slot);\n\n  *slot = HTAB_DELETED_ENTRY;\n  htab->n_deleted++;\n}\n\n/* This function clears a specified slot in a hash table.  It is\n   useful when you've already done the lookup and don't want to do it\n   again.  */\n\nvoid\nhtab_clear_slot (htab_t htab, void **slot)\n{\n  if (slot < htab->entries || slot >= htab->entries + htab_size (htab)\n      || *slot == HTAB_EMPTY_ENTRY || *slot == HTAB_DELETED_ENTRY)\n    abort ();\n\n  if (htab->del_f)\n    (*htab->del_f) (*slot);\n\n  *slot = HTAB_DELETED_ENTRY;\n  htab->n_deleted++;\n}\n\n/* This function scans over the entire hash table calling\n   CALLBACK for each live entry.  If CALLBACK returns false,\n   the iteration stops.  INFO is passed as CALLBACK's second\n   argument.  */\n\nvoid\nhtab_traverse_noresize (htab_t htab, htab_trav callback, void *info)\n{\n  void **slot;\n  void **limit;\n\n  slot = htab->entries;\n  limit = slot + htab_size (htab);\n\n  do\n    {\n      void *x = *slot;\n\n      if (x != HTAB_EMPTY_ENTRY && x != HTAB_DELETED_ENTRY)\n\tif (!(*callback) (slot, info))\n\t  break;\n    }\n  while (++slot < limit);\n}\n\n/* Like htab_traverse_noresize, but does resize the table when it is\n   too empty to improve effectivity of subsequent calls.  */\n\nvoid\nhtab_traverse (htab_t htab, htab_trav callback, void *info)\n{\n  size_t size = htab_size (htab);\n  if (htab_elements (htab) * 8 < size && size > 32)\n    htab_expand (htab);\n\n  htab_traverse_noresize (htab, callback, info);\n}\n\n/* Return the fraction of fixed collisions during all work with given\n   hash table. */\n\ndouble\nhtab_collisions (htab_t htab)\n{\n  if (htab->searches == 0)\n    return 0.0;\n\n  return (double) htab->collisions / (double) htab->searches;\n}\n\n/* Hash P as a null-terminated string.\n\n   Copied from gcc/hashtable.c.  Zack had the following to say with respect\n   to applicability, though note that unlike hashtable.c, this hash table\n   implementation re-hashes rather than chain buckets.\n\n   http://gcc.gnu.org/ml/gcc-patches/2001-08/msg01021.html\n   From: Zack Weinberg <zackw@panix.com>\n   Date: Fri, 17 Aug 2001 02:15:56 -0400\n\n   I got it by extracting all the identifiers from all the source code\n   I had lying around in mid-1999, and testing many recurrences of\n   the form \"H_n = H_{n-1} * K + c_n * L + M\" where K, L, M were either\n   prime numbers or the appropriate identity.  This was the best one.\n   I don't remember exactly what constituted \"best\", except I was\n   looking at bucket-length distributions mostly.\n\n   So it should be very good at hashing identifiers, but might not be\n   as good at arbitrary strings.\n\n   I'll add that it thoroughly trounces the hash functions recommended\n   for this use at http://burtleburtle.net/bob/hash/index.html, both\n   on speed and bucket distribution.  I haven't tried it against the\n   function they just started using for Perl's hashes.  */\n\nhashval_t\nhtab_hash_string (const void *p)\n{\n  const unsigned char *str = (const unsigned char *) p;\n  hashval_t r = 0;\n  unsigned char c;\n\n  while ((c = *str++) != 0)\n    r = r * 67 + c - 113;\n\n  return r;\n}\n\n/* An equality function for null-terminated strings.  */\nint\nhtab_eq_string (const void *a, const void *b)\n{\n  return strcmp ((const char *) a, (const char *) b) == 0;\n}\n\n/* DERIVED FROM:\n--------------------------------------------------------------------\nlookup2.c, by Bob Jenkins, December 1996, Public Domain.\nhash(), hash2(), hash3, and mix() are externally useful functions.\nRoutines to test the hash are included if SELF_TEST is defined.\nYou can use this free for any purpose.  It has no warranty.\n--------------------------------------------------------------------\n*/\n\n/*\n--------------------------------------------------------------------\nmix -- mix 3 32-bit values reversibly.\nFor every delta with one or two bit set, and the deltas of all three\n  high bits or all three low bits, whether the original value of a,b,c\n  is almost all zero or is uniformly distributed,\n* If mix() is run forward or backward, at least 32 bits in a,b,c\n  have at least 1/4 probability of changing.\n* If mix() is run forward, every bit of c will change between 1/3 and\n  2/3 of the time.  (Well, 22/100 and 78/100 for some 2-bit deltas.)\nmix() was built out of 36 single-cycle latency instructions in a\n  structure that could supported 2x parallelism, like so:\n      a -= b;\n      a -= c; x = (c>>13);\n      b -= c; a ^= x;\n      b -= a; x = (a<<8);\n      c -= a; b ^= x;\n      c -= b; x = (b>>13);\n      ...\n  Unfortunately, superscalar Pentiums and Sparcs can't take advantage\n  of that parallelism.  They've also turned some of those single-cycle\n  latency instructions into multi-cycle latency instructions.  Still,\n  this is the fastest good hash I could find.  There were about 2^^68\n  to choose from.  I only looked at a billion or so.\n--------------------------------------------------------------------\n*/\n/* same, but slower, works on systems that might have 8 byte hashval_t's */\n#define mix(a,b,c) \\\n{ \\\n  a -= b; a -= c; a ^= (c>>13); \\\n  b -= c; b -= a; b ^= (a<< 8); \\\n  c -= a; c -= b; c ^= ((b&0xffffffff)>>13); \\\n  a -= b; a -= c; a ^= ((c&0xffffffff)>>12); \\\n  b -= c; b -= a; b = (b ^ (a<<16)) & 0xffffffff; \\\n  c -= a; c -= b; c = (c ^ (b>> 5)) & 0xffffffff; \\\n  a -= b; a -= c; a = (a ^ (c>> 3)) & 0xffffffff; \\\n  b -= c; b -= a; b = (b ^ (a<<10)) & 0xffffffff; \\\n  c -= a; c -= b; c = (c ^ (b>>15)) & 0xffffffff; \\\n}\n\n/*\n--------------------------------------------------------------------\nhash() -- hash a variable-length key into a 32-bit value\n  k     : the key (the unaligned variable-length array of bytes)\n  len   : the length of the key, counting by bytes\n  level : can be any 4-byte value\nReturns a 32-bit value.  Every bit of the key affects every bit of\nthe return value.  Every 1-bit and 2-bit delta achieves avalanche.\nAbout 36+6len instructions.\n\nThe best hash table sizes are powers of 2.  There is no need to do\nmod a prime (mod is sooo slow!).  If you need less than 32 bits,\nuse a bitmask.  For example, if you need only 10 bits, do\n  h = (h & hashmask(10));\nIn which case, the hash table should have hashsize(10) elements.\n\nIf you are hashing n strings (ub1 **)k, do it like this:\n  for (i=0, h=0; i<n; ++i) h = hash( k[i], len[i], h);\n\nBy Bob Jenkins, 1996.  bob_jenkins@burtleburtle.net.  You may use this\ncode any way you wish, private, educational, or commercial.  It's free.\n\nSee http://burtleburtle.net/bob/hash/evahash.html\nUse for hash table lookup, or anything where one collision in 2^32 is\nacceptable.  Do NOT use for cryptographic purposes.\n--------------------------------------------------------------------\n*/\n\nhashval_t\niterative_hash (const void *k_in /* the key */,\n                register size_t  length /* the length of the key */,\n                register hashval_t initval /* the previous hash, or\n                                              an arbitrary value */)\n{\n  register const unsigned char *k = (const unsigned char *)k_in;\n  register hashval_t a,b,c,len;\n\n  /* Set up the internal state */\n  len = length;\n  a = b = 0x9e3779b9;  /* the golden ratio; an arbitrary value */\n  c = initval;           /* the previous hash value */\n\n  /*---------------------------------------- handle most of the key */\n  /* Provide specialization for the aligned case for targets that cannot\n     efficiently perform misaligned loads of a merged access.  */\n  if ((((size_t)k)&3) == 0)\n    while (len >= 12)\n      {\n\ta += (k[0] | ((hashval_t)k[1]<<8) | ((hashval_t)k[2]<<16) | ((hashval_t)k[3]<<24));\n\tb += (k[4] | ((hashval_t)k[5]<<8) | ((hashval_t)k[6]<<16) | ((hashval_t)k[7]<<24));\n\tc += (k[8] | ((hashval_t)k[9]<<8) | ((hashval_t)k[10]<<16)| ((hashval_t)k[11]<<24));\n\tmix(a,b,c);\n\tk += 12; len -= 12;\n      }\n  else /* unaligned */\n    while (len >= 12)\n      {\n\ta += (k[0] | ((hashval_t)k[1]<<8) | ((hashval_t)k[2]<<16) | ((hashval_t)k[3]<<24));\n\tb += (k[4] | ((hashval_t)k[5]<<8) | ((hashval_t)k[6]<<16) | ((hashval_t)k[7]<<24));\n\tc += (k[8] | ((hashval_t)k[9]<<8) | ((hashval_t)k[10]<<16)| ((hashval_t)k[11]<<24));\n\tmix(a,b,c);\n\tk += 12; len -= 12;\n      }\n\n  /*------------------------------------- handle the last 11 bytes */\n  c += length;\n  switch(len)              /* all the case statements fall through */\n    {\n    case 11: c+=((hashval_t)k[10]<<24);\t/* fall through */\n    case 10: c+=((hashval_t)k[9]<<16);\t/* fall through */\n    case 9 : c+=((hashval_t)k[8]<<8);\t/* fall through */\n      /* the first byte of c is reserved for the length */\n    case 8 : b+=((hashval_t)k[7]<<24);\t/* fall through */\n    case 7 : b+=((hashval_t)k[6]<<16);\t/* fall through */\n    case 6 : b+=((hashval_t)k[5]<<8);\t/* fall through */\n    case 5 : b+=k[4];\t\t\t/* fall through */\n    case 4 : a+=((hashval_t)k[3]<<24);\t/* fall through */\n    case 3 : a+=((hashval_t)k[2]<<16);\t/* fall through */\n    case 2 : a+=((hashval_t)k[1]<<8);\t/* fall through */\n    case 1 : a+=k[0];\n      /* case 0: nothing left to add */\n    }\n  mix(a,b,c);\n  /*-------------------------------------------- report the result */\n  return c;\n}\n\n/* Returns a hash code for pointer P. Simplified version of evahash */\n\nstatic hashval_t\nhash_pointer (const void *p)\n{\n  intptr_t v = (intptr_t) p;\n  unsigned a, b, c;\n\n  a = b = 0x9e3779b9;\n  a += v >> (sizeof (intptr_t) * CHAR_BIT / 2);\n  b += v & (((intptr_t) 1 << (sizeof (intptr_t) * CHAR_BIT / 2)) - 1);\n  c = 0x42135234;\n  mix (a, b, c);\n  return c;\n}\n"
  },
  {
    "path": "compat/hashtab.h",
    "content": "/* An expandable hash tables datatype.\n   Copyright (C) 1999-2025 Free Software Foundation, Inc.\n   Contributed by Vladimir Makarov (vmakarov@cygnus.com).\n\nThis program is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program; if not, write to the Free Software\nFoundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */\n\n/* This package implements basic hash table functionality.  It is possible\n   to search for an entry, create an entry and destroy an entry.\n\n   Elements in the table are generic pointers.\n\n   The size of the table is not fixed; if the occupancy of the table\n   grows too high the hash table will be expanded.\n\n   The abstract data implementation is based on generalized Algorithm D\n   from Knuth's book \"The art of computer programming\".  Hash table is\n   expanded by creation of new hash table and transferring elements from\n   the old table to the new table.  */\n\n#ifndef __HASHTAB_H__\n#define __HASHTAB_H__\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif /* __cplusplus */\n\n#include \"ansidecl.h\"\n\n/* The type for a hash code.  */\ntypedef unsigned int hashval_t;\n\n/* Callback function pointer types.  */\n\n/* Calculate hash of a table entry.  */\ntypedef hashval_t (*htab_hash) (const void *);\n\n/* Compare a table entry with a possible entry.  The entry already in\n   the table always comes first, so the second element can be of a\n   different type (but in this case htab_find and htab_find_slot\n   cannot be used; instead the variants that accept a hash value\n   must be used).  */\ntypedef int (*htab_eq) (const void *, const void *);\n\n/* Cleanup function called whenever a live element is removed from\n   the hash table.  */\ntypedef void (*htab_del) (void *);\n\n/* Function called by htab_traverse for each live element.  The first\n   arg is the slot of the element (which can be passed to htab_clear_slot\n   if desired), the second arg is the auxiliary pointer handed to\n   htab_traverse.  Return 1 to continue scan, 0 to stop.  */\ntypedef int (*htab_trav) (void **, void *);\n\n/* Memory-allocation function, with the same functionality as calloc().\n   Iff it returns NULL, the hash table implementation will pass an error\n   code back to the user, so if your code doesn't handle errors,\n   best if you use xcalloc instead.  */\ntypedef void *(*htab_alloc) (size_t, size_t);\n\n/* We also need a free() routine.  */\ntypedef void (*htab_free) (void *);\n\n/* Memory allocation and deallocation; variants which take an extra\n   argument.  */\ntypedef void *(*htab_alloc_with_arg) (void *, size_t, size_t);\ntypedef void (*htab_free_with_arg) (void *, void *);\n\n/* This macro defines reserved value for empty table entry.  */\n\n#define HTAB_EMPTY_ENTRY    ((void *) 0)\n\n/* This macro defines reserved value for table entry which contained\n   a deleted element. */\n\n#define HTAB_DELETED_ENTRY  ((void *) 1)\n\n/* Hash tables are of the following type.  The structure\n   (implementation) of this type is not needed for using the hash\n   tables.  All work with hash table should be executed only through\n   functions mentioned below.  The size of this structure is subject to\n   change.  */\n\nstruct htab {\n  /* Pointer to hash function.  */\n  htab_hash hash_f;\n\n  /* Pointer to comparison function.  */\n  htab_eq eq_f;\n\n  /* Pointer to cleanup function.  */\n  htab_del del_f;\n\n  /* Table itself.  */\n  void **entries;\n\n  /* Current size (in entries) of the hash table.  */\n  size_t size;\n\n  /* Current number of elements including also deleted elements.  */\n  size_t n_elements;\n\n  /* Current number of deleted elements in the table.  */\n  size_t n_deleted;\n\n  /* The following member is used for debugging. Its value is number\n     of all calls of `htab_find_slot' for the hash table. */\n  unsigned int searches;\n\n  /* The following member is used for debugging.  Its value is number\n     of collisions fixed for time of work with the hash table. */\n  unsigned int collisions;\n\n  /* Pointers to allocate/free functions.  */\n  htab_alloc alloc_f;\n  htab_free free_f;\n\n  /* Alternate allocate/free functions, which take an extra argument.  */\n  void *alloc_arg;\n  htab_alloc_with_arg alloc_with_arg_f;\n  htab_free_with_arg free_with_arg_f;\n\n  /* Current size (in entries) of the hash table, as an index into the\n     table of primes.  */\n  unsigned int size_prime_index;\n};\n\ntypedef struct htab *htab_t;\n\n/* An enum saying whether we insert into the hash table or not.  */\nenum insert_option {NO_INSERT, INSERT};\n\n/* The prototypes of the package functions. */\n\nextern htab_t\thtab_create_alloc  (size_t, htab_hash,\n                                    htab_eq, htab_del,\n                                    htab_alloc, htab_free);\n\nextern htab_t\thtab_create_alloc_ex (size_t, htab_hash,\n                                      htab_eq, htab_del,\n                                      void *, htab_alloc_with_arg,\n                                      htab_free_with_arg);\n\nextern htab_t  htab_create_typed_alloc (size_t, htab_hash, htab_eq, htab_del,\n\t\t\t\t\thtab_alloc, htab_alloc, htab_free);\n\n/* Backward-compatibility functions.  */\nextern htab_t htab_create (size_t, htab_hash, htab_eq, htab_del);\nextern htab_t htab_try_create (size_t, htab_hash, htab_eq, htab_del);\n\nextern void\thtab_set_functions_ex (htab_t, htab_hash,\n                                       htab_eq, htab_del,\n                                       void *, htab_alloc_with_arg,\n                                       htab_free_with_arg);\n\nextern void\thtab_delete (htab_t);\nextern void\thtab_empty (htab_t);\n\nextern void *\thtab_find (htab_t, const void *);\nextern void **\thtab_find_slot (htab_t, const void *, enum insert_option);\nextern void *\thtab_find_with_hash (htab_t, const void *, hashval_t);\nextern void **\thtab_find_slot_with_hash (htab_t, const void *,\n\t\t\t\t\t  hashval_t, enum insert_option);\nextern void\thtab_clear_slot\t(htab_t, void **);\nextern void\thtab_remove_elt\t(htab_t, const void *);\nextern void\thtab_remove_elt_with_hash (htab_t, const void *, hashval_t);\n\nextern void\thtab_traverse (htab_t, htab_trav, void *);\nextern void\thtab_traverse_noresize (htab_t, htab_trav, void *);\n\nextern size_t\thtab_size (htab_t);\nextern size_t\thtab_elements (htab_t);\nextern double\thtab_collisions\t(htab_t);\n\n/* A hash function for pointers.  */\nextern htab_hash htab_hash_pointer;\n\n/* An equality function for pointers.  */\nextern htab_eq htab_eq_pointer;\n\n/* A hash function for null-terminated strings.  */\nextern hashval_t htab_hash_string (const void *);\n\n/* An equality function for null-terminated strings.  */\nextern int htab_eq_string (const void *, const void *);\n\n/* An iterative hash function for arbitrary data.  */\nextern hashval_t iterative_hash (const void *, size_t, hashval_t);\n/* Shorthand for hashing something with an intrinsic size.  */\n#define iterative_hash_object(OB,INIT) iterative_hash (&OB, sizeof (OB), INIT)\n\n#ifdef __cplusplus\n}\n#endif /* __cplusplus */\n\n#endif /* __HASHTAB_H */\n"
  },
  {
    "path": "compat/mkstemps.c",
    "content": "/* Copyright (C) 1991, 1992, 1996, 1998, 2004 Free Software Foundation, Inc.\n   This file is derived from mkstemp.c from the GNU C Library.\n\n   The GNU C Library is free software; you can redistribute it and/or\n   modify it under the terms of the GNU Library General Public License as\n   published by the Free Software Foundation; either version 2 of the\n   License, or (at your option) any later version.\n\n   The GNU C Library is distributed in the hope that it will be useful,\n   but WITHOUT ANY WARRANTY; without even the implied warranty of\n   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n   Library General Public License for more details.\n\n   You should have received a copy of the GNU Library General Public\n   License along with the GNU C Library; see the file COPYING.LIB.  If not,\n   write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,\n   Boston, MA 02110-1301, USA.  */\n/*\n * This file was copied on 2013-08-03 from:\n * https://raw.github.com/mirrors/gcc/master/libiberty/mkstemps.c\n */\n\n#ifdef HAVE_CONFIG_H\n#include \"config.h\"\n#endif\n\n#include \"compat.h\"\n\n#include <sys/types.h>\n#ifdef HAVE_STDLIB_H\n#include <stdlib.h>\n#endif\n#ifdef HAVE_STRING_H\n#include <string.h>\n#endif\n#include <errno.h>\n#include <stdio.h>\n#include <fcntl.h>\n#ifdef HAVE_UNISTD_H\n#include <unistd.h>\n#endif\n#ifdef HAVE_SYS_TIME_H\n#include <sys/time.h>\n#endif\n\n/* We need to provide a type for gcc_uint64_t.  */\n#ifdef __GNUC__\n__extension__ typedef unsigned long long gcc_uint64_t;\n#else\ntypedef unsigned long gcc_uint64_t;\n#endif\n\n#ifndef TMP_MAX\n#define TMP_MAX 16384\n#endif\n\n#ifndef O_BINARY\n# define O_BINARY 0\n#endif\n\n/*\n\n@deftypefn Replacement int mkstemps (char *@var{pattern}, int @var{suffix_len})\n\nGenerate a unique temporary file name from @var{pattern}.\n@var{pattern} has the form:\n\n@example\n   @var{path}/ccXXXXXX@var{suffix}\n@end example\n\n@var{suffix_len} tells us how long @var{suffix} is (it can be zero\nlength).  The last six characters of @var{pattern} before @var{suffix}\nmust be @samp{XXXXXX}; they are replaced with a string that makes the\nfilename unique.  Returns a file descriptor open on the file for\nreading and writing.\n\n@end deftypefn\n\n*/\n\nint\ncompat_mkstemps (char *pattern, int suffix_len)\n{\n  static const char letters[]\n    = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\";\n  static gcc_uint64_t value;\n#ifdef HAVE_GETTIMEOFDAY\n  struct timeval tv;\n#endif\n  char *XXXXXX;\n  size_t len;\n  int count;\n\n  len = strlen (pattern);\n\n  if ((int) len < 6 + suffix_len\n      || strncmp (&pattern[len - 6 - suffix_len], \"XXXXXX\", 6))\n    {\n      return -1;\n    }\n\n  XXXXXX = &pattern[len - 6 - suffix_len];\n\n#ifdef HAVE_GETTIMEOFDAY\n  /* Get some more or less random data.  */\n  gettimeofday (&tv, NULL);\n  value += ((gcc_uint64_t) tv.tv_usec << 16) ^ tv.tv_sec ^ getpid ();\n#else\n  value += getpid ();\n#endif\n\n  for (count = 0; count < TMP_MAX; ++count)\n    {\n      gcc_uint64_t v = value;\n      int fd;\n\n      /* Fill in the random bits.  */\n      XXXXXX[0] = letters[v % 62];\n      v /= 62;\n      XXXXXX[1] = letters[v % 62];\n      v /= 62;\n      XXXXXX[2] = letters[v % 62];\n      v /= 62;\n      XXXXXX[3] = letters[v % 62];\n      v /= 62;\n      XXXXXX[4] = letters[v % 62];\n      v /= 62;\n      XXXXXX[5] = letters[v % 62];\n\n      fd = open (pattern, O_BINARY|O_RDWR|O_CREAT|O_EXCL, 0600);\n      if (fd >= 0)\n\t/* The file does not exist.  */\n\treturn fd;\n      if (errno != EEXIST\n#ifdef EISDIR\n\t  && errno != EISDIR\n#endif\n\t )\n\t/* Fatal error (EPERM, ENOSPC etc).  Doesn't make sense to loop.  */\n\tbreak;\n\n      /* This is a random value.  It is only necessary that the next\n\t TMP_MAX values generated by adding 7777 to VALUE are different\n\t with (module 2^32).  */\n      value += 7777;\n    }\n\n  /* We return the null string if we can't find a unique file name.  */\n  pattern[0] = '\\0';\n  return -1;\n}\n"
  },
  {
    "path": "compat/setenv.c",
    "content": "/* Copyright (C) 1992, 1995, 1996, 1997, 2002, 2011 Free Software Foundation,\n   Inc.\n   This file based on setenv.c in the GNU C Library.\n\n   The GNU C Library is free software; you can redistribute it and/or\n   modify it under the terms of the GNU Library General Public License as\n   published by the Free Software Foundation; either version 2 of the\n   License, or (at your option) any later version.\n\n   The GNU C Library is distributed in the hope that it will be useful,\n   but WITHOUT ANY WARRANTY; without even the implied warranty of\n   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n   Library General Public License for more details.\n\n   You should have received a copy of the GNU Library General Public\n   License along with the GNU C Library; see the file COPYING.LIB.  If not,\n   write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,\n   Boston, MA 02110-1301, USA.  */\n\n/*\n * This file was borrowed on 2013-08-08 from:\n * https://raw.github.com/mirrors/gcc/master/libiberty/setenv.c\n */\n\n/*\n\n@deftypefn Supplemental int setenv (const char *@var{name}, @\n  const char *@var{value}, int @var{overwrite})\n@deftypefnx Supplemental void unsetenv (const char *@var{name})\n\n@code{setenv} adds @var{name} to the environment with value\n@var{value}.  If the name was already present in the environment,\nthe new value will be stored only if @var{overwrite} is nonzero.\nThe companion @code{unsetenv} function removes @var{name} from the\nenvironment.  This implementation is not safe for multithreaded code.\n\n@end deftypefn\n\n*/\n\n#ifdef HAVE_CONFIG_H\n#include \"config.h\"\n#endif\n\n#include \"compat.h\"\n\n#include <sys/types.h> /* For `size_t' */\n#include <stdio.h>     /* For `NULL' */\n\n#include <errno.h>\n#if !defined(errno) && !defined(HAVE_DECL_ERRNO)\nextern int errno;\n#endif\n#define __set_errno(ev) ((errno) = (ev))\n\n#ifdef HAVE_STDLIB_H\n# include <stdlib.h>\n#endif\n#ifdef HAVE_STRING_H\n# include <string.h>\n#endif\n#ifdef HAVE_UNISTD_H\n# include <unistd.h>\n#endif\n\n#define __environ\tenviron\n#ifndef HAVE_DECL_ENVIRON\nextern char **environ;\n#endif\n\n/* LOCK and UNLOCK are defined as no-ops.  This makes the tig\n * implementation MT-Unsafe. */\n#define LOCK\n#define UNLOCK\n\n/* Below this point, it's verbatim code from the glibc-2.0 implementation */\n\n/* If this variable is not a null pointer we allocated the current\n   environment.  */\nstatic char **last_environ;\n\n\nint\ncompat_setenv (const char *name, const char *value, int replace)\n{\n  register char **ep = 0;\n  register size_t size;\n  const size_t namelen = strlen (name);\n  const size_t vallen = strlen (value) + 1;\n\n  LOCK;\n\n  size = 0;\n  if (__environ != NULL)\n    {\n      for (ep = __environ; *ep != NULL; ++ep)\n\tif (!strncmp (*ep, name, namelen) && (*ep)[namelen] == '=')\n\t  break;\n\telse\n\t  ++size;\n    }\n\n  if (__environ == NULL || *ep == NULL)\n    {\n      char **new_environ;\n      if (__environ == last_environ && __environ != NULL)\n\t/* We allocated this space; we can extend it.  */\n\tnew_environ = (char **) realloc (last_environ,\n\t\t\t\t\t (size + 2) * sizeof (char *));\n      else\n\tnew_environ = (char **) malloc ((size + 2) * sizeof (char *));\n\n      if (new_environ == NULL)\n\t{\n\t  UNLOCK;\n\t  return -1;\n\t}\n\n      new_environ[size] = (char *) malloc (namelen + 1 + vallen);\n      if (new_environ[size] == NULL)\n\t{\n\t  free ((char *) new_environ);\n\t  __set_errno (ENOMEM);\n\t  UNLOCK;\n\t  return -1;\n\t}\n\n      if (__environ != last_environ)\n\tmemcpy ((char *) new_environ, (char *) __environ,\n\t\tsize * sizeof (char *));\n\n      memcpy (new_environ[size], name, namelen);\n      new_environ[size][namelen] = '=';\n      memcpy (&new_environ[size][namelen + 1], value, vallen);\n\n      new_environ[size + 1] = NULL;\n\n      last_environ = __environ = new_environ;\n    }\n  else if (replace)\n    {\n      size_t len = strlen (*ep);\n      if (len + 1 < namelen + 1 + vallen)\n\t{\n\t  /* The existing string is too short; malloc a new one.  */\n\t  char *new_string = (char *) malloc (namelen + 1 + vallen);\n\t  if (new_string == NULL)\n\t    {\n\t      UNLOCK;\n\t      return -1;\n\t    }\n\t  *ep = new_string;\n\t}\n      memcpy (*ep, name, namelen);\n      (*ep)[namelen] = '=';\n      memcpy (&(*ep)[namelen + 1], value, vallen);\n    }\n\n  UNLOCK;\n\n  return 0;\n}\n\n#if 0\nvoid\ncompat_unsetenv (const char *name)\n{\n  const size_t len = strlen (name);\n  char **ep;\n\n  LOCK;\n\n  for (ep = __environ; *ep; ++ep)\n    if (!strncmp (*ep, name, len) && (*ep)[len] == '=')\n      {\n\t/* Found it.  Remove this pointer by moving later ones back.  */\n\tchar **dp = ep;\n\tdo\n\t  dp[0] = dp[1];\n\twhile (*dp++);\n\t/* Continue the loop in case NAME appears again.  */\n      }\n\n  UNLOCK;\n}\n#endif\n"
  },
  {
    "path": "compat/strndup.c",
    "content": "/* Implement the strndup function.\n   Copyright (C) 2005 Free Software Foundation, Inc.\n   Written by Kaveh R. Ghazi <ghazi@caip.rutgers.edu>.\n\nThis file is part of the libiberty library.\nLibiberty is free software; you can redistribute it and/or\nmodify it under the terms of the GNU Library General Public\nLicense as published by the Free Software Foundation; either\nversion 2 of the License, or (at your option) any later version.\n\nLibiberty is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\nLibrary General Public License for more details.\n\nYou should have received a copy of the GNU Library General Public\nLicense along with libiberty; see the file COPYING.LIB.  If\nnot, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,\nBoston, MA 02110-1301, USA.  */\n\n/*\n * This file was borrowed on 2014-05-05 and adapted from:\n * https://raw.github.com/mirrors/gcc/master/libiberty/strndup.c\n */\n#ifdef HAVE_CONFIG_H\n#include \"config.h\"\n#endif\n\n#include \"compat.h\"\n\n#include <sys/types.h>\n#ifdef HAVE_STDLIB_H\n#include <stdlib.h>\n#endif\n#ifdef HAVE_STRING_H\n#include <string.h>\n#endif\n\nchar *\ncompat_strndup (const char *s, size_t n)\n{\n  char *result;\n  size_t len = strlen (s);\n\n  if (n < len)\n    len = n;\n\n  result = (char *) malloc (len + 1);\n  if (!result)\n    return 0;\n\n  result[len] = '\\0';\n  return (char *) memcpy (result, s, len);\n}\n"
  },
  {
    "path": "compat/utf8proc.c",
    "content": "/* -*- mode: c; c-basic-offset: 2; tab-width: 2; indent-tabs-mode: nil -*- */\n/*\n *  Copyright (c) 2014-2021 Steven G. Johnson, Jiahao Chen, Peter Colberg, Tony Kelman, Scott P. Jones, and other contributors.\n *  Copyright (c) 2009 Public Software Group e. V., Berlin, Germany\n *\n *  Permission is hereby granted, free of charge, to any person obtaining a\n *  copy of this software and associated documentation files (the \"Software\"),\n *  to deal in the Software without restriction, including without limitation\n *  the rights to use, copy, modify, merge, publish, distribute, sublicense,\n *  and/or sell copies of the Software, and to permit persons to whom the\n *  Software is furnished to do so, subject to the following conditions:\n *\n *  The above copyright notice and this permission notice shall be included in\n *  all copies or substantial portions of the Software.\n *\n *  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n *  DEALINGS IN THE SOFTWARE.\n */\n\n/*\n *  This library contains derived data from a modified version of the\n *  Unicode data files.\n *\n *  The original data files are available at\n *  https://www.unicode.org/Public/UNIDATA/\n *\n *  Please notice the copyright statement in the file \"utf8proc_data.c\".\n */\n\n\n/*\n *  File name:    utf8proc.c\n *\n *  Description:\n *  Implementation of libutf8proc.\n */\n\n\n#include \"utf8proc.h\"\n\n#ifndef SSIZE_MAX\n#define SSIZE_MAX ((size_t)SIZE_MAX/2)\n#endif\n#ifndef UINT16_MAX\n#  define UINT16_MAX 65535U\n#endif\n\n#include \"utf8proc_data.c\"\n\n\nUTF8PROC_DLLEXPORT const utf8proc_int8_t utf8proc_utf8class[256] = {\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n  4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0 };\n\n#define UTF8PROC_HANGUL_SBASE 0xAC00\n#define UTF8PROC_HANGUL_LBASE 0x1100\n#define UTF8PROC_HANGUL_VBASE 0x1161\n#define UTF8PROC_HANGUL_TBASE 0x11A7\n#define UTF8PROC_HANGUL_LCOUNT 19\n#define UTF8PROC_HANGUL_VCOUNT 21\n#define UTF8PROC_HANGUL_TCOUNT 28\n#define UTF8PROC_HANGUL_NCOUNT 588\n#define UTF8PROC_HANGUL_SCOUNT 11172\n/* END is exclusive */\n#define UTF8PROC_HANGUL_L_START  0x1100\n#define UTF8PROC_HANGUL_L_END    0x115A\n#define UTF8PROC_HANGUL_L_FILLER 0x115F\n#define UTF8PROC_HANGUL_V_START  0x1160\n#define UTF8PROC_HANGUL_V_END    0x11A3\n#define UTF8PROC_HANGUL_T_START  0x11A8\n#define UTF8PROC_HANGUL_T_END    0x11FA\n#define UTF8PROC_HANGUL_S_START  0xAC00\n#define UTF8PROC_HANGUL_S_END    0xD7A4\n\n/* Should follow semantic-versioning rules (semver.org) based on API\n   compatibility.  (Note that the shared-library version number will\n   be different, being based on ABI compatibility.): */\n#define STRINGIZEx(x) #x\n#define STRINGIZE(x) STRINGIZEx(x)\nUTF8PROC_DLLEXPORT const char *utf8proc_version(void) {\n  return STRINGIZE(UTF8PROC_VERSION_MAJOR) \".\" STRINGIZE(UTF8PROC_VERSION_MINOR) \".\" STRINGIZE(UTF8PROC_VERSION_PATCH) \"\";\n}\n\nUTF8PROC_DLLEXPORT const char *utf8proc_unicode_version(void) {\n  return \"17.0.0\";\n}\n\nUTF8PROC_DLLEXPORT const char *utf8proc_errmsg(utf8proc_ssize_t errcode) {\n  switch (errcode) {\n    case UTF8PROC_ERROR_NOMEM:\n    return \"Memory for processing UTF-8 data could not be allocated.\";\n    case UTF8PROC_ERROR_OVERFLOW:\n    return \"UTF-8 string is too long to be processed.\";\n    case UTF8PROC_ERROR_INVALIDUTF8:\n    return \"Invalid UTF-8 string\";\n    case UTF8PROC_ERROR_NOTASSIGNED:\n    return \"Unassigned Unicode code point found in UTF-8 string.\";\n    case UTF8PROC_ERROR_INVALIDOPTS:\n    return \"Invalid options for UTF-8 processing chosen.\";\n    default:\n    return \"An unknown error occurred while processing UTF-8 data.\";\n  }\n}\n\n#define utf_cont(ch)  (((ch) & 0xc0) == 0x80)\nUTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_iterate(\n  const utf8proc_uint8_t *str, utf8proc_ssize_t strlen, utf8proc_int32_t *dst\n) {\n  utf8proc_int32_t uc;\n  const utf8proc_uint8_t *end;\n\n  *dst = -1;\n  if (!strlen) return 0;\n  end = str + ((strlen < 0) ? 4 : strlen);\n  uc = *str++;\n  if (uc < 0x80) {\n    *dst = uc;\n    return 1;\n  }\n  // Must be between 0xc2 and 0xf4 inclusive to be valid\n  if ((utf8proc_uint32_t)(uc - 0xc2) > (0xf4-0xc2)) return UTF8PROC_ERROR_INVALIDUTF8;\n  if (uc < 0xe0) {         // 2-byte sequence\n     // Must have valid continuation character\n     if (str >= end || !utf_cont(*str)) return UTF8PROC_ERROR_INVALIDUTF8;\n     *dst = ((uc & 0x1f)<<6) | (*str & 0x3f);\n     return 2;\n  }\n  if (uc < 0xf0) {        // 3-byte sequence\n     if ((str + 1 >= end) || !utf_cont(*str) || !utf_cont(str[1]))\n        return UTF8PROC_ERROR_INVALIDUTF8;\n     // Check for surrogate chars\n     if (uc == 0xed && *str > 0x9f)\n         return UTF8PROC_ERROR_INVALIDUTF8;\n     uc = ((uc & 0xf)<<12) | ((*str & 0x3f)<<6) | (str[1] & 0x3f);\n     if (uc < 0x800)\n         return UTF8PROC_ERROR_INVALIDUTF8;\n     *dst = uc;\n     return 3;\n  }\n  // 4-byte sequence\n  // Must have 3 valid continuation characters\n  if ((str + 2 >= end) || !utf_cont(*str) || !utf_cont(str[1]) || !utf_cont(str[2]))\n     return UTF8PROC_ERROR_INVALIDUTF8;\n  // Make sure in correct range (0x10000 - 0x10ffff)\n  if (uc == 0xf0) {\n    if (*str < 0x90) return UTF8PROC_ERROR_INVALIDUTF8;\n  } else if (uc == 0xf4) {\n    if (*str > 0x8f) return UTF8PROC_ERROR_INVALIDUTF8;\n  }\n  *dst = ((uc & 7)<<18) | ((*str & 0x3f)<<12) | ((str[1] & 0x3f)<<6) | (str[2] & 0x3f);\n  return 4;\n}\n\nUTF8PROC_DLLEXPORT utf8proc_bool utf8proc_codepoint_valid(utf8proc_int32_t uc) {\n    return (((utf8proc_uint32_t)uc)-0xd800 > 0x07ff) && ((utf8proc_uint32_t)uc < 0x110000);\n}\n\nUTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_encode_char(utf8proc_int32_t uc, utf8proc_uint8_t *dst) {\n  if (uc < 0x00) {\n    return 0;\n  } else if (uc < 0x80) {\n    dst[0] = (utf8proc_uint8_t) uc;\n    return 1;\n  } else if (uc < 0x800) {\n    dst[0] = (utf8proc_uint8_t)(0xC0 + (uc >> 6));\n    dst[1] = (utf8proc_uint8_t)(0x80 + (uc & 0x3F));\n    return 2;\n  // Note: we allow encoding 0xd800-0xdfff here, so as not to change\n  // the API, however, these are actually invalid in UTF-8\n  } else if (uc < 0x10000) {\n    dst[0] = (utf8proc_uint8_t)(0xE0 + (uc >> 12));\n    dst[1] = (utf8proc_uint8_t)(0x80 + ((uc >> 6) & 0x3F));\n    dst[2] = (utf8proc_uint8_t)(0x80 + (uc & 0x3F));\n    return 3;\n  } else if (uc < 0x110000) {\n    dst[0] = (utf8proc_uint8_t)(0xF0 + (uc >> 18));\n    dst[1] = (utf8proc_uint8_t)(0x80 + ((uc >> 12) & 0x3F));\n    dst[2] = (utf8proc_uint8_t)(0x80 + ((uc >> 6) & 0x3F));\n    dst[3] = (utf8proc_uint8_t)(0x80 + (uc & 0x3F));\n    return 4;\n  } else return 0;\n}\n\n/* internal version used for inserting 0xff bytes between graphemes */\nstatic utf8proc_ssize_t charbound_encode_char(utf8proc_int32_t uc, utf8proc_uint8_t *dst) {\n   if (uc < 0x00) {\n      if (uc == -1) { /* internal value used for grapheme breaks */\n        dst[0] = (utf8proc_uint8_t)0xFF;\n        return 1;\n      }\n      return 0;\n   } else if (uc < 0x80) {\n      dst[0] = (utf8proc_uint8_t)uc;\n      return 1;\n   } else if (uc < 0x800) {\n      dst[0] = (utf8proc_uint8_t)(0xC0 + (uc >> 6));\n      dst[1] = (utf8proc_uint8_t)(0x80 + (uc & 0x3F));\n      return 2;\n   } else if (uc < 0x10000) {\n      dst[0] = (utf8proc_uint8_t)(0xE0 + (uc >> 12));\n      dst[1] = (utf8proc_uint8_t)(0x80 + ((uc >> 6) & 0x3F));\n      dst[2] = (utf8proc_uint8_t)(0x80 + (uc & 0x3F));\n      return 3;\n   } else if (uc < 0x110000) {\n      dst[0] = (utf8proc_uint8_t)(0xF0 + (uc >> 18));\n      dst[1] = (utf8proc_uint8_t)(0x80 + ((uc >> 12) & 0x3F));\n      dst[2] = (utf8proc_uint8_t)(0x80 + ((uc >> 6) & 0x3F));\n      dst[3] = (utf8proc_uint8_t)(0x80 + (uc & 0x3F));\n      return 4;\n   } else return 0;\n}\n\n/* internal \"unsafe\" version that does not check whether uc is in range */\nstatic const utf8proc_property_t *unsafe_get_property(utf8proc_int32_t uc) {\n  /* ASSERT: uc >= 0 && uc < 0x110000 */\n  return utf8proc_properties + (\n    utf8proc_stage2table[\n      utf8proc_stage1table[uc >> 8] + (uc & 0xFF)\n    ]\n  );\n}\n\nUTF8PROC_DLLEXPORT const utf8proc_property_t *utf8proc_get_property(utf8proc_int32_t uc) {\n  return uc < 0 || uc >= 0x110000 ? utf8proc_properties : unsafe_get_property(uc);\n}\n\n/* return whether there is a grapheme break between boundclasses lbc and tbc\n   (according to the definition of extended grapheme clusters)\n\n  Rule numbering refers to TR29 Version 29 (Unicode 9.0.0):\n  http://www.unicode.org/reports/tr29/tr29-29.html\n\n  CAVEATS:\n   Please note that evaluation of GB10 (grapheme breaks between emoji zwj sequences)\n   and GB 12/13 (regional indicator code points) require knowledge of previous characters\n   and are thus not handled by this function. This may result in an incorrect break before\n   an E_Modifier class codepoint and an incorrectly missing break between two\n   REGIONAL_INDICATOR class code points if such support does not exist in the caller.\n\n   See the special support in grapheme_break_extended, for required bookkeeping by the caller.\n*/\nstatic utf8proc_bool grapheme_break_simple(int lbc, int tbc) {\n  return\n    (lbc == UTF8PROC_BOUNDCLASS_START) ? true :       // GB1\n    (lbc == UTF8PROC_BOUNDCLASS_CR &&                 // GB3\n     tbc == UTF8PROC_BOUNDCLASS_LF) ? false :         // ---\n    (lbc >= UTF8PROC_BOUNDCLASS_CR && lbc <= UTF8PROC_BOUNDCLASS_CONTROL) ? true :  // GB4\n    (tbc >= UTF8PROC_BOUNDCLASS_CR && tbc <= UTF8PROC_BOUNDCLASS_CONTROL) ? true :  // GB5\n    (lbc == UTF8PROC_BOUNDCLASS_L &&                  // GB6\n     (tbc == UTF8PROC_BOUNDCLASS_L ||                 // ---\n      tbc == UTF8PROC_BOUNDCLASS_V ||                 // ---\n      tbc == UTF8PROC_BOUNDCLASS_LV ||                // ---\n      tbc == UTF8PROC_BOUNDCLASS_LVT)) ? false :      // ---\n    ((lbc == UTF8PROC_BOUNDCLASS_LV ||                // GB7\n      lbc == UTF8PROC_BOUNDCLASS_V) &&                // ---\n     (tbc == UTF8PROC_BOUNDCLASS_V ||                 // ---\n      tbc == UTF8PROC_BOUNDCLASS_T)) ? false :        // ---\n    ((lbc == UTF8PROC_BOUNDCLASS_LVT ||               // GB8\n      lbc == UTF8PROC_BOUNDCLASS_T) &&                // ---\n     tbc == UTF8PROC_BOUNDCLASS_T) ? false :          // ---\n    (tbc == UTF8PROC_BOUNDCLASS_EXTEND ||             // GB9\n     tbc == UTF8PROC_BOUNDCLASS_ZWJ ||                // ---\n     tbc == UTF8PROC_BOUNDCLASS_SPACINGMARK ||        // GB9a\n     lbc == UTF8PROC_BOUNDCLASS_PREPEND) ? false :    // GB9b\n    (lbc == UTF8PROC_BOUNDCLASS_E_ZWG &&              // GB11 (requires additional handling below)\n     tbc == UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC) ? false : // ----\n    (lbc == UTF8PROC_BOUNDCLASS_REGIONAL_INDICATOR &&          // GB12/13 (requires additional handling below)\n     tbc == UTF8PROC_BOUNDCLASS_REGIONAL_INDICATOR) ? false :  // ----\n    true; // GB999\n}\n\nstatic utf8proc_bool grapheme_break_extended(int lbc, int tbc, int licb, int ticb, utf8proc_int32_t *state)\n{\n  if (state) {\n    int state_bc, state_icb; /* boundclass and indic_conjunct_break state */\n    if (*state == 0) { /* state initialization */\n      state_bc = lbc;\n      state_icb = licb == UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT ? licb : UTF8PROC_INDIC_CONJUNCT_BREAK_NONE;\n    }\n    else { /* lbc and licb are already encoded in *state */\n      state_bc = *state & 0xff;  // 1st byte of state is bound class\n      state_icb = *state >> 8;   // 2nd byte of state is indic conjunct break\n    }\n\n    utf8proc_bool break_permitted = grapheme_break_simple(state_bc, tbc) &&\n       !(state_icb == UTF8PROC_INDIC_CONJUNCT_BREAK_LINKER\n        && ticb == UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT); // GB9c\n\n    // Special support for GB9c.  Don't break between two consonants\n    // separated 1+ linker characters and 0+ extend characters in any order.\n    // After a consonant, we enter LINKER state after at least one linker.\n    if (ticb == UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT\n        || state_icb == UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT\n        || state_icb == UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND)\n      state_icb = ticb;\n    else if (state_icb == UTF8PROC_INDIC_CONJUNCT_BREAK_LINKER)\n      state_icb = ticb == UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND ?\n                  UTF8PROC_INDIC_CONJUNCT_BREAK_LINKER : ticb;\n\n    // Special support for GB 12/13 made possible by GB999. After two RI\n    // class codepoints we want to force a break. Do this by resetting the\n    // second RI's bound class to UTF8PROC_BOUNDCLASS_OTHER, to force a break\n    // after that character according to GB999 (unless of course such a break is\n    // forbidden by a different rule such as GB9).\n    if (state_bc == tbc && tbc == UTF8PROC_BOUNDCLASS_REGIONAL_INDICATOR)\n      state_bc = UTF8PROC_BOUNDCLASS_OTHER;\n    // Special support for GB11 (emoji extend* zwj / emoji)\n    else if (state_bc == UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC) {\n      if (tbc == UTF8PROC_BOUNDCLASS_EXTEND) // fold EXTEND codepoints into emoji\n        state_bc = UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC;\n      else if (tbc == UTF8PROC_BOUNDCLASS_ZWJ)\n        state_bc = UTF8PROC_BOUNDCLASS_E_ZWG; // state to record emoji+zwg combo\n      else\n        state_bc = tbc;\n    }\n    else\n      state_bc = tbc;\n\n    *state = state_bc + (state_icb << 8);\n    return break_permitted;\n  }\n  else\n    return grapheme_break_simple(lbc, tbc);\n}\n\nUTF8PROC_DLLEXPORT utf8proc_bool utf8proc_grapheme_break_stateful(\n    utf8proc_int32_t c1, utf8proc_int32_t c2, utf8proc_int32_t *state) {\n\n  const utf8proc_property_t *p1 = utf8proc_get_property(c1);\n  const utf8proc_property_t *p2 = utf8proc_get_property(c2);\n  return grapheme_break_extended(p1->boundclass,\n                                 p2->boundclass,\n                                 p1->indic_conjunct_break,\n                                 p2->indic_conjunct_break,\n                                 state);\n}\n\n\nUTF8PROC_DLLEXPORT utf8proc_bool utf8proc_grapheme_break(\n    utf8proc_int32_t c1, utf8proc_int32_t c2) {\n  return utf8proc_grapheme_break_stateful(c1, c2, NULL);\n}\n\nstatic utf8proc_int32_t seqindex_decode_entry(const utf8proc_uint16_t **entry)\n{\n  utf8proc_int32_t entry_cp = **entry;\n  if ((entry_cp & 0xF800) == 0xD800) {\n    *entry = *entry + 1;\n    entry_cp = ((entry_cp & 0x03FF) << 10) | (**entry & 0x03FF);\n    entry_cp += 0x10000;\n  }\n  return entry_cp;\n}\n\nstatic utf8proc_int32_t seqindex_decode_index(const utf8proc_uint32_t seqindex)\n{\n  const utf8proc_uint16_t *entry = &utf8proc_sequences[seqindex];\n  return seqindex_decode_entry(&entry);\n}\n\nstatic utf8proc_ssize_t seqindex_write_char_decomposed(utf8proc_uint16_t seqindex, utf8proc_int32_t *dst, utf8proc_ssize_t bufsize, utf8proc_option_t options, int *last_boundclass) {\n  utf8proc_ssize_t written = 0;\n  const utf8proc_uint16_t *entry = &utf8proc_sequences[seqindex & 0x3FFF];\n  int len = seqindex >> 14;\n  if (len >= 3) {\n    len = *entry;\n    entry++;\n  }\n  for (; len >= 0; entry++, len--) {\n    utf8proc_int32_t entry_cp = seqindex_decode_entry(&entry);\n\n    written += utf8proc_decompose_char(entry_cp, dst ? dst+written : dst,\n      (bufsize > written) ? (bufsize - written) : 0, options,\n    last_boundclass);\n    if (written < 0) return UTF8PROC_ERROR_OVERFLOW;\n  }\n  return written;\n}\n\nUTF8PROC_DLLEXPORT utf8proc_int32_t utf8proc_tolower(utf8proc_int32_t c)\n{\n  utf8proc_int32_t cl = utf8proc_get_property(c)->lowercase_seqindex;\n  return cl != UINT16_MAX ? seqindex_decode_index((utf8proc_uint32_t)cl) : c;\n}\n\nUTF8PROC_DLLEXPORT utf8proc_int32_t utf8proc_toupper(utf8proc_int32_t c)\n{\n  utf8proc_int32_t cu = utf8proc_get_property(c)->uppercase_seqindex;\n  return cu != UINT16_MAX ? seqindex_decode_index((utf8proc_uint32_t)cu) : c;\n}\n\nUTF8PROC_DLLEXPORT utf8proc_int32_t utf8proc_totitle(utf8proc_int32_t c)\n{\n  utf8proc_int32_t cu = utf8proc_get_property(c)->titlecase_seqindex;\n  return cu != UINT16_MAX ? seqindex_decode_index((utf8proc_uint32_t)cu) : c;\n}\n\nUTF8PROC_DLLEXPORT int utf8proc_islower(utf8proc_int32_t c)\n{\n  const utf8proc_property_t *p = utf8proc_get_property(c);\n  return p->lowercase_seqindex != p->uppercase_seqindex && p->lowercase_seqindex == UINT16_MAX;\n}\n\nUTF8PROC_DLLEXPORT int utf8proc_isupper(utf8proc_int32_t c)\n{\n  const utf8proc_property_t *p = utf8proc_get_property(c);\n  return p->lowercase_seqindex != p->uppercase_seqindex && p->uppercase_seqindex == UINT16_MAX && p->category != UTF8PROC_CATEGORY_LT;\n}\n\n/* return a character width analogous to wcwidth (except portable and\n   hopefully less buggy than most system wcwidth functions). */\nUTF8PROC_DLLEXPORT int utf8proc_charwidth(utf8proc_int32_t c) {\n  return utf8proc_get_property(c)->charwidth;\n}\n\nUTF8PROC_DLLEXPORT utf8proc_bool utf8proc_charwidth_ambiguous(utf8proc_int32_t c) {\n  return utf8proc_get_property(c)->ambiguous_width;\n}\n\nUTF8PROC_DLLEXPORT utf8proc_category_t utf8proc_category(utf8proc_int32_t c) {\n  return (utf8proc_category_t) utf8proc_get_property(c)->category;\n}\n\nUTF8PROC_DLLEXPORT const char *utf8proc_category_string(utf8proc_int32_t c) {\n  static const char s[][3] = {\"Cn\",\"Lu\",\"Ll\",\"Lt\",\"Lm\",\"Lo\",\"Mn\",\"Mc\",\"Me\",\"Nd\",\"Nl\",\"No\",\"Pc\",\"Pd\",\"Ps\",\"Pe\",\"Pi\",\"Pf\",\"Po\",\"Sm\",\"Sc\",\"Sk\",\"So\",\"Zs\",\"Zl\",\"Zp\",\"Cc\",\"Cf\",\"Cs\",\"Co\"};\n  return s[utf8proc_category(c)];\n}\n\n#define utf8proc_decompose_lump(replacement_uc) \\\n  return utf8proc_decompose_char((replacement_uc), dst, bufsize, \\\n  options & ~(unsigned int)UTF8PROC_LUMP, last_boundclass)\n\nUTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_decompose_char(utf8proc_int32_t uc, utf8proc_int32_t *dst, utf8proc_ssize_t bufsize, utf8proc_option_t options, int *last_boundclass) {\n  const utf8proc_property_t *property;\n  utf8proc_propval_t category;\n  utf8proc_int32_t hangul_sindex;\n  if (uc < 0 || uc >= 0x110000) return UTF8PROC_ERROR_NOTASSIGNED;\n  property = unsafe_get_property(uc);\n  category = property->category;\n  hangul_sindex = uc - UTF8PROC_HANGUL_SBASE;\n  if (options & (UTF8PROC_COMPOSE|UTF8PROC_DECOMPOSE)) {\n    if (hangul_sindex >= 0 && hangul_sindex < UTF8PROC_HANGUL_SCOUNT) {\n      utf8proc_int32_t hangul_tindex;\n      if (bufsize >= 1) {\n        dst[0] = UTF8PROC_HANGUL_LBASE +\n          hangul_sindex / UTF8PROC_HANGUL_NCOUNT;\n        if (bufsize >= 2) dst[1] = UTF8PROC_HANGUL_VBASE +\n          (hangul_sindex % UTF8PROC_HANGUL_NCOUNT) / UTF8PROC_HANGUL_TCOUNT;\n      }\n      hangul_tindex = hangul_sindex % UTF8PROC_HANGUL_TCOUNT;\n      if (!hangul_tindex) return 2;\n      if (bufsize >= 3) dst[2] = UTF8PROC_HANGUL_TBASE + hangul_tindex;\n      return 3;\n    }\n  }\n  if (options & UTF8PROC_REJECTNA) {\n    if (!category) return UTF8PROC_ERROR_NOTASSIGNED;\n  }\n  if (options & UTF8PROC_IGNORE) {\n    if (property->ignorable) return 0;\n  }\n  if (options & UTF8PROC_STRIPNA) {\n    if (!category) return 0;\n  }\n  if (options & UTF8PROC_LUMP) {\n    if (category == UTF8PROC_CATEGORY_ZS) utf8proc_decompose_lump(0x0020);\n    if (uc == 0x2018 || uc == 0x2019 || uc == 0x02BC || uc == 0x02C8)\n      utf8proc_decompose_lump(0x0027);\n    if (category == UTF8PROC_CATEGORY_PD || uc == 0x2212)\n      utf8proc_decompose_lump(0x002D);\n    if (uc == 0x2044 || uc == 0x2215) utf8proc_decompose_lump(0x002F);\n    if (uc == 0x2236) utf8proc_decompose_lump(0x003A);\n    if (uc == 0x2039 || uc == 0x2329 || uc == 0x3008)\n      utf8proc_decompose_lump(0x003C);\n    if (uc == 0x203A || uc == 0x232A || uc == 0x3009)\n      utf8proc_decompose_lump(0x003E);\n    if (uc == 0x2216) utf8proc_decompose_lump(0x005C);\n    if (uc == 0x02C4 || uc == 0x02C6 || uc == 0x2038 || uc == 0x2303)\n      utf8proc_decompose_lump(0x005E);\n    if (category == UTF8PROC_CATEGORY_PC || uc == 0x02CD)\n      utf8proc_decompose_lump(0x005F);\n    if (uc == 0x02CB) utf8proc_decompose_lump(0x0060);\n    if (uc == 0x2223) utf8proc_decompose_lump(0x007C);\n    if (uc == 0x223C) utf8proc_decompose_lump(0x007E);\n    if ((options & UTF8PROC_NLF2LS) && (options & UTF8PROC_NLF2PS)) {\n      if (category == UTF8PROC_CATEGORY_ZL ||\n          category == UTF8PROC_CATEGORY_ZP)\n        utf8proc_decompose_lump(0x000A);\n    }\n  }\n  if (options & UTF8PROC_STRIPMARK) {\n    if (category == UTF8PROC_CATEGORY_MN ||\n      category == UTF8PROC_CATEGORY_MC ||\n      category == UTF8PROC_CATEGORY_ME) return 0;\n  }\n  if (options & UTF8PROC_CASEFOLD) {\n    if (property->casefold_seqindex != UINT16_MAX) {\n      return seqindex_write_char_decomposed(property->casefold_seqindex, dst, bufsize, options, last_boundclass);\n    }\n  }\n  if (options & (UTF8PROC_COMPOSE|UTF8PROC_DECOMPOSE)) {\n    if (property->decomp_seqindex != UINT16_MAX &&\n        (!property->decomp_type || (options & UTF8PROC_COMPAT))) {\n      return seqindex_write_char_decomposed(property->decomp_seqindex, dst, bufsize, options, last_boundclass);\n    }\n  }\n  if (options & UTF8PROC_CHARBOUND) {\n    utf8proc_bool boundary;\n    boundary = grapheme_break_extended(0, property->boundclass, 0, property->indic_conjunct_break,\n                                       last_boundclass);\n    if (boundary) {\n      if (bufsize >= 1) dst[0] = -1; /* sentinel value for grapheme break */\n      if (bufsize >= 2) dst[1] = uc;\n      return 2;\n    }\n  }\n  if (bufsize >= 1) *dst = uc;\n  return 1;\n}\n\nUTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_decompose(\n  const utf8proc_uint8_t *str, utf8proc_ssize_t strlen,\n  utf8proc_int32_t *buffer, utf8proc_ssize_t bufsize, utf8proc_option_t options\n) {\n    return utf8proc_decompose_custom(str, strlen, buffer, bufsize, options, NULL, NULL);\n}\n\nUTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_decompose_custom(\n  const utf8proc_uint8_t *str, utf8proc_ssize_t strlen,\n  utf8proc_int32_t *buffer, utf8proc_ssize_t bufsize, utf8proc_option_t options,\n  utf8proc_custom_func custom_func, void *custom_data\n) {\n  /* strlen will be ignored, if UTF8PROC_NULLTERM is set in options */\n  utf8proc_ssize_t wpos = 0;\n  if ((options & UTF8PROC_COMPOSE) && (options & UTF8PROC_DECOMPOSE))\n    return UTF8PROC_ERROR_INVALIDOPTS;\n  if ((options & UTF8PROC_STRIPMARK) &&\n      !(options & UTF8PROC_COMPOSE) && !(options & UTF8PROC_DECOMPOSE))\n    return UTF8PROC_ERROR_INVALIDOPTS;\n  {\n    utf8proc_int32_t uc;\n    utf8proc_ssize_t rpos = 0;\n    utf8proc_ssize_t decomp_result;\n    int boundclass = UTF8PROC_BOUNDCLASS_START;\n    while (1) {\n      if (options & UTF8PROC_NULLTERM) {\n        rpos += utf8proc_iterate(str + rpos, -1, &uc);\n        /* checking of return value is not necessary,\n           as 'uc' is < 0 in case of error */\n        if (uc < 0) return UTF8PROC_ERROR_INVALIDUTF8;\n        if (rpos < 0) return UTF8PROC_ERROR_OVERFLOW;\n        if (uc == 0) break;\n      } else {\n        if (rpos >= strlen) break;\n        rpos += utf8proc_iterate(str + rpos, strlen - rpos, &uc);\n        if (uc < 0) return UTF8PROC_ERROR_INVALIDUTF8;\n      }\n      if (custom_func != NULL) {\n        uc = custom_func(uc, custom_data);   /* user-specified custom mapping */\n      }\n      decomp_result = utf8proc_decompose_char(\n        uc, buffer ? buffer+wpos : buffer, (bufsize > wpos) ? (bufsize - wpos) : 0, options,\n        &boundclass\n      );\n      if (decomp_result < 0) return decomp_result;\n      wpos += decomp_result;\n      /* prohibiting integer overflows due to too long strings: */\n      if (wpos < 0 ||\n          wpos > (utf8proc_ssize_t)(SSIZE_MAX/sizeof(utf8proc_int32_t)/2))\n        return UTF8PROC_ERROR_OVERFLOW;\n    }\n  }\n  if ((options & (UTF8PROC_COMPOSE|UTF8PROC_DECOMPOSE)) && bufsize >= wpos) {\n    utf8proc_ssize_t pos = 0;\n    while (pos < wpos-1) {\n      utf8proc_int32_t uc1, uc2;\n      const utf8proc_property_t *property1, *property2;\n      uc1 = buffer[pos];\n      uc2 = buffer[pos+1];\n      property1 = unsafe_get_property(uc1);\n      property2 = unsafe_get_property(uc2);\n      if (property1->combining_class > property2->combining_class &&\n          property2->combining_class > 0) {\n        buffer[pos] = uc2;\n        buffer[pos+1] = uc1;\n        if (pos > 0) pos--; else pos++;\n      } else {\n        pos++;\n      }\n    }\n  }\n  return wpos;\n}\n\nUTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_normalize_utf32(utf8proc_int32_t *buffer, utf8proc_ssize_t length, utf8proc_option_t options) {\n  /* UTF8PROC_NULLTERM option will be ignored, 'length' is never ignored */\n  if (options & (UTF8PROC_NLF2LS | UTF8PROC_NLF2PS | UTF8PROC_STRIPCC)) {\n    utf8proc_ssize_t rpos;\n    utf8proc_ssize_t wpos = 0;\n    utf8proc_int32_t uc;\n    for (rpos = 0; rpos < length; rpos++) {\n      uc = buffer[rpos];\n      if (uc == 0x000D && rpos < length-1 && buffer[rpos+1] == 0x000A) rpos++;\n      if (uc == 0x000A || uc == 0x000D || uc == 0x0085 ||\n          ((options & UTF8PROC_STRIPCC) && (uc == 0x000B || uc == 0x000C))) {\n        if (options & UTF8PROC_NLF2LS) {\n          if (options & UTF8PROC_NLF2PS) {\n            buffer[wpos++] = 0x000A;\n          } else {\n            buffer[wpos++] = 0x2028;\n          }\n        } else {\n          if (options & UTF8PROC_NLF2PS) {\n            buffer[wpos++] = 0x2029;\n          } else {\n            buffer[wpos++] = 0x0020;\n          }\n        }\n      } else if ((options & UTF8PROC_STRIPCC) &&\n          (uc < 0x0020 || (uc >= 0x007F && uc < 0x00A0))) {\n        if (uc == 0x0009) buffer[wpos++] = 0x0020;\n      } else {\n        buffer[wpos++] = uc;\n      }\n    }\n    length = wpos;\n  }\n  if (options & UTF8PROC_COMPOSE) {\n    utf8proc_int32_t *starter = NULL;\n    const utf8proc_property_t *starter_property = NULL;\n    utf8proc_propval_t max_combining_class = -1;\n    utf8proc_ssize_t rpos;\n    utf8proc_ssize_t wpos = 0;\n    for (rpos = 0; rpos < length; rpos++) {\n      utf8proc_int32_t current_char = buffer[rpos];\n      const utf8proc_property_t *current_property = unsafe_get_property(current_char);\n      if (starter && current_property->combining_class > max_combining_class) {\n        /* combination perhaps possible */\n        utf8proc_int32_t hangul_lindex;\n        utf8proc_int32_t hangul_sindex;\n        hangul_lindex = *starter - UTF8PROC_HANGUL_LBASE;\n        if (hangul_lindex >= 0 && hangul_lindex < UTF8PROC_HANGUL_LCOUNT) {\n          utf8proc_int32_t hangul_vindex;\n          hangul_vindex = current_char - UTF8PROC_HANGUL_VBASE;\n          if (hangul_vindex >= 0 && hangul_vindex < UTF8PROC_HANGUL_VCOUNT) {\n            *starter = UTF8PROC_HANGUL_SBASE +\n              (hangul_lindex * UTF8PROC_HANGUL_VCOUNT + hangul_vindex) *\n              UTF8PROC_HANGUL_TCOUNT;\n            starter_property = NULL;\n            continue;\n          }\n        }\n        hangul_sindex = *starter - UTF8PROC_HANGUL_SBASE;\n        if (hangul_sindex >= 0 && hangul_sindex < UTF8PROC_HANGUL_SCOUNT &&\n            (hangul_sindex % UTF8PROC_HANGUL_TCOUNT) == 0) {\n          utf8proc_int32_t hangul_tindex;\n          hangul_tindex = current_char - UTF8PROC_HANGUL_TBASE;\n          if (hangul_tindex >= 0 && hangul_tindex < UTF8PROC_HANGUL_TCOUNT) {\n            *starter += hangul_tindex;\n            starter_property = NULL;\n            continue;\n          }\n        }\n        if (!starter_property) {\n          starter_property = unsafe_get_property(*starter);\n        }\n        int idx = starter_property->comb_index;\n        if (idx < 0x3FF && current_property->comb_issecond) {\n          int len = starter_property->comb_length;\n          utf8proc_int32_t max_second = utf8proc_combinations_second[idx + len - 1];\n          if (current_char <= max_second) {\n            int off;\n            // TODO: binary search? arithmetic search?\n            for (off = 0; off < len; ++off) {\n              utf8proc_int32_t second = utf8proc_combinations_second[idx + off];\n              if (current_char < second) {\n                /* not found */\n                break;\n              }\n              if (current_char == second) {\n                /* found */\n                utf8proc_int32_t composition = utf8proc_combinations_combined[idx + off];\n                *starter = composition;\n                starter_property = NULL;\n                break;\n              }\n            }\n            if (starter_property == NULL) {\n              /* found */\n              continue;\n            }\n          }\n        }\n      }\n      buffer[wpos] = current_char;\n      if (current_property->combining_class) {\n        if (current_property->combining_class > max_combining_class) {\n          max_combining_class = current_property->combining_class;\n        }\n      } else {\n        starter = buffer + wpos;\n        starter_property = NULL;\n        max_combining_class = -1;\n      }\n      wpos++;\n    }\n    length = wpos;\n  }\n  return length;\n}\n\nUTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_reencode(utf8proc_int32_t *buffer, utf8proc_ssize_t length, utf8proc_option_t options) {\n  /* UTF8PROC_NULLTERM option will be ignored, 'length' is never ignored\n     ASSERT: 'buffer' has one spare byte of free space at the end! */\n  length = utf8proc_normalize_utf32(buffer, length, options);\n  if (length < 0) return length;\n  {\n    utf8proc_ssize_t rpos, wpos = 0;\n    utf8proc_int32_t uc;\n    if (options & UTF8PROC_CHARBOUND) {\n        for (rpos = 0; rpos < length; rpos++) {\n            uc = buffer[rpos];\n            wpos += charbound_encode_char(uc, ((utf8proc_uint8_t *)buffer) + wpos);\n        }\n    } else {\n        for (rpos = 0; rpos < length; rpos++) {\n            uc = buffer[rpos];\n            wpos += utf8proc_encode_char(uc, ((utf8proc_uint8_t *)buffer) + wpos);\n        }\n    }\n    ((utf8proc_uint8_t *)buffer)[wpos] = 0;\n    return wpos;\n  }\n}\n\nUTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_map(\n  const utf8proc_uint8_t *str, utf8proc_ssize_t strlen, utf8proc_uint8_t **dstptr, utf8proc_option_t options\n) {\n    return utf8proc_map_custom(str, strlen, dstptr, options, NULL, NULL);\n}\n\nUTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_map_custom(\n  const utf8proc_uint8_t *str, utf8proc_ssize_t strlen, utf8proc_uint8_t **dstptr, utf8proc_option_t options,\n  utf8proc_custom_func custom_func, void *custom_data\n) {\n  utf8proc_int32_t *buffer;\n  utf8proc_ssize_t result;\n  *dstptr = NULL;\n  result = utf8proc_decompose_custom(str, strlen, NULL, 0, options, custom_func, custom_data);\n  if (result < 0) return result;\n  buffer = (utf8proc_int32_t *) malloc(((utf8proc_size_t)result) * sizeof(utf8proc_int32_t) + 1);\n  if (!buffer) return UTF8PROC_ERROR_NOMEM;\n  result = utf8proc_decompose_custom(str, strlen, buffer, result, options, custom_func, custom_data);\n  if (result < 0) {\n    free(buffer);\n    return result;\n  }\n  result = utf8proc_reencode(buffer, result, options);\n  if (result < 0) {\n    free(buffer);\n    return result;\n  }\n  {\n    utf8proc_int32_t *newptr;\n    newptr = (utf8proc_int32_t *) realloc(buffer, (size_t)result+1);\n    if (newptr) buffer = newptr;\n  }\n  *dstptr = (utf8proc_uint8_t *)buffer;\n  return result;\n}\n\nUTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFD(const utf8proc_uint8_t *str) {\n  utf8proc_uint8_t *retval;\n  utf8proc_map(str, 0, &retval, UTF8PROC_NULLTERM | UTF8PROC_STABLE |\n    UTF8PROC_DECOMPOSE);\n  return retval;\n}\n\nUTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFC(const utf8proc_uint8_t *str) {\n  utf8proc_uint8_t *retval;\n  utf8proc_map(str, 0, &retval, UTF8PROC_NULLTERM | UTF8PROC_STABLE |\n    UTF8PROC_COMPOSE);\n  return retval;\n}\n\nUTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFKD(const utf8proc_uint8_t *str) {\n  utf8proc_uint8_t *retval;\n  utf8proc_map(str, 0, &retval, UTF8PROC_NULLTERM | UTF8PROC_STABLE |\n    UTF8PROC_DECOMPOSE | UTF8PROC_COMPAT);\n  return retval;\n}\n\nUTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFKC(const utf8proc_uint8_t *str) {\n  utf8proc_uint8_t *retval;\n  utf8proc_map(str, 0, &retval, UTF8PROC_NULLTERM | UTF8PROC_STABLE |\n    UTF8PROC_COMPOSE | UTF8PROC_COMPAT);\n  return retval;\n}\n\nUTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFKC_Casefold(const utf8proc_uint8_t *str) {\n  utf8proc_uint8_t *retval;\n  utf8proc_map(str, 0, &retval, UTF8PROC_NULLTERM | UTF8PROC_STABLE |\n    UTF8PROC_COMPOSE | UTF8PROC_COMPAT | UTF8PROC_CASEFOLD | UTF8PROC_IGNORE);\n  return retval;\n}\n"
  },
  {
    "path": "compat/utf8proc.h",
    "content": "/*\n * Copyright (c) 2014-2021 Steven G. Johnson, Jiahao Chen, Peter Colberg, Tony Kelman, Scott P. Jones, and other contributors.\n * Copyright (c) 2009 Public Software Group e. V., Berlin, Germany\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\n\n\n/**\n * @mainpage\n *\n * utf8proc is a free/open-source (MIT/expat licensed) C library\n * providing Unicode normalization, case-folding, and other operations\n * for strings in the UTF-8 encoding, supporting up-to-date Unicode versions.\n * See the utf8proc home page (http://julialang.org/utf8proc/)\n * for downloads and other information, or the source code on github\n * (https://github.com/JuliaLang/utf8proc).\n *\n * For the utf8proc API documentation, see: @ref utf8proc.h\n *\n * The features of utf8proc include:\n *\n * - Transformation of strings (utf8proc_map()) to:\n *    - decompose (@ref UTF8PROC_DECOMPOSE) or compose (@ref UTF8PROC_COMPOSE) Unicode combining characters (http://en.wikipedia.org/wiki/Combining_character)\n *    - canonicalize Unicode compatibility characters (@ref UTF8PROC_COMPAT)\n *    - strip \"ignorable\" (@ref UTF8PROC_IGNORE) characters, control characters (@ref UTF8PROC_STRIPCC), or combining characters such as accents (@ref UTF8PROC_STRIPMARK)\n *    - case-folding (@ref UTF8PROC_CASEFOLD)\n * - Unicode normalization: utf8proc_NFD(), utf8proc_NFC(), utf8proc_NFKD(), utf8proc_NFKC()\n * - Detecting grapheme boundaries (utf8proc_grapheme_break() and @ref UTF8PROC_CHARBOUND)\n * - Character-width computation: utf8proc_charwidth()\n * - Classification of characters by Unicode category: utf8proc_category() and utf8proc_category_string()\n * - Encode (utf8proc_encode_char()) and decode (utf8proc_iterate()) Unicode codepoints to/from UTF-8.\n */\n\n/** @file */\n\n#ifndef UTF8PROC_H\n#define UTF8PROC_H\n\n/** @name API version\n *\n * The utf8proc API version MAJOR.MINOR.PATCH, following\n * semantic-versioning rules (http://semver.org) based on API\n * compatibility.\n *\n * This is also returned at runtime by utf8proc_version(); however, the\n * runtime version may append a string like \"-dev\" to the version number\n * for prerelease versions.\n *\n * @note The shared-library version number in the Makefile\n *       (and CMakeLists.txt, and MANIFEST) may be different,\n *       being based on ABI compatibility rather than API compatibility.\n */\n/** @{ */\n/** The MAJOR version number (increased when backwards API compatibility is broken). */\n#define UTF8PROC_VERSION_MAJOR 2\n/** The MINOR version number (increased when new functionality is added in a backwards-compatible manner). */\n#define UTF8PROC_VERSION_MINOR 11\n/** The PATCH version (increased for fixes that do not change the API). */\n#define UTF8PROC_VERSION_PATCH 0\n/** @} */\n\n#include <stdlib.h>\n\n#if defined(_MSC_VER) && _MSC_VER < 1800\n// MSVC prior to 2013 lacked stdbool.h and stdint.h\ntypedef signed char utf8proc_int8_t;\ntypedef unsigned char utf8proc_uint8_t;\ntypedef short utf8proc_int16_t;\ntypedef unsigned short utf8proc_uint16_t;\ntypedef int utf8proc_int32_t;\ntypedef unsigned int utf8proc_uint32_t;\n#  ifdef _WIN64\ntypedef __int64 utf8proc_ssize_t;\ntypedef unsigned __int64 utf8proc_size_t;\n#  else\ntypedef int utf8proc_ssize_t;\ntypedef unsigned int utf8proc_size_t;\n#  endif\n#  ifndef __cplusplus\n// emulate C99 bool\ntypedef unsigned char utf8proc_bool;\n#    ifndef __bool_true_false_are_defined\n#      define false 0\n#      define true 1\n#      define __bool_true_false_are_defined 1\n#    endif\n#  else\ntypedef bool utf8proc_bool;\n#  endif\n#else\n#  include <stddef.h>\n#  include <stdbool.h>\n#  include <stdint.h>\ntypedef int8_t utf8proc_int8_t;\ntypedef uint8_t utf8proc_uint8_t;\ntypedef int16_t utf8proc_int16_t;\ntypedef uint16_t utf8proc_uint16_t;\ntypedef int32_t utf8proc_int32_t;\ntypedef uint32_t utf8proc_uint32_t;\ntypedef size_t utf8proc_size_t;\ntypedef ptrdiff_t utf8proc_ssize_t;\ntypedef bool utf8proc_bool;\n#endif\n#include <limits.h>\n\n#ifdef UTF8PROC_STATIC\n#  define UTF8PROC_DLLEXPORT\n#else\n#  ifdef _WIN32\n#    ifdef UTF8PROC_EXPORTS\n#      define UTF8PROC_DLLEXPORT __declspec(dllexport)\n#    else\n#      define UTF8PROC_DLLEXPORT __declspec(dllimport)\n#    endif\n#  elif __GNUC__ >= 4\n#    define UTF8PROC_DLLEXPORT __attribute__ ((visibility(\"default\")))\n#  else\n#    define UTF8PROC_DLLEXPORT\n#  endif\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/**\n * Option flags used by several functions in the library.\n */\ntypedef enum {\n  /** The given UTF-8 input is NULL terminated. */\n  UTF8PROC_NULLTERM  = (1<<0),\n  /** Unicode Versioning Stability has to be respected. */\n  UTF8PROC_STABLE    = (1<<1),\n  /** Compatibility decomposition (i.e. formatting information is lost). */\n  UTF8PROC_COMPAT    = (1<<2),\n  /** Return a result with composed characters. */\n  UTF8PROC_COMPOSE   = (1<<3),\n  /** Return a result with decomposed characters. */\n  UTF8PROC_DECOMPOSE = (1<<4),\n  /** Strip \"default ignorable characters\" such as SOFT-HYPHEN or ZERO-WIDTH-SPACE. */\n  UTF8PROC_IGNORE    = (1<<5),\n  /** Return an error, if the input contains unassigned codepoints. */\n  UTF8PROC_REJECTNA  = (1<<6),\n  /**\n   * Indicating that NLF-sequences (LF, CRLF, CR, NEL) are representing a\n   * line break, and should be converted to the codepoint for line\n   * separation (LS).\n   */\n  UTF8PROC_NLF2LS    = (1<<7),\n  /**\n   * Indicating that NLF-sequences are representing a paragraph break, and\n   * should be converted to the codepoint for paragraph separation\n   * (PS).\n   */\n  UTF8PROC_NLF2PS    = (1<<8),\n  /** Indicating that the meaning of NLF-sequences is unknown. */\n  UTF8PROC_NLF2LF    = (UTF8PROC_NLF2LS | UTF8PROC_NLF2PS),\n  /** Strips and/or convers control characters.\n   *\n   * NLF-sequences are transformed into space, except if one of the\n   * NLF2LS/PS/LF options is given. HorizontalTab (HT) and FormFeed (FF)\n   * are treated as a NLF-sequence in this case.  All other control\n   * characters are simply removed.\n   */\n  UTF8PROC_STRIPCC   = (1<<9),\n  /**\n   * Performs unicode case folding, to be able to do a case-insensitive\n   * string comparison.\n   */\n  UTF8PROC_CASEFOLD  = (1<<10),\n  /**\n   * Inserts 0xFF bytes at the beginning of each sequence which is\n   * representing a single grapheme cluster (see UAX#29).\n   */\n  UTF8PROC_CHARBOUND = (1<<11),\n  /** Lumps certain characters together.\n   *\n   * E.g. HYPHEN U+2010 and MINUS U+2212 to ASCII \"-\". See lump.md for details.\n   *\n   * If NLF2LF is set, this includes a transformation of paragraph and\n   * line separators to ASCII line-feed (LF).\n   */\n  UTF8PROC_LUMP      = (1<<12),\n  /** Strips all character markings.\n   *\n   * This includes non-spacing, spacing and enclosing (i.e. accents).\n   * @note This option works only with @ref UTF8PROC_COMPOSE or\n   *       @ref UTF8PROC_DECOMPOSE\n   */\n  UTF8PROC_STRIPMARK = (1<<13),\n  /**\n   * Strip unassigned codepoints.\n   */\n  UTF8PROC_STRIPNA    = (1<<14),\n} utf8proc_option_t;\n\n/** @name Error codes\n * Error codes being returned by almost all functions.\n */\n/** @{ */\n/** Memory could not be allocated. */\n#define UTF8PROC_ERROR_NOMEM -1\n/** The given string is too long to be processed. */\n#define UTF8PROC_ERROR_OVERFLOW -2\n/** The given string is not a legal UTF-8 string. */\n#define UTF8PROC_ERROR_INVALIDUTF8 -3\n/** The @ref UTF8PROC_REJECTNA flag was set and an unassigned codepoint was found. */\n#define UTF8PROC_ERROR_NOTASSIGNED -4\n/** Invalid options have been used. */\n#define UTF8PROC_ERROR_INVALIDOPTS -5\n/** @} */\n\n/* @name Types */\n\n/** Holds the value of a property. */\ntypedef utf8proc_int16_t utf8proc_propval_t;\n\n/** Struct containing information about a codepoint. */\ntypedef struct utf8proc_property_struct {\n  /**\n   * Unicode category.\n   * @see utf8proc_category_t.\n   */\n  utf8proc_propval_t category;\n  utf8proc_propval_t combining_class;\n  /**\n   * Bidirectional class.\n   * @see utf8proc_bidi_class_t.\n   */\n  utf8proc_propval_t bidi_class;\n  /**\n   * @anchor Decomposition type.\n   * @see utf8proc_decomp_type_t.\n   */\n  utf8proc_propval_t decomp_type;\n  utf8proc_uint16_t decomp_seqindex;\n  utf8proc_uint16_t casefold_seqindex;\n  utf8proc_uint16_t uppercase_seqindex;\n  utf8proc_uint16_t lowercase_seqindex;\n  utf8proc_uint16_t titlecase_seqindex;\n  /**\n   * Character combining table.\n   *\n   * The character combining table is formally indexed by two\n   * characters, the first and second character that might form a\n   * combining pair. The table entry then contains the combined\n   * character. Most character pairs cannot be combined. There are\n   * about 1,000 characters that can be the first character in a\n   * combining pair, and for most, there are only a handful for\n   * possible second characters.\n   *\n   * The combining table is stored as sparse matrix in the CSR\n   * (compressed sparse row) format. That is, it is stored as two\n   * arrays, `utf8proc_uint32_t utf8proc_combinations_second[]` and\n   * `utf8proc_uint32_t utf8proc_combinations_combined[]`. These\n   * contain the second combining characters and the combined\n   * character of every combining pair.\n   *\n   * - `comb_index`: Index into the combining table if this character\n   *   is the first character in a combining pair, else 0x3ff\n   *\n   * - `comb_length`: Number of table entries for this first character\n   *\n   * - `comb_is_second`: As optimization we also record whether this\n   *   character is the second combining character in any pair. If\n   *   not, we can skip the table lookup.\n   *\n   * A table lookup starts from a given character pair. It first\n   * checks whether the first character is stored in the table\n   * (checking whether the index is 0x3ff) and whether the second\n   * index is stored in the table (looking at `comb_is_second`). If\n   * so, the `comb_length` table entries will be checked sequentially\n   * for a match.\n   */\n  utf8proc_uint16_t comb_index:10;\n  utf8proc_uint16_t comb_length:5;\n  utf8proc_uint16_t comb_issecond:1;\n  unsigned bidi_mirrored:1;\n  unsigned comp_exclusion:1;\n  /**\n   * Can this codepoint be ignored?\n   *\n   * Used by utf8proc_decompose_char() when @ref UTF8PROC_IGNORE is\n   * passed as an option.\n   */\n  unsigned ignorable:1;\n  unsigned control_boundary:1;\n  /** The width of the codepoint. */\n  unsigned charwidth:2;\n  /** East Asian width class A */\n  unsigned ambiguous_width:1;\n  unsigned pad:1;\n  /**\n   * Boundclass.\n   * @see utf8proc_boundclass_t.\n   */\n  unsigned boundclass:6;\n  unsigned indic_conjunct_break:2;\n} utf8proc_property_t;\n\n/** Unicode categories. */\ntypedef enum {\n  UTF8PROC_CATEGORY_CN  = 0, /**< Other, not assigned */\n  UTF8PROC_CATEGORY_LU  = 1, /**< Letter, uppercase */\n  UTF8PROC_CATEGORY_LL  = 2, /**< Letter, lowercase */\n  UTF8PROC_CATEGORY_LT  = 3, /**< Letter, titlecase */\n  UTF8PROC_CATEGORY_LM  = 4, /**< Letter, modifier */\n  UTF8PROC_CATEGORY_LO  = 5, /**< Letter, other */\n  UTF8PROC_CATEGORY_MN  = 6, /**< Mark, nonspacing */\n  UTF8PROC_CATEGORY_MC  = 7, /**< Mark, spacing combining */\n  UTF8PROC_CATEGORY_ME  = 8, /**< Mark, enclosing */\n  UTF8PROC_CATEGORY_ND  = 9, /**< Number, decimal digit */\n  UTF8PROC_CATEGORY_NL = 10, /**< Number, letter */\n  UTF8PROC_CATEGORY_NO = 11, /**< Number, other */\n  UTF8PROC_CATEGORY_PC = 12, /**< Punctuation, connector */\n  UTF8PROC_CATEGORY_PD = 13, /**< Punctuation, dash */\n  UTF8PROC_CATEGORY_PS = 14, /**< Punctuation, open */\n  UTF8PROC_CATEGORY_PE = 15, /**< Punctuation, close */\n  UTF8PROC_CATEGORY_PI = 16, /**< Punctuation, initial quote */\n  UTF8PROC_CATEGORY_PF = 17, /**< Punctuation, final quote */\n  UTF8PROC_CATEGORY_PO = 18, /**< Punctuation, other */\n  UTF8PROC_CATEGORY_SM = 19, /**< Symbol, math */\n  UTF8PROC_CATEGORY_SC = 20, /**< Symbol, currency */\n  UTF8PROC_CATEGORY_SK = 21, /**< Symbol, modifier */\n  UTF8PROC_CATEGORY_SO = 22, /**< Symbol, other */\n  UTF8PROC_CATEGORY_ZS = 23, /**< Separator, space */\n  UTF8PROC_CATEGORY_ZL = 24, /**< Separator, line */\n  UTF8PROC_CATEGORY_ZP = 25, /**< Separator, paragraph */\n  UTF8PROC_CATEGORY_CC = 26, /**< Other, control */\n  UTF8PROC_CATEGORY_CF = 27, /**< Other, format */\n  UTF8PROC_CATEGORY_CS = 28, /**< Other, surrogate */\n  UTF8PROC_CATEGORY_CO = 29, /**< Other, private use */\n} utf8proc_category_t;\n\n/** Bidirectional character classes. */\ntypedef enum {\n  UTF8PROC_BIDI_CLASS_L     = 1, /**< Left-to-Right */\n  UTF8PROC_BIDI_CLASS_LRE   = 2, /**< Left-to-Right Embedding */\n  UTF8PROC_BIDI_CLASS_LRO   = 3, /**< Left-to-Right Override */\n  UTF8PROC_BIDI_CLASS_R     = 4, /**< Right-to-Left */\n  UTF8PROC_BIDI_CLASS_AL    = 5, /**< Right-to-Left Arabic */\n  UTF8PROC_BIDI_CLASS_RLE   = 6, /**< Right-to-Left Embedding */\n  UTF8PROC_BIDI_CLASS_RLO   = 7, /**< Right-to-Left Override */\n  UTF8PROC_BIDI_CLASS_PDF   = 8, /**< Pop Directional Format */\n  UTF8PROC_BIDI_CLASS_EN    = 9, /**< European Number */\n  UTF8PROC_BIDI_CLASS_ES   = 10, /**< European Separator */\n  UTF8PROC_BIDI_CLASS_ET   = 11, /**< European Number Terminator */\n  UTF8PROC_BIDI_CLASS_AN   = 12, /**< Arabic Number */\n  UTF8PROC_BIDI_CLASS_CS   = 13, /**< Common Number Separator */\n  UTF8PROC_BIDI_CLASS_NSM  = 14, /**< Nonspacing Mark */\n  UTF8PROC_BIDI_CLASS_BN   = 15, /**< Boundary Neutral */\n  UTF8PROC_BIDI_CLASS_B    = 16, /**< Paragraph Separator */\n  UTF8PROC_BIDI_CLASS_S    = 17, /**< Segment Separator */\n  UTF8PROC_BIDI_CLASS_WS   = 18, /**< Whitespace */\n  UTF8PROC_BIDI_CLASS_ON   = 19, /**< Other Neutrals */\n  UTF8PROC_BIDI_CLASS_LRI  = 20, /**< Left-to-Right Isolate */\n  UTF8PROC_BIDI_CLASS_RLI  = 21, /**< Right-to-Left Isolate */\n  UTF8PROC_BIDI_CLASS_FSI  = 22, /**< First Strong Isolate */\n  UTF8PROC_BIDI_CLASS_PDI  = 23, /**< Pop Directional Isolate */\n} utf8proc_bidi_class_t;\n\n/** Decomposition type. */\ntypedef enum {\n  UTF8PROC_DECOMP_TYPE_FONT      = 1, /**< Font */\n  UTF8PROC_DECOMP_TYPE_NOBREAK   = 2, /**< Nobreak */\n  UTF8PROC_DECOMP_TYPE_INITIAL   = 3, /**< Initial */\n  UTF8PROC_DECOMP_TYPE_MEDIAL    = 4, /**< Medial */\n  UTF8PROC_DECOMP_TYPE_FINAL     = 5, /**< Final */\n  UTF8PROC_DECOMP_TYPE_ISOLATED  = 6, /**< Isolated */\n  UTF8PROC_DECOMP_TYPE_CIRCLE    = 7, /**< Circle */\n  UTF8PROC_DECOMP_TYPE_SUPER     = 8, /**< Super */\n  UTF8PROC_DECOMP_TYPE_SUB       = 9, /**< Sub */\n  UTF8PROC_DECOMP_TYPE_VERTICAL = 10, /**< Vertical */\n  UTF8PROC_DECOMP_TYPE_WIDE     = 11, /**< Wide */\n  UTF8PROC_DECOMP_TYPE_NARROW   = 12, /**< Narrow */\n  UTF8PROC_DECOMP_TYPE_SMALL    = 13, /**< Small */\n  UTF8PROC_DECOMP_TYPE_SQUARE   = 14, /**< Square */\n  UTF8PROC_DECOMP_TYPE_FRACTION = 15, /**< Fraction */\n  UTF8PROC_DECOMP_TYPE_COMPAT   = 16, /**< Compat */\n} utf8proc_decomp_type_t;\n\n/** Boundclass property. (TR29) */\ntypedef enum {\n  UTF8PROC_BOUNDCLASS_START              =  0, /**< Start */\n  UTF8PROC_BOUNDCLASS_OTHER              =  1, /**< Other */\n  UTF8PROC_BOUNDCLASS_CR                 =  2, /**< Cr */\n  UTF8PROC_BOUNDCLASS_LF                 =  3, /**< Lf */\n  UTF8PROC_BOUNDCLASS_CONTROL            =  4, /**< Control */\n  UTF8PROC_BOUNDCLASS_EXTEND             =  5, /**< Extend */\n  UTF8PROC_BOUNDCLASS_L                  =  6, /**< L */\n  UTF8PROC_BOUNDCLASS_V                  =  7, /**< V */\n  UTF8PROC_BOUNDCLASS_T                  =  8, /**< T */\n  UTF8PROC_BOUNDCLASS_LV                 =  9, /**< Lv */\n  UTF8PROC_BOUNDCLASS_LVT                = 10, /**< Lvt */\n  UTF8PROC_BOUNDCLASS_REGIONAL_INDICATOR = 11, /**< Regional indicator */\n  UTF8PROC_BOUNDCLASS_SPACINGMARK        = 12, /**< Spacingmark */\n  UTF8PROC_BOUNDCLASS_PREPEND            = 13, /**< Prepend */\n  UTF8PROC_BOUNDCLASS_ZWJ                = 14, /**< Zero Width Joiner */\n\n  /* the following are no longer used in Unicode 11, but we keep\n     the constants here for backward compatibility */\n  UTF8PROC_BOUNDCLASS_E_BASE             = 15, /**< Emoji Base */\n  UTF8PROC_BOUNDCLASS_E_MODIFIER         = 16, /**< Emoji Modifier */\n  UTF8PROC_BOUNDCLASS_GLUE_AFTER_ZWJ     = 17, /**< Glue_After_ZWJ */\n  UTF8PROC_BOUNDCLASS_E_BASE_GAZ         = 18, /**< E_BASE + GLUE_AFTER_ZJW */\n\n  /* the Extended_Pictographic property is used in the Unicode 11\n     grapheme-boundary rules, so we store it in the boundclass field */\n  UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC = 19,\n  UTF8PROC_BOUNDCLASS_E_ZWG = 20, /* UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC + ZWJ */\n} utf8proc_boundclass_t;\n\n/** Indic_Conjunct_Break property. (TR44) */\ntypedef enum {\n  UTF8PROC_INDIC_CONJUNCT_BREAK_NONE = 0,\n  UTF8PROC_INDIC_CONJUNCT_BREAK_LINKER = 1,\n  UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT = 2,\n  UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND = 3,\n} utf8proc_indic_conjunct_break_t;\n\n/**\n * Function pointer type passed to utf8proc_map_custom() and\n * utf8proc_decompose_custom(), which is used to specify a user-defined\n * mapping of codepoints to be applied in conjunction with other mappings.\n */\ntypedef utf8proc_int32_t (*utf8proc_custom_func)(utf8proc_int32_t codepoint, void *data);\n\n/**\n * Array containing the byte lengths of a UTF-8 encoded codepoint based\n * on the first byte.\n */\nUTF8PROC_DLLEXPORT extern const utf8proc_int8_t utf8proc_utf8class[256];\n\n/**\n * Returns the utf8proc API version as a string MAJOR.MINOR.PATCH\n * (http://semver.org format), possibly with a \"-dev\" suffix for\n * development versions.\n */\nUTF8PROC_DLLEXPORT const char *utf8proc_version(void);\n\n/**\n * Returns the utf8proc supported Unicode version as a string MAJOR.MINOR.PATCH.\n */\nUTF8PROC_DLLEXPORT const char *utf8proc_unicode_version(void);\n\n/**\n * Returns an informative error string for the given utf8proc error code\n * (e.g. the error codes returned by utf8proc_map()).\n */\nUTF8PROC_DLLEXPORT const char *utf8proc_errmsg(utf8proc_ssize_t errcode);\n\n/**\n * Reads a single codepoint from the UTF-8 sequence being pointed to by `str`.\n * The maximum number of bytes read is `strlen`, unless `strlen` is\n * negative (in which case up to 4 bytes are read).\n *\n * If a valid codepoint could be read, it is stored in the variable\n * pointed to by `codepoint_ref`, otherwise that variable will be set to -1.\n * In case of success, the number of bytes read is returned; otherwise, a\n * negative error code is returned.\n */\nUTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_iterate(const utf8proc_uint8_t *str, utf8proc_ssize_t strlen, utf8proc_int32_t *codepoint_ref);\n\n/**\n * Check if a codepoint is valid (regardless of whether it has been\n * assigned a value by the current Unicode standard).\n *\n * @return 1 if the given `codepoint` is valid and otherwise return 0.\n */\nUTF8PROC_DLLEXPORT utf8proc_bool utf8proc_codepoint_valid(utf8proc_int32_t codepoint);\n\n/**\n * Encodes the codepoint as an UTF-8 string in the byte array pointed\n * to by `dst`. This array must be at least 4 bytes long.\n *\n * In case of success the number of bytes written is returned, and\n * otherwise 0 is returned.\n *\n * This function does not check whether `codepoint` is valid Unicode.\n */\nUTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_encode_char(utf8proc_int32_t codepoint, utf8proc_uint8_t *dst);\n\n/**\n * Look up the properties for a given codepoint.\n *\n * @param codepoint The Unicode codepoint.\n *\n * @returns\n * A pointer to a (constant) struct containing information about\n * the codepoint.\n * @par\n * If the codepoint is unassigned or invalid, a pointer to a special struct is\n * returned in which `category` is 0 (@ref UTF8PROC_CATEGORY_CN).\n */\nUTF8PROC_DLLEXPORT const utf8proc_property_t *utf8proc_get_property(utf8proc_int32_t codepoint);\n\n/** Decompose a codepoint into an array of codepoints.\n *\n * @param codepoint the codepoint.\n * @param dst the destination buffer.\n * @param bufsize the size of the destination buffer.\n * @param options one or more of the following flags:\n * - @ref UTF8PROC_REJECTNA  - return an error if `codepoint` is unassigned\n * - @ref UTF8PROC_IGNORE    - strip \"default ignorable\" codepoints\n * - @ref UTF8PROC_CASEFOLD  - apply Unicode casefolding\n * - @ref UTF8PROC_COMPAT    - replace certain codepoints with their\n *                             compatibility decomposition\n * - @ref UTF8PROC_CHARBOUND - insert 0xFF bytes before each grapheme cluster\n * - @ref UTF8PROC_LUMP      - lump certain different codepoints together\n * - @ref UTF8PROC_STRIPMARK - remove all character marks\n * - @ref UTF8PROC_STRIPNA   - remove unassigned codepoints\n * @param last_boundclass\n * Pointer to an integer variable containing\n * the previous codepoint's (boundclass + indic_conjunct_break << 1) if the @ref UTF8PROC_CHARBOUND\n * option is used.  If the string is being processed in order, this can be initialized to 0 for\n * the beginning of the string, and is thereafter updated automatically.  Otherwise, this parameter is ignored.\n *\n * In the current version of utf8proc, the maximum destination buffer with the @ref UTF8PROC_DECOMPOSE\n * option is 4 elements (or double that with @ref UTF8PROC_CHARBOUND), so this is a good default size.\n * However, this may increase in future Unicode versions, so you should always check the return value\n * as described below.\n *\n * @return\n * In case of success, the number of codepoints written is returned; in case\n * of an error, a negative error code is returned (utf8proc_errmsg()).\n * @par\n * If the number of written codepoints would be bigger than `bufsize`, the\n * required buffer size is returned, while the buffer will be overwritten with\n * undefined data.\n */\nUTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_decompose_char(\n  utf8proc_int32_t codepoint, utf8proc_int32_t *dst, utf8proc_ssize_t bufsize,\n  utf8proc_option_t options, int *last_boundclass\n);\n\n/**\n * The same as utf8proc_decompose_char(), but acts on a whole UTF-8\n * string and orders the decomposed sequences correctly.\n *\n * If the @ref UTF8PROC_NULLTERM flag in `options` is set, processing\n * will be stopped, when a NULL byte is encountered, otherwise `strlen`\n * bytes are processed.  The result (in the form of 32-bit unicode\n * codepoints) is written into the buffer being pointed to by\n * `buffer` (which must contain at least `bufsize` entries).  In case of\n * success, the number of codepoints written is returned; in case of an\n * error, a negative error code is returned (utf8proc_errmsg()).\n * See utf8proc_decompose_custom() to supply additional transformations.\n *\n * If the number of written codepoints would be bigger than `bufsize`, the\n * required buffer size is returned, while the buffer will be overwritten with\n * undefined data.\n */\nUTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_decompose(\n  const utf8proc_uint8_t *str, utf8proc_ssize_t strlen,\n  utf8proc_int32_t *buffer, utf8proc_ssize_t bufsize, utf8proc_option_t options\n);\n\n/**\n * The same as utf8proc_decompose(), but also takes a `custom_func` mapping function\n * that is called on each codepoint in `str` before any other transformations\n * (along with a `custom_data` pointer that is passed through to `custom_func`).\n * The `custom_func` argument is ignored if it is `NULL`.  See also utf8proc_map_custom().\n */\nUTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_decompose_custom(\n  const utf8proc_uint8_t *str, utf8proc_ssize_t strlen,\n  utf8proc_int32_t *buffer, utf8proc_ssize_t bufsize, utf8proc_option_t options,\n  utf8proc_custom_func custom_func, void *custom_data\n);\n\n/**\n * Normalizes the sequence of `length` codepoints pointed to by `buffer`\n * in-place (i.e., the result is also stored in `buffer`).\n *\n * @param buffer the (native-endian UTF-32) unicode codepoints to re-encode.\n * @param length the length (in codepoints) of the buffer.\n * @param options a bitwise or (`|`) of one or more of the following flags:\n * - @ref UTF8PROC_NLF2LS  - convert LF, CRLF, CR and NEL into LS\n * - @ref UTF8PROC_NLF2PS  - convert LF, CRLF, CR and NEL into PS\n * - @ref UTF8PROC_NLF2LF  - convert LF, CRLF, CR and NEL into LF\n * - @ref UTF8PROC_STRIPCC - strip or convert all non-affected control characters\n * - @ref UTF8PROC_COMPOSE - try to combine decomposed codepoints into composite\n *                           codepoints\n * - @ref UTF8PROC_STABLE  - prohibit combining characters that would violate\n *                           the unicode versioning stability\n *\n * @return\n * In case of success, the length (in codepoints) of the normalized UTF-32 string is\n * returned; otherwise, a negative error code is returned (utf8proc_errmsg()).\n *\n * @warning The entries of the array pointed to by `str` have to be in the\n *          range `0x0000` to `0x10FFFF`. Otherwise, the program might crash!\n */\nUTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_normalize_utf32(utf8proc_int32_t *buffer, utf8proc_ssize_t length, utf8proc_option_t options);\n\n/**\n * Reencodes the sequence of `length` codepoints pointed to by `buffer`\n * UTF-8 data in-place (i.e., the result is also stored in `buffer`).\n * Can optionally normalize the UTF-32 sequence prior to UTF-8 conversion.\n *\n * @param buffer the (native-endian UTF-32) unicode codepoints to re-encode.\n * @param length the length (in codepoints) of the buffer.\n * @param options a bitwise or (`|`) of one or more of the following flags:\n * - @ref UTF8PROC_NLF2LS  - convert LF, CRLF, CR and NEL into LS\n * - @ref UTF8PROC_NLF2PS  - convert LF, CRLF, CR and NEL into PS\n * - @ref UTF8PROC_NLF2LF  - convert LF, CRLF, CR and NEL into LF\n * - @ref UTF8PROC_STRIPCC - strip or convert all non-affected control characters\n * - @ref UTF8PROC_COMPOSE - try to combine decomposed codepoints into composite\n *                           codepoints\n * - @ref UTF8PROC_STABLE  - prohibit combining characters that would violate\n *                           the unicode versioning stability\n * - @ref UTF8PROC_CHARBOUND - insert 0xFF bytes before each grapheme cluster\n *\n * @return\n * In case of success, the length (in bytes) of the resulting nul-terminated\n * UTF-8 string is returned; otherwise, a negative error code is returned\n * (utf8proc_errmsg()).\n *\n * @warning The amount of free space pointed to by `buffer` must\n *          exceed the amount of the input data by one byte, and the\n *          entries of the array pointed to by `str` have to be in the\n *          range `0x0000` to `0x10FFFF`. Otherwise, the program might crash!\n */\nUTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_reencode(utf8proc_int32_t *buffer, utf8proc_ssize_t length, utf8proc_option_t options);\n\n/**\n * Given a pair of consecutive codepoints, return whether a grapheme break is\n * permitted between them (as defined by the extended grapheme clusters in UAX#29).\n *\n * @param codepoint1 The first codepoint.\n * @param codepoint2 The second codepoint, occurring consecutively after `codepoint1`.\n * @param state Beginning with Version 29 (Unicode 9.0.0), this algorithm requires\n *              state to break graphemes. This state can be passed in as a pointer\n *              in the `state` argument and should initially be set to 0. If the\n *              state is not passed in (i.e. a null pointer is passed), UAX#29 rules\n *              GB10/12/13 which require this state will not be applied, essentially\n *              matching the rules in Unicode 8.0.0.\n *\n * @warning If the state parameter is used, `utf8proc_grapheme_break_stateful` must\n *          be called IN ORDER on ALL potential breaks in a string.  However, it\n *          is safe to reset the state to zero after a grapheme break.\n */\nUTF8PROC_DLLEXPORT utf8proc_bool utf8proc_grapheme_break_stateful(\n    utf8proc_int32_t codepoint1, utf8proc_int32_t codepoint2, utf8proc_int32_t *state);\n\n/**\n * Same as utf8proc_grapheme_break_stateful(), except without support for the\n * Unicode 9 additions to the algorithm. Supported for legacy reasons.\n */\nUTF8PROC_DLLEXPORT utf8proc_bool utf8proc_grapheme_break(\n    utf8proc_int32_t codepoint1, utf8proc_int32_t codepoint2);\n\n\n/**\n * Given a codepoint `c`, return the codepoint of the corresponding\n * lower-case character, if any; otherwise (if there is no lower-case\n * variant, or if `c` is not a valid codepoint) return `c`.\n */\nUTF8PROC_DLLEXPORT utf8proc_int32_t utf8proc_tolower(utf8proc_int32_t c);\n\n/**\n * Given a codepoint `c`, return the codepoint of the corresponding\n * upper-case character, if any; otherwise (if there is no upper-case\n * variant, or if `c` is not a valid codepoint) return `c`.\n */\nUTF8PROC_DLLEXPORT utf8proc_int32_t utf8proc_toupper(utf8proc_int32_t c);\n\n/**\n * Given a codepoint `c`, return the codepoint of the corresponding\n * title-case character, if any; otherwise (if there is no title-case\n * variant, or if `c` is not a valid codepoint) return `c`.\n */\nUTF8PROC_DLLEXPORT utf8proc_int32_t utf8proc_totitle(utf8proc_int32_t c);\n\n/**\n * Given a codepoint `c`, return `1` if the codepoint corresponds to a lower-case character\n * and `0` otherwise.\n */\nUTF8PROC_DLLEXPORT int utf8proc_islower(utf8proc_int32_t c);\n\n/**\n * Given a codepoint `c`, return `1` if the codepoint corresponds to an upper-case character\n * and `0` otherwise.\n */\nUTF8PROC_DLLEXPORT int utf8proc_isupper(utf8proc_int32_t c);\n\n/**\n * Given a codepoint, return a character width analogous to `wcwidth(codepoint)`,\n * except that a width of 0 is returned for non-printable codepoints\n * instead of -1 as in `wcwidth`.\n *\n * @note\n * If you want to check for particular types of non-printable characters,\n * (analogous to `isprint` or `iscntrl`), use utf8proc_category(). */\nUTF8PROC_DLLEXPORT int utf8proc_charwidth(utf8proc_int32_t codepoint);\n\n/**\n * Given a codepoint, return whether it has East Asian width class A (Ambiguous)\n *\n * Codepoints with this property are considered to have charwidth 1 (if they are printable)\n * but some East Asian fonts render them as double width.\n */\nUTF8PROC_DLLEXPORT utf8proc_bool utf8proc_charwidth_ambiguous(utf8proc_int32_t codepoint);\n\n/**\n * Return the Unicode category for the codepoint (one of the\n * @ref utf8proc_category_t constants.)\n */\nUTF8PROC_DLLEXPORT utf8proc_category_t utf8proc_category(utf8proc_int32_t codepoint);\n\n/**\n * Return the two-letter (nul-terminated) Unicode category string for\n * the codepoint (e.g. `\"Lu\"` or `\"Co\"`).\n */\nUTF8PROC_DLLEXPORT const char *utf8proc_category_string(utf8proc_int32_t codepoint);\n\n/**\n * Maps the given UTF-8 string pointed to by `str` to a new UTF-8\n * string, allocated dynamically by `malloc` and returned via `dstptr`.\n *\n * If the @ref UTF8PROC_NULLTERM flag in the `options` field is set,\n * the length is determined by a NULL terminator, otherwise the\n * parameter `strlen` is evaluated to determine the string length, but\n * in any case the result will be NULL terminated (though it might\n * contain NULL characters with the string if `str` contained NULL\n * characters). Other flags in the `options` field are passed to the\n * functions defined above, and regarded as described.  See also\n * utf8proc_map_custom() to supply a custom codepoint transformation.\n *\n * In case of success the length of the new string is returned,\n * otherwise a negative error code is returned.\n *\n * @note The memory of the new UTF-8 string will have been allocated\n * with `malloc`, and should therefore be deallocated with `free`.\n */\nUTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_map(\n  const utf8proc_uint8_t *str, utf8proc_ssize_t strlen, utf8proc_uint8_t **dstptr, utf8proc_option_t options\n);\n\n/**\n * Like utf8proc_map(), but also takes a `custom_func` mapping function\n * that is called on each codepoint in `str` before any other transformations\n * (along with a `custom_data` pointer that is passed through to `custom_func`).\n * The `custom_func` argument is ignored if it is `NULL`.\n */\nUTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_map_custom(\n  const utf8proc_uint8_t *str, utf8proc_ssize_t strlen, utf8proc_uint8_t **dstptr, utf8proc_option_t options,\n  utf8proc_custom_func custom_func, void *custom_data\n);\n\n/** @name Unicode normalization\n *\n * Returns a pointer to newly allocated memory of a NFD, NFC, NFKD, NFKC or\n * NFKC_Casefold normalized version of the null-terminated string `str`.  These\n * are shortcuts to calling utf8proc_map() with @ref UTF8PROC_NULLTERM\n * combined with @ref UTF8PROC_STABLE and flags indicating the normalization.\n */\n/** @{ */\n/** NFD normalization (@ref UTF8PROC_DECOMPOSE). */\nUTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFD(const utf8proc_uint8_t *str);\n/** NFC normalization (@ref UTF8PROC_COMPOSE). */\nUTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFC(const utf8proc_uint8_t *str);\n/** NFKD normalization (@ref UTF8PROC_DECOMPOSE and @ref UTF8PROC_COMPAT). */\nUTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFKD(const utf8proc_uint8_t *str);\n/** NFKC normalization (@ref UTF8PROC_COMPOSE and @ref UTF8PROC_COMPAT). */\nUTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFKC(const utf8proc_uint8_t *str);\n/**\n * NFKC_Casefold normalization (@ref UTF8PROC_COMPOSE and @ref UTF8PROC_COMPAT\n * and @ref UTF8PROC_CASEFOLD and @ref UTF8PROC_IGNORE).\n **/\nUTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFKC_Casefold(const utf8proc_uint8_t *str);\n/** @} */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "compat/utf8proc.license.md",
    "content": "## utf8proc license ##\n\n**utf8proc** is a software package originally developed\nby Jan Behrens and the rest of the Public Software Group, who\ndeserve nearly all of the credit for this library, that is now maintained by the Julia-language developers.  Like the original utf8proc,\nwhose copyright and license statements are reproduced below, all new\nwork on the utf8proc library is licensed under the [MIT \"expat\"\nlicense](http://opensource.org/licenses/MIT):\n\n*Copyright &copy; 2014-2021 by Steven G. Johnson, Jiahao Chen, Tony Kelman, Jonas Fonseca, and other contributors listed in the git history.*\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the \"Software\"),\nto deal in the Software without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense,\nand/or sell copies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\nDEALINGS IN THE SOFTWARE.\n\n## Original utf8proc license ##\n\n*Copyright (c) 2009, 2013 Public Software Group e. V., Berlin, Germany*\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the \"Software\"),\nto deal in the Software without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense,\nand/or sell copies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\nDEALINGS IN THE SOFTWARE.\n\n## Unicode data license ##\n\nThis software contains data (`utf8proc_data.c`) derived from processing\nthe Unicode data files. The following license applies to that data:\n\n**COPYRIGHT AND PERMISSION NOTICE**\n\n*Copyright (c) 1991-2007 Unicode, Inc. All rights reserved. Distributed\nunder the Terms of Use in http://www.unicode.org/copyright.html.*\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of the Unicode data files and any associated documentation (the \"Data\nFiles\") or Unicode software and any associated documentation (the\n\"Software\") to deal in the Data Files or Software without restriction,\nincluding without limitation the rights to use, copy, modify, merge,\npublish, distribute, and/or sell copies of the Data Files or Software, and\nto permit persons to whom the Data Files or Software are furnished to do\nso, provided that (a) the above copyright notice(s) and this permission\nnotice appear with all copies of the Data Files or Software, (b) both the\nabove copyright notice(s) and this permission notice appear in associated\ndocumentation, and (c) there is clear notice in each modified Data File or\nin the Software as well as in the documentation associated with the Data\nFile(s) or Software that the data or software has been modified.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY\nKIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF\nTHIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS\nINCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR\nCONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF\nUSE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder shall\nnot be used in advertising or otherwise to promote the sale, use or other\ndealings in these Data Files or Software without prior written\nauthorization of the copyright holder.\n\nUnicode and the Unicode logo are trademarks of Unicode, Inc., and may be\nregistered in some jurisdictions. All other trademarks and registered\ntrademarks mentioned herein are the property of their respective owners.\n"
  },
  {
    "path": "compat/utf8proc_data.c",
    "content": "static const utf8proc_uint16_t utf8proc_sequences[] = {\n  97, 98, 99, 100, 101, 102, 103, \n  104, 105, 106, 107, 108, 109, 110, 111, \n  112, 113, 114, 115, 116, 117, 118, 119, \n  120, 121, 122, 65, 66, 67, 68, 69, \n  70, 71, 72, 73, 74, 75, 76, 77, \n  78, 79, 80, 81, 82, 83, 84, 85, \n  86, 87, 88, 89, 90, 32, 32, 776, \n  170, 32, 772, 50, 51, 32, 769, 956, \n  924, 32, 807, 49, 186, 49, 8260, 52, \n  49, 8260, 50, 51, 8260, 52, 65, 768, \n  224, 65, 769, 225, 65, 770, 226, 65, \n  771, 227, 65, 776, 228, 65, 778, 229, \n  230, 67, 807, 231, 69, 768, 232, 69, \n  769, 233, 69, 770, 234, 69, 776, 235, \n  73, 768, 236, 73, 769, 237, 73, 770, \n  238, 73, 776, 239, 240, 78, 771, 241, \n  79, 768, 242, 79, 769, 243, 79, 770, \n  244, 79, 771, 245, 79, 776, 246, 248, \n  85, 768, 249, 85, 769, 250, 85, 770, \n  251, 85, 776, 252, 89, 769, 253, 254, \n  115, 115, 7838, 97, 768, 192, 97, 769, \n  193, 97, 770, 194, 97, 771, 195, 97, \n  776, 196, 97, 778, 197, 198, 99, 807, \n  199, 101, 768, 200, 101, 769, 201, 101, \n  770, 202, 101, 776, 203, 105, 768, 204, \n  105, 769, 205, 105, 770, 206, 105, 776, \n  207, 208, 110, 771, 209, 111, 768, 210, \n  111, 769, 211, 111, 770, 212, 111, 771, \n  213, 111, 776, 214, 216, 117, 768, 217, \n  117, 769, 218, 117, 770, 219, 117, 776, \n  220, 121, 769, 221, 222, 121, 776, 376, \n  65, 772, 257, 97, 772, 256, 65, 774, \n  259, 97, 774, 258, 65, 808, 261, 97, \n  808, 260, 67, 769, 263, 99, 769, 262, \n  67, 770, 265, 99, 770, 264, 67, 775, \n  267, 99, 775, 266, 67, 780, 269, 99, \n  780, 268, 68, 780, 271, 100, 780, 270, \n  273, 272, 69, 772, 275, 101, 772, 274, \n  69, 774, 277, 101, 774, 276, 69, 775, \n  279, 101, 775, 278, 69, 808, 281, 101, \n  808, 280, 69, 780, 283, 101, 780, 282, \n  71, 770, 285, 103, 770, 284, 71, 774, \n  287, 103, 774, 286, 71, 775, 289, 103, \n  775, 288, 71, 807, 291, 103, 807, 290, \n  72, 770, 293, 104, 770, 292, 295, 294, \n  73, 771, 297, 105, 771, 296, 73, 772, \n  299, 105, 772, 298, 73, 774, 301, 105, \n  774, 300, 73, 808, 303, 105, 808, 302, \n  73, 775, 105, 775, 73, 74, 307, 105, \n  106, 306, 74, 770, 309, 106, 770, 308, \n  75, 807, 311, 107, 807, 310, 312, 76, \n  769, 314, 108, 769, 313, 76, 807, 316, \n  108, 807, 315, 76, 780, 318, 108, 780, \n  317, 76, 183, 320, 108, 183, 319, 322, \n  321, 78, 769, 324, 110, 769, 323, 78, \n  807, 326, 110, 807, 325, 78, 780, 328, \n  110, 780, 327, 700, 110, 329, 331, 330, \n  79, 772, 333, 111, 772, 332, 79, 774, \n  335, 111, 774, 334, 79, 779, 337, 111, \n  779, 336, 339, 338, 82, 769, 341, 114, \n  769, 340, 82, 807, 343, 114, 807, 342, \n  82, 780, 345, 114, 780, 344, 83, 769, \n  347, 115, 769, 346, 83, 770, 349, 115, \n  770, 348, 83, 807, 351, 115, 807, 350, \n  83, 780, 353, 115, 780, 352, 84, 807, \n  355, 116, 807, 354, 84, 780, 357, 116, \n  780, 356, 359, 358, 85, 771, 361, 117, \n  771, 360, 85, 772, 363, 117, 772, 362, \n  85, 774, 365, 117, 774, 364, 85, 778, \n  367, 117, 778, 366, 85, 779, 369, 117, \n  779, 368, 85, 808, 371, 117, 808, 370, \n  87, 770, 373, 119, 770, 372, 89, 770, \n  375, 121, 770, 374, 89, 776, 255, 90, \n  769, 378, 122, 769, 377, 90, 775, 380, \n  122, 775, 379, 90, 780, 382, 122, 780, \n  381, 579, 595, 387, 386, 389, 388, 596, \n  392, 391, 598, 599, 396, 395, 397, 477, \n  601, 603, 402, 401, 608, 611, 502, 617, \n  616, 409, 408, 573, 42972, 623, 626, 544, \n  629, 79, 795, 417, 111, 795, 416, 419, \n  418, 421, 420, 640, 424, 423, 643, 426, \n  427, 429, 428, 648, 85, 795, 432, 117, \n  795, 431, 650, 651, 436, 435, 438, 437, \n  658, 441, 440, 442, 445, 444, 446, 503, \n  68, 381, 454, 453, 68, 382, 452, 100, \n  382, 76, 74, 457, 456, 76, 106, 455, \n  108, 106, 78, 74, 460, 459, 78, 106, \n  458, 110, 106, 65, 780, 462, 97, 780, \n  461, 73, 780, 464, 105, 780, 463, 79, \n  780, 466, 111, 780, 465, 85, 780, 468, \n  117, 780, 467, 220, 772, 470, 252, 772, \n  469, 220, 769, 472, 252, 769, 471, 220, \n  780, 474, 252, 780, 473, 220, 768, 476, \n  252, 768, 475, 398, 196, 772, 479, 228, \n  772, 478, 550, 772, 481, 551, 772, 480, \n  198, 772, 483, 230, 772, 482, 485, 484, \n  71, 780, 487, 103, 780, 486, 75, 780, \n  489, 107, 780, 488, 79, 808, 491, 111, \n  808, 490, 490, 772, 493, 491, 772, 492, \n  439, 780, 495, 658, 780, 494, 106, 780, \n  496, 68, 90, 499, 498, 68, 122, 497, \n  100, 122, 71, 769, 501, 103, 769, 500, \n  405, 447, 78, 768, 505, 110, 768, 504, \n  197, 769, 507, 229, 769, 506, 198, 769, \n  509, 230, 769, 508, 216, 769, 511, 248, \n  769, 510, 65, 783, 513, 97, 783, 512, \n  65, 785, 515, 97, 785, 514, 69, 783, \n  517, 101, 783, 516, 69, 785, 519, 101, \n  785, 518, 73, 783, 521, 105, 783, 520, \n  73, 785, 523, 105, 785, 522, 79, 783, \n  525, 111, 783, 524, 79, 785, 527, 111, \n  785, 526, 82, 783, 529, 114, 783, 528, \n  82, 785, 531, 114, 785, 530, 85, 783, \n  533, 117, 783, 532, 85, 785, 535, 117, \n  785, 534, 83, 806, 537, 115, 806, 536, \n  84, 806, 539, 116, 806, 538, 541, 540, \n  72, 780, 543, 104, 780, 542, 414, 545, \n  547, 546, 549, 548, 65, 775, 551, 97, \n  775, 550, 69, 807, 553, 101, 807, 552, \n  214, 772, 555, 246, 772, 554, 213, 772, \n  557, 245, 772, 556, 79, 775, 559, 111, \n  775, 558, 558, 772, 561, 559, 772, 560, \n  89, 772, 563, 121, 772, 562, 564, 565, \n  566, 567, 568, 569, 11365, 572, 571, 410, \n  11366, 11390, 11391, 578, 577, 384, 649, 652, \n  583, 582, 585, 584, 587, 586, 589, 588, \n  591, 590, 11375, 11373, 11376, 385, 390, 597, \n  393, 394, 600, 399, 602, 400, 42923, 605, \n  606, 607, 403, 42924, 610, 404, 42955, 42893, \n  42922, 615, 407, 406, 42926, 11362, 42925, 621, \n  622, 412, 624, 11374, 413, 627, 628, 415, \n  630, 631, 632, 633, 634, 635, 636, 11364, \n  638, 639, 422, 641, 42949, 425, 644, 645, \n  646, 42929, 430, 580, 433, 434, 581, 653, \n  654, 655, 656, 657, 439, 659, 662, 663, \n  664, 665, 666, 667, 668, 42930, 42928, 671, \n  672, 673, 674, 675, 676, 677, 678, 679, \n  680, 681, 682, 683, 684, 685, 686, 687, \n  688, 614, 689, 690, 691, 692, 693, 694, \n  695, 696, 704, 705, 32, 774, 32, 775, \n  32, 778, 32, 808, 32, 771, 32, 779, \n  736, 737, 738, 739, 661, 740, 768, 769, \n  787, 776, 769, 953, 921, 881, 880, 883, \n  882, 697, 887, 886, 32, 837, 890, 1021, \n  1022, 1023, 59, 1011, 168, 769, 913, 769, \n  940, 183, 917, 769, 941, 919, 769, 942, \n  921, 769, 943, 927, 769, 972, 933, 769, \n  973, 937, 769, 974, 970, 769, 953, 776, \n  769, 912, 945, 946, 947, 948, 949, 950, \n  951, 952, 954, 955, 957, 958, 959, 960, \n  961, 963, 964, 965, 966, 967, 968, 969, \n  921, 776, 970, 933, 776, 971, 945, 769, \n  902, 949, 769, 904, 951, 769, 905, 953, \n  769, 906, 971, 769, 965, 776, 769, 944, \n  913, 914, 915, 916, 917, 918, 919, 920, \n  922, 923, 925, 926, 927, 928, 929, 931, \n  932, 933, 934, 935, 936, 937, 953, 776, \n  938, 965, 776, 939, 959, 769, 908, 965, \n  769, 910, 969, 769, 911, 983, 978, 978, \n  769, 979, 978, 776, 980, 975, 985, 984, \n  987, 986, 989, 988, 991, 990, 993, 992, \n  995, 994, 997, 996, 999, 998, 1001, 1000, \n  1003, 1002, 1005, 1004, 1007, 1006, 962, 1017, \n  895, 1016, 1015, 1010, 1019, 1018, 1020, 891, \n  892, 893, 1045, 768, 1104, 1045, 776, 1105, \n  1106, 1043, 769, 1107, 1108, 1109, 1110, 1030, \n  776, 1111, 1112, 1113, 1114, 1115, 1050, 769, \n  1116, 1048, 768, 1117, 1059, 774, 1118, 1119, \n  1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, \n  1080, 1048, 774, 1081, 1082, 1083, 1084, 1085, \n  1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, \n  1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, \n  1102, 1103, 1040, 1041, 1042, 1043, 1044, 1045, \n  1046, 1047, 1048, 1080, 774, 1049, 1050, 1051, \n  1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, \n  1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, \n  1068, 1069, 1070, 1071, 1077, 768, 1024, 1077, \n  776, 1025, 1026, 1075, 769, 1027, 1028, 1029, \n  1030, 1110, 776, 1031, 1032, 1033, 1034, 1035, \n  1082, 769, 1036, 1080, 768, 1037, 1091, 774, \n  1038, 1039, 1121, 1120, 1123, 1122, 1125, 1124, \n  1127, 1126, 1129, 1128, 1131, 1130, 1133, 1132, \n  1135, 1134, 1137, 1136, 1139, 1138, 1141, 1140, \n  1140, 783, 1143, 1141, 783, 1142, 1145, 1144, \n  1147, 1146, 1149, 1148, 1151, 1150, 1153, 1152, \n  1163, 1162, 1165, 1164, 1167, 1166, 1169, 1168, \n  1171, 1170, 1173, 1172, 1175, 1174, 1177, 1176, \n  1179, 1178, 1181, 1180, 1183, 1182, 1185, 1184, \n  1187, 1186, 1189, 1188, 1191, 1190, 1193, 1192, \n  1195, 1194, 1197, 1196, 1199, 1198, 1201, 1200, \n  1203, 1202, 1205, 1204, 1207, 1206, 1209, 1208, \n  1211, 1210, 1213, 1212, 1215, 1214, 1231, 1046, \n  774, 1218, 1078, 774, 1217, 1220, 1219, 1222, \n  1221, 1224, 1223, 1226, 1225, 1228, 1227, 1230, \n  1229, 1216, 1040, 774, 1233, 1072, 774, 1232, \n  1040, 776, 1235, 1072, 776, 1234, 1237, 1236, \n  1045, 774, 1239, 1077, 774, 1238, 1241, 1240, \n  1240, 776, 1243, 1241, 776, 1242, 1046, 776, \n  1245, 1078, 776, 1244, 1047, 776, 1247, 1079, \n  776, 1246, 1249, 1248, 1048, 772, 1251, 1080, \n  772, 1250, 1048, 776, 1253, 1080, 776, 1252, \n  1054, 776, 1255, 1086, 776, 1254, 1257, 1256, \n  1256, 776, 1259, 1257, 776, 1258, 1069, 776, \n  1261, 1101, 776, 1260, 1059, 772, 1263, 1091, \n  772, 1262, 1059, 776, 1265, 1091, 776, 1264, \n  1059, 779, 1267, 1091, 779, 1266, 1063, 776, \n  1269, 1095, 776, 1268, 1271, 1270, 1067, 776, \n  1273, 1099, 776, 1272, 1275, 1274, 1277, 1276, \n  1279, 1278, 1281, 1280, 1283, 1282, 1285, 1284, \n  1287, 1286, 1289, 1288, 1291, 1290, 1293, 1292, \n  1295, 1294, 1297, 1296, 1299, 1298, 1301, 1300, \n  1303, 1302, 1305, 1304, 1307, 1306, 1309, 1308, \n  1311, 1310, 1313, 1312, 1315, 1314, 1317, 1316, \n  1319, 1318, 1321, 1320, 1323, 1322, 1325, 1324, \n  1327, 1326, 1377, 1378, 1379, 1380, 1381, 1382, \n  1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, \n  1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, \n  1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, \n  1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, \n  1376, 1329, 1330, 1331, 1332, 1333, 1334, 1335, \n  1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, \n  1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, \n  1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, \n  1360, 1361, 1362, 1363, 1364, 1365, 1366, 1381, \n  1410, 1415, 1416, 1575, 1619, 1575, 1620, 1608, \n  1620, 1575, 1621, 1610, 1620, 1575, 1652, 1608, \n  1652, 1735, 1652, 1610, 1652, 1749, 1620, 1729, \n  1620, 1746, 1620, 2344, 2364, 2352, 2364, 2355, \n  2364, 2325, 2364, 2326, 2364, 2327, 2364, 2332, \n  2364, 2337, 2364, 2338, 2364, 2347, 2364, 2351, \n  2364, 2503, 2494, 2503, 2519, 2465, 2492, 2466, \n  2492, 2479, 2492, 2610, 2620, 2616, 2620, 2582, \n  2620, 2583, 2620, 2588, 2620, 2603, 2620, 2887, \n  2902, 2887, 2878, 2887, 2903, 2849, 2876, 2850, \n  2876, 2962, 3031, 3014, 3006, 3015, 3006, 3014, \n  3031, 3142, 3158, 3263, 3285, 3270, 3285, 3270, \n  3286, 3270, 3266, 3274, 3285, 3398, 3390, 3399, \n  3390, 3398, 3415, 3545, 3530, 3545, 3535, 3548, \n  3530, 3545, 3551, 3661, 3634, 3789, 3762, 3755, \n  3737, 3755, 3745, 3851, 3906, 4023, 3916, 4023, \n  3921, 4023, 3926, 4023, 3931, 4023, 3904, 4021, \n  3953, 3954, 3953, 3956, 4018, 3968, 4018, 3969, \n  4019, 3968, 4019, 3969, 3953, 3968, 3986, 4023, \n  3996, 4023, 4001, 4023, 4006, 4023, 4011, 4023, \n  3984, 4021, 4133, 4142, 11520, 11521, 11522, 11523, \n  11524, 11525, 11526, 11527, 11528, 11529, 11530, 11531, \n  11532, 11533, 11534, 11535, 11536, 11537, 11538, 11539, \n  11540, 11541, 11542, 11543, 11544, 11545, 11546, 11547, \n  11548, 11549, 11550, 11551, 11552, 11553, 11554, 11555, \n  11556, 11557, 11559, 11565, 7312, 4304, 7313, 4305, \n  7314, 4306, 7315, 4307, 7316, 4308, 7317, 4309, \n  7318, 4310, 7319, 4311, 7320, 4312, 7321, 4313, \n  7322, 4314, 7323, 4315, 7324, 4316, 7325, 4317, \n  7326, 4318, 7327, 4319, 7328, 4320, 7329, 4321, \n  7330, 4322, 7331, 4323, 7332, 4324, 7333, 4325, \n  7334, 4326, 7335, 4327, 7336, 4328, 7337, 4329, \n  7338, 4330, 7339, 4331, 7340, 4332, 7341, 4333, \n  7342, 4334, 7343, 4335, 7344, 4336, 7345, 4337, \n  7346, 4338, 7347, 4339, 7348, 4340, 7349, 4341, \n  7350, 4342, 7351, 4343, 7352, 4344, 7353, 4345, \n  7354, 4346, 4348, 7357, 4349, 7358, 4350, 7359, \n  4351, 43888, 43889, 43890, 43891, 43892, 43893, 43894, \n  43895, 43896, 43897, 43898, 43899, 43900, 43901, 43902, \n  43903, 43904, 43905, 43906, 43907, 43908, 43909, 43910, \n  43911, 43912, 43913, 43914, 43915, 43916, 43917, 43918, \n  43919, 43920, 43921, 43922, 43923, 43924, 43925, 43926, \n  43927, 43928, 43929, 43930, 43931, 43932, 43933, 43934, \n  43935, 43936, 43937, 43938, 43939, 43940, 43941, 43942, \n  43943, 43944, 43945, 43946, 43947, 43948, 43949, 43950, \n  43951, 43952, 43953, 43954, 43955, 43956, 43957, 43958, \n  43959, 43960, 43961, 43962, 43963, 43964, 43965, 43966, \n  43967, 5112, 5113, 5114, 5115, 5116, 5117, 5104, \n  5105, 5106, 5107, 5108, 5109, 6917, 6965, 6919, \n  6965, 6921, 6965, 6923, 6965, 6925, 6965, 6929, \n  6965, 6970, 6965, 6972, 6965, 6974, 6965, 6975, \n  6965, 6978, 6965, 42571, 42570, 7306, 7305, 7424, \n  7425, 7426, 7427, 7428, 7429, 7430, 7431, 7432, \n  7433, 7434, 7435, 7436, 7437, 7438, 7439, 7440, \n  7441, 7442, 7443, 7444, 7445, 7446, 7447, 7448, \n  7449, 7450, 7451, 7452, 7453, 7454, 7455, 7456, \n  7457, 7458, 7459, 7460, 7461, 7462, 7463, 7464, \n  7465, 7466, 7467, 7468, 7469, 7470, 7471, 7472, \n  7473, 7474, 7475, 7476, 7477, 7478, 7479, 7480, \n  7481, 7482, 7483, 7484, 7485, 7486, 7487, 7488, \n  7489, 7490, 7491, 592, 7492, 593, 7493, 7494, \n  7495, 7496, 7497, 7498, 7499, 604, 7500, 7501, \n  7502, 7503, 7504, 7505, 7506, 7507, 7508, 7509, \n  7510, 7511, 7512, 7513, 7514, 7515, 7516, 7517, \n  7518, 7519, 7520, 7521, 7522, 7523, 7524, 7525, \n  7526, 7527, 7528, 7529, 7530, 7531, 7532, 7533, \n  7534, 7535, 7536, 7537, 7538, 7539, 7540, 7541, \n  7542, 7543, 7544, 42877, 7546, 7547, 7548, 11363, \n  7550, 7551, 7552, 7553, 7554, 7555, 7556, 7557, \n  7558, 7559, 7560, 7561, 7562, 7563, 7564, 7565, \n  42950, 7567, 7568, 7569, 7570, 7571, 7572, 7573, \n  7574, 7575, 7576, 7577, 7578, 594, 7579, 7580, \n  7581, 7582, 7583, 7584, 7585, 609, 7586, 613, \n  7587, 7588, 7589, 618, 7590, 7591, 669, 7592, \n  7593, 7594, 7595, 625, 7596, 7597, 7598, 7599, \n  7600, 7601, 7602, 642, 7603, 7604, 7605, 7606, \n  7607, 7608, 7609, 7610, 7611, 7612, 7613, 7614, \n  7615, 65, 805, 7681, 97, 805, 7680, 66, \n  775, 7683, 98, 775, 7682, 66, 803, 7685, \n  98, 803, 7684, 66, 817, 7687, 98, 817, \n  7686, 199, 769, 7689, 231, 769, 7688, 68, \n  775, 7691, 100, 775, 7690, 68, 803, 7693, \n  100, 803, 7692, 68, 817, 7695, 100, 817, \n  7694, 68, 807, 7697, 100, 807, 7696, 68, \n  813, 7699, 100, 813, 7698, 274, 768, 7701, \n  275, 768, 7700, 274, 769, 7703, 275, 769, \n  7702, 69, 813, 7705, 101, 813, 7704, 69, \n  816, 7707, 101, 816, 7706, 552, 774, 7709, \n  553, 774, 7708, 70, 775, 7711, 102, 775, \n  7710, 71, 772, 7713, 103, 772, 7712, 72, \n  775, 7715, 104, 775, 7714, 72, 803, 7717, \n  104, 803, 7716, 72, 776, 7719, 104, 776, \n  7718, 72, 807, 7721, 104, 807, 7720, 72, \n  814, 7723, 104, 814, 7722, 73, 816, 7725, \n  105, 816, 7724, 207, 769, 7727, 239, 769, \n  7726, 75, 769, 7729, 107, 769, 7728, 75, \n  803, 7731, 107, 803, 7730, 75, 817, 7733, \n  107, 817, 7732, 76, 803, 7735, 108, 803, \n  7734, 7734, 772, 7737, 7735, 772, 7736, 76, \n  817, 7739, 108, 817, 7738, 76, 813, 7741, \n  108, 813, 7740, 77, 769, 7743, 109, 769, \n  7742, 77, 775, 7745, 109, 775, 7744, 77, \n  803, 7747, 109, 803, 7746, 78, 775, 7749, \n  110, 775, 7748, 78, 803, 7751, 110, 803, \n  7750, 78, 817, 7753, 110, 817, 7752, 78, \n  813, 7755, 110, 813, 7754, 213, 769, 7757, \n  245, 769, 7756, 213, 776, 7759, 245, 776, \n  7758, 332, 768, 7761, 333, 768, 7760, 332, \n  769, 7763, 333, 769, 7762, 80, 769, 7765, \n  112, 769, 7764, 80, 775, 7767, 112, 775, \n  7766, 82, 775, 7769, 114, 775, 7768, 82, \n  803, 7771, 114, 803, 7770, 7770, 772, 7773, \n  7771, 772, 7772, 82, 817, 7775, 114, 817, \n  7774, 83, 775, 7777, 115, 775, 7776, 83, \n  803, 7779, 115, 803, 7778, 346, 775, 7781, \n  347, 775, 7780, 352, 775, 7783, 353, 775, \n  7782, 7778, 775, 7785, 7779, 775, 7784, 84, \n  775, 7787, 116, 775, 7786, 84, 803, 7789, \n  116, 803, 7788, 84, 817, 7791, 116, 817, \n  7790, 84, 813, 7793, 116, 813, 7792, 85, \n  804, 7795, 117, 804, 7794, 85, 816, 7797, \n  117, 816, 7796, 85, 813, 7799, 117, 813, \n  7798, 360, 769, 7801, 361, 769, 7800, 362, \n  776, 7803, 363, 776, 7802, 86, 771, 7805, \n  118, 771, 7804, 86, 803, 7807, 118, 803, \n  7806, 87, 768, 7809, 119, 768, 7808, 87, \n  769, 7811, 119, 769, 7810, 87, 776, 7813, \n  119, 776, 7812, 87, 775, 7815, 119, 775, \n  7814, 87, 803, 7817, 119, 803, 7816, 88, \n  775, 7819, 120, 775, 7818, 88, 776, 7821, \n  120, 776, 7820, 89, 775, 7823, 121, 775, \n  7822, 90, 770, 7825, 122, 770, 7824, 90, \n  803, 7827, 122, 803, 7826, 90, 817, 7829, \n  122, 817, 7828, 104, 817, 7830, 116, 776, \n  7831, 119, 778, 7832, 121, 778, 7833, 97, \n  702, 7834, 383, 775, 7836, 7837, 223, 7839, \n  65, 803, 7841, 97, 803, 7840, 65, 777, \n  7843, 97, 777, 7842, 194, 769, 7845, 226, \n  769, 7844, 194, 768, 7847, 226, 768, 7846, \n  194, 777, 7849, 226, 777, 7848, 194, 771, \n  7851, 226, 771, 7850, 7840, 770, 7853, 7841, \n  770, 7852, 258, 769, 7855, 259, 769, 7854, \n  258, 768, 7857, 259, 768, 7856, 258, 777, \n  7859, 259, 777, 7858, 258, 771, 7861, 259, \n  771, 7860, 7840, 774, 7863, 7841, 774, 7862, \n  69, 803, 7865, 101, 803, 7864, 69, 777, \n  7867, 101, 777, 7866, 69, 771, 7869, 101, \n  771, 7868, 202, 769, 7871, 234, 769, 7870, \n  202, 768, 7873, 234, 768, 7872, 202, 777, \n  7875, 234, 777, 7874, 202, 771, 7877, 234, \n  771, 7876, 7864, 770, 7879, 7865, 770, 7878, \n  73, 777, 7881, 105, 777, 7880, 73, 803, \n  7883, 105, 803, 7882, 79, 803, 7885, 111, \n  803, 7884, 79, 777, 7887, 111, 777, 7886, \n  212, 769, 7889, 244, 769, 7888, 212, 768, \n  7891, 244, 768, 7890, 212, 777, 7893, 244, \n  777, 7892, 212, 771, 7895, 244, 771, 7894, \n  7884, 770, 7897, 7885, 770, 7896, 416, 769, \n  7899, 417, 769, 7898, 416, 768, 7901, 417, \n  768, 7900, 416, 777, 7903, 417, 777, 7902, \n  416, 771, 7905, 417, 771, 7904, 416, 803, \n  7907, 417, 803, 7906, 85, 803, 7909, 117, \n  803, 7908, 85, 777, 7911, 117, 777, 7910, \n  431, 769, 7913, 432, 769, 7912, 431, 768, \n  7915, 432, 768, 7914, 431, 777, 7917, 432, \n  777, 7916, 431, 771, 7919, 432, 771, 7918, \n  431, 803, 7921, 432, 803, 7920, 89, 768, \n  7923, 121, 768, 7922, 89, 803, 7925, 121, \n  803, 7924, 89, 777, 7927, 121, 777, 7926, \n  89, 771, 7929, 121, 771, 7928, 7931, 7930, \n  7933, 7932, 7935, 7934, 945, 787, 7944, 945, \n  788, 7945, 7936, 768, 7946, 7937, 768, 7947, \n  7936, 769, 7948, 7937, 769, 7949, 7936, 834, \n  7950, 7937, 834, 7951, 913, 787, 7936, 913, \n  788, 7937, 7944, 768, 7938, 7945, 768, 7939, \n  7944, 769, 7940, 7945, 769, 7941, 7944, 834, \n  7942, 7945, 834, 7943, 949, 787, 7960, 949, \n  788, 7961, 7952, 768, 7962, 7953, 768, 7963, \n  7952, 769, 7964, 7953, 769, 7965, 917, 787, \n  7952, 917, 788, 7953, 7960, 768, 7954, 7961, \n  768, 7955, 7960, 769, 7956, 7961, 769, 7957, \n  951, 787, 7976, 951, 788, 7977, 7968, 768, \n  7978, 7969, 768, 7979, 7968, 769, 7980, 7969, \n  769, 7981, 7968, 834, 7982, 7969, 834, 7983, \n  919, 787, 7968, 919, 788, 7969, 7976, 768, \n  7970, 7977, 768, 7971, 7976, 769, 7972, 7977, \n  769, 7973, 7976, 834, 7974, 7977, 834, 7975, \n  953, 787, 7992, 953, 788, 7993, 7984, 768, \n  7994, 7985, 768, 7995, 7984, 769, 7996, 7985, \n  769, 7997, 7984, 834, 7998, 7985, 834, 7999, \n  921, 787, 7984, 921, 788, 7985, 7992, 768, \n  7986, 7993, 768, 7987, 7992, 769, 7988, 7993, \n  769, 7989, 7992, 834, 7990, 7993, 834, 7991, \n  959, 787, 8008, 959, 788, 8009, 8000, 768, \n  8010, 8001, 768, 8011, 8000, 769, 8012, 8001, \n  769, 8013, 927, 787, 8000, 927, 788, 8001, \n  8008, 768, 8002, 8009, 768, 8003, 8008, 769, \n  8004, 8009, 769, 8005, 965, 787, 8016, 965, \n  788, 8025, 8016, 768, 965, 787, 768, 8018, \n  8017, 768, 8027, 8016, 769, 965, 787, 769, \n  8020, 8017, 769, 8029, 8016, 834, 965, 787, \n  834, 8022, 8017, 834, 8031, 933, 788, 8017, \n  8025, 768, 8019, 8025, 769, 8021, 8025, 834, \n  8023, 969, 787, 8040, 969, 788, 8041, 8032, \n  768, 8042, 8033, 768, 8043, 8032, 769, 8044, \n  8033, 769, 8045, 8032, 834, 8046, 8033, 834, \n  8047, 937, 787, 8032, 937, 788, 8033, 8040, \n  768, 8034, 8041, 768, 8035, 8040, 769, 8036, \n  8041, 769, 8037, 8040, 834, 8038, 8041, 834, \n  8039, 945, 768, 8122, 8123, 949, 768, 8136, \n  8137, 951, 768, 8138, 8139, 953, 768, 8154, \n  8155, 959, 768, 8184, 8185, 965, 768, 8170, \n  8171, 969, 768, 8186, 8187, 7936, 837, 7936, \n  953, 8072, 7937, 837, 7937, 953, 8073, 7938, \n  837, 7938, 953, 8074, 7939, 837, 7939, 953, \n  8075, 7940, 837, 7940, 953, 8076, 7941, 837, \n  7941, 953, 8077, 7942, 837, 7942, 953, 8078, \n  7943, 837, 7943, 953, 8079, 7944, 837, 8064, \n  7945, 837, 8065, 7946, 837, 8066, 7947, 837, \n  8067, 7948, 837, 8068, 7949, 837, 8069, 7950, \n  837, 8070, 7951, 837, 8071, 7968, 837, 7968, \n  953, 8088, 7969, 837, 7969, 953, 8089, 7970, \n  837, 7970, 953, 8090, 7971, 837, 7971, 953, \n  8091, 7972, 837, 7972, 953, 8092, 7973, 837, \n  7973, 953, 8093, 7974, 837, 7974, 953, 8094, \n  7975, 837, 7975, 953, 8095, 7976, 837, 8080, \n  7977, 837, 8081, 7978, 837, 8082, 7979, 837, \n  8083, 7980, 837, 8084, 7981, 837, 8085, 7982, \n  837, 8086, 7983, 837, 8087, 8032, 837, 8032, \n  953, 8104, 8033, 837, 8033, 953, 8105, 8034, \n  837, 8034, 953, 8106, 8035, 837, 8035, 953, \n  8107, 8036, 837, 8036, 953, 8108, 8037, 837, \n  8037, 953, 8109, 8038, 837, 8038, 953, 8110, \n  8039, 837, 8039, 953, 8111, 8040, 837, 8096, \n  8041, 837, 8097, 8042, 837, 8098, 8043, 837, \n  8099, 8044, 837, 8100, 8045, 837, 8101, 8046, \n  837, 8102, 8047, 837, 8103, 945, 774, 8120, \n  945, 772, 8121, 8048, 837, 8048, 953, 8114, \n  945, 837, 945, 953, 8124, 940, 837, 940, \n  953, 8116, 945, 834, 8118, 8118, 837, 945, \n  834, 953, 8119, 913, 774, 8112, 913, 772, \n  8113, 913, 768, 8048, 8049, 913, 837, 8115, \n  32, 787, 32, 834, 168, 834, 8052, 837, \n  8052, 953, 8130, 951, 837, 951, 953, 8140, \n  942, 837, 942, 953, 8132, 951, 834, 8134, \n  8134, 837, 951, 834, 953, 8135, 917, 768, \n  8050, 8051, 919, 768, 8052, 8053, 919, 837, \n  8131, 8127, 768, 8127, 769, 8127, 834, 953, \n  774, 8152, 953, 772, 8153, 970, 768, 953, \n  776, 768, 8146, 8147, 953, 834, 8150, 970, \n  834, 953, 776, 834, 8151, 921, 774, 8144, \n  921, 772, 8145, 921, 768, 8054, 8055, 8190, \n  768, 8190, 769, 8190, 834, 965, 774, 8168, \n  965, 772, 8169, 971, 768, 965, 776, 768, \n  8162, 8163, 961, 787, 8164, 961, 788, 8172, \n  965, 834, 8166, 971, 834, 965, 776, 834, \n  8167, 933, 774, 8160, 933, 772, 8161, 933, \n  768, 8058, 8059, 929, 788, 8165, 168, 768, \n  901, 96, 8060, 837, 8060, 953, 8178, 969, \n  837, 969, 953, 8188, 974, 837, 974, 953, \n  8180, 969, 834, 8182, 8182, 837, 969, 834, \n  953, 8183, 927, 768, 8056, 8057, 937, 768, \n  8060, 8061, 937, 837, 8179, 180, 32, 788, \n  8194, 8195, 8208, 32, 819, 46, 46, 46, \n  46, 46, 46, 8242, 8242, 8242, 8242, 8242, \n  8245, 8245, 8245, 8245, 8245, 33, 33, 32, \n  773, 63, 63, 63, 33, 33, 63, 3, \n  8242, 8242, 8242, 8242, 48, 8305, 52, 53, \n  54, 55, 56, 57, 43, 8722, 61, 40, \n  41, 8319, 8336, 8337, 8338, 8339, 8340, 8341, \n  8342, 8343, 8344, 8345, 8346, 8347, 8348, 82, \n  115, 97, 47, 99, 97, 47, 115, 8450, \n  176, 67, 99, 47, 111, 99, 47, 117, \n  8455, 176, 70, 8458, 8459, 8460, 8461, 8462, \n  8463, 8464, 8465, 8466, 8467, 8469, 78, 111, \n  8473, 8474, 8475, 8476, 8477, 83, 77, 84, \n  69, 76, 84, 77, 8484, 8488, 8492, 8493, \n  8495, 8496, 8497, 8526, 8499, 8500, 1488, 1489, \n  1490, 1491, 8505, 70, 65, 88, 8508, 8509, \n  8510, 8511, 8721, 8517, 8518, 8519, 8520, 8521, \n  8498, 49, 8260, 55, 49, 8260, 57, 3, \n  49, 8260, 49, 48, 49, 8260, 51, 50, \n  8260, 51, 49, 8260, 53, 50, 8260, 53, \n  51, 8260, 53, 52, 8260, 53, 49, 8260, \n  54, 53, 8260, 54, 49, 8260, 56, 51, \n  8260, 56, 53, 8260, 56, 55, 8260, 56, \n  49, 8260, 8560, 73, 73, 8561, 73, 73, \n  73, 8562, 73, 86, 8563, 8564, 86, 73, \n  8565, 86, 73, 73, 8566, 3, 86, 73, \n  73, 73, 8567, 73, 88, 8568, 8569, 88, \n  73, 8570, 88, 73, 73, 8571, 8572, 8573, \n  8574, 8575, 8544, 105, 105, 8545, 105, 105, \n  105, 8546, 105, 118, 8547, 8548, 118, 105, \n  8549, 118, 105, 105, 8550, 3, 118, 105, \n  105, 105, 8551, 105, 120, 8552, 8553, 120, \n  105, 8554, 120, 105, 105, 8555, 8556, 8557, \n  8558, 8559, 8580, 8579, 48, 8260, 51, 8592, \n  824, 8594, 824, 8596, 824, 8656, 824, 8660, \n  824, 8658, 824, 8707, 824, 8712, 824, 8715, \n  824, 8739, 824, 8741, 824, 8747, 8747, 8747, \n  8747, 8747, 8750, 8750, 8750, 8750, 8750, 8764, \n  824, 8771, 824, 8773, 824, 8776, 824, 61, \n  824, 8801, 824, 8781, 824, 60, 824, 62, \n  824, 8804, 824, 8805, 824, 8818, 824, 8819, \n  824, 8822, 824, 8823, 824, 8826, 824, 8827, \n  824, 8834, 824, 8835, 824, 8838, 824, 8839, \n  824, 8866, 824, 8872, 824, 8873, 824, 8875, \n  824, 8828, 824, 8829, 824, 8849, 824, 8850, \n  824, 8882, 824, 8883, 824, 8884, 824, 8885, \n  824, 12296, 12297, 49, 48, 49, 49, 49, \n  50, 49, 51, 49, 52, 49, 53, 49, \n  54, 49, 55, 49, 56, 49, 57, 50, \n  48, 40, 49, 41, 40, 50, 41, 40, \n  51, 41, 40, 52, 41, 40, 53, 41, \n  40, 54, 41, 40, 55, 41, 40, 56, \n  41, 40, 57, 41, 3, 40, 49, 48, \n  41, 3, 40, 49, 49, 41, 3, 40, \n  49, 50, 41, 3, 40, 49, 51, 41, \n  3, 40, 49, 52, 41, 3, 40, 49, \n  53, 41, 3, 40, 49, 54, 41, 3, \n  40, 49, 55, 41, 3, 40, 49, 56, \n  41, 3, 40, 49, 57, 41, 3, 40, \n  50, 48, 41, 49, 46, 50, 46, 51, \n  46, 52, 46, 53, 46, 54, 46, 55, \n  46, 56, 46, 57, 46, 49, 48, 46, \n  49, 49, 46, 49, 50, 46, 49, 51, \n  46, 49, 52, 46, 49, 53, 46, 49, \n  54, 46, 49, 55, 46, 49, 56, 46, \n  49, 57, 46, 50, 48, 46, 40, 97, \n  41, 40, 98, 41, 40, 99, 41, 40, \n  100, 41, 40, 101, 41, 40, 102, 41, \n  40, 103, 41, 40, 104, 41, 40, 105, \n  41, 40, 106, 41, 40, 107, 41, 40, \n  108, 41, 40, 109, 41, 40, 110, 41, \n  40, 111, 41, 40, 112, 41, 40, 113, \n  41, 40, 114, 41, 40, 115, 41, 40, \n  116, 41, 40, 117, 41, 40, 118, 41, \n  40, 119, 41, 40, 120, 41, 40, 121, \n  41, 40, 122, 41, 9424, 9425, 9426, 9427, \n  9428, 9429, 9430, 9431, 9432, 9433, 9434, 9435, \n  9436, 9437, 9438, 9439, 9440, 9441, 9442, 9443, \n  9444, 9445, 9446, 9447, 9448, 9449, 9398, 9399, \n  9400, 9401, 9402, 9403, 9404, 9405, 9406, 9407, \n  9408, 9409, 9410, 9411, 9412, 9413, 9414, 9415, \n  9416, 9417, 9418, 9419, 9420, 9421, 9422, 9423, \n  3, 8747, 8747, 8747, 8747, 58, 58, 61, \n  61, 61, 61, 61, 61, 10973, 824, 11312, \n  11313, 11314, 11315, 11316, 11317, 11318, 11319, 11320, \n  11321, 11322, 11323, 11324, 11325, 11326, 11327, 11328, \n  11329, 11330, 11331, 11332, 11333, 11334, 11335, 11336, \n  11337, 11338, 11339, 11340, 11341, 11342, 11343, 11344, \n  11345, 11346, 11347, 11348, 11349, 11350, 11351, 11352, \n  11353, 11354, 11355, 11356, 11357, 11358, 11359, 11264, \n  11265, 11266, 11267, 11268, 11269, 11270, 11271, 11272, \n  11273, 11274, 11275, 11276, 11277, 11278, 11279, 11280, \n  11281, 11282, 11283, 11284, 11285, 11286, 11287, 11288, \n  11289, 11290, 11291, 11292, 11293, 11294, 11295, 11296, \n  11297, 11298, 11299, 11300, 11301, 11302, 11303, 11304, \n  11305, 11306, 11307, 11308, 11309, 11310, 11311, 11361, \n  11360, 619, 7549, 637, 570, 574, 11368, 11367, \n  11370, 11369, 11372, 11371, 11377, 11379, 11378, 11380, \n  11382, 11381, 11383, 11384, 11385, 11386, 11387, 11388, \n  11389, 575, 576, 11393, 11392, 11395, 11394, 11397, \n  11396, 11399, 11398, 11401, 11400, 11403, 11402, 11405, \n  11404, 11407, 11406, 11409, 11408, 11411, 11410, 11413, \n  11412, 11415, 11414, 11417, 11416, 11419, 11418, 11421, \n  11420, 11423, 11422, 11425, 11424, 11427, 11426, 11429, \n  11428, 11431, 11430, 11433, 11432, 11435, 11434, 11437, \n  11436, 11439, 11438, 11441, 11440, 11443, 11442, 11445, \n  11444, 11447, 11446, 11449, 11448, 11451, 11450, 11453, \n  11452, 11455, 11454, 11457, 11456, 11459, 11458, 11461, \n  11460, 11463, 11462, 11465, 11464, 11467, 11466, 11469, \n  11468, 11471, 11470, 11473, 11472, 11475, 11474, 11477, \n  11476, 11479, 11478, 11481, 11480, 11483, 11482, 11485, \n  11484, 11487, 11486, 11489, 11488, 11491, 11490, 11492, \n  11500, 11499, 11502, 11501, 11507, 11506, 4256, 4257, \n  4258, 4259, 4260, 4261, 4262, 4263, 4264, 4265, \n  4266, 4267, 4268, 4269, 4270, 4271, 4272, 4273, \n  4274, 4275, 4276, 4277, 4278, 4279, 4280, 4281, \n  4282, 4283, 4284, 4285, 4286, 4287, 4288, 4289, \n  4290, 4291, 4292, 4293, 4295, 4301, 11617, 27597, \n  40863, 19968, 20008, 20022, 20031, 20057, 20101, 20108, \n  20128, 20154, 20799, 20837, 20843, 20866, 20886, 20907, \n  20960, 20981, 20992, 21147, 21241, 21269, 21274, 21304, \n  21313, 21340, 21353, 21378, 21430, 21448, 21475, 22231, \n  22303, 22763, 22786, 22794, 22805, 22823, 22899, 23376, \n  23424, 23544, 23567, 23586, 23608, 23662, 23665, 24027, \n  24037, 24049, 24062, 24178, 24186, 24191, 24308, 24318, \n  24331, 24339, 24400, 24417, 24435, 24515, 25096, 25142, \n  25163, 25903, 25908, 25991, 26007, 26020, 26041, 26080, \n  26085, 26352, 26376, 26408, 27424, 27490, 27513, 27571, \n  27595, 27604, 27611, 27663, 27668, 27700, 28779, 29226, \n  29238, 29243, 29247, 29255, 29273, 29275, 29356, 29572, \n  29577, 29916, 29926, 29976, 29983, 29992, 30000, 30091, \n  30098, 30326, 30333, 30382, 30399, 30446, 30683, 30690, \n  30707, 31034, 31160, 31166, 31348, 31435, 31481, 31859, \n  31992, 32566, 32593, 32650, 32701, 32769, 32780, 32786, \n  32819, 32895, 32905, 33251, 33258, 33267, 33276, 33292, \n  33307, 33311, 33390, 33394, 33400, 34381, 34411, 34880, \n  34892, 34915, 35198, 35211, 35282, 35328, 35895, 35910, \n  35925, 35960, 35997, 36196, 36208, 36275, 36523, 36554, \n  36763, 36784, 36789, 37009, 37193, 37318, 37324, 37329, \n  38263, 38272, 38428, 38582, 38585, 38632, 38737, 38750, \n  38754, 38761, 38859, 38893, 38899, 38913, 39080, 39131, \n  39135, 39318, 39321, 39340, 39592, 39640, 39647, 39717, \n  39727, 39730, 39740, 39770, 40165, 40565, 40575, 40613, \n  40635, 40643, 40653, 40657, 40697, 40701, 40718, 40723, \n  40736, 40763, 40778, 40786, 40845, 40860, 40864, 12306, \n  21316, 21317, 12363, 12441, 12365, 12441, 12367, 12441, \n  12369, 12441, 12371, 12441, 12373, 12441, 12375, 12441, \n  12377, 12441, 12379, 12441, 12381, 12441, 12383, 12441, \n  12385, 12441, 12388, 12441, 12390, 12441, 12392, 12441, \n  12399, 12441, 12399, 12442, 12402, 12441, 12402, 12442, \n  12405, 12441, 12405, 12442, 12408, 12441, 12408, 12442, \n  12411, 12441, 12411, 12442, 12358, 12441, 32, 12441, \n  32, 12442, 12445, 12441, 12424, 12426, 12459, 12441, \n  12461, 12441, 12463, 12441, 12465, 12441, 12467, 12441, \n  12469, 12441, 12471, 12441, 12473, 12441, 12475, 12441, \n  12477, 12441, 12479, 12441, 12481, 12441, 12484, 12441, \n  12486, 12441, 12488, 12441, 12495, 12441, 12495, 12442, \n  12498, 12441, 12498, 12442, 12501, 12441, 12501, 12442, \n  12504, 12441, 12504, 12442, 12507, 12441, 12507, 12442, \n  12454, 12441, 12527, 12441, 12528, 12441, 12529, 12441, \n  12530, 12441, 12541, 12441, 12467, 12488, 4352, 4353, \n  4522, 4354, 4524, 4525, 4355, 4356, 4357, 4528, \n  4529, 4530, 4531, 4532, 4533, 4378, 4358, 4359, \n  4360, 4385, 4361, 4362, 4363, 4364, 4365, 4366, \n  4367, 4368, 4369, 4370, 4449, 4450, 4451, 4452, \n  4453, 4454, 4455, 4456, 4457, 4458, 4459, 4460, \n  4461, 4462, 4463, 4464, 4465, 4466, 4467, 4468, \n  4469, 4448, 4372, 4373, 4551, 4552, 4556, 4558, \n  4563, 4567, 4569, 4380, 4573, 4575, 4381, 4382, \n  4384, 4386, 4387, 4391, 4393, 4395, 4396, 4397, \n  4398, 4399, 4402, 4406, 4416, 4423, 4428, 4593, \n  4594, 4439, 4440, 4441, 4484, 4485, 4488, 4497, \n  4498, 4500, 4510, 4513, 19977, 22235, 19978, 20013, \n  19979, 30002, 19993, 19969, 22825, 22320, 40, 4352, \n  41, 40, 4354, 41, 40, 4355, 41, 40, \n  4357, 41, 40, 4358, 41, 40, 4359, 41, \n  40, 4361, 41, 40, 4363, 41, 40, 4364, \n  41, 40, 4366, 41, 40, 4367, 41, 40, \n  4368, 41, 40, 4369, 41, 40, 4370, 41, \n  3, 40, 4352, 4449, 41, 3, 40, 4354, \n  4449, 41, 3, 40, 4355, 4449, 41, 3, \n  40, 4357, 4449, 41, 3, 40, 4358, 4449, \n  41, 3, 40, 4359, 4449, 41, 3, 40, \n  4361, 4449, 41, 3, 40, 4363, 4449, 41, \n  3, 40, 4364, 4449, 41, 3, 40, 4366, \n  4449, 41, 3, 40, 4367, 4449, 41, 3, \n  40, 4368, 4449, 41, 3, 40, 4369, 4449, \n  41, 3, 40, 4370, 4449, 41, 3, 40, \n  4364, 4462, 41, 6, 40, 4363, 4457, 4364, \n  4453, 4523, 41, 5, 40, 4363, 4457, 4370, \n  4462, 41, 40, 19968, 41, 40, 20108, 41, \n  40, 19977, 41, 40, 22235, 41, 40, 20116, \n  41, 40, 20845, 41, 40, 19971, 41, 40, \n  20843, 41, 40, 20061, 41, 40, 21313, 41, \n  40, 26376, 41, 40, 28779, 41, 40, 27700, \n  41, 40, 26408, 41, 40, 37329, 41, 40, \n  22303, 41, 40, 26085, 41, 40, 26666, 41, \n  40, 26377, 41, 40, 31038, 41, 40, 21517, \n  41, 40, 29305, 41, 40, 36001, 41, 40, \n  31069, 41, 40, 21172, 41, 40, 20195, 41, \n  40, 21628, 41, 40, 23398, 41, 40, 30435, \n  41, 40, 20225, 41, 40, 36039, 41, 40, \n  21332, 41, 40, 31085, 41, 40, 20241, 41, \n  40, 33258, 41, 40, 33267, 41, 21839, 24188, \n  31631, 80, 84, 69, 50, 49, 50, 50, \n  50, 51, 50, 52, 50, 53, 50, 54, \n  50, 55, 50, 56, 50, 57, 51, 48, \n  51, 49, 51, 50, 51, 51, 51, 52, \n  51, 53, 4352, 4449, 4354, 4449, 4355, 4449, \n  4357, 4449, 4358, 4449, 4359, 4449, 4361, 4449, \n  4363, 4449, 4364, 4449, 4366, 4449, 4367, 4449, \n  4368, 4449, 4369, 4449, 4370, 4449, 4, 4366, \n  4449, 4535, 4352, 4457, 3, 4364, 4462, 4363, \n  4468, 4363, 4462, 20116, 20845, 19971, 20061, 26666, \n  26377, 31038, 21517, 29305, 36001, 31069, 21172, 31192, \n  30007, 36969, 20778, 21360, 27880, 38917, 20241, 20889, \n  27491, 24038, 21491, 21307, 23447, 23398, 30435, 20225, \n  36039, 21332, 22812, 51, 54, 51, 55, 51, \n  56, 51, 57, 52, 48, 52, 49, 52, \n  50, 52, 51, 52, 52, 52, 53, 52, \n  54, 52, 55, 52, 56, 52, 57, 53, \n  48, 49, 26376, 50, 26376, 51, 26376, 52, \n  26376, 53, 26376, 54, 26376, 55, 26376, 56, \n  26376, 57, 26376, 49, 48, 26376, 49, 49, \n  26376, 49, 50, 26376, 72, 103, 101, 114, \n  103, 101, 86, 76, 84, 68, 12450, 12452, \n  12454, 12456, 12458, 12459, 12461, 12463, 12465, 12467, \n  12469, 12471, 12473, 12475, 12477, 12479, 12481, 12484, \n  12486, 12488, 12490, 12491, 12492, 12493, 12494, 12495, \n  12498, 12501, 12504, 12507, 12510, 12511, 12512, 12513, \n  12514, 12516, 12518, 12520, 12521, 12522, 12523, 12524, \n  12525, 12527, 12528, 12529, 12530, 20196, 21644, 3, \n  12450, 12497, 12540, 12488, 3, 12450, 12523, 12501, \n  12449, 3, 12450, 12531, 12506, 12450, 12450, 12540, \n  12523, 3, 12452, 12491, 12531, 12464, 12452, 12531, \n  12481, 12454, 12457, 12531, 4, 12456, 12473, 12463, \n  12540, 12489, 3, 12456, 12540, 12459, 12540, 12458, \n  12531, 12473, 12458, 12540, 12512, 12459, 12452, 12522, \n  3, 12459, 12521, 12483, 12488, 3, 12459, 12525, \n  12522, 12540, 12460, 12525, 12531, 12460, 12531, 12510, \n  12462, 12460, 12462, 12491, 12540, 3, 12461, 12517, \n  12522, 12540, 3, 12462, 12523, 12480, 12540, 12461, \n  12525, 4, 12461, 12525, 12464, 12521, 12512, 5, \n  12461, 12525, 12513, 12540, 12488, 12523, 4, 12461, \n  12525, 12527, 12483, 12488, 12464, 12521, 12512, 4, \n  12464, 12521, 12512, 12488, 12531, 4, 12463, 12523, \n  12476, 12452, 12525, 3, 12463, 12525, 12540, 12493, \n  12465, 12540, 12473, 12467, 12523, 12490, 12467, 12540, \n  12509, 3, 12469, 12452, 12463, 12523, 4, 12469, \n  12531, 12481, 12540, 12512, 3, 12471, 12522, 12531, \n  12464, 12475, 12531, 12481, 12475, 12531, 12488, 12480, \n  12540, 12473, 12487, 12471, 12489, 12523, 12488, 12531, \n  12490, 12494, 12494, 12483, 12488, 12495, 12452, 12484, \n  4, 12497, 12540, 12475, 12531, 12488, 12497, 12540, \n  12484, 3, 12496, 12540, 12524, 12523, 4, 12500, \n  12450, 12473, 12488, 12523, 12500, 12463, 12523, 12500, \n  12467, 12499, 12523, 4, 12501, 12449, 12521, 12483, \n  12489, 3, 12501, 12451, 12540, 12488, 4, 12502, \n  12483, 12471, 12455, 12523, 12501, 12521, 12531, 4, \n  12504, 12463, 12479, 12540, 12523, 12506, 12477, 12506, \n  12491, 12498, 12504, 12523, 12484, 12506, 12531, 12473, \n  12506, 12540, 12472, 12505, 12540, 12479, 3, 12509, \n  12452, 12531, 12488, 12508, 12523, 12488, 12507, 12531, \n  12509, 12531, 12489, 12507, 12540, 12523, 12507, 12540, \n  12531, 3, 12510, 12452, 12463, 12525, 12510, 12452, \n  12523, 12510, 12483, 12495, 12510, 12523, 12463, 4, \n  12510, 12531, 12471, 12519, 12531, 3, 12511, 12463, \n  12525, 12531, 12511, 12522, 4, 12511, 12522, 12496, \n  12540, 12523, 12513, 12460, 3, 12513, 12460, 12488, \n  12531, 3, 12513, 12540, 12488, 12523, 12516, 12540, \n  12489, 12516, 12540, 12523, 12518, 12450, 12531, 3, \n  12522, 12483, 12488, 12523, 12522, 12521, 12523, 12500, \n  12540, 3, 12523, 12540, 12502, 12523, 12524, 12512, \n  4, 12524, 12531, 12488, 12466, 12531, 12527, 12483, \n  12488, 48, 28857, 49, 28857, 50, 28857, 51, \n  28857, 52, 28857, 53, 28857, 54, 28857, 55, \n  28857, 56, 28857, 57, 28857, 49, 48, 28857, \n  49, 49, 28857, 49, 50, 28857, 49, 51, \n  28857, 49, 52, 28857, 49, 53, 28857, 49, \n  54, 28857, 49, 55, 28857, 49, 56, 28857, \n  49, 57, 28857, 50, 48, 28857, 50, 49, \n  28857, 50, 50, 28857, 50, 51, 28857, 50, \n  52, 28857, 104, 80, 97, 100, 97, 65, \n  85, 98, 97, 114, 111, 86, 112, 99, \n  100, 109, 100, 109, 178, 100, 109, 179, \n  73, 85, 24179, 25104, 26157, 21644, 22823, 27491, \n  26126, 27835, 3, 26666, 24335, 20250, 31038, 112, \n  65, 110, 65, 956, 65, 109, 65, 107, \n  65, 75, 66, 77, 66, 71, 66, 99, \n  97, 108, 3, 107, 99, 97, 108, 112, \n  70, 110, 70, 956, 70, 956, 103, 109, \n  103, 107, 103, 72, 122, 107, 72, 122, \n  77, 72, 122, 71, 72, 122, 84, 72, \n  122, 956, 8467, 109, 8467, 100, 8467, 107, \n  8467, 102, 109, 110, 109, 956, 109, 109, \n  109, 99, 109, 107, 109, 109, 109, 178, \n  99, 109, 178, 109, 178, 107, 109, 178, \n  109, 109, 179, 99, 109, 179, 109, 179, \n  107, 109, 179, 109, 8725, 115, 3, 109, \n  8725, 115, 178, 80, 97, 107, 80, 97, \n  77, 80, 97, 71, 80, 97, 114, 97, \n  100, 4, 114, 97, 100, 8725, 115, 5, \n  114, 97, 100, 8725, 115, 178, 112, 115, \n  110, 115, 956, 115, 109, 115, 112, 86, \n  110, 86, 956, 86, 109, 86, 107, 86, \n  77, 86, 112, 87, 110, 87, 956, 87, \n  109, 87, 107, 87, 77, 87, 107, 937, \n  77, 937, 3, 97, 46, 109, 46, 66, \n  113, 99, 99, 99, 100, 3, 67, 8725, \n  107, 103, 67, 111, 46, 100, 66, 71, \n  121, 104, 97, 72, 80, 105, 110, 75, \n  75, 75, 77, 107, 116, 108, 109, 108, \n  110, 108, 111, 103, 108, 120, 109, 98, \n  109, 105, 108, 109, 111, 108, 80, 72, \n  3, 112, 46, 109, 46, 80, 80, 77, \n  80, 82, 115, 114, 83, 118, 87, 98, \n  86, 8725, 109, 65, 8725, 109, 49, 26085, \n  50, 26085, 51, 26085, 52, 26085, 53, 26085, \n  54, 26085, 55, 26085, 56, 26085, 57, 26085, \n  49, 48, 26085, 49, 49, 26085, 49, 50, \n  26085, 49, 51, 26085, 49, 52, 26085, 49, \n  53, 26085, 49, 54, 26085, 49, 55, 26085, \n  49, 56, 26085, 49, 57, 26085, 50, 48, \n  26085, 50, 49, 26085, 50, 50, 26085, 50, \n  51, 26085, 50, 52, 26085, 50, 53, 26085, \n  50, 54, 26085, 50, 55, 26085, 50, 56, \n  26085, 50, 57, 26085, 51, 48, 26085, 51, \n  49, 26085, 103, 97, 108, 42561, 42560, 42563, \n  42562, 42565, 42564, 42567, 42566, 42569, 42568, 42573, \n  42572, 42575, 42574, 42577, 42576, 42579, 42578, 42581, \n  42580, 42583, 42582, 42585, 42584, 42587, 42586, 42589, \n  42588, 42591, 42590, 42593, 42592, 42595, 42594, 42597, \n  42596, 42599, 42598, 42601, 42600, 42603, 42602, 42605, \n  42604, 42625, 42624, 42627, 42626, 42629, 42628, 42631, \n  42630, 42633, 42632, 42635, 42634, 42637, 42636, 42639, \n  42638, 42641, 42640, 42643, 42642, 42645, 42644, 42647, \n  42646, 42649, 42648, 42651, 42650, 42652, 42653, 42787, \n  42786, 42789, 42788, 42791, 42790, 42793, 42792, 42795, \n  42794, 42797, 42796, 42799, 42798, 42800, 42801, 42803, \n  42802, 42805, 42804, 42807, 42806, 42809, 42808, 42811, \n  42810, 42813, 42812, 42815, 42814, 42817, 42816, 42819, \n  42818, 42821, 42820, 42823, 42822, 42825, 42824, 42827, \n  42826, 42829, 42828, 42831, 42830, 42833, 42832, 42835, \n  42834, 42837, 42836, 42839, 42838, 42841, 42840, 42843, \n  42842, 42845, 42844, 42847, 42846, 42849, 42848, 42851, \n  42850, 42853, 42852, 42855, 42854, 42857, 42856, 42859, \n  42858, 42861, 42860, 42863, 42862, 42864, 42865, 42866, \n  42867, 42868, 42869, 42870, 42871, 42872, 42874, 42873, \n  42876, 42875, 7545, 42879, 42878, 42881, 42880, 42883, \n  42882, 42885, 42884, 42887, 42886, 42892, 42891, 42894, \n  42897, 42896, 42899, 42898, 42948, 42901, 42903, 42902, \n  42905, 42904, 42907, 42906, 42909, 42908, 42911, 42910, \n  42913, 42912, 42915, 42914, 42917, 42916, 42919, 42918, \n  42921, 42920, 620, 42927, 670, 647, 43859, 42933, \n  42932, 42935, 42934, 42937, 42936, 42939, 42938, 42941, \n  42940, 42943, 42942, 42945, 42944, 42947, 42946, 42900, \n  7566, 42952, 42951, 42954, 42953, 612, 42957, 42956, \n  42959, 42958, 42961, 42960, 42963, 42962, 42965, 42964, \n  42967, 42966, 42969, 42968, 42971, 42970, 411, 42993, \n  42994, 42995, 42996, 42998, 42997, 43000, 43001, 43002, \n  43824, 43825, 43826, 43827, 43828, 43829, 43830, 43831, \n  43832, 43833, 43834, 43835, 43836, 43837, 43838, 43839, \n  43840, 43841, 43842, 43843, 43844, 43845, 43846, 43847, \n  43848, 43849, 43850, 43851, 43852, 43853, 43854, 43855, \n  43856, 43857, 43858, 42931, 43860, 43861, 43862, 43863, \n  43864, 43865, 43866, 43868, 43869, 43870, 43871, 43872, \n  43873, 43874, 43875, 43876, 43877, 43878, 43879, 43880, \n  43881, 5024, 5025, 5026, 5027, 5028, 5029, 5030, \n  5031, 5032, 5033, 5034, 5035, 5036, 5037, 5038, \n  5039, 5040, 5041, 5042, 5043, 5044, 5045, 5046, \n  5047, 5048, 5049, 5050, 5051, 5052, 5053, 5054, \n  5055, 5056, 5057, 5058, 5059, 5060, 5061, 5062, \n  5063, 5064, 5065, 5066, 5067, 5068, 5069, 5070, \n  5071, 5072, 5073, 5074, 5075, 5076, 5077, 5078, \n  5079, 5080, 5081, 5082, 5083, 5084, 5085, 5086, \n  5087, 5088, 5089, 5090, 5091, 5092, 5093, 5094, \n  5095, 5096, 5097, 5098, 5099, 5100, 5101, 5102, \n  5103, 35912, 26356, 36040, 28369, 20018, 21477, 22865, \n  21895, 22856, 25078, 30313, 32645, 34367, 34746, 35064, \n  37007, 27138, 27931, 28889, 29662, 33853, 37226, 39409, \n  20098, 21365, 27396, 29211, 34349, 40478, 23888, 28651, \n  34253, 35172, 25289, 33240, 34847, 24266, 26391, 28010, \n  29436, 37070, 20358, 20919, 21214, 25796, 27347, 29200, \n  30439, 34310, 34396, 36335, 38706, 39791, 40442, 30860, \n  31103, 32160, 33737, 37636, 35542, 22751, 24324, 31840, \n  32894, 29282, 30922, 36034, 38647, 22744, 23650, 27155, \n  28122, 28431, 32047, 32311, 38475, 21202, 32907, 20956, \n  20940, 31260, 32190, 33777, 38517, 35712, 25295, 35582, \n  20025, 23527, 24594, 29575, 30064, 21271, 30971, 20415, \n  24489, 19981, 27852, 25976, 32034, 21443, 22622, 30465, \n  33865, 35498, 27578, 27784, 25342, 33509, 25504, 30053, \n  20142, 20841, 20937, 26753, 31975, 33391, 35538, 37327, \n  21237, 21570, 24300, 26053, 28670, 31018, 38317, 39530, \n  40599, 40654, 26310, 27511, 36706, 24180, 24976, 25088, \n  25754, 28451, 29001, 29833, 31178, 32244, 32879, 36646, \n  34030, 36899, 37706, 21015, 21155, 21693, 28872, 35010, \n  24265, 24565, 25467, 27566, 31806, 29557, 20196, 22265, \n  23994, 24604, 29618, 29801, 32666, 32838, 37428, 38646, \n  38728, 38936, 20363, 31150, 37300, 38584, 24801, 20102, \n  20698, 23534, 23615, 26009, 29134, 30274, 34044, 36988, \n  26248, 38446, 21129, 26491, 26611, 27969, 28316, 29705, \n  30041, 30827, 32016, 39006, 25134, 38520, 20523, 23833, \n  28138, 36650, 24459, 24900, 26647, 38534, 21033, 21519, \n  23653, 26131, 26446, 26792, 27877, 29702, 30178, 32633, \n  35023, 35041, 38626, 21311, 28346, 21533, 29136, 29848, \n  34298, 38563, 40023, 40607, 26519, 28107, 33256, 31520, \n  31890, 29376, 28825, 35672, 20160, 33590, 21050, 20999, \n  24230, 25299, 31958, 23429, 27934, 26292, 36667, 38477, \n  24275, 20800, 21952, 22618, 26228, 20958, 29482, 30410, \n  31036, 31070, 31077, 31119, 38742, 31934, 34322, 35576, \n  36920, 37117, 39151, 39164, 39208, 40372, 37086, 38583, \n  20398, 20711, 20813, 21193, 21220, 21329, 21917, 22022, \n  22120, 22592, 22696, 23652, 24724, 24936, 24974, 25074, \n  25935, 26082, 26257, 26757, 28023, 28186, 28450, 29038, \n  29227, 29730, 30865, 31049, 31048, 31056, 31062, 31117, \n  31118, 31296, 31361, 31680, 32265, 32321, 32626, 32773, \n  33261, 33401, 33879, 35088, 35222, 35585, 35641, 36051, \n  36104, 36790, 38627, 38911, 38971, 24693, 55376, 57070, \n  33304, 20006, 20917, 20840, 20352, 20805, 20864, 21191, \n  21242, 21845, 21913, 21986, 22707, 22852, 22868, 23138, \n  23336, 24274, 24281, 24425, 24493, 24792, 24910, 24840, \n  24928, 25140, 25540, 25628, 25682, 25942, 26395, 26454, \n  28379, 28363, 28702, 30631, 29237, 29359, 29809, 29958, \n  30011, 30237, 30239, 30427, 30452, 30538, 30528, 30924, \n  31409, 31867, 32091, 32574, 33618, 33775, 34681, 35137, \n  35206, 35519, 35531, 35565, 35722, 36664, 36978, 37273, \n  37494, 38524, 38875, 38923, 39698, 55370, 56394, 55370, \n  56388, 55372, 57301, 15261, 16408, 16441, 55380, 56905, \n  55383, 56528, 55391, 57043, 40771, 40846, 102, 102, \n  64256, 102, 105, 64257, 102, 108, 64258, 102, \n  102, 105, 64259, 102, 102, 108, 64260, 383, \n  116, 115, 116, 64261, 64262, 1396, 1398, 64275, \n  1396, 1381, 64276, 1396, 1387, 64277, 1406, 1398, \n  64278, 1396, 1389, 64279, 1497, 1460, 1522, 1463, \n  1506, 1492, 1499, 1500, 1501, 1512, 1514, 1513, \n  1473, 1513, 1474, 64329, 1473, 64329, 1474, 1488, \n  1463, 1488, 1464, 1488, 1468, 1489, 1468, 1490, \n  1468, 1491, 1468, 1492, 1468, 1493, 1468, 1494, \n  1468, 1496, 1468, 1497, 1468, 1498, 1468, 1499, \n  1468, 1500, 1468, 1502, 1468, 1504, 1468, 1505, \n  1468, 1507, 1468, 1508, 1468, 1510, 1468, 1511, \n  1468, 1512, 1468, 1513, 1468, 1514, 1468, 1493, \n  1465, 1489, 1471, 1499, 1471, 1508, 1471, 1488, \n  1500, 1649, 1659, 1662, 1664, 1658, 1663, 1657, \n  1700, 1702, 1668, 1667, 1670, 1671, 1677, 1676, \n  1678, 1672, 1688, 1681, 1705, 1711, 1715, 1713, \n  1722, 1723, 1728, 1729, 1726, 1746, 1747, 1709, \n  1735, 1734, 1736, 1655, 1739, 1733, 1737, 1744, \n  1609, 1574, 1575, 1574, 1749, 1574, 1608, 1574, \n  1735, 1574, 1734, 1574, 1736, 1574, 1744, 1574, \n  1609, 1740, 1574, 1580, 1574, 1581, 1574, 1605, \n  1574, 1610, 1576, 1580, 1576, 1581, 1576, 1582, \n  1576, 1605, 1576, 1609, 1576, 1610, 1578, 1580, \n  1578, 1581, 1578, 1582, 1578, 1605, 1578, 1609, \n  1578, 1610, 1579, 1580, 1579, 1605, 1579, 1609, \n  1579, 1610, 1580, 1581, 1580, 1605, 1581, 1580, \n  1581, 1605, 1582, 1580, 1582, 1581, 1582, 1605, \n  1587, 1580, 1587, 1581, 1587, 1582, 1587, 1605, \n  1589, 1581, 1589, 1605, 1590, 1580, 1590, 1581, \n  1590, 1582, 1590, 1605, 1591, 1581, 1591, 1605, \n  1592, 1605, 1593, 1580, 1593, 1605, 1594, 1580, \n  1594, 1605, 1601, 1580, 1601, 1581, 1601, 1582, \n  1601, 1605, 1601, 1609, 1601, 1610, 1602, 1581, \n  1602, 1605, 1602, 1609, 1602, 1610, 1603, 1575, \n  1603, 1580, 1603, 1581, 1603, 1582, 1603, 1604, \n  1603, 1605, 1603, 1609, 1603, 1610, 1604, 1580, \n  1604, 1581, 1604, 1582, 1604, 1605, 1604, 1609, \n  1604, 1610, 1605, 1580, 1605, 1581, 1605, 1582, \n  1605, 1605, 1605, 1609, 1605, 1610, 1606, 1580, \n  1606, 1581, 1606, 1582, 1606, 1605, 1606, 1609, \n  1606, 1610, 1607, 1580, 1607, 1605, 1607, 1609, \n  1607, 1610, 1610, 1580, 1610, 1581, 1610, 1582, \n  1610, 1605, 1610, 1609, 1610, 1610, 1584, 1648, \n  1585, 1648, 1609, 1648, 32, 1612, 1617, 32, \n  1613, 1617, 32, 1614, 1617, 32, 1615, 1617, \n  32, 1616, 1617, 32, 1617, 1648, 1574, 1585, \n  1574, 1586, 1574, 1606, 1576, 1585, 1576, 1586, \n  1576, 1606, 1578, 1585, 1578, 1586, 1578, 1606, \n  1579, 1585, 1579, 1586, 1579, 1606, 1605, 1575, \n  1606, 1585, 1606, 1586, 1606, 1606, 1610, 1585, \n  1610, 1586, 1610, 1606, 1574, 1582, 1574, 1607, \n  1576, 1607, 1578, 1607, 1589, 1582, 1604, 1607, \n  1606, 1607, 1607, 1648, 1610, 1607, 1579, 1607, \n  1587, 1607, 1588, 1605, 1588, 1607, 1600, 1614, \n  1617, 1600, 1615, 1617, 1600, 1616, 1617, 1591, \n  1609, 1591, 1610, 1593, 1609, 1593, 1610, 1594, \n  1609, 1594, 1610, 1587, 1609, 1587, 1610, 1588, \n  1609, 1588, 1610, 1581, 1609, 1581, 1610, 1580, \n  1609, 1580, 1610, 1582, 1609, 1582, 1610, 1589, \n  1609, 1589, 1610, 1590, 1609, 1590, 1610, 1588, \n  1580, 1588, 1581, 1588, 1582, 1588, 1585, 1587, \n  1585, 1589, 1585, 1590, 1585, 1575, 1611, 1578, \n  1580, 1605, 1578, 1581, 1580, 1578, 1581, 1605, \n  1578, 1582, 1605, 1578, 1605, 1580, 1578, 1605, \n  1581, 1578, 1605, 1582, 1580, 1605, 1581, 1581, \n  1605, 1610, 1581, 1605, 1609, 1587, 1581, 1580, \n  1587, 1580, 1581, 1587, 1580, 1609, 1587, 1605, \n  1581, 1587, 1605, 1580, 1587, 1605, 1605, 1589, \n  1581, 1581, 1589, 1605, 1605, 1588, 1581, 1605, \n  1588, 1580, 1610, 1588, 1605, 1582, 1588, 1605, \n  1605, 1590, 1581, 1609, 1590, 1582, 1605, 1591, \n  1605, 1581, 1591, 1605, 1605, 1591, 1605, 1610, \n  1593, 1580, 1605, 1593, 1605, 1605, 1593, 1605, \n  1609, 1594, 1605, 1605, 1594, 1605, 1610, 1594, \n  1605, 1609, 1601, 1582, 1605, 1602, 1605, 1581, \n  1602, 1605, 1605, 1604, 1581, 1605, 1604, 1581, \n  1610, 1604, 1581, 1609, 1604, 1580, 1580, 1604, \n  1582, 1605, 1604, 1605, 1581, 1605, 1581, 1580, \n  1605, 1581, 1605, 1605, 1581, 1610, 1605, 1580, \n  1581, 1605, 1580, 1605, 1605, 1582, 1580, 1605, \n  1582, 1605, 1605, 1580, 1582, 1607, 1605, 1580, \n  1607, 1605, 1605, 1606, 1581, 1605, 1606, 1581, \n  1609, 1606, 1580, 1605, 1606, 1580, 1609, 1606, \n  1605, 1610, 1606, 1605, 1609, 1610, 1605, 1605, \n  1576, 1582, 1610, 1578, 1580, 1610, 1578, 1580, \n  1609, 1578, 1582, 1610, 1578, 1582, 1609, 1578, \n  1605, 1610, 1578, 1605, 1609, 1580, 1605, 1610, \n  1580, 1581, 1609, 1580, 1605, 1609, 1587, 1582, \n  1609, 1589, 1581, 1610, 1588, 1581, 1610, 1590, \n  1581, 1610, 1604, 1580, 1610, 1604, 1605, 1610, \n  1610, 1581, 1610, 1610, 1580, 1610, 1610, 1605, \n  1610, 1605, 1605, 1610, 1602, 1605, 1610, 1606, \n  1581, 1610, 1593, 1605, 1610, 1603, 1605, 1610, \n  1606, 1580, 1581, 1605, 1582, 1610, 1604, 1580, \n  1605, 1603, 1605, 1605, 1580, 1581, 1610, 1581, \n  1580, 1610, 1605, 1580, 1610, 1601, 1605, 1610, \n  1576, 1581, 1610, 1587, 1582, 1610, 1606, 1580, \n  1610, 1589, 1604, 1746, 1602, 1604, 1746, 3, \n  1575, 1604, 1604, 1607, 3, 1575, 1603, 1576, \n  1585, 3, 1605, 1581, 1605, 1583, 3, 1589, \n  1604, 1593, 1605, 3, 1585, 1587, 1608, 1604, \n  3, 1593, 1604, 1610, 1607, 3, 1608, 1587, \n  1604, 1605, 1589, 1604, 1609, 17, 1589, 1604, \n  1609, 32, 1575, 1604, 1604, 1607, 32, 1593, \n  1604, 1610, 1607, 32, 1608, 1587, 1604, 1605, \n  7, 1580, 1604, 32, 1580, 1604, 1575, 1604, \n  1607, 3, 1585, 1740, 1575, 1604, 44, 12289, \n  12290, 58, 33, 63, 12310, 12311, 8230, 8229, \n  8212, 8211, 95, 123, 125, 12308, 12309, 12304, \n  12305, 12298, 12299, 12300, 12301, 12302, 12303, 91, \n  93, 8254, 35, 38, 42, 45, 60, 62, \n  92, 36, 37, 64, 32, 1611, 1600, 1611, \n  32, 1612, 32, 1613, 32, 1614, 1600, 1614, \n  32, 1615, 1600, 1615, 32, 1616, 1600, 1616, \n  32, 1617, 1600, 1617, 32, 1618, 1600, 1618, \n  1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, \n  1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, \n  1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, \n  1593, 1594, 1601, 1602, 1603, 1604, 1605, 1606, \n  1607, 1608, 1610, 1604, 1570, 1604, 1571, 1604, \n  1573, 1604, 1575, 34, 39, 47, 65345, 65346, \n  65347, 65348, 65349, 65350, 65351, 65352, 65353, 65354, \n  65355, 65356, 65357, 65358, 65359, 65360, 65361, 65362, \n  65363, 65364, 65365, 65366, 65367, 65368, 65369, 65370, \n  94, 65313, 65314, 65315, 65316, 65317, 65318, 65319, \n  65320, 65321, 65322, 65323, 65324, 65325, 65326, 65327, \n  65328, 65329, 65330, 65331, 65332, 65333, 65334, 65335, \n  65336, 65337, 65338, 124, 126, 10629, 10630, 12539, \n  12449, 12451, 12453, 12455, 12457, 12515, 12517, 12519, \n  12483, 12540, 12531, 12441, 12442, 12644, 12593, 12594, \n  12595, 12596, 12597, 12598, 12599, 12600, 12601, 12602, \n  12603, 12604, 12605, 12606, 12607, 12608, 12609, 12610, \n  12611, 12612, 12613, 12614, 12615, 12616, 12617, 12618, \n  12619, 12620, 12621, 12622, 12623, 12624, 12625, 12626, \n  12627, 12628, 12629, 12630, 12631, 12632, 12633, 12634, \n  12635, 12636, 12637, 12638, 12639, 12640, 12641, 12642, \n  12643, 162, 163, 172, 175, 166, 165, 8361, \n  9474, 8592, 8593, 8594, 8595, 9632, 9675, 55297, \n  56360, 55297, 56361, 55297, 56362, 55297, 56363, 55297, \n  56364, 55297, 56365, 55297, 56366, 55297, 56367, 55297, \n  56368, 55297, 56369, 55297, 56370, 55297, 56371, 55297, \n  56372, 55297, 56373, 55297, 56374, 55297, 56375, 55297, \n  56376, 55297, 56377, 55297, 56378, 55297, 56379, 55297, \n  56380, 55297, 56381, 55297, 56382, 55297, 56383, 55297, \n  56384, 55297, 56385, 55297, 56386, 55297, 56387, 55297, \n  56388, 55297, 56389, 55297, 56390, 55297, 56391, 55297, \n  56392, 55297, 56393, 55297, 56394, 55297, 56395, 55297, \n  56396, 55297, 56397, 55297, 56398, 55297, 56399, 55297, \n  56320, 55297, 56321, 55297, 56322, 55297, 56323, 55297, \n  56324, 55297, 56325, 55297, 56326, 55297, 56327, 55297, \n  56328, 55297, 56329, 55297, 56330, 55297, 56331, 55297, \n  56332, 55297, 56333, 55297, 56334, 55297, 56335, 55297, \n  56336, 55297, 56337, 55297, 56338, 55297, 56339, 55297, \n  56340, 55297, 56341, 55297, 56342, 55297, 56343, 55297, \n  56344, 55297, 56345, 55297, 56346, 55297, 56347, 55297, \n  56348, 55297, 56349, 55297, 56350, 55297, 56351, 55297, \n  56352, 55297, 56353, 55297, 56354, 55297, 56355, 55297, \n  56356, 55297, 56357, 55297, 56358, 55297, 56359, 55297, \n  56536, 55297, 56537, 55297, 56538, 55297, 56539, 55297, \n  56540, 55297, 56541, 55297, 56542, 55297, 56543, 55297, \n  56544, 55297, 56545, 55297, 56546, 55297, 56547, 55297, \n  56548, 55297, 56549, 55297, 56550, 55297, 56551, 55297, \n  56552, 55297, 56553, 55297, 56554, 55297, 56555, 55297, \n  56556, 55297, 56557, 55297, 56558, 55297, 56559, 55297, \n  56560, 55297, 56561, 55297, 56562, 55297, 56563, 55297, \n  56564, 55297, 56565, 55297, 56566, 55297, 56567, 55297, \n  56568, 55297, 56569, 55297, 56570, 55297, 56571, 55297, \n  56496, 55297, 56497, 55297, 56498, 55297, 56499, 55297, \n  56500, 55297, 56501, 55297, 56502, 55297, 56503, 55297, \n  56504, 55297, 56505, 55297, 56506, 55297, 56507, 55297, \n  56508, 55297, 56509, 55297, 56510, 55297, 56511, 55297, \n  56512, 55297, 56513, 55297, 56514, 55297, 56515, 55297, \n  56516, 55297, 56517, 55297, 56518, 55297, 56519, 55297, \n  56520, 55297, 56521, 55297, 56522, 55297, 56523, 55297, \n  56524, 55297, 56525, 55297, 56526, 55297, 56527, 55297, \n  56528, 55297, 56529, 55297, 56530, 55297, 56531, 55297, \n  56727, 55297, 56728, 55297, 56729, 55297, 56730, 55297, \n  56731, 55297, 56732, 55297, 56733, 55297, 56734, 55297, \n  56735, 55297, 56736, 55297, 56737, 55297, 56739, 55297, \n  56740, 55297, 56741, 55297, 56742, 55297, 56743, 55297, \n  56744, 55297, 56745, 55297, 56746, 55297, 56747, 55297, \n  56748, 55297, 56749, 55297, 56750, 55297, 56751, 55297, \n  56752, 55297, 56753, 55297, 56755, 55297, 56756, 55297, \n  56757, 55297, 56758, 55297, 56759, 55297, 56760, 55297, \n  56761, 55297, 56763, 55297, 56764, 55297, 56688, 55297, \n  56689, 55297, 56690, 55297, 56691, 55297, 56692, 55297, \n  56693, 55297, 56694, 55297, 56695, 55297, 56696, 55297, \n  56697, 55297, 56698, 55297, 56700, 55297, 56701, 55297, \n  56702, 55297, 56703, 55297, 56704, 55297, 56705, 55297, \n  56706, 55297, 56707, 55297, 56708, 55297, 56709, 55297, \n  56710, 55297, 56711, 55297, 56712, 55297, 56713, 55297, \n  56714, 55297, 56716, 55297, 56717, 55297, 56718, 55297, \n  56719, 55297, 56720, 55297, 56721, 55297, 56722, 55297, \n  56724, 55297, 56725, 55297, 56786, 775, 55297, 56794, \n  775, 55297, 57216, 720, 721, 55297, 57219, 55297, \n  57220, 55297, 57221, 55297, 57223, 55297, 57224, 55297, \n  57225, 55297, 57226, 55297, 57227, 55297, 57228, 55297, \n  57229, 55297, 57230, 55297, 57231, 55297, 57232, 55297, \n  57233, 55297, 57234, 55297, 57235, 55297, 57236, 55297, \n  57237, 55297, 57238, 55297, 57239, 55297, 57240, 55297, \n  57241, 55297, 57242, 55297, 57243, 55351, 57092, 55297, \n  57244, 55297, 57245, 55297, 57246, 55351, 57093, 55297, \n  57247, 55297, 57248, 55351, 57094, 55297, 57249, 55297, \n  57250, 55297, 57251, 55297, 57252, 55297, 57253, 55297, \n  57254, 55351, 57096, 55297, 57255, 55297, 57256, 55297, \n  57257, 55297, 57258, 55297, 57259, 55297, 57260, 55297, \n  57261, 55297, 57262, 55297, 57263, 55297, 57264, 55297, \n  57266, 55297, 57267, 55297, 57268, 55297, 57269, 448, \n  55297, 57270, 449, 55297, 57271, 450, 55297, 57272, \n  55351, 57098, 55297, 57273, 55351, 57118, 55297, 57274, \n  55299, 56512, 55299, 56513, 55299, 56514, 55299, 56515, \n  55299, 56516, 55299, 56517, 55299, 56518, 55299, 56519, \n  55299, 56520, 55299, 56521, 55299, 56522, 55299, 56523, \n  55299, 56524, 55299, 56525, 55299, 56526, 55299, 56527, \n  55299, 56528, 55299, 56529, 55299, 56530, 55299, 56531, \n  55299, 56532, 55299, 56533, 55299, 56534, 55299, 56535, \n  55299, 56536, 55299, 56537, 55299, 56538, 55299, 56539, \n  55299, 56540, 55299, 56541, 55299, 56542, 55299, 56543, \n  55299, 56544, 55299, 56545, 55299, 56546, 55299, 56547, \n  55299, 56548, 55299, 56549, 55299, 56550, 55299, 56551, \n  55299, 56552, 55299, 56553, 55299, 56554, 55299, 56555, \n  55299, 56556, 55299, 56557, 55299, 56558, 55299, 56559, \n  55299, 56560, 55299, 56561, 55299, 56562, 55299, 56448, \n  55299, 56449, 55299, 56450, 55299, 56451, 55299, 56452, \n  55299, 56453, 55299, 56454, 55299, 56455, 55299, 56456, \n  55299, 56457, 55299, 56458, 55299, 56459, 55299, 56460, \n  55299, 56461, 55299, 56462, 55299, 56463, 55299, 56464, \n  55299, 56465, 55299, 56466, 55299, 56467, 55299, 56468, \n  55299, 56469, 55299, 56470, 55299, 56471, 55299, 56472, \n  55299, 56473, 55299, 56474, 55299, 56475, 55299, 56476, \n  55299, 56477, 55299, 56478, 55299, 56479, 55299, 56480, \n  55299, 56481, 55299, 56482, 55299, 56483, 55299, 56484, \n  55299, 56485, 55299, 56486, 55299, 56487, 55299, 56488, \n  55299, 56489, 55299, 56490, 55299, 56491, 55299, 56492, \n  55299, 56493, 55299, 56494, 55299, 56495, 55299, 56496, \n  55299, 56497, 55299, 56498, 55299, 56688, 55299, 56689, \n  55299, 56690, 55299, 56691, 55299, 56692, 55299, 56693, \n  55299, 56694, 55299, 56695, 55299, 56696, 55299, 56697, \n  55299, 56698, 55299, 56699, 55299, 56700, 55299, 56701, \n  55299, 56702, 55299, 56703, 55299, 56704, 55299, 56705, \n  55299, 56706, 55299, 56707, 55299, 56708, 55299, 56709, \n  55299, 56656, 55299, 56657, 55299, 56658, 55299, 56659, \n  55299, 56660, 55299, 56661, 55299, 56662, 55299, 56663, \n  55299, 56664, 55299, 56665, 55299, 56666, 55299, 56667, \n  55299, 56668, 55299, 56669, 55299, 56670, 55299, 56671, \n  55299, 56672, 55299, 56673, 55299, 56674, 55299, 56675, \n  55299, 56676, 55299, 56677, 55300, 56473, 55300, 56506, \n  55300, 56475, 55300, 56506, 55300, 56485, 55300, 56506, \n  55300, 56625, 55300, 56615, 55300, 56626, 55300, 56615, \n  55300, 57159, 55300, 57150, 55300, 57159, 55300, 57175, \n  55300, 57218, 55300, 57289, 55300, 57220, 55300, 57275, \n  55300, 57227, 55300, 57282, 55300, 57232, 55300, 57289, \n  55300, 57282, 55300, 57282, 55300, 57282, 55300, 57272, \n  55300, 57282, 55300, 57289, 55301, 56505, 55301, 56506, \n  55301, 56505, 55301, 56496, 55301, 56505, 55301, 56509, \n  55301, 56760, 55301, 56751, 55301, 56761, 55301, 56751, \n  55302, 56512, 55302, 56513, 55302, 56514, 55302, 56515, \n  55302, 56516, 55302, 56517, 55302, 56518, 55302, 56519, \n  55302, 56520, 55302, 56521, 55302, 56522, 55302, 56523, \n  55302, 56524, 55302, 56525, 55302, 56526, 55302, 56527, \n  55302, 56528, 55302, 56529, 55302, 56530, 55302, 56531, \n  55302, 56532, 55302, 56533, 55302, 56534, 55302, 56535, \n  55302, 56536, 55302, 56537, 55302, 56538, 55302, 56539, \n  55302, 56540, 55302, 56541, 55302, 56542, 55302, 56543, \n  55302, 56480, 55302, 56481, 55302, 56482, 55302, 56483, \n  55302, 56484, 55302, 56485, 55302, 56486, 55302, 56487, \n  55302, 56488, 55302, 56489, 55302, 56490, 55302, 56491, \n  55302, 56492, 55302, 56493, 55302, 56494, 55302, 56495, \n  55302, 56496, 55302, 56497, 55302, 56498, 55302, 56499, \n  55302, 56500, 55302, 56501, 55302, 56502, 55302, 56503, \n  55302, 56504, 55302, 56505, 55302, 56506, 55302, 56507, \n  55302, 56508, 55302, 56509, 55302, 56510, 55302, 56511, \n  55302, 56629, 55302, 56624, 55320, 56606, 55320, 56606, \n  55320, 56606, 55320, 56617, 55320, 56606, 55320, 56607, \n  55320, 56617, 55320, 56607, 55320, 56606, 55320, 56608, \n  55320, 56609, 55320, 56607, 55320, 56610, 55320, 56607, \n  55320, 56609, 55320, 56608, 55323, 56679, 55323, 56679, \n  55323, 56675, 55323, 56679, 55323, 56681, 55323, 56679, \n  55323, 56928, 55323, 56929, 55323, 56930, 55323, 56931, \n  55323, 56932, 55323, 56933, 55323, 56934, 55323, 56935, \n  55323, 56936, 55323, 56937, 55323, 56938, 55323, 56939, \n  55323, 56940, 55323, 56941, 55323, 56942, 55323, 56943, \n  55323, 56944, 55323, 56945, 55323, 56946, 55323, 56947, \n  55323, 56948, 55323, 56949, 55323, 56950, 55323, 56951, \n  55323, 56952, 55323, 56953, 55323, 56954, 55323, 56955, \n  55323, 56956, 55323, 56957, 55323, 56958, 55323, 56959, \n  55323, 56896, 55323, 56897, 55323, 56898, 55323, 56899, \n  55323, 56900, 55323, 56901, 55323, 56902, 55323, 56903, \n  55323, 56904, 55323, 56905, 55323, 56906, 55323, 56907, \n  55323, 56908, 55323, 56909, 55323, 56910, 55323, 56911, \n  55323, 56912, 55323, 56913, 55323, 56914, 55323, 56915, \n  55323, 56916, 55323, 56917, 55323, 56918, 55323, 56919, \n  55323, 56920, 55323, 56921, 55323, 56922, 55323, 56923, \n  55323, 56924, 55323, 56925, 55323, 56926, 55323, 56927, \n  55323, 57019, 55323, 57020, 55323, 57021, 55323, 57022, \n  55323, 57023, 55323, 57024, 55323, 57025, 55323, 57026, \n  55323, 57027, 55323, 57028, 55323, 57029, 55323, 57030, \n  55323, 57031, 55323, 57032, 55323, 57033, 55323, 57034, \n  55323, 57035, 55323, 57036, 55323, 57037, 55323, 57038, \n  55323, 57039, 55323, 57040, 55323, 57041, 55323, 57042, \n  55323, 57043, 55323, 56992, 55323, 56993, 55323, 56994, \n  55323, 56995, 55323, 56996, 55323, 56997, 55323, 56998, \n  55323, 56999, 55323, 57000, 55323, 57001, 55323, 57002, \n  55323, 57003, 55323, 57004, 55323, 57005, 55323, 57006, \n  55323, 57007, 55323, 57008, 55323, 57009, 55323, 57010, \n  55323, 57011, 55323, 57012, 55323, 57013, 55323, 57014, \n  55323, 57015, 55323, 57016, 55348, 56663, 55348, 56677, \n  55348, 56664, 55348, 56677, 55348, 56671, 55348, 56686, \n  55348, 56671, 55348, 56687, 55348, 56671, 55348, 56688, \n  55348, 56671, 55348, 56689, 55348, 56671, 55348, 56690, \n  55348, 56761, 55348, 56677, 55348, 56762, 55348, 56677, \n  55348, 56763, 55348, 56686, 55348, 56764, 55348, 56686, \n  55348, 56763, 55348, 56687, 55348, 56764, 55348, 56687, \n  55349, 56320, 55349, 56321, 55349, 56322, 55349, 56323, \n  55349, 56324, 55349, 56325, 55349, 56326, 55349, 56327, \n  55349, 56328, 55349, 56329, 55349, 56330, 55349, 56331, \n  55349, 56332, 55349, 56333, 55349, 56334, 55349, 56335, \n  55349, 56336, 55349, 56337, 55349, 56338, 55349, 56339, \n  55349, 56340, 55349, 56341, 55349, 56342, 55349, 56343, \n  55349, 56344, 55349, 56345, 55349, 56346, 55349, 56347, \n  55349, 56348, 55349, 56349, 55349, 56350, 55349, 56351, \n  55349, 56352, 55349, 56353, 55349, 56354, 55349, 56355, \n  55349, 56356, 55349, 56357, 55349, 56358, 55349, 56359, \n  55349, 56360, 55349, 56361, 55349, 56362, 55349, 56363, \n  55349, 56364, 55349, 56365, 55349, 56366, 55349, 56367, \n  55349, 56368, 55349, 56369, 55349, 56370, 55349, 56371, \n  55349, 56372, 55349, 56373, 55349, 56374, 55349, 56375, \n  55349, 56376, 55349, 56377, 55349, 56378, 55349, 56379, \n  55349, 56380, 55349, 56381, 55349, 56382, 55349, 56383, \n  55349, 56384, 55349, 56385, 55349, 56386, 55349, 56387, \n  55349, 56388, 55349, 56389, 55349, 56390, 55349, 56391, \n  55349, 56392, 55349, 56393, 55349, 56394, 55349, 56395, \n  55349, 56396, 55349, 56397, 55349, 56398, 55349, 56399, \n  55349, 56400, 55349, 56401, 55349, 56402, 55349, 56403, \n  55349, 56404, 55349, 56406, 55349, 56407, 55349, 56408, \n  55349, 56409, 55349, 56410, 55349, 56411, 55349, 56412, \n  55349, 56413, 55349, 56414, 55349, 56415, 55349, 56416, \n  55349, 56417, 55349, 56418, 55349, 56419, 55349, 56420, \n  55349, 56421, 55349, 56422, 55349, 56423, 55349, 56424, \n  55349, 56425, 55349, 56426, 55349, 56427, 55349, 56428, \n  55349, 56429, 55349, 56430, 55349, 56431, 55349, 56432, \n  55349, 56433, 55349, 56434, 55349, 56435, 55349, 56436, \n  55349, 56437, 55349, 56438, 55349, 56439, 55349, 56440, \n  55349, 56441, 55349, 56442, 55349, 56443, 55349, 56444, \n  55349, 56445, 55349, 56446, 55349, 56447, 55349, 56448, \n  55349, 56449, 55349, 56450, 55349, 56451, 55349, 56452, \n  55349, 56453, 55349, 56454, 55349, 56455, 55349, 56456, \n  55349, 56457, 55349, 56458, 55349, 56459, 55349, 56460, \n  55349, 56461, 55349, 56462, 55349, 56463, 55349, 56464, \n  55349, 56465, 55349, 56466, 55349, 56467, 55349, 56468, \n  55349, 56469, 55349, 56470, 55349, 56471, 55349, 56472, \n  55349, 56473, 55349, 56474, 55349, 56475, 55349, 56476, \n  55349, 56478, 55349, 56479, 55349, 56482, 55349, 56485, \n  55349, 56486, 55349, 56489, 55349, 56490, 55349, 56491, \n  55349, 56492, 55349, 56494, 55349, 56495, 55349, 56496, \n  55349, 56497, 55349, 56498, 55349, 56499, 55349, 56500, \n  55349, 56501, 55349, 56502, 55349, 56503, 55349, 56504, \n  55349, 56505, 55349, 56507, 55349, 56509, 55349, 56510, \n  55349, 56511, 55349, 56512, 55349, 56513, 55349, 56514, \n  55349, 56515, 55349, 56517, 55349, 56518, 55349, 56519, \n  55349, 56520, 55349, 56521, 55349, 56522, 55349, 56523, \n  55349, 56524, 55349, 56525, 55349, 56526, 55349, 56527, \n  55349, 56528, 55349, 56529, 55349, 56530, 55349, 56531, \n  55349, 56532, 55349, 56533, 55349, 56534, 55349, 56535, \n  55349, 56536, 55349, 56537, 55349, 56538, 55349, 56539, \n  55349, 56540, 55349, 56541, 55349, 56542, 55349, 56543, \n  55349, 56544, 55349, 56545, 55349, 56546, 55349, 56547, \n  55349, 56548, 55349, 56549, 55349, 56550, 55349, 56551, \n  55349, 56552, 55349, 56553, 55349, 56554, 55349, 56555, \n  55349, 56556, 55349, 56557, 55349, 56558, 55349, 56559, \n  55349, 56560, 55349, 56561, 55349, 56562, 55349, 56563, \n  55349, 56564, 55349, 56565, 55349, 56566, 55349, 56567, \n  55349, 56568, 55349, 56569, 55349, 56570, 55349, 56571, \n  55349, 56572, 55349, 56573, 55349, 56574, 55349, 56575, \n  55349, 56576, 55349, 56577, 55349, 56578, 55349, 56579, \n  55349, 56580, 55349, 56581, 55349, 56583, 55349, 56584, \n  55349, 56585, 55349, 56586, 55349, 56589, 55349, 56590, \n  55349, 56591, 55349, 56592, 55349, 56593, 55349, 56594, \n  55349, 56595, 55349, 56596, 55349, 56598, 55349, 56599, \n  55349, 56600, 55349, 56601, 55349, 56602, 55349, 56603, \n  55349, 56604, 55349, 56606, 55349, 56607, 55349, 56608, \n  55349, 56609, 55349, 56610, 55349, 56611, 55349, 56612, \n  55349, 56613, 55349, 56614, 55349, 56615, 55349, 56616, \n  55349, 56617, 55349, 56618, 55349, 56619, 55349, 56620, \n  55349, 56621, 55349, 56622, 55349, 56623, 55349, 56624, \n  55349, 56625, 55349, 56626, 55349, 56627, 55349, 56628, \n  55349, 56629, 55349, 56630, 55349, 56631, 55349, 56632, \n  55349, 56633, 55349, 56635, 55349, 56636, 55349, 56637, \n  55349, 56638, 55349, 56640, 55349, 56641, 55349, 56642, \n  55349, 56643, 55349, 56644, 55349, 56646, 55349, 56650, \n  55349, 56651, 55349, 56652, 55349, 56653, 55349, 56654, \n  55349, 56655, 55349, 56656, 55349, 56658, 55349, 56659, \n  55349, 56660, 55349, 56661, 55349, 56662, 55349, 56663, \n  55349, 56664, 55349, 56665, 55349, 56666, 55349, 56667, \n  55349, 56668, 55349, 56669, 55349, 56670, 55349, 56671, \n  55349, 56672, 55349, 56673, 55349, 56674, 55349, 56675, \n  55349, 56676, 55349, 56677, 55349, 56678, 55349, 56679, \n  55349, 56680, 55349, 56681, 55349, 56682, 55349, 56683, \n  55349, 56684, 55349, 56685, 55349, 56686, 55349, 56687, \n  55349, 56688, 55349, 56689, 55349, 56690, 55349, 56691, \n  55349, 56692, 55349, 56693, 55349, 56694, 55349, 56695, \n  55349, 56696, 55349, 56697, 55349, 56698, 55349, 56699, \n  55349, 56700, 55349, 56701, 55349, 56702, 55349, 56703, \n  55349, 56704, 55349, 56705, 55349, 56706, 55349, 56707, \n  55349, 56708, 55349, 56709, 55349, 56710, 55349, 56711, \n  55349, 56712, 55349, 56713, 55349, 56714, 55349, 56715, \n  55349, 56716, 55349, 56717, 55349, 56718, 55349, 56719, \n  55349, 56720, 55349, 56721, 55349, 56722, 55349, 56723, \n  55349, 56724, 55349, 56725, 55349, 56726, 55349, 56727, \n  55349, 56728, 55349, 56729, 55349, 56730, 55349, 56731, \n  55349, 56732, 55349, 56733, 55349, 56734, 55349, 56735, \n  55349, 56736, 55349, 56737, 55349, 56738, 55349, 56739, \n  55349, 56740, 55349, 56741, 55349, 56742, 55349, 56743, \n  55349, 56744, 55349, 56745, 55349, 56746, 55349, 56747, \n  55349, 56748, 55349, 56749, 55349, 56750, 55349, 56751, \n  55349, 56752, 55349, 56753, 55349, 56754, 55349, 56755, \n  55349, 56756, 55349, 56757, 55349, 56758, 55349, 56759, \n  55349, 56760, 55349, 56761, 55349, 56762, 55349, 56763, \n  55349, 56764, 55349, 56765, 55349, 56766, 55349, 56767, \n  55349, 56768, 55349, 56769, 55349, 56770, 55349, 56771, \n  55349, 56772, 55349, 56773, 55349, 56774, 55349, 56775, \n  55349, 56776, 55349, 56777, 55349, 56778, 55349, 56779, \n  55349, 56780, 55349, 56781, 55349, 56782, 55349, 56783, \n  55349, 56784, 55349, 56785, 55349, 56786, 55349, 56787, \n  55349, 56788, 55349, 56789, 55349, 56790, 55349, 56791, \n  55349, 56792, 55349, 56793, 55349, 56794, 55349, 56795, \n  55349, 56796, 55349, 56797, 55349, 56798, 55349, 56799, \n  55349, 56800, 55349, 56801, 55349, 56802, 55349, 56803, \n  55349, 56804, 55349, 56805, 55349, 56806, 55349, 56807, \n  55349, 56808, 55349, 56809, 55349, 56810, 55349, 56811, \n  55349, 56812, 55349, 56813, 55349, 56814, 55349, 56815, \n  55349, 56816, 55349, 56817, 55349, 56818, 55349, 56819, \n  55349, 56820, 55349, 56821, 55349, 56822, 55349, 56823, \n  55349, 56824, 55349, 56825, 55349, 56826, 55349, 56827, \n  55349, 56828, 55349, 56829, 55349, 56830, 55349, 56831, \n  55349, 56832, 55349, 56833, 55349, 56834, 55349, 56835, \n  55349, 56836, 55349, 56837, 55349, 56838, 55349, 56839, \n  55349, 56840, 55349, 56841, 55349, 56842, 55349, 56843, \n  55349, 56844, 55349, 56845, 55349, 56846, 55349, 56847, \n  55349, 56848, 55349, 56849, 55349, 56850, 55349, 56851, \n  55349, 56852, 55349, 56853, 55349, 56854, 55349, 56855, \n  55349, 56856, 55349, 56857, 55349, 56858, 55349, 56859, \n  55349, 56860, 55349, 56861, 55349, 56862, 55349, 56863, \n  55349, 56864, 55349, 56865, 55349, 56866, 55349, 56867, \n  55349, 56868, 55349, 56869, 55349, 56870, 55349, 56871, \n  55349, 56872, 55349, 56873, 55349, 56874, 55349, 56875, \n  55349, 56876, 55349, 56877, 55349, 56878, 55349, 56879, \n  55349, 56880, 55349, 56881, 55349, 56882, 55349, 56883, \n  55349, 56884, 55349, 56885, 55349, 56886, 55349, 56887, \n  55349, 56888, 55349, 56889, 55349, 56890, 55349, 56891, \n  55349, 56892, 55349, 56893, 55349, 56894, 55349, 56895, \n  55349, 56896, 55349, 56897, 55349, 56898, 55349, 56899, \n  55349, 56900, 55349, 56901, 55349, 56902, 55349, 56903, \n  55349, 56904, 55349, 56905, 55349, 56906, 55349, 56907, \n  55349, 56908, 55349, 56909, 55349, 56910, 55349, 56911, \n  55349, 56912, 55349, 56913, 55349, 56914, 55349, 56915, \n  55349, 56916, 55349, 56917, 55349, 56918, 55349, 56919, \n  55349, 56920, 55349, 56921, 55349, 56922, 55349, 56923, \n  55349, 56924, 55349, 56925, 55349, 56926, 55349, 56927, \n  55349, 56928, 55349, 56929, 55349, 56930, 55349, 56931, \n  55349, 56932, 55349, 56933, 55349, 56934, 55349, 56935, \n  55349, 56936, 55349, 56937, 55349, 56938, 55349, 56939, \n  55349, 56940, 55349, 56941, 55349, 56942, 55349, 56943, \n  55349, 56944, 55349, 56945, 55349, 56946, 55349, 56947, \n  55349, 56948, 55349, 56949, 55349, 56950, 55349, 56951, \n  55349, 56952, 55349, 56953, 55349, 56954, 55349, 56955, \n  55349, 56956, 55349, 56957, 55349, 56958, 55349, 56959, \n  55349, 56960, 55349, 56961, 55349, 56962, 55349, 56963, \n  55349, 56964, 55349, 56965, 55349, 56966, 55349, 56967, \n  55349, 56968, 55349, 56969, 55349, 56970, 55349, 56971, \n  55349, 56972, 55349, 56973, 55349, 56974, 55349, 56975, \n  55349, 56976, 55349, 56977, 55349, 56978, 55349, 56979, \n  55349, 56980, 55349, 56981, 55349, 56982, 55349, 56983, \n  55349, 56984, 55349, 56985, 55349, 56986, 55349, 56987, \n  55349, 56988, 55349, 56989, 55349, 56990, 55349, 56991, \n  55349, 56992, 55349, 56993, 55349, 56994, 55349, 56995, \n  305, 55349, 56996, 55349, 56997, 55349, 57000, 55349, \n  57001, 55349, 57002, 55349, 57003, 55349, 57004, 55349, \n  57005, 55349, 57006, 55349, 57007, 55349, 57008, 55349, \n  57009, 55349, 57010, 55349, 57011, 55349, 57012, 55349, \n  57013, 55349, 57014, 55349, 57015, 55349, 57016, 1012, \n  55349, 57017, 55349, 57018, 55349, 57019, 55349, 57020, \n  55349, 57021, 55349, 57022, 55349, 57023, 55349, 57024, \n  8711, 55349, 57026, 55349, 57027, 55349, 57028, 55349, \n  57029, 55349, 57030, 55349, 57031, 55349, 57032, 55349, \n  57033, 55349, 57034, 55349, 57035, 55349, 57036, 55349, \n  57037, 55349, 57038, 55349, 57039, 55349, 57040, 55349, \n  57041, 55349, 57042, 55349, 57043, 55349, 57044, 55349, \n  57045, 55349, 57046, 55349, 57047, 55349, 57048, 55349, \n  57049, 55349, 57050, 8706, 1013, 55349, 57052, 977, \n  55349, 57053, 1008, 55349, 57054, 981, 55349, 57055, \n  1009, 55349, 57056, 982, 55349, 57057, 55349, 57058, \n  55349, 57059, 55349, 57060, 55349, 57061, 55349, 57062, \n  55349, 57063, 55349, 57064, 55349, 57065, 55349, 57066, \n  55349, 57067, 55349, 57068, 55349, 57069, 55349, 57070, \n  55349, 57071, 55349, 57072, 55349, 57073, 55349, 57074, \n  55349, 57075, 55349, 57076, 55349, 57077, 55349, 57078, \n  55349, 57079, 55349, 57080, 55349, 57081, 55349, 57082, \n  55349, 57084, 55349, 57085, 55349, 57086, 55349, 57087, \n  55349, 57088, 55349, 57089, 55349, 57090, 55349, 57091, \n  55349, 57092, 55349, 57093, 55349, 57094, 55349, 57095, \n  55349, 57096, 55349, 57097, 55349, 57098, 55349, 57099, \n  55349, 57100, 55349, 57101, 55349, 57102, 55349, 57103, \n  55349, 57104, 55349, 57105, 55349, 57106, 55349, 57107, \n  55349, 57108, 55349, 57110, 55349, 57111, 55349, 57112, \n  55349, 57113, 55349, 57114, 55349, 57115, 55349, 57116, \n  55349, 57117, 55349, 57118, 55349, 57119, 55349, 57120, \n  55349, 57121, 55349, 57122, 55349, 57123, 55349, 57124, \n  55349, 57125, 55349, 57126, 55349, 57127, 55349, 57128, \n  55349, 57129, 55349, 57130, 55349, 57131, 55349, 57132, \n  55349, 57133, 55349, 57134, 55349, 57135, 55349, 57136, \n  55349, 57137, 55349, 57138, 55349, 57139, 55349, 57140, \n  55349, 57142, 55349, 57143, 55349, 57144, 55349, 57145, \n  55349, 57146, 55349, 57147, 55349, 57148, 55349, 57149, \n  55349, 57150, 55349, 57151, 55349, 57152, 55349, 57153, \n  55349, 57154, 55349, 57155, 55349, 57156, 55349, 57157, \n  55349, 57158, 55349, 57159, 55349, 57160, 55349, 57161, \n  55349, 57162, 55349, 57163, 55349, 57164, 55349, 57165, \n  55349, 57166, 55349, 57168, 55349, 57169, 55349, 57170, \n  55349, 57171, 55349, 57172, 55349, 57173, 55349, 57174, \n  55349, 57175, 55349, 57176, 55349, 57177, 55349, 57178, \n  55349, 57179, 55349, 57180, 55349, 57181, 55349, 57182, \n  55349, 57183, 55349, 57184, 55349, 57185, 55349, 57186, \n  55349, 57187, 55349, 57188, 55349, 57189, 55349, 57190, \n  55349, 57191, 55349, 57192, 55349, 57193, 55349, 57194, \n  55349, 57195, 55349, 57196, 55349, 57197, 55349, 57198, \n  55349, 57200, 55349, 57201, 55349, 57202, 55349, 57203, \n  55349, 57204, 55349, 57205, 55349, 57206, 55349, 57207, \n  55349, 57208, 55349, 57209, 55349, 57210, 55349, 57211, \n  55349, 57212, 55349, 57213, 55349, 57214, 55349, 57215, \n  55349, 57216, 55349, 57217, 55349, 57218, 55349, 57219, \n  55349, 57220, 55349, 57221, 55349, 57222, 55349, 57223, \n  55349, 57224, 55349, 57226, 55349, 57227, 55349, 57228, \n  55349, 57229, 55349, 57230, 55349, 57231, 55349, 57232, \n  55349, 57233, 55349, 57234, 55349, 57235, 55349, 57236, \n  55349, 57237, 55349, 57238, 55349, 57239, 55349, 57240, \n  55349, 57241, 55349, 57242, 55349, 57243, 55349, 57244, \n  55349, 57245, 55349, 57246, 55349, 57247, 55349, 57248, \n  55349, 57249, 55349, 57250, 55349, 57251, 55349, 57252, \n  55349, 57253, 55349, 57254, 55349, 57255, 55349, 57256, \n  55349, 57258, 55349, 57259, 55349, 57260, 55349, 57261, \n  55349, 57262, 55349, 57263, 55349, 57264, 55349, 57265, \n  55349, 57266, 55349, 57267, 55349, 57268, 55349, 57269, \n  55349, 57270, 55349, 57271, 55349, 57272, 55349, 57273, \n  55349, 57274, 55349, 57275, 55349, 57276, 55349, 57277, \n  55349, 57278, 55349, 57279, 55349, 57280, 55349, 57281, \n  55349, 57282, 55349, 57284, 55349, 57285, 55349, 57286, \n  55349, 57287, 55349, 57288, 55349, 57289, 55349, 57290, \n  55349, 57291, 55351, 57088, 55351, 57089, 55351, 57090, \n  55351, 57091, 55351, 57095, 55351, 57097, 55351, 57099, \n  55351, 57100, 55351, 57101, 55351, 57102, 55351, 57103, \n  55351, 57104, 55351, 57105, 55351, 57106, 55351, 57107, \n  55351, 57108, 55351, 57109, 55351, 57110, 55351, 57111, \n  55351, 57112, 55351, 57113, 55351, 57114, 55351, 57115, \n  55351, 57116, 55351, 57117, 55351, 57125, 55351, 57126, \n  55351, 57127, 55351, 57128, 55351, 57129, 55351, 57130, \n  55352, 56368, 55352, 56369, 55352, 56370, 55352, 56371, \n  55352, 56372, 55352, 56373, 55352, 56374, 55352, 56375, \n  55352, 56376, 55352, 56377, 55352, 56378, 55352, 56379, \n  55352, 56380, 55352, 56381, 55352, 56382, 55352, 56383, \n  55352, 56384, 55352, 56385, 55352, 56386, 55352, 56387, \n  55352, 56388, 55352, 56389, 55352, 56390, 55352, 56391, \n  55352, 56392, 55352, 56393, 55352, 56394, 55352, 56395, \n  55352, 56396, 55352, 56397, 55352, 56398, 55352, 56399, \n  55352, 56400, 55352, 56401, 55352, 56402, 55352, 56403, \n  55352, 56404, 55352, 56405, 55352, 56406, 55352, 56407, \n  55352, 56408, 55352, 56409, 55352, 56410, 55352, 56411, \n  55352, 56412, 55352, 56413, 55352, 56414, 55352, 56415, \n  55352, 56416, 55352, 56417, 55352, 56418, 55352, 56419, \n  55352, 56420, 55352, 56421, 55352, 56422, 55352, 56423, \n  55352, 56424, 55352, 56425, 55352, 56426, 55352, 56427, \n  55352, 56428, 55352, 56429, 55354, 56610, 55354, 56611, \n  55354, 56612, 55354, 56613, 55354, 56614, 55354, 56615, \n  55354, 56616, 55354, 56617, 55354, 56618, 55354, 56619, \n  55354, 56620, 55354, 56621, 55354, 56622, 55354, 56623, \n  55354, 56624, 55354, 56625, 55354, 56626, 55354, 56627, \n  55354, 56628, 55354, 56629, 55354, 56630, 55354, 56631, \n  55354, 56632, 55354, 56633, 55354, 56634, 55354, 56635, \n  55354, 56636, 55354, 56637, 55354, 56638, 55354, 56639, \n  55354, 56640, 55354, 56641, 55354, 56642, 55354, 56643, \n  55354, 56576, 55354, 56577, 55354, 56578, 55354, 56579, \n  55354, 56580, 55354, 56581, 55354, 56582, 55354, 56583, \n  55354, 56584, 55354, 56585, 55354, 56586, 55354, 56587, \n  55354, 56588, 55354, 56589, 55354, 56590, 55354, 56591, \n  55354, 56592, 55354, 56593, 55354, 56594, 55354, 56595, \n  55354, 56596, 55354, 56597, 55354, 56598, 55354, 56599, \n  55354, 56600, 55354, 56601, 55354, 56602, 55354, 56603, \n  55354, 56604, 55354, 56605, 55354, 56606, 55354, 56607, \n  55354, 56608, 55354, 56609, 1646, 1697, 1647, 48, \n  46, 48, 44, 49, 44, 50, 44, 51, \n  44, 52, 44, 53, 44, 54, 44, 55, \n  44, 56, 44, 57, 44, 40, 65, 41, \n  40, 66, 41, 40, 67, 41, 40, 68, \n  41, 40, 69, 41, 40, 70, 41, 40, \n  71, 41, 40, 72, 41, 40, 73, 41, \n  40, 74, 41, 40, 75, 41, 40, 76, \n  41, 40, 77, 41, 40, 78, 41, 40, \n  79, 41, 40, 80, 41, 40, 81, 41, \n  40, 82, 41, 40, 83, 41, 40, 84, \n  41, 40, 85, 41, 40, 86, 41, 40, \n  87, 41, 40, 88, 41, 40, 89, 41, \n  40, 90, 41, 12308, 83, 12309, 67, 68, \n  87, 90, 55356, 56624, 55356, 56625, 55356, 56626, \n  55356, 56627, 55356, 56628, 55356, 56629, 55356, 56630, \n  55356, 56631, 55356, 56632, 55356, 56633, 55356, 56634, \n  55356, 56635, 55356, 56636, 55356, 56637, 55356, 56638, \n  55356, 56639, 55356, 56640, 55356, 56641, 55356, 56642, \n  55356, 56643, 55356, 56644, 55356, 56645, 55356, 56646, \n  55356, 56647, 55356, 56648, 55356, 56649, 72, 86, \n  83, 68, 83, 83, 80, 80, 86, 87, \n  67, 55356, 56656, 55356, 56657, 55356, 56658, 55356, \n  56659, 55356, 56660, 55356, 56661, 55356, 56662, 55356, \n  56663, 55356, 56664, 55356, 56665, 55356, 56666, 55356, \n  56667, 55356, 56668, 55356, 56669, 55356, 56670, 55356, \n  56671, 55356, 56672, 55356, 56673, 55356, 56674, 55356, \n  56675, 55356, 56676, 55356, 56677, 55356, 56678, 55356, \n  56679, 55356, 56680, 55356, 56681, 77, 67, 77, \n  68, 77, 82, 55356, 56688, 55356, 56689, 55356, \n  56690, 55356, 56691, 55356, 56692, 55356, 56693, 55356, \n  56694, 55356, 56695, 55356, 56696, 55356, 56697, 55356, \n  56698, 55356, 56699, 55356, 56700, 55356, 56701, 55356, \n  56702, 55356, 56703, 55356, 56704, 55356, 56705, 55356, \n  56706, 55356, 56707, 55356, 56708, 55356, 56709, 55356, \n  56710, 55356, 56711, 55356, 56712, 55356, 56713, 68, \n  74, 12411, 12363, 12467, 12467, 23383, 21452, 12487, \n  22810, 35299, 20132, 26144, 28961, 21069, 24460, 20877, \n  26032, 21021, 32066, 36009, 22768, 21561, 28436, 25237, \n  25429, 36938, 25351, 25171, 31105, 31354, 21512, 28288, \n  30003, 21106, 21942, 37197, 12308, 26412, 12309, 12308, \n  19977, 12309, 12308, 20108, 12309, 12308, 23433, 12309, \n  12308, 28857, 12309, 12308, 25171, 12309, 12308, 30423, \n  12309, 12308, 21213, 12309, 12308, 25943, 12309, 24471, \n  21487, 20029, 20024, 20033, 55360, 56610, 20320, 20411, \n  20482, 20602, 20633, 20687, 13470, 55361, 56890, 20820, \n  20836, 20855, 55361, 56604, 13497, 20839, 55361, 56651, \n  20887, 20900, 20172, 20908, 55396, 56799, 20995, 13535, \n  21051, 21062, 21111, 13589, 21253, 21254, 21321, 21338, \n  21363, 21373, 21375, 55362, 56876, 28784, 21450, 21471, \n  55362, 57187, 21483, 21489, 21510, 21662, 21560, 21576, \n  21608, 21666, 21750, 21776, 21843, 21859, 21892, 21931, \n  21939, 21954, 22294, 22295, 22097, 22132, 22766, 22478, \n  22516, 22541, 22411, 22578, 22577, 22700, 55365, 56548, \n  22770, 22775, 22790, 22818, 22882, 55365, 57000, 55365, \n  57066, 23020, 23067, 23079, 23000, 23142, 14062, 14076, \n  23304, 23358, 55366, 56776, 23491, 23512, 23539, 55366, \n  57112, 23551, 23558, 24403, 14209, 23648, 23744, 23693, \n  55367, 56804, 23875, 55367, 56806, 23918, 23915, 23932, \n  24033, 24034, 14383, 24061, 24104, 24125, 24169, 14434, \n  55368, 56707, 14460, 24240, 24243, 24246, 55400, 57234, \n  55368, 57137, 33281, 24354, 14535, 55372, 57016, 55384, \n  56794, 24418, 24427, 14563, 24474, 24525, 24535, 24569, \n  24705, 14650, 14620, 55369, 57044, 24775, 24904, 24908, \n  24954, 25010, 24996, 25007, 25054, 25104, 25115, 25181, \n  25265, 25300, 25424, 55370, 57100, 25405, 25340, 25448, \n  25475, 25572, 55370, 57329, 25634, 25541, 25513, 14894, \n  25705, 25726, 25757, 25719, 14956, 25964, 55372, 56330, \n  26083, 26360, 26185, 15129, 15112, 15076, 20882, 20885, \n  26368, 26268, 32941, 17369, 26401, 26462, 26451, 55372, \n  57283, 15177, 26618, 26501, 26706, 55373, 56429, 26766, \n  26655, 26900, 26946, 27043, 27114, 27304, 55373, 56995, \n  27355, 15384, 27425, 55374, 56487, 27476, 15438, 27506, \n  27551, 27579, 55374, 56973, 55367, 56587, 55374, 57082, \n  27726, 55375, 56508, 27839, 27853, 27751, 27926, 27966, \n  28009, 28024, 28037, 55375, 56606, 27956, 28207, 28270, \n  15667, 28359, 55375, 57041, 28153, 28526, 55375, 57182, \n  55375, 57230, 28614, 28729, 28699, 15766, 28746, 28797, \n  28791, 28845, 55361, 56613, 28997, 55376, 56931, 29084, \n  55376, 57259, 29224, 29264, 55377, 56840, 29312, 29333, \n  55377, 57141, 55378, 56340, 29562, 29579, 16044, 29605, \n  16056, 29767, 29788, 29829, 29898, 16155, 29988, 55379, \n  56374, 30014, 55379, 56466, 55368, 56735, 30224, 55379, \n  57249, 55379, 57272, 55380, 56388, 16380, 16392, 55380, \n  56563, 55380, 56562, 55380, 56601, 55380, 56627, 30494, \n  30495, 30603, 16454, 16534, 55381, 56349, 30798, 16611, \n  55381, 56870, 55381, 56986, 55381, 57029, 31211, 16687, \n  31306, 31311, 55382, 56700, 55382, 56999, 31470, 16898, \n  55382, 57259, 31686, 31689, 16935, 55383, 56448, 31954, \n  17056, 31976, 31971, 32000, 55383, 57222, 32099, 17153, \n  32199, 32258, 32325, 17204, 55384, 56872, 55384, 56903, \n  17241, 55384, 57049, 32634, 55384, 57150, 32661, 32762, \n  55385, 56538, 55385, 56611, 32864, 55385, 56744, 32880, \n  55372, 57183, 17365, 32946, 33027, 17419, 33086, 23221, \n  55385, 57255, 55385, 57269, 55372, 57235, 55372, 57244, \n  33284, 36766, 17515, 33425, 33419, 33437, 21171, 33457, \n  33459, 33469, 33510, 55386, 57148, 33565, 33635, 33709, \n  33571, 33725, 33767, 33619, 33738, 33740, 33756, 55387, \n  56374, 55387, 56683, 55387, 56533, 17707, 34033, 34035, \n  34070, 55388, 57290, 34148, 55387, 57132, 17757, 17761, \n  55387, 57265, 55388, 56530, 17771, 34384, 34407, 34409, \n  34473, 34440, 34574, 34530, 34600, 34667, 34694, 17879, \n  34785, 34817, 17913, 34912, 55389, 56935, 35031, 35038, \n  17973, 35066, 13499, 55390, 56494, 55390, 56678, 18110, \n  18119, 35488, 55391, 56488, 36011, 36033, 36123, 36215, \n  55391, 57135, 55362, 56324, 36299, 36284, 36336, 55362, \n  56542, 36564, 55393, 56786, 55393, 56813, 37012, 37105, \n  37137, 55393, 57134, 37147, 37432, 37591, 37592, 37500, \n  37881, 37909, 55394, 57338, 38283, 18837, 38327, 55395, \n  56695, 18918, 38595, 23986, 38691, 55396, 56645, 55396, \n  56858, 19054, 19062, 38880, 55397, 56330, 19122, 55397, \n  56470, 38953, 55397, 56758, 39138, 19251, 39209, 39335, \n  39362, 39422, 19406, 55398, 57136, 40000, 40189, 19662, \n  19693, 40295, 55400, 56526, 19704, 55400, 56581, 55400, \n  56846, 55400, 56977, 19798, 40702, 40709, 40719, 40726, \n  55401, 56832, };\n\nstatic const utf8proc_uint16_t utf8proc_stage1table[] = {\n  0, 256, 512, 768, 1024, 1280, 1536, \n  1792, 2048, 2304, 2560, 2816, 3072, 3328, 3584, \n  3840, 4096, 4352, 4608, 4864, 5120, 5376, 5632, \n  5888, 6144, 6400, 6656, 6912, 7168, 7424, 7680, \n  7936, 8192, 8448, 8704, 8960, 9216, 9472, 9728, \n  9984, 10240, 10496, 10752, 11008, 11264, 11520, 11776, \n  12032, 12288, 12544, 12800, 13056, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13568, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13824, 13312, 13312, 13312, 14080, 5376, 14336, \n  14592, 14848, 15104, 15360, 15616, 15872, 16128, 16384, \n  16640, 16896, 17152, 17408, 15872, 16128, 16384, 16640, \n  16896, 17152, 17408, 15872, 16128, 16384, 16640, 16896, \n  17152, 17408, 15872, 16128, 16384, 16640, 16896, 17152, \n  17408, 15872, 16128, 16384, 16640, 16896, 17152, 17408, \n  15872, 16128, 16384, 16640, 16896, 17152, 17408, 15872, \n  17664, 17920, 17920, 17920, 17920, 17920, 17920, 17920, \n  17920, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18432, 18688, 18944, 19200, 19456, 19712, \n  19968, 20224, 20480, 20736, 20992, 21248, 21504, 5376, \n  21760, 22016, 22272, 22528, 22784, 23040, 23296, 23552, \n  23808, 24064, 24320, 24576, 24832, 25088, 25344, 25600, \n  25856, 26112, 26368, 26624, 26880, 27136, 27392, 27648, \n  27904, 5376, 5376, 5376, 28160, 28416, 28672, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  29184, 5376, 5376, 5376, 5376, 29440, 5376, 5376, \n  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, \n  5376, 5376, 5376, 5376, 29696, 5376, 5376, 29952, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 30208, 28928, 28928, 28928, 28928, 28928, \n  28928, 5376, 5376, 30464, 30720, 28928, 30976, 31232, \n  31488, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 31744, 32000, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  32256, 13312, 32512, 32768, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 33024, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 33280, 33536, 33792, \n  34048, 34304, 34560, 34816, 35072, 35328, 35584, 35840, \n  36096, 10240, 10240, 36352, 28928, 28928, 28928, 28928, \n  36608, 36864, 37120, 37376, 28928, 37632, 37888, 38144, \n  38400, 38656, 38912, 28928, 28928, 39168, 39424, 39680, \n  28928, 39936, 40192, 40448, 40704, 40960, 41216, 41472, \n  41728, 41984, 42240, 42496, 42752, 28928, 28928, 28928, \n  28928, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 43008, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 43264, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 43520, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 43776, 13312, 13312, 44032, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 44288, 44544, 44800, 28928, 28928, 28928, 28928, \n  28928, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 45056, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, \n  13312, 13312, 13312, 13312, 13312, 45312, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 45568, 45824, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 28928, 28928, 28928, 28928, 28928, 28928, 28928, \n  28928, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  46080, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  18176, 18176, 18176, 18176, 18176, 18176, 18176, 18176, \n  46080, };\n\nstatic const utf8proc_uint16_t utf8proc_stage2table[] = {\n  1, 1, 1, 1, 1, 1, 1, \n  1, 1, 2, 3, 2, 4, 5, 1, \n  1, 1, 1, 1, 1, 1, 1, 1, \n  1, 1, 1, 1, 1, 6, 6, 6, \n  2, 7, 8, 8, 9, 10, 9, 8, \n  8, 11, 12, 8, 13, 14, 15, 14, \n  14, 16, 16, 16, 16, 16, 16, 16, \n  16, 16, 16, 14, 8, 17, 18, 19, \n  8, 8, 20, 21, 22, 23, 24, 25, \n  26, 27, 28, 29, 30, 31, 32, 33, \n  34, 35, 36, 37, 38, 39, 40, 41, \n  42, 43, 44, 45, 11, 8, 12, 46, \n  47, 46, 48, 49, 50, 51, 52, 53, \n  54, 55, 56, 57, 58, 59, 60, 61, \n  62, 63, 64, 65, 66, 67, 68, 69, \n  70, 71, 72, 73, 11, 74, 12, 74, \n  1, 1, 1, 1, 1, 1, 6, 1, \n  1, 1, 1, 1, 1, 1, 1, 1, \n  1, 1, 1, 1, 1, 1, 1, 1, \n  1, 1, 1, 1, 1, 1, 1, 1, \n  1, 75, 76, 10, 10, 77, 10, 78, \n  76, 79, 80, 81, 82, 74, 83, 84, \n  85, 86, 87, 88, 89, 90, 91, 76, \n  76, 92, 93, 94, 95, 96, 97, 98, \n  76, 99, 100, 101, 102, 103, 104, 105, \n  106, 107, 108, 109, 110, 111, 112, 113, \n  114, 115, 116, 117, 118, 119, 120, 121, \n  122, 123, 124, 125, 126, 127, 128, 129, \n  130, 131, 132, 133, 134, 135, 136, 137, \n  138, 139, 140, 141, 142, 143, 144, 145, \n  146, 147, 148, 149, 150, 151, 152, 153, \n  122, 154, 155, 156, 157, 158, 159, 160, \n  161, 162, 163, 164, 165, 166, 167, 168, \n  169, 170, 171, 172, 173, 174, 175, 176, \n  177, 178, 179, 180, 181, 182, 183, 184, \n  185, 186, 187, 188, 189, 190, 191, 192, \n  193, 194, 195, 196, 197, 198, 199, 200, \n  201, 202, 203, 204, 205, 206, 207, 208, \n  209, 210, 211, 212, 213, 214, 215, 216, \n  217, 218, 219, 220, 221, 222, 223, 224, \n  225, 226, 227, 228, 229, 230, 231, 232, \n  233, 234, 235, 236, 237, 238, 239, 240, \n  241, 242, 243, 244, 245, 246, 247, 248, \n  249, 250, 251, 252, 253, 254, 255, 256, \n  257, 258, 259, 260, 261, 262, 263, 264, \n  265, 266, 267, 268, 269, 270, 271, 272, \n  273, 274, 275, 276, 277, 278, 279, 280, \n  281, 282, 283, 284, 285, 286, 287, 288, \n  289, 290, 291, 292, 293, 294, 295, 296, \n  297, 298, 299, 300, 301, 302, 303, 304, \n  305, 306, 307, 308, 309, 310, 311, 312, \n  313, 314, 315, 316, 317, 318, 319, 320, \n  321, 322, 323, 324, 325, 326, 327, 328, \n  329, 330, 331, 332, 333, 334, 335, 336, \n  337, 338, 339, 340, 341, 342, 343, 344, \n  345, 346, 347, 348, 349, 350, 351, 352, \n  353, 349, 349, 349, 349, 354, 355, 356, \n  357, 358, 359, 360, 361, 362, 363, 364, \n  365, 366, 367, 368, 369, 370, 371, 372, \n  373, 374, 375, 376, 377, 378, 379, 380, \n  381, 382, 383, 384, 385, 386, 387, 388, \n  389, 390, 391, 392, 393, 394, 395, 396, \n  397, 398, 399, 400, 401, 402, 403, 404, \n  405, 406, 407, 408, 409, 410, 411, 412, \n  413, 414, 415, 416, 417, 418, 419, 420, \n  421, 422, 423, 424, 425, 426, 427, 428, \n  429, 430, 431, 432, 433, 434, 435, 436, \n  437, 438, 439, 440, 441, 442, 443, 444, \n  445, 446, 447, 448, 449, 450, 451, 452, \n  453, 454, 455, 456, 457, 458, 459, 460, \n  461, 462, 463, 464, 465, 466, 467, 468, \n  469, 470, 471, 472, 473, 474, 475, 476, \n  477, 478, 479, 480, 481, 482, 483, 484, \n  485, 486, 487, 488, 489, 490, 491, 492, \n  493, 494, 495, 496, 497, 498, 499, 500, \n  501, 502, 503, 504, 505, 506, 507, 508, \n  509, 510, 511, 512, 513, 514, 515, 516, \n  517, 518, 519, 520, 521, 522, 523, 524, \n  525, 526, 527, 528, 529, 530, 531, 532, \n  533, 534, 535, 536, 537, 538, 539, 540, \n  541, 542, 543, 544, 545, 546, 547, 548, \n  549, 550, 551, 552, 553, 554, 555, 556, \n  557, 558, 559, 560, 561, 349, 349, 562, \n  563, 564, 565, 566, 567, 568, 569, 570, \n  571, 572, 573, 574, 575, 576, 577, 578, \n  579, 580, 581, 582, 583, 584, 585, 586, \n  587, 588, 589, 590, 591, 592, 593, 594, \n  595, 596, 597, 597, 598, 598, 598, 598, \n  598, 599, 600, 46, 46, 601, 46, 597, \n  602, 597, 602, 602, 602, 597, 602, 597, \n  597, 603, 598, 46, 46, 46, 46, 46, \n  46, 604, 605, 606, 607, 608, 609, 46, \n  601, 610, 611, 612, 613, 614, 46, 46, \n  46, 46, 46, 46, 46, 597, 46, 598, \n  46, 46, 46, 46, 46, 46, 46, 46, \n  46, 46, 46, 46, 46, 46, 46, 46, \n  46, 615, 615, 615, 615, 615, 616, 615, \n  615, 615, 615, 615, 615, 615, 616, 616, \n  615, 616, 615, 616, 615, 615, 617, 618, \n  618, 618, 618, 617, 619, 618, 618, 618, \n  618, 618, 620, 620, 621, 621, 621, 621, \n  622, 622, 618, 618, 618, 618, 621, 621, \n  618, 621, 621, 618, 618, 623, 623, 623, \n  623, 624, 618, 618, 618, 618, 616, 616, \n  616, 625, 626, 615, 627, 628, 629, 616, \n  618, 618, 618, 616, 616, 616, 618, 618, \n  630, 616, 616, 616, 618, 618, 618, 618, \n  616, 617, 618, 618, 616, 631, 632, 632, \n  631, 632, 632, 631, 616, 616, 616, 616, \n  616, 616, 616, 616, 616, 616, 616, 616, \n  616, 633, 634, 635, 636, 637, 46, 638, \n  639, 0, 0, 640, 641, 642, 643, 644, \n  645, 0, 0, 0, 0, 646, 647, 648, \n  649, 650, 651, 652, 0, 653, 0, 654, \n  655, 656, 657, 658, 659, 660, 661, 662, \n  663, 664, 665, 666, 667, 668, 669, 670, \n  671, 672, 673, 0, 674, 675, 676, 677, \n  678, 679, 680, 681, 682, 683, 684, 685, \n  686, 687, 688, 689, 690, 691, 692, 693, \n  694, 695, 696, 697, 698, 699, 700, 701, \n  702, 703, 704, 705, 706, 707, 708, 709, \n  710, 711, 712, 713, 714, 715, 716, 717, \n  718, 719, 720, 721, 722, 723, 724, 725, \n  726, 727, 728, 729, 730, 731, 732, 733, \n  734, 735, 736, 737, 738, 739, 740, 741, \n  742, 743, 744, 745, 746, 747, 748, 749, \n  750, 751, 752, 753, 754, 755, 756, 74, \n  757, 758, 759, 760, 761, 762, 763, 764, \n  765, 766, 767, 768, 769, 770, 771, 772, \n  773, 774, 775, 776, 777, 778, 779, 780, \n  781, 782, 783, 784, 785, 786, 787, 788, \n  789, 790, 791, 792, 793, 794, 795, 796, \n  797, 798, 799, 800, 801, 802, 803, 804, \n  805, 806, 807, 808, 809, 810, 811, 812, \n  813, 814, 815, 816, 817, 818, 819, 820, \n  821, 822, 823, 824, 825, 826, 827, 828, \n  829, 830, 831, 832, 833, 834, 835, 836, \n  837, 838, 839, 840, 841, 842, 843, 844, \n  845, 846, 847, 848, 849, 850, 851, 852, \n  853, 854, 855, 856, 857, 858, 859, 860, \n  861, 862, 863, 864, 865, 866, 867, 868, \n  869, 870, 871, 872, 873, 874, 875, 876, \n  877, 878, 879, 880, 881, 882, 883, 884, \n  885, 886, 887, 888, 889, 890, 891, 892, \n  893, 894, 895, 896, 897, 897, 897, 897, \n  897, 898, 898, 899, 900, 901, 902, 903, \n  904, 905, 906, 907, 908, 909, 910, 911, \n  912, 913, 914, 915, 916, 917, 918, 919, \n  920, 921, 922, 923, 924, 925, 926, 927, \n  928, 929, 930, 931, 932, 933, 934, 935, \n  936, 937, 938, 939, 940, 941, 942, 943, \n  944, 945, 946, 947, 948, 949, 950, 951, \n  952, 953, 954, 955, 956, 957, 958, 959, \n  960, 961, 962, 963, 964, 965, 966, 967, \n  968, 969, 970, 971, 972, 973, 974, 975, \n  976, 977, 978, 979, 980, 981, 982, 983, \n  984, 985, 986, 987, 988, 989, 990, 991, \n  992, 993, 994, 995, 996, 997, 998, 999, \n  1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, \n  1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, \n  1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, \n  1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, \n  1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, \n  1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, \n  1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, \n  1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, \n  1064, 0, 1065, 1066, 1067, 1068, 1069, 1070, \n  1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, \n  1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, \n  1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, \n  1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, \n  0, 0, 598, 1103, 1103, 1103, 1103, 1103, \n  1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, \n  1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, \n  1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, \n  1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, \n  1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, \n  1143, 1144, 1103, 1145, 0, 0, 78, 78, \n  10, 0, 1146, 897, 897, 897, 897, 1146, \n  897, 897, 897, 1147, 1146, 897, 897, 897, \n  897, 897, 897, 1146, 1146, 1146, 1146, 1146, \n  1146, 897, 897, 1146, 897, 897, 1147, 1148, \n  897, 1149, 1150, 1151, 1152, 1153, 1154, 1155, \n  1156, 1157, 1158, 1158, 1159, 1160, 1161, 1162, \n  1163, 1164, 1165, 1166, 1164, 897, 1146, 1164, \n  1157, 0, 0, 0, 0, 0, 0, 0, \n  0, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 0, 0, 0, 0, \n  1167, 1167, 1167, 1167, 1164, 1164, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 1168, 1168, 1168, 1168, 1168, 1168, 74, \n  74, 1169, 9, 9, 1170, 14, 1171, 78, \n  78, 897, 897, 897, 897, 897, 897, 897, \n  897, 1172, 1173, 1174, 1171, 1175, 1171, 1171, \n  1171, 1176, 1176, 1177, 1178, 1179, 1180, 1181, \n  1182, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1183, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1184, 1176, 1185, 1186, 1187, 1188, 1172, \n  1173, 1174, 1189, 1190, 1191, 1191, 1192, 1146, \n  897, 897, 897, 897, 897, 1146, 897, 897, \n  1146, 1193, 1193, 1193, 1193, 1193, 1193, 1193, \n  1193, 1193, 1193, 9, 1194, 1194, 1171, 1176, \n  1176, 1195, 1176, 1176, 1176, 1176, 1196, 1197, \n  1198, 1199, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1200, 1201, 1202, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1203, 1204, 1171, 1205, 897, \n  897, 897, 897, 897, 897, 897, 1168, 78, \n  897, 897, 897, 897, 1146, 897, 1183, 1183, \n  897, 897, 78, 1146, 897, 897, 1146, 1176, \n  1176, 16, 16, 16, 16, 16, 16, 16, \n  16, 16, 16, 1176, 1176, 1176, 1206, 1206, \n  1176, 1171, 1171, 1171, 1171, 1171, 1171, 1171, \n  1171, 1171, 1171, 1171, 1171, 1171, 1171, 0, \n  1207, 1176, 1208, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 897, 1146, 897, 897, 1146, 897, 897, \n  1146, 1146, 1146, 897, 1146, 1146, 897, 1146, \n  897, 897, 897, 1146, 897, 1146, 897, 1146, \n  897, 1146, 897, 897, 0, 0, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1209, \n  1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, \n  1209, 1209, 1176, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 1210, 1210, 1210, 1210, 1210, 1210, 1210, \n  1210, 1210, 1210, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 897, 897, 897, 897, \n  897, 897, 897, 1146, 897, 1211, 1211, 78, \n  8, 8, 8, 1211, 0, 0, 1146, 1212, \n  1212, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 897, \n  897, 897, 897, 1211, 897, 897, 897, 897, \n  897, 897, 897, 897, 897, 1211, 897, 897, \n  897, 1211, 897, 897, 897, 897, 897, 0, \n  0, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n  1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n  0, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1146, 1146, 1146, 0, 0, 1164, \n  0, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 0, 0, 0, 0, \n  0, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1213, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1168, 1168, 0, 0, 0, 0, 0, \n  897, 897, 1146, 1146, 1146, 897, 897, 897, \n  897, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1183, 897, 897, 897, 897, 897, \n  1146, 1146, 1146, 1146, 1146, 897, 897, 897, \n  897, 897, 897, 897, 897, 897, 897, 897, \n  897, 897, 897, 1168, 1146, 897, 897, 1146, \n  897, 897, 1146, 897, 897, 897, 1146, 1146, \n  1146, 1186, 1187, 1188, 897, 897, 897, 1146, \n  897, 897, 1146, 1146, 897, 897, 897, 897, \n  897, 1209, 1209, 1209, 1214, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1216, 1217, 1215, 1215, 1215, 1215, 1215, \n  1215, 1218, 1219, 1215, 1220, 1221, 1215, 1215, \n  1215, 1215, 1215, 1209, 1214, 1222, 349, 1214, \n  1214, 1214, 1209, 1209, 1209, 1209, 1209, 1209, \n  1209, 1209, 1214, 1214, 1214, 1214, 1223, 1214, \n  1214, 349, 897, 1146, 897, 897, 1209, 1209, \n  1209, 1224, 1225, 1226, 1227, 1228, 1229, 1230, \n  1231, 349, 349, 1209, 1209, 1103, 1103, 1232, \n  1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1103, 598, 349, 349, 349, 349, 349, \n  349, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 349, 1209, 1214, 1214, 0, 349, 349, \n  349, 349, 349, 349, 349, 349, 0, 0, \n  349, 349, 0, 0, 349, 349, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 0, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 0, 1215, 0, 0, 0, 1215, \n  1215, 1215, 1215, 0, 0, 1233, 349, 1234, \n  1214, 1214, 1209, 1209, 1209, 1209, 0, 0, \n  1235, 1214, 0, 0, 1236, 1237, 1223, 349, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  1234, 0, 0, 0, 0, 1238, 1239, 0, \n  1240, 349, 349, 1209, 1209, 0, 0, 1232, \n  1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1215, 1215, 10, 10, 1241, 1241, 1241, \n  1241, 1241, 1241, 896, 10, 349, 1103, 897, \n  0, 0, 1209, 1209, 1214, 0, 349, 349, \n  349, 349, 349, 349, 0, 0, 0, 0, \n  349, 349, 0, 0, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 0, 349, 349, 349, 349, 349, \n  349, 349, 0, 349, 1242, 0, 349, 1243, \n  0, 349, 349, 0, 0, 1233, 0, 1214, \n  1214, 1214, 1209, 1209, 0, 0, 0, 0, \n  1209, 1209, 0, 0, 1209, 1209, 1244, 0, \n  0, 0, 1209, 0, 0, 0, 0, 0, \n  0, 0, 1245, 1246, 1247, 349, 0, 1248, \n  0, 0, 0, 0, 0, 0, 0, 1232, \n  1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1209, 1209, 349, 349, 349, 1209, 1103, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 1209, 1209, 1214, 0, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 0, \n  349, 349, 349, 0, 349, 349, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 0, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 0, 1215, 1215, 0, 1215, 1215, \n  1215, 1215, 1215, 0, 0, 1233, 349, 1214, \n  1214, 1214, 1209, 1209, 1209, 1209, 1209, 0, \n  1209, 1209, 1214, 0, 1214, 1214, 1223, 0, \n  0, 349, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 1209, 1209, 0, 0, 1232, \n  1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1103, 10, 0, 0, 0, 0, 0, \n  0, 0, 1215, 1209, 1209, 1209, 1209, 1209, \n  1209, 0, 1209, 1214, 1214, 0, 349, 349, \n  349, 349, 349, 349, 349, 349, 0, 0, \n  349, 349, 0, 0, 349, 349, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 0, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 0, 1215, 1215, 0, 1215, 1215, \n  1215, 1215, 1215, 0, 0, 1233, 349, 1234, \n  1209, 1214, 1209, 1209, 1209, 1209, 0, 0, \n  1249, 1250, 0, 0, 1251, 1252, 1223, 0, \n  0, 0, 0, 0, 0, 0, 1209, 1253, \n  1234, 0, 0, 0, 0, 1254, 1255, 0, \n  1215, 349, 349, 1209, 1209, 0, 0, 1232, \n  1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 896, 1215, 1241, 1241, 1241, 1241, 1241, \n  1241, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 1209, 349, 0, 349, 349, \n  349, 349, 349, 349, 0, 0, 0, 349, \n  349, 349, 0, 1256, 349, 1257, 349, 0, \n  0, 0, 349, 349, 0, 349, 0, 349, \n  349, 0, 0, 0, 349, 349, 0, 0, \n  0, 349, 349, 349, 0, 0, 0, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 0, 0, 0, 0, 1234, \n  1214, 1209, 1214, 1214, 0, 0, 0, 1258, \n  1259, 1214, 0, 1260, 1261, 1262, 1244, 0, \n  0, 349, 0, 0, 0, 0, 0, 0, \n  1234, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 1232, \n  1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1241, 1241, 1241, 78, 78, 78, 78, \n  78, 78, 10, 78, 0, 0, 0, 0, \n  0, 1209, 1214, 1214, 1214, 1209, 349, 349, \n  349, 349, 349, 349, 349, 349, 0, 349, \n  349, 349, 0, 349, 349, 349, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 0, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 0, 0, 1233, 349, 1209, \n  1209, 1209, 1214, 1214, 1214, 1214, 0, 1263, \n  1209, 1264, 0, 1209, 1209, 1209, 1223, 0, \n  0, 0, 0, 0, 0, 0, 1265, 1266, \n  0, 1215, 1215, 1215, 0, 349, 349, 0, \n  0, 349, 349, 1209, 1209, 0, 0, 1232, \n  1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 0, 0, 0, 0, 0, 0, 0, \n  1103, 1267, 1267, 1267, 1267, 1267, 1267, 1267, \n  896, 349, 1209, 1214, 1214, 1103, 349, 349, \n  349, 349, 349, 349, 349, 349, 0, 349, \n  349, 349, 0, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 0, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 0, 349, 349, \n  349, 349, 349, 0, 0, 1233, 349, 1214, \n  1268, 1269, 1214, 1234, 1214, 1214, 0, 1270, \n  1271, 1272, 0, 1273, 1274, 1209, 1244, 0, \n  0, 0, 0, 0, 0, 0, 1234, 1234, \n  0, 0, 0, 0, 0, 349, 349, 349, \n  0, 349, 349, 1209, 1209, 0, 0, 1232, \n  1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 0, 349, 349, 1214, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 1209, 1209, 1214, 1214, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 0, 349, \n  349, 349, 0, 349, 349, 349, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1244, 1244, 349, 1234, \n  1214, 1214, 1209, 1209, 1209, 1209, 0, 1275, \n  1276, 1214, 0, 1277, 1278, 1279, 1223, 1280, \n  896, 0, 0, 0, 0, 349, 349, 349, \n  1234, 1241, 1241, 1241, 1241, 1241, 1241, 1241, \n  349, 349, 349, 1209, 1209, 0, 0, 1232, \n  1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1241, 1241, 1241, 1241, 1241, 1241, 1241, \n  1241, 1241, 896, 349, 349, 349, 349, 349, \n  349, 0, 1209, 1214, 1214, 0, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  0, 0, 0, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 0, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 0, 349, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  0, 0, 0, 1281, 0, 0, 0, 0, \n  1234, 1214, 1214, 1209, 1209, 1209, 0, 1209, \n  0, 1214, 1282, 1283, 1214, 1284, 1285, 1286, \n  1234, 0, 0, 0, 0, 0, 0, 1232, \n  1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 0, 0, 1214, 1214, 1103, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 1209, 349, 1287, 1209, 1209, 1209, \n  1209, 1288, 1288, 1244, 0, 0, 0, 0, \n  10, 349, 349, 349, 349, 349, 349, 598, \n  1209, 1289, 1289, 1289, 1289, 1209, 1209, 1209, \n  1103, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 1103, 1103, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 349, 349, 0, 349, 0, 349, \n  349, 349, 349, 349, 0, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 0, 349, 0, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 1209, 349, 1290, 1209, 1209, 1209, \n  1209, 1291, 1291, 1244, 1209, 1209, 349, 0, \n  0, 349, 349, 349, 349, 349, 0, 598, \n  0, 1292, 1292, 1292, 1292, 1209, 1209, 1209, \n  0, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 0, 0, 1293, 1294, 349, \n  349, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 896, 896, 896, 1103, 1103, 1103, \n  1103, 1103, 1103, 1103, 1103, 1295, 1103, 1103, \n  1103, 1103, 1103, 1103, 896, 1103, 896, 896, \n  896, 1146, 1146, 896, 896, 896, 896, 896, \n  896, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 1241, 1241, 1241, 1241, 1241, \n  1241, 1241, 1241, 1241, 1241, 896, 1146, 896, \n  1146, 896, 1296, 11, 12, 11, 12, 1214, \n  1214, 349, 349, 349, 1297, 349, 349, 349, \n  349, 0, 349, 349, 349, 349, 1298, 349, \n  349, 349, 349, 1299, 349, 349, 349, 349, \n  1300, 349, 349, 349, 349, 1301, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 1302, 349, 349, 349, 0, 0, \n  0, 0, 1303, 1304, 1305, 1306, 1307, 1308, \n  1309, 1310, 1311, 1304, 1304, 1304, 1304, 1209, \n  1214, 1304, 1312, 897, 897, 1244, 1103, 897, \n  897, 349, 349, 349, 349, 349, 1209, 1209, \n  1209, 1209, 1209, 1209, 1313, 1209, 1209, 1209, \n  1209, 0, 1209, 1209, 1209, 1209, 1314, 1209, \n  1209, 1209, 1209, 1315, 1209, 1209, 1209, 1209, \n  1316, 1209, 1209, 1209, 1209, 1317, 1209, 1209, \n  1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, \n  1209, 1209, 1318, 1209, 1209, 1209, 0, 896, \n  896, 896, 896, 896, 896, 896, 896, 1146, \n  896, 896, 896, 896, 896, 896, 0, 896, \n  896, 1103, 1103, 1103, 1103, 1103, 896, 896, \n  896, 896, 1103, 1103, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1319, 1320, \n  1215, 1215, 1215, 1215, 1321, 1321, 1209, 1253, \n  1209, 1209, 1214, 1209, 1209, 1209, 1209, 1209, \n  1233, 1321, 1223, 1244, 1214, 1214, 1209, 1209, \n  1215, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 1103, 1103, 1103, 1103, 1103, \n  1103, 1215, 1215, 1215, 1215, 1215, 1215, 1214, \n  1214, 1209, 1209, 1215, 1215, 1215, 1215, 1209, \n  1209, 1209, 1215, 1321, 1321, 1321, 1215, 1215, \n  1321, 1321, 1321, 1321, 1321, 1321, 1321, 1215, \n  1215, 1215, 1209, 1209, 1209, 1209, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1209, 1321, 1214, 1209, 1209, \n  1321, 1321, 1321, 1321, 1321, 1321, 1146, 1215, \n  1321, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 1321, 1321, 1321, 1209, 896, \n  896, 1322, 1323, 1324, 1325, 1326, 1327, 1328, \n  1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, \n  1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, \n  1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, \n  1353, 1354, 1355, 1356, 1357, 1358, 1359, 0, \n  1360, 0, 0, 0, 0, 0, 1361, 0, \n  0, 1362, 1363, 1364, 1365, 1366, 1367, 1368, \n  1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, \n  1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, \n  1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, \n  1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, \n  1401, 1402, 1403, 1404, 1103, 1405, 1406, 1407, \n  1408, 1409, 1409, 1409, 1409, 1409, 1409, 1409, \n  1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, \n  1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, \n  1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, \n  1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, \n  1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, \n  1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, \n  1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, \n  1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, \n  1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, \n  1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, \n  1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, \n  1410, 1411, 1412, 1412, 1412, 1412, 1412, 1412, \n  1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, \n  1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, \n  1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, \n  1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, \n  1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, \n  1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, \n  1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, \n  1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, \n  1412, 1413, 1413, 1413, 1413, 1413, 1413, 1413, \n  1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, \n  1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, \n  1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, \n  1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, \n  1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, \n  1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, \n  1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, \n  1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, \n  1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, \n  1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, \n  1413, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 0, 349, 349, 349, 349, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  0, 349, 0, 349, 349, 349, 349, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 0, 349, 349, 349, 349, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 0, 349, 349, 349, 349, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  0, 349, 0, 349, 349, 349, 349, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 0, 349, 349, 349, 349, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 0, 0, 897, 897, \n  897, 1103, 1103, 1103, 1103, 1103, 1103, 1103, \n  1103, 1103, 1241, 1241, 1241, 1241, 1241, 1241, \n  1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, \n  1241, 1241, 1241, 1241, 1241, 1241, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 0, 0, 0, 0, 0, \n  0, 1414, 1415, 1416, 1417, 1418, 1419, 1420, \n  1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, \n  1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, \n  1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, \n  1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, \n  1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, \n  1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, \n  1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, \n  1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, \n  1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, \n  1493, 1494, 1495, 1496, 1497, 1498, 1499, 0, \n  0, 1500, 1501, 1502, 1503, 1504, 1505, 0, \n  0, 1145, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 896, 1103, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 7, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 11, 12, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 1103, 1103, 1103, 1506, \n  1506, 1506, 349, 349, 349, 349, 349, 349, \n  349, 349, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 1209, 1209, 1244, 1507, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 1209, 1209, 1507, 1103, 1103, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 1209, 1209, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 0, 349, \n  349, 349, 0, 1209, 1209, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1508, 1508, 1214, \n  1209, 1209, 1209, 1209, 1209, 1209, 1209, 1214, \n  1214, 1214, 1214, 1214, 1214, 1214, 1214, 1209, \n  1214, 1214, 1209, 1209, 1209, 1209, 1209, 1209, \n  1209, 1209, 1209, 1223, 1209, 1103, 1103, 1103, \n  598, 1103, 1103, 1103, 10, 349, 897, 0, \n  0, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 0, 0, 0, 0, 0, \n  0, 1267, 1267, 1267, 1267, 1267, 1267, 1267, \n  1267, 1267, 1267, 0, 0, 0, 0, 0, \n  0, 8, 8, 8, 8, 8, 8, 1145, \n  8, 8, 8, 8, 1508, 1508, 1508, 1509, \n  1508, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 598, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 1209, 1209, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 1148, 349, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  0, 1209, 1209, 1209, 1214, 1214, 1214, 1214, \n  1209, 1209, 1214, 1214, 1214, 0, 0, 0, \n  0, 1214, 1214, 1209, 1214, 1214, 1214, 1214, \n  1214, 1214, 1147, 897, 1146, 0, 0, 0, \n  0, 78, 0, 0, 0, 8, 8, 1232, \n  1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 0, \n  0, 349, 349, 349, 349, 349, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 0, 0, 0, 0, 0, \n  0, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 1241, 0, 0, 0, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  897, 1146, 1214, 1214, 1209, 0, 0, 1103, \n  1103, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1214, 1209, \n  1214, 1209, 1209, 1209, 1209, 1209, 1209, 1209, \n  0, 1223, 1321, 1209, 1321, 1321, 1209, 1209, \n  1209, 1209, 1209, 1209, 1209, 1209, 1214, 1214, \n  1214, 1214, 1214, 1214, 1209, 1209, 897, 897, \n  897, 897, 897, 897, 897, 897, 0, 0, \n  1146, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 0, 0, 0, 0, 0, \n  0, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 0, 0, 0, 0, 0, \n  0, 1103, 1103, 1103, 1103, 1103, 1103, 1103, \n  598, 1103, 1103, 1103, 1103, 1103, 1103, 0, \n  0, 897, 897, 897, 897, 897, 1146, 1146, \n  1146, 1146, 1146, 1146, 897, 897, 1146, 898, \n  1146, 1146, 897, 897, 1146, 1146, 897, 897, \n  897, 897, 897, 1146, 897, 897, 897, 897, \n  897, 897, 897, 897, 897, 897, 897, 897, \n  897, 897, 897, 897, 897, 897, 1146, 0, \n  0, 897, 897, 897, 897, 897, 897, 1146, \n  897, 897, 897, 897, 1510, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 1209, 1209, 1209, 1209, 1214, 1511, 1512, \n  1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, \n  349, 349, 1521, 1522, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1233, 1234, 1209, \n  1209, 1209, 1209, 1523, 1524, 1525, 1526, 1527, \n  1528, 1529, 1530, 1531, 1532, 1533, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 0, 1103, \n  1103, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 1103, 1103, 1103, 1103, 1103, \n  1103, 1103, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 897, 1146, 897, 897, \n  897, 897, 897, 897, 897, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 1103, 1103, \n  1103, 1209, 1209, 1214, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1214, 1209, 1209, 1209, 1209, 1214, \n  1214, 1209, 1209, 1507, 1223, 1209, 1209, 1215, \n  1215, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 349, 1215, 1215, 1215, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 1233, \n  1214, 1209, 1209, 1214, 1214, 1214, 1209, 1214, \n  1209, 1209, 1209, 1507, 1507, 0, 0, 0, \n  0, 0, 0, 0, 0, 1103, 1103, 1103, \n  1103, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 1214, 1214, 1214, \n  1214, 1214, 1214, 1214, 1214, 1209, 1209, 1209, \n  1209, 1209, 1209, 1209, 1209, 1214, 1214, 1209, \n  1233, 0, 0, 0, 1103, 1103, 1103, 1103, \n  1103, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 0, 0, 0, 349, 349, \n  349, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 598, 598, 598, 598, 598, 598, 1103, \n  1103, 1534, 1535, 1536, 1537, 1538, 1538, 1539, \n  1540, 1541, 1542, 1543, 0, 0, 0, 0, \n  0, 1544, 1545, 1546, 1547, 1548, 1549, 1550, \n  1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, \n  1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, \n  1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, \n  1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, \n  1583, 1584, 1585, 1586, 0, 0, 1587, 1588, \n  1589, 1103, 1103, 1103, 1103, 1103, 1103, 1103, \n  1103, 0, 0, 0, 0, 0, 0, 0, \n  0, 897, 897, 897, 1103, 1590, 1146, 1146, \n  1146, 1146, 1146, 897, 897, 1146, 1146, 1146, \n  1146, 897, 1214, 1590, 1590, 1590, 1590, 1590, \n  1590, 1590, 349, 349, 349, 349, 1146, 349, \n  349, 349, 349, 349, 349, 897, 349, 349, \n  1214, 897, 897, 349, 0, 0, 0, 0, \n  0, 1591, 1592, 1593, 1594, 1595, 1596, 1597, \n  1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, \n  1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, \n  1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, \n  1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, \n  1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, \n  1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, \n  1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, \n  1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, \n  1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, \n  1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, \n  1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, \n  1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, \n  1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, \n  1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, \n  1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717, \n  1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, \n  1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, \n  1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, \n  1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, \n  1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, \n  1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, \n  1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, \n  1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, \n  1782, 897, 897, 1146, 897, 897, 897, 897, \n  897, 897, 897, 1146, 897, 897, 1510, 1783, \n  1146, 1784, 897, 897, 897, 897, 897, 897, \n  897, 897, 897, 897, 897, 897, 897, 897, \n  897, 897, 897, 897, 897, 897, 897, 897, \n  897, 897, 897, 897, 897, 897, 897, 897, \n  897, 897, 897, 897, 897, 897, 897, 1785, \n  1148, 1148, 1146, 1786, 897, 1787, 1146, 897, \n  1146, 1788, 1789, 1790, 1791, 1792, 1793, 1794, \n  1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, \n  1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, \n  1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, \n  1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, \n  1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, \n  1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, \n  1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, \n  1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, \n  1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, \n  1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, \n  1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, \n  1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, \n  1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, \n  1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, \n  1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, \n  1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, \n  1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, \n  1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, \n  1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, \n  1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, \n  1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, \n  1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, \n  1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, \n  1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, \n  1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, \n  1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, \n  2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, \n  2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, \n  2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, \n  2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, \n  2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, \n  2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, \n  2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, \n  2059, 2060, 2061, 2062, 2063, 2064, 2065, 0, \n  0, 2066, 2067, 2068, 2069, 2070, 2071, 0, \n  0, 2072, 2073, 2074, 2075, 2076, 2077, 2078, \n  2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, \n  2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, \n  2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, \n  2103, 2104, 2105, 2106, 2107, 2108, 2109, 0, \n  0, 2110, 2111, 2112, 2113, 2114, 2115, 0, \n  0, 2116, 2117, 2118, 2119, 2120, 2121, 2122, \n  2123, 0, 2124, 0, 2125, 0, 2126, 0, \n  2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, \n  2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, \n  2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, \n  2151, 2152, 2153, 2154, 2155, 2156, 2157, 0, \n  0, 2158, 2159, 2160, 2161, 2162, 2163, 2164, \n  2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, \n  2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, \n  2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, \n  2189, 2190, 2191, 2192, 2193, 2194, 2195, 2196, \n  2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, \n  2205, 2206, 2207, 2208, 2209, 2210, 0, 2211, \n  2212, 2213, 2214, 2215, 2216, 2217, 2218, 2219, \n  2220, 2221, 2222, 2223, 2224, 2225, 0, 2226, \n  2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, \n  2235, 2236, 2237, 2238, 2239, 0, 0, 2240, \n  2241, 2242, 2243, 2244, 2245, 0, 2246, 2247, \n  2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, \n  2256, 2257, 2258, 2259, 2260, 2261, 2262, 2263, \n  2264, 0, 0, 2265, 2266, 2267, 0, 2268, \n  2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, \n  0, 2277, 2278, 2279, 2279, 2279, 2279, 2279, \n  2280, 2279, 2279, 2279, 1509, 2281, 2282, 2283, \n  2284, 2285, 2286, 1145, 2285, 2285, 2285, 76, \n  2287, 2288, 2289, 2290, 2291, 2288, 2289, 2290, \n  2291, 76, 76, 76, 8, 2292, 2293, 2294, \n  76, 2295, 2296, 2297, 2298, 2299, 2300, 2301, \n  75, 2302, 9, 2302, 2303, 2304, 76, 2305, \n  2306, 8, 82, 95, 76, 2307, 8, 2308, \n  47, 47, 8, 8, 8, 2309, 11, 12, \n  2310, 2311, 2312, 8, 8, 8, 8, 8, \n  8, 8, 8, 74, 8, 47, 8, 8, \n  2313, 8, 8, 8, 8, 8, 8, 8, \n  2279, 1509, 1509, 1509, 1509, 1509, 0, 2314, \n  2315, 2316, 2317, 1509, 1509, 1509, 1509, 1509, \n  1509, 2318, 2319, 0, 0, 2320, 2321, 2322, \n  2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, \n  2331, 2332, 2333, 2334, 2335, 2336, 2337, 2338, \n  2339, 2340, 2341, 2342, 2343, 2344, 2345, 2346, \n  0, 2347, 2348, 2349, 2350, 2351, 2352, 2353, \n  2354, 2355, 2356, 2357, 2358, 2359, 0, 0, \n  0, 10, 10, 10, 10, 10, 10, 10, \n  10, 2360, 10, 10, 10, 77, 10, 10, \n  10, 10, 10, 10, 10, 10, 10, 10, \n  10, 10, 10, 10, 10, 10, 10, 10, \n  10, 10, 10, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 897, 897, 1590, 1590, 897, 897, 897, \n  897, 1590, 1590, 1590, 897, 897, 898, 898, \n  898, 898, 897, 898, 898, 898, 1590, 1590, \n  897, 1146, 897, 1590, 1590, 1146, 1146, 1146, \n  1146, 897, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 2361, 2362, 2363, 2364, 78, 2365, 2366, \n  2367, 78, 2368, 2369, 2370, 2371, 2372, 2373, \n  2374, 2375, 2376, 2377, 2378, 78, 2379, 2380, \n  78, 74, 2381, 2382, 2383, 2384, 2385, 78, \n  78, 2386, 2387, 2388, 78, 2389, 78, 2390, \n  78, 2391, 78, 2392, 2393, 2394, 2395, 2396, \n  2397, 2398, 2399, 2400, 2401, 2402, 2403, 2404, \n  2405, 2406, 2407, 78, 2408, 2409, 2410, 2411, \n  2412, 2413, 74, 74, 74, 74, 2414, 2415, \n  2416, 2417, 2418, 78, 74, 78, 78, 2419, \n  896, 2420, 2421, 2422, 2423, 2424, 2425, 2426, \n  2427, 2428, 2429, 2430, 2431, 2432, 2433, 2434, \n  2435, 2436, 2437, 2438, 2439, 2440, 2441, 2442, \n  2443, 2444, 2445, 2446, 2447, 2448, 2449, 2450, \n  2451, 2452, 2453, 2454, 2455, 2456, 2457, 2458, \n  2459, 2460, 2461, 2462, 2463, 2464, 2465, 2466, \n  2467, 1506, 1506, 1506, 2468, 2469, 1506, 1506, \n  1506, 1506, 2470, 78, 78, 0, 0, 0, \n  0, 2471, 122, 2472, 122, 2473, 84, 84, \n  84, 84, 84, 2474, 2475, 78, 78, 78, \n  78, 74, 78, 78, 74, 78, 78, 74, \n  78, 78, 80, 80, 78, 78, 78, 2476, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 2477, 2477, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 2478, 2479, \n  2480, 2481, 78, 2482, 78, 2483, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  2477, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 74, 74, 74, \n  74, 74, 74, 74, 74, 74, 74, 74, \n  74, 122, 2484, 2485, 2486, 2487, 74, 74, \n  122, 2488, 2489, 2484, 2490, 2491, 2484, 74, \n  122, 74, 2485, 13, 2492, 74, 2485, 2484, \n  74, 74, 74, 2485, 2484, 2484, 2485, 122, \n  2485, 2485, 2484, 2484, 2493, 2494, 2495, 2496, \n  122, 122, 122, 122, 2485, 2497, 2498, 2485, \n  2499, 2500, 2484, 2484, 2484, 122, 122, 122, \n  122, 74, 2484, 74, 2484, 2501, 2485, 2484, \n  2484, 2484, 2502, 2484, 2503, 2504, 2505, 2484, \n  2506, 2507, 2508, 2484, 2484, 2485, 2509, 74, \n  74, 74, 74, 2485, 2484, 2484, 2484, 74, \n  74, 74, 74, 74, 74, 74, 74, 74, \n  2484, 2510, 2511, 2512, 74, 2513, 2514, 2485, \n  2485, 2484, 2484, 2485, 2485, 74, 2515, 2516, \n  2517, 2518, 2519, 2520, 2521, 2522, 2523, 2524, \n  2525, 2526, 2527, 2528, 2529, 2530, 2531, 2484, \n  2484, 2532, 2533, 2534, 2535, 2536, 2537, 2538, \n  2539, 2540, 2541, 2484, 2484, 2484, 74, 74, \n  2484, 2484, 2542, 2543, 74, 74, 122, 74, \n  74, 2484, 122, 74, 74, 74, 74, 74, \n  74, 74, 74, 2544, 2484, 74, 122, 2484, \n  2484, 2545, 2546, 2484, 2547, 2548, 2549, 2550, \n  2551, 2484, 2484, 2552, 2553, 2554, 2555, 2484, \n  2484, 2484, 74, 74, 74, 74, 74, 2484, \n  2485, 74, 74, 74, 74, 74, 74, 74, \n  74, 74, 2484, 2484, 2484, 2484, 2484, 74, \n  74, 2484, 2484, 74, 74, 74, 74, 2484, \n  2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, \n  2484, 2556, 2557, 2558, 2559, 2484, 2484, 2484, \n  2484, 2484, 2484, 2560, 2561, 2562, 2563, 74, \n  74, 2484, 2484, 2484, 2484, 2484, 2484, 2484, \n  2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, \n  2484, 78, 78, 78, 78, 78, 78, 78, \n  78, 11, 12, 11, 12, 78, 78, 78, \n  78, 78, 78, 2477, 78, 78, 78, 78, \n  78, 78, 78, 2564, 2564, 78, 78, 78, \n  78, 2484, 2484, 78, 78, 78, 78, 78, \n  78, 80, 2565, 2566, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 78, 74, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 896, 78, \n  78, 78, 78, 78, 74, 74, 74, 74, \n  74, 74, 74, 74, 74, 74, 74, 74, \n  74, 74, 74, 74, 74, 74, 74, 74, \n  74, 74, 74, 74, 74, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  80, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 74, 74, 74, \n  74, 74, 74, 78, 78, 78, 78, 78, \n  78, 78, 2564, 2564, 2564, 2564, 80, 80, \n  80, 2564, 80, 80, 2564, 78, 78, 78, \n  78, 80, 80, 80, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 2567, 2568, 2569, 2570, 2571, 2572, 2573, \n  2574, 2575, 2576, 2577, 2578, 2579, 2580, 2581, \n  2582, 2583, 2584, 2585, 2586, 2587, 2588, 2589, \n  2590, 2591, 2592, 2593, 2594, 2595, 2596, 2597, \n  2598, 2599, 2600, 2601, 2602, 2603, 2604, 2605, \n  2606, 2607, 2608, 2609, 2610, 2611, 2612, 2613, \n  2614, 2615, 2616, 2617, 2618, 2619, 2620, 2621, \n  2622, 2623, 2624, 2625, 2626, 2627, 2628, 2629, \n  2630, 2631, 2632, 2633, 2634, 2635, 2636, 2637, \n  2638, 2639, 2640, 2641, 2642, 2643, 2644, 2645, \n  2646, 2647, 2648, 2649, 2650, 2651, 2652, 2653, \n  2654, 2655, 2656, 2657, 2658, 2659, 2660, 2661, \n  2662, 2663, 2664, 2665, 2666, 2667, 2668, 2669, \n  2670, 2671, 2672, 2673, 2674, 2675, 2676, 2677, \n  2678, 2679, 2680, 2681, 2682, 2683, 2684, 2685, \n  2686, 2687, 2688, 2689, 2690, 2691, 2692, 2693, \n  2694, 2695, 2696, 2697, 2698, 2699, 2700, 2701, \n  2702, 2703, 2704, 2705, 2706, 2706, 2706, 2706, \n  2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, \n  2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, \n  2706, 2477, 2477, 2477, 2477, 2477, 2477, 2477, \n  2477, 2477, 2477, 2477, 2477, 2477, 2477, 2477, \n  2477, 2477, 2477, 2477, 2477, 2477, 2477, 2477, \n  2477, 2477, 2477, 2477, 2477, 2477, 2477, 2477, \n  2477, 2477, 2477, 2477, 2477, 2477, 2477, 2477, \n  2477, 2477, 2477, 2477, 2477, 2477, 2477, 2477, \n  2477, 2477, 2477, 2477, 2477, 2477, 2477, 2477, \n  2477, 2477, 2477, 2477, 2477, 2477, 2477, 2477, \n  2477, 2477, 2477, 2477, 2477, 2477, 2477, 2477, \n  2477, 2477, 2477, 2477, 2477, 78, 78, 78, \n  78, 2477, 2477, 2477, 2477, 2477, 2477, 2477, \n  2477, 2477, 2477, 2477, 2477, 2477, 2477, 2477, \n  2477, 2477, 2477, 2477, 2477, 2477, 2477, 2477, \n  2477, 2477, 2477, 2477, 2477, 2477, 2477, 2477, \n  2477, 2477, 2477, 2477, 2477, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 2477, 2477, 2477, 2477, 2477, 2477, 2477, \n  2477, 2477, 2477, 2477, 2477, 2477, 2477, 2477, \n  2477, 78, 78, 2477, 2477, 2477, 2477, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 2477, 2477, 78, 2477, 2477, 2477, 2477, \n  2477, 2477, 2477, 80, 80, 78, 78, 78, \n  78, 78, 78, 2477, 2477, 78, 78, 84, \n  122, 78, 78, 78, 78, 2477, 2477, 78, \n  78, 84, 122, 78, 78, 78, 78, 2477, \n  2477, 2477, 78, 78, 2477, 78, 78, 2477, \n  2477, 2477, 2477, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 2477, 2477, 2477, 2477, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  2477, 78, 78, 78, 78, 78, 78, 78, \n  78, 74, 74, 74, 2707, 2707, 2708, 2708, \n  74, 80, 80, 80, 80, 80, 2477, 2477, \n  78, 78, 2477, 78, 78, 78, 78, 84, \n  2477, 78, 80, 78, 78, 2564, 2564, 78, \n  78, 80, 78, 78, 78, 2477, 80, 2477, \n  78, 80, 78, 80, 80, 78, 78, 80, \n  78, 78, 78, 80, 78, 78, 78, 80, \n  80, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 80, 80, 80, 78, 78, 78, 78, \n  78, 84, 78, 84, 78, 78, 78, 78, \n  78, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  80, 84, 2477, 78, 84, 2477, 84, 80, \n  2477, 84, 2477, 2477, 78, 2477, 2477, 78, \n  122, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 80, 78, 78, 80, \n  2564, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 2709, 2709, 2709, 2709, 2709, \n  2709, 78, 78, 80, 2564, 80, 80, 80, \n  80, 78, 80, 78, 80, 80, 78, 2477, \n  2477, 80, 2564, 78, 78, 78, 78, 78, \n  80, 78, 78, 2564, 2564, 896, 78, 78, \n  78, 80, 80, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 2564, 2564, \n  2477, 78, 78, 78, 78, 2564, 2564, 2477, \n  2477, 84, 2477, 2477, 2477, 2477, 2477, 2564, \n  84, 2477, 84, 2477, 84, 2564, 2477, 2477, \n  2477, 2477, 2477, 2477, 2477, 2477, 2477, 2477, \n  2477, 2477, 2477, 78, 2477, 78, 78, 78, \n  78, 2477, 84, 2564, 2477, 2477, 2477, 2477, \n  2477, 84, 84, 2564, 2564, 84, 2564, 2477, \n  84, 84, 84, 2564, 2477, 2477, 2564, 2477, \n  2477, 78, 78, 80, 78, 78, 2564, 78, \n  78, 80, 80, 2564, 2564, 80, 80, 78, \n  80, 78, 78, 80, 78, 80, 78, 80, \n  78, 78, 78, 78, 78, 78, 80, 78, \n  78, 78, 80, 78, 78, 78, 78, 78, \n  78, 2564, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 80, 80, 78, 78, \n  78, 78, 78, 78, 78, 78, 2477, 78, \n  78, 78, 78, 78, 78, 80, 78, 78, \n  80, 78, 78, 78, 78, 2564, 78, 2564, \n  78, 78, 78, 78, 2564, 2564, 2564, 78, \n  2564, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 80, 80, 78, 78, \n  78, 11, 12, 11, 12, 11, 12, 11, \n  12, 11, 12, 11, 12, 11, 12, 2706, \n  2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, \n  2706, 1267, 1267, 1267, 1267, 1267, 1267, 1267, \n  1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, \n  1267, 1267, 1267, 1267, 1267, 78, 2564, 2564, \n  2564, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 80, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 2564, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  2564, 2484, 74, 74, 2484, 2484, 11, 12, \n  74, 2484, 2484, 74, 2484, 2484, 2484, 74, \n  74, 74, 74, 74, 2484, 2484, 2484, 2484, \n  74, 74, 74, 74, 74, 2484, 2484, 2484, \n  74, 74, 74, 2484, 2484, 2484, 2484, 11, \n  12, 11, 12, 11, 12, 11, 12, 11, \n  12, 74, 74, 74, 74, 74, 74, 74, \n  74, 74, 74, 74, 74, 74, 74, 74, \n  74, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 74, 74, 74, 74, 74, 74, 74, \n  74, 74, 74, 74, 74, 74, 74, 74, \n  74, 74, 74, 74, 74, 74, 74, 74, \n  74, 74, 74, 74, 74, 74, 74, 74, \n  74, 74, 74, 74, 74, 74, 74, 74, \n  74, 74, 74, 74, 74, 74, 74, 74, \n  74, 74, 74, 74, 74, 2707, 2707, 74, \n  74, 74, 74, 74, 74, 74, 74, 74, \n  74, 74, 74, 74, 74, 74, 74, 74, \n  74, 74, 74, 74, 74, 74, 74, 74, \n  74, 74, 74, 74, 74, 74, 74, 74, \n  74, 74, 74, 74, 74, 74, 74, 74, \n  74, 74, 74, 74, 74, 74, 74, 74, \n  74, 74, 74, 74, 74, 74, 74, 74, \n  74, 74, 74, 74, 74, 74, 74, 74, \n  74, 74, 74, 74, 74, 74, 74, 74, \n  74, 74, 74, 74, 11, 12, 11, 12, \n  11, 12, 11, 12, 11, 12, 11, 12, \n  11, 12, 11, 12, 11, 12, 11, 12, \n  11, 12, 74, 74, 2484, 2484, 2484, 2484, \n  2484, 2484, 74, 2484, 2484, 2484, 2484, 2484, \n  2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, \n  2484, 74, 74, 74, 74, 74, 74, 74, \n  74, 2484, 74, 74, 74, 74, 74, 74, \n  74, 2484, 2484, 2484, 2484, 2484, 2484, 74, \n  74, 74, 2484, 74, 74, 74, 74, 2484, \n  2484, 2484, 2484, 2484, 74, 2484, 2484, 74, \n  74, 11, 12, 11, 12, 2484, 74, 74, \n  74, 74, 2484, 74, 2484, 2484, 2484, 74, \n  74, 2484, 2484, 74, 74, 74, 74, 74, \n  74, 74, 74, 74, 74, 2484, 2484, 2484, \n  2484, 2484, 2484, 74, 74, 11, 12, 74, \n  74, 74, 74, 74, 74, 74, 74, 74, \n  74, 74, 74, 2484, 2484, 2710, 2484, 2484, \n  2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, \n  2484, 2484, 2484, 2484, 2484, 2484, 74, 2484, \n  2484, 2484, 2484, 74, 74, 2484, 74, 2484, \n  74, 74, 2484, 74, 2484, 2484, 2484, 2484, \n  74, 74, 74, 74, 74, 2484, 2484, 74, \n  74, 74, 74, 74, 74, 2484, 2484, 2484, \n  74, 74, 74, 74, 74, 74, 74, 74, \n  74, 74, 74, 74, 74, 74, 74, 74, \n  74, 74, 74, 74, 74, 74, 74, 74, \n  2484, 2484, 74, 74, 74, 74, 74, 74, \n  74, 74, 74, 74, 74, 2484, 2484, 74, \n  74, 74, 74, 2484, 2484, 2484, 2484, 74, \n  2484, 2484, 74, 74, 2484, 2711, 2712, 2713, \n  74, 74, 2484, 2484, 2484, 2484, 2484, 2484, \n  2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, \n  2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, \n  2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, \n  2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, \n  2484, 2484, 2484, 2484, 2484, 74, 74, 2484, \n  2484, 2484, 2484, 2484, 2484, 2484, 2484, 74, \n  2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, \n  2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, \n  2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, \n  2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, \n  2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484, \n  74, 74, 74, 74, 74, 2714, 74, 2484, \n  74, 74, 74, 2484, 2484, 2484, 2484, 2484, \n  74, 74, 74, 74, 74, 2484, 2484, 2484, \n  74, 74, 74, 74, 2484, 74, 74, 74, \n  2484, 2484, 2484, 2484, 2484, 74, 2484, 74, \n  74, 78, 78, 78, 78, 78, 80, 80, \n  80, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 2564, 2564, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 74, 74, 74, 74, 74, 74, 74, \n  74, 74, 74, 74, 74, 74, 74, 74, \n  74, 74, 74, 74, 74, 74, 78, 78, \n  74, 74, 74, 74, 74, 74, 78, 78, \n  78, 2564, 78, 78, 78, 78, 2564, 2477, \n  2477, 2477, 2477, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 0, 0, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 2715, \n  78, 2716, 2717, 2718, 2719, 2720, 2721, 2722, \n  2723, 2724, 2725, 2726, 2727, 2728, 2729, 2730, \n  2731, 2732, 2733, 2734, 2735, 2736, 2737, 2738, \n  2739, 2740, 2741, 2742, 2743, 2744, 2745, 2746, \n  2747, 2748, 2749, 2750, 2751, 2752, 2753, 2754, \n  2755, 2756, 2757, 2758, 2759, 2760, 2761, 2762, \n  2763, 2764, 2765, 2766, 2767, 2768, 2769, 2770, \n  2771, 2772, 2773, 2774, 2775, 2776, 2777, 2778, \n  2779, 2780, 2781, 2782, 2783, 2784, 2785, 2786, \n  2787, 2788, 2789, 2790, 2791, 2792, 2793, 2794, \n  2795, 2796, 2797, 2798, 2799, 2800, 2801, 2802, \n  2803, 2804, 2805, 2806, 2807, 2808, 2809, 2810, \n  2811, 2812, 2813, 2814, 2815, 2816, 2817, 2818, \n  2819, 2820, 2821, 2822, 2823, 2824, 2825, 2826, \n  2827, 2828, 2829, 2830, 2831, 2832, 2833, 2834, \n  2835, 2836, 2837, 2838, 2839, 2840, 2841, 2842, \n  2843, 2844, 2845, 2846, 2847, 2848, 2849, 2850, \n  2851, 2852, 2853, 2854, 2855, 2856, 2857, 2858, \n  2859, 2860, 2861, 2862, 2863, 2864, 2865, 2866, \n  2867, 2868, 2869, 2870, 2871, 2872, 2873, 2874, \n  2875, 2876, 2877, 2878, 2879, 2880, 2881, 2882, \n  2883, 2884, 2885, 2886, 2887, 2888, 2889, 2890, \n  2891, 2892, 2893, 2894, 2895, 2896, 2897, 2898, \n  2899, 2900, 2901, 2902, 2903, 2904, 2905, 2906, \n  2907, 2908, 2909, 2910, 2911, 2912, 2913, 2914, \n  2915, 2916, 2917, 2918, 2919, 2920, 2921, 2922, \n  2923, 2924, 2925, 2926, 2927, 2928, 2929, 2930, \n  2931, 2932, 2933, 2934, 2935, 2936, 2937, 2938, \n  2939, 2940, 2941, 2942, 2943, 2944, 78, 78, \n  78, 78, 78, 78, 2945, 2946, 2947, 2948, \n  897, 897, 897, 2949, 2950, 0, 0, 0, \n  0, 0, 8, 8, 8, 8, 1267, 8, \n  8, 2951, 2952, 2953, 2954, 2955, 2956, 2957, \n  2958, 2959, 2960, 2961, 2962, 2963, 2964, 2965, \n  2966, 2967, 2968, 2969, 2970, 2971, 2972, 2973, \n  2974, 2975, 2976, 2977, 2978, 2979, 2980, 2981, \n  2982, 2983, 2984, 2985, 2986, 2987, 2988, 0, \n  2989, 0, 0, 0, 0, 0, 2990, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 0, 0, 0, 0, 0, 0, 0, \n  2991, 1103, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  1244, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  0, 897, 897, 897, 897, 897, 897, 897, \n  897, 897, 897, 897, 897, 897, 897, 897, \n  897, 897, 897, 897, 897, 897, 897, 897, \n  897, 897, 897, 897, 897, 897, 897, 897, \n  897, 8, 8, 82, 95, 82, 95, 8, \n  8, 8, 82, 95, 8, 82, 95, 8, \n  8, 8, 8, 8, 8, 8, 8, 8, \n  1145, 8, 8, 1145, 8, 82, 95, 8, \n  8, 82, 95, 11, 12, 11, 12, 11, \n  12, 11, 12, 8, 8, 8, 8, 8, \n  597, 8, 8, 8, 8, 8, 8, 8, \n  8, 8, 8, 1145, 1145, 8, 8, 8, \n  8, 1145, 8, 2290, 8, 8, 8, 8, \n  8, 8, 8, 8, 8, 8, 8, 8, \n  8, 78, 78, 8, 8, 8, 11, 12, \n  11, 12, 11, 12, 11, 12, 1145, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 0, 2709, 2709, 2709, 2709, \n  2992, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2993, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 2994, 2995, 2996, 2997, 2998, 2999, 3000, \n  3001, 3002, 3003, 3004, 3005, 3006, 3007, 3008, \n  3009, 3010, 3011, 3012, 3013, 3014, 3015, 3016, \n  3017, 3018, 3019, 3020, 3021, 3022, 3023, 3024, \n  3025, 3026, 3027, 3028, 3029, 3030, 3031, 3032, \n  3033, 3034, 3035, 3036, 3037, 3038, 3039, 3040, \n  3041, 3042, 3043, 3044, 3045, 3046, 3047, 3048, \n  3049, 3050, 3051, 3052, 3053, 3054, 3055, 3056, \n  3057, 3058, 3059, 3060, 3061, 3062, 3063, 3064, \n  3065, 3066, 3067, 3068, 3069, 3070, 3071, 3072, \n  3073, 3074, 3075, 3076, 3077, 3078, 3079, 3080, \n  3081, 3082, 3083, 3084, 3085, 3086, 3087, 3088, \n  3089, 3090, 3091, 3092, 3093, 3094, 3095, 3096, \n  3097, 3098, 3099, 3100, 3101, 3102, 3103, 3104, \n  3105, 3106, 3107, 3108, 3109, 3110, 3111, 3112, \n  3113, 3114, 3115, 3116, 3117, 3118, 3119, 3120, \n  3121, 3122, 3123, 3124, 3125, 3126, 3127, 3128, \n  3129, 3130, 3131, 3132, 3133, 3134, 3135, 3136, \n  3137, 3138, 3139, 3140, 3141, 3142, 3143, 3144, \n  3145, 3146, 3147, 3148, 3149, 3150, 3151, 3152, \n  3153, 3154, 3155, 3156, 3157, 3158, 3159, 3160, \n  3161, 3162, 3163, 3164, 3165, 3166, 3167, 3168, \n  3169, 3170, 3171, 3172, 3173, 3174, 3175, 3176, \n  3177, 3178, 3179, 3180, 3181, 3182, 3183, 3184, \n  3185, 3186, 3187, 3188, 3189, 3190, 3191, 3192, \n  3193, 3194, 3195, 3196, 3197, 3198, 3199, 3200, \n  3201, 3202, 3203, 3204, 3205, 3206, 3207, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 3208, 3209, 3209, 3209, 2709, 3210, 3211, \n  3212, 3213, 3214, 3213, 3214, 3213, 3214, 3213, \n  3214, 3213, 3214, 2709, 2709, 3213, 3214, 3213, \n  3214, 3213, 3214, 3213, 3214, 3215, 3216, 3217, \n  3217, 2709, 3212, 3212, 3212, 3212, 3212, 3212, \n  3212, 3212, 3212, 1786, 1148, 1785, 1147, 3218, \n  3218, 3219, 3210, 3210, 3210, 3210, 3210, 3220, \n  2709, 3221, 3222, 3223, 3210, 3211, 3224, 2709, \n  78, 0, 3211, 3211, 3211, 3211, 3211, 3225, \n  3211, 3211, 3211, 3211, 3226, 3227, 3228, 3229, \n  3230, 3231, 3232, 3233, 3234, 3235, 3236, 3237, \n  3238, 3239, 3240, 3241, 3242, 3243, 3244, 3245, \n  3246, 3247, 3248, 3249, 3211, 3250, 3251, 3252, \n  3253, 3254, 3255, 3211, 3211, 3211, 3211, 3211, \n  3256, 3257, 3258, 3259, 3260, 3261, 3262, 3263, \n  3264, 3265, 3266, 3267, 3268, 3269, 3270, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3271, 3211, 3211, \n  0, 0, 3272, 3272, 3273, 3274, 3275, 3276, \n  3277, 3215, 3211, 3211, 3211, 3211, 3211, 3278, \n  3211, 3211, 3211, 3211, 3279, 3280, 3281, 3282, \n  3283, 3284, 3285, 3286, 3287, 3288, 3289, 3290, \n  3291, 3292, 3293, 3294, 3295, 3296, 3297, 3298, \n  3299, 3300, 3301, 3302, 3211, 3303, 3304, 3305, \n  3306, 3307, 3308, 3211, 3211, 3211, 3211, 3211, \n  3309, 3310, 3311, 3312, 3313, 3314, 3315, 3316, \n  3317, 3318, 3319, 3320, 3321, 3322, 3323, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3324, 3325, 3326, 3327, 3211, 3328, 3211, 3211, \n  3329, 3330, 3331, 3332, 3209, 3210, 3333, 3334, \n  3335, 0, 0, 0, 0, 0, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 0, 3336, 3337, 3338, 3339, 3340, 3341, \n  3342, 3343, 3344, 3345, 3346, 3347, 3348, 3349, \n  3350, 3351, 3352, 3353, 3354, 3355, 3356, 3357, \n  3358, 3359, 3360, 3361, 3362, 3363, 3364, 3365, \n  3366, 3367, 3368, 3369, 3370, 3371, 3372, 3373, \n  3374, 3375, 3376, 3377, 3378, 3379, 3380, 3381, \n  3382, 3383, 3384, 3385, 3386, 3387, 3388, 3389, \n  3390, 3391, 3392, 3393, 3394, 3395, 3396, 3397, \n  3398, 3399, 3400, 3401, 3402, 3403, 3404, 3405, \n  3406, 3407, 3408, 3409, 3410, 3411, 3412, 3413, \n  3414, 3415, 3416, 3417, 3418, 3419, 3420, 3421, \n  3422, 3423, 3424, 3425, 3426, 3427, 3428, 3429, \n  0, 3430, 3430, 3431, 3432, 3433, 3434, 3435, \n  3436, 3437, 3438, 3439, 3440, 3441, 3442, 3443, \n  3444, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  2709, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3445, 3446, 3447, 3448, 3449, 3450, 3451, \n  3452, 3453, 3454, 3455, 3456, 3457, 3458, 3459, \n  3460, 3461, 3462, 3463, 3464, 3465, 3466, 3467, \n  3468, 3469, 3470, 3471, 3472, 3473, 3474, 3475, \n  0, 3476, 3477, 3478, 3479, 3480, 3481, 3482, \n  3483, 3484, 3485, 3486, 3487, 3488, 3489, 3490, \n  3491, 3492, 3493, 3494, 3495, 3496, 3497, 3498, \n  3499, 3500, 3501, 3502, 3503, 3504, 3505, 3506, \n  3507, 3508, 3509, 3510, 3511, 3512, 3513, 3514, \n  3515, 3516, 3516, 3516, 3516, 3516, 3516, 3516, \n  3516, 3517, 3518, 3519, 3520, 3521, 3522, 3523, \n  3524, 3525, 3526, 3527, 3528, 3529, 3530, 3531, \n  3532, 3533, 3534, 3535, 3536, 3537, 3538, 3539, \n  3540, 3541, 3542, 3543, 3544, 3545, 3546, 3547, \n  3548, 3549, 3550, 3551, 3552, 3553, 3554, 3555, \n  3556, 3557, 3558, 3559, 3560, 3561, 3562, 3563, \n  3430, 3564, 3565, 3566, 3567, 3568, 3569, 3570, \n  3571, 3572, 3573, 3574, 3575, 3576, 3577, 3578, \n  3579, 3580, 3581, 3582, 3583, 3584, 3585, 3586, \n  3587, 3588, 3589, 3590, 3591, 3592, 3593, 3594, \n  3595, 3596, 3597, 3598, 3599, 3600, 3601, 3602, \n  3603, 3604, 3605, 3606, 3607, 3608, 3609, 3610, \n  3611, 3612, 3613, 3614, 3615, 3616, 3617, 3618, \n  3619, 3620, 3621, 3622, 3623, 3624, 3625, 3626, \n  3627, 3628, 3629, 3630, 3631, 3632, 3633, 3634, \n  3635, 3636, 3637, 3638, 3639, 3640, 3641, 3642, \n  3643, 3644, 3645, 3646, 3647, 3648, 3649, 3650, \n  3651, 3652, 3653, 3654, 3655, 3656, 3657, 3658, \n  3659, 3660, 3661, 3662, 3663, 3664, 3665, 3666, \n  3667, 3668, 3669, 3670, 3671, 3672, 3673, 3674, \n  3675, 3676, 3677, 3678, 3679, 3680, 3681, 3682, \n  3683, 3684, 3685, 3686, 3687, 3688, 3689, 3690, \n  3691, 3692, 3693, 3694, 3695, 3696, 3697, 3698, \n  3699, 3700, 3701, 3702, 3703, 3704, 3705, 3706, \n  3707, 3708, 3709, 3710, 3711, 3712, 3713, 3714, \n  3715, 3716, 3717, 3718, 3719, 3720, 3721, 3722, \n  3723, 3724, 3725, 3726, 3727, 3728, 3729, 3730, \n  3731, 3732, 3733, 3734, 3735, 3736, 3737, 3738, \n  3739, 3740, 3741, 3742, 3743, 3744, 3745, 3746, \n  3747, 3748, 3749, 3750, 3751, 3752, 3753, 3754, \n  3755, 3756, 3757, 3758, 3759, 3760, 3761, 3762, \n  3763, 3764, 3765, 3766, 3767, 3768, 3769, 3770, \n  3771, 3772, 3773, 3774, 3775, 3776, 3777, 3778, \n  3779, 3780, 3781, 3782, 3783, 3784, 3785, 3786, \n  3787, 3788, 3789, 3790, 3791, 3792, 3793, 3794, \n  3795, 3796, 3797, 3798, 3799, 3800, 3801, 3802, \n  3803, 3804, 3805, 3806, 3807, 3808, 3809, 3810, \n  3811, 3812, 3813, 3814, 3815, 3816, 3817, 3818, \n  3819, 3820, 3821, 3822, 3823, 3824, 3825, 3826, \n  3827, 3828, 3829, 3830, 3831, 3832, 3833, 3834, \n  3835, 3836, 3837, 3838, 3839, 3840, 3841, 3842, \n  3843, 3844, 3845, 3846, 3847, 3848, 3849, 3850, \n  3851, 3852, 3853, 3854, 3855, 3856, 3857, 3858, \n  3859, 3860, 3861, 3862, 3863, 3864, 3865, 3866, \n  3867, 3868, 3869, 3870, 3871, 3872, 3873, 3874, \n  3875, 3876, 3877, 3878, 3879, 3880, 3881, 3882, \n  3883, 3884, 3885, 3886, 3887, 3888, 3889, 3890, \n  3891, 3892, 3893, 3894, 3895, 3896, 3897, 3898, \n  3899, 3900, 3901, 3902, 3903, 3904, 3905, 3906, \n  3907, 3908, 3909, 3910, 3911, 3912, 3913, 3914, \n  3915, 3916, 3917, 3918, 3919, 3920, 3921, 3922, \n  3923, 3924, 3925, 3926, 3927, 3928, 3929, 3930, \n  3931, 3932, 3933, 3934, 3935, 3936, 3937, 3938, \n  3939, 3940, 3941, 3942, 3943, 3944, 3945, 3946, \n  3947, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3210, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 0, 0, \n  0, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 598, 598, 598, 598, 598, 598, 1103, \n  1103, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 598, 8, 8, \n  8, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 349, 349, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 3948, 3949, 3950, 3951, 3952, 3953, 3954, \n  3955, 3956, 3957, 3958, 3959, 3960, 3961, 3962, \n  3963, 3964, 3965, 3966, 3967, 3968, 3969, 3970, \n  3971, 3972, 3973, 3974, 3975, 3976, 3977, 3978, \n  3979, 3980, 3981, 3982, 3983, 3984, 3985, 3986, \n  3987, 3988, 3989, 3990, 3991, 3992, 3993, 349, \n  897, 898, 898, 898, 8, 897, 897, 897, \n  897, 897, 897, 897, 897, 897, 897, 8, \n  597, 3994, 3995, 3996, 3997, 3998, 3999, 4000, \n  4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008, \n  4009, 4010, 4011, 4012, 4013, 4014, 4015, 4016, \n  4017, 4018, 4019, 4020, 4021, 4022, 4023, 897, \n  897, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 1506, \n  1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, \n  1506, 897, 897, 1103, 1103, 1103, 1103, 1103, \n  1103, 0, 0, 0, 0, 0, 0, 0, \n  0, 46, 46, 46, 46, 46, 46, 46, \n  46, 46, 46, 46, 46, 46, 46, 46, \n  46, 46, 46, 46, 46, 46, 46, 46, \n  597, 597, 597, 597, 597, 597, 597, 597, \n  597, 46, 46, 4024, 4025, 4026, 4027, 4028, \n  4029, 4030, 4031, 4032, 4033, 4034, 4035, 4036, \n  4037, 4038, 4039, 4040, 4041, 4042, 4043, 4044, \n  4045, 4046, 4047, 4048, 4049, 4050, 4051, 4052, \n  4053, 4054, 4055, 4056, 4057, 4058, 4059, 4060, \n  4061, 4062, 4063, 4064, 4065, 4066, 4067, 4068, \n  4069, 4070, 4071, 4072, 4073, 4074, 4075, 4076, \n  4077, 4078, 4079, 4080, 4081, 4082, 4083, 4084, \n  4085, 4086, 4087, 4088, 4089, 4090, 4091, 4092, \n  4093, 4094, 4095, 4096, 4097, 4098, 4099, 4100, \n  4101, 4102, 4103, 4104, 4105, 4106, 4107, 4108, \n  4109, 4110, 4111, 4112, 4113, 4114, 4115, 4116, \n  4117, 4118, 4119, 4120, 4121, 4122, 4123, 4124, \n  4125, 597, 4126, 4126, 4127, 4128, 4129, 4130, \n  349, 4131, 4132, 4133, 4134, 4135, 4136, 4137, \n  4138, 4139, 4140, 4141, 4142, 4143, 4144, 4145, \n  4146, 4147, 4148, 4149, 4150, 4151, 4152, 4153, \n  4154, 4155, 4156, 4157, 4158, 4159, 4160, 4161, \n  4162, 4163, 4164, 4165, 4166, 4167, 4168, 4169, \n  4170, 4171, 4172, 4173, 4174, 4175, 4176, 4177, \n  4178, 4179, 4180, 4181, 4182, 4183, 4184, 4185, \n  4186, 4187, 4188, 4189, 4190, 4191, 4192, 4193, \n  4194, 4195, 4196, 4197, 4198, 4199, 4200, 4201, \n  4202, 4203, 4204, 4205, 4206, 4207, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 4208, 4209, 4210, 4211, 4212, 4213, \n  349, 4214, 4215, 4216, 349, 349, 349, 349, \n  349, 349, 349, 1209, 349, 349, 349, 1244, \n  349, 349, 349, 349, 1209, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 1214, 1214, 1209, 1209, \n  1214, 78, 78, 78, 78, 1244, 0, 0, \n  0, 1241, 1241, 1241, 1241, 1241, 1241, 896, \n  896, 10, 2396, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 8, 8, 8, \n  8, 0, 0, 0, 0, 0, 0, 0, \n  0, 1214, 1214, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 1214, 1214, 1214, \n  1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, \n  1214, 1214, 1214, 1214, 1214, 1244, 1209, 0, \n  0, 0, 0, 0, 0, 0, 0, 1103, \n  1103, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 0, 0, 0, 0, 0, \n  0, 897, 897, 897, 897, 897, 897, 897, \n  897, 897, 897, 897, 897, 897, 897, 897, \n  897, 897, 897, 349, 349, 349, 349, 349, \n  349, 1103, 1103, 1103, 349, 1103, 349, 349, \n  1209, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 1209, \n  1209, 1209, 1209, 1209, 1146, 1146, 1146, 1103, \n  1103, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, \n  1209, 1209, 1209, 1214, 1507, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  1103, 1409, 1409, 1409, 1409, 1409, 1409, 1409, \n  1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, \n  1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, \n  1409, 1409, 1409, 1409, 1409, 1409, 0, 0, \n  0, 1209, 1209, 1209, 1214, 349, 349, 349, \n  349, 349, 1215, 1215, 1215, 349, 349, 349, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1233, 1214, 1214, 1209, \n  1209, 1209, 1209, 1214, 1214, 1209, 1209, 1214, \n  1214, 1533, 1103, 1103, 1103, 1103, 1103, 1103, \n  1103, 1103, 1103, 1103, 1103, 1103, 1103, 0, \n  598, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 0, 0, 0, 0, 1103, \n  1103, 1215, 1215, 1215, 1215, 1215, 1209, 598, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 1215, 1215, 1215, 1215, 1215, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 1209, 1209, 1209, 1209, 1209, 1209, \n  1214, 1214, 1209, 1209, 1214, 1214, 1209, 1209, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 1209, 349, 349, 349, \n  349, 349, 349, 349, 349, 1209, 1214, 0, \n  0, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 0, 0, 1103, 1103, 1103, \n  1103, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 598, 1215, 1215, 1215, 349, 349, 349, \n  896, 896, 896, 1215, 1321, 1209, 1321, 1215, \n  1215, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 897, 349, 897, 897, 1146, 349, 349, \n  897, 897, 349, 349, 349, 349, 349, 897, \n  897, 349, 897, 349, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 349, 349, 598, 1103, \n  1103, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1214, 1209, 1209, 1214, \n  1214, 1103, 1103, 349, 598, 598, 1214, 1223, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 349, 349, 349, 349, 349, 349, \n  0, 0, 349, 349, 349, 349, 349, 349, \n  0, 0, 349, 349, 349, 349, 349, 349, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  0, 4217, 4218, 4219, 4220, 4221, 4222, 4223, \n  4224, 4225, 4226, 4227, 4228, 4229, 4230, 4231, \n  4232, 4233, 4234, 4235, 4236, 4237, 4238, 4239, \n  4240, 4241, 4242, 4243, 4244, 4245, 4246, 4247, \n  4248, 4249, 4250, 4251, 4252, 4253, 4254, 4255, \n  4256, 4257, 4258, 4259, 4126, 4260, 4261, 4262, \n  4263, 4264, 4265, 4266, 4267, 4268, 4269, 4270, \n  4271, 4272, 4273, 46, 46, 0, 0, 0, \n  0, 4274, 4275, 4276, 4277, 4278, 4279, 4280, \n  4281, 4282, 4283, 4284, 4285, 4286, 4287, 4288, \n  4289, 4290, 4291, 4292, 4293, 4294, 4295, 4296, \n  4297, 4298, 4299, 4300, 4301, 4302, 4303, 4304, \n  4305, 4306, 4307, 4308, 4309, 4310, 4311, 4312, \n  4313, 4314, 4315, 4316, 4317, 4318, 4319, 4320, \n  4321, 4322, 4323, 4324, 4325, 4326, 4327, 4328, \n  4329, 4330, 4331, 4332, 4333, 4334, 4335, 4336, \n  4337, 4338, 4339, 4340, 4341, 4342, 4343, 4344, \n  4345, 4346, 4347, 4348, 4349, 4350, 4351, 4352, \n  4353, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 349, 349, 349, 349, \n  349, 349, 349, 349, 1214, 1214, 1209, 1214, \n  1214, 1209, 1214, 1214, 1103, 1214, 1244, 0, \n  0, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 0, 0, 0, 0, 0, \n  0, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4354, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4354, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 4355, 4355, 4355, \n  4355, 4355, 4355, 4355, 4355, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 1412, 1412, 1412, 1412, 1412, 1412, 1412, \n  1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, \n  1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, \n  0, 0, 0, 0, 1413, 1413, 1413, 1413, \n  1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, \n  1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, \n  1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, \n  1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, \n  1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, \n  1413, 1413, 1413, 1413, 1413, 0, 0, 0, \n  0, 4356, 4356, 4356, 4356, 4356, 4356, 4356, \n  4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, \n  4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, \n  4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, \n  4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, \n  4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, \n  4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, \n  4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, \n  4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, \n  4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, \n  4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, \n  4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, \n  4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, \n  4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, \n  4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, \n  4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, \n  4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, \n  4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, \n  4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, \n  4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, \n  4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, \n  4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, \n  4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, \n  4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, \n  4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, \n  4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, \n  4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, \n  4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, \n  4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, \n  4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, \n  4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, \n  4356, 4356, 4356, 4356, 4356, 4356, 4356, 4356, \n  4356, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4358, 4359, 4360, 4361, 4362, 4363, 4364, \n  4365, 4365, 4366, 4367, 4368, 4369, 4370, 4371, \n  4372, 4373, 4374, 4375, 4376, 4377, 4378, 4379, \n  4380, 4381, 4382, 4383, 4384, 4385, 4386, 4387, \n  4388, 4389, 4390, 4391, 4392, 4393, 4394, 4395, \n  4396, 4397, 4398, 4399, 4400, 4401, 4402, 4403, \n  4404, 4405, 4406, 4407, 4408, 4409, 4410, 4411, \n  4412, 4413, 4414, 4415, 4416, 4417, 4418, 4419, \n  4420, 4421, 4422, 4423, 4424, 4425, 4426, 4427, \n  4428, 4429, 4430, 4431, 4432, 4433, 4434, 4435, \n  4436, 4437, 4438, 4439, 4440, 4441, 4442, 4443, \n  4444, 4445, 4446, 4447, 4448, 4377, 4449, 4450, \n  4451, 4452, 4453, 4454, 4455, 4456, 4457, 4458, \n  4459, 4460, 4461, 4462, 4463, 4464, 4465, 4466, \n  4467, 4468, 4469, 4470, 4471, 4472, 4473, 4474, \n  4475, 4476, 4477, 4478, 4479, 4480, 4481, 4482, \n  4483, 4484, 4485, 4486, 4487, 4488, 4489, 4490, \n  4491, 4492, 4493, 4494, 4495, 4496, 4497, 4498, \n  4499, 4500, 4501, 4502, 4503, 4504, 4505, 4506, \n  4507, 4508, 4509, 4510, 4511, 4512, 4513, 4514, \n  4515, 4516, 4467, 4517, 4518, 4519, 4520, 4521, \n  4522, 4523, 4524, 4451, 4525, 4526, 4527, 4528, \n  4529, 4530, 4531, 4532, 4533, 4534, 4535, 4536, \n  4537, 4538, 4539, 4540, 4541, 4542, 4543, 4544, \n  4377, 4545, 4546, 4547, 4548, 4549, 4550, 4551, \n  4552, 4553, 4554, 4555, 4556, 4557, 4558, 4559, \n  4560, 4561, 4562, 4563, 4564, 4565, 4566, 4567, \n  4568, 4569, 4570, 4571, 4453, 4572, 4573, 4574, \n  4575, 4576, 4577, 4578, 4579, 4580, 4581, 4582, \n  4583, 4584, 4585, 4586, 4587, 4588, 4589, 4590, \n  4591, 4592, 4593, 4594, 4595, 4596, 4597, 4598, \n  4599, 4600, 4601, 4602, 4603, 4604, 4605, 4606, \n  4607, 4608, 4609, 4610, 4611, 4612, 4613, 4614, \n  4615, 4616, 4617, 4618, 4619, 4620, 4621, 3211, \n  3211, 4622, 3211, 4623, 3211, 3211, 4624, 4625, \n  4626, 4627, 4628, 4629, 4630, 4631, 4632, 4633, \n  3211, 4634, 3211, 4635, 3211, 3211, 4636, 4637, \n  3211, 3211, 3211, 4638, 4639, 4640, 4641, 4642, \n  4643, 4644, 4645, 4646, 4647, 4648, 4649, 4650, \n  4651, 4652, 4653, 4654, 4655, 4656, 4657, 4658, \n  4659, 4660, 4661, 4662, 4663, 4664, 4665, 4666, \n  4667, 4668, 4669, 4670, 4671, 4672, 4673, 4674, \n  4675, 4676, 4677, 4678, 4679, 4680, 4681, 4682, \n  4506, 4683, 4684, 4685, 4686, 4687, 4688, 4688, \n  4689, 4690, 4691, 4692, 4693, 4694, 4695, 4696, \n  4636, 4697, 4698, 4699, 4700, 4701, 4702, 0, \n  0, 4703, 4704, 4705, 4706, 4707, 4708, 4709, \n  4710, 4650, 4711, 4712, 4713, 4622, 4714, 4715, \n  4716, 4717, 4718, 4719, 4720, 4721, 4722, 4723, \n  4724, 4725, 4659, 4726, 4660, 4727, 4728, 4729, \n  4730, 4731, 4623, 4398, 4732, 4733, 4734, 4468, \n  4555, 4735, 4736, 4667, 4737, 4668, 4738, 4739, \n  4740, 4625, 4741, 4742, 4743, 4744, 4745, 4626, \n  4746, 4747, 4748, 4749, 4750, 4751, 4682, 4752, \n  4753, 4506, 4754, 4686, 4755, 4756, 4757, 4758, \n  4759, 4691, 4760, 4635, 4761, 4692, 4449, 4762, \n  4693, 4763, 4695, 4764, 4765, 4766, 4767, 4768, \n  4697, 4631, 4769, 4698, 4770, 4699, 4771, 4365, \n  4772, 4773, 4774, 4775, 4776, 4777, 4778, 4779, \n  4780, 4781, 4782, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 4783, 4784, 4785, 4786, 4787, 4788, 4789, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 4790, 4791, 4792, 4793, \n  4794, 0, 0, 0, 0, 0, 4795, 4796, \n  4797, 4798, 4799, 4800, 4801, 4802, 4803, 4804, \n  4805, 4806, 4807, 4808, 4809, 4810, 4811, 4812, \n  4813, 4814, 4815, 4816, 4817, 4818, 4819, 4820, \n  0, 4821, 4822, 4823, 4824, 4825, 0, 4826, \n  0, 4827, 4828, 0, 4829, 4830, 0, 4831, \n  4832, 4833, 4834, 4835, 4836, 4837, 4838, 4839, \n  4840, 4841, 4842, 4843, 4844, 4845, 4846, 4847, \n  4848, 4849, 4850, 4851, 4852, 4853, 4854, 4855, \n  4856, 4857, 4858, 4859, 4860, 4861, 4862, 4863, \n  4864, 4865, 4866, 4867, 4868, 4869, 4870, 4871, \n  4872, 4873, 4874, 4875, 4876, 4877, 4878, 4879, \n  4880, 4881, 4882, 4883, 4884, 4885, 4886, 4887, \n  4888, 4889, 4890, 4891, 4892, 4893, 4894, 4895, \n  4896, 4897, 4898, 4899, 4900, 4901, 4902, 4903, \n  4904, 4905, 4906, 4907, 4908, 4909, 4910, 4911, \n  4912, 4913, 4914, 4915, 4916, 4917, 4918, 4919, \n  4920, 4921, 4922, 4923, 4924, 4925, 4926, 4927, \n  4928, 4929, 4930, 4931, 4932, 4933, 4934, 4935, \n  4936, 4937, 4938, 1213, 1213, 1213, 1213, 1213, \n  1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, \n  1213, 1213, 1213, 1213, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 4939, 4940, 4941, 4942, \n  4943, 4944, 4945, 4946, 4947, 4948, 4949, 4950, \n  4951, 4952, 4953, 4954, 4955, 4956, 4957, 4958, \n  4959, 4960, 4961, 4962, 4963, 4964, 4965, 4966, \n  4967, 4968, 4969, 4970, 4971, 4972, 4973, 4974, \n  4975, 4976, 4977, 4978, 4979, 4980, 4981, 4982, \n  4983, 4984, 4985, 4986, 4977, 4987, 4988, 4989, \n  4990, 4991, 4992, 4993, 4994, 4995, 4996, 4997, \n  4998, 4999, 5000, 5001, 5002, 5003, 5004, 5005, \n  5006, 5007, 5008, 5009, 5010, 5011, 5012, 5013, \n  5014, 5015, 5016, 5017, 5018, 5019, 5020, 5021, \n  5022, 5023, 5024, 5025, 5026, 5027, 5028, 5029, \n  5030, 5031, 5032, 5033, 5034, 5035, 5036, 5037, \n  5038, 5039, 5040, 5041, 5042, 5043, 5044, 5045, \n  5046, 5047, 5048, 5049, 5050, 5051, 5052, 5053, \n  5054, 5055, 5056, 5057, 5058, 5059, 5060, 5061, \n  5062, 5063, 5064, 5065, 5066, 5067, 5068, 5069, \n  5070, 5071, 5072, 5073, 5074, 5075, 5076, 5077, \n  5078, 5079, 5080, 5081, 5082, 5083, 5084, 5085, \n  5086, 4978, 5087, 5088, 5089, 5090, 5091, 5092, \n  5093, 5094, 5095, 5096, 5097, 5098, 5099, 5100, \n  5101, 5102, 5103, 5104, 5105, 5106, 5107, 5108, \n  5109, 5110, 5111, 5112, 5113, 5114, 5115, 5116, \n  5117, 5118, 5119, 5120, 5121, 5122, 5123, 5124, \n  5125, 5126, 5127, 5128, 5129, 5130, 5131, 5132, \n  5133, 5134, 5135, 5136, 5137, 5138, 5139, 5140, \n  5141, 5142, 5143, 5144, 5145, 5146, 5147, 5148, \n  5149, 5150, 5151, 5152, 5153, 5154, 5155, 5156, \n  5157, 5158, 5159, 5160, 5161, 5162, 5163, 5164, \n  5165, 5166, 5167, 5168, 5169, 5170, 5171, 5172, \n  5173, 5174, 5175, 5176, 5177, 5178, 5179, 5180, \n  5181, 5182, 5183, 5184, 5185, 5186, 5187, 5188, \n  5189, 5190, 5191, 5192, 5193, 5194, 5195, 5196, \n  5197, 5198, 5199, 5200, 5201, 5202, 5203, 5204, \n  5205, 5206, 5207, 5208, 5209, 5210, 5211, 5212, \n  5213, 5214, 5215, 5216, 5217, 5218, 5219, 5220, \n  5221, 5222, 5223, 5224, 5225, 5226, 5227, 5228, \n  5229, 5230, 5231, 5232, 5233, 5234, 5235, 5236, \n  5237, 5238, 5239, 5240, 5241, 5242, 5243, 5244, \n  5245, 5246, 5247, 5248, 5249, 5250, 5251, 5252, \n  5253, 5254, 5255, 5256, 5257, 5258, 5259, 5260, \n  5261, 5262, 5263, 5264, 5265, 5266, 5267, 5268, \n  5269, 5270, 5271, 5272, 5273, 5274, 5275, 5276, \n  5277, 5278, 5279, 5280, 5281, 5282, 5283, 5284, \n  5285, 5286, 5287, 5288, 5289, 5290, 5291, 5292, \n  5293, 5294, 5295, 5296, 5297, 5298, 5299, 5300, \n  2290, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 5301, 5302, 5303, 5304, 5305, 5306, 5307, \n  5308, 5309, 5310, 5311, 5312, 5313, 5314, 5315, \n  5316, 5317, 5318, 5319, 5320, 5321, 5322, 5323, \n  5324, 5325, 5326, 5327, 5328, 5329, 5330, 5331, \n  5332, 5333, 5334, 5335, 5336, 5337, 5338, 5339, \n  5340, 5341, 5342, 5343, 5344, 5345, 5346, 5347, \n  5348, 5349, 5350, 5351, 5352, 5353, 5354, 5355, \n  5356, 5357, 5358, 5359, 5360, 5361, 5362, 5363, \n  5364, 78, 78, 5365, 5366, 5367, 5368, 5369, \n  5370, 5371, 5372, 5373, 5374, 5375, 5376, 5377, \n  5378, 5379, 5380, 5381, 5382, 5383, 5384, 5385, \n  5386, 5387, 5388, 5389, 5390, 5391, 5392, 5393, \n  5394, 5395, 5396, 5397, 5398, 5399, 5400, 5401, \n  5402, 5403, 5404, 5405, 5406, 5407, 5408, 5409, \n  5410, 5411, 5412, 5413, 5414, 5415, 5416, 5417, \n  5418, 78, 78, 78, 78, 78, 78, 78, \n  78, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 5419, 5420, 5421, 5422, 5423, 5424, 5425, \n  5426, 5427, 5428, 5429, 5430, 5431, 78, 78, \n  78, 630, 630, 630, 630, 630, 630, 630, \n  630, 630, 630, 630, 630, 630, 630, 630, \n  630, 5432, 5433, 5434, 5435, 5436, 5437, 5438, \n  5439, 5440, 5441, 0, 0, 0, 0, 0, \n  0, 897, 897, 897, 897, 897, 897, 897, \n  1146, 1146, 1146, 1146, 1146, 1146, 1146, 897, \n  897, 5442, 5443, 5444, 5445, 5445, 5446, 5447, \n  5448, 5449, 5450, 5451, 5452, 5453, 5454, 5455, \n  5456, 5457, 5458, 5459, 5460, 5461, 3209, 3209, \n  5462, 5463, 5464, 5464, 5464, 5464, 5465, 5465, \n  5465, 5466, 5467, 5468, 0, 5469, 5470, 5471, \n  5472, 5473, 5474, 5475, 5476, 5477, 5478, 5479, \n  5480, 5481, 5482, 5483, 5484, 5485, 5486, 5487, \n  0, 5488, 5489, 5490, 5491, 0, 0, 0, \n  0, 5492, 5493, 5494, 1176, 5495, 0, 5496, \n  5497, 5498, 5499, 5500, 5501, 5502, 5503, 5504, \n  5505, 5506, 5507, 5508, 5509, 5510, 5511, 5512, \n  5513, 5514, 5515, 5516, 5517, 5518, 5519, 5520, \n  5521, 5522, 5523, 5524, 5525, 5526, 5527, 5528, \n  5529, 5530, 5531, 5532, 5533, 5534, 5535, 5536, \n  5537, 5538, 5539, 5540, 5541, 5542, 5543, 5544, \n  5545, 5546, 5547, 5548, 5549, 5550, 5551, 5552, \n  5553, 5554, 5555, 5556, 5557, 5558, 5559, 5560, \n  5561, 5562, 5563, 5564, 5565, 5566, 5567, 5568, \n  5569, 5570, 5571, 5572, 5573, 5574, 5575, 5576, \n  5577, 5578, 5579, 5580, 5581, 5582, 5583, 5584, \n  5585, 5586, 5587, 5588, 5589, 5590, 5591, 5592, \n  5593, 5594, 5595, 5596, 5597, 5598, 5599, 5600, \n  5601, 5602, 5603, 5604, 5605, 5606, 5607, 5608, \n  5609, 5610, 5611, 5612, 5613, 5614, 5615, 5616, \n  5617, 5618, 5619, 5620, 5621, 5622, 5623, 5624, \n  5625, 5626, 5627, 5628, 5629, 5630, 0, 0, \n  1509, 0, 5631, 5632, 5633, 5634, 5635, 5636, \n  5637, 5638, 5639, 5640, 5641, 5642, 5643, 5644, \n  5645, 5646, 5647, 5648, 5649, 5650, 5651, 5652, \n  5653, 5654, 5655, 5656, 5657, 5658, 5659, 5660, \n  5661, 5662, 5663, 5664, 5665, 5666, 5667, 5668, \n  5669, 5670, 5671, 5672, 5673, 5674, 5675, 5676, \n  5677, 5678, 5679, 5680, 5681, 5682, 5683, 5684, \n  5685, 5686, 5687, 5688, 5689, 5690, 5691, 5692, \n  5693, 5694, 5695, 5696, 5697, 5698, 5699, 5700, \n  5701, 5702, 5703, 5704, 5705, 5706, 5707, 5708, \n  5709, 5710, 5711, 5712, 5713, 5714, 5715, 5716, \n  5717, 5718, 5719, 5720, 5721, 5722, 5723, 5724, \n  5725, 5726, 5727, 5728, 5729, 5730, 5731, 5732, \n  5733, 5734, 5735, 5736, 5737, 5738, 5739, 5740, \n  5741, 5742, 5743, 5744, 5745, 5746, 5747, 5748, \n  5749, 5750, 5751, 5752, 5753, 5754, 5755, 5756, \n  5757, 5758, 5759, 5760, 5761, 5762, 5763, 5764, \n  5765, 5766, 5767, 5768, 5769, 5770, 5771, 5772, \n  5773, 5774, 5775, 5776, 5777, 5778, 5779, 5780, \n  5781, 5782, 5783, 5784, 5785, 5786, 5787, 5788, \n  5789, 5790, 5791, 5792, 5793, 5794, 5795, 5796, \n  5797, 5798, 5799, 5800, 5801, 5802, 5803, 5804, \n  5805, 5806, 5807, 5808, 5809, 5810, 5811, 5812, \n  5813, 5814, 5815, 5816, 5817, 5818, 5819, 5820, \n  0, 0, 0, 5821, 5822, 5823, 5824, 5825, \n  5826, 0, 0, 5827, 5828, 5829, 5830, 5831, \n  5832, 0, 0, 5833, 5834, 5835, 5836, 5837, \n  5838, 0, 0, 5839, 5840, 5841, 0, 0, \n  0, 5842, 5843, 5844, 5845, 5846, 5847, 5848, \n  0, 5849, 5850, 5851, 5852, 5853, 5854, 5855, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 5856, 5856, 5856, 78, 2477, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 0, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 0, 349, 349, 0, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 0, 0, 0, 0, \n  0, 1103, 8, 1103, 0, 0, 0, 0, \n  1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, \n  1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, \n  1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, \n  1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, \n  1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, \n  1241, 1241, 1241, 1241, 1241, 0, 0, 0, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 5857, 5857, 5857, 5857, 5857, 5857, 5857, \n  5857, 5857, 5857, 5857, 5857, 5857, 5857, 5857, \n  5857, 5857, 5857, 5857, 5857, 5857, 5857, 5857, \n  5857, 5857, 5857, 5857, 5857, 5857, 5857, 5857, \n  5857, 5857, 5857, 5857, 5857, 5857, 5857, 5857, \n  5857, 5857, 5857, 5857, 5857, 5857, 5857, 5857, \n  5857, 5857, 5857, 5857, 5857, 5857, 1267, 1267, \n  1267, 1267, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 1267, 1267, 78, 896, 896, \n  0, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 0, 0, \n  0, 78, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 1146, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 1146, 5858, 5858, 5858, 5858, 5858, 5858, \n  5858, 5858, 5858, 5858, 5858, 5858, 5858, 5858, \n  5858, 5858, 5858, 5858, 5858, 5858, 5858, 5858, \n  5858, 5858, 5858, 5858, 5858, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 1241, 1241, 1241, 1241, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 1506, 349, 349, 349, 349, 349, \n  349, 349, 349, 1506, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 897, \n  897, 897, 897, 897, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 0, \n  1103, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 1103, 1506, 1506, 1506, 1506, 1506, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 5859, 5860, 5861, 5862, 5863, 5864, 5865, \n  5866, 5867, 5868, 5869, 5870, 5871, 5872, 5873, \n  5874, 5875, 5876, 5877, 5878, 5879, 5880, 5881, \n  5882, 5883, 5884, 5885, 5886, 5887, 5888, 5889, \n  5890, 5891, 5892, 5893, 5894, 5895, 5896, 5897, \n  5898, 5899, 5900, 5901, 5902, 5903, 5904, 5905, \n  5906, 5907, 5908, 5909, 5910, 5911, 5912, 5913, \n  5914, 5915, 5916, 5917, 5918, 5919, 5920, 5921, \n  5922, 5923, 5924, 5925, 5926, 5927, 5928, 5929, \n  5930, 5931, 5932, 5933, 5934, 5935, 5936, 5937, \n  5938, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 0, \n  0, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 0, 0, 0, 0, 0, \n  0, 5939, 5940, 5941, 5942, 5943, 5944, 5945, \n  5946, 5947, 5948, 5949, 5950, 5951, 5952, 5953, \n  5954, 5955, 5956, 5957, 5958, 5959, 5960, 5961, \n  5962, 5963, 5964, 5965, 5966, 5967, 5968, 5969, \n  5970, 5971, 5972, 5973, 5974, 0, 0, 0, \n  0, 5975, 5976, 5977, 5978, 5979, 5980, 5981, \n  5982, 5983, 5984, 5985, 5986, 5987, 5988, 5989, \n  5990, 5991, 5992, 5993, 5994, 5995, 5996, 5997, \n  5998, 5999, 6000, 6001, 6002, 6003, 6004, 6005, \n  6006, 6007, 6008, 6009, 6010, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  1103, 6011, 6012, 6013, 6014, 6015, 6016, 6017, \n  6018, 6019, 6020, 6021, 0, 6022, 6023, 6024, \n  6025, 6026, 6027, 6028, 6029, 6030, 6031, 6032, \n  6033, 6034, 6035, 6036, 0, 6037, 6038, 6039, \n  6040, 6041, 6042, 6043, 0, 6044, 6045, 0, \n  6046, 6047, 6048, 6049, 6050, 6051, 6052, 6053, \n  6054, 6055, 6056, 0, 6057, 6058, 6059, 6060, \n  6061, 6062, 6063, 6064, 6065, 6066, 6067, 6068, \n  6069, 6070, 6071, 0, 6072, 6073, 6074, 6075, \n  6076, 6077, 6078, 0, 6079, 6080, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 6081, 349, 349, 349, 349, 349, \n  349, 349, 349, 6082, 349, 349, 349, 349, \n  349, 349, 349, 6083, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 6084, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 6085, 6086, 6087, 6088, 6089, 6090, 0, \n  6091, 6092, 6093, 6094, 6095, 6096, 6097, 6098, \n  6099, 6100, 6101, 6102, 6103, 6104, 6105, 6106, \n  6107, 6108, 6109, 6110, 6111, 6112, 6113, 6114, \n  6115, 6116, 6117, 6118, 6119, 6120, 6121, 6122, \n  6123, 6124, 6125, 6126, 6127, 6128, 6129, 6130, \n  6131, 6132, 0, 6133, 6134, 6135, 6136, 6137, \n  6138, 6139, 6140, 6141, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 1167, 1167, 1167, 1167, 1167, 1167, 0, \n  0, 1167, 0, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 0, \n  1167, 1167, 0, 0, 0, 1167, 0, 0, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 0, \n  1164, 6142, 6142, 6142, 6142, 6142, 6142, 6142, \n  6142, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  6143, 6143, 6142, 6142, 6142, 6142, 6142, 6142, \n  6142, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  6142, 6142, 6142, 6142, 6142, 6142, 6142, 6142, \n  6142, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 0, 1167, 1167, 0, \n  0, 0, 0, 0, 6142, 6142, 6142, 6142, \n  6142, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 6142, \n  6142, 6142, 6142, 6142, 6142, 0, 0, 0, \n  8, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 0, 0, 0, 0, 0, \n  1164, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 0, 0, 0, 0, 6142, 6142, 1167, \n  1167, 6142, 6142, 6142, 6142, 6142, 6142, 6142, \n  6142, 6142, 6142, 6142, 6142, 6142, 6142, 6142, \n  6142, 0, 0, 6142, 6142, 6142, 6142, 6142, \n  6142, 6142, 6142, 6142, 6142, 6142, 6142, 6142, \n  6142, 6142, 6142, 6142, 6142, 6142, 6142, 6142, \n  6142, 6142, 6142, 6142, 6142, 6142, 6142, 6142, \n  6142, 6142, 6142, 6142, 6142, 6142, 6142, 6142, \n  6142, 6142, 6142, 6142, 6142, 6142, 6142, 6142, \n  6142, 6144, 1209, 1209, 1209, 0, 1209, 1209, \n  0, 0, 0, 0, 0, 1209, 1146, 1209, \n  897, 6144, 6144, 6144, 6144, 0, 6144, 6144, \n  6144, 0, 6144, 6144, 6144, 6144, 6144, 6144, \n  6144, 6144, 6144, 6144, 6144, 6144, 6144, 6144, \n  6144, 6144, 6144, 6144, 6144, 6144, 6144, 6144, \n  6144, 6144, 6144, 6144, 6144, 6144, 6144, 0, \n  0, 897, 1590, 1146, 0, 0, 0, 0, \n  1223, 6142, 6142, 6142, 6142, 6142, 6142, 6142, \n  6142, 6142, 0, 0, 0, 0, 0, 0, \n  0, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n  1164, 1164, 0, 0, 0, 0, 0, 0, \n  0, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 6142, 6142, \n  1164, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 6142, 6142, \n  6142, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 6143, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 897, 1146, \n  0, 0, 0, 0, 6142, 6142, 6142, 6142, \n  6142, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 0, \n  0, 0, 8, 8, 8, 8, 8, 8, \n  8, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 0, \n  0, 6142, 6142, 6142, 6142, 6142, 6142, 6142, \n  6142, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 0, 0, 0, 0, \n  0, 6142, 6142, 6142, 6142, 6142, 6142, 6142, \n  6142, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 0, 0, 0, 0, 0, \n  0, 0, 1164, 1164, 1164, 1164, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 6142, 6142, 6142, 6142, 6142, 6142, \n  6142, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 6145, 6146, 6147, 6148, 6149, 6150, 6151, \n  6152, 6153, 6154, 6155, 6156, 6157, 6158, 6159, \n  6160, 6161, 6162, 6163, 6164, 6165, 6166, 6167, \n  6168, 6169, 6170, 6171, 6172, 6173, 6174, 6175, \n  6176, 6177, 6178, 6179, 6180, 6181, 6182, 6183, \n  6184, 6185, 6186, 6187, 6188, 6189, 6190, 6191, \n  6192, 6193, 6194, 6195, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 6196, 6197, 6198, 6199, 6200, 6201, 6202, \n  6203, 6204, 6205, 6206, 6207, 6208, 6209, 6210, \n  6211, 6212, 6213, 6214, 6215, 6216, 6217, 6218, \n  6219, 6220, 6221, 6222, 6223, 6224, 6225, 6226, \n  6227, 6228, 6229, 6230, 6231, 6232, 6233, 6234, \n  6235, 6236, 6237, 6238, 6239, 6240, 6241, 6242, \n  6243, 6244, 6245, 6246, 0, 0, 0, 0, \n  0, 0, 0, 6142, 6142, 6142, 6142, 6142, \n  6142, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 897, 897, 897, \n  897, 0, 0, 0, 0, 0, 0, 0, \n  0, 1193, 1193, 1193, 1193, 1193, 1193, 1193, \n  1193, 1193, 1193, 0, 0, 0, 0, 0, \n  0, 1193, 1193, 1193, 1193, 1193, 1193, 1193, \n  1193, 1193, 1193, 1167, 1167, 1167, 1167, 1211, \n  1167, 6247, 6248, 6249, 6250, 6251, 6252, 6253, \n  6254, 6255, 6256, 6257, 6258, 6259, 6260, 6261, \n  6262, 6263, 6264, 6265, 6266, 6267, 6268, 0, \n  0, 0, 897, 897, 897, 897, 897, 1145, \n  1211, 6269, 6270, 6271, 6272, 6273, 6274, 6275, \n  6276, 6277, 6278, 6279, 6280, 6281, 6282, 6283, \n  6284, 6285, 6286, 6287, 6288, 6289, 6290, 0, \n  0, 0, 0, 0, 0, 0, 0, 6291, \n  6291, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 6292, 6292, 6292, 6292, 6292, 6292, 6292, \n  6292, 6292, 6292, 6292, 6292, 6292, 6292, 6292, \n  6292, 6292, 6292, 6292, 6292, 6292, 6292, 6292, \n  6292, 6292, 6292, 6292, 6292, 6292, 6292, 6292, \n  0, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 0, 897, 897, 1162, 0, \n  0, 1167, 1167, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 1176, 1176, 1176, 1183, 1176, \n  1176, 0, 0, 0, 0, 0, 0, 0, \n  0, 8, 78, 78, 78, 78, 78, 78, \n  78, 78, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 1146, 1146, 1209, 1146, 1146, \n  1146, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 6142, 6142, \n  6142, 6142, 6142, 6142, 6142, 6142, 6142, 6142, \n  1167, 0, 0, 0, 0, 0, 0, 0, \n  0, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, \n  1176, 1176, 1176, 1176, 1176, 1176, 1176, 1146, \n  1146, 897, 897, 897, 1146, 897, 1146, 1146, \n  1146, 1146, 6293, 6293, 6293, 6293, 1171, 1171, \n  1171, 1171, 1171, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 897, 1146, 897, 1146, 1164, \n  1164, 1164, 1164, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 6142, 6142, \n  6142, 6142, 6142, 6142, 6142, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 1214, 1209, 1214, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 1209, 1209, 1209, 1209, 1209, 1209, 1209, \n  1209, 1209, 1209, 1209, 1209, 1209, 1209, 1244, \n  1103, 1103, 1103, 1103, 1103, 1103, 1103, 0, \n  0, 0, 0, 1267, 1267, 1267, 1267, 1267, \n  1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, \n  1267, 1267, 1267, 1267, 1267, 1267, 1267, 1232, \n  1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1244, 349, 349, 1209, 1209, 349, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  1244, 1209, 1209, 1214, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 6294, 6295, 6296, 6297, 349, 349, \n  349, 349, 349, 349, 349, 349, 6298, 349, \n  349, 349, 349, 349, 6299, 349, 349, 349, \n  349, 1214, 1214, 1214, 1209, 1209, 1209, 1209, \n  1214, 1214, 1244, 1222, 1103, 1103, 6300, 1103, \n  1103, 1103, 1103, 1209, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 6300, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 0, 0, 0, 0, 0, 0, \n  0, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 0, 0, 0, 0, 0, \n  0, 897, 897, 897, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1253, 1209, 1209, 1209, 1209, 1214, 1209, 6301, \n  6302, 1209, 6303, 6304, 1223, 1244, 0, 1232, \n  1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1103, 1103, 1103, 1103, 1215, 1214, 1214, \n  1215, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 1233, 1103, 1103, 349, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 1209, 1209, 1214, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 1214, 1214, 1214, 1209, \n  1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, \n  1214, 1507, 349, 1280, 1280, 349, 1103, 1103, \n  1103, 1103, 1209, 1233, 1209, 1209, 1103, 1214, \n  1209, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 349, 1103, 349, 1103, 1103, \n  1103, 0, 1241, 1241, 1241, 1241, 1241, 1241, \n  1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, \n  1241, 1241, 1241, 1241, 1241, 1241, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 0, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 1214, 1214, 1214, \n  1209, 1209, 1209, 1214, 1214, 1209, 1507, 1233, \n  1209, 1103, 1103, 1103, 1103, 1103, 1103, 1209, \n  349, 349, 1209, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  0, 349, 0, 349, 349, 349, 349, 0, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 0, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 1103, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  1209, 1214, 1214, 1214, 1209, 1209, 1209, 1209, \n  1209, 1209, 1233, 1244, 0, 0, 0, 0, \n  0, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 0, 0, 0, 0, 0, \n  0, 1209, 1209, 1214, 1214, 0, 349, 349, \n  349, 349, 349, 349, 349, 349, 0, 0, \n  349, 349, 0, 0, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 0, 349, 349, 349, 349, 349, \n  349, 349, 0, 349, 349, 0, 349, 349, \n  349, 349, 349, 0, 1233, 1233, 349, 1234, \n  1214, 1209, 1214, 1214, 1214, 1214, 0, 0, \n  6305, 1214, 0, 0, 6306, 6307, 1507, 0, \n  0, 349, 0, 0, 0, 0, 0, 0, \n  1234, 0, 0, 0, 0, 0, 349, 349, \n  349, 349, 349, 1214, 1214, 0, 0, 897, \n  897, 897, 897, 897, 897, 897, 0, 0, \n  0, 897, 897, 897, 897, 897, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 1215, 1215, 6308, 6309, 6310, 6311, 1215, \n  1215, 1215, 1215, 0, 6312, 0, 0, 6313, \n  0, 6314, 6315, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 0, \n  349, 1234, 1214, 1214, 1253, 1209, 1209, 1209, \n  1209, 1209, 0, 6316, 0, 0, 6317, 0, \n  6318, 6319, 1234, 1214, 0, 1214, 1214, 1244, \n  1507, 1223, 1280, 1209, 349, 1103, 1103, 0, \n  1103, 1103, 0, 0, 0, 0, 0, 0, \n  0, 0, 1209, 1209, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 1214, 1214, \n  1214, 1209, 1209, 1209, 1209, 1209, 1209, 1209, \n  1209, 1214, 1214, 1244, 1209, 1209, 1214, 1233, \n  349, 349, 349, 349, 1103, 1103, 1103, 1103, \n  1103, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 1103, 1103, 0, 1103, 897, \n  349, 349, 349, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 1234, 1214, 1214, 1209, 1209, 1209, 1209, \n  1209, 1209, 6320, 1253, 6321, 6322, 1234, 6323, \n  1209, 1209, 1214, 1244, 1233, 349, 349, 1103, \n  349, 0, 0, 0, 0, 0, 0, 0, \n  0, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  1234, 1214, 1214, 1209, 1209, 1209, 1209, 0, \n  0, 6324, 6325, 6326, 6327, 1209, 1209, 1214, \n  1244, 1233, 1103, 1103, 1103, 1103, 1103, 1103, \n  1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, \n  1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, \n  1103, 349, 349, 349, 349, 1209, 1209, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 1214, 1214, 1214, 1209, 1209, 1209, 1209, \n  1209, 1209, 1209, 1209, 1214, 1214, 1209, 1214, \n  1244, 1209, 1103, 1103, 1103, 349, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 0, 0, 0, 0, 0, \n  0, 8, 8, 8, 8, 8, 8, 8, \n  8, 8, 8, 8, 8, 8, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 1209, 1214, 1209, 1214, \n  1214, 1209, 1209, 1209, 1209, 1209, 1209, 1507, \n  1233, 349, 1103, 0, 0, 0, 0, 0, \n  0, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 0, 0, 0, 0, 0, \n  0, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 1232, 1232, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 0, 0, 1209, 1214, \n  1209, 1321, 1321, 1209, 1209, 1209, 1209, 1214, \n  1209, 1209, 1209, 1209, 1244, 0, 0, 0, \n  0, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 1241, 1241, 1103, 1103, 1103, \n  896, 349, 349, 349, 349, 349, 349, 349, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 1214, 1214, 1214, \n  1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, \n  1209, 1214, 1244, 1233, 1103, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 6328, 6329, 6330, 6331, 6332, 6333, 6334, \n  6335, 6336, 6337, 6338, 6339, 6340, 6341, 6342, \n  6343, 6344, 6345, 6346, 6347, 6348, 6349, 6350, \n  6351, 6352, 6353, 6354, 6355, 6356, 6357, 6358, \n  6359, 6360, 6361, 6362, 6363, 6364, 6365, 6366, \n  6367, 6368, 6369, 6370, 6371, 6372, 6373, 6374, \n  6375, 6376, 6377, 6378, 6379, 6380, 6381, 6382, \n  6383, 6384, 6385, 6386, 6387, 6388, 6389, 6390, \n  6391, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 1241, 1241, 1241, 1241, 1241, \n  1241, 1241, 1241, 1241, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  349, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  0, 0, 1215, 0, 0, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 0, 1215, 1215, \n  0, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1234, 1214, 1214, 1214, 1214, 6392, 0, \n  1214, 6393, 0, 0, 1209, 1209, 1507, 1223, \n  1280, 1214, 1280, 1214, 1233, 1103, 1103, 1103, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 0, 0, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 1214, 1214, 1214, 1209, 1209, 1209, \n  1209, 0, 0, 1209, 1209, 1214, 1214, 1214, \n  1214, 1244, 349, 1103, 349, 1214, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 1215, 1209, 1209, 1209, 1209, 1209, 1209, \n  6394, 6394, 1209, 1209, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1209, 1244, 1209, 1209, \n  1209, 1209, 1214, 349, 1209, 1209, 1209, 1209, \n  1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, \n  1223, 0, 0, 0, 0, 0, 0, 0, \n  0, 1215, 1209, 1209, 1209, 1209, 1209, 1209, \n  1214, 1214, 1209, 1209, 1209, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1280, 1280, 1280, \n  1280, 1280, 1280, 1209, 1209, 1209, 1209, 1209, \n  1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, \n  1214, 1209, 1223, 1103, 1103, 1103, 349, 1103, \n  1103, 1103, 1103, 1103, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 0, 0, 0, 0, 0, 0, \n  0, 1103, 1103, 1103, 1103, 1103, 1103, 1103, \n  1103, 1103, 1103, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 1209, 1214, 1209, 1209, 1209, 1214, 1209, \n  1214, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 1103, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 0, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  1214, 1209, 1209, 1209, 1209, 1209, 1209, 1209, \n  0, 1209, 1209, 1209, 1209, 1209, 1209, 1214, \n  6395, 349, 1103, 1103, 1103, 1103, 1103, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 1241, 1241, 1241, 1241, 1241, \n  1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, \n  1241, 1241, 1241, 1241, 1241, 1241, 0, 0, \n  0, 1103, 1103, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 0, 0, 1209, 1209, 1209, 1209, 1209, \n  1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, \n  1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, \n  1209, 0, 1214, 1209, 1209, 1209, 1209, 1209, \n  1209, 1209, 1214, 1209, 1209, 1214, 1209, 1209, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  0, 349, 349, 0, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 1209, 1209, 1209, 1209, 1209, 1209, \n  0, 0, 0, 1209, 0, 1209, 1209, 0, \n  1209, 1209, 1209, 1233, 1209, 1244, 1244, 1280, \n  1209, 0, 0, 0, 0, 0, 0, 0, \n  0, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 0, \n  349, 349, 0, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 1214, 1214, 1214, 1214, 1214, \n  0, 1209, 1209, 0, 1214, 1214, 1209, 1214, \n  1244, 349, 0, 0, 0, 0, 0, 0, \n  0, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 598, 349, 349, 0, 0, 0, \n  0, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 1209, 1209, 1214, 1214, \n  1103, 1103, 0, 0, 0, 0, 0, 0, \n  0, 1209, 1209, 1280, 1214, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 0, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, \n  1215, 1215, 1215, 1215, 1215, 1214, 1214, 1209, \n  1209, 1209, 1209, 1209, 0, 0, 0, 1214, \n  1214, 1209, 1507, 1223, 1103, 1103, 1103, 1103, \n  1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, \n  1103, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 1209, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 1241, 1241, 1241, 1241, 1241, 1241, 1241, \n  1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, \n  1241, 1241, 1241, 1241, 1241, 1241, 78, 78, \n  78, 78, 78, 78, 78, 78, 10, 10, \n  10, 10, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  1103, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 1506, 1506, 1506, 1506, 1506, 1506, 1506, \n  1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, \n  1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, \n  1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, \n  1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, \n  1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, \n  1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, \n  1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, \n  1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, \n  1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, \n  1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, \n  1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, \n  1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, \n  1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, \n  0, 1103, 1103, 1103, 1103, 1103, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 1103, 1103, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 6396, 6396, 6396, 6396, 6396, 6396, 6396, \n  6396, 6396, 6396, 6396, 6396, 6396, 6396, 6396, \n  6396, 1209, 349, 349, 349, 349, 349, 349, \n  1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, \n  1209, 1209, 1209, 1209, 1209, 1209, 1209, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 6397, \n  1253, 1253, 6398, 6399, 6400, 6401, 6402, 6403, \n  6404, 6405, 6406, 1214, 1214, 1214, 1209, 1209, \n  1244, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  0, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 0, 0, 0, 0, 1103, \n  1103, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  0, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 0, \n  0, 1590, 1590, 1590, 1590, 1590, 1103, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 897, 897, 897, 897, 897, 897, 897, \n  1103, 1103, 1103, 1103, 1103, 896, 896, 896, \n  896, 598, 598, 598, 598, 1103, 896, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 0, 1241, 1241, 1241, 1241, \n  1241, 1241, 1241, 0, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 0, 0, 0, 0, 0, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 598, 598, 598, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 6407, 349, 349, 349, \n  6408, 6409, 6410, 6411, 598, 598, 1103, 1103, \n  1103, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 6412, 6413, 6414, 6415, 6416, 6417, 6418, \n  6419, 6420, 6421, 6422, 6423, 6424, 6425, 6426, \n  6427, 6428, 6429, 6430, 6431, 6432, 6433, 6434, \n  6435, 6436, 6437, 6438, 6439, 6440, 6441, 6442, \n  6443, 6444, 6445, 6446, 6447, 6448, 6449, 6450, \n  6451, 6452, 6453, 6454, 6455, 6456, 6457, 6458, \n  6459, 6460, 6461, 6462, 6463, 6464, 6465, 6466, \n  6467, 6468, 6469, 6470, 6471, 6472, 6473, 6474, \n  6475, 1241, 1241, 1241, 1241, 1241, 1241, 1241, \n  1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, \n  1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, \n  1103, 1103, 1103, 1103, 0, 0, 0, 0, \n  0, 6476, 6477, 6478, 6479, 6480, 6481, 6482, \n  6483, 6484, 6485, 6486, 6487, 6488, 6489, 6490, \n  6491, 6492, 6493, 6494, 6495, 6496, 6497, 6498, \n  6499, 6500, 0, 0, 6501, 6502, 6503, 6504, \n  6505, 6506, 6507, 6508, 6509, 6510, 6511, 6512, \n  6513, 6514, 6515, 6516, 6517, 6518, 6519, 6520, \n  6521, 6522, 6523, 6524, 6525, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 0, 0, 0, 0, \n  1209, 349, 1214, 1214, 1214, 1214, 1214, 1214, \n  1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, \n  1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, \n  1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, \n  1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, \n  1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, \n  1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, \n  1214, 0, 0, 0, 0, 0, 0, 0, \n  1209, 1209, 1209, 1209, 598, 598, 598, 598, \n  598, 598, 598, 598, 598, 598, 598, 598, \n  598, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 3210, 3210, 3209, 3210, 1209, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 6526, 6526, 3210, 3210, 3212, 3212, 3212, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 3210, 3210, 3210, 3210, 0, 3210, 3210, \n  3210, 3210, 3210, 3210, 3210, 0, 3210, 3210, \n  0, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 3211, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 3211, 3211, 3211, 0, 0, 3211, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 3211, 3211, 3211, \n  3211, 0, 0, 0, 0, 0, 0, 0, \n  0, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 0, 0, 896, 1209, 1590, \n  1103, 1509, 1509, 1509, 1509, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 6527, \n  6528, 6529, 6530, 6531, 6532, 6533, 6534, 6535, \n  6536, 6537, 6538, 6539, 6540, 6541, 6542, 6543, \n  6544, 6545, 6546, 6547, 6548, 6549, 6550, 6551, \n  6552, 6553, 6554, 6555, 6556, 6557, 6558, 6559, \n  6560, 6561, 6562, 78, 78, 78, 0, 0, \n  0, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 0, 0, 0, \n  0, 0, 0, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 74, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 1209, 1209, 1209, 1209, 1209, 1209, 1209, \n  1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, \n  1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, \n  1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, \n  1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, \n  1209, 1209, 1209, 1209, 1209, 1209, 1209, 0, \n  0, 1209, 1209, 1209, 1209, 1209, 1209, 1209, \n  1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, \n  1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  0, 0, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 6563, \n  6564, 6565, 6566, 6567, 6568, 6569, 6570, 6570, \n  1590, 1590, 1590, 896, 896, 896, 6571, 6570, \n  6570, 6570, 6570, 6570, 1509, 1509, 1509, 1509, \n  1509, 1509, 1509, 1509, 1146, 1146, 1146, 1146, \n  1146, 1146, 1146, 1146, 896, 896, 897, 897, \n  897, 897, 897, 1146, 1146, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 897, 897, 897, 897, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 6572, 6573, 6574, 6575, \n  6576, 6577, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 78, 78, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 897, 897, 897, 78, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 1241, 1241, 1241, 1241, 1241, 1241, 1241, \n  1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, \n  1241, 1241, 1241, 1241, 1241, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 1241, 1241, 1241, 1241, 1241, 1241, 1241, \n  1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, \n  1241, 1241, 1241, 1241, 1241, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 6578, 6578, 6578, 6578, 6578, 6578, 6578, \n  6578, 6578, 6578, 6578, 6578, 6578, 6578, 6578, \n  6578, 6578, 6578, 6578, 6578, 6578, 6578, 6578, \n  1241, 1241, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 6579, 6580, 6581, 6582, 6583, 6584, 6585, \n  6586, 6587, 6588, 6589, 6590, 6591, 6592, 6593, \n  6594, 6595, 6596, 6597, 6598, 6599, 6600, 6601, \n  6602, 6603, 6604, 6605, 6606, 6607, 6608, 6609, \n  6610, 6611, 6612, 6613, 6614, 6615, 6616, 6617, \n  6618, 6619, 6620, 6621, 6622, 6623, 6624, 6625, \n  6626, 6627, 6628, 6629, 6630, 6631, 6632, 6633, \n  6634, 6635, 6636, 6637, 6638, 6639, 6640, 6641, \n  6642, 6643, 6644, 6645, 6646, 6647, 6648, 6649, \n  6650, 6651, 6652, 6653, 6654, 6655, 6656, 6657, \n  6658, 6659, 6660, 6661, 6662, 6663, 0, 6664, \n  6665, 6666, 6667, 6668, 6669, 6670, 6671, 6672, \n  6673, 6674, 6675, 6676, 6677, 6678, 6679, 6680, \n  6681, 6682, 6683, 6684, 6685, 6686, 6687, 6688, \n  6689, 6690, 6691, 6692, 6693, 6694, 6695, 6696, \n  6697, 6698, 6699, 6700, 6701, 6702, 6703, 6704, \n  6705, 6706, 6707, 6708, 6709, 6710, 6711, 6712, \n  6713, 6714, 6715, 6716, 6717, 6718, 6719, 6720, \n  6721, 6722, 6723, 6724, 6725, 6726, 6727, 6728, \n  6729, 6730, 6731, 6732, 6733, 6734, 0, 6735, \n  6736, 0, 0, 6737, 0, 0, 6738, 6739, \n  0, 0, 6740, 6741, 6742, 6743, 0, 6744, \n  6745, 6746, 6747, 6748, 6749, 6750, 6751, 6752, \n  6753, 6754, 6755, 0, 6756, 0, 6757, 6758, \n  6759, 6760, 6761, 6762, 6763, 0, 6764, 6765, \n  6766, 6767, 6768, 6769, 6770, 6771, 6772, 6773, \n  6774, 6775, 6776, 6777, 6778, 6779, 6780, 6781, \n  6782, 6783, 6784, 6785, 6786, 6787, 6788, 6789, \n  6790, 6791, 6792, 6793, 6794, 6795, 6796, 6797, \n  6798, 6799, 6800, 6801, 6802, 6803, 6804, 6805, \n  6806, 6807, 6808, 6809, 6810, 6811, 6812, 6813, \n  6814, 6815, 6816, 6817, 6818, 6819, 6820, 6821, \n  6822, 6823, 6824, 6825, 6826, 6827, 6828, 0, \n  6829, 6830, 6831, 6832, 0, 0, 6833, 6834, \n  6835, 6836, 6837, 6838, 6839, 6840, 0, 6841, \n  6842, 6843, 6844, 6845, 6846, 6847, 0, 6848, \n  6849, 6850, 6851, 6852, 6853, 6854, 6855, 6856, \n  6857, 6858, 6859, 6860, 6861, 6862, 6863, 6864, \n  6865, 6866, 6867, 6868, 6869, 6870, 6871, 6872, \n  6873, 6874, 6875, 0, 6876, 6877, 6878, 6879, \n  0, 6880, 6881, 6882, 6883, 6884, 0, 6885, \n  0, 0, 0, 6886, 6887, 6888, 6889, 6890, \n  6891, 6892, 0, 6893, 6894, 6895, 6896, 6897, \n  6898, 6899, 6900, 6901, 6902, 6903, 6904, 6905, \n  6906, 6907, 6908, 6909, 6910, 6911, 6912, 6913, \n  6914, 6915, 6916, 6917, 6918, 6919, 6920, 6921, \n  6922, 6923, 6924, 6925, 6926, 6927, 6928, 6929, \n  6930, 6931, 6932, 6933, 6934, 6935, 6936, 6937, \n  6938, 6939, 6940, 6941, 6942, 6943, 6944, 6945, \n  6946, 6947, 6948, 6949, 6950, 6951, 6952, 6953, \n  6954, 6955, 6956, 6957, 6958, 6959, 6960, 6961, \n  6962, 6963, 6964, 6965, 6966, 6967, 6968, 6969, \n  6970, 6971, 6972, 6973, 6974, 6975, 6976, 6977, \n  6978, 6979, 6980, 6981, 6982, 6983, 6984, 6985, \n  6986, 6987, 6988, 6989, 6990, 6991, 6992, 6993, \n  6994, 6995, 6996, 6997, 6998, 6999, 7000, 7001, \n  7002, 7003, 7004, 7005, 7006, 7007, 7008, 7009, \n  7010, 7011, 7012, 7013, 7014, 7015, 7016, 7017, \n  7018, 7019, 7020, 7021, 7022, 7023, 7024, 7025, \n  7026, 7027, 7028, 7029, 7030, 7031, 7032, 7033, \n  7034, 7035, 7036, 7037, 7038, 7039, 7040, 7041, \n  7042, 7043, 7044, 7045, 7046, 7047, 7048, 7049, \n  7050, 7051, 7052, 7053, 7054, 7055, 7056, 7057, \n  7058, 7059, 7060, 7061, 7062, 7063, 7064, 7065, \n  7066, 7067, 7068, 7069, 7070, 7071, 7072, 7073, \n  7074, 7075, 7076, 7077, 7078, 7079, 7080, 7081, \n  7082, 7083, 7084, 7085, 7086, 7087, 7088, 7089, \n  7090, 7091, 7092, 7093, 7094, 7095, 7096, 7097, \n  7098, 7099, 7100, 7101, 7102, 7103, 7104, 7105, \n  7106, 7107, 7108, 7109, 7110, 7111, 7112, 7113, \n  7114, 7115, 7116, 7117, 7118, 7119, 7120, 7121, \n  7122, 7123, 7124, 7125, 7126, 7127, 7128, 7129, \n  7130, 7131, 7132, 7133, 7134, 7135, 7136, 7137, \n  7138, 7139, 7140, 7141, 7142, 7143, 7144, 7145, \n  7146, 7147, 7148, 7149, 7150, 7151, 7152, 7153, \n  7154, 7155, 7156, 7157, 7158, 7159, 7160, 7161, \n  7162, 7163, 7164, 7165, 7166, 7167, 7168, 7169, \n  7170, 7171, 7172, 7173, 7174, 7175, 7176, 7177, \n  7178, 7179, 7180, 7181, 7182, 7183, 7184, 7185, \n  7186, 7187, 7188, 7189, 7190, 7191, 7192, 7193, \n  7194, 7195, 7196, 7197, 7198, 7199, 7200, 7201, \n  7202, 7203, 7204, 7205, 7206, 7207, 7208, 7209, \n  7210, 7211, 7212, 7213, 7214, 7215, 7216, 7217, \n  7218, 7219, 7220, 7221, 7222, 7223, 7224, 7225, \n  7226, 7227, 7228, 7229, 7230, 7231, 7232, 0, \n  0, 7233, 7234, 7235, 7236, 7237, 7238, 7239, \n  7240, 7241, 7242, 7243, 7244, 7245, 7246, 7247, \n  7248, 7249, 7250, 7251, 7252, 7253, 7254, 7255, \n  7256, 7257, 7258, 7259, 7260, 7261, 7262, 7263, \n  7264, 7265, 7266, 7267, 7268, 7269, 7270, 7271, \n  7272, 7273, 7274, 7275, 7276, 7277, 7278, 7279, \n  7280, 7281, 7282, 7283, 7284, 7285, 7286, 7287, \n  7288, 7289, 7290, 7291, 7292, 7293, 7294, 7295, \n  7296, 7297, 7298, 7299, 7300, 7301, 7302, 7303, \n  7304, 7305, 7306, 7307, 7308, 7309, 7310, 7311, \n  7312, 7313, 7314, 7315, 7258, 7316, 7317, 7318, \n  7319, 7320, 7321, 7322, 7323, 7324, 7325, 7326, \n  7327, 7328, 7329, 7330, 7331, 7332, 7333, 7334, \n  7335, 7336, 7337, 7338, 7339, 7340, 7284, 7341, \n  7342, 7343, 7344, 7345, 7346, 7347, 7348, 7349, \n  7350, 7351, 7352, 7353, 7354, 7355, 7356, 7357, \n  7358, 7359, 7360, 7361, 7362, 7363, 7364, 7365, \n  7366, 7367, 7368, 7369, 7370, 7371, 7258, 7372, \n  7373, 7374, 7375, 7376, 7377, 7378, 7379, 7380, \n  7381, 7382, 7383, 7384, 7385, 7386, 7387, 7388, \n  7389, 7390, 7391, 7392, 7393, 7394, 7395, 7396, \n  7284, 7397, 7398, 7399, 7400, 7401, 7402, 7403, \n  7404, 7405, 7406, 7407, 7408, 7409, 7410, 7411, \n  7412, 7413, 7414, 7415, 7416, 7417, 7418, 7419, \n  7420, 7421, 7422, 7423, 7424, 7425, 7426, 7427, \n  7258, 7428, 7429, 7430, 7431, 7432, 7433, 7434, \n  7435, 7436, 7437, 7438, 7439, 7440, 7441, 7442, \n  7443, 7444, 7445, 7446, 7447, 7448, 7449, 7450, \n  7451, 7452, 7284, 7453, 7454, 7455, 7456, 7457, \n  7458, 7459, 7460, 7461, 7462, 7463, 7464, 7465, \n  7466, 7467, 7468, 7469, 7470, 7471, 7472, 7473, \n  7474, 7475, 7476, 7477, 7478, 7479, 7480, 7481, \n  7482, 7483, 7258, 7484, 7485, 7486, 7487, 7488, \n  7489, 7490, 7491, 7492, 7493, 7494, 7495, 7496, \n  7497, 7498, 7499, 7500, 7501, 7502, 7503, 7504, \n  7505, 7506, 7507, 7508, 7284, 7509, 7510, 7511, \n  7512, 7513, 7514, 7515, 7516, 0, 0, 6553, \n  6554, 6555, 6556, 6557, 6558, 6559, 6560, 6561, \n  6562, 6553, 6554, 6555, 6556, 6557, 6558, 6559, \n  6560, 6561, 6562, 6553, 6554, 6555, 6556, 6557, \n  6558, 6559, 6560, 6561, 6562, 6553, 6554, 6555, \n  6556, 6557, 6558, 6559, 6560, 6561, 6562, 6553, \n  6554, 6555, 6556, 6557, 6558, 6559, 6560, 6561, \n  6562, 1209, 1209, 1209, 1209, 1209, 1209, 1209, \n  1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, \n  1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, \n  1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, \n  1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, \n  1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, \n  1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, \n  896, 896, 896, 896, 1209, 1209, 1209, 1209, \n  1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, \n  1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, \n  1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, \n  1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, \n  1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, \n  1209, 1209, 1209, 1209, 1209, 1209, 896, 896, \n  896, 896, 896, 896, 896, 896, 1209, 896, \n  896, 896, 896, 896, 896, 896, 896, 896, \n  896, 896, 896, 896, 896, 1209, 896, 896, \n  1103, 1103, 1103, 1103, 1103, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 1209, 1209, 1209, 1209, \n  1209, 0, 1209, 1209, 1209, 1209, 1209, 1209, \n  1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, \n  1209, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 7517, 7518, 7519, 7520, 7521, 7522, 7523, \n  7524, 7525, 7526, 349, 7527, 7528, 7529, 7530, \n  7531, 7532, 7533, 7534, 7535, 7536, 7537, 7538, \n  7539, 7540, 7541, 7542, 7543, 7544, 7545, 7546, \n  0, 0, 0, 0, 0, 0, 7547, 7548, \n  7549, 7550, 7551, 7552, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 897, 897, 897, 897, 897, 897, 897, \n  0, 897, 897, 897, 897, 897, 897, 897, \n  897, 897, 897, 897, 897, 897, 897, 897, \n  897, 897, 0, 0, 897, 897, 897, 897, \n  897, 897, 897, 0, 897, 897, 0, 897, \n  897, 897, 897, 897, 0, 0, 0, 0, \n  0, 7553, 7554, 7555, 7556, 7557, 7558, 7559, \n  7560, 7561, 7562, 7563, 7564, 7565, 7566, 7567, \n  7568, 7569, 7570, 7571, 7572, 7573, 7574, 7575, \n  7576, 7577, 7578, 7579, 7580, 7581, 7582, 7583, \n  7584, 7585, 7586, 7587, 7588, 7589, 7590, 7591, \n  7592, 7593, 7594, 7595, 7596, 7597, 7598, 7599, \n  7600, 7601, 7602, 7603, 7604, 7605, 7606, 7607, \n  7608, 7609, 7610, 7611, 7612, 7613, 7614, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  897, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 0, 0, \n  0, 897, 897, 897, 897, 897, 897, 897, \n  598, 598, 598, 598, 598, 598, 598, 0, \n  0, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 0, 0, 0, 0, 349, \n  896, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 897, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 897, 897, 897, \n  897, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 0, 0, 0, 0, 0, \n  10, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 598, 1785, 1785, 1146, \n  897, 1232, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 897, \n  1146, 349, 1232, 1232, 1232, 1232, 1232, 1232, \n  1232, 1232, 1232, 1232, 0, 0, 0, 0, \n  1103, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  0, 349, 349, 349, 897, 349, 349, 897, \n  349, 349, 349, 349, 349, 349, 349, 897, \n  897, 349, 349, 349, 349, 349, 897, 0, \n  0, 0, 0, 0, 0, 0, 0, 349, \n  598, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  0, 349, 349, 349, 349, 0, 349, 349, \n  0, 349, 349, 349, 349, 349, 349, 349, \n  349, 349, 349, 349, 349, 349, 349, 349, \n  0, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, \n  1167, 1167, 1167, 1167, 1167, 1167, 0, 0, \n  6142, 6142, 6142, 6142, 6142, 6142, 6142, 6142, \n  6142, 1146, 1146, 1146, 1146, 1146, 1146, 1146, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 7615, 7616, 7617, 7618, 7619, 7620, 7621, \n  7622, 7623, 7624, 7625, 7626, 7627, 7628, 7629, \n  7630, 7631, 7632, 7633, 7634, 7635, 7636, 7637, \n  7638, 7639, 7640, 7641, 7642, 7643, 7644, 7645, \n  7646, 7647, 7648, 7649, 7650, 7651, 7652, 7653, \n  7654, 7655, 7656, 7657, 7658, 7659, 7660, 7661, \n  7662, 7663, 7664, 7665, 7666, 7667, 7668, 7669, \n  7670, 7671, 7672, 7673, 7674, 7675, 7676, 7677, \n  7678, 7679, 7680, 7681, 7682, 897, 897, 897, \n  897, 897, 897, 1233, 1211, 0, 0, 0, \n  0, 1210, 1210, 1210, 1210, 1210, 1210, 1210, \n  1210, 1210, 1210, 0, 0, 0, 0, 1164, \n  1164, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 6293, 6293, 6293, 6293, 6293, 6293, \n  6293, 6293, 6293, 6293, 6293, 6293, 6293, 6293, \n  6293, 6293, 6293, 6293, 6293, 6293, 6293, 6293, \n  6293, 6293, 6293, 6293, 6293, 6293, 6293, 6293, \n  6293, 6293, 6293, 6293, 6293, 6293, 6293, 6293, \n  6293, 6293, 6293, 6293, 6293, 6293, 6293, 6293, \n  6293, 6293, 6293, 6293, 6293, 6293, 6293, 6293, \n  6293, 6293, 6293, 6293, 6293, 1206, 6293, 6293, \n  6293, 1170, 6293, 6293, 6293, 6293, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 6293, 6293, 6293, 6293, 6293, 6293, \n  6293, 6293, 6293, 6293, 6293, 6293, 6293, 6293, \n  6293, 6293, 6293, 6293, 6293, 6293, 6293, 6293, \n  6293, 6293, 6293, 6293, 6293, 6293, 6293, 6293, \n  6293, 6293, 6293, 6293, 6293, 6293, 6293, 6293, \n  6293, 6293, 6293, 6293, 6293, 6293, 6293, 1206, \n  6293, 6293, 6293, 6293, 6293, 6293, 6293, 6293, \n  6293, 6293, 6293, 6293, 6293, 6293, 6293, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 7683, 7684, 7685, 7686, 0, 7687, 7688, \n  7689, 7690, 7691, 7692, 7693, 7694, 7695, 7696, \n  7697, 7698, 7699, 7700, 7701, 7702, 7703, 7704, \n  7705, 7706, 7707, 7708, 7709, 7710, 7711, 7712, \n  7713, 0, 7684, 7685, 0, 7714, 0, 0, \n  7689, 0, 7691, 7692, 7693, 7694, 7695, 7696, \n  7697, 7698, 7699, 7700, 0, 7702, 7703, 7704, \n  7705, 0, 7707, 0, 7709, 0, 0, 0, \n  0, 0, 0, 7685, 0, 0, 0, 0, \n  7689, 0, 7691, 0, 7693, 0, 7695, 7696, \n  7697, 0, 7699, 7700, 0, 7702, 0, 0, \n  7705, 0, 7707, 0, 7709, 0, 7711, 0, \n  7713, 0, 7684, 7685, 0, 7714, 0, 0, \n  7689, 7690, 7691, 7692, 0, 7694, 7695, 7696, \n  7697, 7698, 7699, 7700, 0, 7702, 7703, 7704, \n  7705, 0, 7707, 7708, 7709, 7710, 0, 7712, \n  0, 7683, 7684, 7685, 7686, 7714, 7687, 7688, \n  7689, 7690, 7691, 0, 7693, 7694, 7695, 7696, \n  7697, 7698, 7699, 7700, 7701, 7702, 7703, 7704, \n  7705, 7706, 7707, 7708, 7709, 0, 0, 0, \n  0, 0, 7684, 7685, 7686, 0, 7687, 7688, \n  7689, 7690, 7691, 0, 7693, 7694, 7695, 7696, \n  7697, 7698, 7699, 7700, 7701, 7702, 7703, 7704, \n  7705, 7706, 7707, 7708, 7709, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 74, 74, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 78, 78, 78, 78, 2564, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 0, 0, 0, \n  0, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  0, 0, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 0, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  2564, 0, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 7715, 7716, 7717, 7718, 7719, 7720, 7721, \n  7722, 7723, 7724, 7725, 1267, 1267, 78, 78, \n  78, 7726, 7727, 7728, 7729, 7730, 7731, 7732, \n  7733, 7734, 7735, 7736, 7737, 7738, 7739, 7740, \n  7741, 7742, 7743, 7744, 7745, 7746, 7747, 7748, \n  7749, 7750, 7751, 7752, 7753, 7754, 7755, 7756, \n  78, 7757, 7758, 7759, 7760, 7761, 7762, 7763, \n  7764, 7765, 7766, 7767, 7768, 7769, 7770, 7771, \n  7772, 7773, 7774, 7775, 7776, 7777, 7778, 7779, \n  7780, 7781, 7782, 7783, 7784, 7785, 7786, 7787, \n  7788, 7789, 7790, 7791, 7792, 7793, 7794, 7795, \n  7796, 7797, 7798, 7799, 7800, 7801, 7802, 7803, \n  7804, 7805, 7806, 7807, 7808, 7809, 7810, 7811, \n  7812, 7813, 7814, 7815, 7816, 7817, 78, 78, \n  78, 7818, 7819, 7820, 7821, 7822, 7823, 7824, \n  7825, 7826, 7827, 7828, 7829, 7830, 7831, 7832, \n  7833, 7834, 7835, 7836, 7837, 7838, 7839, 7840, \n  7841, 7842, 7843, 7844, 7844, 7844, 7844, 7845, \n  7844, 7846, 7845, 7845, 7845, 7845, 7845, 7845, \n  7845, 7845, 7845, 7845, 7844, 7844, 7844, 7844, \n  7844, 7844, 7844, 7844, 7844, 7844, 7844, 7844, \n  7844, 7844, 7844, 7844, 7844, 7844, 78, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 7847, \n  7847, 7847, 7847, 7847, 7847, 7847, 7847, 7847, \n  7847, 7847, 7847, 7847, 7847, 7847, 7847, 7847, \n  7847, 7847, 7847, 7847, 7847, 7847, 7847, 7847, \n  7847, 7848, 7849, 7850, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 7851, 7852, 7853, 7854, 7855, 7856, 7857, \n  7858, 7859, 7860, 7861, 7862, 7863, 7864, 7865, \n  7866, 7867, 7868, 7869, 7870, 7871, 7872, 7873, \n  7874, 7875, 7876, 7877, 7878, 7879, 7880, 7881, \n  7882, 7883, 7884, 7885, 7886, 7887, 7888, 7889, \n  7890, 7891, 7892, 7893, 7894, 0, 0, 0, \n  0, 7895, 7896, 7897, 7898, 7899, 7900, 7901, \n  7902, 7903, 0, 0, 0, 0, 0, 0, \n  0, 7904, 7905, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 2709, 2709, 2709, 2709, 2709, 2709, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 80, 78, 78, 80, 80, 80, \n  80, 80, 80, 80, 80, 80, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 80, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 80, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 78, 78, 80, \n  80, 78, 80, 80, 80, 78, 78, 80, \n  80, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 80, 80, 80, 80, \n  2564, 2564, 2564, 2564, 2564, 80, 80, 80, \n  80, 80, 80, 80, 80, 80, 80, 80, \n  80, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 78, 78, 80, 2564, 80, 78, \n  80, 2564, 2564, 2564, 7906, 7906, 7906, 7906, \n  7906, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  80, 2564, 80, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 80, 78, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 80, 80, 2564, 2564, 2564, 2564, \n  78, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 78, 78, 78, 78, 78, 78, 78, \n  80, 80, 78, 78, 80, 80, 80, 80, \n  80, 80, 80, 2564, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  80, 78, 78, 80, 80, 80, 80, 78, \n  78, 80, 78, 78, 78, 78, 2564, 2564, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 2564, 80, 78, \n  78, 80, 78, 78, 78, 78, 78, 78, \n  78, 78, 80, 80, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 80, 78, 78, \n  78, 78, 78, 80, 80, 80, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 80, 80, 80, 78, 78, 78, \n  78, 78, 78, 78, 78, 80, 80, 80, \n  78, 78, 80, 78, 80, 78, 78, 78, \n  78, 80, 78, 78, 78, 78, 78, 78, \n  80, 78, 78, 78, 80, 78, 78, 78, \n  78, 78, 78, 80, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 78, \n  78, 78, 78, 78, 80, 2564, 80, 80, \n  80, 2564, 2564, 2564, 78, 78, 2564, 2564, \n  2564, 2564, 0, 0, 0, 2564, 2564, 2564, \n  2564, 80, 80, 80, 80, 80, 80, 78, \n  78, 78, 80, 78, 2564, 2564, 0, 0, \n  0, 80, 78, 78, 80, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 0, 0, \n  0, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 0, 0, 0, 0, 0, \n  0, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 0, 0, 0, \n  0, 2564, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 0, 0, 0, \n  0, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 0, 0, 0, 0, 0, 0, 0, \n  0, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 0, 0, 0, 0, 0, \n  0, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 0, 0, 0, 0, 0, 0, 0, \n  0, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 0, \n  0, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 0, 0, 0, \n  0, 78, 78, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 74, 74, 74, 74, 74, 74, 74, \n  74, 74, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 78, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 78, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 0, 0, 0, 0, 0, 0, 0, \n  0, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 0, \n  0, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 0, 0, \n  0, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 0, 0, 0, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  0, 2564, 0, 0, 0, 0, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 2564, 2564, 0, 0, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 2564, 2564, 0, 0, 0, 0, \n  2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, \n  2564, 2564, 0, 0, 0, 0, 0, 0, \n  0, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 0, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 78, 78, 78, 78, 78, 78, 78, \n  78, 6553, 6554, 6555, 6556, 6557, 6558, 6559, \n  6560, 6561, 6562, 78, 0, 0, 0, 0, \n  0, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 0, \n  0, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 0, \n  0, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 7907, 7908, 7909, 7910, 7911, 4644, 7912, \n  7913, 7914, 7915, 4645, 7916, 7917, 7918, 4646, \n  7919, 7920, 7921, 7922, 7923, 7924, 7925, 7926, \n  7927, 7928, 7929, 7930, 4704, 7931, 7932, 7933, \n  7934, 7935, 7936, 7937, 7938, 7939, 4709, 4647, \n  4648, 4710, 7940, 7941, 4455, 7942, 4649, 7943, \n  7944, 7945, 7946, 7946, 7946, 7947, 7948, 7949, \n  7950, 7951, 7952, 7953, 7954, 7955, 7956, 7957, \n  7958, 7959, 7960, 7961, 7962, 7963, 7964, 7964, \n  4712, 7965, 7966, 7967, 7968, 4651, 7969, 7970, \n  7971, 4608, 7972, 7973, 7974, 7975, 7976, 7977, \n  7978, 7979, 7980, 7981, 7982, 7983, 7984, 7985, \n  7986, 7987, 7988, 7989, 7990, 7991, 7992, 7993, \n  7994, 7995, 7996, 7997, 7997, 7998, 7999, 8000, \n  4451, 8001, 8002, 8003, 8004, 8005, 8006, 8007, \n  8008, 4656, 8009, 8010, 8011, 8012, 8013, 8014, \n  8015, 8016, 8017, 8018, 8019, 8020, 8021, 8022, \n  8023, 8024, 8025, 8026, 8027, 8028, 8029, 4397, \n  8030, 8031, 8032, 8032, 8033, 8034, 8034, 8035, \n  8036, 8037, 8038, 8039, 8040, 8041, 8042, 8043, \n  8044, 8045, 8046, 8047, 4657, 8048, 8049, 8050, \n  8051, 4724, 8051, 8052, 4659, 8053, 8054, 8055, \n  8056, 4660, 4370, 8057, 8058, 8059, 8060, 8061, \n  8062, 8063, 8064, 8065, 8066, 8067, 8068, 8069, \n  8070, 8071, 8072, 8073, 8074, 8075, 8076, 8077, \n  8078, 4661, 8079, 8080, 8081, 8082, 8083, 8084, \n  4663, 8085, 8086, 8087, 8088, 8089, 8090, 8091, \n  8092, 4398, 4732, 8093, 8094, 8095, 8096, 8097, \n  8098, 8099, 8100, 4664, 8101, 8102, 8103, 8104, \n  4775, 8105, 8106, 8107, 8108, 8109, 8110, 8111, \n  8112, 8113, 8114, 8115, 8116, 8117, 4468, 8118, \n  8119, 8120, 8121, 8122, 8123, 8124, 8125, 8126, \n  8127, 8128, 4665, 4555, 8129, 8130, 8131, 8132, \n  8133, 8134, 8135, 8136, 4736, 8137, 8138, 8139, \n  8140, 8141, 8142, 8143, 8144, 4737, 8145, 8146, \n  8147, 8148, 8149, 8150, 8151, 8152, 8153, 8154, \n  8155, 8156, 4739, 8157, 8158, 8159, 8160, 8161, \n  8162, 8163, 8164, 8165, 8166, 8167, 8167, 8168, \n  8169, 4741, 8170, 8171, 8172, 8173, 8174, 8175, \n  8176, 4454, 8177, 8178, 8179, 8180, 8181, 8182, \n  8183, 4747, 8184, 8185, 8186, 8187, 8188, 8189, \n  8189, 4748, 4777, 8190, 8191, 8192, 8193, 8194, \n  4416, 4750, 8195, 8196, 4676, 8197, 8198, 4630, \n  8199, 8200, 4680, 8201, 8202, 8203, 8204, 8204, \n  8205, 8206, 8207, 8208, 8209, 8210, 8211, 8212, \n  8213, 8214, 8215, 8216, 8217, 8218, 8219, 8220, \n  8221, 8222, 8223, 8224, 8225, 8226, 8227, 8228, \n  8229, 8230, 8231, 4686, 8232, 8233, 8234, 8235, \n  8236, 8237, 8238, 8239, 8240, 8241, 8242, 8243, \n  8244, 8245, 8246, 8247, 8033, 8248, 8249, 8250, \n  8251, 8252, 8253, 8254, 8255, 8256, 8257, 8258, \n  8259, 4472, 8260, 8261, 8262, 8263, 8264, 8265, \n  4689, 8266, 8267, 8268, 8269, 8270, 8271, 8272, \n  8273, 8274, 8275, 8276, 8277, 8278, 8279, 8280, \n  8281, 8282, 8283, 8284, 8285, 4411, 8286, 8287, \n  8288, 8289, 8290, 8291, 4757, 8292, 8293, 8294, \n  8295, 8296, 8297, 8298, 8299, 8300, 8301, 8302, \n  8303, 8304, 8305, 8306, 8307, 8308, 8309, 8310, \n  8311, 4762, 4763, 8312, 8313, 8314, 8315, 8316, \n  8317, 8318, 8319, 8320, 8321, 8322, 8323, 8324, \n  4764, 8325, 8326, 8327, 8328, 8329, 8330, 8331, \n  8332, 8333, 8334, 8335, 8336, 8337, 8338, 8339, \n  8340, 8341, 8342, 8343, 8344, 8345, 8346, 8347, \n  8348, 8349, 8350, 8351, 8352, 8353, 8354, 4770, \n  4770, 8355, 8356, 8357, 8358, 8359, 8360, 8361, \n  8362, 8363, 8364, 4771, 8365, 8366, 8367, 8368, \n  8369, 8370, 8371, 8372, 8373, 8374, 8375, 8376, \n  8377, 8378, 8379, 8380, 8381, 8382, 8383, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 0, 0, 0, 0, \n  0, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 3211, 3211, 3211, 3211, 3211, \n  3211, 3211, 3211, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 1509, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 8384, 8384, 8384, 8384, 8384, 8384, 8384, \n  8384, 8384, 8384, 8384, 8384, 8384, 8384, 8384, \n  8384, 8384, 8384, 8384, 8384, 8384, 8384, 8384, \n  8384, 8384, 8384, 8384, 8384, 8384, 8384, 8384, \n  8384, 8384, 8384, 8384, 8384, 8384, 8384, 8384, \n  8384, 8384, 8384, 8384, 8384, 8384, 8384, 8384, \n  8384, 8384, 8384, 8384, 8384, 8384, 8384, 8384, \n  8384, 8384, 8384, 8384, 8384, 8384, 8384, 8384, \n  8384, 8384, 8384, 8384, 8384, 8384, 8384, 8384, \n  8384, 8384, 8384, 8384, 8384, 8384, 8384, 8384, \n  8384, 8384, 8384, 8384, 8384, 8384, 8384, 8384, \n  8384, 8384, 8384, 8384, 8384, 8384, 8384, 8384, \n  8384, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 630, 630, 630, 630, 630, 630, 630, \n  630, 630, 630, 630, 630, 630, 630, 630, \n  630, 630, 630, 630, 630, 630, 630, 630, \n  630, 630, 630, 630, 630, 630, 630, 630, \n  630, 630, 630, 630, 630, 630, 630, 630, \n  630, 630, 630, 630, 630, 630, 630, 630, \n  630, 630, 630, 630, 630, 630, 630, 630, \n  630, 630, 630, 630, 630, 630, 630, 630, \n  630, 630, 630, 630, 630, 630, 630, 630, \n  630, 630, 630, 630, 630, 630, 630, 630, \n  630, 630, 630, 630, 630, 630, 630, 630, \n  630, 630, 630, 630, 630, 630, 630, 630, \n  630, 630, 630, 630, 630, 630, 630, 630, \n  630, 630, 630, 630, 630, 630, 630, 630, \n  630, 630, 630, 630, 630, 630, 630, 630, \n  630, 630, 630, 630, 630, 630, 630, 630, \n  630, 630, 630, 630, 630, 630, 630, 630, \n  630, 630, 630, 630, 630, 630, 630, 630, \n  630, 630, 630, 630, 630, 630, 630, 630, \n  630, 630, 630, 630, 630, 630, 630, 630, \n  630, 630, 630, 630, 630, 630, 630, 630, \n  630, 630, 630, 630, 630, 630, 630, 630, \n  630, 630, 630, 630, 630, 630, 630, 630, \n  630, 630, 630, 630, 630, 630, 630, 630, \n  630, 630, 630, 630, 630, 630, 630, 630, \n  630, 630, 630, 630, 630, 630, 630, 630, \n  630, 630, 630, 630, 630, 630, 630, 630, \n  630, 630, 630, 630, 630, 630, 630, 630, \n  630, 630, 630, 630, 630, 630, 630, 630, \n  630, 630, 630, 630, 630, 630, 630, 630, \n  630, 0, 0, 0, 0, 0, 0, 0, \n  0, 0, 0, 0, 0, 0, 0, 0, \n  0, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 4357, \n  4357, 4357, 4357, 4357, 4357, 4357, 4357, 0, \n  0, };\n\nstatic const utf8proc_property_t utf8proc_properties[] = {\n  {0, 0, 0, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,  0x3FF,0,false,  false,false,false,false, 1, 0, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_CC, 0, UTF8PROC_BIDI_CLASS_BN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, true, 0, false, 0, UTF8PROC_BOUNDCLASS_CONTROL, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_CC, 0, UTF8PROC_BIDI_CLASS_S, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, true, 0, false, 0, UTF8PROC_BOUNDCLASS_CONTROL, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_CC, 0, UTF8PROC_BIDI_CLASS_B, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, true, 0, false, 0, UTF8PROC_BOUNDCLASS_LF, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_CC, 0, UTF8PROC_BIDI_CLASS_WS, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, true, 0, false, 0, UTF8PROC_BOUNDCLASS_CONTROL, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_CC, 0, UTF8PROC_BIDI_CLASS_B, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, true, 0, false, 0, UTF8PROC_BOUNDCLASS_CR, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_CC, 0, UTF8PROC_BIDI_CLASS_B, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, true, 0, false, 0, UTF8PROC_BOUNDCLASS_CONTROL, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_ZS, 0, UTF8PROC_BIDI_CLASS_WS, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ES, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 0, 1, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2, 1, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 0, UINT16_MAX, 0, UINT16_MAX, 3, 16, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1, UINT16_MAX, 1, UINT16_MAX, 19, 3, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2, UINT16_MAX, 2, UINT16_MAX, 22, 5, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3, UINT16_MAX, 3, UINT16_MAX, 27, 6, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4, UINT16_MAX, 4, UINT16_MAX, 33, 17, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5, UINT16_MAX, 5, UINT16_MAX, 50, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6, UINT16_MAX, 6, UINT16_MAX, 51, 7, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7, UINT16_MAX, 7, UINT16_MAX, 58, 7, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8, UINT16_MAX, 8, UINT16_MAX, 65, 15, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9, UINT16_MAX, 9, UINT16_MAX, 80, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 10, UINT16_MAX, 10, UINT16_MAX, 81, 5, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 11, UINT16_MAX, 11, UINT16_MAX, 86, 6, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 12, UINT16_MAX, 12, UINT16_MAX, 92, 3, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 13, UINT16_MAX, 13, UINT16_MAX, 95, 9, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 14, UINT16_MAX, 14, UINT16_MAX, 104, 16, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 15, UINT16_MAX, 15, UINT16_MAX, 120, 2, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 16, UINT16_MAX, 16, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 17, UINT16_MAX, 17, UINT16_MAX, 122, 8, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 18, UINT16_MAX, 18, UINT16_MAX, 130, 7, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 19, UINT16_MAX, 19, UINT16_MAX, 137, 7, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 20, UINT16_MAX, 20, UINT16_MAX, 144, 19, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 21, UINT16_MAX, 21, UINT16_MAX, 163, 2, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 22, UINT16_MAX, 22, UINT16_MAX, 165, 6, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 23, UINT16_MAX, 23, UINT16_MAX, 171, 2, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 24, UINT16_MAX, 24, UINT16_MAX, 173, 9, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 25, UINT16_MAX, 25, UINT16_MAX, 182, 6, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PC, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 26, UINT16_MAX, 26, 188, 16, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 27, UINT16_MAX, 27, 204, 3, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 28, UINT16_MAX, 28, 207, 5, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 29, UINT16_MAX, 29, 212, 6, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 30, UINT16_MAX, 30, 218, 17, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 31, UINT16_MAX, 31, 235, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 32, UINT16_MAX, 32, 236, 7, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 33, UINT16_MAX, 33, 243, 8, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 34, UINT16_MAX, 34, 251, 14, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 35, UINT16_MAX, 35, 265, 2, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 36, UINT16_MAX, 36, 267, 5, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 37, UINT16_MAX, 37, 272, 6, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 38, UINT16_MAX, 38, 278, 3, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 39, UINT16_MAX, 39, 281, 9, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 40, UINT16_MAX, 40, 290, 16, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 41, UINT16_MAX, 41, 306, 2, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 42, UINT16_MAX, 42, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 43, UINT16_MAX, 43, 308, 8, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 44, UINT16_MAX, 44, 316, 7, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 45, UINT16_MAX, 45, 323, 8, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 46, UINT16_MAX, 46, 331, 19, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 47, UINT16_MAX, 47, 350, 2, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 48, UINT16_MAX, 48, 352, 7, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 49, UINT16_MAX, 49, 359, 2, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 50, UINT16_MAX, 50, 361, 10, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 51, UINT16_MAX, 51, 371, 6, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_ZS, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_NOBREAK, 52, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 16437, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 377, 3, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 0, UINT16_MAX, 55, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PI, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_BN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, true, true, 1, true, 0, UTF8PROC_BOUNDCLASS_CONTROL, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 16440, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ET, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ET, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, 58, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, 59, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 16444, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 62, 62, 63, UINT16_MAX, 63, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 16448, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, 66, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 14, UINT16_MAX, 67, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PF, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 32836, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 32839, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 32842, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16461, 79, UINT16_MAX, 79, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16464, 82, UINT16_MAX, 82, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16467, 85, UINT16_MAX, 85, UINT16_MAX, 380, 4, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16470, 88, UINT16_MAX, 88, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16473, 91, UINT16_MAX, 91, UINT16_MAX, 384, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16476, 94, UINT16_MAX, 94, UINT16_MAX, 385, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 95, UINT16_MAX, 95, UINT16_MAX, 386, 2, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16480, 98, UINT16_MAX, 98, UINT16_MAX, 388, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16483, 101, UINT16_MAX, 101, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16486, 104, UINT16_MAX, 104, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16489, 107, UINT16_MAX, 107, UINT16_MAX, 389, 4, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16492, 110, UINT16_MAX, 110, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16495, 113, UINT16_MAX, 113, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16498, 116, UINT16_MAX, 116, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16501, 119, UINT16_MAX, 119, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16504, 122, UINT16_MAX, 122, UINT16_MAX, 393, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 123, UINT16_MAX, 123, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16508, 126, UINT16_MAX, 126, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16511, 129, UINT16_MAX, 129, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16514, 132, UINT16_MAX, 132, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16517, 135, UINT16_MAX, 135, UINT16_MAX, 394, 4, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16520, 138, UINT16_MAX, 138, UINT16_MAX, 398, 3, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16523, 141, UINT16_MAX, 141, UINT16_MAX, 401, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 142, UINT16_MAX, 142, UINT16_MAX, 402, 1, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16527, 145, UINT16_MAX, 145, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16530, 148, UINT16_MAX, 148, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16533, 151, UINT16_MAX, 151, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16536, 154, UINT16_MAX, 154, UINT16_MAX, 403, 4, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16539, 157, UINT16_MAX, 157, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 158, UINT16_MAX, 158, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 16543, 161, UINT16_MAX, 161, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16546, UINT16_MAX, 164, UINT16_MAX, 164, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16549, UINT16_MAX, 167, UINT16_MAX, 167, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16552, UINT16_MAX, 170, UINT16_MAX, 170, 407, 4, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16555, UINT16_MAX, 173, UINT16_MAX, 173, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16558, UINT16_MAX, 176, UINT16_MAX, 176, 411, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16561, UINT16_MAX, 179, UINT16_MAX, 179, 412, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 180, UINT16_MAX, 180, 413, 2, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16565, UINT16_MAX, 183, UINT16_MAX, 183, 415, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16568, UINT16_MAX, 186, UINT16_MAX, 186, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16571, UINT16_MAX, 189, UINT16_MAX, 189, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16574, UINT16_MAX, 192, UINT16_MAX, 192, 416, 4, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16577, UINT16_MAX, 195, UINT16_MAX, 195, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16580, UINT16_MAX, 198, UINT16_MAX, 198, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16583, UINT16_MAX, 201, UINT16_MAX, 201, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16586, UINT16_MAX, 204, UINT16_MAX, 204, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16589, UINT16_MAX, 207, UINT16_MAX, 207, 420, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 208, UINT16_MAX, 208, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16593, UINT16_MAX, 211, UINT16_MAX, 211, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16596, UINT16_MAX, 214, UINT16_MAX, 214, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16599, UINT16_MAX, 217, UINT16_MAX, 217, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16602, UINT16_MAX, 220, UINT16_MAX, 220, 421, 4, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16605, UINT16_MAX, 223, UINT16_MAX, 223, 425, 3, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16608, UINT16_MAX, 226, UINT16_MAX, 226, 428, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 227, UINT16_MAX, 227, 429, 1, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16612, UINT16_MAX, 230, UINT16_MAX, 230, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16615, UINT16_MAX, 233, UINT16_MAX, 233, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16618, UINT16_MAX, 236, UINT16_MAX, 236, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16621, UINT16_MAX, 239, UINT16_MAX, 239, 430, 4, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16624, UINT16_MAX, 242, UINT16_MAX, 242, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 243, UINT16_MAX, 243, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16628, UINT16_MAX, 246, UINT16_MAX, 246, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16631, 249, UINT16_MAX, 249, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16634, UINT16_MAX, 252, UINT16_MAX, 252, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16637, 255, UINT16_MAX, 255, UINT16_MAX, 434, 4, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16640, UINT16_MAX, 258, UINT16_MAX, 258, 438, 4, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16643, 261, UINT16_MAX, 261, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16646, UINT16_MAX, 264, UINT16_MAX, 264, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16649, 267, UINT16_MAX, 267, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16652, UINT16_MAX, 270, UINT16_MAX, 270, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16655, 273, UINT16_MAX, 273, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16658, UINT16_MAX, 276, UINT16_MAX, 276, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16661, 279, UINT16_MAX, 279, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16664, UINT16_MAX, 282, UINT16_MAX, 282, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16667, 285, UINT16_MAX, 285, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16670, UINT16_MAX, 288, UINT16_MAX, 288, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16673, 291, UINT16_MAX, 291, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16676, UINT16_MAX, 294, UINT16_MAX, 294, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 295, UINT16_MAX, 295, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 296, UINT16_MAX, 296, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16681, 299, UINT16_MAX, 299, UINT16_MAX, 442, 2, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16684, UINT16_MAX, 302, UINT16_MAX, 302, 444, 2, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16687, 305, UINT16_MAX, 305, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16690, UINT16_MAX, 308, UINT16_MAX, 308, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16693, 311, UINT16_MAX, 311, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16696, UINT16_MAX, 314, UINT16_MAX, 314, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16699, 317, UINT16_MAX, 317, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16702, UINT16_MAX, 320, UINT16_MAX, 320, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16705, 323, UINT16_MAX, 323, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16708, UINT16_MAX, 326, UINT16_MAX, 326, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16711, 329, UINT16_MAX, 329, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16714, UINT16_MAX, 332, UINT16_MAX, 332, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16717, 335, UINT16_MAX, 335, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16720, UINT16_MAX, 338, UINT16_MAX, 338, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16723, 341, UINT16_MAX, 341, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16726, UINT16_MAX, 344, UINT16_MAX, 344, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16729, 347, UINT16_MAX, 347, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16732, UINT16_MAX, 350, UINT16_MAX, 350, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16735, 353, UINT16_MAX, 353, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16738, UINT16_MAX, 356, UINT16_MAX, 356, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 357, UINT16_MAX, 357, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 358, UINT16_MAX, 358, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16743, 361, UINT16_MAX, 361, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16746, UINT16_MAX, 364, UINT16_MAX, 364, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16749, 367, UINT16_MAX, 367, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16752, UINT16_MAX, 370, UINT16_MAX, 370, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16755, 373, UINT16_MAX, 373, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16758, UINT16_MAX, 376, UINT16_MAX, 376, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16761, 379, UINT16_MAX, 379, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16764, UINT16_MAX, 382, UINT16_MAX, 382, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16767, 16769, UINT16_MAX, 8, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 34, UINT16_MAX, 34, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 16771, 389, UINT16_MAX, 389, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 16774, UINT16_MAX, 392, UINT16_MAX, 392, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16777, 395, UINT16_MAX, 395, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16780, UINT16_MAX, 398, UINT16_MAX, 398, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16783, 401, UINT16_MAX, 401, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16786, UINT16_MAX, 404, UINT16_MAX, 404, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 405, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16790, 408, UINT16_MAX, 408, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16793, UINT16_MAX, 411, UINT16_MAX, 411, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16796, 414, UINT16_MAX, 414, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16799, UINT16_MAX, 417, UINT16_MAX, 417, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16802, 420, UINT16_MAX, 420, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16805, UINT16_MAX, 423, UINT16_MAX, 423, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 16808, 426, UINT16_MAX, 426, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 16811, UINT16_MAX, 429, UINT16_MAX, 429, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 430, UINT16_MAX, 430, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 431, UINT16_MAX, 431, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16816, 434, UINT16_MAX, 434, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16819, UINT16_MAX, 437, UINT16_MAX, 437, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16822, 440, UINT16_MAX, 440, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16825, UINT16_MAX, 443, UINT16_MAX, 443, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16828, 446, UINT16_MAX, 446, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16831, UINT16_MAX, 449, UINT16_MAX, 449, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 16834, 16834, 452, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 453, UINT16_MAX, 453, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 454, UINT16_MAX, 454, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16839, 457, UINT16_MAX, 457, UINT16_MAX, 446, 2, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16842, UINT16_MAX, 460, UINT16_MAX, 460, 448, 2, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16845, 463, UINT16_MAX, 463, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16848, UINT16_MAX, 466, UINT16_MAX, 466, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16851, 469, UINT16_MAX, 469, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16854, UINT16_MAX, 472, UINT16_MAX, 472, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 473, UINT16_MAX, 473, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 474, UINT16_MAX, 474, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16859, 477, UINT16_MAX, 477, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16862, UINT16_MAX, 480, UINT16_MAX, 480, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16865, 483, UINT16_MAX, 483, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16868, UINT16_MAX, 486, UINT16_MAX, 486, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16871, 489, UINT16_MAX, 489, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16874, UINT16_MAX, 492, UINT16_MAX, 492, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16877, 495, UINT16_MAX, 495, UINT16_MAX, 450, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16880, UINT16_MAX, 498, UINT16_MAX, 498, 451, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16883, 501, UINT16_MAX, 501, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16886, UINT16_MAX, 504, UINT16_MAX, 504, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16889, 507, UINT16_MAX, 507, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16892, UINT16_MAX, 510, UINT16_MAX, 510, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16895, 513, UINT16_MAX, 513, UINT16_MAX, 452, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16898, UINT16_MAX, 516, UINT16_MAX, 516, 453, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16901, 519, UINT16_MAX, 519, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16904, UINT16_MAX, 522, UINT16_MAX, 522, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16907, 525, UINT16_MAX, 525, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16910, UINT16_MAX, 528, UINT16_MAX, 528, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 529, UINT16_MAX, 529, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 530, UINT16_MAX, 530, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16915, 533, UINT16_MAX, 533, UINT16_MAX, 454, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16918, UINT16_MAX, 536, UINT16_MAX, 536, 455, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16921, 539, UINT16_MAX, 539, UINT16_MAX, 456, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16924, UINT16_MAX, 542, UINT16_MAX, 542, 457, 1, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16927, 545, UINT16_MAX, 545, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16930, UINT16_MAX, 548, UINT16_MAX, 548, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16933, 551, UINT16_MAX, 551, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16936, UINT16_MAX, 554, UINT16_MAX, 554, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16939, 557, UINT16_MAX, 557, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16942, UINT16_MAX, 560, UINT16_MAX, 560, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16945, 563, UINT16_MAX, 563, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16948, UINT16_MAX, 566, UINT16_MAX, 566, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16951, 569, UINT16_MAX, 569, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16954, UINT16_MAX, 572, UINT16_MAX, 572, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16957, 575, UINT16_MAX, 575, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16960, UINT16_MAX, 578, UINT16_MAX, 578, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16963, 581, UINT16_MAX, 581, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16966, 584, UINT16_MAX, 584, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16969, UINT16_MAX, 587, UINT16_MAX, 587, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16972, 590, UINT16_MAX, 590, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16975, UINT16_MAX, 593, UINT16_MAX, 593, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 16978, 596, UINT16_MAX, 596, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 16981, UINT16_MAX, 599, UINT16_MAX, 599, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 18, 18, 44, UINT16_MAX, 44, 458, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 600, UINT16_MAX, 600, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 601, UINT16_MAX, 601, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 602, UINT16_MAX, 602, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 603, UINT16_MAX, 603, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 604, UINT16_MAX, 604, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 605, UINT16_MAX, 605, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 606, UINT16_MAX, 606, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 607, UINT16_MAX, 607, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 608, UINT16_MAX, 608, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 609, UINT16_MAX, 609, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 610, UINT16_MAX, 610, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 611, UINT16_MAX, 611, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 612, UINT16_MAX, 612, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 613, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 614, UINT16_MAX, 614, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 615, UINT16_MAX, 615, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 616, UINT16_MAX, 616, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 617, UINT16_MAX, 617, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 618, UINT16_MAX, 618, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 619, UINT16_MAX, 619, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 620, UINT16_MAX, 620, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 621, UINT16_MAX, 621, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 622, UINT16_MAX, 622, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 623, UINT16_MAX, 623, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 624, UINT16_MAX, 624, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 625, UINT16_MAX, 625, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 626, UINT16_MAX, 626, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 627, UINT16_MAX, 627, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 628, UINT16_MAX, 628, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 629, UINT16_MAX, 629, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 630, UINT16_MAX, 630, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 631, UINT16_MAX, 631, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17016, 634, UINT16_MAX, 634, UINT16_MAX, 459, 5, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17019, UINT16_MAX, 637, UINT16_MAX, 637, 464, 5, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 638, UINT16_MAX, 638, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 639, UINT16_MAX, 639, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 640, UINT16_MAX, 640, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 641, UINT16_MAX, 641, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 642, UINT16_MAX, 642, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 643, UINT16_MAX, 643, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 644, UINT16_MAX, 644, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 645, UINT16_MAX, 645, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 646, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 647, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 648, UINT16_MAX, 648, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 649, UINT16_MAX, 649, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 650, UINT16_MAX, 650, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17035, 653, UINT16_MAX, 653, UINT16_MAX, 469, 5, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17038, UINT16_MAX, 656, UINT16_MAX, 656, 474, 5, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 657, UINT16_MAX, 657, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 658, UINT16_MAX, 658, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 659, UINT16_MAX, 659, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 660, UINT16_MAX, 660, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 661, UINT16_MAX, 661, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 662, UINT16_MAX, 662, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 663, UINT16_MAX, 663, UINT16_MAX, 479, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 664, UINT16_MAX, 664, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 665, UINT16_MAX, 665, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 666, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 667, UINT16_MAX, 667, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 668, UINT16_MAX, 668, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 669, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 670, UINT16_MAX, 670, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 17055, 673, UINT16_MAX, 673, 674, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 17059, 673, 677, 673, 674, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 17062, UINT16_MAX, 677, UINT16_MAX, 674, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 17064, 682, UINT16_MAX, 682, 683, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 17068, 682, 686, 682, 683, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 17071, UINT16_MAX, 686, UINT16_MAX, 683, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 17073, 691, UINT16_MAX, 691, 692, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 17077, 691, 695, 691, 692, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 17080, UINT16_MAX, 695, UINT16_MAX, 692, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17082, 700, UINT16_MAX, 700, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17085, UINT16_MAX, 703, UINT16_MAX, 703, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17088, 706, UINT16_MAX, 706, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17091, UINT16_MAX, 709, UINT16_MAX, 709, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17094, 712, UINT16_MAX, 712, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17097, UINT16_MAX, 715, UINT16_MAX, 715, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17100, 718, UINT16_MAX, 718, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17103, UINT16_MAX, 721, UINT16_MAX, 721, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17106, 724, UINT16_MAX, 724, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17109, UINT16_MAX, 727, UINT16_MAX, 727, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17112, 730, UINT16_MAX, 730, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17115, UINT16_MAX, 733, UINT16_MAX, 733, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17118, 736, UINT16_MAX, 736, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17121, UINT16_MAX, 739, UINT16_MAX, 739, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17124, 742, UINT16_MAX, 742, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17127, UINT16_MAX, 745, UINT16_MAX, 745, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 746, UINT16_MAX, 746, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17131, 749, UINT16_MAX, 749, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17134, UINT16_MAX, 752, UINT16_MAX, 752, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17137, 755, UINT16_MAX, 755, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17140, UINT16_MAX, 758, UINT16_MAX, 758, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17143, 761, UINT16_MAX, 761, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17146, UINT16_MAX, 764, UINT16_MAX, 764, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 765, UINT16_MAX, 765, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 766, UINT16_MAX, 766, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17151, 769, UINT16_MAX, 769, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17154, UINT16_MAX, 772, UINT16_MAX, 772, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17157, 775, UINT16_MAX, 775, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17160, UINT16_MAX, 778, UINT16_MAX, 778, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17163, 781, UINT16_MAX, 781, UINT16_MAX, 480, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17166, UINT16_MAX, 784, UINT16_MAX, 784, 481, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17169, 787, UINT16_MAX, 787, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17172, UINT16_MAX, 790, UINT16_MAX, 790, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17175, 793, UINT16_MAX, 793, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17178, UINT16_MAX, 796, UINT16_MAX, 796, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17181, 17181, 799, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 17184, 802, UINT16_MAX, 802, 803, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 17188, 802, 806, 802, 803, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 17191, UINT16_MAX, 806, UINT16_MAX, 803, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17193, 811, UINT16_MAX, 811, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17196, UINT16_MAX, 814, UINT16_MAX, 814, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 815, UINT16_MAX, 815, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 816, UINT16_MAX, 816, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17201, 819, UINT16_MAX, 819, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17204, UINT16_MAX, 822, UINT16_MAX, 822, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17207, 825, UINT16_MAX, 825, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17210, UINT16_MAX, 828, UINT16_MAX, 828, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17213, 831, UINT16_MAX, 831, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17216, UINT16_MAX, 834, UINT16_MAX, 834, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17219, 837, UINT16_MAX, 837, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17222, UINT16_MAX, 840, UINT16_MAX, 840, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17225, 843, UINT16_MAX, 843, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17228, UINT16_MAX, 846, UINT16_MAX, 846, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17231, 849, UINT16_MAX, 849, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17234, UINT16_MAX, 852, UINT16_MAX, 852, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17237, 855, UINT16_MAX, 855, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17240, UINT16_MAX, 858, UINT16_MAX, 858, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17243, 861, UINT16_MAX, 861, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17246, UINT16_MAX, 864, UINT16_MAX, 864, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17249, 867, UINT16_MAX, 867, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17252, UINT16_MAX, 870, UINT16_MAX, 870, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17255, 873, UINT16_MAX, 873, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17258, UINT16_MAX, 876, UINT16_MAX, 876, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17261, 879, UINT16_MAX, 879, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17264, UINT16_MAX, 882, UINT16_MAX, 882, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17267, 885, UINT16_MAX, 885, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17270, UINT16_MAX, 888, UINT16_MAX, 888, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17273, 891, UINT16_MAX, 891, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17276, UINT16_MAX, 894, UINT16_MAX, 894, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17279, 897, UINT16_MAX, 897, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17282, UINT16_MAX, 900, UINT16_MAX, 900, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17285, 903, UINT16_MAX, 903, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17288, UINT16_MAX, 906, UINT16_MAX, 906, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17291, 909, UINT16_MAX, 909, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17294, UINT16_MAX, 912, UINT16_MAX, 912, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17297, 915, UINT16_MAX, 915, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17300, UINT16_MAX, 918, UINT16_MAX, 918, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17303, 921, UINT16_MAX, 921, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17306, UINT16_MAX, 924, UINT16_MAX, 924, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 925, UINT16_MAX, 925, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 926, UINT16_MAX, 926, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17311, 929, UINT16_MAX, 929, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17314, UINT16_MAX, 932, UINT16_MAX, 932, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 933, UINT16_MAX, 933, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 934, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 935, UINT16_MAX, 935, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 936, UINT16_MAX, 936, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 937, UINT16_MAX, 937, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 938, UINT16_MAX, 938, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17323, 941, UINT16_MAX, 941, UINT16_MAX, 482, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17326, UINT16_MAX, 944, UINT16_MAX, 944, 483, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17329, 947, UINT16_MAX, 947, UINT16_MAX, 484, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17332, UINT16_MAX, 950, UINT16_MAX, 950, 485, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17335, 953, UINT16_MAX, 953, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17338, UINT16_MAX, 956, UINT16_MAX, 956, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17341, 959, UINT16_MAX, 959, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17344, UINT16_MAX, 962, UINT16_MAX, 962, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17347, 965, UINT16_MAX, 965, UINT16_MAX, 486, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17350, UINT16_MAX, 968, UINT16_MAX, 968, 487, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17353, 971, UINT16_MAX, 971, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17356, UINT16_MAX, 974, UINT16_MAX, 974, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17359, 977, UINT16_MAX, 977, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17362, UINT16_MAX, 980, UINT16_MAX, 980, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 981, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 982, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 983, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 984, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 985, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 986, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 987, UINT16_MAX, 987, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 988, UINT16_MAX, 988, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 989, UINT16_MAX, 989, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 990, UINT16_MAX, 990, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 991, UINT16_MAX, 991, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 992, UINT16_MAX, 992, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 993, UINT16_MAX, 993, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 994, UINT16_MAX, 994, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 995, UINT16_MAX, 995, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 996, UINT16_MAX, 996, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 997, UINT16_MAX, 997, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 998, UINT16_MAX, 998, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 999, UINT16_MAX, 999, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1000, UINT16_MAX, 1000, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1001, UINT16_MAX, 1001, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1002, UINT16_MAX, 1002, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1003, UINT16_MAX, 1003, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1004, UINT16_MAX, 1004, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1005, UINT16_MAX, 1005, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1006, UINT16_MAX, 1006, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1007, UINT16_MAX, 1007, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1008, UINT16_MAX, 1008, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1009, UINT16_MAX, 1009, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1010, UINT16_MAX, 1010, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1011, UINT16_MAX, 1011, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1012, UINT16_MAX, 1012, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1013, UINT16_MAX, 1013, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1014, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1015, UINT16_MAX, 1015, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1016, UINT16_MAX, 1016, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1017, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1018, UINT16_MAX, 1018, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1019, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1020, UINT16_MAX, 1020, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1021, UINT16_MAX, 1021, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1022, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1023, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1024, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1025, UINT16_MAX, 1025, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1026, UINT16_MAX, 1026, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1027, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1028, UINT16_MAX, 1028, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1029, UINT16_MAX, 1029, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1030, UINT16_MAX, 1030, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1031, UINT16_MAX, 1031, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1032, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1033, UINT16_MAX, 1033, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1034, UINT16_MAX, 1034, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1035, UINT16_MAX, 1035, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1036, UINT16_MAX, 1036, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1037, UINT16_MAX, 1037, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1038, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1039, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1040, UINT16_MAX, 1040, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1041, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1042, UINT16_MAX, 1042, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1043, UINT16_MAX, 1043, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1044, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1045, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1046, UINT16_MAX, 1046, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1047, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1048, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1049, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1050, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1051, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1052, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1053, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1054, UINT16_MAX, 1054, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1055, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1056, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1057, UINT16_MAX, 1057, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1058, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1059, UINT16_MAX, 1059, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1060, UINT16_MAX, 1060, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1061, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1062, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1063, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1064, UINT16_MAX, 1064, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1065, UINT16_MAX, 1065, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1066, UINT16_MAX, 1066, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1067, UINT16_MAX, 1067, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1068, UINT16_MAX, 1068, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1069, UINT16_MAX, 1069, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1070, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1071, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1072, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1073, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1074, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1075, UINT16_MAX, 1075, 488, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1076, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1077, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1078, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1079, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1080, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1081, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1082, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1083, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1084, UINT16_MAX, 1084, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1085, UINT16_MAX, 1085, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1086, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1087, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1088, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1089, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1090, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1091, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1092, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1093, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1094, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1095, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1096, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1097, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1098, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1099, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1100, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1101, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1102, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 7, UINT16_MAX, 1103, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1104, UINT16_MAX, 1105, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 9, UINT16_MAX, 1106, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 17, UINT16_MAX, 1107, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1050, UINT16_MAX, 1108, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1052, UINT16_MAX, 1109, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1058, UINT16_MAX, 1110, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 22, UINT16_MAX, 1111, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 24, UINT16_MAX, 1112, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1113, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1114, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 17499, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 17501, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 17503, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 17505, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 17507, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 17509, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 620, UINT16_MAX, 1127, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 11, UINT16_MAX, 1128, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 18, UINT16_MAX, 1129, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 23, UINT16_MAX, 1130, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1131, UINT16_MAX, 1132, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, true, false, false, false, false, 0, true, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, true, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 232, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, true, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 220, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, true, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 216, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, true, false, false, false, false, 0, true, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 202, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, true, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 220, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, true, false, false, false, false, 0, true, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 202, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, true, false, false, false, false, 0, true, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 1, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, true, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 1, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, true, false, false, false, false, 0, true, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, 1133, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, true, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, 1134, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, true, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, 1135, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, true, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, 17520, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, true, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 240, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, 1138, 1139, UINT16_MAX, 1139, 1023, 0, true, false, false, false, false, 0, true, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, true, false, 0, true, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 233, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, true, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 234, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, true, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1140, UINT16_MAX, 1140, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1141, UINT16_MAX, 1141, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1142, UINT16_MAX, 1142, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1143, UINT16_MAX, 1143, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 1144, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1145, UINT16_MAX, 1145, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1146, UINT16_MAX, 1146, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 17531, UINT16_MAX, 1149, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1150, UINT16_MAX, 1150, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1151, UINT16_MAX, 1151, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1152, UINT16_MAX, 1152, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, 0, 1153, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1154, UINT16_MAX, 1154, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 16444, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 17539, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17541, 1159, UINT16_MAX, 1159, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, 0, 1160, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17545, 1163, UINT16_MAX, 1163, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17548, 1166, UINT16_MAX, 1166, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17551, 1169, UINT16_MAX, 1169, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17554, 1172, UINT16_MAX, 1172, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17557, 1175, UINT16_MAX, 1175, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17560, 1178, UINT16_MAX, 1178, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17563, 33949, 1184, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1185, UINT16_MAX, 1185, UINT16_MAX, 489, 7, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1186, UINT16_MAX, 1186, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1187, UINT16_MAX, 1187, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1188, UINT16_MAX, 1188, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1189, UINT16_MAX, 1189, UINT16_MAX, 496, 4, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1190, UINT16_MAX, 1190, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1191, UINT16_MAX, 1191, UINT16_MAX, 500, 5, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1192, UINT16_MAX, 1192, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1138, UINT16_MAX, 1138, UINT16_MAX, 505, 7, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1193, UINT16_MAX, 1193, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1194, UINT16_MAX, 1194, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 62, UINT16_MAX, 62, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1195, UINT16_MAX, 1195, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1196, UINT16_MAX, 1196, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1197, UINT16_MAX, 1197, UINT16_MAX, 512, 4, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1198, UINT16_MAX, 1198, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1199, UINT16_MAX, 1199, UINT16_MAX, 516, 1, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1200, UINT16_MAX, 1200, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1201, UINT16_MAX, 1201, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1202, UINT16_MAX, 1202, UINT16_MAX, 517, 6, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1203, UINT16_MAX, 1203, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1204, UINT16_MAX, 1204, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1205, UINT16_MAX, 1205, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1206, UINT16_MAX, 1206, UINT16_MAX, 523, 5, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17591, 1209, UINT16_MAX, 1209, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17594, 1212, UINT16_MAX, 1212, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17597, UINT16_MAX, 1215, UINT16_MAX, 1215, 528, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17600, UINT16_MAX, 1218, UINT16_MAX, 1218, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17603, UINT16_MAX, 1221, UINT16_MAX, 1221, 529, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17606, UINT16_MAX, 1224, UINT16_MAX, 1224, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17609, 33995, 1230, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1231, UINT16_MAX, 1231, 530, 8, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1232, UINT16_MAX, 1232, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1233, UINT16_MAX, 1233, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1234, UINT16_MAX, 1234, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1235, UINT16_MAX, 1235, 538, 4, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1236, UINT16_MAX, 1236, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1237, UINT16_MAX, 1237, 542, 6, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1238, UINT16_MAX, 1238, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1139, UINT16_MAX, 1139, 548, 8, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1239, UINT16_MAX, 1239, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1240, UINT16_MAX, 1240, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 63, UINT16_MAX, 63, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1241, UINT16_MAX, 1241, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1242, UINT16_MAX, 1242, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1243, UINT16_MAX, 1243, 556, 4, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1244, UINT16_MAX, 1244, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1245, UINT16_MAX, 1245, 560, 2, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1200, 1246, UINT16_MAX, 1246, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1246, UINT16_MAX, 1246, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1247, UINT16_MAX, 1247, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1248, UINT16_MAX, 1248, 562, 8, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1249, UINT16_MAX, 1249, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1250, UINT16_MAX, 1250, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1251, UINT16_MAX, 1251, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1252, UINT16_MAX, 1252, 570, 6, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17637, UINT16_MAX, 1255, UINT16_MAX, 1255, 576, 3, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17640, UINT16_MAX, 1258, UINT16_MAX, 1258, 579, 3, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17643, UINT16_MAX, 1261, UINT16_MAX, 1261, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17646, UINT16_MAX, 1264, UINT16_MAX, 1264, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17649, UINT16_MAX, 1267, UINT16_MAX, 1267, 582, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1268, UINT16_MAX, 1268, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 1186, 1186, 1232, UINT16_MAX, 1232, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 1192, 1192, 1238, UINT16_MAX, 1238, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 1248, UINT16_MAX, UINT16_MAX, 1269, UINT16_MAX, 583, 2, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17654, UINT16_MAX, UINT16_MAX, 1272, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17657, UINT16_MAX, UINT16_MAX, 1275, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 1203, 1203, 1249, UINT16_MAX, 1249, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 1198, 1198, 1244, UINT16_MAX, 1244, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1276, UINT16_MAX, 1276, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1277, UINT16_MAX, 1277, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1278, UINT16_MAX, 1278, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1279, UINT16_MAX, 1279, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1280, UINT16_MAX, 1280, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1281, UINT16_MAX, 1281, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1282, UINT16_MAX, 1282, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1283, UINT16_MAX, 1283, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1284, UINT16_MAX, 1284, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1285, UINT16_MAX, 1285, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1286, UINT16_MAX, 1286, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1287, UINT16_MAX, 1287, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1288, UINT16_MAX, 1288, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1289, UINT16_MAX, 1289, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1290, UINT16_MAX, 1290, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1291, UINT16_MAX, 1291, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1292, UINT16_MAX, 1292, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1293, UINT16_MAX, 1293, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1294, UINT16_MAX, 1294, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1295, UINT16_MAX, 1295, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1296, UINT16_MAX, 1296, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1297, UINT16_MAX, 1297, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1298, UINT16_MAX, 1298, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1299, UINT16_MAX, 1299, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1300, UINT16_MAX, 1300, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 1193, 1193, 1239, UINT16_MAX, 1239, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 1199, 1199, 1245, UINT16_MAX, 1245, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 1301, UINT16_MAX, 1302, UINT16_MAX, 1302, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1303, UINT16_MAX, 1303, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 1238, 1192, UINT16_MAX, 1192, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 1189, 1189, 1235, UINT16_MAX, 1235, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1304, UINT16_MAX, 1304, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1305, UINT16_MAX, 1305, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 1246, 1306, UINT16_MAX, 1306, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1307, UINT16_MAX, 1307, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1308, UINT16_MAX, 1308, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1309, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1310, UINT16_MAX, 1310, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1311, UINT16_MAX, 1311, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1312, UINT16_MAX, 1312, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17697, 1315, UINT16_MAX, 1315, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17700, 1318, UINT16_MAX, 1318, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1319, UINT16_MAX, 1319, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17704, 1322, UINT16_MAX, 1322, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1323, UINT16_MAX, 1323, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1324, UINT16_MAX, 1324, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1325, UINT16_MAX, 1325, UINT16_MAX, 585, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17710, 1328, UINT16_MAX, 1328, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1329, UINT16_MAX, 1329, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1330, UINT16_MAX, 1330, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1331, UINT16_MAX, 1331, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1332, UINT16_MAX, 1332, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17717, 1335, UINT16_MAX, 1335, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17720, 1338, UINT16_MAX, 1338, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17723, 1341, UINT16_MAX, 1341, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1342, UINT16_MAX, 1342, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1343, UINT16_MAX, 1343, UINT16_MAX, 586, 2, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1344, UINT16_MAX, 1344, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1345, UINT16_MAX, 1345, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1346, UINT16_MAX, 1346, UINT16_MAX, 588, 1, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1347, UINT16_MAX, 1347, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1348, UINT16_MAX, 1348, UINT16_MAX, 589, 3, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1349, UINT16_MAX, 1349, UINT16_MAX, 592, 2, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1350, UINT16_MAX, 1350, UINT16_MAX, 594, 1, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1351, UINT16_MAX, 1351, UINT16_MAX, 595, 4, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17736, 1354, UINT16_MAX, 1354, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1355, UINT16_MAX, 1355, UINT16_MAX, 599, 1, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1356, UINT16_MAX, 1356, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1357, UINT16_MAX, 1357, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1358, UINT16_MAX, 1358, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1359, UINT16_MAX, 1359, UINT16_MAX, 600, 1, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1360, UINT16_MAX, 1360, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1361, UINT16_MAX, 1361, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1362, UINT16_MAX, 1362, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1363, UINT16_MAX, 1363, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1364, UINT16_MAX, 1364, UINT16_MAX, 601, 4, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1365, UINT16_MAX, 1365, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1366, UINT16_MAX, 1366, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1367, UINT16_MAX, 1367, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1368, UINT16_MAX, 1368, UINT16_MAX, 605, 1, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1369, UINT16_MAX, 1369, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1370, UINT16_MAX, 1370, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1371, UINT16_MAX, 1371, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1372, UINT16_MAX, 1372, UINT16_MAX, 606, 1, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1373, UINT16_MAX, 1373, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1374, UINT16_MAX, 1374, UINT16_MAX, 607, 1, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1375, UINT16_MAX, 1375, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1376, UINT16_MAX, 1376, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1377, UINT16_MAX, 1377, 608, 2, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1378, UINT16_MAX, 1378, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1379, UINT16_MAX, 1379, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1380, UINT16_MAX, 1380, 610, 1, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1381, UINT16_MAX, 1381, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1382, UINT16_MAX, 1382, 611, 3, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1383, UINT16_MAX, 1383, 614, 2, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1384, UINT16_MAX, 1384, 616, 1, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1385, UINT16_MAX, 1385, 617, 4, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17770, UINT16_MAX, 1388, UINT16_MAX, 1388, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1389, UINT16_MAX, 1389, 621, 1, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1390, UINT16_MAX, 1390, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1391, UINT16_MAX, 1391, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1392, UINT16_MAX, 1392, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1393, UINT16_MAX, 1393, 622, 1, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1394, UINT16_MAX, 1394, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1395, UINT16_MAX, 1395, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1396, UINT16_MAX, 1396, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1397, UINT16_MAX, 1397, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1398, UINT16_MAX, 1398, 623, 4, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1399, UINT16_MAX, 1399, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1400, UINT16_MAX, 1400, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1401, UINT16_MAX, 1401, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1402, UINT16_MAX, 1402, 627, 1, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1403, UINT16_MAX, 1403, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1404, UINT16_MAX, 1404, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1405, UINT16_MAX, 1405, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1406, UINT16_MAX, 1406, 628, 1, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1407, UINT16_MAX, 1407, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1408, UINT16_MAX, 1408, 629, 1, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1409, UINT16_MAX, 1409, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1410, UINT16_MAX, 1410, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17795, UINT16_MAX, 1413, UINT16_MAX, 1413, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17798, UINT16_MAX, 1416, UINT16_MAX, 1416, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1417, UINT16_MAX, 1417, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17802, UINT16_MAX, 1420, UINT16_MAX, 1420, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1421, UINT16_MAX, 1421, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1422, UINT16_MAX, 1422, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1423, UINT16_MAX, 1423, 630, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17808, UINT16_MAX, 1426, UINT16_MAX, 1426, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1427, UINT16_MAX, 1427, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1428, UINT16_MAX, 1428, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1429, UINT16_MAX, 1429, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1430, UINT16_MAX, 1430, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17815, UINT16_MAX, 1433, UINT16_MAX, 1433, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17818, UINT16_MAX, 1436, UINT16_MAX, 1436, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17821, UINT16_MAX, 1439, UINT16_MAX, 1439, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1440, UINT16_MAX, 1440, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1441, UINT16_MAX, 1441, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1442, UINT16_MAX, 1442, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1443, UINT16_MAX, 1443, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1444, UINT16_MAX, 1444, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1445, UINT16_MAX, 1445, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1446, UINT16_MAX, 1446, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1447, UINT16_MAX, 1447, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1448, UINT16_MAX, 1448, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1449, UINT16_MAX, 1449, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1450, UINT16_MAX, 1450, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1451, UINT16_MAX, 1451, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1452, UINT16_MAX, 1452, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1453, UINT16_MAX, 1453, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1454, UINT16_MAX, 1454, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1455, UINT16_MAX, 1455, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1456, UINT16_MAX, 1456, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1457, UINT16_MAX, 1457, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1458, UINT16_MAX, 1458, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1459, UINT16_MAX, 1459, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1460, UINT16_MAX, 1460, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1461, UINT16_MAX, 1461, UINT16_MAX, 631, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1462, UINT16_MAX, 1462, 632, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17847, 1465, UINT16_MAX, 1465, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17850, UINT16_MAX, 1468, UINT16_MAX, 1468, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1469, UINT16_MAX, 1469, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1470, UINT16_MAX, 1470, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1471, UINT16_MAX, 1471, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1472, UINT16_MAX, 1472, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1473, UINT16_MAX, 1473, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1474, UINT16_MAX, 1474, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1475, UINT16_MAX, 1475, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1476, UINT16_MAX, 1476, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1477, UINT16_MAX, 1477, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1478, UINT16_MAX, 1478, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_ME, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1479, UINT16_MAX, 1479, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1480, UINT16_MAX, 1480, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1481, UINT16_MAX, 1481, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1482, UINT16_MAX, 1482, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1483, UINT16_MAX, 1483, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1484, UINT16_MAX, 1484, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1485, UINT16_MAX, 1485, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1486, UINT16_MAX, 1486, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1487, UINT16_MAX, 1487, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1488, UINT16_MAX, 1488, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1489, UINT16_MAX, 1489, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1490, UINT16_MAX, 1490, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1491, UINT16_MAX, 1491, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1492, UINT16_MAX, 1492, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1493, UINT16_MAX, 1493, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1494, UINT16_MAX, 1494, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1495, UINT16_MAX, 1495, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1496, UINT16_MAX, 1496, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1497, UINT16_MAX, 1497, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1498, UINT16_MAX, 1498, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1499, UINT16_MAX, 1499, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1500, UINT16_MAX, 1500, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1501, UINT16_MAX, 1501, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1502, UINT16_MAX, 1502, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1503, UINT16_MAX, 1503, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1504, UINT16_MAX, 1504, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1505, UINT16_MAX, 1505, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1506, UINT16_MAX, 1506, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1507, UINT16_MAX, 1507, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1508, UINT16_MAX, 1508, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1509, UINT16_MAX, 1509, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1510, UINT16_MAX, 1510, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1511, UINT16_MAX, 1511, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1512, UINT16_MAX, 1512, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1513, UINT16_MAX, 1513, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1514, UINT16_MAX, 1514, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1515, UINT16_MAX, 1515, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1516, UINT16_MAX, 1516, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1517, UINT16_MAX, 1517, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1518, UINT16_MAX, 1518, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1519, UINT16_MAX, 1519, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1520, UINT16_MAX, 1520, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1521, UINT16_MAX, 1521, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1522, UINT16_MAX, 1522, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1523, UINT16_MAX, 1523, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1524, UINT16_MAX, 1524, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1525, UINT16_MAX, 1525, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1526, UINT16_MAX, 1526, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1527, UINT16_MAX, 1527, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1528, UINT16_MAX, 1528, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1529, UINT16_MAX, 1529, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1530, UINT16_MAX, 1530, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1531, UINT16_MAX, 1531, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1532, UINT16_MAX, 1532, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1533, UINT16_MAX, 1533, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17918, 1536, UINT16_MAX, 1536, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17921, UINT16_MAX, 1539, UINT16_MAX, 1539, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1540, UINT16_MAX, 1540, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1541, UINT16_MAX, 1541, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1542, UINT16_MAX, 1542, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1543, UINT16_MAX, 1543, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1544, UINT16_MAX, 1544, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1545, UINT16_MAX, 1545, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1546, UINT16_MAX, 1546, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1547, UINT16_MAX, 1547, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1548, UINT16_MAX, 1548, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1549, UINT16_MAX, 1549, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1550, UINT16_MAX, 1550, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1551, UINT16_MAX, 1551, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1552, UINT16_MAX, 1552, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17937, 1555, UINT16_MAX, 1555, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17940, UINT16_MAX, 1558, UINT16_MAX, 1558, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17943, 1561, UINT16_MAX, 1561, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17946, UINT16_MAX, 1564, UINT16_MAX, 1564, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1565, UINT16_MAX, 1565, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1566, UINT16_MAX, 1566, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17951, 1569, UINT16_MAX, 1569, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17954, UINT16_MAX, 1572, UINT16_MAX, 1572, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1573, UINT16_MAX, 1573, UINT16_MAX, 633, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1574, UINT16_MAX, 1574, 634, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17959, 1577, UINT16_MAX, 1577, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17962, UINT16_MAX, 1580, UINT16_MAX, 1580, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17965, 1583, UINT16_MAX, 1583, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17968, UINT16_MAX, 1586, UINT16_MAX, 1586, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17971, 1589, UINT16_MAX, 1589, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17974, UINT16_MAX, 1592, UINT16_MAX, 1592, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1593, UINT16_MAX, 1593, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1594, UINT16_MAX, 1594, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17979, 1597, UINT16_MAX, 1597, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17982, UINT16_MAX, 1600, UINT16_MAX, 1600, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17985, 1603, UINT16_MAX, 1603, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17988, UINT16_MAX, 1606, UINT16_MAX, 1606, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17991, 1609, UINT16_MAX, 1609, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 17994, UINT16_MAX, 1612, UINT16_MAX, 1612, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1613, UINT16_MAX, 1613, UINT16_MAX, 635, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1614, UINT16_MAX, 1614, 636, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 17999, 1617, UINT16_MAX, 1617, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18002, UINT16_MAX, 1620, UINT16_MAX, 1620, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18005, 1623, UINT16_MAX, 1623, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18008, UINT16_MAX, 1626, UINT16_MAX, 1626, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18011, 1629, UINT16_MAX, 1629, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18014, UINT16_MAX, 1632, UINT16_MAX, 1632, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18017, 1635, UINT16_MAX, 1635, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18020, UINT16_MAX, 1638, UINT16_MAX, 1638, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18023, 1641, UINT16_MAX, 1641, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18026, UINT16_MAX, 1644, UINT16_MAX, 1644, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18029, 1647, UINT16_MAX, 1647, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18032, UINT16_MAX, 1650, UINT16_MAX, 1650, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1651, UINT16_MAX, 1651, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1652, UINT16_MAX, 1652, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18037, 1655, UINT16_MAX, 1655, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18040, UINT16_MAX, 1658, UINT16_MAX, 1658, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1659, UINT16_MAX, 1659, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1660, UINT16_MAX, 1660, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1661, UINT16_MAX, 1661, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1662, UINT16_MAX, 1662, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1663, UINT16_MAX, 1663, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1664, UINT16_MAX, 1664, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1665, UINT16_MAX, 1665, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1666, UINT16_MAX, 1666, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1667, UINT16_MAX, 1667, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1668, UINT16_MAX, 1668, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1669, UINT16_MAX, 1669, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1670, UINT16_MAX, 1670, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1671, UINT16_MAX, 1671, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1672, UINT16_MAX, 1672, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1673, UINT16_MAX, 1673, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1674, UINT16_MAX, 1674, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1675, UINT16_MAX, 1675, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1676, UINT16_MAX, 1676, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1677, UINT16_MAX, 1677, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1678, UINT16_MAX, 1678, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1679, UINT16_MAX, 1679, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1680, UINT16_MAX, 1680, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1681, UINT16_MAX, 1681, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1682, UINT16_MAX, 1682, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1683, UINT16_MAX, 1683, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1684, UINT16_MAX, 1684, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1685, UINT16_MAX, 1685, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1686, UINT16_MAX, 1686, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1687, UINT16_MAX, 1687, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1688, UINT16_MAX, 1688, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1689, UINT16_MAX, 1689, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1690, UINT16_MAX, 1690, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1691, UINT16_MAX, 1691, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1692, UINT16_MAX, 1692, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1693, UINT16_MAX, 1693, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1694, UINT16_MAX, 1694, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1695, UINT16_MAX, 1695, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1696, UINT16_MAX, 1696, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1697, UINT16_MAX, 1697, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1698, UINT16_MAX, 1698, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1699, UINT16_MAX, 1699, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1700, UINT16_MAX, 1700, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1701, UINT16_MAX, 1701, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1702, UINT16_MAX, 1702, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1703, UINT16_MAX, 1703, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1704, UINT16_MAX, 1704, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1705, UINT16_MAX, 1705, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1706, UINT16_MAX, 1706, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1707, UINT16_MAX, 1707, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1708, UINT16_MAX, 1708, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1709, UINT16_MAX, 1709, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1710, UINT16_MAX, 1710, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1711, UINT16_MAX, 1711, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1712, UINT16_MAX, 1712, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1713, UINT16_MAX, 1713, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1714, UINT16_MAX, 1714, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1715, UINT16_MAX, 1715, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1716, UINT16_MAX, 1716, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1717, UINT16_MAX, 1717, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1718, UINT16_MAX, 1718, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1719, UINT16_MAX, 1719, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1720, UINT16_MAX, 1720, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1721, UINT16_MAX, 1721, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1722, UINT16_MAX, 1722, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1723, UINT16_MAX, 1723, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1724, UINT16_MAX, 1724, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1725, UINT16_MAX, 1725, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1726, UINT16_MAX, 1726, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1727, UINT16_MAX, 1727, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1728, UINT16_MAX, 1728, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1729, UINT16_MAX, 1729, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1730, UINT16_MAX, 1730, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1731, UINT16_MAX, 1731, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1732, UINT16_MAX, 1732, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1733, UINT16_MAX, 1733, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1734, UINT16_MAX, 1734, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1735, UINT16_MAX, 1735, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1736, UINT16_MAX, 1736, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1737, UINT16_MAX, 1737, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1738, UINT16_MAX, 1738, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1739, UINT16_MAX, 1739, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1740, UINT16_MAX, 1740, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1741, UINT16_MAX, 1741, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1742, UINT16_MAX, 1742, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1743, UINT16_MAX, 1743, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1744, UINT16_MAX, 1744, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1745, UINT16_MAX, 1745, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1746, UINT16_MAX, 1746, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1747, UINT16_MAX, 1747, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1748, UINT16_MAX, 1748, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1749, UINT16_MAX, 1749, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1750, UINT16_MAX, 1750, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1751, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1752, UINT16_MAX, 1752, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1753, UINT16_MAX, 1753, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1754, UINT16_MAX, 1754, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1755, UINT16_MAX, 1755, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1756, UINT16_MAX, 1756, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1757, UINT16_MAX, 1757, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1758, UINT16_MAX, 1758, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1759, UINT16_MAX, 1759, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1760, UINT16_MAX, 1760, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1761, UINT16_MAX, 1761, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1762, UINT16_MAX, 1762, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1763, UINT16_MAX, 1763, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1764, UINT16_MAX, 1764, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1765, UINT16_MAX, 1765, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1766, UINT16_MAX, 1766, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1767, UINT16_MAX, 1767, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1768, UINT16_MAX, 1768, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1769, UINT16_MAX, 1769, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1770, UINT16_MAX, 1770, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1771, UINT16_MAX, 1771, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1772, UINT16_MAX, 1772, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1773, UINT16_MAX, 1773, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1774, UINT16_MAX, 1774, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1775, UINT16_MAX, 1775, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1776, UINT16_MAX, 1776, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1777, UINT16_MAX, 1777, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1778, UINT16_MAX, 1778, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1779, UINT16_MAX, 1779, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1780, UINT16_MAX, 1780, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1781, UINT16_MAX, 1781, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1782, UINT16_MAX, 1782, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1783, UINT16_MAX, 1783, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1784, UINT16_MAX, 1784, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1785, UINT16_MAX, 1785, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1786, UINT16_MAX, 1786, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1787, UINT16_MAX, 1787, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1788, UINT16_MAX, 1788, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1789, UINT16_MAX, 1789, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 18174, 18174, 1792, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1793, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MN, 220, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 222, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 228, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 10, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 11, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 12, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 13, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 14, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 15, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 16, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 17, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 18, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 19, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 20, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 21, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 22, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MN, 23, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MN, 24, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 25, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_AN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, true, 0, false, 0, UTF8PROC_BOUNDCLASS_PREPEND, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MN, 30, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 31, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 32, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, true, true, 0, false, 0, UTF8PROC_BOUNDCLASS_CONTROL, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, 18178, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, 18180, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, 18182, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, 18184, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, 18186, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 637, 3, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 640, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 641, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MN, 27, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 28, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 29, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 33, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 34, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, true, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 220, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, true, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_AN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_AN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MN, 35, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_COMPAT, 18188, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_COMPAT, 18190, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_COMPAT, 18192, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_COMPAT, 18194, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, 18196, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 642, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, 18198, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 643, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, 18200, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 644, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, true, 0, false, 0, UTF8PROC_BOUNDCLASS_PREPEND, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MN, 36, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 645, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18202, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 646, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18204, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 647, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18206, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},\n  {UTF8PROC_CATEGORY_MN, 7, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, true, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 9, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_LINKER},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18208, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18210, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18212, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18214, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18216, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18218, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18220, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18222, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},\n  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MN, 7, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, true, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 648, 2, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 18224, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 18226, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18228, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18230, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18232, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18234, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18236, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MN, 9, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18238, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18240, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18242, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18244, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 650, 3, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 18246, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 18248, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 18250, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, true, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18252, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18254, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 653, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18256, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 654, 2, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 656, 1, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 18258, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 18260, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 18262, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 657, 1, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 18264, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 84, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 91, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, true, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 658, 1, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 18266, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 659, 3, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 18268, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 18270, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 18272, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 662, 1, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 18274, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 663, 2, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 665, 1, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 18276, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 18278, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 18280, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_PREPEND, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MN, 9, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, true, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 666, 3, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 18282, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 18284, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 669, 1, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 18286, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 18288, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 18290, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MN, 103, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 107, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 18292, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MN, 118, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 122, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 18294, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 18296, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NOBREAK, 1914, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MN, 216, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18299, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18301, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18303, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18305, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18307, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18309, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MN, 129, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 130, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 18311, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 132, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 18313, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 18315, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, UTF8PROC_DECOMP_TYPE_COMPAT, 18317, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 18319, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, UTF8PROC_DECOMP_TYPE_COMPAT, 18321, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 18323, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 18325, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 18327, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 18329, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 18331, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 18333, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 18335, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 670, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18337, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1955, UINT16_MAX, 1955, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1956, UINT16_MAX, 1956, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1957, UINT16_MAX, 1957, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1958, UINT16_MAX, 1958, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1959, UINT16_MAX, 1959, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1960, UINT16_MAX, 1960, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1961, UINT16_MAX, 1961, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1962, UINT16_MAX, 1962, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1963, UINT16_MAX, 1963, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1964, UINT16_MAX, 1964, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1965, UINT16_MAX, 1965, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1966, UINT16_MAX, 1966, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1967, UINT16_MAX, 1967, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1968, UINT16_MAX, 1968, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1969, UINT16_MAX, 1969, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1970, UINT16_MAX, 1970, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1971, UINT16_MAX, 1971, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1972, UINT16_MAX, 1972, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1973, UINT16_MAX, 1973, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1974, UINT16_MAX, 1974, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1975, UINT16_MAX, 1975, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1976, UINT16_MAX, 1976, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1977, UINT16_MAX, 1977, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1978, UINT16_MAX, 1978, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1979, UINT16_MAX, 1979, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1980, UINT16_MAX, 1980, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1981, UINT16_MAX, 1981, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1982, UINT16_MAX, 1982, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1983, UINT16_MAX, 1983, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1984, UINT16_MAX, 1984, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1985, UINT16_MAX, 1985, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1986, UINT16_MAX, 1986, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1987, UINT16_MAX, 1987, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1988, UINT16_MAX, 1988, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1989, UINT16_MAX, 1989, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1990, UINT16_MAX, 1990, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1991, UINT16_MAX, 1991, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1992, UINT16_MAX, 1992, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1993, UINT16_MAX, 1993, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1994, UINT16_MAX, 1994, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1995, UINT16_MAX, 1996, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1997, UINT16_MAX, 1998, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1999, UINT16_MAX, 2000, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2001, UINT16_MAX, 2002, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2003, UINT16_MAX, 2004, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2005, UINT16_MAX, 2006, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2007, UINT16_MAX, 2008, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2009, UINT16_MAX, 2010, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2011, UINT16_MAX, 2012, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2013, UINT16_MAX, 2014, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2015, UINT16_MAX, 2016, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2017, UINT16_MAX, 2018, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2019, UINT16_MAX, 2020, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2021, UINT16_MAX, 2022, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2023, UINT16_MAX, 2024, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2025, UINT16_MAX, 2026, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2027, UINT16_MAX, 2028, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2029, UINT16_MAX, 2030, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2031, UINT16_MAX, 2032, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2033, UINT16_MAX, 2034, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2035, UINT16_MAX, 2036, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2037, UINT16_MAX, 2038, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2039, UINT16_MAX, 2040, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2041, UINT16_MAX, 2042, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2043, UINT16_MAX, 2044, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2045, UINT16_MAX, 2046, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2047, UINT16_MAX, 2048, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2049, UINT16_MAX, 2050, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2051, UINT16_MAX, 2052, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2053, UINT16_MAX, 2054, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2055, UINT16_MAX, 2056, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2057, UINT16_MAX, 2058, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2059, UINT16_MAX, 2060, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2061, UINT16_MAX, 2062, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2063, UINT16_MAX, 2064, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2065, UINT16_MAX, 2066, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2067, UINT16_MAX, 2068, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2069, UINT16_MAX, 2070, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2071, UINT16_MAX, 2072, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2073, UINT16_MAX, 2074, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2075, UINT16_MAX, 2076, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2077, UINT16_MAX, 2078, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2079, UINT16_MAX, 2080, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 2020, UINT16_MAX, 2081, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2082, UINT16_MAX, 2083, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2084, UINT16_MAX, 2085, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2086, UINT16_MAX, 2087, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_L, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, true, false, 2, false, 0, UTF8PROC_BOUNDCLASS_L, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, true, false, 1, false, 0, UTF8PROC_BOUNDCLASS_V, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_V, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_T, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2088, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2089, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2090, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2091, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2092, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2093, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2094, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2095, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2096, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2097, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2098, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2099, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2100, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2101, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2102, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2103, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2104, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2105, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2106, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2107, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2108, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2109, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2110, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2111, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2112, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2113, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2114, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2115, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2116, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2117, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2118, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2119, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2120, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2121, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2122, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2123, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2124, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2125, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2126, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2127, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2128, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2129, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2130, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2131, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2132, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2133, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2134, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2135, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2136, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2137, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2138, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2139, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2140, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2141, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2142, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2143, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2144, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2145, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2146, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2147, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2148, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2149, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2150, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2151, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2152, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2153, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2154, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2155, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2156, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2157, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2158, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2159, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2160, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2161, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2162, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2163, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2164, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2165, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2166, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2167, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2168, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2169, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2170, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2171, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2172, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2173, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2174, 2174, UINT16_MAX, 2174, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2175, 2175, UINT16_MAX, 2175, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2176, 2176, UINT16_MAX, 2176, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2177, 2177, UINT16_MAX, 2177, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2178, 2178, UINT16_MAX, 2178, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2179, 2179, UINT16_MAX, 2179, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 9, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, true, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_BN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, true, true, 0, false, 0, UTF8PROC_BOUNDCLASS_CONTROL, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MN, 234, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 671, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18564, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 672, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18566, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 673, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18568, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 674, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18570, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 675, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18572, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 676, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 18574, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 677, 1, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 18576, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 678, 1, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 18578, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 679, 1, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 680, 1, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 18580, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 18582, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 681, 1, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 18584, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MC, 9, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_LINKER},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1345, 1379, UINT16_MAX, 1379, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1347, 1381, UINT16_MAX, 1381, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1359, 1393, UINT16_MAX, 1393, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1362, 1396, UINT16_MAX, 1396, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1363, 1397, UINT16_MAX, 1397, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1371, 1405, UINT16_MAX, 1405, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1443, 1444, UINT16_MAX, 1444, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2202, 2203, UINT16_MAX, 2203, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2204, UINT16_MAX, 2204, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2205, UINT16_MAX, 2205, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1996, UINT16_MAX, 1996, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1998, UINT16_MAX, 1998, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2000, UINT16_MAX, 2000, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2002, UINT16_MAX, 2002, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2004, UINT16_MAX, 2004, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2006, UINT16_MAX, 2006, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2008, UINT16_MAX, 2008, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2010, UINT16_MAX, 2010, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2012, UINT16_MAX, 2012, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2014, UINT16_MAX, 2014, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2016, UINT16_MAX, 2016, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2018, UINT16_MAX, 2018, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2020, UINT16_MAX, 2020, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2022, UINT16_MAX, 2022, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2024, UINT16_MAX, 2024, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2026, UINT16_MAX, 2026, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2028, UINT16_MAX, 2028, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2030, UINT16_MAX, 2030, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2032, UINT16_MAX, 2032, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2034, UINT16_MAX, 2034, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2036, UINT16_MAX, 2036, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2038, UINT16_MAX, 2038, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2040, UINT16_MAX, 2040, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2042, UINT16_MAX, 2042, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2044, UINT16_MAX, 2044, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2046, UINT16_MAX, 2046, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2048, UINT16_MAX, 2048, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2050, UINT16_MAX, 2050, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2052, UINT16_MAX, 2052, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2054, UINT16_MAX, 2054, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2056, UINT16_MAX, 2056, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2058, UINT16_MAX, 2058, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2060, UINT16_MAX, 2060, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2062, UINT16_MAX, 2062, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2064, UINT16_MAX, 2064, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2066, UINT16_MAX, 2066, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2068, UINT16_MAX, 2068, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2070, UINT16_MAX, 2070, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2072, UINT16_MAX, 2072, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2074, UINT16_MAX, 2074, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2076, UINT16_MAX, 2076, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2078, UINT16_MAX, 2078, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2080, UINT16_MAX, 2080, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2083, UINT16_MAX, 2083, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2085, UINT16_MAX, 2085, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2087, UINT16_MAX, 2087, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MN, 1, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2206, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2207, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2208, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2209, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2210, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2211, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2212, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2213, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2214, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2215, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2216, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2217, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2218, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2219, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2220, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2221, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2222, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2223, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2224, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2225, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2226, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2227, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2228, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2229, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2230, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2231, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2232, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2233, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2234, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2235, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2236, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2237, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2238, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2239, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2240, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2241, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2242, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2243, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2244, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2245, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2246, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2247, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2248, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2249, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 26, UINT16_MAX, 2250, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 180, UINT16_MAX, 2251, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 27, UINT16_MAX, 2252, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2253, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 29, UINT16_MAX, 2254, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 30, UINT16_MAX, 2255, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 746, UINT16_MAX, 2256, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 32, UINT16_MAX, 2257, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 33, UINT16_MAX, 2258, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 34, UINT16_MAX, 2259, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 35, UINT16_MAX, 2260, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 36, UINT16_MAX, 2261, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 37, UINT16_MAX, 2262, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 38, UINT16_MAX, 2263, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 39, UINT16_MAX, 2264, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2265, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 40, UINT16_MAX, 2266, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 936, UINT16_MAX, 2267, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 41, UINT16_MAX, 2268, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 43, UINT16_MAX, 2269, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 45, UINT16_MAX, 2270, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 46, UINT16_MAX, 2271, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 48, UINT16_MAX, 2272, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 0, UINT16_MAX, 2273, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 2274, UINT16_MAX, 2275, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 2276, UINT16_MAX, 2277, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 2208, UINT16_MAX, 2278, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1, UINT16_MAX, 2279, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3, UINT16_MAX, 2280, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 4, UINT16_MAX, 2281, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 615, UINT16_MAX, 2282, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 616, UINT16_MAX, 2283, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 2284, UINT16_MAX, 2285, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 6, UINT16_MAX, 2286, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2287, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 10, UINT16_MAX, 2288, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 12, UINT16_MAX, 2289, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 453, UINT16_MAX, 2290, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 14, UINT16_MAX, 2291, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 606, UINT16_MAX, 2292, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 2228, UINT16_MAX, 2293, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 2229, UINT16_MAX, 2294, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 15, UINT16_MAX, 2295, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 19, UINT16_MAX, 2296, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 20, UINT16_MAX, 2297, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 2235, UINT16_MAX, 2298, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 628, UINT16_MAX, 2299, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 21, UINT16_MAX, 2300, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 2243, UINT16_MAX, 2301, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1186, UINT16_MAX, 2302, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1187, UINT16_MAX, 2303, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1188, UINT16_MAX, 2304, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1203, UINT16_MAX, 2305, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1204, UINT16_MAX, 2306, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 8, UINT16_MAX, 2307, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 17, UINT16_MAX, 2308, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 20, UINT16_MAX, 2309, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 21, UINT16_MAX, 2310, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1186, UINT16_MAX, 2311, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1187, UINT16_MAX, 2312, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1199, UINT16_MAX, 2313, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1203, UINT16_MAX, 2314, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1204, UINT16_MAX, 2315, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2316, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2317, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2318, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2319, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2320, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2321, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2322, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2323, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2324, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2325, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2326, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2327, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2328, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1358, UINT16_MAX, 2329, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2330, UINT16_MAX, 2330, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2331, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2332, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2333, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2334, UINT16_MAX, 2334, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2335, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2336, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2337, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2338, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2339, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2340, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2341, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2342, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2343, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2344, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2345, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2346, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2347, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2348, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2349, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2350, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2351, UINT16_MAX, 2351, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2352, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2353, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2354, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2355, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2356, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2357, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2358, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2359, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2360, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2361, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2362, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2363, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 2364, UINT16_MAX, 2365, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 2, UINT16_MAX, 2366, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1014, UINT16_MAX, 2367, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 123, UINT16_MAX, 2368, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 2284, UINT16_MAX, 2369, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 5, UINT16_MAX, 2370, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1024, UINT16_MAX, 2371, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 2372, UINT16_MAX, 2373, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 2374, UINT16_MAX, 2375, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 623, UINT16_MAX, 2376, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 622, UINT16_MAX, 2377, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 2378, UINT16_MAX, 2379, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 2332, UINT16_MAX, 2380, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 2381, UINT16_MAX, 2382, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1038, UINT16_MAX, 2383, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 2342, UINT16_MAX, 2384, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1086, UINT16_MAX, 2385, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 2386, UINT16_MAX, 2387, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1041, UINT16_MAX, 2388, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 629, UINT16_MAX, 2389, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1044, UINT16_MAX, 2390, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1045, UINT16_MAX, 2391, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 631, UINT16_MAX, 2392, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1049, UINT16_MAX, 2393, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 2394, UINT16_MAX, 2395, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 645, UINT16_MAX, 2396, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 647, UINT16_MAX, 2397, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 997, UINT16_MAX, 2398, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 657, UINT16_MAX, 2399, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 2234, UINT16_MAX, 2400, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 658, UINT16_MAX, 2401, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 998, UINT16_MAX, 2402, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 25, UINT16_MAX, 2403, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1073, UINT16_MAX, 2404, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1074, UINT16_MAX, 2405, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 663, UINT16_MAX, 2406, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1192, UINT16_MAX, 2407, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MN, 214, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 202, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 232, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 218, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 233, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18792, 2410, UINT16_MAX, 2410, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18795, UINT16_MAX, 2413, UINT16_MAX, 2413, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18798, 2416, UINT16_MAX, 2416, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18801, UINT16_MAX, 2419, UINT16_MAX, 2419, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18804, 2422, UINT16_MAX, 2422, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18807, UINT16_MAX, 2425, UINT16_MAX, 2425, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18810, 2428, UINT16_MAX, 2428, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18813, UINT16_MAX, 2431, UINT16_MAX, 2431, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18816, 2434, UINT16_MAX, 2434, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18819, UINT16_MAX, 2437, UINT16_MAX, 2437, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18822, 2440, UINT16_MAX, 2440, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18825, UINT16_MAX, 2443, UINT16_MAX, 2443, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18828, 2446, UINT16_MAX, 2446, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18831, UINT16_MAX, 2449, UINT16_MAX, 2449, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18834, 2452, UINT16_MAX, 2452, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18837, UINT16_MAX, 2455, UINT16_MAX, 2455, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18840, 2458, UINT16_MAX, 2458, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18843, UINT16_MAX, 2461, UINT16_MAX, 2461, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18846, 2464, UINT16_MAX, 2464, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18849, UINT16_MAX, 2467, UINT16_MAX, 2467, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18852, 2470, UINT16_MAX, 2470, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18855, UINT16_MAX, 2473, UINT16_MAX, 2473, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18858, 2476, UINT16_MAX, 2476, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18861, UINT16_MAX, 2479, UINT16_MAX, 2479, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18864, 2482, UINT16_MAX, 2482, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18867, UINT16_MAX, 2485, UINT16_MAX, 2485, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18870, 2488, UINT16_MAX, 2488, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18873, UINT16_MAX, 2491, UINT16_MAX, 2491, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18876, 2494, UINT16_MAX, 2494, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18879, UINT16_MAX, 2497, UINT16_MAX, 2497, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18882, 2500, UINT16_MAX, 2500, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18885, UINT16_MAX, 2503, UINT16_MAX, 2503, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18888, 2506, UINT16_MAX, 2506, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18891, UINT16_MAX, 2509, UINT16_MAX, 2509, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18894, 2512, UINT16_MAX, 2512, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18897, UINT16_MAX, 2515, UINT16_MAX, 2515, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18900, 2518, UINT16_MAX, 2518, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18903, UINT16_MAX, 2521, UINT16_MAX, 2521, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18906, 2524, UINT16_MAX, 2524, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18909, UINT16_MAX, 2527, UINT16_MAX, 2527, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18912, 2530, UINT16_MAX, 2530, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18915, UINT16_MAX, 2533, UINT16_MAX, 2533, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18918, 2536, UINT16_MAX, 2536, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18921, UINT16_MAX, 2539, UINT16_MAX, 2539, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18924, 2542, UINT16_MAX, 2542, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18927, UINT16_MAX, 2545, UINT16_MAX, 2545, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18930, 2548, UINT16_MAX, 2548, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18933, UINT16_MAX, 2551, UINT16_MAX, 2551, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18936, 2554, UINT16_MAX, 2554, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18939, UINT16_MAX, 2557, UINT16_MAX, 2557, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18942, 2560, UINT16_MAX, 2560, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18945, UINT16_MAX, 2563, UINT16_MAX, 2563, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18948, 2566, UINT16_MAX, 2566, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18951, UINT16_MAX, 2569, UINT16_MAX, 2569, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18954, 2572, UINT16_MAX, 2572, UINT16_MAX, 682, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18957, UINT16_MAX, 2575, UINT16_MAX, 2575, 683, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18960, 2578, UINT16_MAX, 2578, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18963, UINT16_MAX, 2581, UINT16_MAX, 2581, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18966, 2584, UINT16_MAX, 2584, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18969, UINT16_MAX, 2587, UINT16_MAX, 2587, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18972, 2590, UINT16_MAX, 2590, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18975, UINT16_MAX, 2593, UINT16_MAX, 2593, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18978, 2596, UINT16_MAX, 2596, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18981, UINT16_MAX, 2599, UINT16_MAX, 2599, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18984, 2602, UINT16_MAX, 2602, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18987, UINT16_MAX, 2605, UINT16_MAX, 2605, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18990, 2608, UINT16_MAX, 2608, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18993, UINT16_MAX, 2611, UINT16_MAX, 2611, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 18996, 2614, UINT16_MAX, 2614, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 18999, UINT16_MAX, 2617, UINT16_MAX, 2617, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19002, 2620, UINT16_MAX, 2620, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19005, UINT16_MAX, 2623, UINT16_MAX, 2623, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19008, 2626, UINT16_MAX, 2626, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19011, UINT16_MAX, 2629, UINT16_MAX, 2629, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19014, 2632, UINT16_MAX, 2632, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19017, UINT16_MAX, 2635, UINT16_MAX, 2635, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19020, 2638, UINT16_MAX, 2638, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19023, UINT16_MAX, 2641, UINT16_MAX, 2641, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19026, 2644, UINT16_MAX, 2644, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19029, UINT16_MAX, 2647, UINT16_MAX, 2647, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19032, 2650, UINT16_MAX, 2650, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19035, UINT16_MAX, 2653, UINT16_MAX, 2653, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19038, 2656, UINT16_MAX, 2656, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19041, UINT16_MAX, 2659, UINT16_MAX, 2659, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19044, 2662, UINT16_MAX, 2662, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19047, UINT16_MAX, 2665, UINT16_MAX, 2665, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19050, 2668, UINT16_MAX, 2668, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19053, UINT16_MAX, 2671, UINT16_MAX, 2671, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19056, 2674, UINT16_MAX, 2674, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19059, UINT16_MAX, 2677, UINT16_MAX, 2677, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19062, 2680, UINT16_MAX, 2680, UINT16_MAX, 684, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19065, UINT16_MAX, 2683, UINT16_MAX, 2683, 685, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19068, 2686, UINT16_MAX, 2686, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19071, UINT16_MAX, 2689, UINT16_MAX, 2689, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19074, 2692, UINT16_MAX, 2692, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19077, UINT16_MAX, 2695, UINT16_MAX, 2695, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19080, 2698, UINT16_MAX, 2698, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19083, UINT16_MAX, 2701, UINT16_MAX, 2701, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19086, 2704, UINT16_MAX, 2704, UINT16_MAX, 686, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19089, UINT16_MAX, 2707, UINT16_MAX, 2707, 687, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19092, 2710, UINT16_MAX, 2710, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19095, UINT16_MAX, 2713, UINT16_MAX, 2713, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19098, 2716, UINT16_MAX, 2716, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19101, UINT16_MAX, 2719, UINT16_MAX, 2719, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19104, 2722, UINT16_MAX, 2722, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19107, UINT16_MAX, 2725, UINT16_MAX, 2725, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19110, 2728, UINT16_MAX, 2728, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19113, UINT16_MAX, 2731, UINT16_MAX, 2731, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19116, 2734, UINT16_MAX, 2734, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19119, UINT16_MAX, 2737, UINT16_MAX, 2737, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19122, 2740, UINT16_MAX, 2740, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19125, UINT16_MAX, 2743, UINT16_MAX, 2743, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19128, 2746, UINT16_MAX, 2746, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19131, UINT16_MAX, 2749, UINT16_MAX, 2749, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19134, 2752, UINT16_MAX, 2752, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19137, UINT16_MAX, 2755, UINT16_MAX, 2755, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19140, 2758, UINT16_MAX, 2758, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19143, UINT16_MAX, 2761, UINT16_MAX, 2761, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19146, 2764, UINT16_MAX, 2764, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19149, UINT16_MAX, 2767, UINT16_MAX, 2767, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19152, 2770, UINT16_MAX, 2770, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19155, UINT16_MAX, 2773, UINT16_MAX, 2773, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19158, 2776, UINT16_MAX, 2776, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19161, UINT16_MAX, 2779, UINT16_MAX, 2779, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19164, 2782, UINT16_MAX, 2782, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19167, UINT16_MAX, 2785, UINT16_MAX, 2785, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19170, 2788, UINT16_MAX, 2788, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19173, UINT16_MAX, 2791, UINT16_MAX, 2791, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19176, 2794, UINT16_MAX, 2794, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19179, UINT16_MAX, 2797, UINT16_MAX, 2797, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19182, 2800, UINT16_MAX, 2800, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19185, UINT16_MAX, 2803, UINT16_MAX, 2803, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19188, 2806, UINT16_MAX, 2806, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19191, UINT16_MAX, 2809, UINT16_MAX, 2809, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19194, 2812, UINT16_MAX, 2812, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19197, UINT16_MAX, 2815, UINT16_MAX, 2815, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19200, 2818, UINT16_MAX, 2818, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19203, UINT16_MAX, 2821, UINT16_MAX, 2821, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19206, 2824, UINT16_MAX, 2824, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19209, UINT16_MAX, 2827, UINT16_MAX, 2827, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19212, 2830, UINT16_MAX, 2830, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19215, UINT16_MAX, 2833, UINT16_MAX, 2833, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19218, 2836, UINT16_MAX, 2836, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19221, UINT16_MAX, 2839, UINT16_MAX, 2839, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19224, 2842, UINT16_MAX, 2842, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19227, UINT16_MAX, 2845, UINT16_MAX, 2845, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19230, 2848, UINT16_MAX, 2848, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19233, UINT16_MAX, 2851, UINT16_MAX, 2851, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19236, 2854, UINT16_MAX, 2854, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19239, UINT16_MAX, 2857, UINT16_MAX, 2857, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19242, 19242, 2860, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19245, 19245, 2863, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19248, 19248, 2866, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19251, 19251, 2869, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19254, 19254, 2872, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19257, 2698, 2701, UINT16_MAX, 2701, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2875, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2876, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 16543, UINT16_MAX, 2877, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2878, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19263, 2881, UINT16_MAX, 2881, UINT16_MAX, 688, 2, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19266, UINT16_MAX, 2884, UINT16_MAX, 2884, 690, 2, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19269, 2887, UINT16_MAX, 2887, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19272, UINT16_MAX, 2890, UINT16_MAX, 2890, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19275, 2893, UINT16_MAX, 2893, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19278, UINT16_MAX, 2896, UINT16_MAX, 2896, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19281, 2899, UINT16_MAX, 2899, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19284, UINT16_MAX, 2902, UINT16_MAX, 2902, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19287, 2905, UINT16_MAX, 2905, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19290, UINT16_MAX, 2908, UINT16_MAX, 2908, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19293, 2911, UINT16_MAX, 2911, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19296, UINT16_MAX, 2914, UINT16_MAX, 2914, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19299, 2917, UINT16_MAX, 2917, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19302, UINT16_MAX, 2920, UINT16_MAX, 2920, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19305, 2923, UINT16_MAX, 2923, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19308, UINT16_MAX, 2926, UINT16_MAX, 2926, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19311, 2929, UINT16_MAX, 2929, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19314, UINT16_MAX, 2932, UINT16_MAX, 2932, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19317, 2935, UINT16_MAX, 2935, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19320, UINT16_MAX, 2938, UINT16_MAX, 2938, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19323, 2941, UINT16_MAX, 2941, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19326, UINT16_MAX, 2944, UINT16_MAX, 2944, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19329, 2947, UINT16_MAX, 2947, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19332, UINT16_MAX, 2950, UINT16_MAX, 2950, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19335, 2953, UINT16_MAX, 2953, UINT16_MAX, 692, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19338, UINT16_MAX, 2956, UINT16_MAX, 2956, 693, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19341, 2959, UINT16_MAX, 2959, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19344, UINT16_MAX, 2962, UINT16_MAX, 2962, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19347, 2965, UINT16_MAX, 2965, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19350, UINT16_MAX, 2968, UINT16_MAX, 2968, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19353, 2971, UINT16_MAX, 2971, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19356, UINT16_MAX, 2974, UINT16_MAX, 2974, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19359, 2977, UINT16_MAX, 2977, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19362, UINT16_MAX, 2980, UINT16_MAX, 2980, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19365, 2983, UINT16_MAX, 2983, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19368, UINT16_MAX, 2986, UINT16_MAX, 2986, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19371, 2989, UINT16_MAX, 2989, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19374, UINT16_MAX, 2992, UINT16_MAX, 2992, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19377, 2995, UINT16_MAX, 2995, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19380, UINT16_MAX, 2998, UINT16_MAX, 2998, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19383, 3001, UINT16_MAX, 3001, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19386, UINT16_MAX, 3004, UINT16_MAX, 3004, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19389, 3007, UINT16_MAX, 3007, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19392, UINT16_MAX, 3010, UINT16_MAX, 3010, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19395, 3013, UINT16_MAX, 3013, UINT16_MAX, 694, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19398, UINT16_MAX, 3016, UINT16_MAX, 3016, 695, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19401, 3019, UINT16_MAX, 3019, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19404, UINT16_MAX, 3022, UINT16_MAX, 3022, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19407, 3025, UINT16_MAX, 3025, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19410, UINT16_MAX, 3028, UINT16_MAX, 3028, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19413, 3031, UINT16_MAX, 3031, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19416, UINT16_MAX, 3034, UINT16_MAX, 3034, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19419, 3037, UINT16_MAX, 3037, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19422, UINT16_MAX, 3040, UINT16_MAX, 3040, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19425, 3043, UINT16_MAX, 3043, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19428, UINT16_MAX, 3046, UINT16_MAX, 3046, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19431, 3049, UINT16_MAX, 3049, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19434, UINT16_MAX, 3052, UINT16_MAX, 3052, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19437, 3055, UINT16_MAX, 3055, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19440, UINT16_MAX, 3058, UINT16_MAX, 3058, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19443, 3061, UINT16_MAX, 3061, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19446, UINT16_MAX, 3064, UINT16_MAX, 3064, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19449, 3067, UINT16_MAX, 3067, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19452, UINT16_MAX, 3070, UINT16_MAX, 3070, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19455, 3073, UINT16_MAX, 3073, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19458, UINT16_MAX, 3076, UINT16_MAX, 3076, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19461, 3079, UINT16_MAX, 3079, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19464, UINT16_MAX, 3082, UINT16_MAX, 3082, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19467, 3085, UINT16_MAX, 3085, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19470, UINT16_MAX, 3088, UINT16_MAX, 3088, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19473, 3091, UINT16_MAX, 3091, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19476, UINT16_MAX, 3094, UINT16_MAX, 3094, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19479, 3097, UINT16_MAX, 3097, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19482, UINT16_MAX, 3100, UINT16_MAX, 3100, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19485, 3103, UINT16_MAX, 3103, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19488, UINT16_MAX, 3106, UINT16_MAX, 3106, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19491, 3109, UINT16_MAX, 3109, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19494, UINT16_MAX, 3112, UINT16_MAX, 3112, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19497, 3115, UINT16_MAX, 3115, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19500, UINT16_MAX, 3118, UINT16_MAX, 3118, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19503, 3121, UINT16_MAX, 3121, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19506, UINT16_MAX, 3124, UINT16_MAX, 3124, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19509, 3127, UINT16_MAX, 3127, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19512, UINT16_MAX, 3130, UINT16_MAX, 3130, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19515, 3133, UINT16_MAX, 3133, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19518, UINT16_MAX, 3136, UINT16_MAX, 3136, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19521, 3139, UINT16_MAX, 3139, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19524, UINT16_MAX, 3142, UINT16_MAX, 3142, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19527, 3145, UINT16_MAX, 3145, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19530, UINT16_MAX, 3148, UINT16_MAX, 3148, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3149, UINT16_MAX, 3149, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 3150, UINT16_MAX, 3150, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3151, UINT16_MAX, 3151, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 3152, UINT16_MAX, 3152, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3153, UINT16_MAX, 3153, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 3154, UINT16_MAX, 3154, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19539, UINT16_MAX, 3157, UINT16_MAX, 3157, 696, 4, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19542, UINT16_MAX, 3160, UINT16_MAX, 3160, 700, 4, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19545, UINT16_MAX, 3163, UINT16_MAX, 3163, 704, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19548, UINT16_MAX, 3166, UINT16_MAX, 3166, 705, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19551, UINT16_MAX, 3169, UINT16_MAX, 3169, 706, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19554, UINT16_MAX, 3172, UINT16_MAX, 3172, 707, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19557, UINT16_MAX, 3175, UINT16_MAX, 3175, 708, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19560, UINT16_MAX, 3178, UINT16_MAX, 3178, 709, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19563, 3181, UINT16_MAX, 3181, UINT16_MAX, 710, 4, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19566, 3184, UINT16_MAX, 3184, UINT16_MAX, 714, 4, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19569, 3187, UINT16_MAX, 3187, UINT16_MAX, 718, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19572, 3190, UINT16_MAX, 3190, UINT16_MAX, 719, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19575, 3193, UINT16_MAX, 3193, UINT16_MAX, 720, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19578, 3196, UINT16_MAX, 3196, UINT16_MAX, 721, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19581, 3199, UINT16_MAX, 3199, UINT16_MAX, 722, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19584, 3202, UINT16_MAX, 3202, UINT16_MAX, 723, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19587, UINT16_MAX, 3205, UINT16_MAX, 3205, 724, 2, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19590, UINT16_MAX, 3208, UINT16_MAX, 3208, 726, 2, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19593, UINT16_MAX, 3211, UINT16_MAX, 3211, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19596, UINT16_MAX, 3214, UINT16_MAX, 3214, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19599, UINT16_MAX, 3217, UINT16_MAX, 3217, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19602, UINT16_MAX, 3220, UINT16_MAX, 3220, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19605, 3223, UINT16_MAX, 3223, UINT16_MAX, 728, 2, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19608, 3226, UINT16_MAX, 3226, UINT16_MAX, 730, 2, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19611, 3229, UINT16_MAX, 3229, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19614, 3232, UINT16_MAX, 3232, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19617, 3235, UINT16_MAX, 3235, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19620, 3238, UINT16_MAX, 3238, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19623, UINT16_MAX, 3241, UINT16_MAX, 3241, 732, 4, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19626, UINT16_MAX, 3244, UINT16_MAX, 3244, 736, 4, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19629, UINT16_MAX, 3247, UINT16_MAX, 3247, 740, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19632, UINT16_MAX, 3250, UINT16_MAX, 3250, 741, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19635, UINT16_MAX, 3253, UINT16_MAX, 3253, 742, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19638, UINT16_MAX, 3256, UINT16_MAX, 3256, 743, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19641, UINT16_MAX, 3259, UINT16_MAX, 3259, 744, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19644, UINT16_MAX, 3262, UINT16_MAX, 3262, 745, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19647, 3265, UINT16_MAX, 3265, UINT16_MAX, 746, 4, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19650, 3268, UINT16_MAX, 3268, UINT16_MAX, 750, 4, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19653, 3271, UINT16_MAX, 3271, UINT16_MAX, 754, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19656, 3274, UINT16_MAX, 3274, UINT16_MAX, 755, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19659, 3277, UINT16_MAX, 3277, UINT16_MAX, 756, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19662, 3280, UINT16_MAX, 3280, UINT16_MAX, 757, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19665, 3283, UINT16_MAX, 3283, UINT16_MAX, 758, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19668, 3286, UINT16_MAX, 3286, UINT16_MAX, 759, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19671, UINT16_MAX, 3289, UINT16_MAX, 3289, 760, 3, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19674, UINT16_MAX, 3292, UINT16_MAX, 3292, 763, 3, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19677, UINT16_MAX, 3295, UINT16_MAX, 3295, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19680, UINT16_MAX, 3298, UINT16_MAX, 3298, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19683, UINT16_MAX, 3301, UINT16_MAX, 3301, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19686, UINT16_MAX, 3304, UINT16_MAX, 3304, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19689, UINT16_MAX, 3307, UINT16_MAX, 3307, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19692, UINT16_MAX, 3310, UINT16_MAX, 3310, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19695, 3313, UINT16_MAX, 3313, UINT16_MAX, 766, 3, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19698, 3316, UINT16_MAX, 3316, UINT16_MAX, 769, 3, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19701, 3319, UINT16_MAX, 3319, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19704, 3322, UINT16_MAX, 3322, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19707, 3325, UINT16_MAX, 3325, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19710, 3328, UINT16_MAX, 3328, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19713, 3331, UINT16_MAX, 3331, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19716, 3334, UINT16_MAX, 3334, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19719, UINT16_MAX, 3337, UINT16_MAX, 3337, 772, 2, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19722, UINT16_MAX, 3340, UINT16_MAX, 3340, 774, 2, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19725, UINT16_MAX, 3343, UINT16_MAX, 3343, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19728, UINT16_MAX, 3346, UINT16_MAX, 3346, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19731, UINT16_MAX, 3349, UINT16_MAX, 3349, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19734, UINT16_MAX, 3352, UINT16_MAX, 3352, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19737, 3355, UINT16_MAX, 3355, UINT16_MAX, 776, 2, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19740, 3358, UINT16_MAX, 3358, UINT16_MAX, 778, 2, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19743, 3361, UINT16_MAX, 3361, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19746, 3364, UINT16_MAX, 3364, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19749, 3367, UINT16_MAX, 3367, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19752, 3370, UINT16_MAX, 3370, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19755, 19755, 3373, UINT16_MAX, UINT16_MAX, 780, 3, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19758, UINT16_MAX, 3376, UINT16_MAX, 3376, 783, 3, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19761, 36147, 3382, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19767, UINT16_MAX, 3385, UINT16_MAX, 3385, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19770, 36156, 3391, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19776, UINT16_MAX, 3394, UINT16_MAX, 3394, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19779, 36165, 3400, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19785, UINT16_MAX, 3403, UINT16_MAX, 3403, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19788, 3406, UINT16_MAX, 3406, UINT16_MAX, 786, 3, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19791, 3409, UINT16_MAX, 3409, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19794, 3412, UINT16_MAX, 3412, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19797, 3415, UINT16_MAX, 3415, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19800, UINT16_MAX, 3418, UINT16_MAX, 3418, 789, 4, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19803, UINT16_MAX, 3421, UINT16_MAX, 3421, 793, 4, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19806, UINT16_MAX, 3424, UINT16_MAX, 3424, 797, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19809, UINT16_MAX, 3427, UINT16_MAX, 3427, 798, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19812, UINT16_MAX, 3430, UINT16_MAX, 3430, 799, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19815, UINT16_MAX, 3433, UINT16_MAX, 3433, 800, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19818, UINT16_MAX, 3436, UINT16_MAX, 3436, 801, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19821, UINT16_MAX, 3439, UINT16_MAX, 3439, 802, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19824, 3442, UINT16_MAX, 3442, UINT16_MAX, 803, 4, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19827, 3445, UINT16_MAX, 3445, UINT16_MAX, 807, 4, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19830, 3448, UINT16_MAX, 3448, UINT16_MAX, 811, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19833, 3451, UINT16_MAX, 3451, UINT16_MAX, 812, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19836, 3454, UINT16_MAX, 3454, UINT16_MAX, 813, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19839, 3457, UINT16_MAX, 3457, UINT16_MAX, 814, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19842, 3460, UINT16_MAX, 3460, UINT16_MAX, 815, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 19845, 3463, UINT16_MAX, 3463, UINT16_MAX, 816, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19848, UINT16_MAX, 3466, UINT16_MAX, 3466, 817, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 1159, UINT16_MAX, 3467, UINT16_MAX, 3467, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19852, UINT16_MAX, 3470, UINT16_MAX, 3470, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 1163, UINT16_MAX, 3471, UINT16_MAX, 3471, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19856, UINT16_MAX, 3474, UINT16_MAX, 3474, 818, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 1166, UINT16_MAX, 3475, UINT16_MAX, 3475, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19860, UINT16_MAX, 3478, UINT16_MAX, 3478, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 1169, UINT16_MAX, 3479, UINT16_MAX, 3479, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19864, UINT16_MAX, 3482, UINT16_MAX, 3482, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 1172, UINT16_MAX, 3483, UINT16_MAX, 3483, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19868, UINT16_MAX, 3486, UINT16_MAX, 3486, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 1175, UINT16_MAX, 3487, UINT16_MAX, 3487, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19872, UINT16_MAX, 3490, UINT16_MAX, 3490, 819, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 1178, UINT16_MAX, 3491, UINT16_MAX, 3491, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19876, 19878, 3496, UINT16_MAX, 3496, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19881, 19883, 3501, UINT16_MAX, 3501, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19886, 19888, 3506, UINT16_MAX, 3506, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19891, 19893, 3511, UINT16_MAX, 3511, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19896, 19898, 3516, UINT16_MAX, 3516, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19901, 19903, 3521, UINT16_MAX, 3521, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19906, 19908, 3526, UINT16_MAX, 3526, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19911, 19913, 3531, UINT16_MAX, 3531, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 19916, 19878, UINT16_MAX, 3534, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 19919, 19883, UINT16_MAX, 3537, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 19922, 19888, UINT16_MAX, 3540, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 19925, 19893, UINT16_MAX, 3543, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 19928, 19898, UINT16_MAX, 3546, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 19931, 19903, UINT16_MAX, 3549, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 19934, 19908, UINT16_MAX, 3552, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 19937, 19913, UINT16_MAX, 3555, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19940, 19942, 3560, UINT16_MAX, 3560, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19945, 19947, 3565, UINT16_MAX, 3565, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19950, 19952, 3570, UINT16_MAX, 3570, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19955, 19957, 3575, UINT16_MAX, 3575, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19960, 19962, 3580, UINT16_MAX, 3580, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19965, 19967, 3585, UINT16_MAX, 3585, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19970, 19972, 3590, UINT16_MAX, 3590, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 19975, 19977, 3595, UINT16_MAX, 3595, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 19980, 19942, UINT16_MAX, 3598, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 19983, 19947, UINT16_MAX, 3601, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 19986, 19952, UINT16_MAX, 3604, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 19989, 19957, UINT16_MAX, 3607, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 19992, 19962, UINT16_MAX, 3610, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 19995, 19967, UINT16_MAX, 3613, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 19998, 19972, UINT16_MAX, 3616, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 20001, 19977, UINT16_MAX, 3619, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20004, 20006, 3624, UINT16_MAX, 3624, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20009, 20011, 3629, UINT16_MAX, 3629, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20014, 20016, 3634, UINT16_MAX, 3634, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20019, 20021, 3639, UINT16_MAX, 3639, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20024, 20026, 3644, UINT16_MAX, 3644, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20029, 20031, 3649, UINT16_MAX, 3649, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20034, 20036, 3654, UINT16_MAX, 3654, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20039, 20041, 3659, UINT16_MAX, 3659, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 20044, 20006, UINT16_MAX, 3662, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 20047, 20011, UINT16_MAX, 3665, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 20050, 20016, UINT16_MAX, 3668, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 20053, 20021, UINT16_MAX, 3671, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 20056, 20026, UINT16_MAX, 3674, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 20059, 20031, UINT16_MAX, 3677, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 20062, 20036, UINT16_MAX, 3680, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 20065, 20041, UINT16_MAX, 3683, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20068, UINT16_MAX, 3686, UINT16_MAX, 3686, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20071, UINT16_MAX, 3689, UINT16_MAX, 3689, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20074, 20076, 3694, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20079, 20081, 3699, UINT16_MAX, 3699, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20084, 20086, 3704, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20089, 20089, 3707, UINT16_MAX, UINT16_MAX, 820, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20092, 36478, 3713, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 20098, 3716, UINT16_MAX, 3716, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 20101, 3719, UINT16_MAX, 3719, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 20104, 3722, UINT16_MAX, 3722, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 1215, 3723, UINT16_MAX, 3723, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 20108, 20081, UINT16_MAX, 3726, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 20111, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 1138, 1138, 1139, UINT16_MAX, 1139, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 20111, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 821, 3, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 20113, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20115, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20117, 20119, 3737, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20122, 20124, 3742, UINT16_MAX, 3742, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20127, 20129, 3747, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20132, 20132, 3750, UINT16_MAX, UINT16_MAX, 824, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20135, 36521, 3756, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 20141, 3759, UINT16_MAX, 3759, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 1218, 3760, UINT16_MAX, 3760, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 20145, 3763, UINT16_MAX, 3763, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 1221, 3764, UINT16_MAX, 3764, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 20149, 20124, UINT16_MAX, 3767, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20152, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20154, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20156, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20158, UINT16_MAX, 3776, UINT16_MAX, 3776, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20161, UINT16_MAX, 3779, UINT16_MAX, 3779, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20164, 36550, 3785, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 1184, 33949, 3786, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20171, 20171, 3789, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20174, 36560, 3795, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 20180, 3798, UINT16_MAX, 3798, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 20183, 3801, UINT16_MAX, 3801, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 20186, 3804, UINT16_MAX, 3804, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 1224, 3805, UINT16_MAX, 3805, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20190, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20192, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20194, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20196, UINT16_MAX, 3814, UINT16_MAX, 3814, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20199, UINT16_MAX, 3817, UINT16_MAX, 3817, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20202, 36588, 3823, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 1230, 33995, 3824, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20209, 20209, 3827, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20212, UINT16_MAX, 3830, UINT16_MAX, 3830, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20215, 20215, 3833, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20218, 36604, 3839, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 20224, 3842, UINT16_MAX, 3842, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 20227, 3845, UINT16_MAX, 3845, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 20230, 3848, UINT16_MAX, 3848, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 1264, 3849, UINT16_MAX, 3849, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 20234, 3852, UINT16_MAX, 3852, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20237, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 3855, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 3856, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20241, 20243, 3861, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20246, 20248, 3866, UINT16_MAX, 3866, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20251, 20253, 3871, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20256, 20256, 3874, UINT16_MAX, UINT16_MAX, 825, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 20259, 36645, 3880, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 20265, 3883, UINT16_MAX, 3883, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 1261, 3884, UINT16_MAX, 3884, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 20269, 3887, UINT16_MAX, 3887, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 1267, 3888, UINT16_MAX, 3888, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 20273, 20248, UINT16_MAX, 3891, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 3892, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 20277, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 826, 3, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_ZS, 0, UTF8PROC_BIDI_CLASS_WS, 0, 3895, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_ZS, 0, UTF8PROC_BIDI_CLASS_WS, 0, 3896, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_ZS, 0, UTF8PROC_BIDI_CLASS_WS, UTF8PROC_DECOMP_TYPE_COMPAT, 52, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_ZS, 0, UTF8PROC_BIDI_CLASS_WS, UTF8PROC_DECOMP_TYPE_NOBREAK, 52, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_BN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, true, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_BN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, true, false, 0, false, 0, UTF8PROC_BOUNDCLASS_ZWJ, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, true, true, 0, false, 0, UTF8PROC_BOUNDCLASS_CONTROL, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, true, true, 0, false, 0, UTF8PROC_BOUNDCLASS_CONTROL, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NOBREAK, 3897, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 20282, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PI, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PF, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PI, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3900, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 20285, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 36671, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_ZL, 0, UTF8PROC_BIDI_CLASS_WS, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, true, 0, false, 0, UTF8PROC_BOUNDCLASS_CONTROL, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_ZP, 0, UTF8PROC_BIDI_CLASS_B, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, true, 0, false, 0, UTF8PROC_BOUNDCLASS_CONTROL, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_LRE, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, true, true, 0, false, 0, UTF8PROC_BOUNDCLASS_CONTROL, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_RLE, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, true, true, 0, false, 0, UTF8PROC_BOUNDCLASS_CONTROL, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_PDF, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, true, true, 0, false, 0, UTF8PROC_BOUNDCLASS_CONTROL, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_LRO, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, true, true, 0, false, 0, UTF8PROC_BOUNDCLASS_CONTROL, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_RLO, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, true, true, 0, false, 0, UTF8PROC_BOUNDCLASS_CONTROL, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_COMPAT, 20290, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_COMPAT, 36676, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 20295, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 36681, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 20300, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 20302, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_CS, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 20304, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 20306, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 20308, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 53078, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_LRI, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, true, true, 0, false, 0, UTF8PROC_BOUNDCLASS_CONTROL, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_RLI, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, true, true, 0, false, 0, UTF8PROC_BOUNDCLASS_CONTROL, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_FSI, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, true, true, 0, false, 0, UTF8PROC_BOUNDCLASS_CONTROL, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_PDI, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, true, true, 0, false, 0, UTF8PROC_BOUNDCLASS_CONTROL, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, 3931, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 8, UINT16_MAX, 3932, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, 3933, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, 3934, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, 3935, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, 3936, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, 3937, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, 3938, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_SUPER, 3939, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_SUPER, 3940, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUPER, 3941, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUPER, 3942, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUPER, 3943, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 13, UINT16_MAX, 3944, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, 3931, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, 66, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, 58, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, 59, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, 3933, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, 3934, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, 3935, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, 3936, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, 3937, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, 3938, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_SUB, 3939, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_SUB, 3940, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUB, 3941, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUB, 3942, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUB, 3943, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 0, UINT16_MAX, 3945, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 4, UINT16_MAX, 3946, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 14, UINT16_MAX, 3947, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 23, UINT16_MAX, 3948, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 615, UINT16_MAX, 3949, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 7, UINT16_MAX, 3950, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 10, UINT16_MAX, 3951, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 11, UINT16_MAX, 3952, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 12, UINT16_MAX, 3953, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 13, UINT16_MAX, 3954, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 15, UINT16_MAX, 3955, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 18, UINT16_MAX, 3956, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 19, UINT16_MAX, 3957, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_COMPAT, 20342, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 36728, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 36731, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 3966, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 20351, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 36737, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 36740, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 1020, UINT16_MAX, UINT16_MAX, 3975, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 20360, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 3978, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 33, UINT16_MAX, UINT16_MAX, 3979, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 33, UINT16_MAX, UINT16_MAX, 3980, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 33, UINT16_MAX, UINT16_MAX, 3981, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 3982, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 357, UINT16_MAX, 3983, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 3984, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 3985, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 3986, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 3987, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 3988, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 20373, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 3991, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 3992, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 43, UINT16_MAX, UINT16_MAX, 3993, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 43, UINT16_MAX, UINT16_MAX, 3994, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 43, UINT16_MAX, UINT16_MAX, 3995, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUPER, 20380, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 36766, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUPER, 20385, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 4003, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 1252, 1206, UINT16_MAX, 1206, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 4004, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 36, 10, UINT16_MAX, 10, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 179, 94, UINT16_MAX, 94, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 4005, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 4006, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ET, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 4007, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 4008, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 4009, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4010, UINT16_MAX, 4010, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 4011, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 4012, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 4013, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 4014, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 4015, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 4016, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 4017, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 36786, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1198, UINT16_MAX, 4021, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1187, UINT16_MAX, 4022, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1233, UINT16_MAX, UINT16_MAX, 4023, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1244, UINT16_MAX, UINT16_MAX, 4024, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FONT, 4025, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 4026, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 4027, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 4028, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 4029, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 4030, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4031, UINT16_MAX, 4031, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 36800, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 36803, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 53190, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 36811, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 36814, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 36817, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 36820, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 36823, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 36826, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 36829, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 36832, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 36835, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 36838, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 36841, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 36844, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 20463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 34, 4081, UINT16_MAX, 4081, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20466, 4084, UINT16_MAX, 4084, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 36853, 4088, UINT16_MAX, 4088, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20473, 4091, UINT16_MAX, 4091, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 47, 4092, UINT16_MAX, 4092, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20477, 4095, UINT16_MAX, 4095, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 36864, 4099, UINT16_MAX, 4099, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 53252, 4105, UINT16_MAX, 4105, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20490, 4108, UINT16_MAX, 4108, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 49, 4109, UINT16_MAX, 4109, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20494, 4112, UINT16_MAX, 4112, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 36881, 4116, UINT16_MAX, 4116, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 37, 4117, UINT16_MAX, 4117, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 28, 4118, UINT16_MAX, 4118, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 29, 4119, UINT16_MAX, 4119, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38, 4120, UINT16_MAX, 4120, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8, UINT16_MAX, 4121, UINT16_MAX, 4121, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20506, UINT16_MAX, 4124, UINT16_MAX, 4124, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 36893, UINT16_MAX, 4128, UINT16_MAX, 4128, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20513, UINT16_MAX, 4131, UINT16_MAX, 4131, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21, UINT16_MAX, 4132, UINT16_MAX, 4132, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20517, UINT16_MAX, 4135, UINT16_MAX, 4135, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 36904, UINT16_MAX, 4139, UINT16_MAX, 4139, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 53292, UINT16_MAX, 4145, UINT16_MAX, 4145, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20530, UINT16_MAX, 4148, UINT16_MAX, 4148, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23, UINT16_MAX, 4149, UINT16_MAX, 4149, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20534, UINT16_MAX, 4152, UINT16_MAX, 4152, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 36921, UINT16_MAX, 4156, UINT16_MAX, 4156, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 11, UINT16_MAX, 4157, UINT16_MAX, 4157, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 2, UINT16_MAX, 4158, UINT16_MAX, 4158, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3, UINT16_MAX, 4159, UINT16_MAX, 4159, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12, UINT16_MAX, 4160, UINT16_MAX, 4160, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4161, UINT16_MAX, 4161, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4162, UINT16_MAX, 4162, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 36931, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 829, 1, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 830, 1, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 831, 1, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20550, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20552, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20554, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20556, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20558, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20560, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 832, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 833, 1, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 834, 1, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 835, 1, false, true, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20562, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 836, 1, false, true, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20564, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 837, 1, false, true, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20566, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ET, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 838, 1, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20568, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 839, 1, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20570, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 20572, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 36958, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 20577, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 36963, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 840, 1, false, true, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20582, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 841, 1, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20584, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 842, 1, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20586, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 843, 1, false, true, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20588, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 844, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20590, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 845, 1, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20592, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 846, 1, false, true, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 847, 1, false, true, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20594, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20596, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20598, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20600, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20602, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 848, 1, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 849, 1, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20604, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20606, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 850, 1, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 851, 1, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20608, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20610, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 852, 1, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 853, 1, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 854, 1, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 855, 1, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20612, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20614, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 856, 1, false, true, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 857, 1, false, true, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20616, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20618, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 858, 1, false, true, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 859, 1, false, true, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20620, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20622, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 860, 1, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 861, 1, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 862, 1, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 863, 1, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 864, 1, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 865, 1, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20624, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20626, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20628, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20630, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 866, 1, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 867, 1, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 868, 1, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 869, 1, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20632, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20634, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20636, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20638, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20640, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20642, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20644, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20646, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, 0, 4264, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, 0, 4265, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 66, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 58, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 59, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 3933, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 3934, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 3935, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 3936, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 3937, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 3938, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 20650, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 20652, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 20654, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 20656, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 20658, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 20660, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 20662, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 20664, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 20666, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 20668, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 20670, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 37056, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 37059, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 37062, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 37065, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 37068, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 37071, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 37074, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 37077, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 37080, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 53467, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 53472, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 53477, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 53482, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 53487, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 53492, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 53497, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 53502, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 53507, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 53512, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 53517, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 20754, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 20756, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 20758, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 20760, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 20762, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 20764, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 20766, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 20768, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 20770, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 37156, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 37159, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 37162, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 37165, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 37168, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 37171, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 37174, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 37177, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 37180, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 37183, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 37186, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 37189, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 37192, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 37195, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 37198, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 37201, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 37204, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 37207, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 37210, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 37213, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 37216, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 37219, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 37222, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 37225, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 37228, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 37231, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 37234, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 37237, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 37240, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 37243, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 37246, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 37249, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 37252, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 37255, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 37258, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 37261, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 37264, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 26, 4499, UINT16_MAX, 4499, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 27, 4500, UINT16_MAX, 4500, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 28, 4501, UINT16_MAX, 4501, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 29, 4502, UINT16_MAX, 4502, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 30, 4503, UINT16_MAX, 4503, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 31, 4504, UINT16_MAX, 4504, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 32, 4505, UINT16_MAX, 4505, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 33, 4506, UINT16_MAX, 4506, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 34, 4507, UINT16_MAX, 4507, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 35, 4508, UINT16_MAX, 4508, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 36, 4509, UINT16_MAX, 4509, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 37, 4510, UINT16_MAX, 4510, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 38, 4511, UINT16_MAX, 4511, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 39, 4512, UINT16_MAX, 4512, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 40, 4513, UINT16_MAX, 4513, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 41, 4514, UINT16_MAX, 4514, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 42, 4515, UINT16_MAX, 4515, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 43, 4516, UINT16_MAX, 4516, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 44, 4517, UINT16_MAX, 4517, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 45, 4518, UINT16_MAX, 4518, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 46, 4519, UINT16_MAX, 4519, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 47, 4520, UINT16_MAX, 4520, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 48, 4521, UINT16_MAX, 4521, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 49, 4522, UINT16_MAX, 4522, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 50, 4523, UINT16_MAX, 4523, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 51, 4524, UINT16_MAX, 4524, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 0, UINT16_MAX, 4525, UINT16_MAX, 4525, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1, UINT16_MAX, 4526, UINT16_MAX, 4526, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 2, UINT16_MAX, 4527, UINT16_MAX, 4527, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3, UINT16_MAX, 4528, UINT16_MAX, 4528, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4, UINT16_MAX, 4529, UINT16_MAX, 4529, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5, UINT16_MAX, 4530, UINT16_MAX, 4530, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 6, UINT16_MAX, 4531, UINT16_MAX, 4531, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 7, UINT16_MAX, 4532, UINT16_MAX, 4532, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 8, UINT16_MAX, 4533, UINT16_MAX, 4533, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 9, UINT16_MAX, 4534, UINT16_MAX, 4534, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 10, UINT16_MAX, 4535, UINT16_MAX, 4535, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 11, UINT16_MAX, 4536, UINT16_MAX, 4536, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12, UINT16_MAX, 4537, UINT16_MAX, 4537, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 13, UINT16_MAX, 4538, UINT16_MAX, 4538, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 14, UINT16_MAX, 4539, UINT16_MAX, 4539, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 15, UINT16_MAX, 4540, UINT16_MAX, 4540, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 16, UINT16_MAX, 4541, UINT16_MAX, 4541, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 17, UINT16_MAX, 4542, UINT16_MAX, 4542, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 18, UINT16_MAX, 4543, UINT16_MAX, 4543, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 19, UINT16_MAX, 4544, UINT16_MAX, 4544, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 20, UINT16_MAX, 4545, UINT16_MAX, 4545, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 21, UINT16_MAX, 4546, UINT16_MAX, 4546, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 22, UINT16_MAX, 4547, UINT16_MAX, 4547, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 23, UINT16_MAX, 4548, UINT16_MAX, 4548, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 24, UINT16_MAX, 4549, UINT16_MAX, 4549, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 25, UINT16_MAX, 4550, UINT16_MAX, 4550, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 3931, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 53703, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 37324, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 20943, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 37329, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 20948, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4566, UINT16_MAX, 4566, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4567, UINT16_MAX, 4567, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4568, UINT16_MAX, 4568, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4569, UINT16_MAX, 4569, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4570, UINT16_MAX, 4570, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4571, UINT16_MAX, 4571, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4572, UINT16_MAX, 4572, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4573, UINT16_MAX, 4573, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4574, UINT16_MAX, 4574, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4575, UINT16_MAX, 4575, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4576, UINT16_MAX, 4576, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4577, UINT16_MAX, 4577, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4578, UINT16_MAX, 4578, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4579, UINT16_MAX, 4579, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4580, UINT16_MAX, 4580, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4581, UINT16_MAX, 4581, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4582, UINT16_MAX, 4582, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4583, UINT16_MAX, 4583, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4584, UINT16_MAX, 4584, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4585, UINT16_MAX, 4585, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4586, UINT16_MAX, 4586, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4587, UINT16_MAX, 4587, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4588, UINT16_MAX, 4588, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4589, UINT16_MAX, 4589, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4590, UINT16_MAX, 4590, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4591, UINT16_MAX, 4591, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4592, UINT16_MAX, 4592, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4593, UINT16_MAX, 4593, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4594, UINT16_MAX, 4594, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4595, UINT16_MAX, 4595, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4596, UINT16_MAX, 4596, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4597, UINT16_MAX, 4597, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4598, UINT16_MAX, 4598, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4599, UINT16_MAX, 4599, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4600, UINT16_MAX, 4600, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4601, UINT16_MAX, 4601, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4602, UINT16_MAX, 4602, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4603, UINT16_MAX, 4603, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4604, UINT16_MAX, 4604, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4605, UINT16_MAX, 4605, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4606, UINT16_MAX, 4606, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4607, UINT16_MAX, 4607, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4608, UINT16_MAX, 4608, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4609, UINT16_MAX, 4609, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4610, UINT16_MAX, 4610, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4611, UINT16_MAX, 4611, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4612, UINT16_MAX, 4612, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4613, UINT16_MAX, 4613, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4614, UINT16_MAX, 4614, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4615, UINT16_MAX, 4615, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4616, UINT16_MAX, 4616, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4617, UINT16_MAX, 4617, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4618, UINT16_MAX, 4618, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4619, UINT16_MAX, 4619, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4620, UINT16_MAX, 4620, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4621, UINT16_MAX, 4621, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4622, UINT16_MAX, 4622, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4623, UINT16_MAX, 4623, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4624, UINT16_MAX, 4624, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4625, UINT16_MAX, 4625, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4626, UINT16_MAX, 4626, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4627, UINT16_MAX, 4627, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4628, UINT16_MAX, 4628, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4629, UINT16_MAX, 4629, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4630, UINT16_MAX, 4630, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4631, UINT16_MAX, 4631, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4632, UINT16_MAX, 4632, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4633, UINT16_MAX, 4633, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4634, UINT16_MAX, 4634, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4635, UINT16_MAX, 4635, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4636, UINT16_MAX, 4636, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4637, UINT16_MAX, 4637, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4638, UINT16_MAX, 4638, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4639, UINT16_MAX, 4639, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4640, UINT16_MAX, 4640, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4641, UINT16_MAX, 4641, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4642, UINT16_MAX, 4642, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4643, UINT16_MAX, 4643, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4644, UINT16_MAX, 4644, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4645, UINT16_MAX, 4645, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4646, UINT16_MAX, 4646, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4647, UINT16_MAX, 4647, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4648, UINT16_MAX, 4648, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4649, UINT16_MAX, 4649, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4650, UINT16_MAX, 4650, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4651, UINT16_MAX, 4651, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4652, UINT16_MAX, 4652, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4653, UINT16_MAX, 4653, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4654, UINT16_MAX, 4654, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4655, UINT16_MAX, 4655, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4656, UINT16_MAX, 4656, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4657, UINT16_MAX, 4657, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4658, UINT16_MAX, 4658, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4659, UINT16_MAX, 4659, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4660, UINT16_MAX, 4660, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4661, UINT16_MAX, 4661, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4662, UINT16_MAX, 4662, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4663, UINT16_MAX, 4663, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4664, UINT16_MAX, 4664, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4665, UINT16_MAX, 4665, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4666, UINT16_MAX, 4666, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4667, UINT16_MAX, 4667, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4668, UINT16_MAX, 4668, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4669, UINT16_MAX, 4669, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4670, UINT16_MAX, 4670, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4671, UINT16_MAX, 4671, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4672, UINT16_MAX, 4672, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4673, UINT16_MAX, 4673, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4674, UINT16_MAX, 4674, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2276, UINT16_MAX, 2276, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2386, UINT16_MAX, 2386, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2274, UINT16_MAX, 2274, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2364, UINT16_MAX, 2364, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4675, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4676, UINT16_MAX, 4676, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4677, UINT16_MAX, 4677, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4678, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4679, UINT16_MAX, 4679, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4680, UINT16_MAX, 4680, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4681, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4682, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4683, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4684, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4685, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 9, UINT16_MAX, 4686, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 47, UINT16_MAX, 4687, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4688, UINT16_MAX, 4688, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4689, UINT16_MAX, 4689, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4690, UINT16_MAX, 4690, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4691, UINT16_MAX, 4691, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4692, UINT16_MAX, 4692, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4693, UINT16_MAX, 4693, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4694, UINT16_MAX, 4694, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4695, UINT16_MAX, 4695, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4696, UINT16_MAX, 4696, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4697, UINT16_MAX, 4697, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4698, UINT16_MAX, 4698, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4699, UINT16_MAX, 4699, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4700, UINT16_MAX, 4700, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4701, UINT16_MAX, 4701, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4702, UINT16_MAX, 4702, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4703, UINT16_MAX, 4703, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4704, UINT16_MAX, 4704, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4705, UINT16_MAX, 4705, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4706, UINT16_MAX, 4706, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4707, UINT16_MAX, 4707, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4708, UINT16_MAX, 4708, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4709, UINT16_MAX, 4709, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4710, UINT16_MAX, 4710, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4711, UINT16_MAX, 4711, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4712, UINT16_MAX, 4712, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4713, UINT16_MAX, 4713, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4714, UINT16_MAX, 4714, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4715, UINT16_MAX, 4715, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4716, UINT16_MAX, 4716, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4717, UINT16_MAX, 4717, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4718, UINT16_MAX, 4718, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4719, UINT16_MAX, 4719, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4720, UINT16_MAX, 4720, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4721, UINT16_MAX, 4721, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4722, UINT16_MAX, 4722, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4723, UINT16_MAX, 4723, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4724, UINT16_MAX, 4724, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4725, UINT16_MAX, 4725, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4726, UINT16_MAX, 4726, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4727, UINT16_MAX, 4727, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4728, UINT16_MAX, 4728, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4729, UINT16_MAX, 4729, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4730, UINT16_MAX, 4730, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4731, UINT16_MAX, 4731, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4732, UINT16_MAX, 4732, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4733, UINT16_MAX, 4733, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4734, UINT16_MAX, 4734, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4735, UINT16_MAX, 4735, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4736, UINT16_MAX, 4736, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4737, UINT16_MAX, 4737, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4738, UINT16_MAX, 4738, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4739, UINT16_MAX, 4739, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4740, UINT16_MAX, 4740, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4741, UINT16_MAX, 4741, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4742, UINT16_MAX, 4742, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4743, UINT16_MAX, 4743, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4744, UINT16_MAX, 4744, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4745, UINT16_MAX, 4745, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4746, UINT16_MAX, 4746, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4747, UINT16_MAX, 4747, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4748, UINT16_MAX, 4748, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4749, UINT16_MAX, 4749, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4750, UINT16_MAX, 4750, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4751, UINT16_MAX, 4751, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4752, UINT16_MAX, 4752, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4753, UINT16_MAX, 4753, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4754, UINT16_MAX, 4754, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4755, UINT16_MAX, 4755, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4756, UINT16_MAX, 4756, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4757, UINT16_MAX, 4757, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4758, UINT16_MAX, 4758, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4759, UINT16_MAX, 4759, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4760, UINT16_MAX, 4760, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4761, UINT16_MAX, 4761, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4762, UINT16_MAX, 4762, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4763, UINT16_MAX, 4763, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4764, UINT16_MAX, 4764, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4765, UINT16_MAX, 4765, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4766, UINT16_MAX, 4766, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4767, UINT16_MAX, 4767, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4768, UINT16_MAX, 4768, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4769, UINT16_MAX, 4769, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4770, UINT16_MAX, 4770, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4771, UINT16_MAX, 4771, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4772, UINT16_MAX, 4772, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4773, UINT16_MAX, 4773, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4774, UINT16_MAX, 4774, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4775, UINT16_MAX, 4775, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4776, UINT16_MAX, 4776, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4777, UINT16_MAX, 4777, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4778, UINT16_MAX, 4778, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4779, UINT16_MAX, 4779, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4780, UINT16_MAX, 4780, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4781, UINT16_MAX, 4781, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4782, UINT16_MAX, 4782, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4783, UINT16_MAX, 4783, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4784, UINT16_MAX, 4784, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4785, UINT16_MAX, 4785, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4786, UINT16_MAX, 4786, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4787, UINT16_MAX, 4787, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4788, UINT16_MAX, 4788, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4789, UINT16_MAX, 4789, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4790, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4791, UINT16_MAX, 4791, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4792, UINT16_MAX, 4792, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4793, UINT16_MAX, 4793, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4794, UINT16_MAX, 4794, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4795, UINT16_MAX, 4795, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4796, UINT16_MAX, 4796, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4797, UINT16_MAX, 4797, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4798, UINT16_MAX, 4798, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4799, UINT16_MAX, 4799, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4800, UINT16_MAX, 4800, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4801, UINT16_MAX, 4801, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4802, UINT16_MAX, 4802, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4803, UINT16_MAX, 4803, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4804, UINT16_MAX, 4804, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4805, UINT16_MAX, 4805, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4806, UINT16_MAX, 4806, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4807, UINT16_MAX, 4807, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4808, UINT16_MAX, 4808, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4809, UINT16_MAX, 4809, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4810, UINT16_MAX, 4810, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4811, UINT16_MAX, 4811, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4812, UINT16_MAX, 4812, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4813, UINT16_MAX, 4813, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4814, UINT16_MAX, 4814, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4815, UINT16_MAX, 4815, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4816, UINT16_MAX, 4816, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4817, UINT16_MAX, 4817, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4818, UINT16_MAX, 4818, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4819, UINT16_MAX, 4819, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4820, UINT16_MAX, 4820, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4821, UINT16_MAX, 4821, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4822, UINT16_MAX, 4822, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4823, UINT16_MAX, 4823, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4824, UINT16_MAX, 4824, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4825, UINT16_MAX, 4825, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4826, UINT16_MAX, 4826, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4827, UINT16_MAX, 4827, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4828, UINT16_MAX, 4828, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4829, UINT16_MAX, 4829, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4830, UINT16_MAX, 4830, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4831, UINT16_MAX, 4831, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4832, UINT16_MAX, 4832, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4833, UINT16_MAX, 4833, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4834, UINT16_MAX, 4834, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4835, UINT16_MAX, 4835, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 4836, UINT16_MAX, 4836, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 4837, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4838, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4839, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4840, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4841, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4842, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4843, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4844, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4845, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4846, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4847, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4848, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4849, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4850, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4851, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4852, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4853, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4854, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4855, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4856, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4857, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4858, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4859, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4860, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4861, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4862, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4863, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4864, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4865, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4866, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4867, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4868, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4869, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4870, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4871, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4872, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4873, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4874, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4875, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4876, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4877, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4878, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4879, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4880, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4881, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4882, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4883, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4884, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4885, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4886, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4887, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4888, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4889, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4890, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4891, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4892, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4893, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4894, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4895, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4896, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4897, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4898, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4899, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4900, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4901, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4902, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4903, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4904, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4905, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4906, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4907, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4908, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4909, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4910, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4911, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4912, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4913, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4914, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4915, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4916, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4917, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4918, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4919, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4920, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4921, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4922, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4923, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4924, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4925, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4926, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4927, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4928, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4929, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4930, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4931, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4932, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4933, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4934, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4935, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4936, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4937, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4938, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4939, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4940, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4941, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4942, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4943, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4944, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4945, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4946, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4947, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4948, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4949, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4950, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4951, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4952, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4953, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4954, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4955, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4956, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4957, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4958, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4959, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4960, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4961, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4962, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4963, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4964, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4965, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4966, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4967, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4968, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4969, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4970, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4971, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4972, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4973, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4974, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4975, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4976, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4977, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4978, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4979, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4980, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4981, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4982, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4983, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4984, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4985, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4986, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4987, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4988, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4989, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4990, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4991, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4992, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4993, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4994, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4995, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4996, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4997, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4998, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 4999, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5000, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5001, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5002, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5003, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5004, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5005, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5006, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5007, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5008, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5009, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5010, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5011, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5012, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5013, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5014, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5015, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5016, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5017, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5018, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5019, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5020, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5021, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5022, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5023, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5024, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5025, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5026, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5027, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5028, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5029, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5030, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5031, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5032, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5033, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5034, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5035, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5036, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5037, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5038, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5039, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5040, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5041, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5042, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5043, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5044, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5045, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5046, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5047, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5048, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5049, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5050, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5051, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5052, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5053, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_ZS, 0, UTF8PROC_BIDI_CLASS_WS, UTF8PROC_DECOMP_TYPE_WIDE, 52, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 224, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 5054, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 4863, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5055, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5056, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 870, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 871, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21441, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 872, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21443, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 873, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21445, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 874, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21447, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 875, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21449, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 876, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21451, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 877, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21453, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 878, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21455, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 879, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21457, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 880, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21459, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 881, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21461, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 882, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 883, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21465, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 884, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21467, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 885, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21469, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 886, 2, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21471, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21473, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 888, 2, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21475, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21477, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 890, 2, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21479, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21481, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 892, 2, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21483, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21485, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 894, 2, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21487, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21489, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21491, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MN, 8, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, true, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 21493, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 21495, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 896, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, 21497, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_VERTICAL, 21499, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 897, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 898, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21501, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 899, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21503, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 900, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21505, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 901, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21507, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 902, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21509, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 903, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21511, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 904, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21513, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 905, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21515, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 906, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21517, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 907, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21519, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 908, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21521, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 909, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21523, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 910, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21525, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 911, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21527, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 912, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21529, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 913, 2, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21531, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21533, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 915, 2, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21535, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21537, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 917, 2, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21539, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21541, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 919, 2, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21543, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21545, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 921, 2, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21547, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21549, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 923, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 924, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 925, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 926, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21551, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21553, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21555, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21557, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 21559, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 927, 1, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, 21561, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_VERTICAL, 21563, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5181, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5182, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5183, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5184, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5185, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5186, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5187, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5188, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5189, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5190, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5191, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5192, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5193, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5194, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5195, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5196, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5197, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5198, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5199, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5200, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5201, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5202, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5203, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5204, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5205, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5206, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5207, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5208, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5209, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5210, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5211, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5212, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5213, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5214, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5215, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5216, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5217, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5218, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5219, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5220, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5221, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5222, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5223, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5224, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5225, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5226, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5227, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5228, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5229, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5230, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5231, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5232, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, true, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5233, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5234, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5235, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5236, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5237, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5238, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5239, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5240, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5241, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5242, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5243, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5244, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5245, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5246, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5247, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5248, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5249, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5250, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5251, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5252, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5253, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5254, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5255, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5256, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5257, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5258, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5259, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5260, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5261, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5262, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5263, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5264, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5265, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5266, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5267, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5268, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5269, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5270, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5271, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5272, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5273, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 5274, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 4840, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 4846, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 5275, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 5276, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 5277, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 5278, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 5279, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 5280, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 4844, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 5281, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 5282, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 5283, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 5284, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 4848, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38053, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38056, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38059, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38062, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38065, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38068, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38071, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38074, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38077, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38080, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38083, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38086, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38089, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38092, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 54479, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 54484, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 54489, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 54494, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 54499, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 54504, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 54509, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 54514, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 54519, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 54524, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 54529, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 54534, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 54539, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 54544, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 54549, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 54554, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 54562, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38185, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38188, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38191, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38194, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38197, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38200, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38203, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38206, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38209, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38212, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38215, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38218, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38221, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38224, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38227, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38230, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38233, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38236, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38239, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38242, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38245, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38248, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38251, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38254, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38257, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38260, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38263, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38266, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38269, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38272, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38275, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38278, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38281, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38284, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38287, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38290, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5525, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5526, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4906, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5527, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 38296, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 21915, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 21917, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 21919, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 21921, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 21923, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 21925, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 21927, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 21929, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 21931, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 21933, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 21935, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 21937, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 21939, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 21941, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 21943, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5181, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5184, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5187, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5189, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5197, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5198, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5201, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5203, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5204, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5206, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5207, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5208, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5209, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5210, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 21945, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 21947, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 21949, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 21951, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 21953, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 21955, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 21957, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 21959, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 21961, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 21963, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 21965, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 21967, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 21969, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 21971, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 54741, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 54747, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 21984, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4840, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4846, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5275, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5276, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5602, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5603, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5604, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4851, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5605, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4863, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4913, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4925, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4924, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4914, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5006, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4871, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4911, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5606, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5607, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5608, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5609, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5610, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5611, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5612, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5613, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5614, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5615, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4877, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5616, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5617, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5618, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5619, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5620, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5621, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5622, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5623, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5277, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5278, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5279, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5624, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5625, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5626, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5627, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5628, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5629, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5630, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5631, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5632, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5633, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 22018, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 22020, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 22022, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 22024, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 22026, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 22028, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 22030, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 22032, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 22034, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 22036, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 22038, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 22040, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 22042, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 22044, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 22046, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 22048, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 22050, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 22052, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 22054, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 22056, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 22058, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 22060, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 22062, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 22064, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38450, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38453, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38456, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 22075, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 38461, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 22080, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 38466, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5701, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5702, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5703, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5704, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5705, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5706, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5707, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5708, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5709, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5710, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5711, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5712, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5713, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5714, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5715, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5716, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5717, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5718, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5719, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5720, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5721, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5722, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5723, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5724, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5725, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5726, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5727, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5728, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5729, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5730, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5731, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5732, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5733, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5734, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5735, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5736, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5737, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5738, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5739, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5740, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5741, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5742, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5743, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5744, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5745, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5746, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5747, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22132, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 54902, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 54907, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 54912, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38533, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 54920, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38541, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38544, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 54931, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 54937, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38558, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38561, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38564, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 54951, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 54956, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38577, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38580, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22199, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38585, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 54972, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 54977, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22214, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 54984, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 54990, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 54997, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38619, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 55006, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 55012, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 55018, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38639, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38642, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38645, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 55032, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 55037, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 55043, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38664, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38667, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38670, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22289, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22291, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22293, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22295, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38681, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38684, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 55071, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38693, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 55080, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 55085, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38707, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22326, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22328, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 55098, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 55104, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 55109, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38731, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 55118, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22356, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38742, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38745, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38748, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38751, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38754, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 55141, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38762, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22381, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38767, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38770, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38773, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 55160, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38781, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38784, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38787, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 55174, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 55180, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22417, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 55187, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22425, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 55195, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 55200, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38821, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38824, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38827, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 55214, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22451, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38837, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 55224, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22461, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 55231, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38853, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 22472, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 22474, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 22476, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 22478, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 22480, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 22482, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 22484, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 22486, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 22488, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 22490, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38876, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38879, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38882, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38885, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38888, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38891, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38894, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38897, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38900, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38903, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38906, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38909, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38912, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38915, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 38918, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38921, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22540, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22542, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38928, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22547, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22549, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 22551, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 38937, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 38940, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 22559, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22561, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22563, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22565, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22567, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 55337, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22574, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22576, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22578, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22580, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22582, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22584, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22586, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22588, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38974, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 55361, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22598, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22600, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22602, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22604, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22606, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22608, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22610, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38996, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38999, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 39002, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 39005, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22624, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22626, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22628, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22630, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22632, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22634, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22636, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22638, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22640, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22642, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 39028, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 39031, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22650, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 39036, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 39039, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 39042, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22661, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 39047, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 39050, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 55437, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22674, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 39060, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 39063, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 39066, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 39069, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 55456, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 55462, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22701, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22703, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22705, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22707, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22709, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22711, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22713, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22715, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22717, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22719, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22721, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22723, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22725, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22727, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22729, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22731, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22733, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22735, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 55505, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22742, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22744, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22746, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 55516, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 39137, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22756, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22758, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22760, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22762, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22764, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22766, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22768, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22770, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22772, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22774, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 39160, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22779, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22781, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 39167, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 39170, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22789, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 55559, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 39180, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22799, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22801, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22803, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22805, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 39191, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 39194, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 22813, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 22815, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 22817, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 22819, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 22821, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 22823, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 22825, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 22827, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 22829, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 39215, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 39218, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 39221, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 39224, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 39227, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 39230, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 39233, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 39236, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 39239, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 39242, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 39245, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 39248, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 39251, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 39254, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 39257, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 39260, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 39263, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 39266, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 39269, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 39272, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 39275, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 39278, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 39281, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6516, UINT16_MAX, 6516, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6517, UINT16_MAX, 6517, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6518, UINT16_MAX, 6518, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6519, UINT16_MAX, 6519, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6520, UINT16_MAX, 6520, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6521, UINT16_MAX, 6521, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6522, UINT16_MAX, 6522, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6523, UINT16_MAX, 6523, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6524, UINT16_MAX, 6524, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6525, UINT16_MAX, 6525, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2202, UINT16_MAX, 2202, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2203, UINT16_MAX, 2203, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6526, UINT16_MAX, 6526, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6527, UINT16_MAX, 6527, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6528, UINT16_MAX, 6528, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6529, UINT16_MAX, 6529, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6530, UINT16_MAX, 6530, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6531, UINT16_MAX, 6531, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6532, UINT16_MAX, 6532, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6533, UINT16_MAX, 6533, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6534, UINT16_MAX, 6534, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6535, UINT16_MAX, 6535, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6536, UINT16_MAX, 6536, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6537, UINT16_MAX, 6537, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6538, UINT16_MAX, 6538, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6539, UINT16_MAX, 6539, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6540, UINT16_MAX, 6540, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6541, UINT16_MAX, 6541, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6542, UINT16_MAX, 6542, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6543, UINT16_MAX, 6543, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6544, UINT16_MAX, 6544, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6545, UINT16_MAX, 6545, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6546, UINT16_MAX, 6546, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6547, UINT16_MAX, 6547, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6548, UINT16_MAX, 6548, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6549, UINT16_MAX, 6549, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6550, UINT16_MAX, 6550, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6551, UINT16_MAX, 6551, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6552, UINT16_MAX, 6552, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6553, UINT16_MAX, 6553, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6554, UINT16_MAX, 6554, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6555, UINT16_MAX, 6555, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6556, UINT16_MAX, 6556, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6557, UINT16_MAX, 6557, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6558, UINT16_MAX, 6558, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6559, UINT16_MAX, 6559, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6560, UINT16_MAX, 6560, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6561, UINT16_MAX, 6561, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6562, UINT16_MAX, 6562, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6563, UINT16_MAX, 6563, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6564, UINT16_MAX, 6564, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6565, UINT16_MAX, 6565, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6566, UINT16_MAX, 6566, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6567, UINT16_MAX, 6567, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6568, UINT16_MAX, 6568, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6569, UINT16_MAX, 6569, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6570, UINT16_MAX, 6570, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6571, UINT16_MAX, 6571, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6572, UINT16_MAX, 6572, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6573, UINT16_MAX, 6573, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6574, UINT16_MAX, 6574, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6575, UINT16_MAX, 6575, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6576, UINT16_MAX, 6576, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6577, UINT16_MAX, 6577, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6578, UINT16_MAX, 6578, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6579, UINT16_MAX, 6579, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6580, UINT16_MAX, 6580, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6581, UINT16_MAX, 6581, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6582, UINT16_MAX, 6582, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6583, UINT16_MAX, 6583, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6584, UINT16_MAX, 6584, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6585, UINT16_MAX, 6585, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6586, UINT16_MAX, 6586, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6587, UINT16_MAX, 6587, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1371, UINT16_MAX, 6588, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1373, UINT16_MAX, 6589, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6590, UINT16_MAX, 6590, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6591, UINT16_MAX, 6591, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6592, UINT16_MAX, 6592, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6593, UINT16_MAX, 6593, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6594, UINT16_MAX, 6594, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6595, UINT16_MAX, 6595, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6596, UINT16_MAX, 6596, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6597, UINT16_MAX, 6597, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6598, UINT16_MAX, 6598, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6599, UINT16_MAX, 6599, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6600, UINT16_MAX, 6600, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6601, UINT16_MAX, 6601, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6602, UINT16_MAX, 6602, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6603, UINT16_MAX, 6603, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6604, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6605, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6606, UINT16_MAX, 6606, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6607, UINT16_MAX, 6607, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6608, UINT16_MAX, 6608, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6609, UINT16_MAX, 6609, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6610, UINT16_MAX, 6610, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6611, UINT16_MAX, 6611, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6612, UINT16_MAX, 6612, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6613, UINT16_MAX, 6613, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6614, UINT16_MAX, 6614, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6615, UINT16_MAX, 6615, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6616, UINT16_MAX, 6616, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6617, UINT16_MAX, 6617, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6618, UINT16_MAX, 6618, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6619, UINT16_MAX, 6619, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6620, UINT16_MAX, 6620, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6621, UINT16_MAX, 6621, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6622, UINT16_MAX, 6622, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6623, UINT16_MAX, 6623, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6624, UINT16_MAX, 6624, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6625, UINT16_MAX, 6625, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6626, UINT16_MAX, 6626, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6627, UINT16_MAX, 6627, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6628, UINT16_MAX, 6628, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6629, UINT16_MAX, 6629, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6630, UINT16_MAX, 6630, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6631, UINT16_MAX, 6631, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6632, UINT16_MAX, 6632, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6633, UINT16_MAX, 6633, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6634, UINT16_MAX, 6634, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6635, UINT16_MAX, 6635, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6636, UINT16_MAX, 6636, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6637, UINT16_MAX, 6637, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6638, UINT16_MAX, 6638, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6639, UINT16_MAX, 6639, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6640, UINT16_MAX, 6640, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6641, UINT16_MAX, 6641, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6642, UINT16_MAX, 6642, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6643, UINT16_MAX, 6643, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6644, UINT16_MAX, 6644, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6645, UINT16_MAX, 6645, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6646, UINT16_MAX, 6646, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6647, UINT16_MAX, 6647, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6648, UINT16_MAX, 6648, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6649, UINT16_MAX, 6649, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6650, UINT16_MAX, 6650, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6651, UINT16_MAX, 6651, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6652, UINT16_MAX, 6652, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6653, UINT16_MAX, 6653, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6654, UINT16_MAX, 6654, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6655, UINT16_MAX, 6655, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6656, UINT16_MAX, 6656, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6657, UINT16_MAX, 6657, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6658, UINT16_MAX, 6658, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6659, UINT16_MAX, 6659, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6660, UINT16_MAX, 6660, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6661, UINT16_MAX, 6661, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6662, UINT16_MAX, 6662, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6663, UINT16_MAX, 6663, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6664, UINT16_MAX, 6664, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6665, UINT16_MAX, 6665, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6666, UINT16_MAX, 6666, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6667, UINT16_MAX, 6667, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 6666, UINT16_MAX, 6668, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6669, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6670, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6671, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6672, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6673, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6674, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6675, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6676, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6677, UINT16_MAX, 6677, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6678, UINT16_MAX, 6678, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6679, UINT16_MAX, 6679, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6680, UINT16_MAX, 6680, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6681, UINT16_MAX, 6681, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6682, UINT16_MAX, 6682, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6683, UINT16_MAX, 6683, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6684, UINT16_MAX, 6684, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6685, UINT16_MAX, 6685, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6686, UINT16_MAX, 6686, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6687, UINT16_MAX, 6687, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6688, UINT16_MAX, 6688, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6689, UINT16_MAX, 6689, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6690, UINT16_MAX, 6690, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6691, UINT16_MAX, 6691, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6692, UINT16_MAX, 6692, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6693, UINT16_MAX, 6693, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2374, UINT16_MAX, 2374, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6694, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6695, UINT16_MAX, 6695, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6696, UINT16_MAX, 6696, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6697, UINT16_MAX, 6697, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6698, UINT16_MAX, 6698, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6699, UINT16_MAX, 6699, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6700, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6701, UINT16_MAX, 6701, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6702, UINT16_MAX, 6702, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6703, UINT16_MAX, 6703, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6704, UINT16_MAX, 6704, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6705, UINT16_MAX, 6705, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6706, UINT16_MAX, 6706, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6707, UINT16_MAX, 6707, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6708, UINT16_MAX, 6708, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6709, UINT16_MAX, 6709, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6710, UINT16_MAX, 6710, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6711, UINT16_MAX, 6711, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6712, UINT16_MAX, 6712, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6713, UINT16_MAX, 6713, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6714, UINT16_MAX, 6714, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6715, UINT16_MAX, 6715, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6716, UINT16_MAX, 6716, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6717, UINT16_MAX, 6717, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6718, UINT16_MAX, 6718, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6719, UINT16_MAX, 6719, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6720, UINT16_MAX, 6720, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1104, UINT16_MAX, 1104, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2284, UINT16_MAX, 2284, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2372, UINT16_MAX, 2372, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6721, UINT16_MAX, 6721, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2378, UINT16_MAX, 2378, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6722, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6723, UINT16_MAX, 6723, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6724, UINT16_MAX, 6724, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2381, UINT16_MAX, 2381, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6725, UINT16_MAX, 6725, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6726, UINT16_MAX, 6726, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6727, UINT16_MAX, 6727, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6728, UINT16_MAX, 6728, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6729, UINT16_MAX, 6729, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6730, UINT16_MAX, 6730, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6731, UINT16_MAX, 6731, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6732, UINT16_MAX, 6732, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6733, UINT16_MAX, 6733, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6734, UINT16_MAX, 6734, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6735, UINT16_MAX, 6735, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6736, UINT16_MAX, 6736, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6737, UINT16_MAX, 6737, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6738, UINT16_MAX, 6738, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6739, UINT16_MAX, 6739, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6740, UINT16_MAX, 6740, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6741, UINT16_MAX, 6741, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6742, UINT16_MAX, 6742, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2394, UINT16_MAX, 2394, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6743, UINT16_MAX, 6743, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6744, UINT16_MAX, 6744, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6745, UINT16_MAX, 6745, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6746, UINT16_MAX, 6746, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6747, UINT16_MAX, 6747, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6748, UINT16_MAX, 6748, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6749, UINT16_MAX, 6749, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6750, UINT16_MAX, 6750, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6751, UINT16_MAX, 6751, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6752, UINT16_MAX, 6752, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6753, UINT16_MAX, 6753, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6754, UINT16_MAX, 6754, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6755, UINT16_MAX, 6755, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6756, UINT16_MAX, 6756, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6757, UINT16_MAX, 6757, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6758, UINT16_MAX, 6758, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6759, UINT16_MAX, 6759, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6760, UINT16_MAX, 6760, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6761, UINT16_MAX, 6761, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6762, UINT16_MAX, 6762, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6763, UINT16_MAX, 6763, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6764, UINT16_MAX, 6764, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6765, UINT16_MAX, 6765, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 44, UINT16_MAX, 6766, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 28, UINT16_MAX, 6767, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 31, UINT16_MAX, 6768, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 42, UINT16_MAX, 6769, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6770, UINT16_MAX, 6770, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6771, UINT16_MAX, 6771, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 358, UINT16_MAX, 6772, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 473, UINT16_MAX, 6773, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6774, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6775, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6776, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6777, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6778, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6779, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6780, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6781, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6782, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6783, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6784, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6785, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6786, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6787, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6788, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6789, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6790, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6791, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6792, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6793, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6794, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6795, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6796, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6797, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6798, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6799, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6800, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6801, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6802, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6803, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6804, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6805, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6806, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6807, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6808, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6809, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6810, UINT16_MAX, 6810, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6811, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6812, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6813, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6814, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6815, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6816, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6817, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 6594, UINT16_MAX, 6818, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 6782, UINT16_MAX, 6819, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 4664, UINT16_MAX, 6820, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 6809, UINT16_MAX, 6821, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6822, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6823, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6824, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6825, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6826, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6827, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6828, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6829, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 6830, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1070, UINT16_MAX, 6831, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6832, 6832, UINT16_MAX, 6832, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6833, 6833, UINT16_MAX, 6833, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6834, 6834, UINT16_MAX, 6834, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6835, 6835, UINT16_MAX, 6835, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6836, 6836, UINT16_MAX, 6836, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6837, 6837, UINT16_MAX, 6837, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6838, 6838, UINT16_MAX, 6838, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6839, 6839, UINT16_MAX, 6839, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6840, 6840, UINT16_MAX, 6840, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6841, 6841, UINT16_MAX, 6841, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6842, 6842, UINT16_MAX, 6842, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6843, 6843, UINT16_MAX, 6843, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6844, 6844, UINT16_MAX, 6844, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6845, 6845, UINT16_MAX, 6845, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6846, 6846, UINT16_MAX, 6846, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6847, 6847, UINT16_MAX, 6847, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6848, 6848, UINT16_MAX, 6848, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6849, 6849, UINT16_MAX, 6849, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6850, 6850, UINT16_MAX, 6850, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6851, 6851, UINT16_MAX, 6851, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6852, 6852, UINT16_MAX, 6852, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6853, 6853, UINT16_MAX, 6853, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6854, 6854, UINT16_MAX, 6854, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6855, 6855, UINT16_MAX, 6855, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6856, 6856, UINT16_MAX, 6856, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6857, 6857, UINT16_MAX, 6857, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6858, 6858, UINT16_MAX, 6858, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6859, 6859, UINT16_MAX, 6859, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6860, 6860, UINT16_MAX, 6860, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6861, 6861, UINT16_MAX, 6861, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6862, 6862, UINT16_MAX, 6862, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6863, 6863, UINT16_MAX, 6863, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6864, 6864, UINT16_MAX, 6864, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6865, 6865, UINT16_MAX, 6865, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6866, 6866, UINT16_MAX, 6866, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6867, 6867, UINT16_MAX, 6867, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6868, 6868, UINT16_MAX, 6868, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6869, 6869, UINT16_MAX, 6869, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6870, 6870, UINT16_MAX, 6870, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6871, 6871, UINT16_MAX, 6871, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6872, 6872, UINT16_MAX, 6872, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6873, 6873, UINT16_MAX, 6873, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6874, 6874, UINT16_MAX, 6874, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6875, 6875, UINT16_MAX, 6875, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6876, 6876, UINT16_MAX, 6876, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6877, 6877, UINT16_MAX, 6877, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6878, 6878, UINT16_MAX, 6878, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6879, 6879, UINT16_MAX, 6879, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6880, 6880, UINT16_MAX, 6880, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6881, 6881, UINT16_MAX, 6881, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6882, 6882, UINT16_MAX, 6882, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6883, 6883, UINT16_MAX, 6883, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6884, 6884, UINT16_MAX, 6884, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6885, 6885, UINT16_MAX, 6885, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6886, 6886, UINT16_MAX, 6886, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6887, 6887, UINT16_MAX, 6887, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6888, 6888, UINT16_MAX, 6888, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6889, 6889, UINT16_MAX, 6889, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6890, 6890, UINT16_MAX, 6890, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6891, 6891, UINT16_MAX, 6891, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6892, 6892, UINT16_MAX, 6892, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6893, 6893, UINT16_MAX, 6893, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6894, 6894, UINT16_MAX, 6894, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6895, 6895, UINT16_MAX, 6895, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6896, 6896, UINT16_MAX, 6896, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6897, 6897, UINT16_MAX, 6897, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6898, 6898, UINT16_MAX, 6898, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6899, 6899, UINT16_MAX, 6899, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6900, 6900, UINT16_MAX, 6900, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6901, 6901, UINT16_MAX, 6901, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6902, 6902, UINT16_MAX, 6902, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6903, 6903, UINT16_MAX, 6903, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6904, 6904, UINT16_MAX, 6904, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6905, 6905, UINT16_MAX, 6905, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6906, 6906, UINT16_MAX, 6906, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6907, 6907, UINT16_MAX, 6907, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6908, 6908, UINT16_MAX, 6908, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6909, 6909, UINT16_MAX, 6909, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6910, 6910, UINT16_MAX, 6910, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6911, 6911, UINT16_MAX, 6911, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_LV, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_LVT, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_CS, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_CO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6912, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6913, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4998, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6914, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6915, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6916, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6917, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5052, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6918, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5006, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6919, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6920, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6921, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6922, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6923, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6924, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6925, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6926, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6927, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6928, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6929, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6930, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6931, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6932, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6933, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6934, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6935, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6936, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6937, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6938, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6939, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6940, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6941, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6942, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6943, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6944, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6945, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6946, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6947, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6948, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6949, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6950, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6951, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6952, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6953, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6954, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6955, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6956, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6957, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6958, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6959, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4964, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6960, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6961, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6962, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6963, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6964, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6965, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6966, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6967, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6968, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6969, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6970, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5037, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6971, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6972, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6973, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6974, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6975, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6976, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6977, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6978, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6979, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6980, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6981, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6982, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6983, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6984, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6985, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6986, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6987, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6988, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6989, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6990, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6991, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6992, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6993, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6994, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6995, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6996, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6997, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6998, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 6999, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7000, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7001, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7002, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7003, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7004, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7005, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7006, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7007, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7008, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7009, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7010, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7011, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7012, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7013, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7014, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7015, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7016, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7017, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5000, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7018, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7019, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7020, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7021, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7022, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7023, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7024, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7025, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7026, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7027, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7028, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7029, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7030, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7031, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7032, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4877, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7033, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7034, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7035, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7036, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7037, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7038, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7039, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7040, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4858, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7041, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7042, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7043, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7044, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7045, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7046, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7047, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7048, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7049, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7050, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7051, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7052, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7053, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7054, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7055, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7056, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7057, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7058, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7059, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7060, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7061, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7062, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7063, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7064, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7065, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7066, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7067, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7068, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7069, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7070, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7071, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7072, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7073, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7074, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7075, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7076, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7077, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7078, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7079, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7080, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7081, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7082, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7083, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7084, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7085, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7086, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7087, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7088, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7089, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7090, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7091, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7092, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7093, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7094, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5051, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7095, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7096, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7097, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7098, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7099, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7100, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7101, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7102, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7103, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7104, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7105, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7106, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5603, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7107, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7108, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7109, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7110, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7111, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7112, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7113, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7114, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7115, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7116, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7117, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7118, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7119, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7120, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7121, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7122, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7123, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7124, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7125, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7126, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7127, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7128, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5005, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7129, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7130, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7131, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7132, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7133, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7134, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7135, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7136, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7137, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7138, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7139, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7140, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7141, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4956, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7142, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7143, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7144, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7145, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7146, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7147, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7148, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7149, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7150, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7151, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7152, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7153, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7154, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7155, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7156, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7157, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4983, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7158, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4986, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7159, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7160, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7161, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7162, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7163, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7164, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7165, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7166, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7167, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7168, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7169, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7170, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7171, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7172, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4963, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7173, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7174, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7175, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7176, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7177, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7178, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7179, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7180, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7181, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7182, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7183, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7184, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7185, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7186, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7187, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7188, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7189, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7190, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7191, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7192, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7193, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7194, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4884, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7195, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7196, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7197, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7198, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7199, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7200, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7201, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7202, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7203, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7204, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7205, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7206, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7207, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7208, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7209, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5608, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7210, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7211, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7212, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7213, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5612, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7214, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7215, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7216, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7217, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7218, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7219, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7220, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7221, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7222, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7223, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7224, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7225, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7226, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7227, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7228, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7229, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7230, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7231, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7232, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7233, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7234, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7235, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7236, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7237, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7239, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7240, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7241, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7242, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7243, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7244, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7245, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7246, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7247, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7248, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7249, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7250, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7251, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7252, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7253, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7254, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7255, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7256, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7257, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7258, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7259, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7260, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7261, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7262, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7263, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7264, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7265, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7266, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7267, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7268, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7269, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7270, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4917, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7271, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7272, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7273, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7274, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7275, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7276, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7277, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7278, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7279, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7280, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7281, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7282, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7283, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7284, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7285, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7286, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7287, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7288, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7289, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7290, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7291, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7292, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7293, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7294, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7295, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7296, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7297, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7298, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7299, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7300, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7301, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7302, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7303, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7304, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7305, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7306, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7307, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7308, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7310, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7312, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7314, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7315, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7316, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7317, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7319, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7321, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7323, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7324, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23709, 23709, 7327, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23712, 23712, 7330, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23715, 23715, 7333, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 40102, 40102, 7337, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 40106, 40106, 7341, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23726, 23728, 7346, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23728, 23728, 7347, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23732, 23732, 7350, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23735, 23735, 7353, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23738, 23738, 7356, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23741, 23741, 7359, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23744, 23744, 7362, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23747, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MN, 26, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23749, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 7367, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 4013, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 4016, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 7368, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 7369, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 7370, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 7371, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 7372, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 7373, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_FONT, 3939, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23758, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23760, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23762, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23764, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23766, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23768, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23770, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23772, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23774, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23776, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23778, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23780, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23782, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23784, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23786, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23788, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23790, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23792, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23794, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23796, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23798, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23800, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23802, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23804, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23806, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23808, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23810, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23812, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23814, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23816, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23818, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 23820, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_COMPAT, 23822, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7440, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7440, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7441, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7441, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7441, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7441, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7442, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7442, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7442, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7442, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7443, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7443, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7443, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7443, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7444, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7444, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7444, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7444, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7445, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7445, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7445, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7445, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7446, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7446, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7446, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7446, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7447, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7447, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7447, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7447, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7448, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7448, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7448, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7448, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7449, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7449, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7449, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7449, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7450, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7450, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7450, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7450, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7451, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7451, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7451, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7451, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7452, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7452, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7452, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7452, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7453, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7453, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7454, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7454, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7455, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7455, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7456, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7456, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7457, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7457, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7458, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7458, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7459, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7459, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7459, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7459, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7460, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7460, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7460, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7460, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7461, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7461, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7461, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7461, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7462, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7462, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7462, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7462, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7464, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7464, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7464, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7464, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7465, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7465, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7466, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7466, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7466, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7466, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7467, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7467, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7467, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7467, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7468, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7468, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7469, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7469, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7470, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7470, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7470, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7470, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7471, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7471, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7472, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7472, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7473, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7473, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7474, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7475, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7475, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7476, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7476, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7477, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7477, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7478, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7478, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7478, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7478, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7479, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7479, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23864, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23864, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23866, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23866, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23868, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23868, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23870, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23870, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23872, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23872, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23874, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23874, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23876, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23876, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23876, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23878, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23878, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23878, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7496, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7496, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 7496, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 7496, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23881, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23883, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23885, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23887, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23889, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23891, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23893, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23895, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23897, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23899, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23901, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23903, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23905, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23907, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23909, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23911, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23913, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23915, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23917, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23919, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23921, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23923, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23925, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23927, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23929, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23931, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23933, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23935, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23937, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23939, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23941, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23943, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23945, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23947, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23949, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23951, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23953, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23955, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23957, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23959, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23961, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23963, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23965, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23967, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23969, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23971, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23973, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23975, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23977, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23979, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23981, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23983, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23985, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23987, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23989, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23991, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23993, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23995, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23997, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 23999, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24001, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24003, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24005, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24007, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24009, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24011, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24013, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24015, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24017, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24019, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24021, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24023, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24025, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24027, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24029, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24031, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24033, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24035, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24037, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24039, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24041, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24043, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24045, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24047, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24049, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24051, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24053, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24055, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24057, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24059, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24061, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24063, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24065, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 40451, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 40454, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 40457, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 40460, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 40463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 40466, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24085, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24087, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23885, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24089, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23887, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24091, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24093, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23895, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24095, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23897, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23899, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24097, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24099, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23907, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24101, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23909, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23911, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24103, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24105, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23915, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24107, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23917, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23919, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23977, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23979, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23985, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23987, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23989, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23997, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 23999, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24001, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24003, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24011, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24013, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24015, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24109, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24023, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24111, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24113, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24035, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24115, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24037, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24039, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24065, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24117, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24119, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24055, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24121, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24057, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24059, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23881, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23883, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24123, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23885, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24125, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23889, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23891, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23893, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23895, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24127, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23901, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23903, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23905, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23907, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24129, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23915, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23921, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23923, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23925, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23927, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23929, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23933, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23935, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23937, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23939, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23941, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23943, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24131, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23945, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23947, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23949, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23951, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23953, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23955, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23959, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23961, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23963, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23965, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23967, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23969, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23971, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23973, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23975, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23981, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23983, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23991, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23993, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23995, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23997, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23999, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24005, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24007, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24009, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24011, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24133, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24017, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24019, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24021, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24023, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24029, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24031, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24033, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24035, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24135, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24041, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24043, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24137, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24049, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24051, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24053, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24055, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24139, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23885, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24125, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23895, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24127, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23907, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24129, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23915, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24141, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23941, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24143, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24145, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24147, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23997, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23999, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24011, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24035, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24135, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24055, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24139, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 40533, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 40536, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 40539, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24158, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24160, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24162, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24164, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24166, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24168, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24170, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24172, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24174, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24176, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24178, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24180, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24182, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24184, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24186, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24188, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24190, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24192, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24194, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24196, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24198, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24200, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24202, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24145, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24204, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24206, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24208, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24210, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24158, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24160, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24162, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24164, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24166, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24168, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24170, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24172, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24174, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24176, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24178, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24180, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24182, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24184, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24186, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24188, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24190, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24192, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24194, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24196, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24198, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24200, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24202, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24145, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24204, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24206, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24208, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24210, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24198, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24200, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24202, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24145, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24143, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 24147, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 23957, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23935, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23937, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23939, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24198, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24200, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24202, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23957, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 23959, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24212, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24212, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40598, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40601, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40601, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40604, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40607, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40610, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40613, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40616, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40619, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40619, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40622, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40625, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40628, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40631, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40634, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40637, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40637, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40640, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40643, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40643, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40646, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40646, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40649, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40652, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40652, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40655, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40658, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40658, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40661, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40661, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40664, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40667, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40667, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40670, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40670, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40673, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40676, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40679, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40682, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40682, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40685, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40688, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40691, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40694, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40697, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40697, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40700, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40703, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40706, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40709, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40712, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40715, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40715, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40718, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40718, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40721, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40721, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40724, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40727, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40730, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40733, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40736, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40739, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40742, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40745, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40748, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40751, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40754, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40757, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40760, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40760, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40763, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40766, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40769, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40772, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40772, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40775, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40778, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40781, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40784, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40787, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40790, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40793, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40796, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40799, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40802, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40805, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40808, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40811, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40814, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40817, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40820, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40823, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40826, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40829, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40832, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40835, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40838, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40700, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40706, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40841, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40844, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40847, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40850, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40853, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40856, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40853, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40847, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40859, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40862, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40865, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40868, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40871, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40856, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40679, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 40649, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40874, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 40877, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 40880, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 40883, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 57270, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 57275, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 57280, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 57285, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 57290, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 57295, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 57300, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 40921, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 57308, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 57327, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 57336, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8189, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8190, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8191, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8192, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 1153, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8193, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8194, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8195, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8196, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8197, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8198, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8199, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8200, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PC, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8201, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 3942, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 3943, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8202, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8203, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8204, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8205, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8206, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8207, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8208, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8209, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 4264, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 4265, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8210, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8211, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8212, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8213, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8214, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 8215, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 8216, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PC, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 8201, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_SMALL, 8189, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8190, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_SMALL, 3900, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 1153, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_SMALL, 8192, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8194, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8193, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8199, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 3942, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 3943, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8202, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8203, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8204, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8205, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_SMALL, 8217, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8218, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8219, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_SMALL, 3939, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_SMALL, 8220, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8221, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8222, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 3941, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8223, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_SMALL, 8224, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_SMALL, 8225, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 8226, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24611, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24613, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24615, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24617, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24619, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24621, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24623, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24625, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24627, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24629, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24631, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24633, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24635, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 24637, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8255, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8256, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8256, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8257, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8257, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8258, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8258, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8259, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8259, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8260, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8260, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8260, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8260, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8261, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8261, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8262, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8262, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8262, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8262, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8263, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8263, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8264, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8264, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8264, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8264, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8265, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8265, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8265, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8265, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8266, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8266, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8266, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8266, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8267, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8267, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8267, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8267, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8268, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8268, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8268, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8268, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8269, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8269, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8270, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8270, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8271, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8271, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8272, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8272, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8273, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8273, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8273, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8273, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8274, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8274, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8274, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8274, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8275, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8275, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8275, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8275, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8276, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8276, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8276, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8276, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8277, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8277, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8277, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8277, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8278, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8278, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8278, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8278, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8279, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8279, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8279, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8279, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8280, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8280, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8280, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8280, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8281, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8281, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8281, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8281, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8282, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8282, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8282, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8282, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8283, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8283, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8283, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8283, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8284, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8284, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8284, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8284, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8285, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8285, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8285, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8285, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8286, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8286, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8286, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8286, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8287, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8287, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8287, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8287, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8288, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8288, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 7479, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 7479, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 8289, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 8289, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 8289, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 8289, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24674, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24674, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24676, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24676, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24678, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24678, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 24680, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 24680, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8193, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8298, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, 8217, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, 8224, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, 8225, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8218, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8299, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 3942, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 3943, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8219, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_WIDE, 3939, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_WIDE, 8189, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_WIDE, 8220, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_WIDE, 3900, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_WIDE, 8300, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 3931, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 66, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 58, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 59, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 3933, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 3934, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 3935, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 3936, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 3937, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 3938, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_WIDE, 8192, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 1153, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8221, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 3941, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8222, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8194, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8226, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 26, 8301, UINT16_MAX, 8301, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 27, 8302, UINT16_MAX, 8302, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 28, 8303, UINT16_MAX, 8303, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 29, 8304, UINT16_MAX, 8304, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 30, 8305, UINT16_MAX, 8305, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 31, 8306, UINT16_MAX, 8306, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 32, 8307, UINT16_MAX, 8307, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 33, 8308, UINT16_MAX, 8308, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 34, 8309, UINT16_MAX, 8309, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 35, 8310, UINT16_MAX, 8310, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 36, 8311, UINT16_MAX, 8311, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 37, 8312, UINT16_MAX, 8312, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 38, 8313, UINT16_MAX, 8313, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 39, 8314, UINT16_MAX, 8314, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 40, 8315, UINT16_MAX, 8315, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 41, 8316, UINT16_MAX, 8316, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 42, 8317, UINT16_MAX, 8317, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 43, 8318, UINT16_MAX, 8318, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 44, 8319, UINT16_MAX, 8319, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 45, 8320, UINT16_MAX, 8320, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 46, 8321, UINT16_MAX, 8321, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 47, 8322, UINT16_MAX, 8322, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 48, 8323, UINT16_MAX, 8323, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 49, 8324, UINT16_MAX, 8324, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 50, 8325, UINT16_MAX, 8325, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 51, 8326, UINT16_MAX, 8326, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8214, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8223, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8215, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8327, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PC, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8201, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 3856, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 0, UINT16_MAX, 8328, UINT16_MAX, 8328, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1, UINT16_MAX, 8329, UINT16_MAX, 8329, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 2, UINT16_MAX, 8330, UINT16_MAX, 8330, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 3, UINT16_MAX, 8331, UINT16_MAX, 8331, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 4, UINT16_MAX, 8332, UINT16_MAX, 8332, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 5, UINT16_MAX, 8333, UINT16_MAX, 8333, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 6, UINT16_MAX, 8334, UINT16_MAX, 8334, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 7, UINT16_MAX, 8335, UINT16_MAX, 8335, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 8, UINT16_MAX, 8336, UINT16_MAX, 8336, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 9, UINT16_MAX, 8337, UINT16_MAX, 8337, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 10, UINT16_MAX, 8338, UINT16_MAX, 8338, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 11, UINT16_MAX, 8339, UINT16_MAX, 8339, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 12, UINT16_MAX, 8340, UINT16_MAX, 8340, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 13, UINT16_MAX, 8341, UINT16_MAX, 8341, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 14, UINT16_MAX, 8342, UINT16_MAX, 8342, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 15, UINT16_MAX, 8343, UINT16_MAX, 8343, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 16, UINT16_MAX, 8344, UINT16_MAX, 8344, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 17, UINT16_MAX, 8345, UINT16_MAX, 8345, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 18, UINT16_MAX, 8346, UINT16_MAX, 8346, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 19, UINT16_MAX, 8347, UINT16_MAX, 8347, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 20, UINT16_MAX, 8348, UINT16_MAX, 8348, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 21, UINT16_MAX, 8349, UINT16_MAX, 8349, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 22, UINT16_MAX, 8350, UINT16_MAX, 8350, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 23, UINT16_MAX, 8351, UINT16_MAX, 8351, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 24, UINT16_MAX, 8352, UINT16_MAX, 8352, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 25, UINT16_MAX, 8353, UINT16_MAX, 8353, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8202, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8354, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8203, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8355, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8356, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8357, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8191, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8210, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8211, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8190, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8358, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5747, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8359, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8360, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8361, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8362, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8363, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8364, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8365, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8366, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8367, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8368, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5701, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5702, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5703, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5704, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5705, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5706, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5707, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5708, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5709, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5710, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5711, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5712, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5713, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5714, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5715, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5716, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5717, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5718, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5719, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5720, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5721, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5722, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5723, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5724, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5725, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5726, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5727, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5728, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5729, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5730, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5731, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5732, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5733, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5734, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5735, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5736, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5737, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5738, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5739, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5740, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5741, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5742, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5743, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 5744, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8369, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8370, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8371, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8372, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, true, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8373, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8374, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8375, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8376, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8377, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8378, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8379, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8380, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8381, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8382, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8383, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8384, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8385, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8386, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8387, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8388, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8389, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8390, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8391, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8392, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8393, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8394, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8395, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8396, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8397, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8398, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8399, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8400, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8401, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8402, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8403, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8404, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8405, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8406, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8407, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8408, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8409, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8410, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8411, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8412, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8413, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8414, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8415, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8416, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8417, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8418, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8419, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8420, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8421, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8422, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 8423, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, 8424, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, 8425, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8426, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8427, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 8428, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, 8429, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, 8430, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8431, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8432, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8433, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8434, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8435, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8436, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 8437, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, true, 0, false, 0, UTF8PROC_BOUNDCLASS_CONTROL, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8438, UINT16_MAX, 8438, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8440, UINT16_MAX, 8440, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8442, UINT16_MAX, 8442, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8444, UINT16_MAX, 8444, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8446, UINT16_MAX, 8446, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8448, UINT16_MAX, 8448, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8450, UINT16_MAX, 8450, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8452, UINT16_MAX, 8452, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8454, UINT16_MAX, 8454, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8456, UINT16_MAX, 8456, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8458, UINT16_MAX, 8458, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8460, UINT16_MAX, 8460, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8462, UINT16_MAX, 8462, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8464, UINT16_MAX, 8464, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8466, UINT16_MAX, 8466, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8468, UINT16_MAX, 8468, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8470, UINT16_MAX, 8470, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8472, UINT16_MAX, 8472, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8474, UINT16_MAX, 8474, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8476, UINT16_MAX, 8476, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8478, UINT16_MAX, 8478, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8480, UINT16_MAX, 8480, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8482, UINT16_MAX, 8482, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8484, UINT16_MAX, 8484, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8486, UINT16_MAX, 8486, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8488, UINT16_MAX, 8488, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8490, UINT16_MAX, 8490, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8492, UINT16_MAX, 8492, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8494, UINT16_MAX, 8494, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8496, UINT16_MAX, 8496, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8498, UINT16_MAX, 8498, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8500, UINT16_MAX, 8500, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8502, UINT16_MAX, 8502, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8504, UINT16_MAX, 8504, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8506, UINT16_MAX, 8506, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8508, UINT16_MAX, 8508, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8510, UINT16_MAX, 8510, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8512, UINT16_MAX, 8512, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8514, UINT16_MAX, 8514, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8516, UINT16_MAX, 8516, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8518, UINT16_MAX, 8518, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8520, UINT16_MAX, 8520, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8522, UINT16_MAX, 8522, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8524, UINT16_MAX, 8524, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8526, UINT16_MAX, 8526, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8528, UINT16_MAX, 8528, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8530, UINT16_MAX, 8530, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8532, UINT16_MAX, 8532, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8534, UINT16_MAX, 8534, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8536, UINT16_MAX, 8536, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8538, UINT16_MAX, 8538, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8540, UINT16_MAX, 8540, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8542, UINT16_MAX, 8542, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8544, UINT16_MAX, 8544, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8546, UINT16_MAX, 8546, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8548, UINT16_MAX, 8548, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8550, UINT16_MAX, 8550, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8552, UINT16_MAX, 8552, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8554, UINT16_MAX, 8554, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8556, UINT16_MAX, 8556, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8558, UINT16_MAX, 8558, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8560, UINT16_MAX, 8560, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8562, UINT16_MAX, 8562, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8564, UINT16_MAX, 8564, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8566, UINT16_MAX, 8566, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8568, UINT16_MAX, 8568, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8570, UINT16_MAX, 8570, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8572, UINT16_MAX, 8572, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8574, UINT16_MAX, 8574, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8576, UINT16_MAX, 8576, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8578, UINT16_MAX, 8578, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8580, UINT16_MAX, 8580, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8582, UINT16_MAX, 8582, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8584, UINT16_MAX, 8584, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8586, UINT16_MAX, 8586, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8588, UINT16_MAX, 8588, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8590, UINT16_MAX, 8590, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8592, UINT16_MAX, 8592, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8594, UINT16_MAX, 8594, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8596, UINT16_MAX, 8596, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8598, UINT16_MAX, 8598, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8600, UINT16_MAX, 8600, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8602, UINT16_MAX, 8602, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8604, UINT16_MAX, 8604, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8606, UINT16_MAX, 8606, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8608, UINT16_MAX, 8608, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8610, UINT16_MAX, 8610, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8612, UINT16_MAX, 8612, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8614, UINT16_MAX, 8614, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8616, UINT16_MAX, 8616, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8618, UINT16_MAX, 8618, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8620, UINT16_MAX, 8620, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8622, UINT16_MAX, 8622, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8624, UINT16_MAX, 8624, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8626, UINT16_MAX, 8626, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8628, UINT16_MAX, 8628, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8630, UINT16_MAX, 8630, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8632, UINT16_MAX, 8632, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8634, UINT16_MAX, 8634, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8636, UINT16_MAX, 8636, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8638, UINT16_MAX, 8638, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8640, UINT16_MAX, 8640, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8642, UINT16_MAX, 8642, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8644, UINT16_MAX, 8644, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8646, UINT16_MAX, 8646, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8648, UINT16_MAX, 8648, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8650, UINT16_MAX, 8650, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8652, UINT16_MAX, 8652, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8654, UINT16_MAX, 8654, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8656, UINT16_MAX, 8656, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8658, UINT16_MAX, 8658, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8660, UINT16_MAX, 8660, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8662, UINT16_MAX, 8662, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8664, UINT16_MAX, 8664, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8666, UINT16_MAX, 8666, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8668, UINT16_MAX, 8668, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8670, UINT16_MAX, 8670, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8672, UINT16_MAX, 8672, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8674, UINT16_MAX, 8674, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8676, UINT16_MAX, 8676, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8678, UINT16_MAX, 8678, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8680, UINT16_MAX, 8680, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8682, UINT16_MAX, 8682, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8684, UINT16_MAX, 8684, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8686, UINT16_MAX, 8686, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8688, UINT16_MAX, 8688, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8690, UINT16_MAX, 8690, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8692, UINT16_MAX, 8692, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8694, UINT16_MAX, 8694, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8696, UINT16_MAX, 8696, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8698, UINT16_MAX, 8698, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8700, UINT16_MAX, 8700, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8702, UINT16_MAX, 8702, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8704, UINT16_MAX, 8704, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8706, UINT16_MAX, 8706, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8708, UINT16_MAX, 8708, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8710, UINT16_MAX, 8710, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8712, UINT16_MAX, 8712, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8714, UINT16_MAX, 8714, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8716, UINT16_MAX, 8716, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8718, UINT16_MAX, 8718, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8720, UINT16_MAX, 8720, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8722, UINT16_MAX, 8722, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8724, UINT16_MAX, 8724, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8726, UINT16_MAX, 8726, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8728, UINT16_MAX, 8728, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8730, UINT16_MAX, 8730, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8732, UINT16_MAX, 8732, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8734, UINT16_MAX, 8734, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8736, UINT16_MAX, 8736, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8738, UINT16_MAX, 8738, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8740, UINT16_MAX, 8740, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8742, UINT16_MAX, 8742, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8744, UINT16_MAX, 8744, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8746, UINT16_MAX, 8746, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8748, UINT16_MAX, 8748, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8750, UINT16_MAX, 8750, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8752, UINT16_MAX, 8752, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8754, UINT16_MAX, 8754, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8756, UINT16_MAX, 8756, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8758, UINT16_MAX, 8758, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8760, UINT16_MAX, 8760, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8762, UINT16_MAX, 8762, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8764, UINT16_MAX, 8764, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8766, UINT16_MAX, 8766, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8768, UINT16_MAX, 8768, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8770, UINT16_MAX, 8770, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8772, UINT16_MAX, 8772, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8774, UINT16_MAX, 8774, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8776, UINT16_MAX, 8776, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8778, UINT16_MAX, 8778, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8780, UINT16_MAX, 8780, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8782, UINT16_MAX, 8782, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8784, UINT16_MAX, 8784, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8786, UINT16_MAX, 8786, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8788, UINT16_MAX, 8788, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8790, UINT16_MAX, 8790, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8792, UINT16_MAX, 8792, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8794, UINT16_MAX, 8794, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8796, UINT16_MAX, 8796, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8798, UINT16_MAX, 8798, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8800, UINT16_MAX, 8800, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8802, UINT16_MAX, 8802, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8804, UINT16_MAX, 8804, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8806, UINT16_MAX, 8806, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8808, UINT16_MAX, 8808, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8810, UINT16_MAX, 8810, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8812, UINT16_MAX, 8812, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8814, UINT16_MAX, 8814, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8816, UINT16_MAX, 8816, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8818, UINT16_MAX, 8818, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8820, UINT16_MAX, 8820, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8822, UINT16_MAX, 8822, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8824, UINT16_MAX, 8824, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8826, UINT16_MAX, 8826, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8828, UINT16_MAX, 8828, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8830, UINT16_MAX, 8830, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8832, UINT16_MAX, 8832, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8834, UINT16_MAX, 8834, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8836, UINT16_MAX, 8836, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8838, UINT16_MAX, 8838, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8840, UINT16_MAX, 8840, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8842, UINT16_MAX, 8842, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8844, UINT16_MAX, 8844, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8846, UINT16_MAX, 8846, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8848, UINT16_MAX, 8848, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8850, UINT16_MAX, 8850, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8852, UINT16_MAX, 8852, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8854, UINT16_MAX, 8854, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8856, UINT16_MAX, 8856, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8858, UINT16_MAX, 8858, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8860, UINT16_MAX, 8860, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8862, UINT16_MAX, 8862, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8864, UINT16_MAX, 8864, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8866, UINT16_MAX, 8866, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8868, UINT16_MAX, 8868, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8870, UINT16_MAX, 8870, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8872, UINT16_MAX, 8872, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8874, UINT16_MAX, 8874, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8876, UINT16_MAX, 8876, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8878, UINT16_MAX, 8878, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8880, UINT16_MAX, 8880, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25266, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 928, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 929, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25269, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8888, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 8890, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 8891, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 95, UINT16_MAX, 8892, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1080, UINT16_MAX, 8894, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 601, UINT16_MAX, 8896, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1090, UINT16_MAX, 8898, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 6828, UINT16_MAX, 8900, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1092, UINT16_MAX, 8902, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1091, UINT16_MAX, 8904, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 609, UINT16_MAX, 8906, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 610, UINT16_MAX, 8908, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 2354, UINT16_MAX, 8910, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1017, UINT16_MAX, 8912, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1023, UINT16_MAX, 8914, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1096, UINT16_MAX, 8916, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 6748, UINT16_MAX, 8918, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1027, UINT16_MAX, 8920, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 619, UINT16_MAX, 8922, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1082, UINT16_MAX, 8924, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 357, UINT16_MAX, 8926, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1083, UINT16_MAX, 8928, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1032, UINT16_MAX, 8930, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1061, UINT16_MAX, 8932, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1097, UINT16_MAX, 8934, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1098, UINT16_MAX, 8936, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 6721, UINT16_MAX, 8938, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 8940, UINT16_MAX, 8942, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 6694, UINT16_MAX, 8944, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1039, UINT16_MAX, 8946, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 8948, UINT16_MAX, 8950, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1071, UINT16_MAX, 8952, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 8954, UINT16_MAX, 8956, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 142, UINT16_MAX, 8958, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1047, UINT16_MAX, 8960, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1048, UINT16_MAX, 8962, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 16, UINT16_MAX, 8964, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1051, UINT16_MAX, 8966, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 8968, UINT16_MAX, 8970, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 4666, UINT16_MAX, 8972, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1055, UINT16_MAX, 8974, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 642, UINT16_MAX, 8976, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1095, UINT16_MAX, 8978, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1093, UINT16_MAX, 8980, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 6829, UINT16_MAX, 8982, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1094, UINT16_MAX, 8984, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 650, UINT16_MAX, 8986, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 4675, UINT16_MAX, 8988, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1072, UINT16_MAX, 8990, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1088, UINT16_MAX, 8992, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1089, UINT16_MAX, 8994, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1079, UINT16_MAX, 8996, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 8998, UINT16_MAX, 8999, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 9001, UINT16_MAX, 9002, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 9004, UINT16_MAX, 9005, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 9007, UINT16_MAX, 9009, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 9011, UINT16_MAX, 9013, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9015, UINT16_MAX, 9015, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9017, UINT16_MAX, 9017, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9019, UINT16_MAX, 9019, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9021, UINT16_MAX, 9021, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9023, UINT16_MAX, 9023, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9025, UINT16_MAX, 9025, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9027, UINT16_MAX, 9027, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9029, UINT16_MAX, 9029, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9031, UINT16_MAX, 9031, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9033, UINT16_MAX, 9033, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9035, UINT16_MAX, 9035, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9037, UINT16_MAX, 9037, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9039, UINT16_MAX, 9039, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9041, UINT16_MAX, 9041, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9043, UINT16_MAX, 9043, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9045, UINT16_MAX, 9045, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9047, UINT16_MAX, 9047, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9049, UINT16_MAX, 9049, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9051, UINT16_MAX, 9051, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9053, UINT16_MAX, 9053, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9055, UINT16_MAX, 9055, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9057, UINT16_MAX, 9057, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9059, UINT16_MAX, 9059, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9061, UINT16_MAX, 9061, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9063, UINT16_MAX, 9063, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9065, UINT16_MAX, 9065, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9067, UINT16_MAX, 9067, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9069, UINT16_MAX, 9069, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9071, UINT16_MAX, 9071, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9073, UINT16_MAX, 9073, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9075, UINT16_MAX, 9075, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9077, UINT16_MAX, 9077, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9079, UINT16_MAX, 9079, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9081, UINT16_MAX, 9081, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9083, UINT16_MAX, 9083, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9085, UINT16_MAX, 9085, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9087, UINT16_MAX, 9087, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9089, UINT16_MAX, 9089, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9091, UINT16_MAX, 9091, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9093, UINT16_MAX, 9093, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9095, UINT16_MAX, 9095, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9097, UINT16_MAX, 9097, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9099, UINT16_MAX, 9099, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9101, UINT16_MAX, 9101, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9103, UINT16_MAX, 9103, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9105, UINT16_MAX, 9105, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9107, UINT16_MAX, 9107, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9109, UINT16_MAX, 9109, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9111, UINT16_MAX, 9111, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9113, UINT16_MAX, 9113, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9115, UINT16_MAX, 9115, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9117, UINT16_MAX, 9117, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9119, UINT16_MAX, 9119, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9121, UINT16_MAX, 9121, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9123, UINT16_MAX, 9123, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9125, UINT16_MAX, 9125, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9127, UINT16_MAX, 9127, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9129, UINT16_MAX, 9129, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9131, UINT16_MAX, 9131, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9133, UINT16_MAX, 9133, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9135, UINT16_MAX, 9135, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9137, UINT16_MAX, 9137, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9139, UINT16_MAX, 9139, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9141, UINT16_MAX, 9141, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9143, UINT16_MAX, 9143, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9145, UINT16_MAX, 9145, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9147, UINT16_MAX, 9147, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9149, UINT16_MAX, 9149, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9151, UINT16_MAX, 9151, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9153, UINT16_MAX, 9153, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9155, UINT16_MAX, 9155, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9157, UINT16_MAX, 9157, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9159, UINT16_MAX, 9159, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9161, UINT16_MAX, 9161, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9163, UINT16_MAX, 9163, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9165, UINT16_MAX, 9165, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9167, UINT16_MAX, 9167, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9169, UINT16_MAX, 9169, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9171, UINT16_MAX, 9171, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9173, UINT16_MAX, 9173, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9175, UINT16_MAX, 9175, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9177, UINT16_MAX, 9177, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9179, UINT16_MAX, 9179, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9181, UINT16_MAX, 9181, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9183, UINT16_MAX, 9183, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9185, UINT16_MAX, 9185, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9187, UINT16_MAX, 9187, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9189, UINT16_MAX, 9189, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9191, UINT16_MAX, 9191, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9193, UINT16_MAX, 9193, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9195, UINT16_MAX, 9195, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9197, UINT16_MAX, 9197, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9199, UINT16_MAX, 9199, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9201, UINT16_MAX, 9201, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9203, UINT16_MAX, 9203, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9205, UINT16_MAX, 9205, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9207, UINT16_MAX, 9207, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9209, UINT16_MAX, 9209, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9211, UINT16_MAX, 9211, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9213, UINT16_MAX, 9213, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9215, UINT16_MAX, 9215, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9217, UINT16_MAX, 9217, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9219, UINT16_MAX, 9219, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9221, UINT16_MAX, 9221, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9223, UINT16_MAX, 9223, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9225, UINT16_MAX, 9225, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9227, UINT16_MAX, 9227, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9229, UINT16_MAX, 9229, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9231, UINT16_MAX, 9231, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9233, UINT16_MAX, 9233, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9235, UINT16_MAX, 9235, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9237, UINT16_MAX, 9237, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9239, UINT16_MAX, 9239, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9241, UINT16_MAX, 9241, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9243, UINT16_MAX, 9243, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9245, UINT16_MAX, 9245, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9247, UINT16_MAX, 9247, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9249, UINT16_MAX, 9249, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9251, UINT16_MAX, 9251, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9253, UINT16_MAX, 9253, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9255, UINT16_MAX, 9255, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9257, UINT16_MAX, 9257, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9259, UINT16_MAX, 9259, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 9261, UINT16_MAX, 9261, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9263, UINT16_MAX, 9263, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9265, UINT16_MAX, 9265, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9267, UINT16_MAX, 9267, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9269, UINT16_MAX, 9269, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9271, UINT16_MAX, 9271, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9273, UINT16_MAX, 9273, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9275, UINT16_MAX, 9275, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9277, UINT16_MAX, 9277, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9279, UINT16_MAX, 9279, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9281, UINT16_MAX, 9281, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9283, UINT16_MAX, 9283, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9285, UINT16_MAX, 9285, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9287, UINT16_MAX, 9287, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9289, UINT16_MAX, 9289, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9291, UINT16_MAX, 9291, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9293, UINT16_MAX, 9293, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9295, UINT16_MAX, 9295, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9297, UINT16_MAX, 9297, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9299, UINT16_MAX, 9299, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9301, UINT16_MAX, 9301, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9303, UINT16_MAX, 9303, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9305, UINT16_MAX, 9305, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_AN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 930, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25691, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 931, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25695, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 932, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25699, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, true, 0, false, 0, UTF8PROC_BOUNDCLASS_PREPEND, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 25703, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 25707, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 933, 1, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 934, 1, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 935, 2, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 25711, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 25715, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 937, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25719, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 938, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25723, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 939, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25727, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 940, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25731, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_CONSONANT},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 941, 3, true, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 25735, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 25739, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 25743, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 944, 3, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 25747, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 25751, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 25755, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 947, 1, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 948, 1, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 25759, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 25763, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9383, UINT16_MAX, 9383, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9385, UINT16_MAX, 9385, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9387, UINT16_MAX, 9387, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9389, UINT16_MAX, 9389, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9391, UINT16_MAX, 9391, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9393, UINT16_MAX, 9393, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9395, UINT16_MAX, 9395, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9397, UINT16_MAX, 9397, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9399, UINT16_MAX, 9399, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9401, UINT16_MAX, 9401, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9403, UINT16_MAX, 9403, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9405, UINT16_MAX, 9405, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9407, UINT16_MAX, 9407, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9409, UINT16_MAX, 9409, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9411, UINT16_MAX, 9411, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9413, UINT16_MAX, 9413, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9415, UINT16_MAX, 9415, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9417, UINT16_MAX, 9417, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9419, UINT16_MAX, 9419, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9421, UINT16_MAX, 9421, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9423, UINT16_MAX, 9423, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9425, UINT16_MAX, 9425, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9427, UINT16_MAX, 9427, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9429, UINT16_MAX, 9429, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9431, UINT16_MAX, 9431, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9433, UINT16_MAX, 9433, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9435, UINT16_MAX, 9435, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9437, UINT16_MAX, 9437, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9439, UINT16_MAX, 9439, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9441, UINT16_MAX, 9441, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9443, UINT16_MAX, 9443, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9445, UINT16_MAX, 9445, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9447, UINT16_MAX, 9447, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9449, UINT16_MAX, 9449, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9451, UINT16_MAX, 9451, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9453, UINT16_MAX, 9453, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9455, UINT16_MAX, 9455, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9457, UINT16_MAX, 9457, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9459, UINT16_MAX, 9459, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9461, UINT16_MAX, 9461, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9463, UINT16_MAX, 9463, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9465, UINT16_MAX, 9465, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9467, UINT16_MAX, 9467, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9469, UINT16_MAX, 9469, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9471, UINT16_MAX, 9471, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9473, UINT16_MAX, 9473, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9475, UINT16_MAX, 9475, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9477, UINT16_MAX, 9477, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9479, UINT16_MAX, 9479, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9481, UINT16_MAX, 9481, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9483, UINT16_MAX, 9483, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9485, UINT16_MAX, 9485, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9487, UINT16_MAX, 9487, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9489, UINT16_MAX, 9489, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9491, UINT16_MAX, 9491, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9493, UINT16_MAX, 9493, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9495, UINT16_MAX, 9495, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9497, UINT16_MAX, 9497, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9499, UINT16_MAX, 9499, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9501, UINT16_MAX, 9501, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9503, UINT16_MAX, 9503, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9505, UINT16_MAX, 9505, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9507, UINT16_MAX, 9507, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9509, UINT16_MAX, 9509, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 949, 1, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 25895, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 9, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, true, 0, false, 0, UTF8PROC_BOUNDCLASS_CONTROL, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 950, 4, true, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 25899, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 954, 2, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 25903, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 956, 1, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 25907, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 25911, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 25915, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 25919, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 25923, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 25927, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 957, 1, true, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 958, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_V, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 959, 1, true, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_V, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25931, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_V, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25935, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 960, 1, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_V, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 25939, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_V, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9559, UINT16_MAX, 9559, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9561, UINT16_MAX, 9561, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9563, UINT16_MAX, 9563, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9565, UINT16_MAX, 9565, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9567, UINT16_MAX, 9567, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9569, UINT16_MAX, 9569, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9571, UINT16_MAX, 9571, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9573, UINT16_MAX, 9573, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9575, UINT16_MAX, 9575, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9577, UINT16_MAX, 9577, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9579, UINT16_MAX, 9579, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9581, UINT16_MAX, 9581, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9583, UINT16_MAX, 9583, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9585, UINT16_MAX, 9585, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9587, UINT16_MAX, 9587, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9589, UINT16_MAX, 9589, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9591, UINT16_MAX, 9591, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9593, UINT16_MAX, 9593, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9595, UINT16_MAX, 9595, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9597, UINT16_MAX, 9597, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9599, UINT16_MAX, 9599, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9601, UINT16_MAX, 9601, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9603, UINT16_MAX, 9603, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9605, UINT16_MAX, 9605, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9607, UINT16_MAX, 9607, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9609, UINT16_MAX, 9609, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9611, UINT16_MAX, 9611, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9613, UINT16_MAX, 9613, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9615, UINT16_MAX, 9615, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9617, UINT16_MAX, 9617, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9619, UINT16_MAX, 9619, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9621, UINT16_MAX, 9621, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9623, UINT16_MAX, 9623, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9625, UINT16_MAX, 9625, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9627, UINT16_MAX, 9627, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9629, UINT16_MAX, 9629, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9631, UINT16_MAX, 9631, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9633, UINT16_MAX, 9633, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9635, UINT16_MAX, 9635, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9637, UINT16_MAX, 9637, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9639, UINT16_MAX, 9639, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9641, UINT16_MAX, 9641, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9643, UINT16_MAX, 9643, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9645, UINT16_MAX, 9645, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9647, UINT16_MAX, 9647, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9649, UINT16_MAX, 9649, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9651, UINT16_MAX, 9651, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9653, UINT16_MAX, 9653, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9655, UINT16_MAX, 9655, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9657, UINT16_MAX, 9657, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9659, UINT16_MAX, 9659, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9661, UINT16_MAX, 9661, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9663, UINT16_MAX, 9663, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9665, UINT16_MAX, 9665, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9667, UINT16_MAX, 9667, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9669, UINT16_MAX, 9669, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9671, UINT16_MAX, 9671, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9673, UINT16_MAX, 9673, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9675, UINT16_MAX, 9675, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9677, UINT16_MAX, 9677, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9679, UINT16_MAX, 9679, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9681, UINT16_MAX, 9681, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9683, UINT16_MAX, 9683, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9685, UINT16_MAX, 9685, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9687, UINT16_MAX, 9687, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9689, UINT16_MAX, 9689, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9691, UINT16_MAX, 9691, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9693, UINT16_MAX, 9693, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9695, UINT16_MAX, 9695, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9697, UINT16_MAX, 9697, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9699, UINT16_MAX, 9699, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9701, UINT16_MAX, 9701, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9703, UINT16_MAX, 9703, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9705, UINT16_MAX, 9705, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9707, UINT16_MAX, 9707, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9709, UINT16_MAX, 9709, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9711, UINT16_MAX, 9711, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9713, UINT16_MAX, 9713, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9715, UINT16_MAX, 9715, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9717, UINT16_MAX, 9717, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9719, UINT16_MAX, 9719, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9721, UINT16_MAX, 9721, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9723, UINT16_MAX, 9723, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9725, UINT16_MAX, 9725, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9727, UINT16_MAX, 9727, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9729, UINT16_MAX, 9729, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9731, UINT16_MAX, 9731, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9733, UINT16_MAX, 9733, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9735, UINT16_MAX, 9735, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9737, UINT16_MAX, 9737, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9739, UINT16_MAX, 9739, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9741, UINT16_MAX, 9741, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9743, UINT16_MAX, 9743, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9745, UINT16_MAX, 9745, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9747, UINT16_MAX, 9747, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9749, UINT16_MAX, 9749, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9751, UINT16_MAX, 9751, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9753, UINT16_MAX, 9753, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9755, UINT16_MAX, 9755, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9757, UINT16_MAX, 9757, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9759, UINT16_MAX, 9759, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9761, UINT16_MAX, 9761, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9763, UINT16_MAX, 9763, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9765, UINT16_MAX, 9765, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9767, UINT16_MAX, 9767, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9769, UINT16_MAX, 9769, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9771, UINT16_MAX, 9771, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9773, UINT16_MAX, 9773, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9775, UINT16_MAX, 9775, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9777, UINT16_MAX, 9777, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9779, UINT16_MAX, 9779, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9781, UINT16_MAX, 9781, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9783, UINT16_MAX, 9783, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9785, UINT16_MAX, 9785, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 6, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 33, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 43, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 3931, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 66, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 58, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 59, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 3933, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 3934, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 3935, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 3936, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 3937, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 3938, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26171, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26175, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26179, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26183, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26187, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26191, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26195, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_MC, 216, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_MC, 226, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26199, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26203, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26207, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26211, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26215, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 26219, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, true, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 9839, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 9841, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 9843, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 9845, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 9847, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 9849, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 9851, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 33, UINT16_MAX, UINT16_MAX, 9853, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 9855, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 9857, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 9859, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 9861, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 9863, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 9865, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 9867, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 9869, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 9871, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 43, UINT16_MAX, UINT16_MAX, 9873, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 9875, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 9877, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 9879, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 9881, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 9883, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 9885, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 9887, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 9889, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 9891, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 9893, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 9895, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 9897, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 9899, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 9901, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 9903, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 9905, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 9907, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 9909, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 9911, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 9913, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 9915, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 9917, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 9919, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 9921, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 9923, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 9925, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 9927, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 9929, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 9931, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 9933, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 9935, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 9937, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 9939, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 9941, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 9943, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 9945, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 9947, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 9949, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 9951, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 9953, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 9955, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 33, UINT16_MAX, UINT16_MAX, 9957, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 9959, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 9961, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 9963, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 9965, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 9967, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 9969, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 9971, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 9973, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 9975, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 43, UINT16_MAX, UINT16_MAX, 9977, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 9979, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 9981, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 9983, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 9985, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 9987, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 9989, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 9991, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 9993, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 9995, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 9997, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 9999, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 10001, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 10003, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 10005, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 10007, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 10009, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 10011, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 10013, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 10015, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 10017, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 10019, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 10021, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 10023, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 10025, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 10027, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 10029, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 10031, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 10033, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 10035, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 10037, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 10039, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 10041, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 10043, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 10045, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 10047, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 10049, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 10051, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 10053, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 10055, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 10057, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 33, UINT16_MAX, UINT16_MAX, 10059, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 10061, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 10063, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 10065, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 10067, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 10069, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 10071, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 10073, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 10075, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 10077, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 43, UINT16_MAX, UINT16_MAX, 10079, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 10081, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 10083, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 10085, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 10087, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 10089, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 10091, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 10093, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 10095, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 10097, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 10099, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 10101, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 10103, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 10105, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 10107, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 10109, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 10111, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 10113, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 10115, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 10117, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 10119, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 10121, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 10123, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 10125, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 10127, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 10129, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 10131, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 10133, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 10135, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 10137, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 10139, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 10141, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 10143, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 10145, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 10147, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 10149, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 10151, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 10153, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 10155, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 10157, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 10159, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 10161, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 10163, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 10165, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 10167, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 10169, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 10171, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 10173, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 10175, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 10177, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 10179, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 10181, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 10183, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 10185, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 10187, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 10189, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 10191, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 10193, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 10195, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 10197, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 10199, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 10201, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 10203, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 10205, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 10207, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 10209, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 10211, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 10213, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 10215, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 10217, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 10219, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 10221, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 10223, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 10225, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 10227, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 10229, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 10231, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 10233, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 10235, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 10237, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 10239, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 10241, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 10243, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 33, UINT16_MAX, UINT16_MAX, 10245, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 10247, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 10249, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 10251, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 10253, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 10255, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 10257, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 10259, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 10261, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 10263, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 43, UINT16_MAX, UINT16_MAX, 10265, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 10267, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 10269, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 10271, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 10273, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 10275, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 10277, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 10279, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 10281, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 10283, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 10285, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 10287, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 10289, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 10291, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 10293, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 10295, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 10297, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 10299, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 10301, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 10303, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 10305, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 10307, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 10309, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 10311, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 10313, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 10315, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 10317, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 10319, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 10321, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 10323, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 10325, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 10327, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 10329, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 10331, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 10333, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 10335, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 10337, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 10339, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 10341, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 10343, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 10345, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 10347, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 10349, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 10351, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 10353, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 10355, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 10357, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 10359, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 10361, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 10363, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 10365, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 10367, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 10369, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 10371, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 10373, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 10375, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 10377, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 10379, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 10381, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 10383, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 10385, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 10387, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 10389, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 10391, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 10393, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 10395, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 10397, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 10399, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 10401, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 10403, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 10405, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 10407, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 10409, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 10411, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 10413, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 10415, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 10417, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 10419, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 10421, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 10423, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 10425, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 10427, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 10429, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 10431, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 10433, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 10435, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 10437, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 10439, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 10441, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 10443, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 10445, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 10447, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 10449, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 10451, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 10453, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 10455, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 10457, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 10459, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 10461, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 10463, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 10465, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 10467, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 10469, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 10471, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 10473, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 10475, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 10477, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 10479, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 10481, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 10483, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 10485, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 10487, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 10489, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 10491, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 10493, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 10495, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 10497, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 10499, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 10501, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 10503, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 10505, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 10507, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 10509, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 10511, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 10513, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 10515, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 10517, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 10519, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 10521, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 10523, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 10525, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 10527, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 10529, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 10531, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 33, UINT16_MAX, UINT16_MAX, 10533, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 10535, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 10537, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 10539, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 10541, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 10543, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 10545, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 10547, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 10549, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 10551, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 43, UINT16_MAX, UINT16_MAX, 10553, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 10555, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 10557, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 10559, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 10561, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 10563, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 10565, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 10567, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 10569, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 10571, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 10573, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 10575, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 10577, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 10579, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 10581, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 10583, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 10585, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 10587, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 10589, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 10591, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 10593, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 10595, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 10597, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 10599, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 10601, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 10603, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 10605, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 10607, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 10609, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 10611, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 10613, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 10615, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 10617, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 10619, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 10621, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 10623, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 10625, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 10627, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 10629, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 10631, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 10633, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 10635, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 33, UINT16_MAX, UINT16_MAX, 10637, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 10639, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 10641, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 10643, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 10645, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 10647, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 10649, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 10651, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 10653, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 10655, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 43, UINT16_MAX, UINT16_MAX, 10657, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 10659, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 10661, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 10663, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 10665, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 10667, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 10669, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 10671, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 10673, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 10675, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 10677, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 10679, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 10681, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 10683, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 10685, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 10687, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 10689, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 10691, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 10693, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 10695, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 10697, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 10699, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 10701, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 10703, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 10705, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 10707, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 10709, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 10711, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 10713, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 10715, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 10717, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 10719, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 10721, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 10723, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 10725, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 10727, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 10729, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 10731, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 10733, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 10735, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 10737, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 10739, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 33, UINT16_MAX, UINT16_MAX, 10741, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 10743, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 10745, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 10747, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 10749, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 10751, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 10753, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 10755, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 10757, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 10759, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 43, UINT16_MAX, UINT16_MAX, 10761, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 10763, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 10765, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 10767, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 10769, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 10771, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 10773, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 10775, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 10777, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 10779, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 10781, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 10783, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 10785, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 10787, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 10789, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 10791, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 10793, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 10795, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 10797, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 10799, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 10801, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 10803, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 10805, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 10807, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 10809, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 10811, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 10813, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 10815, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 10817, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 10819, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 10821, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 10823, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 10825, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 10827, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 10829, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 10831, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 10833, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 10835, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 10837, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 10839, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 10841, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 10843, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 33, UINT16_MAX, UINT16_MAX, 10845, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 10847, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 10849, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 10851, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 10853, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 10855, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 10857, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 10859, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 10861, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 10863, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 43, UINT16_MAX, UINT16_MAX, 10865, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 10867, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 10869, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 10871, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 10873, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 10875, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 10877, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 10879, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 10881, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 10883, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 10885, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 10887, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 10889, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 10891, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 10893, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 10895, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 10897, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 10899, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 10901, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 10903, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 10905, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 10907, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 10909, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 10911, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 10913, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 10915, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 10917, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 10919, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 10921, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 10923, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 10925, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 10927, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 10929, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 10931, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 10933, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 10935, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 10937, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 10939, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 10941, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 10943, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 10945, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 10947, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 33, UINT16_MAX, UINT16_MAX, 10949, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 10951, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 10953, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 10955, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 10957, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 10959, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 10961, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 10963, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 10965, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 10967, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 43, UINT16_MAX, UINT16_MAX, 10969, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 10971, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 10973, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 10975, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 10977, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 10979, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 10981, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 10983, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 10985, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 10987, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 10989, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 10991, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 10993, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 10995, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 10997, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 10999, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 11001, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 11003, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 11005, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 11007, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 11009, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 11011, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 11013, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 11015, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 11017, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 11019, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 11021, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 11023, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 11025, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 11027, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 11029, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 11031, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 11033, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 11035, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 11037, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 26, UINT16_MAX, UINT16_MAX, 11039, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 27, UINT16_MAX, UINT16_MAX, 11041, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 28, UINT16_MAX, UINT16_MAX, 11043, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 29, UINT16_MAX, UINT16_MAX, 11045, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 30, UINT16_MAX, UINT16_MAX, 11047, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, 11049, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, 11051, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 33, UINT16_MAX, UINT16_MAX, 11053, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 34, UINT16_MAX, UINT16_MAX, 11055, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, 11057, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 36, UINT16_MAX, UINT16_MAX, 11059, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 37, UINT16_MAX, UINT16_MAX, 11061, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, 11063, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 39, UINT16_MAX, UINT16_MAX, 11065, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 40, UINT16_MAX, UINT16_MAX, 11067, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 41, UINT16_MAX, UINT16_MAX, 11069, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 42, UINT16_MAX, UINT16_MAX, 11071, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 43, UINT16_MAX, UINT16_MAX, 11073, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 44, UINT16_MAX, UINT16_MAX, 11075, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 45, UINT16_MAX, UINT16_MAX, 11077, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 46, UINT16_MAX, UINT16_MAX, 11079, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 47, UINT16_MAX, UINT16_MAX, 11081, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 48, UINT16_MAX, UINT16_MAX, 11083, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 49, UINT16_MAX, UINT16_MAX, 11085, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 50, UINT16_MAX, UINT16_MAX, 11087, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 51, UINT16_MAX, UINT16_MAX, 11089, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, 11091, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, 11093, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, 11095, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, 11097, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, 11099, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, 11101, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, 11103, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, 11105, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, 11107, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, 11109, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, 11111, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, 11113, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, 11115, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, 11117, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, 11119, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, 11121, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, 11123, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, 11125, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, 11127, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, 11129, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, 11131, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, 11133, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, 11135, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, 11137, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, 11139, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, 11141, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11143, UINT16_MAX, 11144, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 984, UINT16_MAX, 11146, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1231, UINT16_MAX, UINT16_MAX, 11148, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1232, UINT16_MAX, UINT16_MAX, 11150, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1233, UINT16_MAX, UINT16_MAX, 11152, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1234, UINT16_MAX, UINT16_MAX, 11154, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1235, UINT16_MAX, UINT16_MAX, 11156, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1236, UINT16_MAX, UINT16_MAX, 11158, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1237, UINT16_MAX, UINT16_MAX, 11160, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1238, UINT16_MAX, UINT16_MAX, 11162, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1139, UINT16_MAX, UINT16_MAX, 11164, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1239, UINT16_MAX, UINT16_MAX, 11166, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1240, UINT16_MAX, UINT16_MAX, 11168, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 63, UINT16_MAX, UINT16_MAX, 11170, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1241, UINT16_MAX, UINT16_MAX, 11172, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1242, UINT16_MAX, UINT16_MAX, 11174, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1243, UINT16_MAX, UINT16_MAX, 11176, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1244, UINT16_MAX, UINT16_MAX, 11178, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1245, UINT16_MAX, UINT16_MAX, 11180, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11182, UINT16_MAX, UINT16_MAX, 11183, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1246, UINT16_MAX, UINT16_MAX, 11185, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1247, UINT16_MAX, UINT16_MAX, 11187, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1248, UINT16_MAX, UINT16_MAX, 11189, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1249, UINT16_MAX, UINT16_MAX, 11191, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1250, UINT16_MAX, UINT16_MAX, 11193, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1251, UINT16_MAX, UINT16_MAX, 11195, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1252, UINT16_MAX, UINT16_MAX, 11197, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FONT, 11199, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1185, UINT16_MAX, 11200, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1186, UINT16_MAX, 11202, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1187, UINT16_MAX, 11204, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1188, UINT16_MAX, 11206, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1189, UINT16_MAX, 11208, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1190, UINT16_MAX, 11210, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1191, UINT16_MAX, 11212, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1192, UINT16_MAX, 11214, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1138, UINT16_MAX, 11216, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1193, UINT16_MAX, 11218, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1194, UINT16_MAX, 11220, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 62, UINT16_MAX, 11222, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1195, UINT16_MAX, 11224, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1196, UINT16_MAX, 11226, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1197, UINT16_MAX, 11228, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1198, UINT16_MAX, 11230, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1199, UINT16_MAX, 11232, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1301, UINT16_MAX, 11234, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1200, UINT16_MAX, 11236, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1201, UINT16_MAX, 11238, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1202, UINT16_MAX, 11240, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1203, UINT16_MAX, 11242, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1204, UINT16_MAX, 11244, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1205, UINT16_MAX, 11246, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1206, UINT16_MAX, 11248, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FONT, 11250, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, true, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11251, UINT16_MAX, 11252, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11254, UINT16_MAX, 11255, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11257, UINT16_MAX, 11258, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11260, UINT16_MAX, 11261, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11263, UINT16_MAX, 11264, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11266, UINT16_MAX, 11267, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1231, UINT16_MAX, UINT16_MAX, 11269, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1232, UINT16_MAX, UINT16_MAX, 11271, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1233, UINT16_MAX, UINT16_MAX, 11273, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1234, UINT16_MAX, UINT16_MAX, 11275, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1235, UINT16_MAX, UINT16_MAX, 11277, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1236, UINT16_MAX, UINT16_MAX, 11279, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1237, UINT16_MAX, UINT16_MAX, 11281, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1238, UINT16_MAX, UINT16_MAX, 11283, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1139, UINT16_MAX, UINT16_MAX, 11285, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1239, UINT16_MAX, UINT16_MAX, 11287, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1240, UINT16_MAX, UINT16_MAX, 11289, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 63, UINT16_MAX, UINT16_MAX, 11291, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1241, UINT16_MAX, UINT16_MAX, 11293, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1242, UINT16_MAX, UINT16_MAX, 11295, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1243, UINT16_MAX, UINT16_MAX, 11297, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1244, UINT16_MAX, UINT16_MAX, 11299, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1245, UINT16_MAX, UINT16_MAX, 11301, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11182, UINT16_MAX, UINT16_MAX, 11303, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1246, UINT16_MAX, UINT16_MAX, 11305, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1247, UINT16_MAX, UINT16_MAX, 11307, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1248, UINT16_MAX, UINT16_MAX, 11309, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1249, UINT16_MAX, UINT16_MAX, 11311, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1250, UINT16_MAX, UINT16_MAX, 11313, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1251, UINT16_MAX, UINT16_MAX, 11315, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1252, UINT16_MAX, UINT16_MAX, 11317, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1185, UINT16_MAX, 11319, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1186, UINT16_MAX, 11321, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1187, UINT16_MAX, 11323, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1188, UINT16_MAX, 11325, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1189, UINT16_MAX, 11327, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1190, UINT16_MAX, 11329, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1191, UINT16_MAX, 11331, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1192, UINT16_MAX, 11333, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1138, UINT16_MAX, 11335, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1193, UINT16_MAX, 11337, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1194, UINT16_MAX, 11339, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 62, UINT16_MAX, 11341, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1195, UINT16_MAX, 11343, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1196, UINT16_MAX, 11345, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1197, UINT16_MAX, 11347, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1198, UINT16_MAX, 11349, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1199, UINT16_MAX, 11351, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1301, UINT16_MAX, 11353, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1200, UINT16_MAX, 11355, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1201, UINT16_MAX, 11357, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1202, UINT16_MAX, 11359, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1203, UINT16_MAX, 11361, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1204, UINT16_MAX, 11363, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1205, UINT16_MAX, 11365, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1206, UINT16_MAX, 11367, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11251, UINT16_MAX, 11369, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11254, UINT16_MAX, 11371, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11257, UINT16_MAX, 11373, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11260, UINT16_MAX, 11375, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11263, UINT16_MAX, 11377, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11266, UINT16_MAX, 11379, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1231, UINT16_MAX, UINT16_MAX, 11381, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1232, UINT16_MAX, UINT16_MAX, 11383, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1233, UINT16_MAX, UINT16_MAX, 11385, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1234, UINT16_MAX, UINT16_MAX, 11387, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1235, UINT16_MAX, UINT16_MAX, 11389, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1236, UINT16_MAX, UINT16_MAX, 11391, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1237, UINT16_MAX, UINT16_MAX, 11393, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1238, UINT16_MAX, UINT16_MAX, 11395, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1139, UINT16_MAX, UINT16_MAX, 11397, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1239, UINT16_MAX, UINT16_MAX, 11399, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1240, UINT16_MAX, UINT16_MAX, 11401, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 63, UINT16_MAX, UINT16_MAX, 11403, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1241, UINT16_MAX, UINT16_MAX, 11405, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1242, UINT16_MAX, UINT16_MAX, 11407, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1243, UINT16_MAX, UINT16_MAX, 11409, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1244, UINT16_MAX, UINT16_MAX, 11411, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1245, UINT16_MAX, UINT16_MAX, 11413, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11182, UINT16_MAX, UINT16_MAX, 11415, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1246, UINT16_MAX, UINT16_MAX, 11417, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1247, UINT16_MAX, UINT16_MAX, 11419, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1248, UINT16_MAX, UINT16_MAX, 11421, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1249, UINT16_MAX, UINT16_MAX, 11423, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1250, UINT16_MAX, UINT16_MAX, 11425, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1251, UINT16_MAX, UINT16_MAX, 11427, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1252, UINT16_MAX, UINT16_MAX, 11429, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1185, UINT16_MAX, 11431, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1186, UINT16_MAX, 11433, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1187, UINT16_MAX, 11435, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1188, UINT16_MAX, 11437, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1189, UINT16_MAX, 11439, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1190, UINT16_MAX, 11441, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1191, UINT16_MAX, 11443, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1192, UINT16_MAX, 11445, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1138, UINT16_MAX, 11447, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1193, UINT16_MAX, 11449, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1194, UINT16_MAX, 11451, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 62, UINT16_MAX, 11453, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1195, UINT16_MAX, 11455, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1196, UINT16_MAX, 11457, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1197, UINT16_MAX, 11459, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1198, UINT16_MAX, 11461, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1199, UINT16_MAX, 11463, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1301, UINT16_MAX, 11465, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1200, UINT16_MAX, 11467, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1201, UINT16_MAX, 11469, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1202, UINT16_MAX, 11471, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1203, UINT16_MAX, 11473, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1204, UINT16_MAX, 11475, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1205, UINT16_MAX, 11477, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1206, UINT16_MAX, 11479, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11251, UINT16_MAX, 11481, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11254, UINT16_MAX, 11483, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11257, UINT16_MAX, 11485, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11260, UINT16_MAX, 11487, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11263, UINT16_MAX, 11489, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11266, UINT16_MAX, 11491, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1231, UINT16_MAX, UINT16_MAX, 11493, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1232, UINT16_MAX, UINT16_MAX, 11495, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1233, UINT16_MAX, UINT16_MAX, 11497, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1234, UINT16_MAX, UINT16_MAX, 11499, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1235, UINT16_MAX, UINT16_MAX, 11501, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1236, UINT16_MAX, UINT16_MAX, 11503, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1237, UINT16_MAX, UINT16_MAX, 11505, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1238, UINT16_MAX, UINT16_MAX, 11507, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1139, UINT16_MAX, UINT16_MAX, 11509, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1239, UINT16_MAX, UINT16_MAX, 11511, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1240, UINT16_MAX, UINT16_MAX, 11513, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 63, UINT16_MAX, UINT16_MAX, 11515, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1241, UINT16_MAX, UINT16_MAX, 11517, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1242, UINT16_MAX, UINT16_MAX, 11519, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1243, UINT16_MAX, UINT16_MAX, 11521, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1244, UINT16_MAX, UINT16_MAX, 11523, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1245, UINT16_MAX, UINT16_MAX, 11525, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11182, UINT16_MAX, UINT16_MAX, 11527, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1246, UINT16_MAX, UINT16_MAX, 11529, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1247, UINT16_MAX, UINT16_MAX, 11531, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1248, UINT16_MAX, UINT16_MAX, 11533, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1249, UINT16_MAX, UINT16_MAX, 11535, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1250, UINT16_MAX, UINT16_MAX, 11537, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1251, UINT16_MAX, UINT16_MAX, 11539, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1252, UINT16_MAX, UINT16_MAX, 11541, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1185, UINT16_MAX, 11543, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1186, UINT16_MAX, 11545, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1187, UINT16_MAX, 11547, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1188, UINT16_MAX, 11549, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1189, UINT16_MAX, 11551, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1190, UINT16_MAX, 11553, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1191, UINT16_MAX, 11555, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1192, UINT16_MAX, 11557, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1138, UINT16_MAX, 11559, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1193, UINT16_MAX, 11561, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1194, UINT16_MAX, 11563, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 62, UINT16_MAX, 11565, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1195, UINT16_MAX, 11567, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1196, UINT16_MAX, 11569, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1197, UINT16_MAX, 11571, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1198, UINT16_MAX, 11573, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1199, UINT16_MAX, 11575, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1301, UINT16_MAX, 11577, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1200, UINT16_MAX, 11579, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1201, UINT16_MAX, 11581, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1202, UINT16_MAX, 11583, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1203, UINT16_MAX, 11585, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1204, UINT16_MAX, 11587, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1205, UINT16_MAX, 11589, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1206, UINT16_MAX, 11591, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11251, UINT16_MAX, 11593, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11254, UINT16_MAX, 11595, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11257, UINT16_MAX, 11597, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11260, UINT16_MAX, 11599, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11263, UINT16_MAX, 11601, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11266, UINT16_MAX, 11603, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1231, UINT16_MAX, UINT16_MAX, 11605, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1232, UINT16_MAX, UINT16_MAX, 11607, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1233, UINT16_MAX, UINT16_MAX, 11609, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1234, UINT16_MAX, UINT16_MAX, 11611, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1235, UINT16_MAX, UINT16_MAX, 11613, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1236, UINT16_MAX, UINT16_MAX, 11615, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1237, UINT16_MAX, UINT16_MAX, 11617, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1238, UINT16_MAX, UINT16_MAX, 11619, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1139, UINT16_MAX, UINT16_MAX, 11621, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1239, UINT16_MAX, UINT16_MAX, 11623, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1240, UINT16_MAX, UINT16_MAX, 11625, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 63, UINT16_MAX, UINT16_MAX, 11627, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1241, UINT16_MAX, UINT16_MAX, 11629, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1242, UINT16_MAX, UINT16_MAX, 11631, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1243, UINT16_MAX, UINT16_MAX, 11633, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1244, UINT16_MAX, UINT16_MAX, 11635, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1245, UINT16_MAX, UINT16_MAX, 11637, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11182, UINT16_MAX, UINT16_MAX, 11639, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1246, UINT16_MAX, UINT16_MAX, 11641, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1247, UINT16_MAX, UINT16_MAX, 11643, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1248, UINT16_MAX, UINT16_MAX, 11645, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1249, UINT16_MAX, UINT16_MAX, 11647, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1250, UINT16_MAX, UINT16_MAX, 11649, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1251, UINT16_MAX, UINT16_MAX, 11651, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1252, UINT16_MAX, UINT16_MAX, 11653, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1185, UINT16_MAX, 11655, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1186, UINT16_MAX, 11657, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1187, UINT16_MAX, 11659, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1188, UINT16_MAX, 11661, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1189, UINT16_MAX, 11663, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1190, UINT16_MAX, 11665, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1191, UINT16_MAX, 11667, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1192, UINT16_MAX, 11669, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1138, UINT16_MAX, 11671, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1193, UINT16_MAX, 11673, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1194, UINT16_MAX, 11675, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 62, UINT16_MAX, 11677, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1195, UINT16_MAX, 11679, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1196, UINT16_MAX, 11681, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1197, UINT16_MAX, 11683, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1198, UINT16_MAX, 11685, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1199, UINT16_MAX, 11687, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1301, UINT16_MAX, 11689, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1200, UINT16_MAX, 11691, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1201, UINT16_MAX, 11693, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1202, UINT16_MAX, 11695, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1203, UINT16_MAX, 11697, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1204, UINT16_MAX, 11699, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1205, UINT16_MAX, 11701, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1206, UINT16_MAX, 11703, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11251, UINT16_MAX, 11705, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11254, UINT16_MAX, 11707, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11257, UINT16_MAX, 11709, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11260, UINT16_MAX, 11711, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11263, UINT16_MAX, 11713, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11266, UINT16_MAX, 11715, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1282, UINT16_MAX, UINT16_MAX, 11717, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1281, UINT16_MAX, 11719, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11721, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11723, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11725, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11727, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8940, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8948, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8954, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11729, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8968, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11731, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11733, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11735, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11737, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11739, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11741, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11743, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11745, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11747, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11749, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11751, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11753, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11755, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11757, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11759, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11761, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11763, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11765, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11767, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11769, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9011, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11771, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11773, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11775, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11777, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11779, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 11781, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1343, UINT16_MAX, 11783, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1344, UINT16_MAX, 11785, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1345, UINT16_MAX, 11787, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1346, UINT16_MAX, 11789, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1347, UINT16_MAX, 11791, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1348, UINT16_MAX, 11793, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1349, UINT16_MAX, 11795, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1350, UINT16_MAX, 11797, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1351, UINT16_MAX, 11799, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1355, UINT16_MAX, 11801, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1356, UINT16_MAX, 11803, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1357, UINT16_MAX, 11805, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1359, UINT16_MAX, 11807, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1360, UINT16_MAX, 11809, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1361, UINT16_MAX, 11811, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1362, UINT16_MAX, 11813, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1363, UINT16_MAX, 11815, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1364, UINT16_MAX, 11817, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1365, UINT16_MAX, 11819, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1366, UINT16_MAX, 11821, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1367, UINT16_MAX, 11823, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1368, UINT16_MAX, 11825, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1369, UINT16_MAX, 11827, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1372, UINT16_MAX, 11829, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1374, UINT16_MAX, 11831, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1375, UINT16_MAX, 11833, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 6568, UINT16_MAX, 11835, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1573, UINT16_MAX, 11837, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1325, UINT16_MAX, 11839, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1329, UINT16_MAX, 11841, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1613, UINT16_MAX, 11843, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1515, UINT16_MAX, 11845, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1533, UINT16_MAX, 11847, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1343, UINT16_MAX, 11849, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1344, UINT16_MAX, 11851, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1345, UINT16_MAX, 11853, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1346, UINT16_MAX, 11855, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1347, UINT16_MAX, 11857, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1348, UINT16_MAX, 11859, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1349, UINT16_MAX, 11861, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1350, UINT16_MAX, 11863, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1351, UINT16_MAX, 11865, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1355, UINT16_MAX, 11867, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1356, UINT16_MAX, 11869, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1359, UINT16_MAX, 11871, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1360, UINT16_MAX, 11873, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1362, UINT16_MAX, 11875, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1364, UINT16_MAX, 11877, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1365, UINT16_MAX, 11879, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1366, UINT16_MAX, 11881, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1367, UINT16_MAX, 11883, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1368, UINT16_MAX, 11885, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1369, UINT16_MAX, 11887, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1371, UINT16_MAX, 11889, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1372, UINT16_MAX, 11891, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1485, UINT16_MAX, 11893, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1325, UINT16_MAX, 11895, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1324, UINT16_MAX, 11897, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 1342, UINT16_MAX, 11899, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1511, UINT16_MAX, 11901, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 6530, UINT16_MAX, 11903, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1517, UINT16_MAX, 11905, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11907, UINT16_MAX, 11907, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11909, UINT16_MAX, 11909, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11911, UINT16_MAX, 11911, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11913, UINT16_MAX, 11913, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11915, UINT16_MAX, 11915, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11917, UINT16_MAX, 11917, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11919, UINT16_MAX, 11919, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11921, UINT16_MAX, 11921, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11923, UINT16_MAX, 11923, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11925, UINT16_MAX, 11925, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11927, UINT16_MAX, 11927, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11929, UINT16_MAX, 11929, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11931, UINT16_MAX, 11931, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11933, UINT16_MAX, 11933, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11935, UINT16_MAX, 11935, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11937, UINT16_MAX, 11937, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11939, UINT16_MAX, 11939, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11941, UINT16_MAX, 11941, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11943, UINT16_MAX, 11943, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11945, UINT16_MAX, 11945, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11947, UINT16_MAX, 11947, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11949, UINT16_MAX, 11949, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11951, UINT16_MAX, 11951, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11953, UINT16_MAX, 11953, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11955, UINT16_MAX, 11955, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11957, UINT16_MAX, 11957, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11959, UINT16_MAX, 11959, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11961, UINT16_MAX, 11961, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11963, UINT16_MAX, 11963, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11965, UINT16_MAX, 11965, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11967, UINT16_MAX, 11967, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11969, UINT16_MAX, 11969, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11971, UINT16_MAX, 11971, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 11973, UINT16_MAX, 11973, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11975, UINT16_MAX, 11975, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11977, UINT16_MAX, 11977, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11979, UINT16_MAX, 11979, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11981, UINT16_MAX, 11981, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11983, UINT16_MAX, 11983, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11985, UINT16_MAX, 11985, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11987, UINT16_MAX, 11987, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11989, UINT16_MAX, 11989, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11991, UINT16_MAX, 11991, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11993, UINT16_MAX, 11993, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11995, UINT16_MAX, 11995, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11997, UINT16_MAX, 11997, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 11999, UINT16_MAX, 11999, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12001, UINT16_MAX, 12001, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12003, UINT16_MAX, 12003, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12005, UINT16_MAX, 12005, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12007, UINT16_MAX, 12007, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12009, UINT16_MAX, 12009, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12011, UINT16_MAX, 12011, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12013, UINT16_MAX, 12013, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12015, UINT16_MAX, 12015, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12017, UINT16_MAX, 12017, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12019, UINT16_MAX, 12019, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12021, UINT16_MAX, 12021, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12023, UINT16_MAX, 12023, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12025, UINT16_MAX, 12025, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12027, UINT16_MAX, 12027, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12029, UINT16_MAX, 12029, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12031, UINT16_MAX, 12031, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12033, UINT16_MAX, 12033, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12035, UINT16_MAX, 12035, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12037, UINT16_MAX, 12037, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12039, UINT16_MAX, 12039, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 12041, UINT16_MAX, 12041, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8261, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8262, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8266, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8269, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8288, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8272, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8267, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8277, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8289, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8283, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8284, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8285, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8286, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8273, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8279, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8281, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8275, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8282, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8271, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8274, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8264, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8265, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8268, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8270, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8276, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8278, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8280, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 12043, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 7463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 12044, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 12045, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 8287, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 28430, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 28432, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 28434, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 28436, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 28438, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 28440, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 28442, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 28444, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 28446, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 28448, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 28450, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44836, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44839, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44842, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44845, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44848, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44851, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44854, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44857, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44860, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44863, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44866, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44869, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44872, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44875, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44878, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44881, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44884, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44887, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44890, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44893, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44896, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44899, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44902, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44905, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44908, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44911, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 44914, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 28, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 43, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 28533, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 28535, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 26, UINT16_MAX, UINT16_MAX, 12153, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 27, UINT16_MAX, UINT16_MAX, 12155, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28, UINT16_MAX, UINT16_MAX, 12157, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29, UINT16_MAX, UINT16_MAX, 12159, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 30, UINT16_MAX, UINT16_MAX, 12161, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 31, UINT16_MAX, UINT16_MAX, 12163, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 32, UINT16_MAX, UINT16_MAX, 12165, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 33, UINT16_MAX, UINT16_MAX, 12167, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 34, UINT16_MAX, UINT16_MAX, 12169, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 35, UINT16_MAX, UINT16_MAX, 12171, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 36, UINT16_MAX, UINT16_MAX, 12173, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 37, UINT16_MAX, UINT16_MAX, 12175, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 38, UINT16_MAX, UINT16_MAX, 12177, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 39, UINT16_MAX, UINT16_MAX, 12179, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 40, UINT16_MAX, UINT16_MAX, 12181, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 41, UINT16_MAX, UINT16_MAX, 12183, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 42, UINT16_MAX, UINT16_MAX, 12185, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 43, UINT16_MAX, UINT16_MAX, 12187, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 44, UINT16_MAX, UINT16_MAX, 12189, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 45, UINT16_MAX, UINT16_MAX, 12191, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 46, UINT16_MAX, UINT16_MAX, 12193, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 47, UINT16_MAX, UINT16_MAX, 12195, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 48, UINT16_MAX, UINT16_MAX, 12197, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 49, UINT16_MAX, UINT16_MAX, 12199, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 50, UINT16_MAX, UINT16_MAX, 12201, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 51, UINT16_MAX, UINT16_MAX, 12203, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28589, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 22719, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28591, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28593, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 44979, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28598, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12216, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12218, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12220, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12222, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12224, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12226, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12228, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12230, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12232, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12234, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12236, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12238, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12240, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12242, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12244, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12246, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12248, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12250, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12252, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12254, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12256, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12258, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12260, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12262, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12264, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12266, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUPER, 28652, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUPER, 28654, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUPER, 28656, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12274, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12276, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12278, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12280, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12282, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12284, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12286, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12288, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12290, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12292, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12294, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12296, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12298, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12300, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12302, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12304, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12306, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12308, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12310, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12312, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12314, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12316, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12318, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12320, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12322, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 12324, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28710, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, true, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 1, false, 0, UTF8PROC_BOUNDCLASS_REGIONAL_INDICATOR, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28712, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28714, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 5711, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 4903, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12332, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12333, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12334, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 4846, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12335, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12336, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 5283, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12337, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12338, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12339, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7090, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12340, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12341, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12342, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12343, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12344, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12345, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 4939, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12346, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12347, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12348, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12349, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12350, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12351, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 4840, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 5275, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12352, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 5624, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 5278, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 5625, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12353, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 4995, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12354, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12355, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12356, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12357, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12358, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 5607, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 4913, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12359, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12360, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12361, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12362, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 45131, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 45134, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 45137, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 45140, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 45143, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 45146, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 45149, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 45152, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 45155, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12390, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12391, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTENDED_PICTOGRAPHIC, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12392, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12393, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12394, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12395, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12397, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12398, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12399, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12400, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12401, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12402, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12403, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12404, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12406, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12407, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12408, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12409, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12411, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12412, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12342, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12413, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12415, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12416, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12417, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12418, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12419, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4856, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12421, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12422, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12423, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12424, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12360, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12425, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12426, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12427, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12428, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12429, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12430, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12431, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12432, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12433, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12434, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12436, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12437, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12438, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12439, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12441, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12442, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12443, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12444, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12445, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12446, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12447, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12448, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12449, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12450, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12451, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12452, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12453, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12454, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12455, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12456, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12457, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12458, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12459, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12460, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12461, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12462, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12464, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12465, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12466, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12467, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12468, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12469, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12471, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12472, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12473, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12335, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12474, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12475, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12476, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12478, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12480, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12481, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12482, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12483, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12484, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12485, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12486, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12487, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12488, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12489, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12491, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12492, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12493, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12494, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12496, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12497, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12498, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4882, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12499, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12500, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12501, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12502, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12503, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12505, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12506, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12508, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12509, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12510, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12511, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12512, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12513, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12514, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12515, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12516, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12517, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12518, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12519, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12521, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12522, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12523, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12524, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12525, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4894, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12527, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12529, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12530, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12531, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12532, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12534, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12536, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12537, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12538, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12539, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12540, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12541, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12542, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12543, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12544, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12545, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12546, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12548, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12549, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12550, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12551, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12552, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12553, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12554, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12555, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12556, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12557, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12558, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12559, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12560, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12561, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12562, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12564, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12565, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12566, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12567, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12568, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12569, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12571, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12572, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12573, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12574, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12575, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12576, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12577, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12578, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12579, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12580, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12581, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12583, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12584, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12585, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12586, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12587, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12588, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12589, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12590, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12591, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12592, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12593, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12594, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12595, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12596, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12597, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12598, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12600, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12601, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12602, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12603, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12604, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12606, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12607, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12608, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12609, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12610, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12611, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12612, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12613, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12615, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12616, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12617, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12618, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12620, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12621, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12622, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12623, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12624, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12625, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12627, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12629, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12631, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12632, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12634, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12635, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12636, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12637, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12638, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12639, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12640, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12641, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12642, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12644, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12645, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12646, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12647, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12648, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12649, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12651, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12652, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12653, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12655, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12657, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12658, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12659, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12660, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12661, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12662, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12663, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12664, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12665, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12667, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12668, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12670, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12671, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12673, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12674, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12675, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12677, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12678, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12679, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12681, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12683, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12684, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12685, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12686, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12687, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12688, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12689, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12690, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12691, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12692, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12693, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12694, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12696, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12697, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12699, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12701, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12702, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12704, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12706, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12708, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12709, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12710, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12712, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12714, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12716, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12718, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12719, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12720, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12721, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12722, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12723, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12725, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12726, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12727, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12729, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12731, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12733, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12734, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12735, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12736, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12737, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12739, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12741, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12742, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12743, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12745, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12746, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12747, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12748, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12750, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12751, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12752, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12753, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12754, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12755, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12757, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12758, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12759, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12760, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12761, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12762, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12763, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12765, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12767, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12768, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12770, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12771, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12773, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12774, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12775, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12777, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12779, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12780, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12782, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12783, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12785, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12786, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12787, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12788, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12789, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12790, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12791, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12793, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12795, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12797, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12799, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12800, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12801, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12802, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12803, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12804, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12805, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12806, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12807, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12808, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12809, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12810, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12812, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12813, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12814, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12815, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12816, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12817, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12818, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12819, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12820, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12821, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12822, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12824, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12826, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12828, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12829, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12830, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12831, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12832, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12834, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12835, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12837, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12838, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12839, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12841, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12843, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12844, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12845, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12846, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12847, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12848, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12849, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12850, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12851, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12852, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12853, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12854, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12855, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12856, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12857, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12858, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4984, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12859, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12861, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12862, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12863, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12864, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12865, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12866, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12868, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12870, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12871, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12872, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4991, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12873, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12875, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12876, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12877, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12878, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12879, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12881, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12883, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12884, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12885, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12886, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12888, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12889, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12891, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12893, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12894, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12895, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12896, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12898, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12899, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12900, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12901, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12902, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12903, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12904, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12905, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12907, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12908, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12909, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12910, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12912, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12913, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12914, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12915, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12916, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12918, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12920, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12921, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12922, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12923, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12925, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12926, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12928, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12929, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12931, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12932, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12933, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12934, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12935, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12936, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12937, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12938, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12940, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12941, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12942, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12943, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12944, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12945, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12947, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12948, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12950, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12952, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5039, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12954, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5043, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12955, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12956, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12957, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12958, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5048, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 12959, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, false, false, 2, false, 0, UTF8PROC_BOUNDCLASS_OTHER, UTF8PROC_INDIC_CONJUNCT_BREAK_NONE},\n  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_BN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1023, 0, false, false, false, true, true, 0, false, 0, UTF8PROC_BOUNDCLASS_EXTEND, UTF8PROC_INDIC_CONJUNCT_BREAK_EXTEND},\n};\n\nstatic const utf8proc_int32_t utf8proc_combinations_second[] = {\n  824,\n  824,\n  824,\n  768, 769, 770, 771, 772, 774, 775, 776, 777, 778, 780, 783, 785, 803, 805, 808,\n  775, 803, 817,\n  769, 770, 775, 780, 807,\n  775, 780, 803, 807, 813, 817,\n  768, 769, 770, 771, 772, 774, 775, 776, 777, 780, 783, 785, 803, 807, 808, 813, 816,\n  775,\n  769, 770, 772, 774, 775, 780, 807,\n  770, 775, 776, 780, 803, 807, 814,\n  768, 769, 770, 771, 772, 774, 775, 776, 777, 780, 783, 785, 803, 808, 816,\n  770,\n  769, 780, 803, 807, 817,\n  769, 780, 803, 807, 813, 817,\n  769, 775, 803,\n  768, 769, 771, 775, 780, 803, 807, 813, 817,\n  768, 769, 770, 771, 772, 774, 775, 776, 777, 779, 780, 783, 785, 795, 803, 808,\n  769, 775,\n  769, 775, 780, 783, 785, 803, 807, 817,\n  769, 770, 775, 780, 803, 806, 807,\n  775, 780, 803, 806, 807, 813, 817,\n  768, 769, 770, 771, 772, 774, 776, 777, 778, 779, 780, 783, 785, 795, 803, 804, 808, 813, 816,\n  771, 803,\n  768, 769, 770, 775, 776, 803,\n  775, 776,\n  768, 769, 770, 771, 772, 775, 776, 777, 803,\n  769, 770, 775, 780, 803, 817,\n  768, 769, 770, 771, 772, 774, 775, 776, 777, 778, 780, 783, 785, 803, 805, 808,\n  775, 803, 817,\n  769, 770, 775, 780, 807,\n  775, 780, 803, 807, 813, 817,\n  768, 769, 770, 771, 772, 774, 775, 776, 777, 780, 783, 785, 803, 807, 808, 813, 816,\n  775,\n  769, 770, 772, 774, 775, 780, 807,\n  770, 775, 776, 780, 803, 807, 814, 817,\n  768, 769, 770, 771, 772, 774, 776, 777, 780, 783, 785, 803, 808, 816,\n  770, 780,\n  769, 780, 803, 807, 817,\n  769, 780, 803, 807, 813, 817,\n  769, 775, 803,\n  768, 769, 771, 775, 780, 803, 807, 813, 817,\n  768, 769, 770, 771, 772, 774, 775, 776, 777, 779, 780, 783, 785, 795, 803, 808,\n  769, 775,\n  769, 775, 780, 783, 785, 803, 807, 817,\n  769, 770, 775, 780, 803, 806, 807,\n  775, 776, 780, 803, 806, 807, 813, 817,\n  768, 769, 770, 771, 772, 774, 776, 777, 778, 779, 780, 783, 785, 795, 803, 804, 808, 813, 816,\n  771, 803,\n  768, 769, 770, 775, 776, 778, 803,\n  775, 776,\n  768, 769, 770, 771, 772, 775, 776, 777, 778, 803,\n  769, 770, 775, 780, 803, 817,\n  768, 769, 834,\n  768, 769, 771, 777,\n  772,\n  769,\n  769, 772,\n  769,\n  768, 769, 771, 777,\n  769,\n  768, 769, 771, 777,\n  769, 772, 776,\n  772,\n  769,\n  768, 769, 772, 780,\n  768, 769, 771, 777,\n  772,\n  769,\n  769, 772,\n  769,\n  768, 769, 771, 777,\n  769,\n  768, 769, 771, 777,\n  769, 772, 776,\n  772,\n  769,\n  768, 769, 772, 780,\n  768, 769, 771, 777,\n  768, 769, 771, 777,\n  768, 769,\n  768, 769,\n  768, 769,\n  768, 769,\n  775,\n  775,\n  775,\n  775,\n  769,\n  769,\n  776,\n  776,\n  775,\n  768, 769, 771, 777, 803,\n  768, 769, 771, 777, 803,\n  768, 769, 771, 777, 803,\n  768, 769, 771, 777, 803,\n  780,\n  772,\n  772,\n  772,\n  772,\n  774,\n  774,\n  772,\n  772,\n  780,\n  768, 769, 772, 774, 787, 788, 837,\n  768, 769, 787, 788,\n  768, 769, 787, 788, 837,\n  768, 769, 772, 774, 776, 787, 788,\n  768, 769, 787, 788,\n  788,\n  768, 769, 772, 774, 776, 788,\n  768, 769, 787, 788, 837,\n  837,\n  837,\n  768, 769, 772, 774, 787, 788, 834, 837,\n  768, 769, 787, 788,\n  768, 769, 787, 788, 834, 837,\n  768, 769, 772, 774, 776, 787, 788, 834,\n  768, 769, 787, 788,\n  787, 788,\n  768, 769, 772, 774, 776, 787, 788, 834,\n  768, 769, 787, 788, 834, 837,\n  768, 769, 834,\n  768, 769, 834,\n  837,\n  769, 776,\n  776,\n  774, 776,\n  769,\n  768, 774, 776,\n  774, 776,\n  776,\n  768, 772, 774, 776,\n  769,\n  776,\n  772, 774, 776, 779,\n  776,\n  776,\n  776,\n  774, 776,\n  769,\n  768, 774, 776,\n  774, 776,\n  776,\n  768, 772, 774, 776,\n  769,\n  776,\n  772, 774, 776, 779,\n  776,\n  776,\n  776,\n  776,\n  783,\n  783,\n  776,\n  776,\n  776,\n  776,\n  1619, 1620, 1621,\n  1620,\n  1620,\n  1620,\n  1620,\n  1620,\n  2364,\n  2364,\n  2364,\n  2494, 2519,\n  2878, 2902, 2903,\n  3031,\n  3006, 3031,\n  3006,\n  3158,\n  3285,\n  3266, 3285, 3286,\n  3285,\n  3390, 3415,\n  3390,\n  3530, 3535, 3551,\n  3530,\n  4142,\n  6965,\n  6965,\n  6965,\n  6965,\n  6965,\n  6965,\n  6965,\n  6965,\n  6965,\n  6965,\n  6965,\n  772,\n  772,\n  772,\n  772,\n  775,\n  775,\n  770, 774,\n  770, 774,\n  770,\n  770,\n  770,\n  770,\n  768, 769, 834, 837,\n  768, 769, 834, 837,\n  837,\n  837,\n  837,\n  837,\n  837,\n  837,\n  768, 769, 834, 837,\n  768, 769, 834, 837,\n  837,\n  837,\n  837,\n  837,\n  837,\n  837,\n  768, 769,\n  768, 769,\n  768, 769,\n  768, 769,\n  768, 769, 834, 837,\n  768, 769, 834, 837,\n  837,\n  837,\n  837,\n  837,\n  837,\n  837,\n  768, 769, 834, 837,\n  768, 769, 834, 837,\n  837,\n  837,\n  837,\n  837,\n  837,\n  837,\n  768, 769, 834,\n  768, 769, 834,\n  768, 769, 834,\n  768, 769, 834,\n  768, 769,\n  768, 769,\n  768, 769,\n  768, 769,\n  768, 769, 834,\n  768, 769, 834,\n  768, 769, 834,\n  768, 769, 834, 837,\n  768, 769, 834, 837,\n  837,\n  837,\n  837,\n  837,\n  837,\n  837,\n  768, 769, 834, 837,\n  768, 769, 834, 837,\n  837,\n  837,\n  837,\n  837,\n  837,\n  837,\n  837,\n  837,\n  837,\n  837,\n  768, 769, 834,\n  837,\n  837,\n  768, 769, 834,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  824,\n  12441,\n  12441,\n  12441,\n  12441,\n  12441,\n  12441,\n  12441,\n  12441,\n  12441,\n  12441,\n  12441,\n  12441,\n  12441,\n  12441,\n  12441,\n  12441,\n  12441, 12442,\n  12441, 12442,\n  12441, 12442,\n  12441, 12442,\n  12441, 12442,\n  12441,\n  12441,\n  12441,\n  12441,\n  12441,\n  12441,\n  12441,\n  12441,\n  12441,\n  12441,\n  12441,\n  12441,\n  12441,\n  12441,\n  12441,\n  12441,\n  12441,\n  12441, 12442,\n  12441, 12442,\n  12441, 12442,\n  12441, 12442,\n  12441, 12442,\n  12441,\n  12441,\n  12441,\n  12441,\n  12441,\n  775,\n  775,\n  69818,\n  69818,\n  69818,\n  69927,\n  69927,\n  70462, 70487,\n  70601,\n  70587,\n  70594,\n  70601,\n  70584, 70594, 70601,\n  70832, 70842, 70845,\n  71087,\n  71087,\n  71984,\n  90398, 90399, 90400, 90409,\n  90399, 90400,\n  90399,\n  90399,\n  93543,\n  93543,\n  93543,\n};\n\nstatic const utf8proc_int32_t utf8proc_combinations_combined[] = {\n  8814,\n  8800,\n  8815,\n  192, 193, 194, 195, 256, 258, 550, 196, 7842, 197, 461, 512, 514, 7840, 7680, 260,\n  7682, 7684, 7686,\n  262, 264, 266, 268, 199,\n  7690, 270, 7692, 7696, 7698, 7694,\n  200, 201, 202, 7868, 274, 276, 278, 203, 7866, 282, 516, 518, 7864, 552, 280, 7704, 7706,\n  7710,\n  500, 284, 7712, 286, 288, 486, 290,\n  292, 7714, 7718, 542, 7716, 7720, 7722,\n  204, 205, 206, 296, 298, 300, 304, 207, 7880, 463, 520, 522, 7882, 302, 7724,\n  308,\n  7728, 488, 7730, 310, 7732,\n  313, 317, 7734, 315, 7740, 7738,\n  7742, 7744, 7746,\n  504, 323, 209, 7748, 327, 7750, 325, 7754, 7752,\n  210, 211, 212, 213, 332, 334, 558, 214, 7886, 336, 465, 524, 526, 416, 7884, 490,\n  7764, 7766,\n  340, 7768, 344, 528, 530, 7770, 342, 7774,\n  346, 348, 7776, 352, 7778, 536, 350,\n  7786, 356, 7788, 538, 354, 7792, 7790,\n  217, 218, 219, 360, 362, 364, 220, 7910, 366, 368, 467, 532, 534, 431, 7908, 7794, 370, 7798, 7796,\n  7804, 7806,\n  7808, 7810, 372, 7814, 7812, 7816,\n  7818, 7820,\n  7922, 221, 374, 7928, 562, 7822, 376, 7926, 7924,\n  377, 7824, 379, 381, 7826, 7828,\n  224, 225, 226, 227, 257, 259, 551, 228, 7843, 229, 462, 513, 515, 7841, 7681, 261,\n  7683, 7685, 7687,\n  263, 265, 267, 269, 231,\n  7691, 271, 7693, 7697, 7699, 7695,\n  232, 233, 234, 7869, 275, 277, 279, 235, 7867, 283, 517, 519, 7865, 553, 281, 7705, 7707,\n  7711,\n  501, 285, 7713, 287, 289, 487, 291,\n  293, 7715, 7719, 543, 7717, 7721, 7723, 7830,\n  236, 237, 238, 297, 299, 301, 239, 7881, 464, 521, 523, 7883, 303, 7725,\n  309, 496,\n  7729, 489, 7731, 311, 7733,\n  314, 318, 7735, 316, 7741, 7739,\n  7743, 7745, 7747,\n  505, 324, 241, 7749, 328, 7751, 326, 7755, 7753,\n  242, 243, 244, 245, 333, 335, 559, 246, 7887, 337, 466, 525, 527, 417, 7885, 491,\n  7765, 7767,\n  341, 7769, 345, 529, 531, 7771, 343, 7775,\n  347, 349, 7777, 353, 7779, 537, 351,\n  7787, 7831, 357, 7789, 539, 355, 7793, 7791,\n  249, 250, 251, 361, 363, 365, 252, 7911, 367, 369, 468, 533, 535, 432, 7909, 7795, 371, 7799, 7797,\n  7805, 7807,\n  7809, 7811, 373, 7815, 7813, 7832, 7817,\n  7819, 7821,\n  7923, 253, 375, 7929, 563, 7823, 255, 7927, 7833, 7925,\n  378, 7825, 380, 382, 7827, 7829,\n  8173, 901, 8129,\n  7846, 7844, 7850, 7848,\n  478,\n  506,\n  508, 482,\n  7688,\n  7872, 7870, 7876, 7874,\n  7726,\n  7890, 7888, 7894, 7892,\n  7756, 556, 7758,\n  554,\n  510,\n  475, 471, 469, 473,\n  7847, 7845, 7851, 7849,\n  479,\n  507,\n  509, 483,\n  7689,\n  7873, 7871, 7877, 7875,\n  7727,\n  7891, 7889, 7895, 7893,\n  7757, 557, 7759,\n  555,\n  511,\n  476, 472, 470, 474,\n  7856, 7854, 7860, 7858,\n  7857, 7855, 7861, 7859,\n  7700, 7702,\n  7701, 7703,\n  7760, 7762,\n  7761, 7763,\n  7780,\n  7781,\n  7782,\n  7783,\n  7800,\n  7801,\n  7802,\n  7803,\n  7835,\n  7900, 7898, 7904, 7902, 7906,\n  7901, 7899, 7905, 7903, 7907,\n  7914, 7912, 7918, 7916, 7920,\n  7915, 7913, 7919, 7917, 7921,\n  494,\n  492,\n  493,\n  480,\n  481,\n  7708,\n  7709,\n  560,\n  561,\n  495,\n  8122, 902, 8121, 8120, 7944, 7945, 8124,\n  8136, 904, 7960, 7961,\n  8138, 905, 7976, 7977, 8140,\n  8154, 906, 8153, 8152, 938, 7992, 7993,\n  8184, 908, 8008, 8009,\n  8172,\n  8170, 910, 8169, 8168, 939, 8025,\n  8186, 911, 8040, 8041, 8188,\n  8116,\n  8132,\n  8048, 940, 8113, 8112, 7936, 7937, 8118, 8115,\n  8050, 941, 7952, 7953,\n  8052, 942, 7968, 7969, 8134, 8131,\n  8054, 943, 8145, 8144, 970, 7984, 7985, 8150,\n  8056, 972, 8000, 8001,\n  8164, 8165,\n  8058, 973, 8161, 8160, 971, 8016, 8017, 8166,\n  8060, 974, 8032, 8033, 8182, 8179,\n  8146, 912, 8151,\n  8162, 944, 8167,\n  8180,\n  979, 980,\n  1031,\n  1232, 1234,\n  1027,\n  1024, 1238, 1025,\n  1217, 1244,\n  1246,\n  1037, 1250, 1049, 1252,\n  1036,\n  1254,\n  1262, 1038, 1264, 1266,\n  1268,\n  1272,\n  1260,\n  1233, 1235,\n  1107,\n  1104, 1239, 1105,\n  1218, 1245,\n  1247,\n  1117, 1251, 1081, 1253,\n  1116,\n  1255,\n  1263, 1118, 1265, 1267,\n  1269,\n  1273,\n  1261,\n  1111,\n  1142,\n  1143,\n  1242,\n  1243,\n  1258,\n  1259,\n  1570, 1571, 1573,\n  1572,\n  1574,\n  1730,\n  1747,\n  1728,\n  2345,\n  2353,\n  2356,\n  2507, 2508,\n  2891, 2888, 2892,\n  2964,\n  3018, 3020,\n  3019,\n  3144,\n  3264,\n  3274, 3271, 3272,\n  3275,\n  3402, 3404,\n  3403,\n  3546, 3548, 3550,\n  3549,\n  4134,\n  6918,\n  6920,\n  6922,\n  6924,\n  6926,\n  6930,\n  6971,\n  6973,\n  6976,\n  6977,\n  6979,\n  7736,\n  7737,\n  7772,\n  7773,\n  7784,\n  7785,\n  7852, 7862,\n  7853, 7863,\n  7878,\n  7879,\n  7896,\n  7897,\n  7938, 7940, 7942, 8064,\n  7939, 7941, 7943, 8065,\n  8066,\n  8067,\n  8068,\n  8069,\n  8070,\n  8071,\n  7946, 7948, 7950, 8072,\n  7947, 7949, 7951, 8073,\n  8074,\n  8075,\n  8076,\n  8077,\n  8078,\n  8079,\n  7954, 7956,\n  7955, 7957,\n  7962, 7964,\n  7963, 7965,\n  7970, 7972, 7974, 8080,\n  7971, 7973, 7975, 8081,\n  8082,\n  8083,\n  8084,\n  8085,\n  8086,\n  8087,\n  7978, 7980, 7982, 8088,\n  7979, 7981, 7983, 8089,\n  8090,\n  8091,\n  8092,\n  8093,\n  8094,\n  8095,\n  7986, 7988, 7990,\n  7987, 7989, 7991,\n  7994, 7996, 7998,\n  7995, 7997, 7999,\n  8002, 8004,\n  8003, 8005,\n  8010, 8012,\n  8011, 8013,\n  8018, 8020, 8022,\n  8019, 8021, 8023,\n  8027, 8029, 8031,\n  8034, 8036, 8038, 8096,\n  8035, 8037, 8039, 8097,\n  8098,\n  8099,\n  8100,\n  8101,\n  8102,\n  8103,\n  8042, 8044, 8046, 8104,\n  8043, 8045, 8047, 8105,\n  8106,\n  8107,\n  8108,\n  8109,\n  8110,\n  8111,\n  8114,\n  8130,\n  8178,\n  8119,\n  8141, 8142, 8143,\n  8135,\n  8183,\n  8157, 8158, 8159,\n  8602,\n  8603,\n  8622,\n  8653,\n  8655,\n  8654,\n  8708,\n  8713,\n  8716,\n  8740,\n  8742,\n  8769,\n  8772,\n  8775,\n  8777,\n  8813,\n  8802,\n  8816,\n  8817,\n  8820,\n  8821,\n  8824,\n  8825,\n  8832,\n  8833,\n  8928,\n  8929,\n  8836,\n  8837,\n  8840,\n  8841,\n  8930,\n  8931,\n  8876,\n  8877,\n  8878,\n  8879,\n  8938,\n  8939,\n  8940,\n  8941,\n  12436,\n  12364,\n  12366,\n  12368,\n  12370,\n  12372,\n  12374,\n  12376,\n  12378,\n  12380,\n  12382,\n  12384,\n  12386,\n  12389,\n  12391,\n  12393,\n  12400, 12401,\n  12403, 12404,\n  12406, 12407,\n  12409, 12410,\n  12412, 12413,\n  12446,\n  12532,\n  12460,\n  12462,\n  12464,\n  12466,\n  12468,\n  12470,\n  12472,\n  12474,\n  12476,\n  12478,\n  12480,\n  12482,\n  12485,\n  12487,\n  12489,\n  12496, 12497,\n  12499, 12500,\n  12502, 12503,\n  12505, 12506,\n  12508, 12509,\n  12535,\n  12536,\n  12537,\n  12538,\n  12542,\n  67017,\n  67044,\n  69786,\n  69788,\n  69803,\n  69934,\n  69935,\n  70475, 70476,\n  70531,\n  70533,\n  70542,\n  70545,\n  70599, 70597, 70600,\n  70844, 70843, 70846,\n  71098,\n  71099,\n  71992,\n  90401, 90403, 90405, 90402,\n  90406, 90408,\n  90407,\n  90404,\n  93545,\n  93544,\n  93546,\n};\n\n"
  },
  {
    "path": "compat/wordexp.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifdef HAVE_CONFIG_H\n#include \"config.h\"\n#endif\n\n#include \"compat.h\"\n#include \"stddef.h\"\n#include <stdlib.h>\n#include <string.h>\n#include <stdio.h>\n\nvoid\ncompat_wordfree (wordexp_t *pwordexp)\n{\n\tfree(pwordexp->we_wordv[0]);\n\tfree(pwordexp->we_wordv);\n}\n\nint\ncompat_wordexp (const char *words, wordexp_t *pwordexp, int flags)\n{\n\tchar *expanded = NULL;\n\tconst char *home = getenv(\"HOME\");\n\n\tif (home && words[0] == '~' && (words[1] == '/' || words[1] == 0)) {\n\t\tsize_t len = strlen(home) + strlen(words + 1) + 1;\n\t\tif ((expanded = malloc(len)) && !snprintf(expanded, len, \"%s%s\", home, words + 1)) {\n\t\t\tfree(expanded);\n\t\t\treturn -1;\n\t\t}\n\t} else {\n\t\texpanded = strdup(words);\n\t}\n\n\tif (!expanded)\n\t\treturn -1;\n\n\tpwordexp->we_wordv = calloc(2, sizeof(*pwordexp->we_wordv));\n\tif (!pwordexp->we_wordv) {\n\t\tfree(expanded);\n\t\treturn -1;\n\t}\n\tpwordexp->we_wordv[0] = expanded;\n\n\treturn 0;\n}\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "config.make.in",
    "content": "# -*- makefile-gmake -*-\n\nprefix = @prefix@\nexec_prefix = @exec_prefix@\nbindir = @bindir@\nmandir = @mandir@\ndocdir = @docdir@\ndatarootdir = @datarootdir@\nsysconfdir = @sysconfdir@\n\nCC = @CC@\nCFLAGS = @CFLAGS@ @COVERAGE_CFLAGS@\n# CURSES_CFLAGS contain `-I..` flags so add to preprocessor flags.\nCPPFLAGS = @CPPFLAGS@ @CURSES_CFLAGS@ -DHAVE_CONFIG_H\nLDFLAGS = @LDFLAGS@\nLDLIBS = @LIBS@ @CURSES_LIBS@\n\nASCIIDOC = @ASCIIDOC@\nXMLTO = @XMLTO@\nDOCBOOK2PDF = @DOCBOOK2PDF@\n\nLCOV = @LCOV@\nGENHTML = @GENHTML@\n\n# Special compatibility features\n@NO_MKSTEMPS@ NO_MKSTEMPS = y\n@NO_SETENV@ NO_SETENV = y\n@NO_STRNDUP@ NO_STRNDUP = y\n@NO_WORDEXP@ NO_WORDEXP = y\n\n# Add config.h as a dependency for all object files\nCONFIG_H = config.h\n\nconfig.status: configure\n\t./config.status --recheck\n\nconfig.h config.make: config.status\n\t./config.status $@\n\nconfig.make: config.make.in\n"
  },
  {
    "path": "configure.ac",
    "content": "AC_INIT([tig],[0],[jonas.fonseca@gmail.com],[tig])\n\nAC_LANG([C])\nAC_CONFIG_HEADERS([config.h])\nAC_CONFIG_SRCDIR(src)\n\ndnl  Document where we keep our .m4 file.\nAC_CONFIG_MACRO_DIR([tools])\ndnl  Make sure aclocal actually found it!\nm4_pattern_forbid([^AX_])\n\nAC_PROG_CC\n\nAC_CHECK_HEADERS([execinfo.h paths.h stdint.h stdlib.h string.h sys/time.h unistd.h wordexp.h])\nAC_CHECK_FUNCS([gettimeofday])\nAC_CHECK_DECLS([environ])\nAC_CHECK_DECLS([errno], [], [], [#include <errno.h>])\n\ndnl Checks for compatibility flags\nAC_CHECK_FUNCS([mkstemps], [AC_SUBST([NO_MKSTEMPS], [\"#\"])])\nAC_CHECK_FUNCS([setenv], [AC_SUBST([NO_SETENV], [\"#\"])])\nAC_CHECK_FUNCS([strndup], [AC_SUBST([NO_STRNDUP], [\"#\"])])\nAC_CHECK_FUNCS([wordexp], [AC_SUBST([NO_WORDEXP], [\"#\"])])\n\nAX_WITH_CURSES\ncase \"$ax_cv_ncurses\" in \"no\")\n\tAC_MSG_ERROR([ncurses not found])\nesac\ncase \"$ax_cv_ncursesw\" in \"no\")\n\tAC_MSG_WARN([The found ncurses library does not support wide-char.])\n\tAC_MSG_WARN([This means that tig will not correctly render UTF-8.])\nesac\nAC_SUBST(CURSES_LIBS)\n\nAX_LIB_READLINE(6.3)\n\nAM_ICONV\n\ndnl Check for PCRE (Perl Compatible Regular Expressions) library\nAC_ARG_WITH(pcre, [AS_HELP_STRING([--without-pcre], [do not use PCRE (Perl Compatible Regular Expressions) library])])\nAS_IF([test \"x$with_pcre\" != xno], [\n\tAC_CHECK_HEADERS([pcre2posix.h])\n\tAS_IF([test \"x$ac_cv_header_pcre2posix_h\" = xyes], [\n\t\tAC_CHECK_LIB([pcre2-posix], [regexec], [\n\t\t\tAC_DEFINE([HAVE_PCRE2], [1], [Define if you have PCRE2])\n\t\t\tAC_DEFINE([PCRE2_CODE_UNIT_WIDTH], [8], [ ])\n\t\t\tLIBS=\"$LIBS -lpcre2-posix -lpcre2-8\"\n\t\t])\n\t])\n\tAS_IF([test \"x$ac_cv_lib_pcre2_posix_regexec\" != xyes], [\n\t\tAC_CHECK_HEADERS([pcreposix.h])\n\t\tAS_IF([test \"x$ac_cv_header_pcreposix_h\" = xyes], [\n\t\t\tAC_CHECK_LIB([pcreposix], [regexec], [\n\t\t\t\tAC_DEFINE([HAVE_PCRE], [1], [Define if you have PCRE])\n\t\t\t\tLIBS=\"$LIBS -lpcreposix -lpcre\"\n\t\t\t])\n\t\t])\n\t])\n])\n\ndnl OS-specific\ncase $(uname -s 2>/dev/null || echo unknown) in \"OS400\")\n\tAC_CHECK_LIB(util, main, [LIBS=\"$LIBS -lutil\"], AC_MSG_ERROR([Please install the libutil-devel package]))\n\t;;\nesac\n\nAC_CHECK_PROGS(SED, [gsed], [sed])\nAC_TDD_GCOV\nAC_SUBST(COVERAGE_CFLAGS)\nAC_SUBST(COVERAGE_LDFLAGS)\n\nAC_CHECK_PROGS(ASCIIDOC, [asciidoc], [false])\nAC_CHECK_PROGS(XMLTO, [xmlto], [false])\nAC_CHECK_PROGS(DOCBOOK2PDF, [docbook2pdf], [false])\n\nAC_CONFIG_FILES([config.make])\nAC_OUTPUT\n\ndnl Local Variables:\ndnl eval: (font-lock-add-keywords nil '((\"\\\\_<AX_\\\\sw+\" . font-lock-keyword-face)))\ndnl End:\n"
  },
  {
    "path": "contrib/bindings-v1.x.tigrc",
    "content": "# Bindings from before version 2.0\n#\n# To use these bindings copy the file to your HOME directory and include\n# it from your ~/.tigrc file:\n#\n#\t$ cp contrib/bindings-v1.x.tigrc ~/.tigrc.compat\n#\t$ echo \"source ~/.tigrc.compat\" >> ~/.tigrc\n\nbind generic\tB\tview-blame\nbind generic\tG\tview-grep\nbind generic\tH\tview-refs\nbind generic\tS\tview-status\n\nbind generic\tr\tscreen-redraw\nbind generic\tw\tscroll-page-up\nbind generic\ts\tscroll-page-down\nbind generic\tb\tmove-page-up\n\nbind generic\tg\t:toggle commit-title-graph\nbind generic\ti\t:toggle sort-field\nbind generic\t.\t:toggle line-number\nbind generic\t<Hash>\t:toggle file-name\nbind generic\tF\t:toggle commit-title-refs\n"
  },
  {
    "path": "contrib/chocolate.theme.tigrc",
    "content": "color diff-stat\t\t\t95\tdefault\ncolor date\t\t\t172\tdefault\ncolor \"Merge: \"\t\t\tcyan\tdefault\ncolor graph-commit\t\tred\tdefault\ncolor id\t\t\t167\tdefault\ncolor \"author \"\t\t\t95\tdefault\ncolor \"Commit: \"\t\t90\tdefault\ncolor cursor\t\t\twhite\t101\tbold\n\ncolor palette-0\t\t\t93\tdefault\ncolor palette-1\t\t\t95\tdefault\ncolor palette-2\t\t\t124\tdefault\ncolor palette-7\t\t\t90\tdefault bold\n\ncolor delimiter\t\t\t90\tdefault\ncolor main-tracked\t\t99\tdefault\tbold\n"
  },
  {
    "path": "contrib/config.make",
    "content": "# Example config.make.\n\n# Install files under /usr/local instead of under $HOME.\nprefix=/usr/local\n\n# Use ncursesw.\nLDLIBS = -lncursesw\nCPPFLAGS = -DHAVE_NCURSESW_CURSES_H\n\n# Use readline.\n#LDLIBS += -lreadline\n#CPPFLAGS += -DHAVE_READLINE\n\n# Use PCRE2.\n#LDLIBS += -lpcre2-posix -lpcre2-8\n#CPPFLAGS += -DHAVE_PCRE2 -DPCRE2_CODE_UNIT_WIDTH=8\n\n# Uncomment to enable work-around for missing setenv().\n#NO_SETENV=y\n\n# Uncomment to enable work-around for missing mkstemps().\n#NO_MKSTEMPS=y\n\n# Uncomment to enable work-around for missing wordexp().\n#NO_WORDEXP=y\n\n# Uncomment to not include built-in tigrc inside the binary.\n#NO_BUILTIN_TIGRC=y\n\n# vim: ft=make:\n"
  },
  {
    "path": "contrib/config.make-CYGWIN_NT-6.1",
    "content": "# Example configuration for Cygwin (`uname -s` = CYGWIN_NT-6.1)\n#\n# Use ncursesw.\n\nNCURSESW_LIBS = $(shell ncursesw6-config --libs 2>/dev/null)\nHAS_ICONV = $(shell test -e \"/usr/include/iconv.h\" && echo true)\n\nifeq ($(NCURSESW_LIBS),)\n$(error Please install the libncursesw-devel package)\nendif\n\nifneq ($(HAS_ICONV),true)\n$(error Please install the libiconv-devel package)\nendif\n\nTIG_NCURSES = $(NCURSESW_LIBS)\nTIG_LDLIBS = -liconv\nTIG_CPPFLAGS = -DHAVE_NCURSESW_CURSES_H\n\n# vim: ft=make:\n"
  },
  {
    "path": "contrib/config.make-Darwin",
    "content": "# Example configuration for Darwin / macOS.\n\nifeq ($(origin HOMEBREW_PREFIX), undefined)\nHOMEBREW_PREFIX := $(shell brew --prefix 2>/dev/null)\nendif\n\n# Work-around for Homebrew-based xmlto.\nexport XML_CATALOG_FILES=$(HOMEBREW_PREFIX)/etc/xml/catalog\n\nTIG_CFLAGS += -DHAVE_EXECINFO_H\nTIG_LDLIBS = -liconv\n\nNCURSES_DIR ?= $(wildcard $(HOMEBREW_PREFIX)/opt/ncurses)\n\nifneq ($(NCURSES_DIR),)\n\tTIG_NCURSES = -lncursesw\n\tTIG_CPPFLAGS += -I$(NCURSES_DIR)/include -DHAVE_NCURSESW_CURSES_H\n\tTIG_LDFLAGS += -L$(NCURSES_DIR)/lib\nelse\n\tTIG_CPPFLAGS += -DHAVE_CURSES_H\nendif\n\nREADLINE_DIR ?= $(wildcard $(HOMEBREW_PREFIX)/opt/readline)\n\nifneq ($(READLINE_DIR),)\n\tTIG_LDLIBS += -lreadline\n\tTIG_LDFLAGS += -L$(READLINE_DIR)/lib\n\tTIG_CPPFLAGS += -I$(READLINE_DIR)/include -DHAVE_READLINE\nendif\n\nPCRE2_DIR ?= $(wildcard $(HOMEBREW_PREFIX)/opt/pcre2)\n\nifneq ($(PCRE2_DIR),)\n\tTIG_LDLIBS += -lpcre2-posix -lpcre2-8\n\tTIG_LDFLAGS += -L$(PCRE2_DIR)/lib\n\tTIG_CPPFLAGS += -I$(PCRE2_DIR)/include -DHAVE_PCRE2 -DPCRE2_CODE_UNIT_WIDTH=8\nendif\n\n# vim: ft=make:\n"
  },
  {
    "path": "contrib/config.make-Linux",
    "content": "# Example configuration for Linux.\n#\n# Use ncursesw.\n\nTIG_NCURSES = -lncursesw\nTIG_CPPFLAGS = -DHAVE_NCURSESW_CURSES_H\n\n# vim: ft=make:\n"
  },
  {
    "path": "contrib/git-flow.tigrc",
    "content": "# Bindings for git-flow.\n#\n# Flow bindings start with the capital F and then follow the first character of\n# each operation. If executed from the refs view, the operations (that make\n# sense to) work on the selected branch. Otherwise, they work on the currently\n# checked out branch.\n#\n# Commands that finish a flow require confirmation to run. Commands that create\n# a new flow prompt for user input and run when that input is accepted with no\n# confirmation prompt.\n#\n# Note: Bindings assume the standard git-flow paths of feature, release, hotfix\n# and support.\n#\n# To use these keybindings copy the file to your HOME directory and include it\n# from your ~/.tigrc file:\n#\n#       $ cp contrib/git-flow.tigrc ~/.tigrc.git-flow\n#       $ echo \"source ~/.tigrc.git-flow\" >> ~/.tigrc\n\n# Get rid of default bindings for F, as that will be the entry point for all\n# git-flow related commands with this binding.\nbind generic F none\n\n# General\nbind generic Fi ?git flow init\n\n# Feature\nbind generic Ffl !git flow feature\nbind generic Ffs !git flow feature start \"%(prompt New feature name: )\"\nbind generic Fff ?sh -c \"git flow feature finish `echo %(repo:head) | sed -e s/feature.//`\"\nbind refs    Fff ?sh -c \"git flow feature finish `echo %(branch) | sed -e s/feature.//`\"\n\n# Release\nbind generic Frl !git flow release\nbind generic Frs !git flow release start \"%(prompt New release name: )\"\nbind generic Frf ?sh -c \"git flow release finish `echo %(repo:head) | sed -e s/release.//`\"\nbind refs    Frf ?sh -c \"git flow release finish `echo %(branch) | sed -e s/release.//`\"\n\n# Hot Fix\nbind generic Fhl !git flow hotfix\nbind generic Fhs !git flow hotfix start \"%(prompt New hotfix name: )\"\nbind generic Fhf ?sh -c \"git flow hotfix finish `echo %(repo:head) | sed -e s/hotfix.//`\"\nbind refs    Fhf ?sh -c \"git flow hotfix finish `echo %(branch) | sed -e s/hotfix.//`\"\n\n# Support\nbind generic Fsl !git flow support\nbind refs    Fss !git flow support start \"%(prompt New support name: )\" %(branch)\n"
  },
  {
    "path": "contrib/large-repo.tigrc",
    "content": "# Settings for speeding up Tig in large repositories\n#\n# To use these settings copy the file to your HOME directory and include\n# it from your ~/.tigrc file:\n#\n#\t$ cp contrib/large-repo.tigrc ~/.tigrc.large\n#\t$ echo \"source ~/.tigrc.large\" >> ~/.tigrc\n\n# Use Git's default (reverse chronological) order, never automatically\n# use topo-order for the commit graph\nset commit-order = default\n \n# Don't show diffstat\nset log-options =\n\n# Limit number of commits loaded by default to 1000\nset main-options = -n 1000\n\n# Don't show staged and unstaged changes in the main view\nset show-changes = no\n\n# Optionally, use the old and faster but less acurate graph renderer\n#set main-view-commit-title-graph = v1\n"
  },
  {
    "path": "contrib/tig-completion.bash",
    "content": "# bash/zsh completion for tig\n#\n# Copyright (C) 2019 Roland Hieber, Pengutronix\n# Copyright (C) 2006-2026 Jonas fonseca\n#\n# This program is free software; you can redistribute it and/or\n# modify it under the terms of the GNU General Public License as\n# published by the Free Software Foundation; either version 2 of\n# the License, or (at your option) any later version.\n#\n# This completion builds upon the git completion (>= git 1.17.11),\n# which most tig users should already have available at this point.\n# To use these routines:\n#\n#    1) Copy this file to somewhere (e.g. ~/.bash_completion.d/tig).\n#\n#    2) Add the following line to your .bashrc:\n#\n#           source ~/.bash_completion.d/tig\n#\n#       Note that most Linux distributions source everything in\n#       ~/.bash_completion.d/ automatically at bash startup, so you\n#       have to source this script manually only in shells that were\n#       already running before.\n#\n#    3) You may want to make sure the git executable is available\n#       in your PATH before this script is sourced, as some caching\n#       is performed while the script loads.  If git isn't found\n#       at source time then all lookups will be done on demand,\n#       which may be slightly slower.\n\n#tig-completion requires __git_complete\n#* If not defined, source git completions script so __git_complete is available\nif ! declare -f __git_complete &>/dev/null; then\n\t_bash_completion=$(pkg-config --variable=completionsdir bash-completion 2>/dev/null) ||\n\t\t_bash_completion='/usr/share/bash-completion/completions/'\n\t\t\t_locations=(\n\t\t\t\t\"$(dirname \"${BASH_SOURCE[0]%:*}\")\"/git-completion.bash #in same dir as this\n\t\t\t\t\"$HOME/.local/share/bash-completion/completions/git\"\n\t\t\t\t\"$_bash_completion/git\"\n\t\t\t\t'/etc/bash_completion.d/git' # old debian\n\t\t\t)\n\t\t\tfor _e in \"${_locations[@]}\"; do\n\t\t\t\t# shellcheck disable=1090\n\t\t\t\ttest -f \"$_e\" && . \"$_e\" && break\n\t\t\tdone\n\t\t\tunset _bash_completion _locations _e\n\t\t\tif ! declare -f __git_complete &>/dev/null; then\n\t\t\t\treturn #silently return without completions\n\t\t\tfi\nfi\n\n__tig_options=\"\n\t-v --version\n\t-h --help\n\t-C\n\"\n__tig_commands=\"\n\tblame\n\tgrep\n\tlog\n\treflog\n\trefs\n\tstash\n\tstatus\n\tshow\n\"\n\n__tig_main () {\n\t# parse already existing parameters\n\tlocal i c=1 command __git_repo_path\n\twhile [ $c -lt $cword ]; do\n\t\ti=\"${words[c]}\"\n\t\tcase \"$i\" in\n\t\t--)\tcommand=\"log\"; break;;\n\t\t-C)\treturn;;\n\t\t-*)\t;;\n\t\t*)\tcommand=\"$i\"; break ;;\n\t\tesac\n\t\tc=$((++c))\n\tdone\n\n\t# commands\n\tcase \"$command\" in\n\t\trefs|status|stash)\n\t\t\t__gitcomp \"$__tig_options\"\n\t\t\t;;\n\t\treflog)\n\t\t\t__git_complete_command log\n\t\t\t;;\n\t\t\"\")\n\t\t\t__git_complete_command log\n\t\t\t__gitcomp \"$__tig_options $__tig_commands\"\n\t\t\t;;\n\t\t*)\n\t\t\t__git_complete_command $command\n\t\t\t;;\n\tesac\n}\n\n# we use internal git-completion functions, so wrap _tig for all necessary\n# variables (like cword and prev) to be defined\n__git_complete tig __tig_main\n\n# The following are necessary only for Cygwin, and only are needed\n# when the user has tab-completed the executable name and consequently\n# included the '.exe' suffix.\nif [ Cygwin = \"$(uname -o 2>/dev/null)\" ]; then\n\t__git_complete tig.exe __tig_main\nfi\n"
  },
  {
    "path": "contrib/tig-completion.zsh",
    "content": "#compdef tig\n#\n# zsh completion wrapper for tig\n# ==============================\n#\n# You need to install this script to zsh fpath with tig-completion.bash.\n#\n# The recommended way to install this script is to copy this and tig-completion.bash\n# to '~/.zsh/_tig' and '~/.zsh/tig-completion.bash' and\n# then add following to your ~/.zshrc file:\n#\n#  fpath=(~/.zsh $fpath)\n#\n# You also need Git's Zsh completion installed:\n#\n# https://github.com/felipec/git-completion/blob/master/git-completion.zsh\n\n\n_tig () {\n  local e\n\n  compdef _git tig\n\n  e=$(dirname ${funcsourcetrace[1]%:*})/tig-completion.bash\n  if [ -f $e ]; then\n    # Temporarily override __git_complete so the bash script doesn't complain\n    local old=\"$functions[__git_complete]\"\n    functions[__git_complete]=:\n    . $e\n    functions[__git_complete]=\"$old\"\n  fi\n}\n"
  },
  {
    "path": "contrib/tig-pick",
    "content": "#!/bin/sh\n#\n# 'tig-pick' is a wrapper script that uses 'tig' to pick a Git commit from the\n# history. On success, The script prints the ID of the commit to standard\n# output, so that it can be used as a parameter for subsequent commands, e.g.\n# 'git rebase -i $(tig-pick)'\n#\n# In order to be able to display the interface and to catch the commit ID\n# (easily) at the same time, 'tig' has to be run with the standard and error\n# output channels swapped.\n#\n# All parameters passed to the script will be forwarded to 'tig'.\n#\n\n\nset -e\n\nCONFIG=$(mktemp)\ntrap \"rm -f '$CONFIG'\" EXIT\n\n# Prepare config file: source user config, if present\nif [ ! -z \"$TIGRC_USER\" ]; then\n\techo \"source $TIGRC_USER\" >> \"$CONFIG\"\nelif [ -f \"$HOME/.tigrc\" ]; then\n\techo \"source $HOME/.tigrc\" >> \"$CONFIG\"\nfi\n\n# Bind Enter to print the selected commit ID to error output and exit after\n# that.\necho 'bind main <Enter> <sh -c \"echo %(commit) >&2\"' >> \"$CONFIG\"\n\n\n# Run tig with the standard and error output channels swapped.\nexport TIGRC_USER=$CONFIG\nstderr=$(tig \"$@\" 3>&2 2>&1 1>&3 3>&-) || {\n\tstatus=$?\n\techo \"$stderr\" >&2\n\texit $status\n}\ncommit=$(echo \"$stderr\" | tail -n1)\n\n# Check return value for valid commit ID\nif ! printf '%s' \"$commit\" | grep -iqE '^[0-9a-f]{40}$'; then\n\techo \"$stderr\" >&2\n\texit 1\nfi\n\necho \"$commit\"\n"
  },
  {
    "path": "contrib/tig.spec.in",
    "content": "# -*- mode: rpm-spec-mode; encoding: utf-8; -*-\n# Pass '--without docs' to rpmbuild if you don't want the documentation to be build\n\nSummary: \tTig: text-mode interface for git\nName: \t\ttig\nVersion: \t@@VERSION@@\nRelease: \t@@RELEASE@@%{?dist}\nLicense: \tGPLv2+\nGroup: \t\tDevelopment/Tools\nVendor: \tJonas Fonseca <jonas.fonseca@gmail.com>\nURL: \t\thttps://github.com/jonas/tig\nSource: \thttps://github.com/jonas/tig/releases/download/%{name}-%{version}/%{name}-%{version}.tar.gz\nBuildRequires: \tncurses-devel%{!?_without_docs:, xmlto, asciidoc > 6.0.3}\nBuildRoot: \t%{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)\nRequires: \tgit-core, ncurses\n\n%description\nTig is a git repository browser that additionally can act as a pager\nfor output from various git commands.\n\nWhen browsing repositories, it uses the underlying git commands to\npresent the user with various views, such as summarized revision log\nand showing the commit with the log message, diffstat, and the diff.\n\nUsing it as a pager, it will display input from stdin and colorize it.\n\n%prep\n%setup -q\n\n%build\n%configure\nCFLAGS=\"$RPM_OPT_FLAGS -DVERSION=tig-%{version}-%{release}\"\n%{__make} %{_smp_mflags} \\\n\tprefix=%{_prefix} \\\n\tall %{!?_without_docs: doc-man doc-html}\n\n%install\n[ \"$RPM_BUILD_ROOT\" != \"/\" ] && rm -rf $RPM_BUILD_ROOT\nCFLAGS=\"$RPM_OPT_FLAGS -DVERSION=tig-%{version}-%{release}\"\n%{__make} %{_smp_mflags} DESTDIR=$RPM_BUILD_ROOT \\\n\tprefix=%{_prefix} bindir=%{_bindir} mandir=%{_mandir} \\\n\tinstall %{!?_without_docs: install-doc-man}\n\n%clean\n[ \"$RPM_BUILD_ROOT\" != \"/\" ] && rm -rf $RPM_BUILD_ROOT\n\n%files\n%defattr(-,root,root)\n%{_bindir}/*\n%{_sysconfdir}/*\n%doc README.adoc COPYING INSTALL.adoc NEWS.adoc contrib/tig-completion.bash contrib/tig-completion.zsh\n%{!?_without_docs: %{_mandir}/man1/*.1*}\n%{!?_without_docs: %{_mandir}/man5/*.5*}\n%{!?_without_docs: %{_mandir}/man7/*.7*}\n%{!?_without_docs: %doc doc/*.html}\n%{?_without_docs:  %doc doc/*.txt}\n\n%changelog\n* Sun Feb 23 2014 Jonas Fonseca <jonas.fonseca@gmail.com>\n- Add tigrc installed in /etc\n\n* Tue Jan  8 2013 Joakim Sernbrant <serbaut@gmail.com>\n- Added configure\n\n* Thu Aug 16 2012 Victor Foitzik <vifo@cpan.org>\n- Now also packaging man(7) pages\n\n* Sat Jun 23 2007 Jonas Fonseca <jonas.fonseca@gmail.com>\n- Include tig bash completion script\n\n* Fri Jun  1 2007 Jakub Narebski <jnareb@gmail.com>\n- Include documentation sources for --without docs\n- Remove PDF version of manual from being build and installed\n\n* Mon May 28 2007 Jakub Narebski <jnareb@gmail.com>\n- Initial tig spec file\n"
  },
  {
    "path": "contrib/vim.tigrc",
    "content": "# Vim-style keybindings for Tig\n#\n# To use these keybindings copy the file to your HOME directory and include\n# it from your ~/.tigrc file:\n#\n#\t$ cp contrib/vim.tigrc ~/.tigrc.vim\n#\t$ echo \"source ~/.tigrc.vim\" >> ~/.tigrc\n\nbind generic h scroll-left\nbind generic j move-down\nbind generic k move-up\nbind generic l scroll-right\n\nbind generic g  none\nbind generic gg move-first-line\nbind generic gj next\nbind generic gk previous\nbind generic gp parent\nbind generic gP back\nbind generic gn view-next\n\nbind main    G move-last-line\nbind generic G move-last-line\n\nbind generic <C-f> move-page-down\nbind generic <C-b> move-page-up\n\nbind generic v  none\nbind generic vm view-main\nbind generic vd view-diff\nbind generic vl view-log\nbind generic vt view-tree\nbind generic vb view-blob\nbind generic vx view-blame\nbind generic vr view-refs\nbind generic vs view-status\nbind generic vu view-stage\nbind generic vy view-stash\nbind generic vg view-grep\nbind generic vp view-pager\nbind generic vh view-help\n\nbind generic o  none\nbind generic oo :toggle sort-order\nbind generic os :toggle sort-field\nbind generic on :toggle line-number\nbind generic od :toggle date\nbind generic oa :toggle author\nbind generic og :toggle line-graphics\nbind generic of :toggle file-name\nbind generic op :toggle ignore-space\nbind generic oi :toggle id\nbind generic ot :toggle commit-title-overflow\nbind generic oF :toggle file-filter\nbind generic or :toggle commit-title-refs\n\nbind generic @  none\nbind generic @j :/^@@\nbind generic @k :?^@@\nbind generic @- :toggle diff-context -1\nbind generic @+ :toggle diff-context +1\n\nbind generic u  none\nbind generic uu status-update\nbind generic ur status-revert\nbind generic um status-merge\nbind generic ul stage-update-line\nbind generic up stage-update-part\nbind generic us stage-split-chunk\n\nbind generic c  none\nbind generic cc !git commit\nbind generic ca !?@git commit --amend --no-edit\n\nbind generic K view-help\nbind generic <C-w><C-w> view-next\n"
  },
  {
    "path": "doc/asciidoc.conf",
    "content": "[macros]\n(?su)[\\\\]?(?P<name>manpage):(?P<target>\\S*?)\\[(?P<attrlist>.*?)\\]=\n\nifdef::backend-docbook[]\n[manpage-inlinemacro]\n{0%{target}}\n{0#<citerefentry>}\n{0#<refentrytitle>{target}</refentrytitle><manvolnum>{0}</manvolnum>}\n{0#</citerefentry>}\nendif::backend-docbook[]\n\nifdef::backend-xhtml11[]\n[manpage-inlinemacro]\n<a href=\"{target}{0?.{0}}.html\">{target}{0?({0})}</a>\nendif::backend-xhtml11[]\n\nifdef::doctype-manpage[]\nifdef::backend-docbook[]\n[header]\ntemplate::[header-declarations]\n<refentry>\n<refentryinfo>\n  <date>{revdate}</date>\n</refentryinfo>\n<refmeta>\n<refentrytitle>{mantitle}</refentrytitle>\n<manvolnum>{manvolnum}</manvolnum>\n<refmiscinfo class=\"source\">Tig</refmiscinfo>\n<refmiscinfo class=\"version\">{version}</refmiscinfo>\n<refmiscinfo class=\"manual\">Tig Manual</refmiscinfo>\n</refmeta>\n<refnamediv>\n  <refname>{manname}</refname>\n  <refpurpose>{manpurpose}</refpurpose>\n</refnamediv>\n\n# The following two small workarounds insert a simple paragraph after screen\n#\n\n[listingblock]\n<example><title>{title}</title>\n<screen>\n|\n</screen><simpara></simpara>\n{title#}</example>\n\n[verseblock]\n<formalpara{id? id=\"{id}\"}><title>{title}</title><para>\n{title%}<literallayout{id? id=\"{id}\"}>\n{title#}<literallayout>\n|\n</literallayout><simpara></simpara>\n{title#}</para></formalpara>\nendif::backend-docbook[]\nendif::doctype-manpage[]\n\nifdef::readme[]\n# No header or footers for README.html\n[header]\n<div style=\"font-family: sans-serif;\">\n<h1>{doctitle}</h1>\n\n[footer]\n</div>\n\n[replacements]\n(^|[^-\\\\])--($|[^-])=\\1--\\2\nendif::readme[]\n"
  },
  {
    "path": "doc/manual.adoc",
    "content": "ifndef::doctype-manpage[]\nThe Tig Manual\n==============\nJonas Fonseca <jonas.fonseca@gmail.com>\nendif::doctype-manpage[]\n\nThis is the manual for Tig, the ncurses-based text-mode interface for git.\nTig allows you to browse changes in a Git repository and can additionally act\nas a pager for output of various Git commands. When used as a pager, it will\ndisplay input from stdin and colorize it.\n\nWhen browsing repositories, Tig uses the underlying Git commands to present\nthe user with various views, such as summarized commit log and showing the\ncommit with the log message, diffstat, and the diff.\n\nifdef::include-manual-toc[]\n*Table of Contents*\n\ninclude::manual.toc[]\nendif::include-manual-toc[]\n\n[[calling-conventions]]\nCalling Conventions\n-------------------\n\n[[pager-mode]]\nPager Mode\n~~~~~~~~~~\n\nIf stdin is a pipe, any log or diff options will be ignored and the pager view\nwill be opened loading data from stdin. The pager mode can be used for\ncolorizing output from various Git commands.\n\nExample on how to colorize the output of git-show(1):\n\n-----------------------------------------------------------------------------\n$ git show | tig\n-----------------------------------------------------------------------------\n\n[[cmd-options]]\nGit Command Options\n~~~~~~~~~~~~~~~~~~~\n\nAll Git command options specified on the command line will be passed to the\ngiven command and all will be shell quoted before they are passed to the\nshell.\n\nNOTE: If you specify options for the main view, you should not use the\n`--pretty` option as this option will be set automatically to the format\nexpected by the main view.\n\nExample on how to view a commit and show both author and committer\ninformation:\n\n-----------------------------------------------------------------------------\n$ tig show --pretty=fuller\n-----------------------------------------------------------------------------\n\nSee the section on <<refspec, specifying revisions>> for an introduction to\nrevision options supported by the Git commands. For details on specific Git\ncommand options, refer to the man page of the command in question.\n\n[[viewer]]\nThe Viewer\n----------\n\nThe display consists of a status window on the last line of the screen and one\nor more views. The default is to only show one view at a time but it is\npossible to split both the main and log view to also show the commit diff.\n\nIf you are in the log view and press 'Enter' when the current line is a commit\nline, such as:\n\n-----------------------------------------------------------------------------\ncommit 4d55caff4cc89335192f3e566004b4ceef572521\n-----------------------------------------------------------------------------\n\nYou will split the view so that the log view is displayed in the top window\nand the diff view in the bottom window. You can switch between the two views\nby pressing 'Tab'. To maximize the log view again, simply press 'l'.\n\n[[views]]\nViews\n~~~~~\n\nVarious 'views' of a repository are presented. Each view is based on output\nfrom an external command, most often 'git log', 'git diff', or 'git show'.\n\nThe main view::\n\tIs the default view, and it shows a one line summary of each commit\n\tin the chosen list of revisions. The summary includes committer or\n\tauthor date, author, committer, and the first line of the log message.\n\tAdditionally, any repository references, such as tags, will be shown.\n\nThe log view::\n\tPresents a more rich view of the revision log showing the whole log\n\tmessage and the diffstat.\n\nThe reflog view::\n\tPresents a view of the reflog allowing to navigate the repo\n\thistory.\n\nThe diff view::\n\tShows either the diff of the current working tree, that is, what\n\thas changed since the last commit, or the commit diff complete\n\twith log message, diffstat and diff.\n\nThe tree view::\n\tLists directory trees associated with the current revision allowing\n\tsubdirectories to be descended or ascended and file blobs to be\n\tviewed.\n\nThe blob view::\n\tDisplays the file content or \"blob\" of data associated with a file\n\tname.\n\nThe blame view::\n\tDisplays the file content annotated or blamed by commits.\n\nThe refs view::\n\tDisplays the branches, remotes and tags in the repository.\n\nThe status view::\n\tDisplays status of files in the working tree and allows changes to be\n\tstaged/unstaged as well as adding of untracked files.\n\nThe stage view::\n\tDisplays diff changes for staged or unstaged files being tracked or\n\tfile content of untracked files.\n\nThe stash view::\n\tDisplays the list of stashes in the repository.\n\nThe grep view::\n\tDisplays a list of files and all the lines that matches a search\n\tpattern.\n\nThe pager view::\n\tIs used for displaying both input from stdin and output from Git\n\tcommands entered in the internal prompt.\n\nThe help view::\n\tDisplays a quick reference of key bindings.\n\n[[commit-id]]\nBrowsing State and User-defined Commands\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe viewer keeps track of both what head and commit ID you are currently\nviewing. The commit ID will follow the cursor line and change every time you\nhighlight a different commit. Whenever you reopen the diff view it will be\nreloaded, if the commit ID changed. The head ID is used when opening the main\nand log view to indicate from what revision to show history.\n\nSome of the commands used or provided by Tig can be configured. This goes for\nsome of the <<env-variables, environment variables>> as well as the\n<<external-commands, external commands>>. These user-defined commands can use\narguments that refer to the current browsing state by using one of the\nfollowing variables.\n\n.Browsing state variables\n[frame=\"none\",grid=\"none\",cols=\"25<m,75<\"]\n|=============================================================================\n|%(head)\t\t|The currently viewed 'head' ID. Defaults to HEAD\n|%(commit)\t\t|The currently selected commit ID.\n|%(blob)\t\t|The currently selected blob ID.\n|%(branch)\t\t|The currently selected branch name.\n|%(remote)\t\t|The currently selected remote name. For remote\n\t\t\t branches %(branch) will contain the branch name.\n|%(tag)\t\t\t|The currently selected tag name.\n|%(refname)\t\t|The currently selected reference name including the\n\t\t\t remote name for remote branches.\n|%(stash)\t\t|The currently selected stash name.\n|%(directory)\t\t|The current directory path in the tree view or\n\t\t\t \".\" if undefined.\n|%(file)\t\t|The currently selected file.\n|%(file_old)\t\t|The old filename of the currently selected file.\n|%(lineno)\t\t|The currently selected line number. Defaults to 0.\n|%(lineno_old)\t\t|The currently selected line number, before the diff\n\t\t\t was applied. Defaults to 0.\n|%(ref)\t\t\t|The reference given to blame or HEAD if undefined.\n|%(revargs)\t\t|The revision arguments passed on the command line.\n|%(fileargs)\t\t|The file arguments passed on the command line.\n|%(cmdlineargs)\t\t|All other options passed on the command line.\n|%(diffargs)\t\t|Options from 'diff-options' or 'TIG_DIFF_OPTS' used\n\t\t\t by the diff and stage view.\n|%(blameargs)\t\t|Options from 'blame-options' used by the blame view.\n|%(logargs)\t\t|Options from 'log-options' used by the log view.\n|%(mainargs)\t\t|Options from 'main-options' used by the main view.\n|%(prompt)\t\t|Prompt for the argument value. Optionally specify a\n\t\t\t custom prompt using `\"%(prompt Enter branch name: )\"`\n|%(text)\t\t|The text column of the currently selected line.\n|%(repo:head)\t\t|The name of the checked out branch, e.g. `master`\n|%(repo:head-id)\t|The commit ID of the checked out branch.\n|%(repo:remote)\t\t|The remote name associated with the checked out\n\t\t\t branch, e.g. `origin`.\n|%(repo:upstream)\t|The upstream branch associated with the checked out\n\t\t\t branch, e.g. `origin/master`.\n|%(repo:cdup)\t\t|The path to change directory to the repository root,\n\t\t\t e.g. `../`\n|%(repo:prefix)\t\t|The path prefix of the current work directory,\n\t\t\t e.g `subdir/`.\n|%(repo:git-dir)\t|The path to the Git directory, e.g. `/src/repo/.git`.\n|%(repo:worktree)\t|The worktree path, if defined.\n|%(repo:is-inside-work-tree)\n\t\t\t|Whether Tig is running inside a work tree,\n\t\t\t either `true` or `false`.\n|=============================================================================\n\nExample user-defined commands:\n\n - Allow to amend the last commit:\n\n\tbind generic + !git commit --amend\n\n - Copy commit ID to clipboard:\n\n\tbind generic 9 @sh -c \"echo -n %(commit) | xclip -selection c\"\n\n - Add/edit notes for the current commit used during a review:\n\n\tbind generic T !git notes edit %(commit)\n\n - Enter Git's interactive add for fine-grained staging of file content:\n\n\tbind generic I !git add -i %(file)\n\n - Rebase current branch on top of the selected branch:\n\n\tbind refs 3 !git rebase -i %(branch)\n\n[[title-window]]\nTitle Windows\n~~~~~~~~~~~~~\n\nEach view has a title window which shows the name of the view, current commit\nID if available, and where the view is positioned:\n\n-------------------------------------------------------------------------------\n[main] c622eefaa485995320bc743431bae0d497b1d875 - commit 1 of 61             1%\n-------------------------------------------------------------------------------\n\nBy default, the title of the current view is highlighted using bold font.  For\nlong loading views (taking over 3 seconds) the time since loading started will\nbe appended:\n\n-------------------------------------------------------------------------------\n[main] 77d9e40fbcea3238015aea403e06f61542df9a31 - commit 1 of 779 loading 5s 0%\n-------------------------------------------------------------------------------\n\n[[env-variables]]\nEnvironment Variables\n---------------------\n\nSeveral options related to the interface with Git can be configured via\nenvironment options.\n\n[[configuration-files]]\nConfiguration Files\n~~~~~~~~~~~~~~~~~~~\n\nUpon startup, Tig first reads the system wide configuration file\n(`{sysconfdir}/tigrc` by default) and then proceeds to read the user's\nconfiguration file (`~/.tigrc` or `$XDG_CONFIG_HOME/tig/config` by default).\nThe paths to either of these files can be overridden through the following\nenvironment variables:\n\nTIGRC_USER::\n\tPath of the user configuration file.\n\nTIGRC_SYSTEM::\n\tPath of the system wide configuration file.\n\n[[history-files]]\nHistory Files\n~~~~~~~~~~~~~\n\nIf compiled with readline support, Tig writes a persistent command and search\nhistory to `~/.tig_history` or `$XDG_DATA_HOME/tig/history`.\n\n[[repo-refs]]\nRepository References\n~~~~~~~~~~~~~~~~~~~~~\n\nCommits that are referenced by tags and branch heads will be marked by the\nreference name surrounded by '[' and ']':\n\n-----------------------------------------------------------------------------\n2006-03-26 19:42 Petr Baudis         | [cogito-0.17.1] Cogito 0.17.1\n-----------------------------------------------------------------------------\n\nIf you want to limit what branches are shown, say only show branches named\n`master` or those which start with the `feature/` prefix, you can do it by setting\nthe following variable:\n\n-----------------------------------------------------------------------------\n$ TIG_LS_REMOTE=\"git ls-remote . master feature/*\" tig\n-----------------------------------------------------------------------------\n\nOr set the variable permanently in your environment.\n\n--\n\nTIG_LS_REMOTE::\n\n\tCommand for retrieving all repository references. The command should\n\toutput data in the same format as git-ls-remote(1). Defaults to:\n-----------------------------------------------------------------------------\ngit ls-remote .\n-----------------------------------------------------------------------------\n\n--\n\n[[diff-options]]\nDiff options\n~~~~~~~~~~~~\n\nIt is possible to alter how diffs are shown by the diff view. If for example\nyou prefer to have commit and author dates shown as relative dates, use:\n\n-----------------------------------------------------------------------------\n$ TIG_DIFF_OPTS=\"--relative-date\" tig\n-----------------------------------------------------------------------------\n\nOr set the variable permanently in your environment.\n\n[[keys]]\nDefault Keybindings\n-------------------\nBelow the default key bindings are shown.\n\n[[view-switching]]\nView Switching\n~~~~~~~~~~~~~~\n\n[frame=\"none\",grid=\"none\",cols=\"2<,8<\",options=\"header\"]\n|=============================================================================\n|Key\t|Action\n|m\t|Switch to main view.\n|d\t|Switch to diff view.\n|l\t|Switch to log view.\n|p\t|Switch to pager view.\n|t\t|Switch to (directory) tree view.\n|f\t|Switch to (file) blob view.\n|g\t|Switch to grep view.\n|b\t|Switch to blame view.\n|r\t|Switch to refs view.\n|y\t|Switch to stash view.\n|h\t|Switch to help view\n|s\t|Switch to status view\n|c\t|Switch to stage view\n|=============================================================================\n\n[[view-manipulation]]\nView Manipulation\n~~~~~~~~~~~~~~~~~\n\n[frame=\"none\",grid=\"none\",cols=\"2<,8<\",options=\"header\"]\n|=============================================================================\n|Key\t|Action\n|q\t|Close view, if multiple views are open it will jump back to the\n\tprevious view in the view stack. If it is the last open view it\n\twill quit. Use 'Q' to quit all views at once.\n|Enter\t|This key is \"context sensitive\" depending on what view you are\n\tcurrently in. When in log view on a commit line or in the main\n\tview, split the view and show the commit diff. In the diff view\n\tpressing Enter will simply scroll the view one line down.\n|Tab\t|Switch to next view.\n|R\t|Reload and refresh the current view.\n|O\t|Maximize the current view to fill the whole display.\n|Up\t|This key is \"context sensitive\" and will move the cursor one\n\tline up. However, if you opened a split view it will change the\n\tcursor to point to the previous commit in the parent view and\n\tupdate the child view to display it. If you prefer this key to\n\tmove the cursor or scroll within the diff view instead,\n\tuse `bind diff <Up> move-up` or `bind diff <Up> scroll-line-up`,\n\trespectively.\n|Down\t|Similar to 'Up' but will move down.\n|,\t|Move to parent. In the tree view, this means switch to the parent\n\tdirectory. In the blame view it will load blame for the parent\n\tcommit. For merges the parent is queried.\n|=============================================================================\n\n[[view-actions]]\nView Specific Actions\n~~~~~~~~~~~~~~~~~~~~~\n\n[frame=\"none\",grid=\"none\",cols=\"2<,8<\",options=\"header\"]\n|=============================================================================\n|Key\t|Action\n|u\t|Update status of file. In the status view, this allows you to add an\n\t untracked file or stage changes to a file for next commit (similar to\n\t running git-add <filename>). In the stage view, when pressing this on\n\t a diff chunk line stages only that chunk for next commit, when not on\n\t a diff chunk line all changes in the displayed diff are staged.\n|M\t|Resolve unmerged file by launching git-mergetool(1). Note, to work\n\t correctly this might require some initial configuration of your\n\t preferred merge tool. See the manpage of git-mergetool(1).\n|!\t|Checkout file with unstaged changes. This will reset the file to\n\t contain the content it had at last commit.\n|1\t|Stage single diff line.\n|@\t|Move to next chunk in the stage view.\n|]\t|Increase the diff context.\n|[\t|Decrease the diff context.\n|=============================================================================\n\n[[cursor-nav]]\nCursor Navigation\n~~~~~~~~~~~~~~~~~\n\n[frame=\"none\",grid=\"none\",cols=\"2<,8<\",options=\"header\"]\n|=============================================================================\n|Key\t\t|Action\n|k\t\t|Move cursor one line up.\n|j\t\t|Move cursor one line down.\n|PgUp, -\t|Move cursor one page up.\n|PgDown, Space\t|Move cursor one page down.\n|Home\t\t|Jump to first line.\n|End\t\t|Jump to last line.\n|=============================================================================\n\n[[view-scrolling]]\nScrolling\n~~~~~~~~~\n\n[frame=\"none\",grid=\"none\",cols=\"2<,8<\",options=\"header\"]\n|=============================================================================\n|Key\t\t|Action\n|Insert\t\t|Scroll view one line up.\n|Delete\t\t|Scroll view one line down.\n|ScrollBack\t|Scroll view one page up.\n|ScrollFwd\t|Scroll view one page down.\n|Left\t\t|Scroll view one column left.\n|Right\t\t|Scroll view one column right.\n|\\|\t\t|Scroll view to the first column.\n|=============================================================================\n\n[[searching]]\nSearching\n~~~~~~~~~\n\n[frame=\"none\",grid=\"none\",cols=\"2<,8<\",options=\"header\"]\n|=============================================================================\n|Key\t|Action\n|/\t|Search the view. Opens a prompt for entering search regexp to use.\n|?\t|Search backwards in the view. Also prompts for regexp.\n|n\t|Find next match for the current search regexp.\n|N\t|Find previous match for the current search regexp.\n|=============================================================================\n\nThe format for patterns is either POSIX.2 ``extended'' REs or PCRE / PCRE2 if\nTig was compiled with PCRE / PCRE2 support (check with `tig -v`). See the\nmanpage of re_format(7) or pcrepattern(3) / pcre2pattern(3).\n\nCase sensitivity can be controlled with variable ignore-case.\n\n[[misc-keys]]\nMisc\n~~~~\n\n[frame=\"none\",grid=\"none\",cols=\"2<,8<\",options=\"header\"]\n|=============================================================================\n|Key\t|Action\n|Q\t|Quit.\n|<C-L>\t|Redraw screen.\n|z\t|Stop all background loading. This can be useful if you use\n\t Tig in a repository with a long history without limiting\n\t the revision log.\n|v\t|Show version.\n|o\t|Open option menu\n|#\t|Toggle line numbers on/off.\n|D\t|Toggle date display on/off/relative/relative-compact/custom\n|A\t|Toggle author display on/off/abbreviated/email/email user name.\n|T\t|Toggle committer display on/off/abbreviated/email/email user name.\n|G\t|Toggle revision graph visualization on/off.\n|~\t|Toggle (line) graphics mode\n|F\t|Toggle reference display on/off (tag and branch names).\n|W\t|Toggle ignoring whitespace on/off for diffs\n|X\t|Toggle commit ID display on/off\n|%\t|Toggle file filtering in order to see the full diff instead of only\n\t the diff concerning the currently selected file.\n|^\t|Toggle revision filtering in the main view.\n|$\t|Toggle highlighting of commit title overflow.\n|H\t|Go to the HEAD commit.\n|:\t|Open prompt. This allows you to specify what command to run and also to\n\t jump to a specific line, e.g. `:23`\n|e\t|Open file in editor.\n|=============================================================================\n\n[[prompt]]\nPrompt\n~~~~~~\n\n[frame=\"none\",grid=\"none\",cols=\"2<,8<\",options=\"header\"]\n|=============================================================================\n|Key\t\t\t|Action\n|:<number>\t\t|Jump to the specific line number, e.g. `:80`.\n|:<sha>\t\t\t|Jump to a specific commit, e.g. `:2f12bcc`.\n|:<x>\t\t\t|Execute the corresponding key binding, e.g. `:q`.\n|:!<command>\t\t|Execute a system command in a pager, e.g. `:!git log -p`.\n|:<action>\t\t|Execute a Tig command, e.g. `:edit`.\n|:goto <rev>\t\t|Jump to a specific revision, e.g. `:goto %(commit)^2`\n\t\t\t to goto the current commit's 2nd parent or\n\t\t\t `:goto some/branch` to goto the commit denoting the\n\t\t\t branch `some/branch`.\n|:save-display <file>\t|Save current display to `<file>`.\n|:save-options <file>\t|Save current options to `<file>`.\n|:save-view <file>\t|Save view info to `<file>` (for testing purposes).\n|:script <file>\t\t|Execute commands from `<file>`.\n|:exec <flags><args...> |Execute command using `<args>` with external\n\t\t\t user-defined command option flags defined in `<flags>`.\n|:echo <args...>        |Display text in the status bar.\n|=============================================================================\n\n[[external-commands]]\nExternal Commands\n~~~~~~~~~~~~~~~~~\n\nFor more custom needs, external commands provide a way to easily execute\na script or program. They are bound to keys and use information from the\ncurrent browsing state, such as the current commit ID. Tig comes with\nthe following built-in external commands:\n\n[frame=\"none\",grid=\"none\",cols=\"1<,1<,8<\",options=\"header\"]\n|=============================================================================\n|Keymap\t|Key\t|Action\n|main\t|C\t|git cherry-pick %(commit)\n|status\t|C\t|git commit\n|generic|G\t|git gc\n|=============================================================================\n\n[[refspec]]\nRevision Specification\n----------------------\n\nThis section describes various ways to specify what revisions to display or\notherwise limit the view to. Tig does not itself parse the described\nrevision options so refer to the relevant Git man pages for further\ninformation. Relevant man pages besides git-log(1) are git-diff(1) and\ngit-rev-list(1).\n\nYou can tune the interaction with Git by making use of the options explained\nin this section. For example, by configuring the environment variable\ndescribed in the section on <<diff-options, diff options>>.\n\n[[path-limiting]]\nLimit by Path Name\n~~~~~~~~~~~~~~~~~~\n\nIf you are interested only in those revisions that made changes to a specific\nfile (or even several files) list the files like this:\n\n-----------------------------------------------------------------------------\n$ tig Makefile README\n-----------------------------------------------------------------------------\n\nTo avoid ambiguity with Tig's subcommands or repository references such as tag\nnames, be sure to separate file names from other Git options using \"`--`\". So\nif you have a file named 'status' it will clash with the 'status' subcommand,\nand thus you will have to use:\n\n-----------------------------------------------------------------------------\n$ tig -- status\n-----------------------------------------------------------------------------\n\n[[date-number-limiting]]\nLimit by Date or Number\n~~~~~~~~~~~~~~~~~~~~~~~\n\nTo speed up interaction with Git, you can limit the amount of commits to show\nboth for the log and main view. Either limit by date using e.g.\n`--since=1.month` or limit by the number of commits using `-n400`.\n\nIf you are only interested in changes that happened between two dates you can\nuse:\n\n-----------------------------------------------------------------------------\n$ tig --after=\"May 5th\" --before=\"2006-05-16 15:44\"\n-----------------------------------------------------------------------------\n\nNOTE: If you want to avoid having to quote dates containing spaces you can use\n\".\" instead, e.g. `--after=May.5th`.\n\n[[commit-range-limiting]]\nLimiting by Commit Ranges\n~~~~~~~~~~~~~~~~~~~~~~~~~\n\nAlternatively, commits can be limited to a specific range, such as \"all\ncommits between 'tag-1.0' and 'tag-2.0'\". For example:\n\n-----------------------------------------------------------------------------\n$ tig tag-1.0..tag-2.0\n-----------------------------------------------------------------------------\n\nThis way of commit limiting makes it trivial to only browse the commits which\nhaven't been pushed to a remote branch. Assuming 'origin' is your upstream\nremote branch, using:\n\n-----------------------------------------------------------------------------\n$ tig origin..HEAD\n-----------------------------------------------------------------------------\n\nwill list what will be pushed to the remote branch. Optionally, the ending\n'HEAD' can be left out since it is implied.\n\n[[reachability-limiting]]\nLimiting by Reachability\n~~~~~~~~~~~~~~~~~~~~~~~~\n\nGit interprets the range specifier \"tag-1.0..tag-2.0\" as \"all commits\nreachable from 'tag-2.0' but not from 'tag-1.0'\".  Where reachability refers\nto what commits are ancestors (or part of the history) of the branch or tagged\nrevision in question.\n\nIf you prefer to specify which commit to preview in this way use the\nfollowing:\n\n-----------------------------------------------------------------------------\n$ tig tag-2.0 ^tag-1.0\n-----------------------------------------------------------------------------\n\nYou can think of '^' as a negation operator. Using this alternate syntax, it\nis possible to further prune commits by specifying multiple branch cut offs.\n\n[[refspec-combi]]\nCombining Revisions Specification\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nRevision options can to some degree be combined, which makes it possible to\nsay \"show at most 20 commits from within the last month that changed files\nunder the Documentation/ directory.\"\n\n-----------------------------------------------------------------------------\n$ tig --since=1.month -n20 -- Documentation/\n-----------------------------------------------------------------------------\n\n[[refspec-all]]\nExamining All Repository References\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nIn some cases, it can be useful to query changes across all references in a\nrepository. An example is to ask \"did any line of development in this\nrepository change a particular file within the last week\". This can be\naccomplished using:\n\n-----------------------------------------------------------------------------\n$ tig --all --since=1.week -- Makefile\n-----------------------------------------------------------------------------\n\nMore Information\n----------------\n\nPlease visit Tig's https://github.com/jonas/tig[home page] for information\nabout new releases and how to report bugs and feature requests.\n\n[[copy-right]]\nCopyright\n---------\n\nCopyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n\nThis program is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2 of the License, or\n(at your option) any later version.\n\n[[references]]\nSee Also\n--------\n\nManpages:\n\nifdef::version[]\n - manpage:tig[1]\n - manpage:tigrc[5]\nendif::version[]\nifndef::version[]\n - link:tig.1.adoc[tig(1)]\n - link:tigrc.5.adoc[tigrc(5)]\nendif::version[]\n"
  },
  {
    "path": "doc/tig.1.adoc",
    "content": "tig(1)\n======\n:docext: adoc\n:sysconfdir: /etc\n\nNAME\n----\ntig - text-mode interface for Git\n\nSYNOPSIS\n--------\n[verse]\n_______________________________________________________________________\ntig        [options] [revisions] [--] [paths]\ntig log    [options] [revisions] [--] [paths]\ntig show   [options] [revisions] [--] [paths]\ntig reflog [options] [revisions]\ntig blame  [options] [rev] [--] path\ntig grep   [options] [pattern]\ntig refs   [options]\ntig stash  [options]\ntig status\ntig <      [Git command output]\n_______________________________________________________________________\n\nDESCRIPTION\n-----------\n\nTig is an ncurses-based text-mode interface for git(1). It functions\nmainly as a Git repository browser, but can also assist in staging\nchanges for commit at chunk level and act as a pager for output from\nvarious Git commands.\n\nOPTIONS\n-------\n\nCommand line options recognized by Tig include all valid git-log(1) and\ngit-diff(1) options, as well as the following subcommands and Tig-specific\noptions. The first command line parameter not starting with \"-\" is interpreted\nas being either a revision specification or a path and will end the option\nparsing. All additional options will be passed to the underlying Git command.\n\nNote that this means that any arguments to options should be specified\ntogether. For example, run tig -Sfoo instead of tig -S foo, and tig --grep=foo\ninstead of tig --grep foo, otherwise foo will be interpreted as a revision\nrather than an argument.\n\nshow::\n\tOpen diff view using the given git-show(1) options.\n\nblame::\n\tShow given file annotated by commits.\n\tTakes zero or more git-blame(1) options.\n\tOptionally limited from given revision.\n\nstatus::\n\tStart up in status view.\n\nlog::\n\tStart up in log view, displaying git-log(1) output.\n\nreflog::\n\tStart up in reflog view.\n\nrefs::\n\tStart up in refs view. All refs are displayed unless limited by using\n\tone of the '--branches', '--remotes', or '--tags' parameters.\n\nstash::\n\tStart up in stash view.\n\ngrep::\n\tOpen the grep view. Supports the same options as git-grep(1).\n\n+<number>::\n    Show the first view with line <number> visible and selected.\n\n-v, --version::\n\tShow version and exit.\n\n-h, --help::\n\tShow help message and exit.\n\n-C <path>::\n\tRun as if Tig was started in <path> instead of the current working directory.\n\nPAGER MODE\n----------\n\nTig enters pager mode when input is provided via stdin and supports the\nfollowing subcommands and options:\n\n--\n\n - When the 'show' subcommand is specified and the '--stdin' option is given,\n   stdin is assumed to be a list of commit IDs and will be forwarded to the diff\n   view's underlying git-show(1) command. For example:\n\n-----------------------------------------------------------------------------\n$ git rev-list --author=vivien HEAD | tig show --stdin\n-----------------------------------------------------------------------------\n\n - When '--stdin' is given, stdin is assumed to be a list of commit IDs\n   and will be forwarded to the main view's underlying git-log(1)\n   command. For example:\n\n-----------------------------------------------------------------------------\n$ tig --no-walk --stdin < cherry-picks.txt\n-----------------------------------------------------------------------------\n\n - When '--pretty=raw' is given, stdin is assumed to be a \"pretty=raw\"\n   formatted output similar to that of git-log(1). For example:\n\n-----------------------------------------------------------------------------\n$ git reflog --pretty=raw | tig --pretty=raw\n-----------------------------------------------------------------------------\n\n--\n\nWhen no subcommands nor options are given, the pager view will be used for\ndisplaying the Git command input given on stdin. The pager view assumes the\ninput is either from git-log(1) or git-diff(1) and will highlight it similar to\nthe log and diff views. For example:\n\n-----------------------------------------------------------------------------\n$ git log -Schange -p --raw | tig\n-----------------------------------------------------------------------------\n\nEXAMPLES\n--------\n\nDisplay the list of commits for the current branch:\n-----------------------------------------------------------------------------\n$ tig\n-----------------------------------------------------------------------------\n\nDisplay commits from one or more branches:\n-----------------------------------------------------------------------------\n$ tig test master\n-----------------------------------------------------------------------------\n\nPretend as if all the refs in `refs/` are listed on the command line:\n-----------------------------------------------------------------------------\n$ tig --all\n-----------------------------------------------------------------------------\n\nDisplay differences between two branches:\n-----------------------------------------------------------------------------\n$ tig test..master\n-----------------------------------------------------------------------------\n\nDisplay changes for sub-module versions:\n-----------------------------------------------------------------------------\n$ tig --submodule\n-----------------------------------------------------------------------------\n\nDisplay changes for a single file:\n-----------------------------------------------------------------------------\n$ tig -- README\n-----------------------------------------------------------------------------\n\nDisplay contents of the README file in a specific revision:\n-----------------------------------------------------------------------------\n$ tig show tig-0.8:README\n-----------------------------------------------------------------------------\n\nDisplay revisions between two dates for a specific file:\n-----------------------------------------------------------------------------\n$ tig --after=\"2004-01-01\" --before=\"2006-05-16\" -- README\n-----------------------------------------------------------------------------\n\nBlame file with copy detection enabled:\n-----------------------------------------------------------------------------\n$ tig blame -C README\n-----------------------------------------------------------------------------\n\nDisplay the list of stashes:\n-----------------------------------------------------------------------------\n$ tig stash\n-----------------------------------------------------------------------------\n\nGrep all files for lines containing `DEFINE_ENUM`:\n-----------------------------------------------------------------------------\n$ tig grep -p DEFINE_ENUM\n-----------------------------------------------------------------------------\n\nShow references (branches, remotes and tags):\n-----------------------------------------------------------------------------\n$ tig refs\n-----------------------------------------------------------------------------\n\nUse word diff in the diff view:\n-----------------------------------------------------------------------------\n$ tig --word-diff=plain\n-----------------------------------------------------------------------------\n\nENVIRONMENT VARIABLES\n---------------------\n\nIn addition to environment variables used by Git (e.g. GIT_DIR), Tig defines\nthe ones below. The command related environment variables have access to the\ninternal state of Tig via replacement variables, such as `%(commit)` and\n`%(blob)`.\nifdef::version[]\nSee manpage:tigrc[5] for a full list.\nendif::version[]\nifndef::version[]\nSee link:tigrc.5.{docext}[tigrc(5)] for a full list.\nendif::version[]\n\nTIGRC_USER::\n\tPath of the user configuration file (defaults to `~/.tigrc` or\n\t`$XDG_CONFIG_HOME/tig/config`).\n\nTIGRC_SYSTEM::\n\tPath of the system wide configuration file (defaults to\n\t`{sysconfdir}/tigrc`). Define to empty string to use built-in\n\tconfiguration.\n\nTIG_LS_REMOTE::\n\tCommand for retrieving all repository references. The command\n\tshould output data in the same format as git-ls-remote(1).\n\nTIG_DIFF_OPTS::\n\tThe diff options to use in the diff view. The diff view uses\n\tgit-show(1) for formatting and always passes --patch-with-stat.  You\n\tmay also set the `diff-options` setting in the configuration file.\n\nTIG_TRACE::\n\tPath for trace file where information about Git commands are logged.\n\nTIG_SCRIPT::\n\tPath to script that should be executed automatically on startup. If this\n\tenvironment variable is defined to the empty string, the script is read\n\tfrom stdin. The script is interpreted line-by-line and can contain\n\tprompt commands and key mappings. Note that the '<' character must be\n\tencoded as '<LT>' within the script.\n\n\tE.g. TIG_SCRIPT=<(echo :set main-view-commit-title-graph = no) tig\n\nTIG_NO_DISPLAY::\n\tOpen Tig without rendering anything to the terminal. This force Ncurses\n\tto write to /dev/null. The main use is for automated testing of Tig.\n\nTIG_EDITOR::\n\tThe editor command to use when visiting files. This environment\n\tvariable overrides (in order of precedence) '$GIT_EDITOR',\n\t'core.editor' configuration, '$VISUAL' and '$EDITOR', so it\n\tallows to use a different editor from the one Git uses. The\n\tvalue is meant to be interpreted by the shell when it is used.\n\nFILES\n-----\n'$XDG_CONFIG_HOME/tig/config'::\n'~/.config/tig/config'::\n'~/.tigrc'::\n\tThe Tig user configuration file is loaded in the following way. If\n\t`$XDG_CONFIG_HOME` is set, read user configuration from\n\t`$XDG_CONFIG_HOME/tig/config`. If `$XDG_CONFIG_HOME` is empty or\n\tundefined, read user configuration from `~/.config/tig/config` if it\n\texists and fall back to `~/.tigrc` if it does not exist. See\n\tmanpage:tigrc[5] for examples.\n\n'{sysconfdir}/tigrc'::\n\tSystem wide configuration file.\n\n'$GIT_DIR/config'::\n'~/.gitconfig'::\n'{sysconfdir}/gitconfig'::\n\tGit configuration files. Read on start-up with the help of\n\tgit-config(1).\n\n'$XDG_DATA_HOME/tig/history'::\n'~/.local/share/tig/history'::\n'~/.tig_history'::\n\tWhen compiled with readline support, Tig writes a persistent command and\n\tsearch history. The location of the history file is determined in the\n\tfollowing way. If `$XDG_DATA_HOME` is set and `$XDG_DATA_HOME/` exists,\n\tcreate `$XDG_DATA_HOME/tig/` if needed and store history to\n\t`$XDG_DATA_HOME/tig/history`. If `$XDG_DATA_HOME` is empty or undefined,\n\tstore history to `~/.local/share/tig/history` if the directory\n\t`~/.local/share/tig/` exists, and fall back to `~/.tig_history` if it\n\tdoes not exist.\n\nBUGS\n----\n\nPlease visit Tig's https://github.com/jonas/tig[home page] for information\nabout new releases and how to report bugs or feature request.\n\nCOPYRIGHT\n---------\nCopyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n\nThis program is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2 of the License, or\n(at your option) any later version.\n\nSEE ALSO\n--------\nifndef::backend-docbook[]\nlink:tigrc.5.{docext}[tigrc(5)],\nlink:manual.{docext}[the Tig manual],\nendif::backend-docbook[]\nifdef::backend-docbook[]\nmanpage:tigrc[5],\nmanpage:tigmanual[7],\nendif::backend-docbook[]\ngit(7)\n"
  },
  {
    "path": "doc/tigmanual.7.adoc",
    "content": "tigmanual(7)\n============\n\nNAME\n----\ntigmanual - text-mode interface for Git\n\nSYNOPSIS\n--------\n[verse]\ntig        [options] [revisions] [--] [paths]\ntig show   [options] [revisions] [--] [paths]\ntig blame  [options] [rev] [--] path\ntig status\ntig <      [Git command output]\n\nDESCRIPTION\n-----------\n\ninclude::manual.adoc[]\n"
  },
  {
    "path": "doc/tigrc.5.adoc",
    "content": "tigrc(5)\n========\n:docext: adoc\n\nNAME\n----\ntigrc - Tig configuration file\n\n\nSYNOPSIS\n--------\n[verse]\n_______________________________________________________________________\n*set*   'variable' *=* 'value'\n*bind*  'keymap' 'key' 'action'\n*color* 'area' 'fgcolor' 'bgcolor' '[attributes]'\n*source* 'path'\n_______________________________________________________________________\n\n\nDESCRIPTION\n-----------\n\nYou can permanently set an option by putting it in the `~/.tigrc` file.  The\nfile consists of a series of 'commands'.  Each line of the file may contain\nonly one command.  Commands can span multiple lines if each line is\nterminated by a backslash ('\\') character. \n\nThe hash mark ('#') is used as a 'comment' character. All text after the\ncomment character to the end of the line is ignored. You can use comments to\nannotate your initialization file.\n\nCertain options can be manipulated at runtime via the option menu. In\naddition, options can also be toggled with the `:toggle` prompt command\nor by entering the configuration command into the prompt.\n\nIn some environments, a user's configuration will be stored in the alternate\nlocation `$XDG_CONFIG_HOME/tig/config`.  For brevity, this document will\nrefer only to `~/.tigrc`.\n\nGit configuration\n-----------------\n\nAlternatively to using `~/.tigrc`, Tig options can be set by putting them in\none of the Git configuration files, which are read by Tig on startup. See\n'git-config(1)' for which files to use. The following example show the basic\nsyntax to use for settings, bindings and colors.\n\n// TEST: gitconfig\n--------------------------------------------------------------------------\n[tig] show-changes = true\n[tig \"color\"] cursor = yellow red bold \n[tig \"bind\"] generic = P parent\n--------------------------------------------------------------------------\n\nIn addition to tig-specific options, the following Git options are read from\nthe Git configuration:\n\n'color.*'::\n\n\tColors for the various UI types. Can be configured via the 'git-colors'\n\tsetting.\n\n'core.abbrev'::\n\n\tThe width of the commit ID. See also 'id-width' option.\n\n'core.editor'::\n\n\tThe editor command. Can be overridden by setting TIG_EDITOR or\n\tGIT_EDITOR.\n\n'core.worktree'::\n\n\tThe path to the root of the working tree.\n\n'gui.encoding'::\n\n\tThe encoding to use for displaying of file content.\n\n'i18n.commitencoding'::\n\n\tThe encoding used for commits. The default is UTF-8.\n\nSet command\n-----------\n\nA few selective variables can be configured via the set command. The syntax\nis:\n\n[verse]\n*set* variables *=* value\n\nExamples:\n\n// TEST: tigrc\n--------------------------------------------------------------------------\nset commit-order = topo\t\t# Order commits topologically\nset git-colors = no\t\t# Do not read Git's color settings.\nset horizontal-scroll = 33%\t# Scroll 33% of the view width\nset blame-options = -C -C -C\t# Blame lines from other files\n\n# Wrap branch names with () and tags with <>\nset reference-format = (branch) <tag>\n\n# Configure blame view columns using command spanning multiple lines.\nset blame-view = \\\n\tdate:default \\\n\tauthor:abbreviated \\\n\tcommitter:abbreviated \\\n\tfile-name:auto \\\n\tid:yes,color \\\n\tline-number:yes,interval=5 text\n--------------------------------------------------------------------------\n\nOr in the Git configuration files:\n\n// TEST: gitconfig\n--------------------------------------------------------------------------\n[tig]\n\tline-graphics = no\t# Disable graphics characters\n\ttab-size = 8\t\t# Number of spaces per tab\n--------------------------------------------------------------------------\n\nThe type of variables is either bool, int, string, or mixed.\n\nValid bool values::\n\n\tTo set a bool variable to true use either \"1\", \"true\", or \"yes\".\n\tAny other value will set the variable to false.\n\nValid int values::\n\n\tA non-negative integer.\n\nValid string values::\n\n\tA string of characters. Optionally, use either ' or \" as delimiters.\n\nValid mixed values::\n\n\tThese values are composites of the above types. The valid values are\n\tspecified in the description.\n\nVariables\n~~~~~~~~~\n\nThe following variables can be set:\n\n'diff-options' (string)::\n\n\tA space-separated string of diff options to use in the diff view.\n\tgit-show(1) is used for formatting and always passes --patch-with-stat.\n\tCan control display of commit header metadata, passing option --format.\n\tThis option overrides any options specified in the TIG_DIFF_OPTS\n\tenvironment variable (described in manpage:tig[1]), but is itself\n\toverridden by diff flags given on the command line invocation.\n\n'blame-options' (string)::\n\n\tA space-separated string of default blame options. Can be used for\n\ttelling git-blame(1) how to detect the origin of lines. The options\n\tare ignored when Tig is started in blame mode and given blame options\n\ton the command line.\n\n'log-options' (string)::\n\n\tA space-separated string of default options that should be passed to the\n\tgit-log(1) command used by the log view. Options can be overridden by\n\tcommand line options. Used internally override custom `pretty.format'\n\tsettings that break the log view.\n\n'main-options' (string)::\n\n\tA space-separated string of default options that should be passed to the\n\tgit-log(1) command used by the main view. Options can be overridden by\n\tcommand line options.\n\n'reference-format' (string)::\n\n\tA space-separated string of format strings used for formatting reference\n\tnames. Wrap the name of the reference type with the characters you would\n\tlike to use for formatting, e.g. `[tag]` and `<remote>`. If no format is\n\tspecified for `local-tag`, the format for `tag` is used. Similarly, if no\n\tformat is specified for `tracked-remote`, the format for `remote` is used,\n\tand if no format is specified for any other reference type, the format for\n\t`branch` is used.\n\tPrefix with `hide:` to not show that reference type, e.g. `hide:remote`.\n\tSupported reference types are:\n\t - head\t\t\t: The current HEAD.\n\t - tag\t\t\t: An annotated tag.\n\t - local-tag\t\t: A lightweight tag.\n\t - remote\t\t: A remote.\n\t - tracked-remote\t: The remote tracked by current HEAD.\n\t - replace\t\t: A replaced reference.\n\t - branch\t\t: A branch.\n\t - stash\t\t: The stash.\n\t - note\t\t\t: Notes.\n\t - prefetch\t\t: Refs prefetched by `git maintenance`.\n\t - other\t\t: Any other reference.\n\n'line-graphics' (mixed) [ascii|default|utf-8|auto|<bool>]::\n\n\tWhat type of character graphics for line drawing. \"auto\" means \"utf-8\"\n\tif the locale is UTF-8, \"default\" otherwise.\n\n'truncation-delimiter' (mixed) [utf-8|<string>]::\n\n\tA single character to draw where columns are truncated. The default is\n\t\"~\".  The special value \"utf-8\" refers to the character \"⋯\"\n\t(\"Midline Horizontal Ellipsis\").\n\n'horizontal-scroll' (mixed)::\n\n\tInterval to scroll horizontally in each step. Can be specified either\n\tas the number of columns, e.g. '5', or as a percentage of the view\n\twidth, e.g. '33%', where the maximum is 100%. For percentages it is\n\talways ensured that at least one column is scrolled. The default is to\n\tscroll '50%' of the view width.\n\n'git-colors' (list)::\n\n\tA space-separated list of \"key=value\" pairs where the key is a Git color\n\tname and the value is a Tig color name, e.g. \"branch.current=main-head\"\n\tand \"grep.filename=grep.file\". Set to \"no\" to disable.\n\n'show-notes' (mixed) [<reference>|<bool>]::\n\n\tWhether to show notes for a commit. When set to a note reference the\n\treference is passed to `git show --notes=`. Notes are enabled by\n\tdefault.\n\n'show-changes' (bool)::\n\n\tWhether to show staged and unstaged changes in the main view.\n\n'show-untracked' (bool)::\n\n\tWhether to show also untracked changes in the main view.\n\n'vertical-split' (mixed) [auto|<bool>]::\n\n\tWhether to split the view horizontally or vertically.\n\t\"auto\" (which is the default) means that it will depend on the window\n\tdimensions. When true vertical orientation is used, and false sets the\n\torientation to horizontal.\n\n'split-view-height' (mixed)::\n\n\tThe height of the bottom view in a horizontally split display. Can be\n\tspecified either as the number of rows, e.g. '5', or as a percentage of\n\tthe view height, e.g. '80%', where the maximum is 100%. It is always\n\tensured that the smaller of the views is at least four rows high. The\n\tdefault is '67%'.\n\n'split-view-width' (mixed)::\n\n\tWidth of the right-most view in a vertically split display. Can be\n\tspecified either as the number of column, e.g. '5', or as a percentage\n\tof the view width, e.g. '80%', where the maximum is 100%. It is always\n\tensured that the smaller of the views is at least four columns wide. The\n\tdefault is '50%'.\n\n'status-show-untracked-dirs' (bool)::\n\n\tShow untracked directories contents in the status view (analog to\n\t`git ls-files --directory` option). On by default.\n\n'status-show-untracked-files' (bool)::\n\n\tShow untracked files in the status view (mirrors Git's\n\t`status.showUntrackedFiles` option). On by default.\n\n'tab-size' (int)::\n\n\tNumber of spaces per tab. The default is 8 spaces.\n\n'diff-context' (int)::\n\n\tNumber of context lines to show for diffs.\n\n'word-diff' (bool)::\n\n\tShow a word diff. Only plain mode is supported. Off by default.\n\n'diff-highlight' (mixed)::\n\n\tWhether to highlight diffs using Git's 'diff-highlight' program. Defaults\n\tto false. When set to true then 'diff-highlight' is used, else the option\n\tvalue is used as the path. When this option is in effect, highlighted\n\tregions are governed by `color diff-add-highlight` and\n\t`color diff-del-highlight`.\n\n'diff-indicator' (bool)::\n\n\tShow +/- signs in the diff view. On by default.\n\n'ignore-space' (mixed) [no|all|some|at-eol|<bool>]::\n\n\tIgnore space changes in diff view. By default no space changes are\n\tignored. Changing this to \"all\", \"some\" or \"at-eol\" is equivalent to\n\tpassing \"--ignore-all-space\", \"--ignore-space\" or\n\t\"--ignore-space-at-eol\" respectively to `git diff` or `git show`. +\n\t +\n\t*Warning:* when `ignore-space` is set to `some`, `all` or `at-eol`, then\n\tthe *status-update* and *status-revert* may fail when updating or\n\treverting chunks containing lines with space changes. Similarly,\n\t*stage-update-line* may fail when updating a line adjacent to a line\n\twith space changes.\n\n'commit-order' (enum) [auto|default|topo|date|author-date|reverse]::\n\n\tCommit ordering using the default (chronological reverse) order,\n\ttopological order, date order or reverse order. When set to \"auto\"\n\t(which is the default), topological order is automatically used in the\n\tmain view when the commit graph is enabled. In repositories with a long\n\tcommit history it is advised to set this option to \"default\" to speed up\n\tloading of the main view.\n\n'ignore-case' (enum) [no|yes|smart-case]::\n\n\tIgnore case in searches. \"smart-case\" ignores case if the search string\n\tdoesn't contain any uppercase letters. By default, the search is case\n\tsensitive.\n\n'mailmap' (bool)::\n\n\tRead canonical name and email addresses for authors and committers from\n\t`.mailmap`. Off by default. See `git-shortlog(1)`.\n\n'wrap-lines' (bool)::\n\n\tWrap long lines. By default, lines are not wrapped.\n\tNot compatible with line numbers enabled.\n\n'wrap-search' (bool)::\n\n\tWrap around to top/bottom of view when searching. On by default.\n\n'focus-child' (bool)::\n\n\tWhether to focus the child view when it is opened. When disabled the\n\tfocus will remain in the parent view, avoiding reloads of the child\n\tview when navigating the parent view. True by default.\n\n'send-child-enter' (bool)::\n\n\tWhether to send \"enter\" key presses to the child view, even if parent\n\tview is active. When disabled the child view has to be explicitly\n\tfocused to receive the \"enter\" key presses. In practice only relevant\n\twhen `set focus-child = no`. True by default.\n\n'editor-line-number' (bool)::\n\n\tWhether to pass the selected line number to the editor command. The\n\tline number is passed as `+<line-number>` in front of the file name.\n\tExample: `vim +10 tig.c`\n\n'history-size' (int)::\n\n\tSize of the persistent `~/.tig_history` file when compiled with readline\n\tsupport. Default is 500. Set to 0 to disable.\n\n'mouse' (bool)::\n\n\tWhether to enable mouse support. Off by default since it makes selecting\n\ttext from the terminal less intuitive. When enabled hold down Shift (or\n\tOption on Mac) to select text. Mouse support requires that ncurses\n\titself support mouse events.\n\n'mouse-scroll' (int)::\n\n\tInterval to scroll up or down using the mouse. The default is 3 lines.\n\tMouse support requires that ncurses itself support mouse events and that\n\tyou have enabled mouse support in ~/.tigrc with `set mouse = true`.\n\n'mouse-wheel-cursor' (bool)::\n\n\tWhether to prefer moving the cursor to scrolling the view when using the\n\tmouse wheel. Off by default. Combines well with `set mouse-scroll = 1`.\n\tMouse support requires that ncurses itself support mouse events and that\n\tyou have enabled mouse support in ~/.tigrc with `set mouse = true`.\n\n'pager-autoscroll' (bool)::\n\n\tWhether to scroll automatically the pager view while loading. Move the\n\tcursor out of the last line to stop scrolling and back in to resume.\n\n'pgrp' (bool)::\n\n\tMake tig process-group leader when starting and clean all processes\n\twhen exiting. Off by default. Do not enable this option if you are\n\tusing a Zsh version affected by zsh-workers/43379. Run `xclip` with\n\t`setsid` to keep clipboard content after exiting tig. If you are using\n\tgit-credential-cache helper, set option `credentialCache.ignoreSIGHUP`.\n\n'start-on-head' (bool)::\n\n\tStart with cursor on HEAD commit.\n\n'refresh-mode' (mixed) [manual|auto|after-command|periodic|<bool>]::\n\n\tConfigures how views are refreshed based on modifications to watched\n\tfiles in the repository. When set to 'manual', nothing is refreshed\n\tautomatically. When set to 'auto', views are refreshed when a\n\tmodification is detected in another view. When set to 'after-command'\n\tonly refresh after returning from an external command. When set to\n\t'periodic', visible views are refreshed periodically using\n\t'refresh-interval'.\n\n'refresh-interval' (int)::\n\n\tInterval in seconds between view refresh update checks when\n\t'refresh-mode' is set to 'periodic'.\n\n'file-args' (args)::\n\n\tCommand line arguments referring to files. These are filtered using\n\t`git-rev-parse(1)`.\n\n'rev-args' (args)::\n\n\tCommand line arguments referring to revisions. These are filtered using\n\t`git-rev-parse(1)`.\n\nView settings\n~~~~~~~~~~~~~\n\nThe view settings define the order and options for the different columns of a\nview. Each view setting expects a space-separated list of column specifications.\nColumn specifications starts with the column type, and can optionally be\nfollowed by a colon (`:`) and a list of column options. E.g. the following\ncolumn specification defines an 'author' column displaying the author email and\nwith a fixed width of 20 characters: `author:email,width=20`.\n\nThe first option value in a column specification is always the 'display' option.\nWhen no 'display' value is given, 'yes' is assumed. For 'display' options\nexpecting an enumerated value this will automatically resolve to the default\nenum value. For example, `file-name` will automatically have its 'display'\nsetting resolve to 'auto'.\n\nSpecifications can also be given for a single column, for example to override\nthe defaults in the system tigrc file. To override a single column, use the\ncolumn name as a suffix after the view setting name, e.g. `main-view-date` will\nallow to set the date in the main view.\n\nExamples:\n// TEST: tigrc\n--------------------------------------------------------------------------\n# Enable both ID and line numbers in the blame view\nset blame-view = date:default author:full committer:no file-name:auto \\\n\t\t id:yes,color line-number:yes,interval=5 text\n\n# Change grep view to be similar to `git grep` format\nset grep-view = file-name:yes line-number:yes,interval=1 text\n\n# Show file sizes as units\nset tree-view = line-number:no,interval=5 mode author:full committer:no \\\n\t\tfile-size:units date:default id:no file-name\n\n# Show line numbers for every 10th line in the pager view\nset pager-view = line-number:yes,interval=10 text\n\n# Shorthands to change view settings for a previously defined column\nset main-view-date = custom\nset main-view-date-format = \"%Y-%m-%d %H:%M\"\nset blame-view-line-number = no\n# Use Git's default commit order, even when the commit graph is enabled.\nset commit-order = default\n--------------------------------------------------------------------------\n\nThe following list shows which the available view settings and what column types\nthey support:\n\nblob-view, diff-view, log-view, pager-view, stage-view:: line-number, text\nblame-view:: author, committer, date, file-name, id, line-number, text\ngrep-view:: file-name, line-number, text\nmain-view, reflog-view:: author, committer, date, commit-title, id, line-number, ref\nrefs-view:: author, committer, date, commit-title, id, line-number, ref\nstash-view:: author, date, commit-title, id, line-number\nstatus-view:: file-name, line-number, status\ntree-view:: author, committer, date, id, file-name, file-size, line-number, mode\n\nSupported column types and their respective column options:\n\nauthor, committer::\n\n\t- 'display' (mixed) [full|abbreviated|email|email-user|<bool>]: How to\n\t  display author/committer names. If set to \"abbreviated\"\n\t  author/committer initials will be shown.\n\t- 'width' (int): Fixed width for the column. When set to a value between\n\t  1 and 10, the author/committer name will be abbreviated to the\n\t  author/committer's initials.\n\t  When set to zero, the width is automatically sized to fit the content.\n\t- 'maxwidth' (int): Maximum width of the column. Permit automatically\n\t  sizing content, up to this limit. Can be specified either as the number\n\t  of columns, e.g. '15', or as a percentage of the view width, e.g. '20%',\n\t  where the maximum is 100%.\n\ncommit-title::\n\t- 'graph' (mixed) [no|v2|v1]: Whether to show the revision graph in the\n\t  main view on start-up. \"v1\" refers to the old graph rendering, which\n\t  is less accurate but faster and thus recommended in large\n\t  repositories.  See also the 'line-graphics' options.\n\t- 'refs' (bool): Whether to show references (branches, tags, and\n\t  remotes) in the main view. Can be toggled.\n\t- 'overflow' (bool or int): Whether to highlight text in commit titles\n\t  exceeding a given width. When set to a boolean, it enables or disables\n\t  the highlighting using the default width of 50 character. When set to\n\t  an int, the assigned value is used as the maximum character width.\n\ndate::\n\t- 'display' (mixed) [relative|relative-compact|custom|default|<bool>]:\n\t  How to display dates. If set to \"relative\" or \"relative-compact\" a\n\t  relative date will be used, e.g. \"2 minutes ago\" or \"2m\". If set to\n\t  \"custom\", the strftime(3) string format specified in the \"format\"\n\t  option is used.\n\t- 'use-author' (bool): Whether to show author date instead of committer\n\t  date.\n\t- 'local' (bool): If true, use localtime(3) to convert to local\n\t  timezone. Note that relative dates always use local offsets.\n\t- 'format' (string): format string to pass to strftime(3) when 'custom'\n\t  display mode has been selected.\n\t- 'width' (int): Fixed width for the column. When set to zero, the width\n\t  is automatically sized to fit the content.\n\nfile-name::\n\t- 'display' (mixed) [auto|always|<bool>]: When to display file names.\n\t  If set to \"auto\" file names are shown only when needed, e.g. when\n\t  running: tig blame -C <file>.\n\t- 'width' (int): Width of the column. When set to zero, the width is\n\t  automatically sized to fit the content.\n\t- 'maxwidth' (int): Maximum width of the column. Permit automatically\n\t  sizing content, up to this limit. Can be specified either as the number\n\t  of columns, e.g. '15', or as a percentage of the view width, e.g. '20%',\n\t  where the maximum is 100%.\n\nfile-size::\n\t- 'display' (mixed) [default|units|<bool>]: How to display file sizes.\n\t  When set to \"units\", sizes are shown using binary prefixes, e.g. 12524\n\t  bytes is shown as \"12.2K\".\n\t- 'width' (int): Fixed width for the filename column. When set to zero,\n\t  the width is automatically sized to fit the content.\n\nid::\n\t- 'display' (bool): Whether to show commit IDs in the main view.\n\t- 'width' (int) : Fixed width for the commit ID column. When unset Tig\n\t  will use the value of 'core.abbrev' if found. See git-config(1) on how\n\t  to set 'core.abbrev'. When set to zero the width is automatically sized\n\t  to fit the content of reflog (e.g.  `ref/stash@{4}`) IDs and otherwise\n\t  default to 7.\n\nline-number::\n\t- 'display' (bool): Whether to show line numbers.\n\t- 'interval' (int): Interval between line numbers.\n\t- 'width' (int): Fixed width for the column. When set to zero, the width\n\t  is automatically sized to fit the content.\n\nmode::\n\t- 'display' (bool): Whether to show file modes.\n\t- 'width' (int): Fixed width for the column. When set to zero, the width\n\t  is automatically sized to fit the content.\n\nref::\n\t- 'display' (bool): Whether to show the reference name.\n\t- 'width' (int): Fixed width for the column. When set to zero, the width\n\t  is automatically sized to fit the content.\n\t- 'maxwidth' (int): Maximum width of the column. Permit automatically\n\t  sizing content, up to this limit. Can be specified either as the number\n\t  of columns, e.g. '15', or as a percentage of the view width, e.g. '20%',\n\t  where the maximum is 100%.\n\nstatus::\n\t- 'display' (mixed) [no|short|long|<bool>]: How to display the status\n\t  label.\n\ntext::\n\t- 'commit-title-overflow' (bool or int): Whether to highlight commit\n\t  titles exceeding a given width in the diff view. When set to a\n\t  boolean, it enables or disables the highlighting using the default\n\t  width of 50 character. When set to an int, the assigned value is used\n\t  as the maximum character width.\n\nAll column options can be toggled. For 'display' options, use the\noption name as the prefix followed by a dash and the column name. E.g.\n`:toggle author-display` will toggle the 'display' option in the 'author'\ncolumn. For all other options use the column name followed by a dash and\nthen the option name as the suffix. E.g. `:toggle commit-title-graph`\nwill toggle the 'graph' option in the 'commit-title' column. Alternatively,\nuse the option menu to manipulate options.\n\nBind command\n------------\n\nUsing bind commands, keys can be mapped to an action when pressed in a given\nkey map. The syntax is:\n\n[verse]\n*bind* 'keymap' 'key' 'action'\n\nExamples:\n// TEST: tigrc\n--------------------------------------------------------------------------\n# Add keybinding to quickly jump to the next diff chunk in the stage view\nbind stage <Enter> :/^@@\n\n# Disable the default mapping for running git-gc\nbind generic G none\n\n# User-defined external command to amend the last commit\nbind status + !git commit --amend\n\n# User-defined internal command that reloads ~/.tigrc\nbind generic S :source ~/.tigrc\n\n# UTF8-encoded characters can be used as key values.\nbind generic ø @sh -c \"printf '%s' %(commit) | pbcopy\"\n--------------------------------------------------------------------------\n\nOr in the Git configuration files:\n// TEST: gitconfig\n--------------------------------------------------------------------------\n[tig \"bind\"]\n\t# 'unbind' the default quit key binding\n\tgeneric = Q none\n\t# Cherry-pick current commit onto current branch\n\tmain = C !git cherry-pick %(commit)\n--------------------------------------------------------------------------\n\nKeys are mapped by first searching the keybindings for the current view, then\nthe keybindings for the *generic* keymap, and last the default keybindings.\nThus, the view keybindings override the generic keybindings which override the\nbuilt-in keybindings.\n\nClear keybinding (unbind) from all keymaps at once with bind *generic* 'key'\n*none*.\n\nKeybindings at the line-entry prompt are typically governed by the readline\nlibrary, and are configured separately in `~/.inputrc`.  See 'readline(1)'.\nTig respects but does not require an `$if tig` section in `~/.inputrc`.\n\n--\n\nKeymaps::\n\nValid keymaps are: *main*, *diff*, *log*, *reflog*, *help*, *pager*, *status*,\n*stage*, *tree*, *blob*, *blame*, *refs*, *stash*, *grep* and *generic*. Use\n*generic* to set key mapping in all keymaps (which may still be overridden by a\nspecific view keybinding). Use *search* to define keys for navigating search\nresults during search.\n\nKey values::\n\nKey values should never be quoted. Use either an ASCII or UTF8-encoded character\nor one of the following symbolic key names. Symbolic key names are case\ninsensitive and starts with \"<\" and ends with \">\". Use *<Hash>* to bind to the\n`#` key, since the hash mark is used as a comment character. Use *<LessThan>* to\nbind to the `<` key.\n\n*<Enter>*, *<Space>*, *<Backspace>*, *<Tab>*, *<Escape>* or *<Esc>*, *<Left>*,\n*<Right>*, *<Up>*, *<Down>*, *<Insert>* or *<Ins>*, *<Delete>* or *<Del>*,\n*<Hash>*, *<LessThan>* or *<LT>*, *<Home>*, *<End>*, *<PageUp>* or *<PgUp>*,\n*<PageDown>* or *<PgDown>*, *<ScrollBack>* or *<SBack>*, *<ScrollFwd>* or\n*<SFwd>*, *<ShiftTab>* or *<BackTab>*, *<ShiftLeft>*, *<ShiftRight>*,\n*<ShiftDelete>* or *<ShiftDel>*, *<ShiftHome>*, *<ShiftEnd>*, *<SingleQuote>*,\n*<DoubleQuote>*, *<F1>* ... *<F19>*\n\nTo define key mappings with the `Ctrl` key, use `<Ctrl-key>`. In addition, key\ncombos consisting of an initial `Escape` key followed by a normal key value can\nbe bound using `<Esc>key`.\n\nExamples:\n// TEST: tigrc\n--------------------------------------------------------------------------\nbind main R\t\trefresh\nbind main <Down>\tnext\nbind main <Ctrl-f>\tscroll-page-down\nbind main <Esc>o\toptions\nbind main <ShiftTab>\tparent\n--------------------------------------------------------------------------\n\nNotes\n\n- Tig reads keystrokes via ncurses and is subject to various limitations. See\n  'ncurses(3x)' and 'terminfo(5)' (or termcap).\n\n- `Ctrl-m` and `Ctrl-i` cannot be bound as they conflict with 'Enter' and 'Tab'\n  respectively.\n\n- Case differences cannot be distinguished in control sequences such as\n `Ctrl-f` and `Ctrl-F`.\n\n- `Ctrl-<Space>` is typically translated to `Ctrl-@`, which is available for\n  binding.\n\n- Only some subset of special symbolic keys such as `<ShiftTab>` will be\n  available in any given terminal emulator.\n\n- `Ctrl-z` is automatically used for process control and will suspend Tig and\n  open a subshell (use `fg` to reenter Tig).\n\nActions::\n\nActions are either specified as user-defined commands (external or internal) or\nusing action names as described in the following sections.\n\n--\n\nExternal user-defined command\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThese actions start with one or more of the following option flags followed by\nthe command that should be executed.\n\n[frame=\"none\",grid=\"none\",cols=\"25<m,75<\"]\n|=============================================================================\n|!\t\t\t|Run the command in the foreground with output shown.\n|@\t\t\t|Run the command in the background with no output.\n|+\t\t\t|Run the command synchronously, and echo the first line\n\t\t\t of output to the status bar.\n|?\t\t\t|Prompt the user before executing the command.\n|<\t\t\t|Exit Tig after executing the command.\n|>\t\t\t|Re-open Tig instantly in the last displayed view after\n\t\t\t executing the command.\n|=============================================================================\n\nUnless otherwise specified, commands are run in the foreground with their\nconsole output shown (as if '!' was specified). When multiple command options\nare specified their behavior are combined, e.g. \"?<git commit\" will prompt the\nuser whether to execute the command and will exit Tig after completion.\n\nNote that if you want to use pipes or redirection in your commands then you\nmust run them in a subshell, i.e. embed your commands in `sh -c '<commands>'`.\n\nBrowsing state variables\n^^^^^^^^^^^^^^^^^^^^^^^^\n\nUser-defined commands can optionally refer to Tig's internal state using the\nfollowing variable names, which are substituted before commands are run:\n\n[frame=\"none\",grid=\"none\",cols=\"25<m,75<\"]\n|=============================================================================\n|%(head)\t\t|The currently viewed 'head' ID. Defaults to HEAD\n|%(commit)\t\t|The currently selected commit ID.\n|%(blob)\t\t|The currently selected blob ID.\n|%(branch)\t\t|The currently selected branch name.\n|%(remote)\t\t|The currently selected remote name. For remote\n\t\t\t branches %(branch) will contain the branch name.\n|%(tag)\t\t\t|The currently selected tag name.\n|%(refname)\t\t|The currently selected reference name including the\n\t\t\t remote name for remote branches.\n|%(stash)\t\t|The currently selected stash name.\n|%(directory)\t\t|The current directory path in the tree view or\n\t\t\t \".\" if undefined.\n|%(file)\t\t|The currently selected file.\n|%(file_old)\t\t|The old filename of the currently selected file.\n|%(lineno)\t\t|The currently selected line number. Defaults to 0.\n|%(lineno_old)\t\t|The currently selected line number, before the diff\n\t\t\t was applied. Defaults to 0.\n|%(status)\t\t|The staging status of the currently selected line.\n|%(ref)\t\t\t|The reference given to blame or HEAD if undefined.\n|%(revargs)\t\t|The revision arguments passed on the command line.\n|%(fileargs)\t\t|The file arguments passed on the command line.\n|%(cmdlineargs)\t\t|All other options passed on the command line.\n|%(diffargs)\t\t|Options from 'diff-options' or 'TIG_DIFF_OPTS' used\n\t\t\t by the diff and stage view.\n|%(blameargs)\t\t|Options from 'blame-options' used by the blame view.\n|%(logargs)\t\t|Options from 'log-options' used by the log view.\n|%(mainargs)\t\t|Options from 'main-options' used by the main view.\n|%(prompt)\t\t|Prompt for the argument value. Optionally specify a\n\t\t\t custom prompt using `\"%(prompt Enter branch name: )\"`\n|%(text)\t\t|The text column of the currently selected line.\n|%(repo:head)\t\t|The name of the checked out branch, e.g. `master`\n|%(repo:head-id)\t|The commit ID of the checked out branch.\n|%(repo:remote)\t\t|The remote name associated with the checked out\n\t\t\t branch, e.g. `origin`.\n|%(repo:upstream)\t|The upstream branch associated with the checked out\n\t\t\t branch, e.g. `origin/master`.\n|%(repo:cdup)\t\t|The path to change directory to the repository root,\n\t\t\t e.g. `../`\n|%(repo:prefix)\t\t|The path prefix of the current work directory,\n\t\t\t e.g `subdir/`.\n|%(repo:git-dir)\t|The path to the Git directory, e.g. `/src/repo/.git`.\n|%(repo:worktree)\t|The worktree path, if defined.\n|%(repo:is-inside-work-tree)\n\t\t\t|Whether Tig is running inside a work tree,\n\t\t\t either `true` or `false`.\n|=============================================================================\n\nExamples:\n// TEST: tigrc\n--------------------------------------------------------------------------\n# Save the current commit as a patch file when the user selects a commit\n# in the main view and presses 'S'.\nbind main S !git format-patch -1 %(commit)\n\n# Create and checkout a new branch; specify custom prompt\nbind main B ?git checkout -b \"%(prompt Enter new branch name: )\"\n\n# Show commit statistics for the author under the cursor\nbind main U +sh -c 'git --no-pager shortlog -s --author=\"$(git show -s --format=%aE %(commit))\" </dev/tty'\n--------------------------------------------------------------------------\n\nAdvanced shell-like commands\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nIf your command requires use of dynamic features, such as subshells,\nexpansion of environment variables and process control, this can be achieved by\nusing a shell command:\n\n.Configure a binding to copy the current commit ID to the clipboard.\n// TEST: tigrc\n--------------------------------------------------------------------------\nbind generic I @sh -c \"echo -n %(commit) | xclip -selection c\"\n--------------------------------------------------------------------------\n\nOr by using a combination of Git aliases and Tig external commands. The\nfollowing example entries can be put in either the .gitconfig or .git/config\nfile:\n\n.Git configuration which binds Tig keys to Git command aliases.\n// TEST: gitconfig\n--------------------------------------------------------------------------\n[alias]\n\tgitk-bg = !\"gitk HEAD --not $(git rev-parse --remotes) &\"\n\tpublish = !\"for i in origin public; do git push $i; done\"\n[tig \"bind\"]\n\tgeneric = V @git gitk-bg\n\tgeneric = > !git publish\n--------------------------------------------------------------------------\n\nInternal user-defined commands\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nActions beginning with a ':' will be run and interpreted as internal commands\nand act similar to commands run via Tig's prompt. Valid internal commands are\nconfiguration file options (as described in this document) and pager view\ncommands. Examples:\n\n// TEST: tigrc\n--------------------------------------------------------------------------\n# Reload ~/.tigrc when 'S' is pressed\nbind generic S :source .tigrc\n\n# Change diff view to show all commit changes regardless of file limitations\nbind diff F :set diff-options = --full-diff\n\n# Show the output of git-reflog(1) in the pager view\nbind generic W :!git reflog\n\n# Search for previous diff (c)hunk and next diff header\nbind stage 2 :?^@@\nbind stage D :/^diff --(git|cc)\n\nbind main I :toggle id\t\t\t\t# Show/hide the ID column\nbind diff D :toggle diff-options --minimal\t# Use minimal diff algorithm\nbind diff [ :toggle diff-context -3\t\t# Decrease context (-U arg)\nbind diff ] :toggle diff-context +3\t\t# Increase context\nbind generic V :toggle split-view-height -10%\t# Decrease split height\n--------------------------------------------------------------------------\n\nSimilar to external commands, pager view commands can contain variable names\nthat will be substituted before the command is run.\n\nAction names\n~~~~~~~~~~~~\n\nValid action names are described below. Note, all action names are\ncase-insensitive, and you may use '-', '_', and '.' interchangeably, e.g.\n\"view-main\", \"View.Main\", and \"VIEW_MAIN\" are the same.\n\nifndef::DOC_GEN_ACTIONS[]\nView switching\n^^^^^^^^^^^^^^\n\n[frame=\"none\",grid=\"none\",cols=\"25<m,75<\"]\n|=============================================================================\n|view-main               |Show main view\n|view-diff               |Show diff view\n|view-log                |Show log view\n|view-reflog             |Show reflog view\n|view-tree               |Show tree view\n|view-blob               |Show blob view\n|view-blame              |Show blame view\n|view-refs               |Show refs view\n|view-status             |Show status view\n|view-stage              |Show stage view\n|view-stash              |Show stash view\n|view-grep               |Show grep view\n|view-pager              |Show pager view\n|view-help               |Show help view\n|=============================================================================\n\nView manipulation\n^^^^^^^^^^^^^^^^^\n\n[frame=\"none\",grid=\"none\",cols=\"25<m,75<\"]\n|=============================================================================\n|enter                   |Enter and open selected line\n|back                    |Go back to the previous view state\n|next                    |Move to next\n|previous                |Move to previous\n|parent                  |Move to parent\n|view-next               |Move focus to the next view\n|refresh                 |Reload and refresh view\n|maximize                |Maximize the current view\n|view-close              |Close the current view\n|view-close-no-quit      |Close the current view without quitting\n|quit                    |Close all views and quit\n|=============================================================================\n\nView-specific actions\n^^^^^^^^^^^^^^^^^^^^^\n\n[frame=\"none\",grid=\"none\",cols=\"25<m,75<\"]\n|=============================================================================\n|status-update           |Stage/unstage chunk or file changes\n|status-revert           |Revert chunk or file changes\n|status-merge            |Merge file using external tool\n|stage-update-line       |Stage/unstage single line\n|stage-update-part       |Stage/unstage part of a chunk\n|stage-split-chunk       |Split current diff chunk\n|=============================================================================\n\nCursor navigation\n^^^^^^^^^^^^^^^^^\n\n[frame=\"none\",grid=\"none\",cols=\"25<m,75<\"]\n|=============================================================================\n|move-up                 |Move cursor one line up\n|move-down               |Move cursor one line down\n|move-page-up            |Move cursor one page up\n|move-page-down          |Move cursor one page down\n|move-half-page-up       |Move cursor half a page up\n|move-half-page-down     |Move cursor half a page down\n|move-first-line         |Move cursor to first line\n|move-last-line          |Move cursor to last line\n|move-next-merge         |Move cursor to next merge commit\n|move-prev-merge         |Move cursor to previous merge commit\n|=============================================================================\n\nScrolling\n^^^^^^^^^\n\n[frame=\"none\",grid=\"none\",cols=\"25<m,75<\"]\n|=============================================================================\n|scroll-line-up          |Scroll one line up\n|scroll-line-down        |Scroll one line down\n|scroll-page-up          |Scroll one page up\n|scroll-page-down        |Scroll one page down\n|scroll-half-page-up     |Scroll half a page up\n|scroll-half-page-down   |Scroll half a page down\n|scroll-first-col        |Scroll to the first line columns\n|scroll-left             |Scroll two columns left\n|scroll-right            |Scroll two columns right\n|=============================================================================\n\nSearching\n^^^^^^^^^\n\n[frame=\"none\",grid=\"none\",cols=\"25<m,75<\"]\n|=============================================================================\n|search                  |Search the view\n|search-back             |Search backwards in the view\n|find-next               |Find next search match\n|find-prev               |Find previous search match\n|=============================================================================\n\nMisc\n^^^^\n\n[frame=\"none\",grid=\"none\",cols=\"25<m,75<\"]\n|=============================================================================\n|edit                    |Open in editor\n|prompt                  |Open the prompt\n|options                 |Open the options menu\n|screen-redraw           |Redraw the screen\n|stop-loading            |Stop all loading views\n|show-version            |Show version information\n|none                    |Do nothing\n|=============================================================================\nendif::DOC_GEN_ACTIONS[]\n\nColor command\n-------------\n\nColor commands control highlighting and the user interface styles. If your\nterminal supports color and the NO_COLOR environment variable is unset\nor empty, these commands can be used to assign foreground and background\ncombinations to certain areas. Optionally, an attribute can be given as\nthe last parameter. The syntax is:\n\n[verse]\n*color* 'area' 'fgcolor' 'bgcolor' '[attributes]'\n\nExamples:\n// TEST: tigrc\n--------------------------------------------------------------------------\n# Override the default terminal colors to white on black.\ncolor default\t\twhite\tblack\n# Diff colors\ncolor diff-header\tyellow\tdefault\ncolor diff-index\tblue\tdefault\ncolor diff-chunk\tmagenta\tdefault\ncolor \"Reported-by:\"\tgreen\tdefault\n# View-specific color\ncolor tree.date\t\tblack\tcyan\tbold\n# Custom color\ncolor \"/(note|warning|error):/\"\tyellow\tdefault\tbold\n--------------------------------------------------------------------------\n\nOr in the Git configuration files:\n// TEST: gitconfig\n--------------------------------------------------------------------------\n[tig \"color\"]\n\t# A strange looking cursor line\n\tcursor\t\t= red\tdefault underline\n\t# UI colors\n\ttitle-blur\t= white\tblue\n\ttitle-focus\t= white\tblue\tbold\n# View-specific color\n[tig \"color.tree\"]\n\tdate\t\t= cyan\tdefault\tbold\n--------------------------------------------------------------------------\n\nArea names::\n\n\tCan be either a built-in area name or a custom quoted string. The\n\tlatter allows custom color rules to be added for lines matching a\n\tquoted string. Strings of the form \"/.../\" are interpreted as\n\tregular expressions.\n\tValid built-in area names are described below. Note, all names are\n\tcase-insensitive, and you may use '-', and '_' interchangeably,\n\te.g. \"Diff-Header\" and \"DIFF_HEADER\" are the same.\n\tView-specific colors can be defined by prefixing the view name to\n\tthe area name, e.g. \"stage.diff-chunk\" and \"diff.diff-chunk\".\n\nColor names::\n\n\tValid colors include: *white*, *black*, *green*, *magenta*, *blue*,\n\t*cyan*, *yellow*, *red*, *default*. Use *default* to refer to the\n\tdefault terminal colors, for example, to keep the background\n\ttransparent when you are using a terminal with a transparent\n\tbackground.\n+\nColors can also be specified using the keywords *color0*, *color1*, ...,\n*colorN-1* (where *N* is the number of colors supported by your terminal).\nThis is useful when you remap the colors for your display or want to enable\ncolors supported by 88-color and 256-color terminals. Note that the 'color'\nprefix is optional. If you prefer, you can specify colors directly by their\nnumbers *0*, *1*, ..., *N-1* instead, just like in the configuration file of\nGit.\n\nAttribute names::\n\n\tValid attributes include: *normal*, *blink*, *bold*, *dim*, *reverse*,\n\t*standout*, and *underline*. Note, not all attributes may be supported\n\tby the terminal.\n\nUI colors\n~~~~~~~~~\n\nThe colors and attributes to be used for the text that is not highlighted or\nthat specify the use of the default terminal colors can be controlled by\nsetting the *default* color option.\n\n.General\n[frame=\"none\",grid=\"none\",cols=\"25<m,75<\"]\n|=============================================================================\n|default\t\t|Override default terminal colors (see above).\n|cursor\t\t\t|The cursor line for the current view.\n|cursor-blur\t\t|The cursor line of any backgrounded view.\n|status\t\t\t|The status window showing info messages.\n|title-focus\t\t|The title window for the current view.\n|title-blur\t\t|The title window of any backgrounded view.\n|search-result\t\t|Highlighted search result.\n|delimiter\t\t|Delimiter shown for truncated lines.\n|header\t\t\t|The view header lines. Use 'status.header' to color\n\t\t\t the staged, unstaged, and untracked sections in the\n\t\t\t status view. Use 'help.header' to color the keymap\n\t\t\t sections in the help view.\n|line-number\t\t|Line numbers.\n|id\t\t\t|The commit ID.\n|date\t\t\t|The committer date or author date.\n|author\t\t\t|The commit author.\n|committer\t\t|The committer.\n|mode\t\t\t|The file mode holding the permissions and type.\n|overflow\t\t|Title text overflow.\n|directory\t\t|The directory name.\n|file\t\t\t|The file name.\n|file-size\t\t|File size.\n|=============================================================================\n\n.Main view colors\n[frame=\"none\",grid=\"none\",cols=\"25<m,75<\"]\n|=============================================================================\n|graph-commit\t\t|The commit dot in the revision graph.\n|palette-[0-13]\t\t|14 different colors, used for distinguishing branches\n\t\t\t or commits. By default, the palette uses the ASCII\n\t\t\t colors, where the second half of them have the bold\n\t\t\t attribute enabled to give a brighter color.\n\t\t\t Example: palette-0 = red\n|main-commit\t\t|The commit comment.\n|main-annotated\t\t|The commit comment of an annotated commit.\n|main-head\t\t|Label of the current branch.\n|main-remote\t\t|Label of a remote.\n|main-tracked\t\t|Label of the remote tracked by the current branch.\n|main-tag\t\t|Label of a signed tag.\n|main-local-tag\t\t|Label of a local tag.\n|main-ref\t\t|Label of a branch.\n|main-replace\t\t|Label of replaced reference.\n|main-stash\t\t|Label of the stash.\n|main-note\t\t|Label of notes.\n|main-prefetch\t\t|Label of reference prefetched by `git maintenance`.\n|main-other\t\t|Label of any other reference.\n|=============================================================================\n\n.Status view\n[frame=\"none\",grid=\"none\",cols=\"25<m,75<\"]\n|=============================================================================\n|stat-none\t\t|Empty status label.\n|stat-staged\t\t|Status flag of staged files.\n|stat-unstaged\t\t|Status flag of unstaged files.\n|stat-untracked\t\t|Status flag of untracked files.\n|=============================================================================\n\n.Help view\n[frame=\"none\",grid=\"none\",cols=\"25<m,75<\"]\n|=============================================================================\n|help-group\t\t|Help group name.\n|help-action\t\t|Help action name.\n|=============================================================================\n\nHighlighting\n~~~~~~~~~~~~\n\n--\n\nDiff markup::\n\nOptions concerning diff start, chunks and lines added and deleted.\n\n*diff-header*, *diff-chunk*, *diff-stat*, *diff-add*, *diff-add2*,\n*diff-del*, *diff-del2*, *diff-add-highlight*, *diff-del-highlight*\n\nEnhanced Git diff markup::\n\nExtra diff information emitted by the Git diff machinery, such as mode\nchanges, rename detection, and similarity.\n\n*diff-oldmode*, *diff-newmode*, *diff-copy-from*, *diff-copy-to*,\n*diff-similarity*, *diff-index*\n\nPretty print commit headers::\n\nCommit diffs and the revision logs are usually formatted using pretty printed\nheaders , unless `--pretty=raw` was given. This includes lines, such as merge\ninfo, commit ID, and author and committer date.\n\n*pp-refs*, *pp-reflog*, *pp-reflogmsg*, *pp-merge*\n\nRaw commit header::\n\nUsually shown when `--pretty=raw` is given, however 'commit' is pretty much\nomnipresent.\n\n*commit*, *parent*, *tree*, *author*, *committer*\n\nCommit message::\n\nMost common trailer lines (e.g. `Signed-off-by`) are colorized.\nCharacters in the commit title exceeding a predefined width can be highlighted.\n\n\nTree markup::\n\nColors for information of the tree view.\n\n*tree-dir*, *tree-file*\n\n--\n\nSource command\n-------------\n\nSource commands make it possible to read additional configuration files.\nSourced files are included in-place, meaning when a 'source' command is\nencountered the file will be immediately read. Any commands later in the\ncurrent configuration file will take precedence.\n\nIf the given path does not exist, tig will proceed with a warning. Give\nthe `-q` parameter to suppress the warning.\n\nThe syntax is:\n\n[verse]\n*source* '[-q]' 'path'\n\nExamples:\n// TEST: tigrc\n--------------------------------------------------------------------------\nsource ~/.tig/colorscheme.tigrc\nsource ~/.tig/keybindings.tigrc\n--------------------------------------------------------------------------\n\nCOPYRIGHT\n---------\nCopyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n\nThis program is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2 of the License, or\n(at your option) any later version.\n\nSEE ALSO\n--------\nifndef::backend-docbook[]\nlink:tig.1.{docext}[tig(1)],\nlink:manual.{docext}[the Tig manual],\nendif::backend-docbook[]\nifdef::backend-docbook[]\nmanpage:tig[1],\nmanpage:tigmanual[7],\nendif::backend-docbook[]\ngit(7), git-config(1)\n// vim: tw=80\n"
  },
  {
    "path": "include/tig/apps.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_APPS_H\n#define TIG_APPS_H\n\n#include \"tig/tig.h\"\n#include \"tig/argv.h\"\n#include \"tig/util.h\"\n\n/*\n * general\n */\n\nstruct app_external {\n\tconst char *argv[SIZEOF_ARG];\n\tchar * const env[SIZEOF_ARG];\n};\n\n/*\n * diff-highlight\n */\n\nstruct app_external *app_diff_highlight_load(const char *query);\n\n#endif\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/argv.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_ARGV_H\n#define TIG_ARGV_H\n\n#include \"tig/tig.h\"\n\n/*\n * Argument array helpers.\n */\n\n#define SIZEOF_ARG\t32\t/* Default argument array size. */\n#define DIFF_ARGS \"%(diffargs)\"\n\nbool argv_to_string(const char *argv[], char *buf, size_t buflen, const char *sep);\nchar *argv_to_string_alloc(const char *argv[], const char *sep);\nbool argv_to_string_quoted(const char *argv[], char *buf, size_t buflen, const char *sep);\nbool argv_from_string_no_quotes(const char *argv[], int *argc, char *cmd);\nbool argv_from_string(const char *argv[], int *argc, char *cmd);\nvoid argv_free(const char *argv[]);\nsize_t argv_size(const char **argv);\nbool argv_append(const char ***argv, const char *arg);\nbool argv_appendn(const char ***argv, const char *arg, size_t arglen);\nbool argv_append_array(const char ***dst_argv, const char *src_argv[]);\nbool argv_copy(const char ***dst, const char *src[]);\nbool argv_contains(const char **argv, const char *arg);\nbool argv_containsn(const char **argv, const char *arg, size_t arglen);\n\ntypedef char argv_string[SIZEOF_STR];\ntypedef unsigned long argv_number;\n\n#define ARGV_ENV_INFO(_) \\\n\t_(argv_string,\t commit,\t\"\",\t\t\"HEAD\") \\\n\t_(argv_string,\t blob,\t\t\"\",\t\t\"\") \\\n\t_(argv_string,\t branch,\t\"\",\t\t\"\") \\\n\t_(argv_string,\t directory,\t\".\",\t\t\"\") \\\n\t_(argv_string,\t file,\t\t\"\",\t\t\"\") \\\n\t_(argv_string,\t file_old,\t\"\",\t\t\"\") \\\n\t_(argv_string,\t head,\t\t\"\",\t\t\"HEAD\") \\\n\t_(argv_number,\t lineno,\t\"\",\t\t0) \\\n\t_(argv_number,\t lineno_old,\t\"\",\t\t0) \\\n\t_(argv_string,\t ref,\t\t\"HEAD\",\t\t\"\") \\\n\t_(argv_string,\t remote,\t\"origin\",\t\"\") \\\n\t_(argv_string,\t stash,\t\t\"\",\t\t\"\") \\\n\t_(argv_string,\t status,\t\"\",\t\t\"\") \\\n\t_(argv_string,\t tag,\t\t\"\",\t\t\"\") \\\n\t_(argv_string,\t text,\t\t\"\",\t\t\"\") \\\n\t_(argv_string,\t refname,\t\"\",\t\t\"\") \\\n\n#define ARGV_ENV_FIELDS(type, name, ifempty, initval)\ttype name;\n\nstruct argv_env {\n\tARGV_ENV_INFO(ARGV_ENV_FIELDS)\n\tunsigned long goto_lineno;\n\tunsigned long blame_lineno;\n\tchar goto_id[SIZEOF_REV];\n\tchar search[SIZEOF_STR];\n\tchar none[1];\n};\n\nextern struct argv_env argv_env;\n\nenum argv_flag {\n\targv_flag_first = 1 << 0,\n\targv_flag_file_filter = 1 << 1,\n\targv_flag_rev_filter = 1 << 2,\n};\n\nbool argv_format(struct argv_env *argv_env, const char ***dst_argv, const char *src_argv[], int flags);\nchar *argv_format_arg(struct argv_env *argv_env, const char *src_arg);\n\nstruct rev_flags {\n\tsize_t search_offset;\n\tbool with_graph;\n\tbool with_reflog;\n};\n\nbool argv_parse_rev_flag(const char *arg, struct rev_flags *flags);\n\n#endif\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/blame.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_BLAME_H\n#define TIG_BLAME_H\n\n#include \"tig/view.h\"\n\nextern struct view blame_view;\n\nstatic inline void\nopen_blame_view(struct view *prev, enum open_flags flags)\n{\n\topen_view(prev, &blame_view, flags);\n}\n\n#endif\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/blob.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_BLOB_H\n#define TIG_BLOB_H\n\n#include \"tig/view.h\"\n\nextern struct view blob_view;\nvoid open_blob_view(struct view *prev, enum open_flags flags);\n\n#endif\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/diff.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_DIFF_H\n#define TIG_DIFF_H\n\n#include \"tig/view.h\"\n\nstruct diff_state {\n\tbool after_commit_title;\n\tbool after_diff;\n\tbool reading_diff_chunk;\n\tbool reading_diff_stat;\n\tbool combined_diff;\n\tbool adding_describe_ref;\n\tbool highlight;\n\tbool stage;\n\tunsigned int parents;\n\tconst char *file;\n\tunsigned int lineno;\n\tstruct position pos;\n\tstruct io view_io;\n};\n\nenum request diff_common_edit(struct view *view, enum request request, struct line *line);\nbool diff_common_read(struct view *view, const char *data, struct diff_state *state);\nenum request diff_common_enter(struct view *view, enum request request, struct line *line);\nstruct line *diff_common_add_diff_stat(struct view *view, const char *text, size_t offset);\nvoid diff_common_select(struct view *view, struct line *line, const char *changes_msg);\nvoid diff_save_line(struct view *view, struct diff_state *state, enum open_flags flags);\nvoid diff_restore_line(struct view *view, struct diff_state *state);\nenum status_code diff_init_highlight(struct view *view, struct diff_state *state);\nbool diff_done_highlight(struct diff_state *state);\n\nunsigned int diff_get_lineno(struct view *view, struct line *line, bool old);\nconst char *diff_get_pathname(struct view *view, struct line *line, bool old);\n\nextern struct view diff_view;\n\nstatic inline void\nopen_diff_view(struct view *prev, enum open_flags flags)\n{\n\topen_view(prev, &diff_view, flags);\n}\n\n#endif\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/display.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_DISPLAY_H\n#define TIG_DISPLAY_H\n\n#include \"tig/tig.h\"\n#include \"tig/keys.h\"\n\nint get_input(int prompt_position, struct key *key);\nint get_input_char(void);\n\nextern WINDOW *status_win;\n\nvoid update_status(const char *msg, ...) PRINTF_LIKE(1, 2);\nvoid update_status_with_context(const char *context, const char *msg, ...) PRINTF_LIKE(2, 3);\nvoid report(const char *msg, ...) PRINTF_LIKE(1, 2);\nvoid report_clear(void);\n\n/*\n * Display management.\n */\n\n/* The display array of active views and the index of the current view. */\nextern struct view *display[2];\nextern unsigned int current_view;\n\n#define foreach_displayed_view(view, i) \\\n\tfor (i = 0; i < ARRAY_SIZE(display) && (view = display[i]); i++)\n\n#define displayed_views()\t(!!display[0] + !!display[1])\n\n#define view_is_displayed(view) \\\n\t(view == display[0] || view == display[1])\n\nvoid init_tty(void);\nvoid init_display(void);\nvoid resize_display(void);\nvoid redraw_display(bool clear);\nbool save_display(const char *path);\nbool save_view(struct view *view, const char *path);\n\nbool vertical_split_is_enabled(enum vertical_split vsplit, int height, int width);\nint apply_vertical_split(int base_width);\n\nbool open_external_viewer(const char *argv[], const char *dir, bool silent, bool confirm, bool echo, bool quick, bool refresh, const char *notice);\nvoid open_editor(const char *file, unsigned int lineno);\nvoid enable_mouse(bool enable);\n\nenum status_code open_script(const char *path);\nbool is_script_executing(void);\n\n#define get_cursor_pos(cursor_y, cursor_x) getyx(newscr, cursor_y, cursor_x)\n#define set_cursor_pos(cursor_y, cursor_x) wmove(newscr, cursor_y, cursor_x)\n\n#endif\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/draw.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_DRAW_H\n#define TIG_DRAW_H\n\n#include \"tig/tig.h\"\n#include \"tig/line.h\"\n#include \"tig/view.h\"\n#include \"tig/refdb.h\"\n#include \"tig/util.h\"\n\nenum align {\n\tALIGN_LEFT,\n\tALIGN_RIGHT\n};\n\nbool draw_text(struct view *view, enum line_type type, const char *string);\nbool PRINTF_LIKE(3, 4) draw_formatted(struct view *view, enum line_type type, const char *format, ...);\nbool draw_graphic(struct view *view, enum line_type type, const chtype graphic[], size_t size, bool separator);\nbool draw_field(struct view *view, enum line_type type, const char *text, int width, enum align align, bool trim);\nbool draw_lineno(struct view *view, struct view_column *column, unsigned int lineno, bool add_offset);\nbool view_column_draw(struct view *view, struct line *line, unsigned int lineno);\n\nvoid redraw_view(struct view *view);\nvoid redraw_view_from(struct view *view, int lineno);\nvoid redraw_view_dirty(struct view *view);\nbool draw_view_line(struct view *view, unsigned int lineno);\n\n#endif\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/git.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_GIT_H\n#define TIG_GIT_H\n\n/*\n * Argv-style git command macros.\n */\n\n#define GIT_DIFF_INITIAL(encoding_arg, cached_arg, context_arg, space_arg, old_name, new_name) \\\n\t\"git\", \"diff\", (encoding_arg), \"--no-color\", \"--patch-with-stat\", \\\n\t\t(cached_arg), (context_arg), (space_arg), \"--\", (old_name), (new_name), NULL\n\n#define GIT_DIFF_STAGED_INITIAL(encoding_arg, context_arg, space_arg, new_name) \\\n\tGIT_DIFF_INITIAL(encoding_arg, \"--cached\", context_arg, space_arg, \"\", new_name)\n\n#define GIT_DIFF_STAGED(encoding_arg, context_arg, prefix_arg, space_arg, word_diff_arg, old_name, new_name) \\\n\t\"git\", \"diff-index\", (encoding_arg), \"--textconv\", \"--patch-with-stat\", \"-C\", \\\n\t\t\"--cached\", \"--diff-filter=ACDMRTXB\", DIFF_ARGS, \"%(cmdlineargs)\", (context_arg), \\\n\t\t(prefix_arg), (space_arg), (word_diff_arg), \"HEAD\", \"--\", (old_name), (new_name), NULL\n\n#define GIT_DIFF_UNSTAGED(encoding_arg, context_arg, prefix_arg, space_arg, word_diff_arg, old_name, new_name) \\\n\t\"git\", \"diff-files\", (encoding_arg), \"--textconv\", \"--patch-with-stat\", \"-C\", \\\n\t\tDIFF_ARGS, \"%(cmdlineargs)\", (context_arg), (prefix_arg), (space_arg), (word_diff_arg), \\\n\t\t\"--\", (old_name), (new_name), NULL\n\n/* Don't show staged unmerged entries. */\n#define GIT_DIFF_STAGED_FILES(output_arg) \\\n\t\"git\", \"diff-index\", (output_arg), \"%(cmdlineargs)\", \"--diff-filter=ACDMRTXB\", \\\n\t\t\"-C\", \"--cached\", \"HEAD\", \"--\", NULL\n\n#define GIT_DIFF_UNSTAGED_FILES(output_arg) \\\n\t\"git\", \"diff-files\", (output_arg), \"%(cmdlineargs)\", NULL\n\n#define GIT_DIFF_BLAME(encoding_arg, context_arg, prefix_arg, space_arg, word_diff_arg, new_name) \\\n\t\"git\", \"diff-files\", (encoding_arg), \"--textconv\", \"--patch-with-stat\", \"-C\", \\\n\t\t(context_arg), (prefix_arg), (space_arg), (word_diff_arg), \"--\", (new_name), NULL\n\n#define GIT_DIFF_BLAME_NO_PARENT(encoding_arg, context_arg, space_arg, new_name) \\\n\tGIT_DIFF_INITIAL(encoding_arg, \"\", context_arg, space_arg, \"/dev/null\", new_name)\n\n#define GIT_MAIN_LOG(encoding_arg, commit_order_arg, mainargs, diffargs, revargs, fileargs, show_notes_arg, pretty_arg) \\\n\t\"git\", \"log\", (encoding_arg), \\\n\t\t(commit_order_arg), (mainargs), (diffargs), (revargs), \"--date=raw\", \"--parents\", \\\n\t\t\"--no-color\", (show_notes_arg), (pretty_arg), \"--\", (fileargs), NULL\n\n#define GIT_MAIN_LOG_RAW(encoding_arg, commit_order_arg, mainargs, diffargs, revargs, fileargs, show_notes_arg) \\\n\tGIT_MAIN_LOG(encoding_arg, commit_order_arg, mainargs, diffargs, revargs, fileargs, show_notes_arg, \\\n\t\t     \"--pretty=raw\")\n\n#endif\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/graph.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_GRAPH_H\n#define TIG_GRAPH_H\n\n#include \"tig/types.h\"\n\n#define GRAPH_COMMIT_COLOR\t(-1)\n#define GRAPH_COLORS\t\t14\n\nstruct graph;\nstruct graph_symbol;\n\nstruct graph_canvas {\n\tsize_t size;\t\t\t/* The width of the graph array. */\n\tstruct graph_symbol *symbols;\t/* Symbols for this row. */\n};\n\ntypedef bool (*graph_symbol_iterator_fn)(void *, const struct graph *graph, const struct graph_symbol *, int color_id, bool);\n\nstruct graph {\n\tvoid *private;\n\n\tvoid (*done)(struct graph *graph);\n\tvoid (*done_rendering)(struct graph *graph);\n\n\tbool (*add_commit)(struct graph *graph, struct graph_canvas *canvas,\n\t\t\t   const char *id, const char *parents, bool is_boundary);\n\tbool (*add_parent)(struct graph *graph, const char *parent);\n\tbool (*render_parents)(struct graph *graph, struct graph_canvas *canvas);\n\tbool (*is_merge)(struct graph_canvas *canvas);\n\n\tvoid (*foreach_symbol)(const struct graph *graph, const struct graph_canvas *canvas, graph_symbol_iterator_fn fn, void *data);\n\n\tconst char *(*symbol_to_ascii)(const struct graph_symbol *symbol);\n\tconst char *(*symbol_to_utf8)(const struct graph_symbol *symbol);\n\tconst chtype *(*symbol_to_chtype)(const struct graph_symbol *symbol);\n};\n\nstruct graph *init_graph(enum graph_display display);\n\n#endif\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/grep.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_GREP_H\n#define TIG_GREP_H\n\n#include \"tig/view.h\"\n\nvoid open_grep_view(struct view *prev);\nextern struct view grep_view;\n\n#endif\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/help.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_HELP_H\n#define TIG_HELP_H\n\n#include \"tig/view.h\"\n\nextern struct view help_view;\n\nstatic inline void\nopen_help_view(struct view *prev, enum open_flags flags)\n{\n\tif (update_keymap_visibility(prev->name, strlen(prev->name)))\n\t\tflags |= OPEN_RELOAD;\n\topen_view(prev, &help_view, flags);\n}\n\n#endif\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/io.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_IO_H\n#define TIG_IO_H\n\n#include \"tig/tig.h\"\n\nstruct buffer {\n\tchar *data;\n\tsize_t size;\n};\n\n/*\n * Encoding conversion.\n */\n\n#define ENCODING_UTF8\t\"UTF-8\"\n\nstruct encoding;\n\nstruct encoding *encoding_open(const char *fromcode);\nbool encoding_convert(struct encoding *encoding, struct buffer *buf);\nconst char *encoding_iconv(iconv_t iconv_out, const char *string, size_t length);\nstruct encoding *get_path_encoding(const char *path, struct encoding *default_encoding);\n\nextern char encoding_arg[];\nextern struct encoding *default_encoding;\n\n/*\n * Path manipulation.\n */\n\n#ifndef _PATH_DEFPATH\n#define _PATH_DEFPATH\t\"/usr/bin:/bin\"\n#endif\n\nbool path_expand(char *dst, size_t dstlen, const char *src);\nbool path_search(char *dst, size_t dstlen, const char *query, const char *colon_path, int access_flags);\n\n/*\n * Executing external commands.\n */\n\nenum io_flags {\n\tIO_RD_FORWARD_STDIN = 1 << 0,\t/* Forward stdin from parent process to child. */\n\tIO_RD_WITH_STDERR   = 1 << 1,\t/* Redirect stderr to stdin. */\n};\n\nenum io_type {\n\tIO_BG,\t\t\t/* Execute command in the background. */\n\tIO_FG,\t\t\t/* Execute command with same std{in,out,err}. */\n\tIO_RD,\t\t\t/* Read only fork+exec IO. */\n\tIO_RP,\t\t\t/* Read only fork+exec IO with input pipe. */\n\tIO_WR,\t\t\t/* Write only fork+exec IO. */\n\tIO_AP,\t\t\t/* Append fork+exec output to file. */\n};\n\nstruct io {\n\tint pipe;\t\t/* Pipe end for reading or writing. */\n\tpid_t pid;\t\t/* PID of spawned process. */\n\tint error;\t\t/* Error status. */\n\tchar *buf;\t\t/* Read buffer. */\n\tsize_t bufalloc;\t/* Allocated buffer size. */\n\tsize_t bufsize;\t\t/* Buffer content size. */\n\tchar *bufpos;\t\t/* Current buffer position. */\n\tunsigned int eof:1;\t/* Has end of file been reached. */\n\tint status:8;\t\t/* Status exit code. */\n};\n\ntypedef enum status_code (*io_read_fn)(char *, size_t, char *, size_t, void *data);\n\nbool io_open(struct io *io, const char *fmt, ...) PRINTF_LIKE(2, 3);\nbool io_from_string(struct io *io, const char *str);\nbool io_kill(struct io *io);\nbool io_done(struct io *io);\nbool io_exec(struct io *io, enum io_type type, const char *dir, char * const env[], const char *argv[], int custom);\nbool io_run(struct io *io, enum io_type type, const char *dir, char * const env[], const char *argv[]);\nbool io_run_bg(const char **argv, const char *dir);\nbool io_run_fg(const char **argv, const char *dir, int fd);\nbool io_run_append(const char **argv, int fd);\nbool io_eof(struct io *io);\nint io_error(struct io *io);\nchar * io_strerror(struct io *io);\nbool io_can_read(struct io *io, bool can_block);\nssize_t io_read(struct io *io, void *buf, size_t bufsize);\nbool io_get(struct io *io, struct buffer *buf, int c, bool can_read);\nbool io_write(struct io *io, const void *buf, size_t bufsize);\nbool io_printf(struct io *io, const char *fmt, ...) PRINTF_LIKE(2, 3);\nbool io_read_buf(struct io *io, char buf[], size_t bufsize, bool allow_empty);\nbool io_run_buf(const char **argv, char buf[], size_t bufsize, const char *dir, bool allow_empty);\nenum status_code io_load(struct io *io, const char *separators,\n\t    io_read_fn read_property, void *data);\nenum status_code io_load_span(struct io *io, const char *separators,\n\t     size_t *lineno, io_read_fn read_property, void *data);\nenum status_code io_run_load(struct io *io, const char **argv, const char *separators,\n\t\tio_read_fn read_property, void *data);\nchar *io_memchr(struct buffer *buf, char *data, int c);\n\nconst char *get_temp_dir(void);\n\nbool PRINTF_LIKE(2, 3) io_fprintf(FILE *file, const char *fmt, ...);\nbool io_trace(const char *fmt, ...);\n\n#endif\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/keys.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_KEYS_H\n#define TIG_KEYS_H\n\n#include \"tig/tig.h\"\n#include \"tig/request.h\"\n#include \"tig/util.h\"\n\n/*\n * Keys\n */\n\nstruct keybinding;\n\nstruct keymap {\n\tconst char *name;\n\tstruct keybinding **data;\n\tsize_t size;\n\tbool hidden;\n};\n\nstruct key {\n\tunion {\n\t\tint value;\n\t\tchar bytes[7];\n\t} data;\n\tstruct {\n\t\tbool control:1;\n\t\tbool multibytes:1;\n\t} modifiers;\n};\n\nstatic inline int\nkey_to_value(const struct key *key)\n{\n\treturn key->modifiers.multibytes ? 0 : key->data.value;\n}\n\nstatic inline unsigned long\nkey_to_unicode(const struct key *key)\n{\n\treturn key->modifiers.multibytes\n\t\t? utf8_to_unicode(key->data.bytes, strlen(key->data.bytes))\n\t\t: 0;\n}\n\nstatic inline char\nkey_to_control(const struct key *key)\n{\n\treturn (key->modifiers.control && key->modifiers.multibytes && strlen(key->data.bytes) == 1)\n\t\t? key->data.bytes[0]\n\t\t: 0;\n}\n\nstruct keymap *get_keymap(const char *name, size_t namelen);\nbool update_keymap_visibility(const char *name, size_t namelen);\n\nconst char *get_key_name(const struct key key[], size_t keys, bool quote_comma);\nenum status_code get_key_value(const char **name, struct key *key);\n\n/* Looks for a key binding first in the given map, then in the generic map, and\n * lastly in the default keybindings. */\nenum request get_keybinding(const struct keymap *keymap, const struct key key[], size_t keys, int *matches);\nenum status_code add_keybinding(struct keymap *table, enum request request, const struct key key[], size_t keys);\n\nconst char *get_keys(const struct keymap *keymap, enum request request, bool all);\n#define get_view_key(view, request) get_keys((view)->keymap, request, false)\n\nstruct run_request_flags {\n\tbool silent;\n\tbool confirm;\n\tbool exit;\n\tbool internal;\n\tbool echo;\n\tbool quick;\n};\n\nstruct run_request {\n\tstruct keymap *keymap;\n\tstruct run_request_flags flags;\n\tconst char **argv;\n};\n\nstruct run_request *get_run_request(enum request request);\nenum status_code add_run_request(struct keymap *keymap, const struct key key[], size_t keys, const char **argv);\nenum status_code parse_run_request_flags(struct run_request_flags *flags, const char **argv);\nconst char *format_run_request_flags(const struct run_request *req);\n\ntypedef bool (*key_visitor_fn)(void *data, const char *group, struct keymap *keymap,\n\t\t\t       enum request request, const char *key,\n\t\t\t       const struct request_info *req_info, const struct run_request *run_req);\nbool foreach_key(key_visitor_fn fn, void *data, bool combine_keys);\n\n#endif\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/line.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_LINE_H\n#define TIG_LINE_H\n\n#include \"tig/tig.h\"\nstruct ref;\n\n/*\n * Line-oriented content detection.\n */\n\n#define LINE_INFO(_) \\\n\t_(DIFF_HEADER,\t\t\"diff --\"), \\\n\t_(DIFF_DEL_FILE,\t\"--- \"), \\\n\t_(DIFF_ADD_FILE,\t\"+++ \"), \\\n\t_(DIFF_START,\t\t\"---\"), \\\n\t_(DIFF_CHUNK,\t\t\"@@\"), \\\n\t_(DIFF_ADD,\t\t\"+\"), \\\n\t_(DIFF_ADD2,\t\t\" +\"), \\\n\t_(DIFF_DEL,\t\t\"-\"), \\\n\t_(DIFF_DEL2,\t\t\" -\"), \\\n\t_(DIFF_INDEX,\t\t\"index \"), \\\n\t_(DIFF_OLDMODE,\t\t\"old mode \"), \\\n\t_(DIFF_NEWMODE,\t\t\"new mode \"), \\\n\t_(DIFF_NEWFMODE,\t\"new file mode \"), \\\n\t_(DIFF_DELFMODE,\t\"deleted file mode \"), \\\n\t_(DIFF_SIMILARITY,\t\"similarity \"), \\\n\t_(DIFF_NO_NEWLINE,\t\"\\\\ No newline at end of file\"), \\\n\t_(DIFF_ADD_HIGHLIGHT,\t\"\"), \\\n\t_(DIFF_DEL_HIGHLIGHT,\t\"\"), \\\n\t_(PP_MERGE,\t\t\"Merge: \"), \\\n\t_(PP_REFS,\t\t\"Refs: \"), \\\n\t_(PP_REFLOG,\t\t\"Reflog: \"), \\\n\t_(PP_REFLOGMSG,\t\t\"Reflog message: \"), \\\n\t_(COMMIT,\t\t\"commit \"), \\\n\t_(PARENT,\t\t\"parent \"), \\\n\t_(TREE,\t\t\t\"tree \"), \\\n\t_(AUTHOR,\t\t\"author \"), \\\n\t_(COMMITTER,\t\t\"committer \"), \\\n\t_(DEFAULT,\t\t\"\"), \\\n\t_(CURSOR,\t\t\"\"), \\\n\t_(CURSOR_BLUR,\t\t\"\"), \\\n\t_(STATUS,\t\t\"\"), \\\n\t_(DELIMITER,\t\t\"\"), \\\n\t_(DATE,\t\t\t\"\"), \\\n\t_(MODE,\t\t\t\"\"), \\\n\t_(ID,\t\t\t\"\"), \\\n\t_(OVERFLOW,\t\t\"\"), \\\n\t_(DIRECTORY,\t\t\"\"), \\\n\t_(FILE,\t\t\t\"\"), \\\n\t_(FILE_SIZE,\t\t\"\"), \\\n\t_(LINE_NUMBER,\t\t\"\"), \\\n\t_(TITLE_BLUR,\t\t\"\"), \\\n\t_(TITLE_FOCUS,\t\t\"\"), \\\n\t_(HEADER,\t\t\"\"), \\\n\t_(SECTION,\t\t\"\"), \\\n\t_(MAIN_COMMIT,\t\t\"\"), \\\n\t_(MAIN_ANNOTATED,\t\"\"), \\\n\t_(MAIN_TAG,\t\t\"\"), \\\n\t_(MAIN_LOCAL_TAG,\t\"\"), \\\n\t_(MAIN_REMOTE,\t\t\"\"), \\\n\t_(MAIN_STASH,\t\t\"\"), \\\n\t_(MAIN_NOTE,\t\t\"\"), \\\n\t_(MAIN_PREFETCH,\t\"\"), \\\n\t_(MAIN_OTHER,\t\t\"\"), \\\n\t_(MAIN_REPLACE,\t\t\"\"), \\\n\t_(MAIN_TRACKED,\t\t\"\"), \\\n\t_(MAIN_REF,\t\t\"\"), \\\n\t_(MAIN_HEAD,\t\t\"\"), \\\n\t_(STAT_NONE,\t\t\"\"), \\\n\t_(STAT_STAGED,\t\t\"\"), \\\n\t_(STAT_UNSTAGED,\t\"\"), \\\n\t_(STAT_UNTRACKED,\t\"\"), \\\n\t_(HELP_GROUP,\t\t\"\"), \\\n\t_(HELP_ACTION,\t\t\"\"), \\\n\t_(HELP_TOGGLE,\t\t\"\"), \\\n\t_(DIFF_STAT,\t\t\"\"), \\\n\t_(PALETTE_0,\t\t\"\"), \\\n\t_(PALETTE_1,\t\t\"\"), \\\n\t_(PALETTE_2,\t\t\"\"), \\\n\t_(PALETTE_3,\t\t\"\"), \\\n\t_(PALETTE_4,\t\t\"\"), \\\n\t_(PALETTE_5,\t\t\"\"), \\\n\t_(PALETTE_6,\t\t\"\"), \\\n\t_(PALETTE_7,\t\t\"\"), \\\n\t_(PALETTE_8,\t\t\"\"), \\\n\t_(PALETTE_9,\t\t\"\"), \\\n\t_(PALETTE_10,\t\t\"\"), \\\n\t_(PALETTE_11,\t\t\"\"), \\\n\t_(PALETTE_12,\t\t\"\"), \\\n\t_(PALETTE_13,\t\t\"\"), \\\n\t_(GRAPH_COMMIT,\t\t\"\"), \\\n\t_(SEARCH_RESULT,\t\"\")\n\nenum line_type {\n#define DEFINE_LINE_ENUM(type, line) LINE_##type\n\tLINE_INFO(DEFINE_LINE_ENUM),\n\tLINE_NONE\n};\n\nstruct line_info {\n\tstruct line_info *next;\t/* List of line info matching this line type. */\n\tconst char *prefix;\t/* View (or keymap) name. */\n\tint fg, bg, attr;\t/* Color and text attributes for the lines. */\n\tint color_pair;\n};\n\nstruct line_rule {\n\tconst char *name;\t/* Option name. */\n\tint namelen;\t\t/* Size of option name. */\n\tconst char *line;\t/* The start of line to match. */\n\tint linelen;\t\t/* Size of string to match. */\n\tregex_t *regex;\t\t/* Pre-compiled regexp. */\n\tstruct line_info info;\t/* List of line info matching this rule. */\n};\n\nenum line_type get_line_type(const char *line);\nenum line_type get_line_type_from_ref(const struct ref *ref);\n\nconst char *get_line_type_name(enum line_type type);\n\nstruct line_info *get_line_info(const char *prefix, enum line_type type);\nstruct line_info *add_line_rule(const char *prefix, struct line_rule *rule);\nvoid init_colors(void);\n\ntypedef bool (*line_rule_visitor_fn)(void *data, const struct line_rule *rule);\nbool foreach_line_rule(line_rule_visitor_fn fn, void *data);\n\n/* Color IDs must be 1 or higher. [GH #15] */\n#define COLOR_ID(line_type)\t\t((line_type) + 1)\n\nstatic inline int\nget_line_color(const char *prefix, enum line_type type)\n{\n\treturn COLOR_ID(get_line_info(prefix, type)->color_pair);\n}\n\nstatic inline int\nget_line_attr(const char *prefix, enum line_type type)\n{\n\tstruct line_info *info = get_line_info(prefix, type);\n\treturn COLOR_PAIR(COLOR_ID(info->color_pair)) | info->attr;\n}\n\n#endif\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/log.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_LOG_H\n#define TIG_LOG_H\n\n#include \"tig/view.h\"\n\nextern struct view log_view;\n\nstatic inline void\nopen_log_view(struct view *prev, enum open_flags flags)\n{\n\topen_view(prev, &log_view, flags);\n}\n\n#endif\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/main.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_MAIN_H\n#define TIG_MAIN_H\n\n#include \"tig/view.h\"\n#include \"tig/graph.h\"\n#include \"tig/util.h\"\n\nstruct commit {\n\tchar id[SIZEOF_REV];\t\t/* SHA1 ID. */\n\tconst struct ident *author;\t/* Author of the commit. */\n\tstruct time author_time;\t/* Date from the author ident. */\n\tconst struct ident *committer;\t/* Committer. */\n\tstruct time commit_time;\t/* Date from the committer ident. */\n\tstruct graph_canvas graph;\t/* Ancestry chain graphics. */\n\tchar title[1];\t\t\t/* First line of the commit message. */\n};\n\nstruct main_state {\n\tstruct graph *graph;\n\tstruct commit current;\n\tchar **reflog;\n\tsize_t reflogs;\n\tint reflog_width;\n\tchar reflogmsg[SIZEOF_STR / 2];\n\tenum line_type goto_line_type;\n\tbool in_header;\n\tbool with_graph;\n\tbool first_parent;\n\tbool add_changes_staged;\n\tbool add_changes_unstaged;\n\tbool add_changes_untracked;\n\tbool has_notes;\n};\n\nbool main_get_column_data(struct view *view, const struct line *line, struct view_column_data *column_data);\nbool main_read(struct view *view, struct buffer *buf, bool force_stop);\nenum request main_request(struct view *view, enum request request, struct line *line);\nvoid main_select(struct view *view, struct line *line);\nvoid main_done(struct view *view);\nbool main_status_exists(struct view *view, enum line_type type);\n\nextern struct view main_view;\n\nstatic inline void\nopen_main_view(struct view *prev, enum open_flags flags)\n{\n\topen_view(prev, &main_view, flags);\n}\n\n#endif\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/map.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_MAP_H\n#define TIG_MAP_H\n\n#include \"tig/tig.h\"\n\n/*\n * String map.\n */\n\ntypedef unsigned int string_map_key_t;\ntypedef string_map_key_t (*string_map_hash_fn)(const void *value);\ntypedef const char *(*string_map_key_fn)(const void *value);\ntypedef bool (*string_map_iterator_fn)(void *data, void *value);\n\nstruct string_map {\n\tstring_map_hash_fn hash_fn;\n\tstring_map_key_fn key_fn;\n\tsize_t init_size;\n\tvoid *htab;\n\tconst char *key;\n};\n\nextern string_map_hash_fn string_map_hash_helper;\nvoid *string_map_get(struct string_map *map, const char *key);\nvoid **string_map_get_at(struct string_map *map, const char *key);\nvoid *string_map_put(struct string_map *map, const char *key, void *value);\nvoid **string_map_put_to(struct string_map *map, const char *key);\nvoid *string_map_remove(struct string_map *map, const char *key);\nvoid string_map_clear(struct string_map *map);\nvoid string_map_foreach(struct string_map *map, string_map_iterator_fn iterator, void *data);\n\n#define DEFINE_STRING_MAP(name, type, key_member, init_size) \\\n\tstatic const char * \\\n\tname ## _key(const void *value) \\\n\t{ \\\n\t\treturn ((type) value)->key_member; \\\n\t} \\\n\tstatic string_map_key_t \\\n\tname ## _hash(const void *value) \\\n\t{ \\\n\t\treturn string_map_hash_helper(name ## _key(value)); \\\n\t} \\\n\tstatic struct string_map name = { \\\n\t\tname ## _hash, \\\n\t\tname ## _key, \\\n\t\tinit_size, \\\n\t};\n\n#endif\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/options.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_OPTIONS_H\n#define TIG_OPTIONS_H\n\n#include \"tig/tig.h\"\n#include \"tig/util.h\"\n#include \"tig/line.h\"\n\n/*\n * Option variables.\n */\n\nstruct ref_format;\nstruct view_column;\ntypedef struct view_column *view_settings;\n\n#ifndef TIG_USER_CONFIG\n#define TIG_USER_CONFIG \"~/.tigrc\"\n#endif\n\n#define OPTION_INFO(_) \\\n\t_(blame_options,\t\tconst char **,\t\tVIEW_BLAME_LIKE) \\\n\t_(blame_view,\t\t\tview_settings,\t\tVIEW_NO_FLAGS) \\\n\t_(blob_view,\t\t\tview_settings,\t\tVIEW_NO_FLAGS) \\\n\t_(commit_order,\t\t\tenum commit_order,\tVIEW_LOG_LIKE) \\\n\t_(diff_context,\t\t\tint,\t\t\tVIEW_DIFF_LIKE) \\\n\t_(diff_indicator,\t\tbool,\t\t\tVIEW_DIFF_LIKE) \\\n\t_(diff_noprefix,\t\tbool,\t\t\tVIEW_NO_FLAGS) \\\n\t_(diff_options,\t\t\tconst char **,\t\tVIEW_DIFF_LIKE) \\\n\t_(diff_highlight,\t\tconst char *,\t\tVIEW_DIFF_LIKE) \\\n\t_(word_diff,\t\t\tbool,\t\t\tVIEW_DIFF_LIKE) \\\n\t_(diff_view,\t\t\tview_settings,\t\tVIEW_NO_FLAGS) \\\n\t_(editor_line_number,\t\tbool,\t\t\tVIEW_NO_FLAGS) \\\n\t_(file_args,\t\t\tconst char **,\t\tVIEW_DIFF_LIKE | VIEW_LOG_LIKE) \\\n\t_(file_filter,\t\t\tbool,\t\t\tVIEW_DIFF_LIKE | VIEW_LOG_LIKE) \\\n\t_(focus_child,\t\t\tbool,\t\t\tVIEW_NO_FLAGS) \\\n\t_(git_colors,\t\t\tconst char **,\t\tVIEW_NO_FLAGS) \\\n\t_(grep_view,\t\t\tview_settings,\t\tVIEW_NO_FLAGS) \\\n\t_(history_size,\t\t\tint,\t\t\tVIEW_NO_FLAGS) \\\n\t_(horizontal_scroll,\t\tdouble,\t\t\tVIEW_NO_FLAGS) \\\n\t_(id_width,\t\t\tint,\t\t\tVIEW_LOG_LIKE) \\\n\t_(ignore_case,\t\t\tenum ignore_case,\tVIEW_NO_FLAGS) \\\n\t_(ignore_space,\t\t\tenum ignore_space,\tVIEW_DIFF_LIKE) \\\n\t_(line_graphics,\t\tenum graphic,\t\tVIEW_RESET_DISPLAY) \\\n\t_(log_options,\t\t\tconst char **,\t\tVIEW_LOG_LIKE) \\\n\t_(log_view,\t\t\tview_settings,\t\tVIEW_NO_FLAGS) \\\n\t_(reflog_view,\t\t\tview_settings,\t\tVIEW_NO_FLAGS) \\\n\t_(mailmap,\t\t\tbool,\t\t\tVIEW_DIFF_LIKE | VIEW_LOG_LIKE) \\\n\t_(main_options,\t\t\tconst char **,\t\tVIEW_LOG_LIKE) \\\n\t_(main_view,\t\t\tview_settings,\t\tVIEW_NO_FLAGS) \\\n\t_(mouse,\t\t\tbool,\t\t\tVIEW_NO_FLAGS) \\\n\t_(mouse_scroll,\t\t\tint,\t\t\tVIEW_NO_FLAGS) \\\n\t_(mouse_wheel_cursor,\t\tbool,\t\t\tVIEW_NO_FLAGS) \\\n\t_(pager_autoscroll,\t\tbool,\t\t\tVIEW_NO_FLAGS) \\\n\t_(pager_view,\t\t\tview_settings,\t\tVIEW_NO_FLAGS) \\\n\t_(pgrp,\t\t\t\tbool,\t\t\tVIEW_NO_FLAGS) \\\n\t_(reference_format,\t\tstruct ref_format **,\tVIEW_LOG_LIKE) \\\n\t_(refresh_interval,\t\tint,\t\t\tVIEW_NO_FLAGS) \\\n\t_(refresh_mode,\t\t\tenum refresh_mode,\tVIEW_NO_FLAGS) \\\n\t_(refs_view,\t\t\tview_settings,\t\tVIEW_NO_FLAGS) \\\n\t_(rev_args,\t\t\tconst char **,\t\tVIEW_LOG_LIKE) \\\n\t_(rev_filter,\t\t\tbool,\t\t\tVIEW_LOG_LIKE) \\\n\t_(send_child_enter,\t\tbool,\t\t\tVIEW_NO_FLAGS) \\\n\t_(show_changes,\t\t\tbool,\t\t\tVIEW_LOG_LIKE) \\\n\t_(show_notes,\t\t\tbool,\t\t\tVIEW_DIFF_LIKE | VIEW_LOG_LIKE) \\\n\t_(show_untracked,\t\tbool,\t\t\tVIEW_LOG_LIKE) \\\n\t_(split_view_height,\t\tdouble,\t\t\tVIEW_RESET_DISPLAY) \\\n\t_(split_view_width,\t\tdouble,\t\t\tVIEW_RESET_DISPLAY) \\\n\t_(stage_view,\t\t\tview_settings,\t\tVIEW_NO_FLAGS) \\\n\t_(start_on_head,\t\tbool,\t\t\tVIEW_NO_FLAGS) \\\n\t_(stash_view,\t\t\tview_settings,\t\tVIEW_NO_FLAGS) \\\n\t_(status_show_untracked_dirs,\tbool,\t\t\tVIEW_STATUS_LIKE) \\\n\t_(status_show_untracked_files,\tbool,\t\t\tVIEW_STATUS_LIKE) \\\n\t_(status_view,\t\t\tview_settings,\t\tVIEW_NO_FLAGS) \\\n\t_(tab_size,\t\t\tint,\t\t\tVIEW_NO_FLAGS) \\\n\t_(tree_view,\t\t\tview_settings,\t\tVIEW_NO_FLAGS) \\\n\t_(truncation_delimiter,\t\tconst char *,\t\tVIEW_NO_FLAGS) \\\n\t_(vertical_split,\t\tenum vertical_split,\tVIEW_RESET_DISPLAY | VIEW_DIFF_LIKE) \\\n\t_(wrap_lines,\t\t\tbool,\t\t\tVIEW_DIFF_LIKE) \\\n\t_(wrap_search,\t\t\tbool,\t\t\tVIEW_NO_FLAGS) \\\n\n#define DEFINE_OPTION_EXTERNS(name, type, flags) extern type opt_##name;\nOPTION_INFO(DEFINE_OPTION_EXTERNS)\n\n/*\n * View column options.\n */\n\n#define AUTHOR_COLUMN_OPTIONS(_) \\\n\t_(display,\t\t\tenum author,\t\tVIEW_NO_FLAGS) \\\n\t_(width,\t\t\tint,\t\t\tVIEW_NO_FLAGS) \\\n\t_(maxwidth,\t\t\tint,\t\t\tVIEW_NO_FLAGS) \\\n\n#define COMMIT_TITLE_COLUMN_OPTIONS(_) \\\n\t_(display,\t\t\tbool,\t\t\tVIEW_NO_FLAGS) \\\n\t_(graph,\t\t\tenum graph_display,\tVIEW_LOG_LIKE) \\\n\t_(refs,\t\t\t\tbool,\t\t\tVIEW_NO_FLAGS) \\\n\t_(overflow,\t\t\tint,\t\t\tVIEW_NO_FLAGS) \\\n\n#define DATE_COLUMN_OPTIONS(_) \\\n\t_(display,\t\t\tenum date,\t\tVIEW_NO_FLAGS) \\\n\t_(use_author,\t\t\tbool,\t\t\tVIEW_NO_FLAGS) \\\n\t_(local,\t\t\tbool,\t\t\tVIEW_NO_FLAGS) \\\n\t_(format,\t\t\tconst char *,\t\tVIEW_NO_FLAGS) \\\n\t_(width,\t\t\tint,\t\t\tVIEW_NO_FLAGS) \\\n\n#define FILE_NAME_COLUMN_OPTIONS(_) \\\n\t_(display,\t\t\tenum filename,\t\tVIEW_GREP_LIKE | VIEW_BLAME_LIKE) \\\n\t_(width,\t\t\tint,\t\t\tVIEW_NO_FLAGS) \\\n\t_(maxwidth,\t\t\tint,\t\t\tVIEW_NO_FLAGS) \\\n\n#define FILE_SIZE_COLUMN_OPTIONS(_) \\\n\t_(display,\t\t\tenum file_size,\t\tVIEW_NO_FLAGS) \\\n\t_(width,\t\t\tint,\t\t\tVIEW_NO_FLAGS) \\\n\n#define ID_COLUMN_OPTIONS(_) \\\n\t_(display,\t\t\tbool,\t\t\tVIEW_NO_FLAGS) \\\n\t_(color,\t\t\tbool,\t\t\tVIEW_NO_FLAGS) \\\n\t_(width,\t\t\tint,\t\t\tVIEW_NO_FLAGS) \\\n\n#define LINE_NUMBER_COLUMN_OPTIONS(_) \\\n\t_(display,\t\t\tbool,\t\t\tVIEW_NO_FLAGS) \\\n\t_(interval,\t\t\tint,\t\t\tVIEW_NO_FLAGS) \\\n\t_(width,\t\t\tint,\t\t\tVIEW_NO_FLAGS) \\\n\n#define MODE_COLUMN_OPTIONS(_) \\\n\t_(display,\t\t\tbool,\t\t\tVIEW_NO_FLAGS) \\\n\t_(width,\t\t\tint,\t\t\tVIEW_NO_FLAGS) \\\n\n#define REF_COLUMN_OPTIONS(_) \\\n\t_(display,\t\t\tbool,\t\t\tVIEW_NO_FLAGS) \\\n\t_(width,\t\t\tint,\t\t\tVIEW_NO_FLAGS) \\\n\t_(maxwidth,\t\t\tint,\t\t\tVIEW_NO_FLAGS) \\\n\n#define SECTION_COLUMN_OPTIONS(_) \\\n\t_(type,\t\t\t\tenum line_type,\t\tVIEW_NO_FLAGS) \\\n\t_(text,\t\t\t\tconst char *,\t\tVIEW_NO_FLAGS) \\\n\n#define STATUS_COLUMN_OPTIONS(_) \\\n\t_(display,\t\t\tenum status_label,\tVIEW_NO_FLAGS) \\\n\n#define TEXT_COLUMN_OPTIONS(_) \\\n\t_(display,\t\t\tbool,\t\t\tVIEW_NO_FLAGS) \\\n\t_(commit_title_overflow,\tint,\t\t\tVIEW_NO_FLAGS) \\\n\n#define COLUMN_OPTIONS(_) \\\n\t_(author, AUTHOR, AUTHOR_COLUMN_OPTIONS) \\\n\t_(committer, COMMITTER, AUTHOR_COLUMN_OPTIONS) \\\n\t_(commit_title, COMMIT_TITLE, COMMIT_TITLE_COLUMN_OPTIONS) \\\n\t_(date, DATE, DATE_COLUMN_OPTIONS) \\\n\t_(file_name, FILE_NAME, FILE_NAME_COLUMN_OPTIONS) \\\n\t_(file_size, FILE_SIZE, FILE_SIZE_COLUMN_OPTIONS) \\\n\t_(id, ID, ID_COLUMN_OPTIONS) \\\n\t_(line_number, LINE_NUMBER, LINE_NUMBER_COLUMN_OPTIONS) \\\n\t_(mode, MODE, MODE_COLUMN_OPTIONS) \\\n\t_(ref, REF, REF_COLUMN_OPTIONS) \\\n\t_(section, SECTION, SECTION_COLUMN_OPTIONS) \\\n\t_(status, STATUS, STATUS_COLUMN_OPTIONS) \\\n\t_(text, TEXT, TEXT_COLUMN_OPTIONS) \\\n\n#define DEFINE_COLUMN_OPTIONS_STRUCT_VALUE(name, type, flags) type name;\n\n#define DEFINE_COLUMN_OPTIONS_STRUCT(name, id, options) \\\n\tstruct name##_options { \\\n\t\toptions(DEFINE_COLUMN_OPTIONS_STRUCT_VALUE) \\\n\t} name;\n\nunion view_column_options {\n\tCOLUMN_OPTIONS(DEFINE_COLUMN_OPTIONS_STRUCT)\n};\n\n/*\n * Global state variables.\n */\n\nextern iconv_t opt_iconv_out;\nextern char opt_editor[SIZEOF_STR];\nextern const char **opt_cmdline_args;\nextern bool opt_log_follow;\n\n/*\n * Mapping between options and command argument mapping.\n */\n\nvoid update_options_from_argv(const char *argv[]);\n\nconst char *ignore_space_arg();\nconst char *commit_order_arg();\nconst char *commit_order_arg_with_graph(enum graph_display graph_display);\nconst char *log_custom_pretty_arg();\nconst char *use_mailmap_arg();\nconst char *diff_context_arg();\nconst char *diff_prefix_arg();\nconst char *word_diff_arg();\nconst char *show_notes_arg();\n\n/*\n * Option loading and parsing.\n */\n\nstruct option_info {\n\tconst char *name;\n\tsize_t namelen;\n\tconst char *type;\n\tvoid *value;\n\tint flags;\n\tbool seen;\n};\n\nstruct option_info *find_option_info(struct option_info *option, size_t options, const char *prefix, const char *name);\nenum status_code parse_option(struct option_info *option, const char *prefix, const char *arg);\nstruct option_info *find_column_option_info(enum view_column_type type, union view_column_options *opts,\n\t\t\t\t\tconst char *option, struct option_info *column_info, const char **column_name);\nenum status_code parse_int(int *opt, const char *arg, int min, int max);\nenum status_code parse_step(double *opt, const char *arg);\nenum status_code set_option(const char *opt, int argc, const char *argv[]);\nenum status_code load_options(void);\nenum status_code load_git_config(void);\nenum status_code save_options(const char *path);\nconst char *format_option_value(const struct option_info *option, char buf[], size_t bufsize);\n\n#endif\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/pager.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_PAGER_H\n#define TIG_PAGER_H\n\n#include \"tig/view.h\"\n\nbool pager_get_column_data(struct view *view, const struct line *line, struct view_column_data *column_data);\nbool pager_common_read(struct view *view, const char *data, enum line_type type, struct line **line);\nenum request pager_request(struct view *view, enum request request, struct line *line);\nvoid pager_select(struct view *view, struct line *line);\n\nextern struct view pager_view;\n\nstatic inline void\nopen_pager_view(struct view *prev, enum open_flags flags)\n{\n\topen_view(prev, &pager_view, flags);\n}\n\n#endif\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/parse.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_PARSE_H\n#define TIG_PARSE_H\n\n#include \"tig/tig.h\"\n#include \"tig/util.h\"\n\nstruct chunk_header_position {\n\tunsigned long position;\n\tunsigned long lines;\n};\n\nstruct chunk_header {\n\tstruct chunk_header_position old;\n\tstruct chunk_header_position new;\n};\n\nbool parse_chunk_header(struct chunk_header *header, const char *line);\nbool parse_chunk_lineno(unsigned long *lineno, const char *chunk, int marker);\n\nstruct blame_commit {\n\tchar id[SIZEOF_REV];\t\t/* SHA1 ID. */\n\tchar title[128];\t\t/* First line of the commit message. */\n\tconst struct ident *author;\t/* Author of the commit. */\n\tstruct time author_time;\t/* Date from the author ident. */\n\tconst struct ident *committer;\t/* Committer. */\n\tstruct time commit_time;\t/* Date from the committer ident. */\n\tconst char *filename;\t\t/* Name of file. */\n\tchar parent_id[SIZEOF_REV];\t/* Parent/previous SHA1 ID. */\n\tconst char *parent_filename;\t/* Parent/previous name of file. */\n};\n\nstruct blame_header {\n\tchar id[SIZEOF_REV];\t\t/* SHA1 ID. */\n\tsize_t orig_lineno;\n\tsize_t lineno;\n\tsize_t group;\n};\n\nbool parse_blame_header(struct blame_header *header, const char *text);\nbool parse_blame_info(struct blame_commit *commit, char *author, char *committer, char *line);\n\n/* Parse author lines where the name may be empty:\n *\tauthor  <email@address.tld> 1138474660 +0100\n */\nvoid parse_author_line(char *ident, const struct ident **author, struct time *time);\n\nsize_t parse_size(const char *text);\n\n/*\n * Caches.\n */\nconst char *get_path(const char *path);\nstruct ident *get_author(const char *name, const char *email);\n\nstatic inline unsigned int\nchunk_header_marker_length(const char *data)\n{\n\tunsigned int len = 0;\n\tfor (; *data == '@'; data++)\n\t\tlen++;\n\treturn len;\n}\n\n#endif\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/prompt.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_PROMPT_H\n#define TIG_PROMPT_H\n\n#include \"tig/tig.h\"\n#include \"tig/keys.h\"\n\nstruct view;\nstruct input;\n\nenum input_status {\n\tINPUT_OK,\n\tINPUT_SKIP,\n\tINPUT_DELETE,\n\tINPUT_STOP,\n\tINPUT_CANCEL\n};\n\nstruct menu_item {\n\tint hotkey;\n\tconst char *text;\n\tvoid *data;\n};\n\ntypedef enum input_status (*input_handler)(struct input *input, struct key *key);\n\nstruct input {\n\tinput_handler handler;\n\tbool allow_empty;\n\tvoid *data;\n\tchar buf[SIZEOF_STR];\n\tchar context[SIZEOF_STR];\n};\n\nenum input_status prompt_default_handler(struct input *input, struct key *key);\nchar *read_prompt_incremental(const char *prompt, bool edit_mode, bool allow_empty, input_handler handler, void *data);\nchar *read_prompt(const char *prompt);\nvoid prompt_init(void);\nbool prompt_yesno(const char *prompt);\nbool prompt_menu(const char *prompt, const struct menu_item *items, int *selected);\n\nenum request run_prompt_command(struct view *view, const char *argv[]);\nenum request open_prompt(struct view *view);\nenum request exec_run_request(struct view *view, struct run_request *req);\n\n#endif\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/refdb.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_REFDB_H\n#define TIG_REFDB_H\n\n#include \"tig/tig.h\"\n#include \"tig/types.h\"\n#include \"tig/util.h\"\n\nstruct argv_env;\n\nstruct ref {\n\tstruct ref *next;\n\tenum reference_type type;\n\tchar id[SIZEOF_REV];\t/* Commit SHA1 ID */\n\tunsigned int valid:1;\t/* Is the ref still valid? */\n\tchar name[1];\t\t/* Ref name; tag or head names are shortened. */\n};\n\n#define is_initial_commit()\t(!get_ref_head())\n#define is_head_commit(rev)\t(!strcmp((rev), \"HEAD\") || (get_ref_head() && !strncmp(rev, get_ref_head()->id, SIZEOF_REV - 1)))\n#define ref_is_tag(ref)\t\t((ref)->type == REFERENCE_TAG || (ref)->type == REFERENCE_LOCAL_TAG)\n#define ref_is_remote(ref)\t((ref)->type == REFERENCE_REMOTE || (ref)->type == REFERENCE_TRACKED_REMOTE)\n\n#define foreach_ref_list(ref, id)\tfor (ref = get_ref_list(id); ref; ref = ref->next)\n\nconst struct ref *get_ref_head();\nconst struct ref *get_ref_list(const char *id);\nconst struct ref *get_canonical_ref(const char *id);\nbool ref_list_contains_tag(const char *id);\nenum status_code load_refs(bool force);\nenum status_code add_ref(const char *id, char *name, const char *remote_name, const char *head);\nint ref_compare(const struct ref *ref1, const struct ref *ref2);\nvoid ref_update_env(struct argv_env *env, const struct ref *ref, bool recurse);\n\nbool refs_contain_tag(void);\n\ntypedef bool (*ref_visitor_fn)(void *data, const struct ref *ref);\nvoid foreach_ref(ref_visitor_fn visitor, void *data);\n\nstruct ref_format {\n\tconst char *start;\n\tconst char *end;\n};\n\nconst struct ref_format *get_ref_format(struct ref_format **formats, const struct ref *ref);\nenum status_code parse_ref_formats(struct ref_format ***formats, const char *argv[]);\nenum status_code format_ref_formats(struct ref_format **formats, char buf[], size_t bufsize);\n\n#endif\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/reflog.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_REFLOG_H\n#define TIG_REFLOG_H\n\n#include \"tig/view.h\"\n\nextern struct view reflog_view;\n\nstatic inline void\nopen_reflog_view(struct view *prev, enum open_flags flags)\n{\n\topen_view(prev, &reflog_view, flags);\n}\n\n#endif\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/refs.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_REFS_H\n#define TIG_REFS_H\n\n#include \"tig/view.h\"\n\nextern struct view refs_view;\n\nstatic inline void\nopen_refs_view(struct view *prev, enum open_flags flags)\n{\n\topen_view(prev, &refs_view, flags);\n}\n\n#endif\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/repo.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_REPO_H\n#define TIG_REPO_H\n\n#include \"tig/tig.h\"\n\ntypedef char repo_ref[SIZEOF_REF];\ntypedef char repo_rev[SIZEOF_REV];\ntypedef char repo_str[SIZEOF_STR];\n\n#define REPO_INFO(_) \\\n\t_(repo_ref, head) \\\n\t_(repo_rev, head_id) \\\n\t_(repo_ref, remote) \\\n\t_(repo_ref, upstream) \\\n\t_(repo_str, cdup) \\\n\t_(repo_str, prefix) \\\n\t_(repo_str, git_dir) \\\n\t_(repo_str, worktree) \\\n\t_(repo_str, exec_dir) \\\n\t_(bool,     is_inside_work_tree)\n\n#define REPO_INFO_FIELDS(type, name)\ttype name;\n\nstruct repo_info {\n\tREPO_INFO(REPO_INFO_FIELDS)\n};\n\nextern struct repo_info repo;\n\nenum status_code load_repo_info(void);\nenum status_code load_repo_head(void);\n\nstruct index_diff {\n\tint staged;\n\tint unstaged;\n\tint untracked;\n};\n\nbool index_diff(struct index_diff *diff, bool untracked, bool count_all);\nbool update_index(void);\n\n#endif\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/request.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_REQUEST_H\n#define TIG_REQUEST_H\n\n#include \"tig/tig.h\"\n\n/*\n * User requests\n */\n\n#define VIEW_REQ(id, name) REQ_(VIEW_##id, \"Show \" #name \" view\")\n\n#define REQ_INFO \\\n\tREQ_GROUP(\"View switching\") \\\n\tVIEW_INFO(VIEW_REQ), \\\n\t\\\n\tREQ_GROUP(\"View manipulation\") \\\n\tREQ_(ENTER,\t\t\"Enter and open selected line\"), \\\n\tREQ_(BACK,\t\t\"Go back to the previous view state\"), \\\n\tREQ_(NEXT,\t\t\"Move to next\"), \\\n\tREQ_(PREVIOUS,\t\t\"Move to previous\"), \\\n\tREQ_(PARENT,\t\t\"Move to parent\"), \\\n\tREQ_(VIEW_NEXT,\t\t\"Move focus to the next view\"), \\\n\tREQ_(REFRESH,\t\t\"Reload and refresh view\"), \\\n\tREQ_(MAXIMIZE,\t\t\"Maximize the current view\"), \\\n\tREQ_(VIEW_CLOSE,\t\"Close the current view\"), \\\n\tREQ_(VIEW_CLOSE_NO_QUIT,\t\"Close the current view without quitting\"), \\\n\tREQ_(QUIT,\t\t\"Close all views and quit\"), \\\n\t\\\n\tREQ_GROUP(\"View-specific actions\") \\\n\tREQ_(STATUS_UPDATE,\t\"Stage/unstage chunk or file changes\"), \\\n\tREQ_(STATUS_REVERT,\t\"Revert chunk or file changes\"), \\\n\tREQ_(STATUS_MERGE,\t\"Merge file using external tool\"), \\\n\tREQ_(STAGE_UPDATE_LINE,\t\"Stage/unstage single line\"), \\\n\tREQ_(STAGE_UPDATE_PART, \"Stage/unstage part of a chunk\"), \\\n\tREQ_(STAGE_SPLIT_CHUNK,\t\"Split current diff chunk\"), \\\n\t\\\n\tREQ_GROUP(\"Cursor navigation\") \\\n\tREQ_(MOVE_UP,\t\t\"Move cursor one line up\"), \\\n\tREQ_(MOVE_DOWN,\t\t\"Move cursor one line down\"), \\\n\tREQ_(MOVE_PAGE_UP,\t\"Move cursor one page up\"), \\\n\tREQ_(MOVE_PAGE_DOWN,\t\"Move cursor one page down\"), \\\n\tREQ_(MOVE_HALF_PAGE_UP,\t\"Move cursor half a page up\"), \\\n\tREQ_(MOVE_HALF_PAGE_DOWN,\t\"Move cursor half a page down\"), \\\n\tREQ_(MOVE_FIRST_LINE,\t\"Move cursor to first line\"), \\\n\tREQ_(MOVE_LAST_LINE,\t\"Move cursor to last line\"), \\\n\tREQ_(MOVE_NEXT_MERGE,\t\"Move cursor to next merge commit\"), \\\n\tREQ_(MOVE_PREV_MERGE,\t\"Move cursor to previous merge commit\"), \\\n\t\\\n\tREQ_GROUP(\"Scrolling\") \\\n\tREQ_(SCROLL_LINE_UP,\t\"Scroll one line up\"), \\\n\tREQ_(SCROLL_LINE_DOWN,\t\"Scroll one line down\"), \\\n\tREQ_(SCROLL_PAGE_UP,\t\"Scroll one page up\"), \\\n\tREQ_(SCROLL_PAGE_DOWN,\t\"Scroll one page down\"), \\\n\tREQ_(SCROLL_HALF_PAGE_UP,\t\"Scroll half a page up\"), \\\n\tREQ_(SCROLL_HALF_PAGE_DOWN,\t\"Scroll half a page down\"), \\\n\tREQ_(SCROLL_FIRST_COL,\t\"Scroll to the first line columns\"), \\\n\tREQ_(SCROLL_LEFT,\t\"Scroll two columns left\"), \\\n\tREQ_(SCROLL_RIGHT,\t\"Scroll two columns right\"), \\\n\t\\\n\tREQ_GROUP(\"Searching\") \\\n\tREQ_(SEARCH,\t\t\"Search the view\"), \\\n\tREQ_(SEARCH_BACK,\t\"Search backwards in the view\"), \\\n\tREQ_(FIND_NEXT,\t\t\"Find next search match\"), \\\n\tREQ_(FIND_PREV,\t\t\"Find previous search match\"), \\\n\t\\\n\tREQ_GROUP(\"Misc\") \\\n\tREQ_(EDIT,\t\t\"Open in editor\"), \\\n\tREQ_(PROMPT,\t\t\"Open the prompt\"), \\\n\tREQ_(OPTIONS,\t\t\"Open the options menu\"), \\\n\tREQ_(SCREEN_REDRAW,\t\"Redraw the screen\"), \\\n\tREQ_(STOP_LOADING,\t\"Stop all loading views\"), \\\n\tREQ_(SHOW_VERSION,\t\"Show version information\"), \\\n\tREQ_(NONE,\t\t\"Do nothing\")\n\n\n/* User action requests. */\nenum request {\n#define REQ_GROUP(help)\n#define REQ_(req, help) REQ_##req\n\n\t/* Offset all requests to avoid conflicts with ncurses getch values. */\n\tREQ_UNKNOWN = KEY_MAX + 1,\n\tREQ_OFFSET,\n\tREQ_INFO,\n\n\t/* Internal requests. */\n\tREQ_SCROLL_WHEEL_DOWN,\n\tREQ_SCROLL_WHEEL_UP,\n\tREQ_MOVE_WHEEL_DOWN,\n\tREQ_MOVE_WHEEL_UP,\n\n\t/* Start of the run request IDs */\n\tREQ_RUN_REQUESTS\n\n#undef\tREQ_GROUP\n#undef\tREQ_\n};\n\nstruct request_info {\n\tenum request request;\n\tconst char *name;\n\tint namelen;\n\tconst char *help;\n};\n\nenum request get_request(const char *name);\nconst char *get_request_name(enum request request);\nbool foreach_request(bool (*visitor)(void *data, const struct request_info *req_info, const char *group), void *data);\n\n#endif\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/search.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_SEARCH_H\n#define TIG_SEARCH_H\n\n#include \"tig/view.h\"\n\nvoid reset_search(struct view *view);\nvoid search_view(struct view *view, enum request request);\nvoid find_next(struct view *view, enum request request);\nvoid find_merge(struct view *view, enum request request);\nbool grep_text(struct view *view, const char *text[]);\n\n#endif\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/stage.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_STAGE_H\n#define TIG_STAGE_H\n\n#include \"tig/view.h\"\n\nstruct status;\n\nextern struct view stage_view;\n\nvoid open_stage_view(struct view *prev, struct status *status, enum line_type type, enum open_flags flags);\n\n#endif\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/stash.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_STASH_H\n#define TIG_STASH_H\n\n#include \"tig/view.h\"\n\nextern struct view stash_view;\n\nstatic inline void\nopen_stash_view(struct view *prev, enum open_flags flags)\n{\n\topen_view(prev, &stash_view, flags);\n}\n\n#endif\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/status.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_STATUS_H\n#define TIG_STATUS_H\n\n#include \"tig/view.h\"\n#include \"tig/line.h\"\n\nstruct status {\n\tchar status;\n\tstruct {\n\t\tmode_t mode;\n\t\tchar rev[SIZEOF_REV];\n\t\tchar name[SIZEOF_STR];\n\t} old;\n\tstruct {\n\t\tmode_t mode;\n\t\tchar rev[SIZEOF_REV];\n\t\tchar name[SIZEOF_STR];\n\t} new;\n};\n\nbool status_update_file(struct status *status, enum line_type type);\nbool status_update_files(struct view *view, struct line *line);\nbool status_get_diff(struct status *file, const char *buf, size_t bufsize);\n\nbool status_revert(struct status *status, enum line_type type, bool has_none);\nbool status_exists(struct view *view, struct status *status, enum line_type type);\n\nbool status_stage_info_(char *buf, size_t bufsize,\n\t\t\tenum line_type type, struct status *status);\n#define status_stage_info(buf, type, status) \\\n\tstatus_stage_info_(buf, sizeof(buf), type, status)\nextern struct view status_view;\n\nvoid open_status_view(struct view *prev, bool untracked_only, enum open_flags flags);\n\n#endif\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/string.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_STRING_H\n#define TIG_STRING_H\n\n#include \"tig/tig.h\"\n\n/*\n * Strings.\n */\n\n#if defined(__APPLE__)\n/* See COMPATIBILITY in isspace(3). */\n#define isalnum(c) iswalnum(btowc(c))\n#define iscntrl(c) iswcntrl(btowc(c))\n#define isdigit(c) iswdigit(btowc(c))\n#define ispunct(c) iswpunct(btowc(c))\n#define isspace(c) iswspace(btowc(c))\n#define isxdigit(c) iswxdigit(btowc(c))\n#endif\n\n#define prefixcmp(str1, str2) \\\n\tstrncmp(str1, str2, STRING_SIZE(str2))\n\nbool string_isnumber(const char *str);\nbool iscommit(const char *str);\n#define get_graph_indent(str) strspn(str, \"*|\\\\/_ \")\n\nstatic inline int\nascii_toupper(int c)\n{\n\tif (c >= 'a' && c <= 'z')\n\t\tc &= ~0x20;\n\treturn c;\n}\n\nstatic inline int\nascii_tolower(int c)\n{\n\tif (c >= 'A' && c <= 'Z')\n\t\tc |= 0x20;\n\treturn c;\n}\n\nint suffixcmp(const char *str, int slen, const char *suffix);\n\nvoid string_ncopy_do(char *dst, size_t dstlen, const char *src, size_t srclen);\n\n/* Shorthands for safely copying into a fixed buffer. */\n\n#define FORMAT_BUFFER(buf, bufsize, fmt, retval, allow_truncate) \\\n\tdo { \\\n\t\tva_list args; \\\n\t\tva_start(args, fmt); \\\n\t\tretval = vsnprintf(buf, bufsize, fmt, args); \\\n\t\tva_end(args); \\\n\t\tif (retval >= (bufsize) && allow_truncate) { \\\n\t\t\t(buf)[(bufsize) - 1] = 0; \\\n\t\t\t(buf)[(bufsize) - 2] = '.'; \\\n\t\t\t(buf)[(bufsize) - 3] = '.'; \\\n\t\t\t(buf)[(bufsize) - 4] = '.'; \\\n\t\t\tretval = (bufsize) - 1; \\\n\t\t} else if (retval < 0 || retval >= (bufsize)) { \\\n\t\t\tretval = -1; \\\n\t\t} \\\n\t} while (0)\n\n#define string_copy(dst, src) \\\n\tstring_ncopy_do(dst, sizeof(dst), src, sizeof(src))\n\n#define string_ncopy(dst, src, srclen) \\\n\tstring_ncopy_do(dst, sizeof(dst), src, srclen)\n\nvoid string_copy_rev(char *dst, const char *src);\nvoid string_copy_rev_from_commit_line(char *dst, const char *src);\n\n#define string_rev_is_null(rev) !strncmp(rev, NULL_ID, STRING_SIZE(NULL_ID))\n\n#define string_add(dst, from, src) \\\n\tstring_ncopy_do(dst + (from), sizeof(dst) - (from), src, sizeof(src))\n\n#define string_concat_path(dst, path1, path2) \\\n\tstring_format(dst, !*path1 || path1[strlen(path1) - 1] == '/' ? \"%s%s\" : \"%s/%s\", path1, path2)\n\nsize_t string_expand(char *dst, size_t dstlen, const char *src, int srclen, int tabsize);\n\nchar *string_trim_end(char *name);\nchar *string_trim(char *name);\n\nbool PRINTF_LIKE(4, 5) string_nformat(char *buf, size_t bufsize, size_t *bufpos, const char *fmt, ...);\n\n#define string_format(buf, fmt, ...) \\\n\tstring_nformat(buf, sizeof(buf), NULL, fmt, ## __VA_ARGS__)\n\n#define string_format_from(buf, from, fmt, ...) \\\n\tstring_nformat(buf, sizeof(buf), from, fmt, ## __VA_ARGS__)\n\nint strcmp_null(const char *s1, const char *s2);\nint strcmp_numeric(const char *s1, const char *s2);\n\n/*\n * Unicode / UTF-8 handling\n */\n\nint unicode_width(unsigned long c, int tab_size);\n\nunsigned char utf8_char_length(const char *string);\n\n/* Decode UTF-8 multi-byte representation into a Unicode character. */\nunsigned long utf8_to_unicode(const char *string, size_t length);\n\n/* Calculates how much of string can be shown within the given maximum width\n * and sets trimmed parameter to non-zero value if all of string could not be\n * shown. If the reserve flag is TRUE, it will reserve at least one\n * trailing character, which can be useful when drawing a delimiter.\n *\n * Returns the number of bytes to output from string to satisfy max_width. */\nsize_t utf8_length(const char **start, int max_bytes, size_t skip, int *width, size_t max_width, int *trimmed, bool reserve, int tab_size);\n\nint utf8_width_of(const char *text, int max_bytes, int max_width);\n#define utf8_width_max(text, width) utf8_width_of(text, -1, width)\n#define utf8_width(text) utf8_width_max(text, -1)\n\nbool utf8_string_contains_uppercase(const char *text);\n\n#endif\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/tig.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_H\n#define TIG_H\n\n#ifdef HAVE_CONFIG_H\n#include \"config.h\"\n#endif\n\n/* required for struct timezone */\n#ifdef _BSD_SOURCE\n#undef _BSD_SOURCE\n#endif\n#define _BSD_SOURCE 1\n#ifdef _DEFAULT_SOURCE\n#undef _DEFAULT_SOURCE\n#endif\n#define _DEFAULT_SOURCE 1\n\n#include \"compat/compat.h\"\n\n#ifndef TIG_VERSION\n#define TIG_VERSION \"unknown-version\"\n#endif\n\n#ifndef DEBUG\n#define NDEBUG\n#endif\n\n/* necessary on Snow Leopard to use WINDOW struct */\n#if defined(NCURSES_VERSION_PATCH) && NCURSES_VERSION_PATCH < 20110226\n#ifdef NCURSES_OPAQUE\n#undef NCURSES_OPAQUE\n#endif\n#define NCURSES_OPAQUE 0\n#endif\n\n\n#include <assert.h>\n#include <errno.h>\n#include <ctype.h>\n#include <signal.h>\n#include <stdarg.h>\n#include <stdbool.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <strings.h>\n#include <sys/types.h>\n#include <sys/wait.h>\n#include <sys/stat.h>\n#include <sys/select.h>\n#include <unistd.h>\n#include <sys/time.h>\n#include <sys/file.h>\n#include <time.h>\n#include <fcntl.h>\n#include <libgen.h>\n#include <termios.h>\n\n#if defined(__APPLE__)\n#include <wchar.h>\n#endif\n\n#if defined HAVE_PCRE2\n#include <pcre2posix.h>\n#elif defined HAVE_PCRE\n#include <pcreposix.h>\n#else\n#include <regex.h>\n#endif\n\n#include <locale.h>\n#include <langinfo.h>\n#include <iconv.h>\n\n#ifdef HAVE_EXECINFO_H\n#include <execinfo.h>\n#endif\n\n#ifdef HAVE_PATHS_H\n#include <paths.h>\n#endif\n\n/* ncurses(3): Must be defined to have extended wide-character functions. */\n#ifdef _XOPEN_SOURCE_EXTENDED\n#undef _XOPEN_SOURCE_EXTENDED\n#endif\n#define _XOPEN_SOURCE_EXTENDED 1\n\n#if defined HAVE_NCURSESW_CURSES_H\n#  include <ncursesw/curses.h>\n#elif defined HAVE_NCURSESW_H\n#  include <ncursesw.h>\n#elif defined HAVE_NCURSES_CURSES_H\n#  include <ncurses/curses.h>\n#elif defined HAVE_NCURSES_H\n#  include <ncurses.h>\n#elif defined HAVE_CURSES_H\n#  include <curses.h>\n#else\n#ifdef WARN_MISSING_CURSES_CONFIGURATION\n#  warning SysV or X/Open-compatible Curses installation is required.\n#  warning Will assume Curses is found in default include and library path.\n#  warning To fix any build issues please use autotools to configure Curses.\n#  warning See INSTALL.adoc file for instructions.\n#endif\n#  include <curses.h>\n#endif\n\n#ifdef TRUE\n#undef TRUE\n#endif\n#ifdef FALSE\n#undef FALSE\n#endif\n\n#ifndef newscr\n/* `newscr` is a ncurses-ism, and doesn't exist in netbsd-curses. (#790) */\n#define newscr curscr\n#endif\n\n#if __GNUC__ >= 3\n#define TIG_NORETURN __attribute__((__noreturn__))\n#define PRINTF_LIKE(fmt, args) __attribute__((format (printf, fmt, args)))\n#else\n#define TIG_NORETURN\n#define PRINTF_LIKE(fmt, args)\n#endif\n\n#include \"tig/string.h\"\n\n#define ABS(x)\t\t((x) >= 0  ? (x) : -(x))\n#define MIN(x, y)\t((x) < (y) ? (x) :  (y))\n#define MAX(x, y)\t((x) > (y) ? (x) :  (y))\n\n#define ARRAY_SIZE(x)\t(sizeof(x) / sizeof(x[0]))\n#define STRING_SIZE(x)\t(sizeof(x) - 1)\n\n#define SIZEOF_STR\t1024\t/* Default string size. */\n#define SIZEOF_MED_STR\t8192\t/* Medium string size. */\n#define SIZEOF_REF\t256\t/* Size of symbolic or SHA1 ID. */\n#define SIZEOF_REV\t41\t/* Holds a SHA-1 and an ending NUL. */\n\n/* This color name can be used to refer to the default term colors. */\n#define COLOR_DEFAULT\t(-1)\n\n#define ICONV_NONE\t((iconv_t) -1)\n#ifndef ICONV_CONST\n#define ICONV_CONST\t/* nothing */\n#endif\n#define ICONV_TRANSLIT\t\"//TRANSLIT\"\n\n#define MIN_VIEW_HEIGHT 4\n#define MIN_VIEW_WIDTH  4\n#define VSPLIT_SCALE\t0.5\n\n#define NULL_ID\t\t\"0000000000000000000000000000000000000000\"\n\n#define S_ISGITLINK(mode) (((mode) & S_IFMT) == 0160000)\n\n/* Some ASCII-shorthands fitted into the ncurses namespace. */\n#define KEY_CTL(x)\t((x) & 0x1f) /* KEY_CTL(A) == ^A == \\1 */\n#define KEY_TAB\t\t'\\t'\n#define KEY_RETURN\t'\\r'\n#define KEY_ESC\t\t27\n\nvoid TIG_NORETURN usage(const char *message);\n\n/*\n * Global view definition.\n */\n\n#define VIEW_INFO(_) \\\n\t_(MAIN,   main), \\\n\t_(DIFF,   diff), \\\n\t_(LOG,    log), \\\n\t_(REFLOG, reflog), \\\n\t_(TREE,   tree), \\\n\t_(BLOB,   blob), \\\n\t_(BLAME,  blame), \\\n\t_(REFS,   refs), \\\n\t_(STATUS, status), \\\n\t_(STAGE,  stage), \\\n\t_(STASH,  stash), \\\n\t_(GREP,   grep), \\\n\t_(PAGER,  pager), \\\n\t_(HELP,   help)\n\n#endif\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/tree.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_TREE_H\n#define TIG_TREE_H\n\n#include \"tig/view.h\"\n\nvoid open_blob_editor(const char *id, const char *name, unsigned int lineno);\n\nextern struct view tree_view;\n\nstatic inline void\nopen_tree_view(struct view *prev, enum open_flags flags)\n{\n\topen_view(prev, &tree_view, flags);\n}\n\n#endif\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/types.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_TYPES_H\n#define TIG_TYPES_H\n\n#include \"tig/tig.h\"\n\n/*\n * Enumerations\n */\n\nstruct enum_map_entry {\n\tconst char *name;\n\tint namelen;\n\tint value;\n};\n\nstruct enum_map {\n\tconst struct enum_map_entry *entries;\n\tconst int size;\n};\n\n#define string_enum_sep(x) ((x) == '-' || (x) == '_')\nint string_enum_compare(const char *str1, const char *str2, int len);\n\n#define enum_equals(entry, str, len) \\\n\t((entry).namelen == (len) && !string_enum_compare((entry).name, str, len))\n\n#define enum_equals_static(str, name, namelen) \\\n\t(namelen == STRING_SIZE(str) && !string_enum_compare(str, name, namelen))\n\n#define enum_equals_prefix(entry, name_, namelen_) \\\n\t((namelen_) > (entry).namelen && \\\n\t string_enum_sep((name_)[(entry).namelen]) && \\\n\t enum_equals(entry, name_, (entry).namelen))\n\nconst char *enum_name(const char *name);\nbool enum_name_copy(char buf[], size_t bufsize, const char *name);\nbool enum_name_prefixed(char buf[], size_t bufsize, const char *prefix, const char *name);\n\nconst struct enum_map *find_enum_map(const char *type);\n\nbool map_enum_do(const struct enum_map_entry *map, size_t map_size, int *value, const char *name);\n\n#define map_enum(attr, map, name) \\\n\tmap_enum_do(map, ARRAY_SIZE(map), attr, name)\n\n#define ENUM_MAP_ENTRY(name, value) { name, STRING_SIZE(name), value }\n\n#define ENUM_SYM_MACRO(prefix, name)\tprefix##_##name\n#define ENUM_MAP_MACRO(prefix, name)\tENUM_MAP_ENTRY(#name, ENUM_SYM_MACRO(prefix, name))\n\n#define DEFINE_ENUM(name, info) \\\n\tenum name { info(ENUM_SYM_MACRO) }; \\\n\textern const struct enum_map name##_map[];\n\n#define DEFINE_ENUM_MAP(name, info) \\\n\tconst struct enum_map_entry name##_map_entries[] = { info(ENUM_MAP_MACRO) }; \\\n\tconst struct enum_map name##_map[] = { { name##_map_entries, ARRAY_SIZE(name##_map_entries) } }\n\n#define VERTICAL_SPLIT_ENUM(_) \\\n\t_(VERTICAL_SPLIT, HORIZONTAL), \\\n\t_(VERTICAL_SPLIT, VERTICAL), \\\n\t_(VERTICAL_SPLIT, AUTO)\n\n#define GRAPHIC_ENUM(_) \\\n\t_(GRAPHIC, ASCII), \\\n\t_(GRAPHIC, DEFAULT), \\\n\t_(GRAPHIC, UTF_8)\n\n#define GRAPH_DISPLAY_ENUM(_) \\\n\t_(GRAPH_DISPLAY, NO), \\\n\t_(GRAPH_DISPLAY, V2), \\\n\t_(GRAPH_DISPLAY, V1)\n\n#define DATE_ENUM(_) \\\n\t_(DATE, NO), \\\n\t_(DATE, DEFAULT), \\\n\t_(DATE, RELATIVE), \\\n\t_(DATE, RELATIVE_COMPACT), \\\n\t_(DATE, CUSTOM)\n\n#define FILE_SIZE_ENUM(_) \\\n\t_(FILE_SIZE, NO), \\\n\t_(FILE_SIZE, DEFAULT), \\\n\t_(FILE_SIZE, UNITS)\n\n#define AUTHOR_ENUM(_) \\\n\t_(AUTHOR, NO), \\\n\t_(AUTHOR, FULL), \\\n\t_(AUTHOR, ABBREVIATED), \\\n\t_(AUTHOR, EMAIL), \\\n\t_(AUTHOR, EMAIL_USER)\n\n#define FILENAME_ENUM(_) \\\n\t_(FILENAME, NO), \\\n\t_(FILENAME, AUTO), \\\n\t_(FILENAME, ALWAYS)\n\n#define IGNORE_SPACE_ENUM(_) \\\n\t_(IGNORE_SPACE, NO), \\\n\t_(IGNORE_SPACE, ALL), \\\n\t_(IGNORE_SPACE, SOME), \\\n\t_(IGNORE_SPACE, AT_EOL)\n\n#define IGNORE_CASE_ENUM(_) \\\n\t_(IGNORE_CASE, NO), \\\n\t_(IGNORE_CASE, YES), \\\n\t_(IGNORE_CASE, SMART_CASE)\n\n#define COMMIT_ORDER_ENUM(_) \\\n\t_(COMMIT_ORDER, AUTO), \\\n\t_(COMMIT_ORDER, DEFAULT), \\\n\t_(COMMIT_ORDER, TOPO), \\\n\t_(COMMIT_ORDER, DATE), \\\n\t_(COMMIT_ORDER, AUTHOR_DATE), \\\n\t_(COMMIT_ORDER, REVERSE)\n\n#define VIEW_COLUMN_ENUM(_) \\\n\t_(VIEW_COLUMN, AUTHOR), \\\n\t_(VIEW_COLUMN, COMMITTER), \\\n\t_(VIEW_COLUMN, COMMIT_TITLE), \\\n\t_(VIEW_COLUMN, DATE), \\\n\t_(VIEW_COLUMN, FILE_NAME), \\\n\t_(VIEW_COLUMN, FILE_SIZE), \\\n\t_(VIEW_COLUMN, ID), \\\n\t_(VIEW_COLUMN, LINE_NUMBER), \\\n\t_(VIEW_COLUMN, MODE), \\\n\t_(VIEW_COLUMN, REF), \\\n\t_(VIEW_COLUMN, SECTION), \\\n\t_(VIEW_COLUMN, STATUS), \\\n\t_(VIEW_COLUMN, TEXT)\n\n#define REFERENCE_ENUM(_) \\\n\t_(REFERENCE, HEAD), \\\n\t_(REFERENCE, BRANCH), \\\n\t_(REFERENCE, TRACKED_REMOTE), \\\n\t_(REFERENCE, REMOTE), \\\n\t_(REFERENCE, TAG), \\\n\t_(REFERENCE, LOCAL_TAG), \\\n\t_(REFERENCE, REPLACE), \\\n\t_(REFERENCE, STASH), \\\n\t_(REFERENCE, NOTE), \\\n\t_(REFERENCE, PREFETCH), \\\n\t_(REFERENCE, OTHER)\n\n#define STATUS_LABEL_ENUM(_) \\\n\t_(STATUS_LABEL, NO), \\\n\t_(STATUS_LABEL, SHORT), \\\n\t_(STATUS_LABEL, LONG)\n\n#define REFRESH_MODE_ENUM(_) \\\n\t_(REFRESH_MODE, MANUAL), \\\n\t_(REFRESH_MODE, AUTO), \\\n\t_(REFRESH_MODE, AFTER_COMMAND), \\\n\t_(REFRESH_MODE, PERIODIC),\n\n#define ENUM_INFO(_) \\\n\t_(author, AUTHOR_ENUM) \\\n\t_(commit_order, COMMIT_ORDER_ENUM) \\\n\t_(date, DATE_ENUM) \\\n\t_(file_size, FILE_SIZE_ENUM) \\\n\t_(filename, FILENAME_ENUM) \\\n\t_(graphic, GRAPHIC_ENUM) \\\n\t_(graph_display, GRAPH_DISPLAY_ENUM) \\\n\t_(ignore_case, IGNORE_CASE_ENUM) \\\n\t_(ignore_space, IGNORE_SPACE_ENUM) \\\n\t_(vertical_split, VERTICAL_SPLIT_ENUM) \\\n\t_(view_column_type, VIEW_COLUMN_ENUM) \\\n\t_(reference_type, REFERENCE_ENUM) \\\n\t_(refresh_mode, REFRESH_MODE_ENUM) \\\n\t_(status_label, STATUS_LABEL_ENUM) \\\n\n#define DEFINE_ENUMS(name, macro) DEFINE_ENUM(name, macro)\nENUM_INFO(DEFINE_ENUMS)\n\n#endif\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/ui.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_UI_H\n#define TIG_UI_H\n\nconst char *open_file_finder(const char *commit);\n\n#endif\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/util.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_UTIL_H\n#define TIG_UTIL_H\n\n#include \"tig/tig.h\"\n#include \"tig/types.h\"\n\n/*\n * Error handling.\n */\n\n#define STATUS_CODE_INFO(_) \\\n\t_(CUSTOM_MESSAGE, NULL), \\\n\t_(NO_OPTION_VALUE, \"No option value\"), \\\n\t_(OUT_OF_MEMORY, \"Out of memory\"), \\\n\t_(FILE_DOES_NOT_EXIST, \"File does not exist\"), \\\n\t_(UNMATCHED_QUOTATION, \"Unmatched quotation\"), \\\n\nenum status_code {\n\tSUCCESS,\n#define STATUS_CODE_ENUM(name, msg) ERROR_ ## name\n\tSTATUS_CODE_INFO(STATUS_CODE_ENUM)\n};\n\nconst char *get_status_message(enum status_code code);\nenum status_code error(const char *fmt, ...) PRINTF_LIKE(1, 2);\nenum status_code success(const char *fmt, ...) PRINTF_LIKE(1, 2);\n\ntypedef void (*die_fn)(void);\nextern die_fn die_callback;\nvoid TIG_NORETURN die(const char *err, ...) PRINTF_LIKE(1, 2);\nvoid warn(const char *msg, ...) PRINTF_LIKE(1, 2);\n\nstatic inline int\ncount_digits(unsigned long i)\n{\n\tint digits;\n\n\tif (!i)\n\t\treturn 1;\n\n\tfor (digits = 0; i; digits++)\n\t\ti /= 10;\n\treturn digits;\n}\n\nstatic inline int\napply_step(double step, int value)\n{\n\tif (step >= 1)\n\t\treturn (int) step;\n\tvalue *= step;\n\treturn value ? value : 1;\n}\n\n/*\n * Git data formatters.\n */\n\nstruct time {\n\ttime_t sec;\n\tint tz;\n};\n\nstruct ident {\n\tconst char *key;\n\tconst char *name;\n\tconst char *email;\n};\n\nextern const struct ident unknown_ident;\n\nint time_now(struct timeval *timeval, struct timezone *tz);\nint timecmp(const struct time *t1, const struct time *t2);\nint ident_compare(const struct ident *i1, const struct ident *i2);\n\nconst char *mkdate(const struct time *time, enum date date, bool local, const char *custom_format);\nconst char *mkfilesize(unsigned long size, enum file_size format);\nconst char *mkauthor(const struct ident *ident, int cols, enum author author);\nconst char *mkmode(mode_t mode);\nconst char *mkstatus(const char status, enum status_label label);\n\n#define author_trim(cols) (cols == 0 || cols > 10)\n\n/*\n * Allocation helper.\n */\n\nvoid *chunk_allocator(void *mem, size_t type_size, size_t chunk_size, size_t size, size_t increase);\n\n#define DEFINE_ALLOCATOR(name, type, chunk_size)\t\t\t\t\\\nstatic type *\t\t\t\t\t\t\t\t\t\\\nname(type **mem, size_t size, size_t increase)\t\t\t\t\t\\\n{\t\t\t\t\t\t\t\t\t\t\\\n\ttype *tmp;\t\t\t\t\t\t\t\t\\\n\t\t\t\t\t\t\t\t\t\t\\\n\tassert(mem);\t\t\t\t\t\t\t\t\\\n\tif (mem == NULL)\t\t\t\t\t\t\t\\\n\t\treturn NULL;\t\t\t\t\t\t\t\\\n\t\t\t\t\t\t\t\t\t\t\\\n\ttmp = chunk_allocator(*mem, sizeof(type), chunk_size, size, increase);\t\\\n\tif (tmp)\t\t\t\t\t\t\t\t\\\n\t\t*mem = tmp;\t\t\t\t\t\t\t\\\n\treturn tmp;\t\t\t\t\t\t\t\t\\\n}\n\nvoid sigsegv_handler(int sig);\n\n#endif\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/view.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_VIEW_H\n#define TIG_VIEW_H\n\n#include \"tig/tig.h\"\n#include \"tig/types.h\"\n#include \"tig/argv.h\"\n#include \"tig/watch.h\"\n#include \"tig/io.h\"\n#include \"tig/line.h\"\n#include \"tig/keys.h\"\n#include \"tig/options.h\"\n\nstruct view_ops;\n\nstruct box_cell {\n\tenum line_type type;\n\tsize_t length;\n};\n\nstruct box {\n\tconst char *text;\n\tsize_t cells;\n\tstruct box_cell cell[1];\n};\n\nstruct line {\n\tenum line_type type;\n\tunsigned int lineno:24;\n\n\t/* State flags */\n\tunsigned int selected:1;\n\tunsigned int dirty:1;\n\tunsigned int cleareol:1;\n\tunsigned int wrapped:1;\n\tunsigned int commit_title:1;\n\tunsigned int no_commit_refs:1;\n\tunsigned int graph_indent:1;\n\tunsigned int search_result:1;\n\n\tvoid *data;\t\t/* User data */\n};\n\nenum view_flag {\n\tVIEW_NO_FLAGS = 0,\n\tVIEW_CUSTOM_STATUS\t= 1 << 1,\n\tVIEW_ADD_DESCRIBE_REF\t= 1 << 2,\n\tVIEW_ADD_PAGER_REFS\t= 1 << 3,\n\tVIEW_OPEN_DIFF\t\t= 1 << 4,\n\tVIEW_NO_REF\t\t= 1 << 5,\n\tVIEW_NO_GIT_DIR\t\t= 1 << 6,\n\tVIEW_DIFF_LIKE\t\t= 1 << 7,\n\tVIEW_BLAME_LIKE\t\t= 1 << 8,\n\tVIEW_SEND_CHILD_ENTER\t= 1 << 9,\n\tVIEW_FILE_FILTER\t= 1 << 10,\n\tVIEW_REV_FILTER\t\t= 1 << 11,\n\tVIEW_LOG_LIKE\t\t= 1 << 12,\n\tVIEW_STATUS_LIKE\t= 1 << 13,\n\tVIEW_REFRESH\t\t= 1 << 14,\n\tVIEW_GREP_LIKE\t\t= 1 << 15,\n\tVIEW_SORTABLE\t\t= 1 << 16,\n\tVIEW_FLEX_WIDTH\t\t= 1 << 17,\n\tVIEW_RESET_DISPLAY\t= 1 << 18,\n};\n\n#define view_has_flags(view, flag)\t((view)->ops->flags & (flag))\n#define view_can_refresh(view) \\\n\t(view_has_flags(view, VIEW_REFRESH) && !(view)->unrefreshable)\n\nstruct position {\n\tunsigned long offset;\t/* Offset of the window top */\n\tunsigned long col;\t/* Offset from the window side. */\n\tunsigned long lineno;\t/* Current line number */\n};\n\nstruct sort_state {\n\tstruct view_column *current;\n\tbool reverse;\n};\n\nstruct view_column {\n\tstruct view_column *next;\n\tenum view_column_type type;\n\tint width;\n\tunion view_column_options prev_opt;\n\tunion view_column_options opt;\n\tbool hidden;\n};\n\nstruct view {\n\tconst char *name;\t/* View name */\n\n\tstruct view_ops *ops;\t/* View operations */\n\tstruct argv_env *env;\t/* View variables. */\n\n\tchar ref[SIZEOF_REF];\t/* Hovered commit reference */\n\tchar vid[SIZEOF_REF];\t/* View ID. Set to id member when updating. */\n\n\tint height, width;\t/* The width and height of the main window */\n\tWINDOW *win;\t\t/* The main window */\n\tWINDOW *title;\t\t/* The title window */\n\n\tstruct keymap *keymap;\t/* What keymap does this view have */\n\tstruct sort_state sort;\t/* Sorting information. */\n\n\t/* Navigation */\n\tstruct position pos;\t/* Current position. */\n\tstruct position prev_pos; /* Previous position. */\n\n\t/* View columns rendering state */\n\tstruct view_column *columns;\n\n\t/* Searching */\n\tchar grep[SIZEOF_STR];\t/* Search string */\n\tregex_t *regex;\t\t/* Pre-compiled regexp */\n\tunsigned int *matched_line;\n\tsize_t matched_lines;\n\n\t/* If non-NULL, points to the view that opened this view. If this view\n\t * is closed tig will switch back to the parent view. */\n\tstruct view *parent;\n\tstruct view *prev;\n\n\t/* Buffering */\n\tsize_t lines;\t\t/* Total number of lines */\n\tstruct line *line;\t/* Line index */\n\n\t/* Number of lines with custom status, not to be counted in the\n\t * view title. */\n\tunsigned int custom_lines;\n\n\t/* Drawing */\n\tstruct line *curline;\t/* Line currently being drawn. */\n\tenum line_type curtype;\t/* Attribute currently used for drawing. */\n\tunsigned long col;\t/* Column when drawing. */\n\tbool force_redraw;\t/* Whether to force a redraw after reading. */\n\n\t/* Loading */\n\tconst char **argv;\t/* Shell command arguments. */\n\tconst char *dir;\t/* Directory from which to execute. */\n\tstruct io io;\n\tstruct io *pipe;\n\ttime_t start_time;\n\ttime_t update_secs;\n\tstruct encoding *encoding;\n\tbool unrefreshable;\n\tstruct watch watch;\n\n\t/* Private data */\n\tvoid *private;\n};\n\n#define DEFINE_VIEW(name) struct view name ##_view = { #name, &name##_ops, &argv_env }\n\nenum open_flags {\n\tOPEN_DEFAULT = 0,\t/* Use default view switching. */\n\tOPEN_STDIN = 1,\t\t/* Open in pager mode. */\n\tOPEN_FORWARD_STDIN = 2,\t/* Forward stdin to I/O process. */\n\tOPEN_SPLIT = 4,\t\t/* Split current view. */\n\tOPEN_RELOAD = 8,\t/* Reload view even if it is the current. */\n\tOPEN_REFRESH = 16,\t/* Refresh view using previous command. */\n\tOPEN_PREPARED = 32,\t/* Open already prepared command. */\n\tOPEN_EXTRA = 64,\t/* Open extra data from command. */\n\tOPEN_WITH_STDERR = 128,\t/* Redirect stderr to stdin. */\n\n\tOPEN_PAGER_MODE = OPEN_STDIN | OPEN_FORWARD_STDIN,\n\tOPEN_ALWAYS_LOAD = OPEN_RELOAD | OPEN_REFRESH | OPEN_PREPARED | OPEN_EXTRA | OPEN_PAGER_MODE,\n};\n\n#define open_in_pager_mode(flags) ((flags) & OPEN_PAGER_MODE)\n#define open_from_stdin(flags) ((flags) & OPEN_STDIN)\n\nstruct view_column_data {\n\tstruct view_column *section;\n\tconst struct ident *author;\n\tconst struct ident *committer;\n\tconst char *commit_title;\n\tconst struct time *date;\n\tconst char *file_name;\n\tconst unsigned long *file_size;\n\tconst struct graph *graph;\n\tconst struct graph_canvas *graph_canvas;\n\tconst char *id;\n\tconst unsigned long *line_number;\n\tconst mode_t *mode;\n\tconst struct ref *ref;\n\tconst struct ref *refs;\n\tconst char *status;\n\tconst char *text;\n\tconst struct box *box;\n};\n\n#define view_column_bit(id) (1 << VIEW_COLUMN_##id)\n#define view_has_column(view, id) ((view)->ops->column_bits & view_column_bit(id))\n\n#define view_column_name(id) enum_name(view_column_type_map->entries[id].name)\n\nstruct view_ops {\n\t/* What type of content being displayed. Used in the title bar. */\n\tconst char *type;\n\t/* Points to either of ref_{head,commit,blob} */\n\tconst char *id;\n\t/* Flags to control the view behavior. */\n\tenum view_flag flags;\n\t/* Size of private data. */\n\tsize_t private_size;\n\t/* Open and reads in all view content. */\n\tenum status_code (*open)(struct view *view, enum open_flags flags);\n\t/* Read one line; updates view->line. */\n\tbool (*read)(struct view *view, struct buffer *buf, bool force_stop);\n\t/* Draw one line; @lineno must be < view->height. */\n\tbool (*draw)(struct view *view, struct line *line, unsigned int lineno);\n\t/* Depending on view handle a special requests. */\n\tenum request (*request)(struct view *view, enum request request, struct line *line);\n\t/* Search for regexp in a line. */\n\tbool (*grep)(struct view *view, struct line *line);\n\t/* Select line */\n\tvoid (*select)(struct view *view, struct line *line);\n\t/* Release resources when reloading the view */\n\tvoid (*done)(struct view *view);\n\t/* Supported view columns. */\n\tunsigned long column_bits;\n\t/* Extract line information. */\n\tbool (*get_column_data)(struct view *view, const struct line *line, struct view_column_data *column_data);\n};\n\n/*\n * Global view state.\n */\n\nstruct view *get_view(int index);\n\n#define foreach_view(view, i) \\\n\tfor (i = 0; (view = get_view(i)); i++)\n\n#define view_has_line(view, line_) \\\n\t((view)->line <= (line_) && (line_) < (view)->line + (view)->lines)\n\n/*\n * Navigation\n */\n\nbool goto_view_line(struct view *view, unsigned long offset, unsigned long lineno);\nvoid select_view_line(struct view *view, unsigned long lineno);\nvoid do_scroll_view(struct view *view, int lines);\nvoid scroll_view(struct view *view, enum request request);\nvoid move_view(struct view *view, enum request request);\nvoid goto_id(struct view *view, const char *expression, bool from_start, bool save_search);\n\n/*\n * View history\n */\n\nstruct view_state {\n\tstruct view_state *prev;\t/* Entry below this in the stack */\n\tstruct position position;\t/* View position to restore */\n\tvoid *data;\t\t\t/* View specific state */\n};\n\nstruct view_history {\n\tsize_t state_alloc;\n\tstruct view_state *stack;\n\tstruct position position;\n};\n\nstruct view_state *push_view_history_state(struct view_history *history, struct position *position, void *data);\nbool pop_view_history_state(struct view_history *history, struct position *position, void *data);\nvoid reset_view_history(struct view_history *history);\n\n/*\n * View opening\n */\n\nvoid split_view(struct view *prev, struct view *view);\nvoid maximize_view(struct view *view, bool redraw);\nvoid load_view(struct view *view, struct view *prev, enum open_flags flags);\n\n#define refresh_view(view) load_view(view, NULL, OPEN_REFRESH)\n#define reload_view(view) load_view(view, NULL, OPEN_RELOAD)\n\nvoid open_view(struct view *prev, struct view *view, enum open_flags flags);\nvoid open_argv(struct view *prev, struct view *view, const char *argv[], const char *dir, enum open_flags flags);\nbool view_exec(struct view *view, enum open_flags flags);\n\n/*\n * Various utilities.\n */\n\n#define get_sort_field(view) ((view)->sort.current->type)\nvoid resort_view(struct view *view, bool renumber);\nvoid sort_view(struct view *view, bool change_field);\n\nstruct view_column *get_view_column(struct view *view, enum view_column_type type);\nbool view_column_grep(struct view *view, struct line *line);\nbool view_column_info_changed(struct view *view, bool update);\nvoid view_column_reset(struct view *view);\nbool view_column_info_update(struct view *view, struct line *line);\nenum status_code parse_view_config(struct view_column **column, const char *view_name, const char *argv[]);\nenum status_code parse_view_column_config(const char *view_name, enum view_column_type type, const char *option_name, const char *argv[]);\nenum status_code format_view_config(struct view_column *column, char buf[], size_t bufsize);\nbool view_has_wrapped_lines(struct view *view);\n\nstruct line *\nfind_line_by_type(struct view *view, struct line *line, enum line_type type, int direction, enum line_type fence);\n\n#define find_prev_line_by_type(view, line, type) \\\n\tfind_line_by_type(view, line, type, -1, LINE_NONE)\n\n#define find_next_line_by_type(view, line, type) \\\n\tfind_line_by_type(view, line, type, 1, LINE_NONE)\n\n#define find_prev_line_in_commit_by_type(view, line, type) \\\n\tfind_line_by_type(view, line, type, -1, LINE_COMMIT)\n\n#define is_initial_view(view) (!(view)->prev && !(view)->argv)\n#define failed_to_load_initial_view(view) (!(view)->prev && !(view)->lines)\n\n#define get_view_color(view, type)\tget_line_color((view)->keymap->name, type)\n#define get_view_attr(view, type)\tget_line_attr((view)->keymap->name, type)\n\nenum request view_request(struct view *view, enum request request);\n\n/*\n * Incremental updating\n */\n\nstatic inline bool\ncheck_position(struct position *pos)\n{\n\treturn pos->lineno || pos->col || pos->offset;\n}\n\nstatic inline void\nclear_position(struct position *pos)\n{\n\tmemset(pos, 0, sizeof(*pos));\n}\n\nvoid reset_view(struct view *view);\nenum status_code begin_update(struct view *view, const char *dir, const char **argv, enum open_flags flags);\nvoid end_update(struct view *view, bool force);\nbool update_view(struct view *view);\nvoid update_view_title(struct view *view);\n\n/*\n * Line utilities.\n */\n\nstatic inline const char *\nbox_text(const struct line *line)\n{\n\tconst struct box *box = line->data;\n\n\treturn box->text;\n}\n\nstatic inline size_t\nbox_text_length(const struct box *box)\n{\n\tsize_t i, length = 0;\n\n\tfor (i = 0; i < box->cells; i++)\n\t\tlength += box->cell[i].length;\n\n\treturn length;\n}\n\nstatic inline size_t\nbox_sizeof(const struct box *box, size_t extra_cells, size_t extra_textlen)\n{\n\tsize_t textlen = (box ? box_text_length(box) : 0) + extra_textlen;\n\tsize_t cells = (box ? box->cells : 0) + extra_cells;\n\tsize_t cells_size = cells > 1 ? sizeof(box->cell) * (cells - 1) : 0;\n\n\treturn sizeof(*box) + cells_size + textlen + 1;\n}\n\nvoid box_text_copy(struct box *box, size_t cells, const char *src, size_t srclen);\n\nstruct line *add_line_at(struct view *view, unsigned long pos, const void *data, enum line_type type, size_t data_size, bool custom);\nstruct line *add_line(struct view *view, const void *data, enum line_type type, size_t data_size, bool custom);\nstruct line *add_line_alloc_(struct view *view, void **ptr, enum line_type type, size_t data_size, bool custom);\n\n#define add_line_alloc(view, data_ptr, type, extra_size, custom) \\\n\tadd_line_alloc_(view, (void **) data_ptr, type, sizeof(**data_ptr) + extra_size, custom)\n\nstruct line *add_line_nodata(struct view *view, enum line_type type);\nstruct line *add_line_text(struct view *view, const char *text, enum line_type type);\nstruct line *add_line_text_at(struct view *view, unsigned long pos, const char *text, enum line_type type, size_t cells);\nstruct line *add_line_text_at_(struct view *view, unsigned long pos, const char *text, size_t textlen, enum line_type type, size_t cells, bool custom);\nstruct line * PRINTF_LIKE(3, 4) add_line_format(struct view *view, enum line_type type, const char *fmt, ...);\nbool append_line_format(struct view *view, struct line *line, const char *fmt, ...);\n\n#endif\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "include/tig/watch.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#ifndef TIG_WATCH_H\n#define TIG_WATCH_H\n\n#include \"tig/tig.h\"\n#include \"tig/types.h\"\n\nenum watch_event {\n\tWATCH_EVENT_SWITCH_VIEW,\n\tWATCH_EVENT_AFTER_COMMAND,\n\tWATCH_EVENT_LOAD,\n\tWATCH_EVENT_PERIODIC,\n};\n\nenum watch_trigger {\n\tWATCH_NONE\t\t\t= 0,\n\tWATCH_INDEX_STAGED_YES\t\t= 1 << 0,\n\tWATCH_INDEX_STAGED_NO\t\t= 1 << 1,\n\tWATCH_INDEX_UNSTAGED_YES\t= 1 << 2,\n\tWATCH_INDEX_UNSTAGED_NO\t\t= 1 << 3,\n\tWATCH_INDEX_UNTRACKED_YES\t= 1 << 4,\n\tWATCH_INDEX_UNTRACKED_NO\t= 1 << 5,\n\tWATCH_HEAD\t\t\t= 1 << 6,\n\tWATCH_STASH\t\t\t= 1 << 7,\n\tWATCH_REFS\t\t\t= 1 << 8,\n\n\tWATCH_INDEX_STAGED = WATCH_INDEX_STAGED_YES | WATCH_INDEX_STAGED_NO,\n\tWATCH_INDEX_UNSTAGED = WATCH_INDEX_UNSTAGED_YES | WATCH_INDEX_UNSTAGED_NO,\n\tWATCH_INDEX_UNTRACKED = WATCH_INDEX_UNTRACKED_YES | WATCH_INDEX_UNTRACKED_NO,\n\tWATCH_INDEX = WATCH_INDEX_STAGED | WATCH_INDEX_UNSTAGED | WATCH_INDEX_UNTRACKED,\n};\n\nstruct watch {\n\tstruct watch *next;\n\tenum watch_trigger triggers;\n\tenum watch_trigger changed;\n\tenum watch_trigger state;\n};\n\nvoid watch_register(struct watch *watch, enum watch_trigger triggers);\nvoid watch_unregister(struct watch *watch);\nbool watch_dirty(struct watch *watch);\nenum watch_trigger watch_update(enum watch_event event);\nenum watch_trigger watch_update_single(struct watch *watch, enum watch_event event);\nvoid watch_apply(struct watch *source, enum watch_trigger changed);\nint watch_periodic(int interval);\n\n#endif\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "snap/snapcraft.yaml",
    "content": "name: tig\nversion: git\nsummary: Text-mode interface for git\nlicense: GPL-2.0-or-later\ndescription: |\n  Tig is an ncurses-based text-mode interface for Git. It functions mainly as a\n  Git repository browser, but can also assist in staging changes for commit at\n  chunk level and act as a pager for output from various Git commands.\n\ngrade: devel # must be 'stable' to release into candidate/stable channels\nconfinement: strict\n\nbase: core18\n\nplugs:\n  config-tig:\n    interface: personal-files\n    read:\n      - $HOME/.tigrc\n\napps:\n  tig:\n    command: bin/tig\n    plugs:\n      - config-tig\n\nparts:\n  tig:\n    source: .\n    plugin: autotools\n    build-packages:\n      - pkg-config\n      - libncursesw5-dev\n      - libreadline-dev\n"
  },
  {
    "path": "src/apps.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/tig.h\"\n#include \"tig/io.h\"\n#include \"tig/apps.h\"\n\n/*\n * general\n */\n\nstatic bool\napp_oneline_buf(char *buf, size_t bufsize, struct app_external *app, const char *dir)\n{\n\tstruct io io;\n\treturn io_run(&io, IO_RD, dir, app->env, app->argv) \\\n\t\t&& io_read_buf(&io, buf, bufsize, false);\n}\n\n/*\n * git\n */\n\nstatic bool\napp_git_exec_path(char *path, size_t path_len)\n{\n\tstatic char exec_path[SIZEOF_STR] = \"\";\n\tstruct app_external app = {\n\t\t{ \"git\", \"--exec-path\", NULL },\n\t\t{ \"GIT_CONFIG=/dev/null\", NULL },\n\t};\n\n\tif (!*exec_path)\n\t\tapp_oneline_buf(exec_path, sizeof(exec_path), &app, NULL);\n\n\tif (!*exec_path)\n\t\treturn false;\n\n\tstring_ncopy_do(path, path_len, exec_path, sizeof(exec_path));\n\treturn true;\n}\n\n/*\n * diff-highlight\n */\n\nstatic bool\napp_diff_highlight_path_search(char *dest, size_t destlen, const char *query)\n{\n\tconst char *env_path = getenv(\"PATH\");\n\tchar env_path_plus[SIZEOF_MED_STR];\n\tchar exec_path[SIZEOF_STR];\n\n\tif (!query || !*query)\n\t\treturn false;\n\n\tif (strchr(query, '~'))\n\t\treturn path_expand(dest, destlen, query);\n\n\tif (strchr(query, '/')) {\n\t\t/* can only be interpreted as a fully qualified path */\n\t\tstring_ncopy_do(dest, destlen, query, strlen(query));\n\t\treturn true;\n\t}\n\n\tif (!env_path || !*env_path)\n\t\tenv_path = _PATH_DEFPATH;\n\n\tif (app_git_exec_path(exec_path, sizeof(exec_path)))\n\t\tstring_format(env_path_plus, \"%s:%s/%s:%s/%s:%s/%s:%s/%s\",\n\t\t\t      env_path,\n\t\t\t      exec_path, \"../../share/git-core/contrib/diff-highlight\",\n\t\t\t      exec_path, \"../share/git-core/contrib/diff-highlight\",\n\t\t\t      exec_path, \"../../share/git/contrib/diff-highlight\",\n\t\t\t      exec_path, \"../share/git/contrib/diff-highlight\");\n\telse\n\t\tstring_ncopy(env_path_plus, env_path, strlen(env_path));\n\n\tif (!path_search(dest, destlen, query, env_path_plus, X_OK)\n\t    && !strcmp(query, \"diff-highlight\")\n\t    && !path_search(dest, destlen, \"diff-highlight.perl\", env_path_plus, R_OK))\n\t\treturn false;\n\n\treturn true;\n}\n\nstruct app_external\n*app_diff_highlight_load(const char *query)\n{\n\tstatic struct app_external dhlt_app = { { NULL }, { \"GIT_CONFIG=/dev/null\", NULL } };\n\tstatic bool did_search = false;\n\tstatic char dhlt_path[SIZEOF_STR];\n\tstatic char perl_path[SIZEOF_STR];\n\tstatic char perl_include[SIZEOF_STR];\n\n\tif (!did_search\n\t    && app_diff_highlight_path_search(dhlt_path, sizeof(dhlt_path), query)\n\t    && *dhlt_path) {\n\t\tif (suffixcmp(dhlt_path, strlen(dhlt_path), \"/diff-highlight.perl\")) {\n\t\t\tdhlt_app.argv[0] = dhlt_path;\n\t\t\tdhlt_app.argv[1] = NULL;\n\t\t} else if (path_search(perl_path, sizeof(perl_path), \"perl\", getenv(\"PATH\"), X_OK)) {\n\t\t\t/* if the package manager failed to \"make install\" within the contrib dir, rescue via */\n\t\t\t/* perl -MDiffHighlight -I/path/containing /path/containing/diff-highlight.perl */\n\t\t\tstring_format(perl_include, \"-I%s\", dirname(dhlt_path));\n\t\t\tdhlt_app.argv[0] = perl_path;\n\t\t\tdhlt_app.argv[1] = \"-MDiffHighlight\";\n\t\t\tdhlt_app.argv[2] = perl_include;\n\t\t\tdhlt_app.argv[3] = dhlt_path;\n\t\t\tdhlt_app.argv[4] = NULL;\n\t\t}\n\t}\n\tdid_search = true;\n\n\treturn &dhlt_app;\n}\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/argv.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/tig.h\"\n#include \"tig/argv.h\"\n#include \"tig/repo.h\"\n#include \"tig/options.h\"\n#include \"tig/prompt.h\"\n\nstatic bool\nconcat_argv(const char *argv[], char *buf, size_t buflen, const char *sep, bool quoted)\n{\n\tsize_t bufpos, argc;\n\n\tfor (bufpos = 0, argc = 0; argv[argc]; argc++) {\n\t\tconst char *arg_sep = argc ? sep : \"\";\n\t\tconst char *arg = argv[argc];\n\n\t\tif (quoted && arg[strcspn(arg, \" \\t\\\"\")]) {\n\t\t\tif (!string_nformat(buf, buflen, &bufpos, \"%s\\\"\", arg_sep))\n\t\t\t\treturn false;\n\n\t\t\twhile (*arg) {\n\t\t\t\tint pos = strcspn(arg, \"\\\"\");\n\t\t\t\tconst char *qesc = arg[pos] == '\"' ? \"\\\\\\\"\" : \"\";\n\n\t\t\t\tif (!string_nformat(buf, buflen, &bufpos, \"%.*s%s\", pos, arg, qesc))\n\t\t\t\t\treturn false;\n\t\t\t\tif (!arg[pos])\n\t\t\t\t\tbreak;\n\t\t\t\telse\n\t\t\t\t\targ += pos + 1;\n\t\t\t}\n\n\t\t\tif (!string_nformat(buf, buflen, &bufpos, \"\\\"\"))\n\t\t\t\treturn false;\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!string_nformat(buf, buflen, &bufpos, \"%s%s\", arg_sep, arg))\n\t\t\treturn false;\n\t}\n\n\treturn true;\n}\n\nchar *\nargv_to_string_alloc(const char *argv[], const char *sep)\n{\n\tsize_t i, size = 0;\n\tchar *buf;\n\n\tfor (i = 0; argv[i]; i++)\n\t\tsize += strlen(argv[i]);\n\n\tbuf = malloc(size + 1);\n\tif (buf && argv_to_string(argv, buf, size + 1, sep))\n\t\treturn buf;\n\tfree(buf);\n\treturn NULL;\n}\n\nbool\nargv_to_string_quoted(const char *argv[], char *buf, size_t buflen, const char *sep)\n{\n\treturn concat_argv(argv, buf, buflen, sep, true);\n}\n\nbool\nargv_to_string(const char *argv[], char *buf, size_t buflen, const char *sep)\n{\n\treturn concat_argv(argv, buf, buflen, sep, false);\n}\n\nstatic char *\nparse_arg(char **cmd, bool remove_quotes)\n{\n\tint quote = 0;\n\tchar *arg = *cmd;\n\tchar *next, *pos;\n\n\tfor (pos = next = arg; *pos; pos++) {\n\t\tint c = *pos;\n\n\t\tif (c == '\"' || c == '\\'') {\n\t\t\tif (quote == c) {\n\t\t\t\tquote = 0;\n\t\t\t\tif (remove_quotes) {\n\t\t\t\t\tif (pos == arg) {\n\t\t\t\t\t\targ++;\n\t\t\t\t\t\tnext++;\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t} else if (!quote) {\n\t\t\t\tquote = c;\n\t\t\t\tif (remove_quotes) {\n\t\t\t\t\tif (pos == arg) {\n\t\t\t\t\t\targ++;\n\t\t\t\t\t\tnext++;\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else if (quote && c == '\\\\') {\n\t\t\tif (remove_quotes) {\n\t\t\t\tif (pos == arg) {\n\t\t\t\t\targ++;\n\t\t\t\t\tnext++;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t*next++ = *pos;\n\t\t\t}\n\t\t\tpos++;\n\t\t\tif (!*pos)\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (!quote && isspace((unsigned char)c))\n\t\t\tbreak;\n\n\t\t*next++ = *pos;\n\t}\n\n\tif (*pos)\n\t\t*cmd = pos + 1;\n\telse\n\t\t*cmd = pos;\n\t*next = 0;\n\treturn (!remove_quotes || !quote) ? arg : NULL;\n}\n\nstatic bool\nsplit_argv_string(const char *argv[], int *argc, char *cmd, bool remove_quotes)\n{\n\twhile (*cmd && *argc < SIZEOF_ARG) {\n\t\tchar *arg = parse_arg(&cmd, remove_quotes);\n\n\t\tif (!arg)\n\t\t\tbreak;\n\t\targv[(*argc)++] = arg;\n\t\tcmd = string_trim(cmd);\n\t}\n\n\tif (*argc < SIZEOF_ARG)\n\t\targv[*argc] = NULL;\n\treturn *argc < SIZEOF_ARG;\n}\n\nbool\nargv_from_string_no_quotes(const char *argv[], int *argc, char *cmd)\n{\n\treturn split_argv_string(argv, argc, cmd, true);\n}\n\nbool\nargv_from_string(const char *argv[], int *argc, char *cmd)\n{\n\treturn split_argv_string(argv, argc, cmd, false);\n}\n\nvoid\nargv_free(const char *argv[])\n{\n\tint argc;\n\n\tif (!argv)\n\t\treturn;\n\tfor (argc = 0; argv[argc]; argc++)\n\t\tfree((void *) argv[argc]);\n\targv[0] = NULL;\n}\n\nsize_t\nargv_size(const char **argv)\n{\n\tint argc = 0;\n\n\twhile (argv && argv[argc])\n\t\targc++;\n\n\treturn argc;\n}\n\nbool\nargv_contains(const char **argv, const char *arg)\n{\n\tint i;\n\n\tfor (i = 0; argv && argv[i]; i++)\n\t\tif (!strcmp(argv[i], arg))\n\t\t\treturn true;\n\treturn false;\n}\n\nbool\nargv_containsn(const char **argv, const char *arg, size_t arglen)\n{\n\tint i;\n\n\tfor (i = 0; argv && argv[i]; i++)\n\t\tif (!strncmp(argv[i], arg, arglen))\n\t\t\treturn true;\n\treturn false;\n}\n\nDEFINE_ALLOCATOR(argv_realloc, const char *, SIZEOF_ARG)\n\nbool\nargv_appendn(const char ***argv, const char *arg, size_t arglen)\n{\n\tsize_t argc = argv_size(*argv);\n\tchar *alloc;\n\n\tif (!*arg && argc > 0)\n\t\treturn true;\n\n\tif (!argv_realloc(argv, argc, 2))\n\t\treturn false;\n\n\talloc = strndup(arg, arglen);\n\tif (!alloc)\n\t\tdie(\"Failed to allocate arg\");\n\n\t(*argv)[argc++] = alloc;\n\t(*argv)[argc] = NULL;\n\n\treturn true;\n}\n\n\nbool\nargv_append(const char ***argv, const char *arg)\n{\n\treturn argv_appendn(argv, arg, strlen(arg));\n}\n\nbool\nargv_append_array(const char ***dst_argv, const char *src_argv[])\n{\n\tint i;\n\n\tfor (i = 0; src_argv && src_argv[i]; i++)\n\t\tif (!argv_append(dst_argv, src_argv[i]))\n\t\t\treturn false;\n\treturn true;\n}\n\nbool\nargv_copy(const char ***dst, const char *src[])\n{\n\tint argc;\n\n\targv_free(*dst);\n\tfor (argc = 0; src[argc]; argc++)\n\t\tif (!argv_append(dst, src[argc]))\n\t\t\treturn false;\n\treturn true;\n}\n\n/*\n * Argument formatting.\n */\n\nstruct format_context;\n\nstruct format_var {\n\tconst char *name;\n\tsize_t namelen;\n\tbool (*formatter)(struct format_context *, struct format_var *);\n\tvoid *value_ref;\n\tconst char *value_if_empty;\n};\n\nstruct format_context {\n\tstruct format_var *vars;\n\tsize_t vars_size;\n\tchar buf[SIZEOF_MED_STR];\n\tsize_t bufpos;\n\tint argv_flags;\n};\n\n#define ARGV_ENV_INIT(type, name, ifempty, initval)\tinitval,\n\nstruct argv_env argv_env = {\n\tARGV_ENV_INFO(ARGV_ENV_INIT)\n};\n\nstatic bool\nformat_expand_arg(struct format_context *format, const char *name, const char *end)\n{\n\tstruct format_var *vars = format->vars;\n\tint i;\n\n\tif (!prefixcmp(name, \"%(prompt\")) {\n\t\tconst char *prompt = \"Command argument: \";\n\t\tchar msgbuf[SIZEOF_STR];\n\t\tconst char *value;\n\t\tconst char *msgstart = name + STRING_SIZE(\"%(prompt\");\n\t\tconst int msglen = end - msgstart - 1;\n\n\t\tif (end && msglen > 0 && string_format(msgbuf, \"%.*s\", msglen, msgstart)) {\n\t\t\tconst char *msg = msgbuf;\n\n\t\t\twhile (isspace((unsigned char)*msg))\n\t\t\t\tmsg++;\n\t\t\tif (*msg)\n\t\t\t\tprompt = msg;\n\t\t}\n\n\t\tvalue = read_prompt(prompt);\n\t\tif (value == NULL)\n\t\t\treturn false;\n\t\treturn string_format_from(format->buf, &format->bufpos, \"%s\", value);\n\t}\n\n\tfor (i = 0; i < format->vars_size; i++) {\n\t\tif (string_enum_compare(name, vars[i].name, vars[i].namelen))\n\t\t\tcontinue;\n\n\t\tif (vars[i].value_ref == &argv_env.file && !(format->argv_flags & argv_flag_file_filter))\n\t\t\treturn true;\n\n\t\treturn vars[i].formatter(format, &vars[i]);\n\t}\n\n\treturn false;\n}\n\nstatic bool\nformat_append_arg(struct format_context *format, const char ***dst_argv, const char *arg)\n{\n\tmemset(format->buf, 0, sizeof(format->buf));\n\tformat->bufpos = 0;\n\n\twhile (arg) {\n\t\tconst char *var = strstr(arg, \"%(\");\n\t\tconst char *esc = strstr(arg, \"%%\");\n\t\tbool is_escaped = esc && (esc < var || !var);\n\t\tconst char *closing = var && !is_escaped ? strchr(var, ')') : NULL;\n\t\tconst char *next = is_escaped ? esc + 2 : closing ? closing + 1 : NULL;\n\t\tint len = var && !is_escaped ? var - arg : esc ? esc - arg + 1 : strlen(arg);\n\n\t\tif (var && !is_escaped && !closing)\n\t\t\treturn false;\n\n\t\tif (len && !string_format_from(format->buf, &format->bufpos, \"%.*s\", len, arg))\n\t\t\treturn false;\n\n\t\tif (var && !is_escaped && !format_expand_arg(format, var, next))\n\t\t\treturn false;\n\n\t\targ = next;\n\t}\n\n\treturn argv_append(dst_argv, format->buf);\n}\n\nstatic bool\nformat_append_argv(struct format_context *format, const char ***dst_argv, const char *src_argv[])\n{\n\tint argc;\n\n\tif (!src_argv)\n\t\treturn argv_append(dst_argv, \"\");\n\n\tfor (argc = 0; src_argv[argc]; argc++)\n\t\tif (!format_append_arg(format, dst_argv, src_argv[argc]))\n\t\t\treturn false;\n\n\treturn true;\n}\n\nstatic bool\nargv_string_formatter(struct format_context *format, struct format_var *var)\n{\n\targv_string *value_ref = var->value_ref;\n\tconst char *value = *value_ref;\n\n\tif (!*value)\n\t\tvalue = var->value_if_empty;\n\n\tif (!*value)\n\t\treturn true;\n\n\treturn string_format_from(format->buf, &format->bufpos, \"%s\", value);\n}\n\nstatic bool\nargv_number_formatter(struct format_context *format, struct format_var *var)\n{\n\tunsigned long value = *(unsigned long *) var->value_ref;\n\n\treturn string_format_from(format->buf, &format->bufpos, \"%lu\", value);\n}\n\nstatic bool\nbool_formatter(struct format_context *format, struct format_var *var)\n{\n\tbool value = *(bool *)var->value_ref;\n\n\treturn string_format_from(format->buf, &format->bufpos, \"%s\", value ? \"true\" : \"false\");\n}\n\nstatic bool\nrepo_str_formatter(struct format_context *format, struct format_var *var)\n{\n\treturn argv_string_formatter(format, var);\n}\n\nstatic bool\nrepo_ref_formatter(struct format_context *format, struct format_var *var)\n{\n\treturn argv_string_formatter(format, var);\n}\n\nstatic bool\nrepo_rev_formatter(struct format_context *format, struct format_var *var)\n{\n\treturn argv_string_formatter(format, var);\n}\n\nbool\nargv_format(struct argv_env *argv_env, const char ***dst_argv, const char *src_argv[], int flags)\n{\n\tstruct format_var vars[] = {\n#define FORMAT_VAR(type, name, ifempty, initval) \\\n\t{ \"%(\" #name \")\", STRING_SIZE(\"%(\" #name \")\"), type ## _formatter, &argv_env->name, ifempty },\n\t\tARGV_ENV_INFO(FORMAT_VAR)\n#define FORMAT_REPO_VAR(type, name) \\\n\t{ \"%(repo:\" #name \")\", STRING_SIZE(\"%(repo:\" #name \")\"), type ## _formatter, &repo.name, \"\" },\n\t\tREPO_INFO(FORMAT_REPO_VAR)\n\t};\n\tstruct format_context format = { vars, ARRAY_SIZE(vars), \"\", 0, flags };\n\tint argc;\n\n\targv_free(*dst_argv);\n\n\tfor (argc = 0; src_argv[argc]; argc++) {\n\t\tconst char *arg = src_argv[argc];\n\n\t\tif (!strcmp(arg, \"%(fileargs)\")) {\n\t\t\tif ((flags & argv_flag_file_filter) &&\n\t\t\t    !(opt_file_args ? argv_append_array(dst_argv, opt_file_args)\n\t\t\t\t\t    : argv_append(dst_argv, \"\")))\n\t\t\t\tbreak;\n\n\t\t} else if (!strcmp(arg, DIFF_ARGS)) {\n\t\t\tif (!format_append_argv(&format, dst_argv, opt_diff_options))\n\t\t\t\tbreak;\n\n\t\t} else if (!strcmp(arg, \"%(blameargs)\")) {\n\t\t\tif (!format_append_argv(&format, dst_argv, opt_blame_options))\n\t\t\t\tbreak;\n\n\t\t} else if (!strcmp(arg, \"%(logargs)\")) {\n\t\t\tif (!format_append_argv(&format, dst_argv, opt_log_options))\n\t\t\t\tbreak;\n\n\t\t} else if (!strcmp(arg, \"%(mainargs)\")) {\n\t\t\tif (!format_append_argv(&format, dst_argv, opt_main_options))\n\t\t\t\tbreak;\n\n\t\t} else if (!strcmp(arg, \"%(cmdlineargs)\")) {\n\t\t\tif (!format_append_argv(&format, dst_argv, opt_cmdline_args))\n\t\t\t\tbreak;\n\n\t\t} else if (!strcmp(arg, \"%(revargs)\") ||\n\t\t\t   ((flags & argv_flag_first) && !strcmp(arg, \"%(commit)\"))) {\n\t\t\tif ((flags & argv_flag_rev_filter) &&\n\t\t\t    !(opt_rev_args ? argv_append_array(dst_argv, opt_rev_args)\n\t\t\t\t\t   : argv_append(dst_argv, \"\")))\n\t\t\t\tbreak;\n\n\t\t} else if (!format_append_arg(&format, dst_argv, arg)) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn src_argv[argc] == NULL;\n}\n\nstatic inline bool\nargv_find_rev_flag(const char *argv[], size_t argc, const char *arg, size_t arglen,\n\t\t   size_t *search_offset, bool *with_graph, bool *with_reflog)\n{\n\tint i;\n\n\tfor (i = 0; i < argc; i++) {\n\t\tconst char *flag = argv[i];\n\t\tsize_t flaglen = strlen(flag);\n\n\t\tif (flaglen > arglen || strncmp(arg, flag, flaglen))\n\t\t\tcontinue;\n\n\t\tif (search_offset)\n\t\t\t*search_offset = flaglen;\n\t\telse if (flaglen != arglen && flag[flaglen - 1] != '=')\n\t\t\tcontinue;\n\n\t\tif (with_graph)\n\t\t\t*with_graph = false;\n\t\tif (with_reflog)\n\t\t\t*with_reflog = true;\n\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nbool\nargv_parse_rev_flag(const char *arg, struct rev_flags *rev_flags)\n{\n\tstatic const char *with_graph[] = {\n\t\t\"--after=\",\n\t\t\"--all\",\n\t\t\"--all-match\",\n\t\t\"--ancestry-path\",\n\t\t\"--author-date-order\",\n\t\t\"--basic-regexp\",\n\t\t\"--before=\",\n\t\t\"--boundary\",\n\t\t\"--branches\",\n\t\t\"--branches=\",\n\t\t\"--cherry\",\n\t\t\"--cherry-mark\",\n\t\t\"--cherry-pick\",\n\t\t\"--committer=\",\n\t\t\"--date-order\",\n\t\t\"--dense\",\n\t\t\"--exclude=\",\n\t\t\"--extended-regexp\",\n\t\t\"--first-parent\",\n\t\t\"--fixed-strings\",\n\t\t\"--full-history\",\n\t\t\"--graph\",\n\t\t\"--glob=\",\n\t\t\"--left-only\",\n\t\t\"--max-parents=\",\n\t\t\"--max-age=\",\n\t\t\"--merge\",\n\t\t\"--merges\",\n\t\t\"--min-parents=\",\n\t\t\"--no-max-parents\",\n\t\t\"--no-min-parents\",\n\t\t\"--no-walk\",\n\t\t\"--perl-regexp\",\n\t\t\"--pickaxe-all\",\n\t\t\"--pickaxe-regex\",\n\t\t\"--regexp-ignore-case\",\n\t\t\"--remotes\",\n\t\t\"--remotes=\",\n\t\t\"--remove-empty\",\n\t\t\"--reverse\",\n\t\t\"--right-only\",\n\t\t\"--simplify-by-decoration\",\n\t\t\"--simplify-merges\",\n\t\t\"--since=\",\n\t\t\"--skip=\",\n\t\t\"--sparse\",\n\t\t\"--stdin\",\n\t\t\"--tags\",\n\t\t\"--tags=\",\n\t\t\"--topo-order\",\n\t\t\"--until=\",\n\t\t\"-E\",\n\t\t\"-F\",\n\t\t\"-i\",\n\t};\n\tstatic const char *no_graph[] = {\n\t\t\"--no-merges\",\n\t\t\"--follow\",\n\t\t\"--author=\",\n\t};\n\tstatic const char *with_reflog[] = {\n\t\t\"--walk-reflogs\",\n\t\t\"-g\",\n\t};\n\tstatic const char *search_no_graph[] = {\n\t\t\"--grep-reflog=\",\n\t\t\"--grep=\",\n\t\t\"-G\",\n\t\t\"-S\",\n\t\t\"-L\",\n\t};\n\tsize_t arglen = strlen(arg);\n\tbool graph = true;\n\tbool reflog = false;\n\tsize_t search = 0;\n\n\tif (argv_find_rev_flag(with_graph, ARRAY_SIZE(with_graph), arg, arglen, NULL, NULL, NULL) ||\n\t    argv_find_rev_flag(no_graph, ARRAY_SIZE(no_graph), arg, arglen, NULL, &graph, NULL) ||\n\t    argv_find_rev_flag(with_reflog, ARRAY_SIZE(with_reflog), arg, arglen, NULL, NULL, &reflog) ||\n\t    argv_find_rev_flag(search_no_graph, ARRAY_SIZE(search_no_graph), arg, arglen, &search, &graph, NULL)) {\n\t\tif (rev_flags) {\n\t\t\trev_flags->search_offset = search ? search : arglen;\n\t\t\trev_flags->with_graph = graph;\n\t\t\trev_flags->with_reflog = reflog;\n\t\t}\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nchar *\nargv_format_arg(struct argv_env *argv_env, const char *src_arg)\n{\n\tconst char *src_argv[] = { src_arg, NULL };\n\tconst char **dst_argv = NULL;\n\tchar *dst_arg = NULL;\n\n\tif (argv_format(argv_env, &dst_argv, src_argv, argv_flag_file_filter | argv_flag_rev_filter))\n\t\tdst_arg = (char *) dst_argv[0];\n\n\tfree(dst_argv);\n\treturn dst_arg;\n}\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/blame.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/io.h\"\n#include \"tig/refdb.h\"\n#include \"tig/repo.h\"\n#include \"tig/options.h\"\n#include \"tig/parse.h\"\n#include \"tig/display.h\"\n#include \"tig/view.h\"\n#include \"tig/draw.h\"\n#include \"tig/git.h\"\n#include \"tig/diff.h\"\n#include \"tig/main.h\"\n\n/*\n * Blame backend\n */\n\nstruct blame_history_state {\n\tchar id[SIZEOF_REV];\t\t/* SHA1 ID. */\n\tconst char *filename;\t\t/* Name of file. */\n};\n\nstatic struct view_history blame_view_history = { sizeof(struct blame_history_state) };\n\nstruct blame {\n\tstruct blame_commit *commit;\n\tunsigned long lineno;\n\tchar text[1];\n};\n\nstruct blame_state {\n\tstruct blame_commit *commit;\n\tstruct blame_header header;\n\tchar author[SIZEOF_STR];\n\tchar committer[SIZEOF_STR];\n\tbool auto_filename_display;\n\tconst char *filename;\n\t/* The history state for the current view is cached in the view\n\t * state so it always matches what was used to load the current blame\n\t * view. */\n\tstruct blame_history_state history_state;\n};\n\nstatic void\nblame_update_file_name_visibility(struct view *view)\n{\n\tstruct blame_state *state = view->private;\n\tstruct view_column *column = get_view_column(view, VIEW_COLUMN_FILE_NAME);\n\n\tif (!column)\n\t\treturn;\n\n\tcolumn->hidden = column->opt.file_name.display == FILENAME_NO ||\n\t\t\t (column->opt.file_name.display == FILENAME_AUTO &&\n\t\t\t  !state->auto_filename_display);\n}\n\nstatic enum status_code\nblame_open(struct view *view, enum open_flags flags)\n{\n\tstruct blame_state *state = view->private;\n\tconst char *blame_argv[] = {\n\t\t\"git\", \"blame\", encoding_arg, \"%(blameargs)\", \"-p\",\n\t\t\tview->env->ref, \"--\", view->env->file, NULL\n\t};\n\tenum status_code code;\n\tsize_t i;\n\n\tif (is_initial_view(view)) {\n\t\t/* Finish validating and setting up blame options */\n\t\tif (!opt_file_args || opt_file_args[1])\n\t\t\tusage(\"Invalid number of options to blame\");\n\n\t\tif (opt_cmdline_args) {\n\t\t\topt_blame_options = opt_cmdline_args;\n\t\t\topt_cmdline_args = NULL;\n\t\t}\n\n\t\tif (opt_commit_order == COMMIT_ORDER_REVERSE)\n\t\t\targv_append(&opt_blame_options, \"--reverse\");\n\n\t\t/*\n\t\t * flags (like \"--max-age=123\") and bottom limits (like \"^foo\")\n\t\t * will be passed as-is, and retained even if we re-blame from\n\t\t * a parent.\n\t\t *\n\t\t * Positive start points (like \"HEAD\") are placed only in\n\t\t * view->env->ref, which may be later overridden. We must\n\t\t * ensure there's only one of these.\n\t\t */\n\t\tif (opt_rev_args) {\n\t\t\tfor (i = 0; opt_rev_args[i]; i++) {\n\t\t\t\tconst char *arg = opt_rev_args[i];\n\n\t\t\t\tif (arg[0] == '-' || arg[0] == '^')\n\t\t\t\t\targv_append(&opt_blame_options, arg);\n\t\t\t\telse if (!view->env->ref[0])\n\t\t\t\t\tstring_ncopy(view->env->ref, arg, strlen(arg));\n\t\t\t\telse\n\t\t\t\t\tusage(\"Invalid number of options to blame\");\n\t\t\t}\n\t\t}\n\t}\n\n\tif (opt_blame_options) {\n\t\tfor (i = 0; opt_blame_options[i]; i++) {\n\t\t\tif (prefixcmp(opt_blame_options[i], \"-C\"))\n\t\t\t\tcontinue;\n\t\t\tstate->auto_filename_display = true;\n\t\t}\n\t}\n\n\tblame_update_file_name_visibility(view);\n\n\tif (!view->env->file[0] && opt_file_args && !opt_file_args[1]) {\n\t\tconst char *ls_tree_argv[] = {\n\t\t\t\"git\", \"ls-tree\", \"-d\", \"-z\", *view->env->ref ? view->env->ref : \"HEAD\", opt_file_args[0], NULL\n\t\t};\n\t\tchar buf[SIZEOF_STR] = \"\";\n\n\t\t/* Check that opt_file_args[0] is not a directory */\n\t\tif (!io_run_buf(ls_tree_argv, buf, sizeof(buf), NULL, false)) {\n\t\t\tif (!string_concat_path(view->env->file, (opt_file_args[0][0] == '/' ? \"\" : repo.prefix), opt_file_args[0]))\n\t\t\t\treturn error(\"Failed to setup the blame view\");\n\t\t} else if (is_initial_view(view))\n\t\t\treturn error(\"Cannot blame %s\", opt_file_args[0]);\n\t}\n\n\tif (!view->env->file[0])\n\t\treturn error(\"No file chosen, press %s to open tree view\",\n\t\t\t     get_view_key(view, REQ_VIEW_TREE));\n\n\tcode = begin_update(view, repo.exec_dir, blame_argv, flags);\n\tif (code != SUCCESS)\n\t\treturn code;\n\n\t/* First pass: remove multiple references to the same commit. */\n\tfor (i = 0; i < view->lines; i++) {\n\t\tstruct blame *blame = view->line[i].data;\n\n\t\tif (blame->commit && blame->commit->id[0])\n\t\t\tblame->commit->id[0] = 0;\n\t\telse\n\t\t\tblame->commit = NULL;\n\t}\n\n\t/* Second pass: free existing references. */\n\tfor (i = 0; i < view->lines; i++) {\n\t\tstruct blame *blame = view->line[i].data;\n\n\t\tif (blame->commit)\n\t\t\tfree(blame->commit);\n\t}\n\n\tstring_copy_rev(state->history_state.id, view->env->ref);\n\tstate->history_state.filename = get_path(view->env->file);\n\tif (!state->history_state.filename)\n\t\treturn ERROR_OUT_OF_MEMORY;\n\tstring_format(view->vid, \"%s\", view->env->file);\n\tstring_format(view->ref, \"%s ...\", view->env->file);\n\n\treturn SUCCESS;\n}\n\nstatic struct blame_commit *\nget_blame_commit(struct view *view, const char *id)\n{\n\tsize_t i;\n\n\tfor (i = 0; i < view->lines; i++) {\n\t\tstruct blame *blame = view->line[i].data;\n\n\t\tif (!blame->commit)\n\t\t\tcontinue;\n\n\t\tif (!strncmp(blame->commit->id, id, SIZEOF_REV - 1))\n\t\t\treturn blame->commit;\n\t}\n\n\t{\n\t\tstruct blame_commit *commit = calloc(1, sizeof(*commit));\n\n\t\tif (commit)\n\t\t\tstring_ncopy(commit->id, id, SIZEOF_REV);\n\t\treturn commit;\n\t}\n}\n\nstatic struct blame_commit *\nread_blame_commit(struct view *view, const char *text, struct blame_state *state)\n{\n\tstruct blame_commit *commit;\n\n\tif (!parse_blame_header(&state->header, text))\n\t\treturn NULL;\n\n\tcommit = get_blame_commit(view, text);\n\tif (!commit)\n\t\treturn NULL;\n\n\treturn commit;\n}\n\nstatic bool\nblame_read(struct view *view, struct buffer *buf, bool force_stop)\n{\n\tstruct blame_state *state = view->private;\n\n\tif (!buf) {\n\t\tif (failed_to_load_initial_view(view))\n\t\t\tdie(\"No blame exist for %s\", view->vid);\n\n\t\tif (view->env->goto_lineno > 0) {\n\t\t\tselect_view_line(view, view->env->goto_lineno);\n\t\t\tview->env->goto_lineno = 0;\n\t\t}\n\n\t\tstring_format(view->ref, \"%s\", view->vid);\n\t\tif (view_is_displayed(view)) {\n\t\t\tupdate_view_title(view);\n\t\t\tredraw_view_from(view, 0);\n\t\t}\n\t\treturn true;\n\t}\n\n\tif (!state->commit) {\n\t\tstate->commit = read_blame_commit(view, buf->data, state);\n\n\t} else if (*buf->data == '\\t') {\n\t\tstruct blame *blame;\n\t\tstruct line *line = add_line_alloc(view, &blame, LINE_DEFAULT, buf->size - 1, false);\n\n\t\tif (!line)\n\t\t\treturn false;\n\n\t\tblame->commit = state->commit;\n\t\tblame->lineno = state->header.orig_lineno;\n\t\tstrncpy(blame->text, buf->data + 1, buf->size - 1);\n\t\tblame->text[buf->size - 1] = 0;\n\n\t\tview_column_info_update(view, line);\n\n\t\tstate->commit = NULL;\n\n\t} else if (parse_blame_info(state->commit, state->author, state->committer, buf->data)) {\n\t\tif (!state->commit->filename)\n\t\t\treturn false;\n\n\t\tif (!state->filename) {\n\t\t\tstate->filename = state->commit->filename;\n\t\t} else if (strcmp(state->filename, state->commit->filename)) {\n\t\t\tstate->auto_filename_display = true;\n\t\t\tview->force_redraw = true;\n\t\t\tblame_update_file_name_visibility(view);\n\t\t}\n\n\t}\n\n\treturn true;\n}\n\nstatic bool\nblame_get_column_data(struct view *view, const struct line *line, struct view_column_data *column_data)\n{\n\tstruct blame *blame = line->data;\n\tstruct view_column *column = get_view_column(view, VIEW_COLUMN_DATE);\n\tbool use_author_date = column && column->opt.date.use_author;\n\n\tif (blame->commit) {\n\t\tcolumn_data->id = blame->commit->id;\n\t\tcolumn_data->author = blame->commit->author;\n\t\tcolumn_data->committer = blame->commit->committer;\n\t\tcolumn_data->file_name = blame->commit->filename;\n\t\tcolumn_data->date = use_author_date\n\t\t\t\t\t? &blame->commit->author_time\n\t\t\t\t\t: &blame->commit->commit_time;\n\t\tcolumn_data->commit_title = blame->commit->title;\n\t}\n\n\tcolumn_data->text = blame->text;\n\n\treturn true;\n}\n\nstatic bool\ncheck_blame_commit(struct blame *blame, bool check_null_id)\n{\n\tif (!blame->commit)\n\t\treport(\"Commit data not loaded yet\");\n\telse if (check_null_id && string_rev_is_null(blame->commit->id))\n\t\treport(\"No commit exist for the selected line\");\n\telse\n\t\treturn true;\n\treturn false;\n}\n\nstatic void\nsetup_blame_parent_line(struct view *view, struct blame *blame)\n{\n\tchar from[SIZEOF_REF + SIZEOF_STR];\n\tchar to[SIZEOF_REF + SIZEOF_STR];\n\tconst char *diff_tree_argv[] = {\n\t\t\"git\", \"diff\", encoding_arg, \"--no-ext-diff\",\n\t\t\t\"--no-color\", \"-U0\", from, to, \"--\", NULL\n\t};\n\tstruct io io;\n\tint parent_lineno = -1;\n\tint blamed_lineno = -1;\n\tstruct buffer buf;\n\n\tif (!string_format(from, \"%s:%s\", view->env->ref, view->env->file) ||\n\t    !string_format(to, \"%s:%s\", blame->commit->id, blame->commit->filename) ||\n\t    !io_run(&io, IO_RD, NULL, NULL, diff_tree_argv))\n\t\treturn;\n\n\twhile (io_get(&io, &buf, '\\n', true)) {\n\t\tchar *line = buf.data;\n\n\t\tif (*line == '@') {\n\t\t\tchar *pos = strchr(line, '+');\n\n\t\t\tparent_lineno = atoi(line + 4);\n\t\t\tif (pos)\n\t\t\t\tblamed_lineno = atoi(pos + 1);\n\n\t\t} else if (*line == '+' && parent_lineno != -1) {\n\t\t\tif (blame->lineno == blamed_lineno &&\n\t\t\t    !strcmp(blame->text, line + 1)) {\n\t\t\t\tview->pos.lineno = parent_lineno ? parent_lineno - 1 : 0;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tblamed_lineno++;\n\t\t}\n\t}\n\n\tio_done(&io);\n}\n\nstatic void\nblame_go_forward(struct view *view, struct blame *blame, bool parent)\n{\n\tstruct blame_state *state = view->private;\n\tstruct blame_history_state *history_state = &state->history_state;\n\tstruct blame_commit *commit = blame->commit;\n\tconst char *id = parent ? commit->parent_id : commit->id;\n\tconst char *filename = parent ? commit->parent_filename : commit->filename;\n\n\tif (!*id && parent) {\n\t\treport(\"The selected commit has no parents with this file\");\n\t\treturn;\n\t}\n\n\tif (!strcmp(history_state->id, id) && !strcmp(history_state->filename, filename)) {\n\t\treport(\"The selected commit is already displayed\");\n\t\treturn;\n\t}\n\n\tif (!push_view_history_state(&blame_view_history, &view->pos, history_state)) {\n\t\treport(\"Failed to save current view state\");\n\t\treturn;\n\t}\n\n\tstring_ncopy(view->env->ref, id, sizeof(commit->id));\n\tstring_ncopy(view->env->file, filename, strlen(filename));\n\tif (parent) {\n\t\tsetup_blame_parent_line(view, blame);\n\t\tview->env->goto_lineno = view->pos.lineno;\n\t} else {\n\t\tview->env->goto_lineno = blame->lineno - 1;\n\t}\n\treload_view(view);\n}\n\nstatic void\nblame_go_back(struct view *view)\n{\n\tstruct blame_history_state history_state;\n\n\tif (!pop_view_history_state(&blame_view_history, &view->pos, &history_state)) {\n\t\treport(\"Already at start of history\");\n\t\treturn;\n\t}\n\n\tstring_copy(view->env->ref, history_state.id);\n\tstring_ncopy(view->env->file, history_state.filename, strlen(history_state.filename));\n\tview->env->goto_lineno = view->pos.lineno;\n\treload_view(view);\n}\n\nstatic enum request\nblame_request(struct view *view, enum request request, struct line *line)\n{\n\tenum open_flags flags = view_is_displayed(view) ? OPEN_SPLIT : OPEN_DEFAULT;\n\tstruct blame *blame = line->data;\n\tstruct view *diff = &diff_view;\n\tstruct blame_state *state = view->private;\n\tstruct blame_history_state *history_state = &state->history_state;\n\n\tswitch (request) {\n\tcase REQ_VIEW_BLAME:\n\tcase REQ_PARENT:\n\t\tif (!check_blame_commit(blame, request == REQ_VIEW_BLAME))\n\t\t\tbreak;\n\t\tblame_go_forward(view, blame, request == REQ_PARENT);\n\t\tbreak;\n\n\tcase REQ_BACK:\n\t\tblame_go_back(view);\n\t\tbreak;\n\n\tcase REQ_ENTER:\n\t\tif (!check_blame_commit(blame, false))\n\t\t\tbreak;\n\n\t\tif (view_is_displayed(diff) &&\n\t\t    !strcmp(blame->commit->id, diff->ref))\n\t\t\tbreak;\n\n\t\tif (!push_view_history_state(&blame_view_history, &view->pos, history_state)) {\n\t\t\treport(\"Failed to save current view state\");\n\t\t\tbreak;\n\t\t}\n\n\t\tif (string_rev_is_null(blame->commit->id)) {\n\t\t\tconst char *diff_parent_argv[] = {\n\t\t\t\tGIT_DIFF_BLAME(encoding_arg,\n\t\t\t\t\tdiff_context_arg(),\n\t\t\t\t\tdiff_prefix_arg(),\n\t\t\t\t\tignore_space_arg(),\n\t\t\t\t\tword_diff_arg(),\n\t\t\t\t\tblame->commit->filename)\n\t\t\t};\n\t\t\tconst char *diff_no_parent_argv[] = {\n\t\t\t\tGIT_DIFF_BLAME_NO_PARENT(encoding_arg,\n\t\t\t\t\tdiff_context_arg(),\n\t\t\t\t\tignore_space_arg(),\n\t\t\t\t\tblame->commit->filename)\n\t\t\t};\n\t\t\tconst char **diff_index_argv = *blame->commit->parent_id\n\t\t\t\t? diff_parent_argv : diff_no_parent_argv;\n\n\t\t\topen_argv(view, diff, diff_index_argv, NULL, flags);\n\t\t\tif (diff->pipe)\n\t\t\t\tstring_copy_rev(diff->ref, NULL_ID);\n\t\t} else {\n\t\t\tstring_ncopy(view->env->file, blame->commit->filename, strlen(blame->commit->filename));\n\t\t\tview->env->blame_lineno = blame->lineno;\n\t\t\topen_diff_view(view, flags | OPEN_RELOAD);\n\t\t}\n\t\tbreak;\n\n\tcase REQ_VIEW_MAIN:\n\t\tstring_copy_rev(view->env->goto_id, view->env->commit);\n\t\tif (opt_file_args && opt_file_filter) {\n\t\t\topt_file_filter = false;\n\t\t\tupdate_status(\":set file-filter = no\");\n\t\t}\n\t\tif (opt_rev_args && opt_rev_filter) {\n\t\t\topt_rev_filter = false;\n\t\t\tupdate_status(\":set rev-filter = no\");\n\t\t}\n\t\topen_main_view(view, OPEN_RELOAD);\n\t\tbreak;\n\n\tcase REQ_VIEW_BLOB:\n\t\tstring_ncopy(view->env->file, blame->commit->filename, strlen(blame->commit->filename));\n\t\treturn request;\n\n\tdefault:\n\t\treturn request;\n\t}\n\n\treturn REQ_NONE;\n}\n\nstatic void\nblame_select(struct view *view, struct line *line)\n{\n\tstruct blame *blame = line->data;\n\tstruct blame_commit *commit = blame->commit;\n\tconst char *text = blame->text;\n\n\tif (!commit)\n\t\treturn;\n\n\tif (string_rev_is_null(commit->id)) {\n\t\tview->env->commit[0] = 0;\n\t\tstring_ncopy(view->ref, commit->filename, strlen(commit->filename));\n\t} else {\n\t\tstring_copy_rev(view->env->commit, commit->id);\n\t\tstring_format(view->ref, \"%s:%s\", commit->id, commit->filename);\n\t}\n\n\tif (strcmp(commit->filename, view->env->file))\n\t\tstring_format(view->env->file_old, \"%s\", commit->filename);\n\telse\n\t\tview->env->file_old[0] = '\\0';\n\n\tview->env->lineno = view->pos.lineno + 1;\n\tstring_ncopy(view->env->text, text, strlen(text));\n\tview->env->blob[0] = 0;\n}\n\nstatic struct view_ops blame_ops = {\n\t\"line\",\n\targv_env.commit,\n\tVIEW_SEND_CHILD_ENTER | VIEW_BLAME_LIKE | VIEW_REFRESH,\n\tsizeof(struct blame_state),\n\tblame_open,\n\tblame_read,\n\tview_column_draw,\n\tblame_request,\n\tview_column_grep,\n\tblame_select,\n\tNULL,\n\tview_column_bit(AUTHOR) | view_column_bit(COMMITTER) | view_column_bit(DATE) |\n\t\tview_column_bit(FILE_NAME) | view_column_bit(ID) |\n\t\tview_column_bit(LINE_NUMBER) | view_column_bit(TEXT),\n\tblame_get_column_data,\n};\n\nDEFINE_VIEW(blame);\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/blob.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/refdb.h\"\n#include \"tig/parse.h\"\n#include \"tig/repo.h\"\n#include \"tig/display.h\"\n#include \"tig/draw.h\"\n#include \"tig/ui.h\"\n#include \"tig/pager.h\"\n#include \"tig/tree.h\"\n#include \"tig/blob.h\"\n\nstruct blob_state {\n\tchar commit[SIZEOF_REF];\n\tconst char *file;\n};\n\nvoid\nopen_blob_view(struct view *prev, enum open_flags flags)\n{\n\tstruct view *view = &blob_view;\n\tbool in_blob_view = prev == view;\n\n\tif (!view->env->file[0] && opt_file_args && !opt_file_args[1]) {\n\t\tconst char *ls_tree_argv[] = {\n\t\t\t\"git\", \"ls-tree\", \"-d\", \"-z\",  view->env->commit, opt_file_args[0], NULL\n\t\t};\n\t\tchar buf[SIZEOF_STR] = \"\";\n\n\t\t/* Check that opt_file_args[0] is not a directory */\n\t\tif (!io_run_buf(ls_tree_argv, buf, sizeof(buf), NULL, false))\n\t\t\tstring_concat_path(view->env->file, repo.prefix, opt_file_args[0]);\n\t}\n\n\tif (!in_blob_view && (view->lines || view->env->blob[0] || view->env->file[0])) {\n\t\tif (view->env->goto_lineno > 0)\n\t\t\tflags |= OPEN_RELOAD;\n\t\topen_view(prev, view, flags);\n\n\t} else {\n\t\tconst char *file = open_file_finder(view->env->commit);\n\n\t\tif (file) {\n\t\t\tclear_position(&view->pos);\n\t\t\tstring_ncopy(view->env->file, file, strlen(file));\n\t\t\tview->env->blob[0] = 0;\n\t\t\topen_view(prev, view, OPEN_RELOAD);\n\t\t}\n\t}\n}\n\nstatic enum status_code\nblob_open(struct view *view, enum open_flags flags)\n{\n\tstruct blob_state *state = view->private;\n\tstatic const char *blob_argv[] = {\n\t\t\"git\", \"cat-file\", \"blob\", \"%(blob)\", NULL\n\t};\n\tconst char **argv = (flags & (OPEN_PREPARED | OPEN_REFRESH)) ? view->argv : blob_argv;\n\n\tif (argv != blob_argv) {\n\t\tstate->file = get_path(view->env->file);\n\t\tstate->commit[0] = 0;\n\t}\n\n\tif (!state->file && !view->env->blob[0] && view->env->file[0]) {\n\t\tconst char *commit = view->env->commit[0] && !string_rev_is_null(view->env->commit)\n\t\t\t\t   ? view->env->commit : \"HEAD\";\n\t\tchar blob_spec[SIZEOF_STR];\n\t\tconst char *rev_parse_argv[] = {\n\t\t\t\"git\", \"rev-parse\", blob_spec, NULL\n\t\t};\n\n\t\tif (!string_format(blob_spec, \"%s:%s\", commit, view->env->file) ||\n\t\t    !io_run_buf(rev_parse_argv, view->env->blob, sizeof(view->env->blob), NULL, false))\n\t\t\treturn error(\"Failed to resolve blob from file name\");\n\n\t\tstring_ncopy(state->commit, commit, strlen(commit));\n\t}\n\n\tif (!state->file && !view->env->blob[0])\n\t\treturn error(\"No file chosen, press %s to open tree view\",\n\t\t\t     get_view_key(view, REQ_VIEW_TREE));\n\n\tview->encoding = get_path_encoding(view->env->file, default_encoding);\n\n\tif (*view->env->file)\n\t\tstring_copy(view->ref, view->env->file);\n\telse\n\t\tstring_copy_rev(view->ref, view->ops->id);\n\n\treturn begin_update(view, NULL, argv, flags);\n}\n\nstatic bool\nblob_read(struct view *view, struct buffer *buf, bool force_stop)\n{\n\tif (!buf) {\n\t\tif (view->env->goto_lineno > 0) {\n\t\t\tselect_view_line(view, view->env->goto_lineno);\n\t\t\tview->env->goto_lineno = 0;\n\t\t}\n\t\treturn true;\n\t}\n\n\treturn pager_common_read(view, buf->data, LINE_DEFAULT, NULL);\n}\n\nstatic void\nblob_select(struct view *view, struct line *line)\n{\n\tstruct blob_state *state = view->private;\n\tconst char *text = box_text(line);\n\n\tif (state->file)\n\t\tstring_format(view->env->file, \"%s\", state->file);\n\tview->env->lineno = view->pos.lineno + 1;\n\tstring_ncopy(view->env->text, text, strlen(text));\n}\n\nstatic enum request\nblob_request(struct view *view, enum request request, struct line *line)\n{\n\tstruct blob_state *state = view->private;\n\n\tswitch (request) {\n\tcase REQ_REFRESH:\n\t\tif (!state->file) {\n\t\t\treport(\"Cannot reload immutable blob\");\n\t\t} else {\n\t\t\tstring_ncopy(view->env->file, state->file, strlen(state->file));\n\t\t\trefresh_view(view);\n\t\t}\n\t\treturn REQ_NONE;\n\n\tcase REQ_VIEW_BLAME:\n\t\tstring_ncopy(view->env->ref, state->commit, strlen(state->commit));\n\t\tview->env->goto_lineno = line - view->line;\n\t\treturn request;\n\n\tcase REQ_EDIT:\n\t\tif (state->file)\n\t\t\topen_editor(state->file, (line - view->line) + 1);\n\t\telse\n\t\t\topen_blob_editor(view->vid, basename(view->ref), (line - view->line) + 1);\n\t\treturn REQ_NONE;\n\n\tdefault:\n\t\treturn pager_request(view, request, line);\n\t}\n}\n\nstatic struct view_ops blob_ops = {\n\t\"line\",\n\targv_env.blob,\n\tVIEW_NO_FLAGS | VIEW_REFRESH,\n\tsizeof(struct blob_state),\n\tblob_open,\n\tblob_read,\n\tview_column_draw,\n\tblob_request,\n\tview_column_grep,\n\tblob_select,\n\tNULL,\n\tview_column_bit(LINE_NUMBER) | view_column_bit(TEXT),\n\tpager_get_column_data,\n};\n\nDEFINE_VIEW(blob);\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/diff.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/argv.h\"\n#include \"tig/refdb.h\"\n#include \"tig/repo.h\"\n#include \"tig/options.h\"\n#include \"tig/display.h\"\n#include \"tig/parse.h\"\n#include \"tig/pager.h\"\n#include \"tig/diff.h\"\n#include \"tig/draw.h\"\n#include \"tig/apps.h\"\n\nstatic enum status_code\ndiff_open(struct view *view, enum open_flags flags)\n{\n\tconst char *diff_argv[] = {\n\t\t\"git\", \"show\", encoding_arg, \"--pretty=fuller\", \"--root\",\n\t\t\t\"--patch-with-stat\", use_mailmap_arg(),\n\t\t\tshow_notes_arg(), diff_context_arg(), ignore_space_arg(),\n\t\t\tDIFF_ARGS, \"%(cmdlineargs)\", \"--no-color\", word_diff_arg(),\n\t\t\t\"%(commit)\", \"--\", \"%(fileargs)\", NULL\n\t};\n\tenum status_code code;\n\n\tdiff_save_line(view, view->private, flags);\n\n\tcode = begin_update(view, NULL, diff_argv, flags | OPEN_WITH_STDERR);\n\tif (code != SUCCESS)\n\t\treturn code;\n\n\treturn diff_init_highlight(view, view->private);\n}\n\nenum status_code\ndiff_init_highlight(struct view *view, struct diff_state *state)\n{\n\tif (!opt_diff_highlight || !*opt_diff_highlight || opt_word_diff)\n\t\treturn SUCCESS;\n\n\tstruct app_external *app = app_diff_highlight_load(opt_diff_highlight);\n\tstruct io io;\n\n\t/* XXX This empty string keeps valgrind happy while preserving earlier\n\t * behavior of test diff/diff-highlight-test:diff-highlight-misconfigured.\n\t * Simpler would be to return error when user misconfigured, though we\n\t * don't want tig to fail when diff-highlight isn't present.  io_exec\n\t * below does not return error when app->argv[0] is empty or null as the\n\t * conditional might suggest. */\n\tif (!*app->argv)\n\t\tapp->argv[0] = \"\";\n\n\tif (!io_exec(&io, IO_RP, view->dir, app->env, app->argv, view->io.pipe))\n\t\treturn error(\"Failed to run %s\", opt_diff_highlight);\n\n\tstate->view_io = view->io;\n\tview->io = io;\n\tstate->highlight = true;\n\n\treturn SUCCESS;\n}\n\nbool\ndiff_done_highlight(struct diff_state *state)\n{\n\tif (!state->highlight)\n\t\treturn true;\n\tio_kill(&state->view_io);\n\treturn io_done(&state->view_io);\n}\n\nstruct diff_stat_context {\n\tconst char *text;\n\tenum line_type type;\n\tbool skip;\n\tsize_t cells;\n\tconst char **cell_text;\n\tstruct box_cell cell[8192];\n};\n\nstatic bool\ndiff_common_add_cell(struct diff_stat_context *context, size_t length, bool allow_empty)\n{\n\tif (!allow_empty && (length == 0))\n\t\treturn true;\n\tif (context->cells > ARRAY_SIZE(context->cell) - 1) {\n\t\treport(\"Too many diff cells, truncating\");\n\t\treturn false;\n\t}\n\tif (context->skip && !argv_appendn(&context->cell_text, context->text, length))\n\t\treturn false;\n\tcontext->cell[context->cells].length = length;\n\tcontext->cell[context->cells].type = context->type;\n\tcontext->cells++;\n\treturn true;\n}\n\nstatic struct line *\ndiff_common_add_line(struct view *view, const char *text, enum line_type type, struct diff_stat_context *context)\n{\n\tchar *cell_text = context->cell_text ? argv_to_string_alloc(context->cell_text, \"\") : NULL;\n\tconst char *line_text = cell_text ? cell_text : text;\n\tstruct line *line = add_line_text_at(view, view->lines, line_text, type, context->cells);\n\tstruct box *box;\n\n\tfree(cell_text);\n\targv_free(context->cell_text);\n\tfree(context->cell_text);\n\n\tif (!line)\n\t\treturn NULL;\n\n\tbox = line->data;\n\tif (context->cells)\n\t\tmemcpy(box->cell, context->cell, sizeof(struct box_cell) * context->cells);\n\tbox->cells = context->cells;\n\treturn line;\n}\n\nstatic bool\ndiff_common_add_cell_until(struct diff_stat_context *context, const char *s, enum line_type next_type)\n{\n\tconst char *sep = strstr(context->text, s);\n\n\tif (sep == NULL)\n\t\treturn false;\n\n\tif (!diff_common_add_cell(context, sep - context->text, false))\n\t\treturn false;\n\n\tcontext->text = sep + (context->skip ? strlen(s) : 0);\n\tcontext->type = next_type;\n\n\treturn true;\n}\n\nstatic bool\ndiff_common_read_diff_stat_part(struct diff_stat_context *context, char c, enum line_type next_type)\n{\n\tconst char *sep = c == '|' ? strrchr(context->text, c) : strchr(context->text, c);\n\n\tif (sep == NULL)\n\t\treturn false;\n\n\tdiff_common_add_cell(context, sep - context->text, false);\n\tcontext->text = sep;\n\tcontext->type = next_type;\n\n\treturn true;\n}\n\nstatic struct line *\ndiff_common_read_diff_stat(struct view *view, const char *text)\n{\n\tstruct diff_stat_context context = { text, LINE_DIFF_STAT };\n\n\tdiff_common_read_diff_stat_part(&context, '|', LINE_DEFAULT);\n\tif (diff_common_read_diff_stat_part(&context, 'B', LINE_DEFAULT)) {\n\t\t/* Handle binary diffstat: Bin <deleted> -> <added> bytes */\n\t\tdiff_common_read_diff_stat_part(&context, ' ', LINE_DIFF_DEL);\n\t\tdiff_common_read_diff_stat_part(&context, '-', LINE_DEFAULT);\n\t\tdiff_common_read_diff_stat_part(&context, ' ', LINE_DIFF_ADD);\n\t\tdiff_common_read_diff_stat_part(&context, 'b', LINE_DEFAULT);\n\n\t} else {\n\t\tdiff_common_read_diff_stat_part(&context, '+', LINE_DIFF_ADD);\n\t\tdiff_common_read_diff_stat_part(&context, '-', LINE_DIFF_DEL);\n\t}\n\tdiff_common_add_cell(&context, strlen(context.text), false);\n\n\treturn diff_common_add_line(view, text, LINE_DIFF_STAT, &context);\n}\n\nstruct line *\ndiff_common_add_diff_stat(struct view *view, const char *text, size_t offset)\n{\n\tconst char *start = text + offset;\n\tconst char *data = start + strspn(start, \" \");\n\tsize_t len = strlen(data);\n\tchar *pipe = strchr(data, '|');\n\n\t/* Ensure that '|' is present and the file name part contains\n\t * non-space characters. */\n\tif (!pipe || pipe == data)\n\t\treturn NULL;\n\n\t/* Detect remaining part of a diff stat line:\n\t *\n\t *\tadded                    |   40 +++++++++++\n\t *\tremove                   |  124 --------------------------\n\t *\tupdated                  |   14 +----\n\t *\trename.from => rename.to |    0\n\t *\t.../truncated file name  |   11 ++---\n\t *\tbinary add               |  Bin 0 -> 1234 bytes\n\t *\tbinary update            |  Bin 1234 -> 2345 bytes\n\t *\tbinary copy              |  Bin\n\t *\tunmerged                 | Unmerged\n\t */\n\tif ((data[len - 1] == '-' || data[len - 1] == '+') ||\n\t    strstr(pipe, \" 0\") || strstr(pipe, \"Bin\") || strstr(pipe, \"Unmerged\") ||\n\t    (data[len - 1] == '0' && (strstr(data, \"=>\") || !prefixcmp(data, \"...\"))))\n\t\treturn diff_common_read_diff_stat(view, text);\n\treturn NULL;\n}\n\nstatic bool\ndiff_common_read_diff_wdiff_group(struct diff_stat_context *context)\n{\n\tconst char *sep_add = strstr(context->text, \"{+\");\n\tconst char *sep_del = strstr(context->text, \"[-\");\n\tconst char *sep;\n\tenum line_type next_type;\n\tconst char *end_delimiter;\n\tconst char *end_sep;\n\tsize_t len;\n\n\tif (sep_add == NULL && sep_del == NULL)\n\t\treturn false;\n\n\tif (sep_del == NULL || (sep_add != NULL && sep_add < sep_del)) {\n\t\tsep = sep_add;\n\t\tnext_type = LINE_DIFF_ADD;\n\t\tend_delimiter = \"+}\";\n\t} else {\n\t\tsep = sep_del;\n\t\tnext_type = LINE_DIFF_DEL;\n\t\tend_delimiter = \"-]\";\n\t}\n\n\tdiff_common_add_cell(context, sep - context->text, false);\n\n\tcontext->type = next_type;\n\tcontext->text = sep;\n\n\t// workaround for a single }/] change\n\tend_sep = strstr(context->text + sizeof(\"{+\") - 1, end_delimiter);\n\n\tif (end_sep == NULL) {\n\t\t// diff is not terminated\n\t\tlen = strlen(context->text);\n\t} else {\n\t\t// separators are included in the add/del highlight\n\t\tlen = end_sep - context->text + sizeof(\"+}\") - 1;\n\t}\n\n\tdiff_common_add_cell(context, len, false);\n\n\tif (end_sep == NULL) {\n\t\tcontext->text += len;\n\t} else {\n\t\tcontext->text = end_sep + sizeof(\"+}\") - 1;\n\t}\n\tcontext->type = LINE_DEFAULT;\n\n\treturn true;\n}\n\nstatic bool\ndiff_common_read_diff_wdiff(struct view *view, const char *text)\n{\n\tstruct diff_stat_context context = { text, LINE_DEFAULT };\n\n\t/* Detect remaining part of a word diff line:\n\t *\n\t *\tadded {+new +} text\n\t *\tremoved[- something -] from the file\n\t *\treplaced [-some-]{+same+} text\n\t *\tthere could be [-one-] diff part{+s+} in the {+any +} line\n\t */\n\twhile (diff_common_read_diff_wdiff_group(&context))\n\t\t;\n\n\tdiff_common_add_cell(&context, strlen(context.text), true);\n\treturn diff_common_add_line(view, text, LINE_DEFAULT, &context);\n}\n\nstatic bool\ndiff_common_highlight(struct view *view, const char *text, enum line_type type)\n{\n\tstruct diff_stat_context context = { text, type, true };\n\tenum line_type hi_type = type == LINE_DIFF_ADD\n\t\t\t\t ? LINE_DIFF_ADD_HIGHLIGHT : LINE_DIFF_DEL_HIGHLIGHT;\n\tconst char *codes[] = { \"\\x1b[7m\", \"\\x1b[27m\" };\n\tconst enum line_type types[] = { hi_type, type };\n\tint i;\n\n\tfor (i = 0; diff_common_add_cell_until(&context, codes[i], types[i]); i = (i + 1) % 2)\n\t\t;\n\n\tdiff_common_add_cell(&context, strlen(context.text), true);\n\treturn diff_common_add_line(view, text, type, &context);\n}\n\nbool\ndiff_common_read(struct view *view, const char *data, struct diff_state *state)\n{\n\tenum line_type type = get_line_type(data);\n\n\t/* ADD2 and DEL2 are only valid in combined diff hunks */\n\tif (!state->combined_diff && (type == LINE_DIFF_ADD2 || type == LINE_DIFF_DEL2))\n\t\ttype = LINE_DEFAULT;\n\n\t/* DEL_FILE, ADD_FILE and START are only valid outside diff chunks */\n\tif (state->reading_diff_chunk) {\n\t\tif (type == LINE_DIFF_DEL_FILE || type == LINE_DIFF_START)\n\t\t\ttype = LINE_DIFF_DEL;\n\t\telse if (type == LINE_DIFF_ADD_FILE)\n\t\t\ttype = LINE_DIFF_ADD;\n\t}\n\n\tif (!view->lines && type != LINE_COMMIT)\n\t\tstate->reading_diff_stat = true;\n\n\t/* combined diffs lack LINE_DIFF_START and we don't know\n\t * if this is a combined diff until we see a \"@@@\" */\n\tif (!state->after_diff && data[0] == ' ' && data[1] != ' ')\n\t\tstate->reading_diff_stat = true;\n\n\tif (state->reading_diff_stat) {\n\t\tif (diff_common_add_diff_stat(view, data, 0))\n\t\t\treturn true;\n\t\tstate->reading_diff_stat = false;\n\n\t} else if (type == LINE_DIFF_START) {\n\t\tstate->reading_diff_stat = true;\n\t}\n\n\tif (!state->after_commit_title && !prefixcmp(data, \"    \")) {\n\t\tstruct line *line = add_line_text(view, data, LINE_DEFAULT);\n\n\t\tif (line)\n\t\t\tline->commit_title = 1;\n\t\tstate->after_commit_title = true;\n\t\treturn line != NULL;\n\t}\n\n\tif (type == LINE_DIFF_HEADER) {\n\t\tstate->after_diff = true;\n\t\tstate->reading_diff_chunk = false;\n\n\t} else if (type == LINE_DIFF_CHUNK) {\n\t\tconst unsigned int len = chunk_header_marker_length(data);\n\t\tconst char *context = strstr(data + len, \"@@\");\n\t\tstruct line *line =\n\t\t\tcontext ? add_line_text_at(view, view->lines, data, LINE_DIFF_CHUNK, len)\n\t\t\t\t: NULL;\n\t\tstruct box *box;\n\n\t\tif (!line)\n\t\t\treturn false;\n\n\t\tbox = line->data;\n\t\tbox->cell[0].length = (context + len) - data;\n\t\tbox->cell[1].length = strlen(context + len);\n\t\tbox->cell[box->cells++].type = LINE_DIFF_STAT;\n\t\tstate->combined_diff = (len > 2);\n\t\tstate->parents = len - 1;\n\t\tstate->reading_diff_chunk = true;\n\t\treturn true;\n\n\t} else if (type == LINE_COMMIT) {\n\t\tstate->reading_diff_chunk = false;\n\n\t}\n\n\tif (opt_word_diff && state->reading_diff_chunk &&\n\t    /* combined diff format is not using word diff */\n\t    !state->combined_diff)\n\t\treturn diff_common_read_diff_wdiff(view, data);\n\n\tif (!opt_diff_indicator && state->reading_diff_chunk &&\n\t    !state->stage)\n\t\tdata += state->parents;\n\n\tif (state->highlight && strchr(data, 0x1b))\n\t\treturn diff_common_highlight(view, data, type);\n\n\treturn pager_common_read(view, data, type, NULL);\n}\n\nstatic bool\ndiff_find_stat_entry(struct view *view, struct line *line, enum line_type type)\n{\n\tstruct line *marker = find_next_line_by_type(view, line, type);\n\n\treturn marker &&\n\t\tline == find_prev_line_by_type(view, marker, LINE_DIFF_HEADER);\n}\n\nstatic struct line *\ndiff_find_header_from_stat(struct view *view, struct line *line)\n{\n\tif (line->type == LINE_DIFF_STAT) {\n\t\tint file_number = 0;\n\n\t\twhile (view_has_line(view, line) && line->type == LINE_DIFF_STAT) {\n\t\t\tfile_number++;\n\t\t\tline--;\n\t\t}\n\n\t\tfor (line = view->line; view_has_line(view, line); line++) {\n\t\t\tline = find_next_line_by_type(view, line, LINE_DIFF_HEADER);\n\t\t\tif (!line)\n\t\t\t\tbreak;\n\n\t\t\tif (diff_find_stat_entry(view, line, LINE_DIFF_INDEX)\n\t\t\t    || diff_find_stat_entry(view, line, LINE_DIFF_OLDMODE)\n\t\t\t    || diff_find_stat_entry(view, line, LINE_DIFF_SIMILARITY)) {\n\t\t\t\tif (file_number == 1) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tfile_number--;\n\t\t\t}\n\t\t}\n\n\t\treturn line;\n\t}\n\n\treturn NULL;\n}\n\nenum request\ndiff_common_enter(struct view *view, enum request request, struct line *line)\n{\n\tif (line->type == LINE_DIFF_STAT) {\n\t\tline = diff_find_header_from_stat(view, line);\n\t\tif (!line) {\n\t\t\treport(\"Failed to find file diff\");\n\t\t\treturn REQ_NONE;\n\t\t}\n\n\t\tselect_view_line(view, line - view->line);\n\t\treport_clear();\n\t\treturn REQ_NONE;\n\n\t} else {\n\t\treturn pager_request(view, request, line);\n\t}\n}\n\nvoid\ndiff_save_line(struct view *view, struct diff_state *state, enum open_flags flags)\n{\n\tif (flags & OPEN_RELOAD) {\n\t\tstruct line *line = &view->line[view->pos.lineno];\n\t\tconst char *file = view_has_line(view, line) ? diff_get_pathname(view, line, false) : NULL;\n\n\t\tif (file) {\n\t\t\tstate->file = get_path(file);\n\t\t\tstate->lineno = diff_get_lineno(view, line, false);\n\t\t\tstate->pos = view->pos;\n\t\t}\n\t}\n}\n\nvoid\ndiff_restore_line(struct view *view, struct diff_state *state)\n{\n\tstruct line *line = &view->line[view->lines - 1];\n\n\tif (!state->file)\n\t\treturn;\n\n\twhile ((line = find_prev_line_by_type(view, line, LINE_DIFF_HEADER))) {\n\t\tconst char *file = diff_get_pathname(view, line, false);\n\n\t\tif (file && !strcmp(file, state->file))\n\t\t\tbreak;\n\t\tline--;\n\t}\n\n\tstate->file = NULL;\n\n\tif (!line)\n\t\treturn;\n\n\twhile ((line = find_next_line_by_type(view, line, LINE_DIFF_CHUNK))) {\n\t\tunsigned int lineno = diff_get_lineno(view, line, false);\n\n\t\tfor (line++; view_has_line(view, line) && line->type != LINE_DIFF_CHUNK; line++) {\n\t\t\tif (lineno == state->lineno) {\n\t\t\t\tunsigned long lineno = line - view->line;\n\t\t\t\tunsigned long offset = lineno - (state->pos.lineno - state->pos.offset);\n\n\t\t\t\tgoto_view_line(view, offset, lineno);\n\t\t\t\tredraw_view(view);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (line->type != LINE_DIFF_DEL &&\n\t\t\t    line->type != LINE_DIFF_DEL2)\n\t\t\t\tlineno++;\n\t\t}\n\t}\n}\n\nstatic bool\ndiff_read_describe(struct view *view, struct buffer *buffer, struct diff_state *state)\n{\n\tstruct line *line = find_next_line_by_type(view, view->line, LINE_PP_REFS);\n\n\tif (line && buffer) {\n\t\tconst char *ref = string_trim(buffer->data);\n\t\tconst char *sep = !strcmp(\"Refs: \", box_text(line)) ? \"\" : \", \";\n\n\t\tif (*ref && !append_line_format(view, line, \"%s%s\", sep, ref))\n\t\t\treturn false;\n\t}\n\n\treturn true;\n}\n\nstatic bool\ndiff_read(struct view *view, struct buffer *buf, bool force_stop)\n{\n\tstruct diff_state *state = view->private;\n\n\tif (state->adding_describe_ref)\n\t\treturn diff_read_describe(view, buf, state);\n\n\tif (!buf) {\n\t\tif (!diff_done_highlight(state)) {\n\t\t\tif (!force_stop)\n\t\t\t\treport(\"Failed to run the diff-highlight program: %s\", opt_diff_highlight);\n\t\t\treturn false;\n\t\t}\n\n\t\t/* Fall back to retry if no diff will be shown. */\n\t\tif (view->lines == 0 && opt_file_args) {\n\t\t\tint pos = argv_size(view->argv)\n\t\t\t\t- argv_size(opt_file_args) - 1;\n\n\t\t\tif (pos > 0 && !strcmp(view->argv[pos], \"--\")) {\n\t\t\t\tfor (; view->argv[pos]; pos++) {\n\t\t\t\t\tfree((void *) view->argv[pos]);\n\t\t\t\t\tview->argv[pos] = NULL;\n\t\t\t\t}\n\n\t\t\t\tif (view->pipe)\n\t\t\t\t\tio_done(view->pipe);\n\t\t\t\tif (view_exec(view, 0))\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tif (view->env->blame_lineno) {\n\t\t\tstate->file = get_path(view->env->file);\n\t\t\tstate->lineno = view->env->blame_lineno;\n\t\t\tstate->pos.offset = 0;\n\t\t\tstate->pos.lineno = view->lines - 1;\n\n\t\t\tview->env->blame_lineno = 0;\n\t\t}\n\n\t\tdiff_restore_line(view, state);\n\n\t\tif (!state->adding_describe_ref && !ref_list_contains_tag(view->vid)) {\n\t\t\tconst char *describe_argv[] = { \"git\", \"describe\", \"--tags\", view->vid, NULL };\n\t\t\tenum status_code code = begin_update(view, NULL, describe_argv, OPEN_EXTRA);\n\n\t\t\tif (code != SUCCESS) {\n\t\t\t\treport(\"Failed to load describe data: %s\", get_status_message(code));\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tstate->adding_describe_ref = true;\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\treturn diff_common_read(view, buf->data, state);\n}\n\nstatic bool\ndiff_blame_line(const char *ref, const char *file, unsigned long lineno,\n\t\tstruct blame_header *header, struct blame_commit *commit)\n{\n\tchar author[SIZEOF_STR] = \"\";\n\tchar committer[SIZEOF_STR] = \"\";\n\tchar line_arg[SIZEOF_STR];\n\tconst char *blame_argv[] = {\n\t\t\"git\", \"blame\", encoding_arg, \"-p\", line_arg, ref, \"--\", file, NULL\n\t};\n\tstruct io io;\n\tbool ok = false;\n\tstruct buffer buf;\n\n\tif (!string_format(line_arg, \"-L%lu,+1\", lineno))\n\t\treturn false;\n\n\tif (!io_run(&io, IO_RD, repo.exec_dir, NULL, blame_argv))\n\t\treturn false;\n\n\twhile (io_get(&io, &buf, '\\n', true)) {\n\t\tif (header) {\n\t\t\tif (!parse_blame_header(header, buf.data))\n\t\t\t\tbreak;\n\t\t\theader = NULL;\n\n\t\t} else if (parse_blame_info(commit, author, committer, buf.data)) {\n\t\t\tok = commit->filename != NULL;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (io_error(&io))\n\t\tok = false;\n\n\tio_done(&io);\n\treturn ok;\n}\n\nunsigned int\ndiff_get_lineno(struct view *view, struct line *line, bool old)\n{\n\tconst struct line *header, *chunk;\n\tunsigned int lineno;\n\tstruct chunk_header chunk_header;\n\n\t/* Verify that we are after a diff header and one of its chunks */\n\theader = find_prev_line_by_type(view, line, LINE_DIFF_HEADER);\n\tchunk = find_prev_line_by_type(view, line, LINE_DIFF_CHUNK);\n\tif (!header || !chunk || chunk < header)\n\t\treturn 0;\n\n\t/*\n\t * In a chunk header, the number after the '+' sign is the number of its\n\t * following line, in the new version of the file. We increment this\n\t * number for each non-deletion line, until the given line position.\n\t */\n\tif (!parse_chunk_header(&chunk_header, box_text(chunk)))\n\t\treturn 0;\n\n\tlineno = old ? chunk_header.old.position : chunk_header.new.position;\n\n\tfor (chunk++; chunk < line; chunk++)\n\t\tif (old ? chunk->type != LINE_DIFF_ADD && chunk->type != LINE_DIFF_ADD2\n\t\t\t: chunk->type != LINE_DIFF_DEL && chunk->type != LINE_DIFF_DEL2)\n\t\t\tlineno++;\n\n\treturn lineno;\n}\n\nstatic enum request\ndiff_trace_origin(struct view *view, enum request request, struct line *line)\n{\n\tstruct line *commit_line = find_prev_line_by_type(view, line, LINE_COMMIT);\n\tchar id[SIZEOF_REV];\n\tstruct line *diff = find_prev_line_by_type(view, line, LINE_DIFF_HEADER);\n\tstruct line *chunk = find_prev_line_by_type(view, line, LINE_DIFF_CHUNK);\n\tconst char *chunk_data;\n\tint chunk_marker = line->type == LINE_DIFF_DEL ? '-' : '+';\n\tunsigned long lineno = 0;\n\tconst char *file = NULL;\n\tchar ref[SIZEOF_REF];\n\tstruct blame_header header;\n\tstruct blame_commit commit;\n\n\tif (!diff || !chunk || chunk == line || diff < commit_line) {\n\t\treport(\"The line to trace must be inside a diff chunk\");\n\t\treturn REQ_NONE;\n\t}\n\n\tfile = diff_get_pathname(view, line, line->type == LINE_DIFF_DEL);\n\n\tif (!file) {\n\t\treport(\"Failed to read the file name\");\n\t\treturn REQ_NONE;\n\t}\n\n\tchunk_data = box_text(chunk);\n\n\tif (!parse_chunk_lineno(&lineno, chunk_data, chunk_marker)) {\n\t\treport(\"Failed to read the line number\");\n\t\treturn REQ_NONE;\n\t}\n\n\tif (lineno == 0) {\n\t\treport(\"This is the origin of the line\");\n\t\treturn REQ_NONE;\n\t}\n\n\tfor (chunk += 1; chunk < line; chunk++) {\n\t\tif (chunk->type == LINE_DIFF_ADD) {\n\t\t\tlineno += chunk_marker == '+';\n\t\t} else if (chunk->type == LINE_DIFF_DEL) {\n\t\t\tlineno += chunk_marker == '-';\n\t\t} else {\n\t\t\tlineno++;\n\t\t}\n\t}\n\n\tif (commit_line)\n\t\tstring_copy_rev_from_commit_line(id, box_text(commit_line));\n\telse\n\t\tstring_copy(id, view->vid);\n\n\tif (chunk_marker == '-')\n\t\tstring_format(ref, \"%s^\", id);\n\telse\n\t\tstring_copy(ref, id);\n\n\tif (!diff_blame_line(ref, file, lineno, &header, &commit)) {\n\t\treport(\"Failed to read blame data\");\n\t\treturn REQ_NONE;\n\t}\n\n\tstring_ncopy(view->env->file, commit.filename, strlen(commit.filename));\n\tstring_copy_rev(request == REQ_VIEW_BLAME ? view->env->ref : view->env->commit, header.id);\n\tview->env->goto_lineno = header.orig_lineno - 1;\n\n\treturn request;\n}\n\nconst char *\ndiff_get_pathname(struct view *view, struct line *line, bool old)\n{\n\tstruct line *header;\n\tconst char *dst;\n\tconst char *prefixes[] = { \"diff --cc \", \"diff --combined \" };\n\tconst char *name;\n\tint i;\n\n\theader = find_prev_line_in_commit_by_type(view, line, LINE_DIFF_HEADER);\n\tif (!header)\n\t\treturn NULL;\n\n\tif (!old) {\n\t\tfor (i = 0; i < ARRAY_SIZE(prefixes); i++) {\n\t\t\tdst = strstr(box_text(header), prefixes[i]);\n\t\t\tif (dst)\n\t\t\t\treturn dst + strlen(prefixes[i]);\n\t\t}\n\t}\n\n\theader = find_next_line_by_type(view, header, old ? LINE_DIFF_DEL_FILE : LINE_DIFF_ADD_FILE);\n\tif (!header)\n\t\treturn NULL;\n\n\tname = box_text(header);\n\tif (old ? !prefixcmp(name, \"--- \") : !prefixcmp(name, \"+++ \"))\n\t\tname += STRING_SIZE(\"+++ \");\n\n\tif (opt_diff_noprefix)\n\t\treturn name;\n\n\t/* Handle mnemonic prefixes, such as \"b/\" and \"w/\". */\n\tif (!prefixcmp(name, \"a/\") || !prefixcmp(name, \"b/\") || !prefixcmp(name, \"i/\") || !prefixcmp(name, \"w/\"))\n\t\tname += STRING_SIZE(\"a/\");\n\treturn name;\n}\n\nenum request\ndiff_common_edit(struct view *view, enum request request, struct line *line)\n{\n\tconst char *file;\n\tchar path[SIZEOF_STR];\n\tunsigned int lineno;\n\n\tif (line->type == LINE_DIFF_STAT) {\n\t\tfile = view->env->file;\n\t\tlineno = view->env->lineno;\n\t} else {\n\t\tfile = diff_get_pathname(view, line, false);\n\t\tlineno = diff_get_lineno(view, line, false);\n\t}\n\n\tif (!file || !*file) {\n\t\treport(\"Nothing to edit\");\n\t\treturn REQ_NONE;\n\t}\n\n\tif (!string_concat_path(path, repo.cdup, file) || access(path, R_OK)) {\n\t\treport(\"Failed to open file: %s\", file);\n\t\treturn REQ_NONE;\n\t}\n\n\topen_editor(file, lineno);\n\treturn REQ_NONE;\n}\n\nstatic enum request\ndiff_request(struct view *view, enum request request, struct line *line)\n{\n\tswitch (request) {\n\tcase REQ_VIEW_BLAME:\n\tcase REQ_VIEW_BLOB:\n\t\tif (line->type == LINE_DIFF_STAT) {\n\t\t\tstring_copy_rev(request == REQ_VIEW_BLAME ? view->env->ref : view->env->commit, view->vid);\n\t\t\tview->env->goto_lineno = 0;\n\t\t\treturn request;\n\t\t}\n\t\treturn diff_trace_origin(view, request, line);\n\n\tcase REQ_EDIT:\n\t\treturn diff_common_edit(view, request, line);\n\n\tcase REQ_ENTER:\n\t\treturn diff_common_enter(view, request, line);\n\n\tcase REQ_REFRESH:\n\t\treload_view(view);\n\t\treturn REQ_NONE;\n\n\tdefault:\n\t\treturn pager_request(view, request, line);\n\t}\n}\n\nvoid\ndiff_common_select(struct view *view, struct line *line, const char *changes_msg)\n{\n\tif (line->type == LINE_DIFF_STAT) {\n\t\tstruct line *header = diff_find_header_from_stat(view, line);\n\t\tif (header) {\n\t\t\tconst char *file = diff_get_pathname(view, header, false);\n\n\t\t\tif (file) {\n\t\t\t\tconst char *old_file = diff_get_pathname(view, header, true);\n\t\t\t\tif (old_file)\n\t\t\t\t\tstring_format(view->env->file_old, \"%s\", old_file);\n\t\t\t\telse\n\t\t\t\t\tview->env->file_old[0] = '\\0';\n\t\t\t\tstring_format(view->env->file, \"%s\", file);\n\t\t\t\tview->env->lineno = view->env->goto_lineno = 0;\n\t\t\t\tview->env->blob[0] = 0;\n\t\t\t}\n\t\t}\n\n\t\tstring_format(view->ref, \"Press '%s' to jump to file diff\",\n\t\t\t      get_view_key(view, REQ_ENTER));\n\t} else {\n\t\tconst char *file = diff_get_pathname(view, line, false);\n\n\t\tif (file) {\n\t\t\tconst char *old_file = diff_get_pathname(view, line, true);\n\t\t\tif (old_file)\n\t\t\t\tstring_format(view->env->file_old, \"%s\", old_file);\n\t\t\telse\n\t\t\t\tview->env->file_old[0] = '\\0';\n\t\t\tif (changes_msg)\n\t\t\t\tstring_format(view->ref, \"%s to '%s'\", changes_msg, file);\n\t\t\tstring_format(view->env->file, \"%s\", file);\n\t\t\tview->env->lineno = view->env->goto_lineno = diff_get_lineno(view, line, false);\n\t\t\tif (view->env->goto_lineno > 0)\n\t\t\t\tview->env->goto_lineno--;\n\t\t\tview->env->lineno_old = diff_get_lineno(view, line, true);\n\t\t\tview->env->blob[0] = 0;\n\t\t} else {\n\t\t\tview->env->lineno = view->env->goto_lineno = (line - view->line) + 1;\n\t\t\tstring_ncopy(view->ref, view->ops->id, strlen(view->ops->id));\n\t\t}\n\t}\n\tpager_select(view, line);\n}\n\nstatic void\ndiff_select(struct view *view, struct line *line)\n{\n\tdiff_common_select(view, line, \"Changes\");\n}\n\nstatic struct view_ops diff_ops = {\n\t\"line\",\n\targv_env.commit,\n\tVIEW_DIFF_LIKE | VIEW_ADD_DESCRIBE_REF | VIEW_ADD_PAGER_REFS | VIEW_FILE_FILTER | VIEW_REFRESH | VIEW_FLEX_WIDTH,\n\tsizeof(struct diff_state),\n\tdiff_open,\n\tdiff_read,\n\tview_column_draw,\n\tdiff_request,\n\tview_column_grep,\n\tdiff_select,\n\tNULL,\n\tview_column_bit(LINE_NUMBER) | view_column_bit(TEXT),\n\tpager_get_column_data,\n};\n\nDEFINE_VIEW(diff);\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/display.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/tig.h\"\n#include \"tig/argv.h\"\n#include \"tig/io.h\"\n#include \"tig/repo.h\"\n#include \"tig/options.h\"\n#include \"tig/view.h\"\n#include \"tig/draw.h\"\n#include \"tig/display.h\"\n#include \"tig/watch.h\"\n\n#ifdef HAVE_READLINE\n#include <readline/readline.h>\n#endif /* HAVE_READLINE */\n\n#define MAX_KEYS 2000\n\nstatic void set_terminal_modes(void);\n\nstruct view *display[2];\nunsigned int current_view;\n\nstatic WINDOW *display_win[2];\nstatic WINDOW *display_title[2];\nstatic WINDOW *display_sep;\n\nstruct display_tty {\n\tFILE *file;\n\tint fd;\n\tstruct termios *attr;\n\tpid_t opgrp;\n};\nstatic struct display_tty opt_tty = { NULL, -1, NULL, -1 };\n\nstatic struct io script_io = { -1 };\n\nbool\nis_script_executing(void)\n{\n\treturn script_io.pipe != -1;\n}\n\nenum status_code\nopen_script(const char *path)\n{\n\tif (is_script_executing())\n\t\treturn error(\"Scripts cannot be run from scripts\");\n\n\tchar buf[SIZEOF_STR];\n\n\tif (!path_expand(buf, sizeof(buf), path))\n\t\treturn error(\"Failed to expand path: %s\", path);\n\n\treturn io_open(&script_io, \"%s\", buf)\n\t\t? SUCCESS : error(\"Failed to open %s\", buf);\n}\n\nbool\nopen_external_viewer(const char *argv[], const char *dir, bool silent, bool confirm, bool echo, bool quick, bool do_refresh, const char *notice)\n{\n\tbool ok;\n\n\tif (echo) {\n\t\tstruct io io;\n\t\tchar buf[SIZEOF_STR] = \"\";\n\n\t\tok = io_exec(&io, IO_RD, dir, NULL, argv, IO_RD_WITH_STDERR) && io_read_buf(&io, buf, sizeof(buf), true);\n\t\tif (*buf)\n\t\t\treport(\"%s\", buf);\n\n\t} else if (silent || is_script_executing()) {\n\t\tok = io_run_bg(argv, dir);\n\n\t} else {\n\t\tsignal(SIGINT, SIG_IGN);\n\t\tclear();\n\t\trefresh();\n\t\tendwin();                  /* restore original tty modes */\n\t\ttcsetattr(opt_tty.fd, TCSAFLUSH, opt_tty.attr);\n\t\tok = io_run_fg(argv, dir, opt_tty.fd);\n\t\tif (confirm || !ok) {\n\t\t\tif (!ok && *notice)\n\t\t\t\tfprintf(stderr, \"%s\", notice);\n\n\t\t\tif (!ok || !quick) {\n\t\t\t\tfprintf(stderr, \"Press Enter to continue\");\n\t\t\t\tgetc(opt_tty.file);\n\t\t\t}\n\t\t}\n\t\tfseek(opt_tty.file, 0, SEEK_END);\n\t\ttcsetattr(opt_tty.fd, TCSAFLUSH, opt_tty.attr);\n\t\tset_terminal_modes();\n\t\tsignal(SIGINT, SIG_DFL);\n\t}\n\n\tif (watch_update(WATCH_EVENT_AFTER_COMMAND) && do_refresh) {\n\t\tstruct view *view;\n\t\tint i;\n\n\t\tforeach_displayed_view (view, i) {\n\t\t\tif (watch_dirty(&view->watch))\n\t\t\t\trefresh_view(view);\n\t\t}\n\t}\n\tredraw_display(true);\n\treturn ok;\n}\n\n#define EDITOR_LINENO_MSG \\\n\t\"*** Your editor reported an error while opening the file.\\n\" \\\n\t\"*** This is probably because it doesn't support the line\\n\" \\\n\t\"*** number argument added automatically. The line number\\n\" \\\n\t\"*** has been disabled for now. You can permanently disable\\n\" \\\n\t\"*** it by adding the following line to ~/.tigrc\\n\" \\\n\t\"***\tset editor-line-number = no\\n\"\n\nvoid\nopen_editor(const char *file, unsigned int lineno)\n{\n\tchar editor_cmd[SIZEOF_STR];\n\tconst char *editor_argv[] = { \"sh\", \"-c\", editor_cmd, NULL };\n\tconst char *editor;\n\n\teditor = getenv(\"TIG_EDITOR\");\n\tif (!editor)\n\t\teditor = getenv(\"GIT_EDITOR\");\n\tif (!editor && *opt_editor)\n\t\teditor = opt_editor;\n\tif (!editor)\n\t\teditor = getenv(\"VISUAL\");\n\tif (!editor)\n\t\teditor = getenv(\"EDITOR\");\n\tif (!editor)\n\t\teditor = \"vi\";\n\n\tif (lineno && opt_editor_line_number)\n\t\tstring_format(editor_cmd, \"%s +%u '%s'\",\n\t\t\teditor,\n\t\t\tlineno,\n\t\t\tfile);\n\telse\n\t\tstring_format(editor_cmd, \"%s '%s'\",\n\t\t\teditor,\n\t\t\tfile);\n\n\tif (!open_external_viewer(editor_argv, repo.cdup, false, false, false, false, true, EDITOR_LINENO_MSG))\n\t\topt_editor_line_number = false;\n}\n\n\nstatic void\napply_horizontal_split(struct view *base, struct view *view)\n{\n\tview->width   = base->width;\n\tview->height  = apply_step(opt_split_view_height, base->height);\n\tview->height  = MAX(view->height, MIN_VIEW_HEIGHT);\n\tview->height  = MIN(view->height, base->height - MIN_VIEW_HEIGHT);\n\tbase->height -= view->height;\n}\n\nint\napply_vertical_split(int base_width)\n{\n\tint width  = apply_step(opt_split_view_width, base_width);\n\n\twidth = MAX(width, MIN_VIEW_WIDTH);\n\twidth = MIN(width, base_width - MIN_VIEW_WIDTH);\n\n\treturn width;\n}\n\nbool\nvertical_split_is_enabled(enum vertical_split vsplit, int height, int width)\n{\n\tif (vsplit == VERTICAL_SPLIT_AUTO)\n\t\treturn width > 160 || width * VSPLIT_SCALE > (height - 1) * 2;\n\treturn vsplit == VERTICAL_SPLIT_VERTICAL;\n}\n\nstatic void\nredraw_display_separator(bool clear)\n{\n\tif (display_sep) {\n\t\tint lineno = 0;\n\n\t\tif (clear)\n\t\t\twclear(display_sep);\n\t\twbkgdset(display_sep, get_line_attr(NULL, LINE_TITLE_BLUR));\n\n\t\tswitch (opt_line_graphics) {\n\t\tcase GRAPHIC_ASCII:\n\t\t\twhile (mvwaddch(display_sep, lineno++, 0, '|') == OK);\n\t\t\tbreak;\n\t\tcase GRAPHIC_DEFAULT:\n\t\t\twhile (mvwaddch(display_sep, lineno++, 0, ACS_VLINE) == OK);\n\t\t\tbreak;\n\t\tcase GRAPHIC_UTF_8:\n\t\t\twhile (mvwaddstr(display_sep, lineno++, 0, \"│\") == OK);\n\t\t\tbreak;\n\t\t}\n\n\t\twnoutrefresh(display_sep);\n\t}\n}\n\nstatic void create_or_move_display_separator(int height, int x)\n{\n\tif (!display_sep) {\n\t\tdisplay_sep = newwin(height, 1, 0, x);\n\t\tif (!display_sep)\n\t\t\tdie(\"Failed to create separator window\");\n\n\t} else {\n\t\twresize(display_sep, height, 1);\n\t\tmvwin(display_sep, 0, x);\n\t}\n}\n\nstatic void remove_display_separator(void)\n{\n\tif (display_sep) {\n\t\tdelwin(display_sep);\n\t\tdisplay_sep = NULL;\n\t}\n}\n\nvoid\nresize_display(void)\n{\n\tint x, y, i;\n\tint height, width;\n\tstruct view *base = display[0];\n\tstruct view *view = display[1] ? display[1] : display[0];\n\tbool vsplit;\n\n\t/* Setup window dimensions */\n\n\tgetmaxyx(stdscr, height, width);\n\n\t/* Make room for the status window. */\n\tbase->height = height - 1;\n\tbase->width = width;\n\n\tvsplit = vertical_split_is_enabled(opt_vertical_split, height, width);\n\n\tif (view != base) {\n\t\tif (vsplit) {\n\t\t\tview->height = base->height;\n\t\t\tview->width = apply_vertical_split(base->width);\n\t\t\tbase->width -= view->width;\n\n\t\t\t/* Make room for the separator bar. */\n\t\t\tview->width -= 1;\n\n\t\t\tcreate_or_move_display_separator(base->height, base->width);\n\t\t\tredraw_display_separator(false);\n\t\t} else {\n\t\t\tremove_display_separator();\n\t\t\tapply_horizontal_split(base, view);\n\t\t}\n\n\t\t/* Make room for the title bar. */\n\t\tview->height -= 1;\n\n\t} else {\n\t\tremove_display_separator();\n\t}\n\n\t/* Make room for the title bar. */\n\tbase->height -= 1;\n\n\tx = y = 0;\n\n\tforeach_displayed_view (view, i) {\n\t\tif (!display_win[i]) {\n\t\t\tdisplay_win[i] = newwin(view->height, view->width, y, x);\n\t\t\tif (!display_win[i])\n\t\t\t\tdie(\"Failed to create %s view\", view->name);\n\n\t\t\tscrollok(display_win[i], false);\n\n\t\t\tdisplay_title[i] = newwin(1, view->width, y + view->height, x);\n\t\t\tif (!display_title[i])\n\t\t\t\tdie(\"Failed to create title window\");\n\n\t\t} else {\n\t\t\twresize(display_win[i], view->height, view->width);\n\t\t\tmvwin(display_win[i], y, x);\n\t\t\twresize(display_title[i], 1, view->width);\n\t\t\tmvwin(display_title[i], y + view->height, x);\n\t\t}\n\n\t\tview->win = display_win[i];\n\t\tview->title = display_title[i];\n\n\t\tif (vsplit)\n\t\t\tx += view->width + 1;\n\t\telse\n\t\t\ty += view->height + 1;\n\t}\n\n\tredraw_display_separator(false);\n}\n\nvoid\nredraw_display(bool clear)\n{\n\tstruct view *view;\n\tint i;\n\n\tforeach_displayed_view (view, i) {\n\t\tif (clear)\n\t\t\twclear(view->win);\n\t\tredraw_view(view);\n\t\tupdate_view_title(view);\n\t}\n\n\tredraw_display_separator(clear);\n}\n\nstatic bool\nsave_window_line(FILE *file, WINDOW *win, int y, char *buf, size_t bufsize)\n{\n\tint read = mvwinnstr(win, y, 0, buf, bufsize);\n\tconst char *out = read == ERR ? \"\" : string_trim_end(buf);\n\n\treturn read == ERR ? false : fprintf(file, \"%s\\n\", out) == strlen(out) + 1;\n}\n\nstatic bool\nsave_window_vline(FILE *file, WINDOW *left, WINDOW *right, int y, char *buf, size_t bufsize)\n{\n\tint read1 = mvwinnstr(left, y, 0, buf, bufsize);\n\tint read2 = read1 == ERR ? ERR : mvwinnstr(right, y, 0, buf + read1 + 1, bufsize - read1 - 1);\n\n\tif (read2 == ERR)\n\t\treturn false;\n\tbuf[read1] = '|';\n\tbuf = string_trim_end(buf);\n\n\treturn fprintf(file, \"%s\\n\", string_trim_end(buf)) == strlen(buf) + 1;\n}\n\nbool\nsave_display(const char *path)\n{\n\tint i, width;\n\tsize_t linelen;\n\tchar *line;\n\tFILE *file = fopen(path, \"w\");\n\tbool ok = true;\n\tstruct view *view = display[0];\n\n\tif (!file)\n\t\treturn false;\n\n\tgetmaxyx(stdscr, i, width);\n\tlinelen = width * 4;\n\tline = malloc(linelen + 1);\n\tif (!line) {\n\t\tfclose(file);\n\t\treturn false;\n\t}\n\n\tif (view->width < width && display[1]) {\n\t\tstruct view *left = display[0],\n\t\t\t    *right = display[1];\n\n\t\tfor (i = 0; ok && i < left->height; i++)\n\t\t\tok = save_window_vline(file, left->win, right->win, i, line, linelen);\n\t\tif (ok)\n\t\t\tok = save_window_vline(file, left->title, right->title, 0, line, linelen);\n\t} else {\n\t\tint j;\n\n\t\tforeach_displayed_view (view, j) {\n\t\t\tfor (i = 0; ok && i < view->height; i++)\n\t\t\t\tok = save_window_line(file, view->win, i, line, linelen);\n\t\t\tif (ok)\n\t\t\t\tok = save_window_line(file, view->title, 0, line, linelen);\n\t\t}\n\t}\n\n\tfree(line);\n\tfclose(file);\n\treturn ok;\n}\n\n/*\n * Dump view data to file.\n *\n * FIXME: Add support for more line state and column data.\n */\nbool\nsave_view(struct view *view, const char *path)\n{\n\tstruct view_column_data column_data = {0};\n\tFILE *file = fopen(path, \"w\");\n\tsize_t i;\n\n\tif (!file)\n\t\treturn false;\n\n\tfprintf(file, \"View: %s\\n\", view->name);\n\tif (view->prev && view->prev != view)\n\t\tfprintf(file, \"Prev: %s\\n\", view->prev->name);\n\tif (view->parent)\n\t\tfprintf(file, \"Parent: %s\\n\", view->parent->name);\n\tfprintf(file, \"Ref: %s\\n\", view->ref);\n\tfprintf(file, \"Dimensions: height=%d width=%d\\n\", view->height, view->width);\n\tfprintf(file, \"Position: offset=%lu column=%lu lineno=%lu\\n\",\n\t\tview->pos.offset,\n\t\tview->pos.col,\n\t\tview->pos.lineno);\n\n\tfor (i = 0; i < view->lines; i++) {\n\t\tstruct line *line = &view->line[i];\n\n\t\tfprintf(file, \"line[%3zu] type=%s selected=%u\\n\",\n\t\t\ti,\n\t\t\tenum_name(get_line_type_name(line->type)),\n\t\t\tline->selected);\n\n\t\tif (view->columns &&\n\t\t    view->ops->get_column_data(view, line, &column_data) &&\n\t\t    column_data.box) {\n\t\t\tconst struct box *box = column_data.box;\n\t\t\tsize_t j;\n\t\t\tsize_t offset;\n\n\t\t\tfprintf(file, \"line[%3zu] cells=%zu text=\",\n\t\t\t\ti, box->cells);\n\n\t\t\tfor (j = 0, offset = 0; j < box->cells; j++) {\n\t\t\t\tconst struct box_cell *cell = &box->cell[j];\n\n\t\t\t\tfprintf(file, \"[%.*s]\", (int) cell->length, box->text + offset);\n\t\t\t\toffset += cell->length;\n\t\t\t}\n\n\t\t\tfprintf(file, \"\\n\");\n\t\t}\n\t}\n\n\tfclose(file);\n\treturn true;\n}\n\n/*\n * Status management\n */\n\n/* Whether or not the curses interface has been initialized. */\nstatic bool cursed = false;\n\n/* The status window is used for polling keystrokes. */\nWINDOW *status_win;\n\n/* Reading from the prompt? */\nstatic bool input_mode = false;\n\nstatic bool status_empty = false;\n\n/* Update status and title window. */\nstatic bool\nupdate_status_window(struct view *view, const char *context, const char *msg, va_list args)\n{\n\tif (input_mode)\n\t\treturn false;\n\n\tif (!status_empty || *msg) {\n\t\twmove(status_win, 0, 0);\n\t\tif (*msg) {\n\t\t\tvw_printw(status_win, msg, args);\n\t\t\tstatus_empty = false;\n\t\t} else {\n\t\t\tstatus_empty = true;\n\t\t}\n\t\twclrtoeol(status_win);\n\n\t\tif (context && *context) {\n\t\t\tsize_t contextlen = strlen(context);\n\t\t\tint x, y, width, ___;\n\n\t\t\tgetyx(status_win, y, x);\n\t\t\tgetmaxyx(status_win, ___, width);\n\t\t\t(void) ___;\n\t\t\tif (contextlen < width - x) {\n\t\t\t\tmvwprintw(status_win, 0, width - contextlen, \"%s\", context);\n\t\t\t\twmove(status_win, y, x);\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nvoid\nupdate_status(const char *msg, ...)\n{\n\tva_list args;\n\n\tva_start(args, msg);\n\tupdate_status_window(display[current_view], \"\", msg, args);\n\tva_end(args);\n}\n\nvoid\nupdate_status_with_context(const char *context, const char *msg, ...)\n{\n\tva_list args;\n\n\tva_start(args, msg);\n\tupdate_status_window(display[current_view], context, msg, args);\n\tva_end(args);\n}\n\nvoid\nreport(const char *msg, ...)\n{\n\tstruct view *view = display[current_view];\n\tva_list args;\n\n\tif (!view) {\n\t\tchar buf[SIZEOF_STR];\n\t\tint retval;\n\n\t\tFORMAT_BUFFER(buf, sizeof(buf), msg, retval, true);\n\t\tdie(\"%s\", buf);\n\t}\n\n\tva_start(args, msg);\n\tif (update_status_window(view, \"\", msg, args))\n\t\twnoutrefresh(status_win);\n\tva_end(args);\n\n\tupdate_view_title(view);\n}\n\nvoid\nreport_clear(void)\n{\n\tstruct view *view = display[current_view];\n\n\tif (!view)\n\t\treturn;\n\n\tif (!input_mode && !status_empty) {\n\t\twerase(status_win);\n\t\tdoupdate();\n\t}\n\tstatus_empty = true;\n\tupdate_view_title(view);\n}\n\nstatic void\ndone_display(void)\n{\n\tif (cursed) {\n\t\tif (status_win) {\n\t\t\twerase(status_win);\n\t\t\tdoupdate();\n\t\t}\n\t\tcurs_set(1);\n\t\tendwin();\n\t}\n\tcursed = false;\n\n\tif (opt_tty.attr) {\n\t\ttcsetattr(opt_tty.fd, TCSAFLUSH, opt_tty.attr);\n\t\tfree(opt_tty.attr);\n\t\topt_tty.attr = NULL;\n\t}\n\tif (opt_tty.opgrp != -1) {\n\t\tsignal(SIGTTOU, SIG_IGN);\n\t\ttcsetpgrp(opt_tty.fd, opt_tty.opgrp);\n\t\tsignal(SIGTTOU, SIG_DFL);\n\t}\n}\n\nstatic void\nset_terminal_modes(void)\n{\n\tnonl();\t\t/* Disable conversion and detect newlines from input. */\n\traw();\t\t/* Take input chars one at a time, no wait for \\n */\n\tnoecho();\t/* Don't echo input */\n\tcurs_set(0);\n\tleaveok(stdscr, false);\n}\n\nvoid\ninit_tty(void)\n{\n\t/* open */\n\topt_tty.file = fopen(\"/dev/tty\", \"r+\");\n\tif (!opt_tty.file)\n\t\tdie(\"Failed to open tty for input\");\n\topt_tty.fd = fileno(opt_tty.file);\n#ifdef HAVE_READLINE\n\trl_instream = opt_tty.file;\n#endif /* HAVE_READLINE */\n\n\t/* attributes */\n\topt_tty.attr = calloc(1, sizeof(struct termios));\n\tif (!opt_tty.attr)\n\t\tdie(\"Failed allocation for tty attributes\");\n\ttcgetattr(opt_tty.fd, opt_tty.attr);\n\n\tif (opt_pgrp) {\n\t\t/* process-group leader */\n\t\tsetpgid(getpid(), getpid());\n\t\topt_tty.opgrp = tcgetpgrp(opt_tty.fd);\n\t\tsignal(SIGTTOU, SIG_IGN);\n\t\ttcsetpgrp(opt_tty.fd, getpid());\n\t\tsignal(SIGTTOU, SIG_DFL);\n\t}\n\n\tdie_callback = done_display;\n}\n\nvoid\ninit_display(void)\n{\n\tbool no_display = !!getenv(\"TIG_NO_DISPLAY\");\n\tint x, y;\n\tint code;\n\n\tif (!opt_tty.file)\n\t\tdie(\"Can't initialize display without tty\");\n\n\tif (atexit(done_display))\n\t\tdie(\"Failed to register done_display\");\n\n\t/* Initialize the curses library */\n\tif (!no_display && isatty(STDIN_FILENO)) {\n\t\t/* Needed for ncurses 5.4 compatibility. */\n\t\tcursed = !!initscr();\n\t} else {\n\t\t/* Leave stdin and stdout alone when acting as a pager. */\n\t\tFILE *out_tty;\n\n\t\tout_tty = no_display ? fopen(\"/dev/null\", \"w+\") : opt_tty.file;\n\t\tif (!out_tty)\n\t\t\tdie(\"Failed to open tty for output\");\n\t\tcursed = !!newterm(NULL, out_tty, opt_tty.file);\n\t}\n\n\tif (!cursed)\n\t\tdie(\"Failed to initialize curses\");\n\n\tset_terminal_modes();\n\tinit_colors();\n\n\tgetmaxyx(stdscr, y, x);\n\tstatus_win = newwin(1, x, y - 1, 0);\n\tif (!status_win)\n\t\tdie(\"Failed to create status window\");\n\n\t/* Enable keyboard mapping */\n\tkeypad(status_win, true);\n\twbkgdset(status_win, get_line_attr(NULL, LINE_STATUS));\n\tenable_mouse(opt_mouse);\n\n#ifdef NCURSES_VERSION\n\t/* Disable extended keys so that esc-codes will be received\n\t * instead of extended key values (> KEY_MAX).\n\t * Then these keys can be mapped in .tigrc etc. */\n\tfor (code = KEY_MAX; code < MAX_KEYS; code++) {\n\t\tkeyok(code, false);\n\t}\n#endif\n\n#if defined(NCURSES_VERSION_PATCH) && (NCURSES_VERSION_PATCH >= 20080119)\n\tset_tabsize(opt_tab_size);\n#else\n\tTABSIZE = opt_tab_size;\n#endif\n}\n\nstatic bool\nread_script(struct key *key)\n{\n\tstatic struct buffer input_buffer;\n\tstatic const char *line = \"\";\n\tenum status_code code;\n\n\twhile (!line || !*line) {\n\t\tif (input_buffer.data && *input_buffer.data == ':') {\n\t\t\tline = \"<Enter>\";\n\t\t\tmemset(&input_buffer, 0, sizeof(input_buffer));\n\n\t\t} else if (!io_get(&script_io, &input_buffer, '\\n', true)) {\n\t\t\tio_done(&script_io);\n\t\t\treturn false;\n\t\t} else if (input_buffer.data[strspn(input_buffer.data, \" \\t\")] == '#') {\n\t\t\tcontinue;\n\t\t} else {\n\t\t\tline = input_buffer.data;\n\t\t}\n\t}\n\n\tcode = get_key_value(&line, key);\n\tif (code != SUCCESS)\n\t\tdie(\"Error reading script: %s\", get_status_message(code));\n\treturn true;\n}\n\nint\nget_input_char(void)\n{\n\tif (is_script_executing()) {\n\t\tstatic struct key key;\n\t\tstatic int bytes_pos;\n\n\t\tif (!key.modifiers.multibytes || bytes_pos >= strlen(key.data.bytes)) {\n\t\t\tif (!read_script(&key))\n\t\t\t\treturn 0;\n\t\t\tbytes_pos = 0;\n\t\t}\n\n\t\tif (!key.modifiers.multibytes) {\n\t\t\tif (key.data.value < 128)\n\t\t\t\treturn key.data.value;\n\t\t\tdie(\"Only ASCII control characters can be used in prompts: %d\", key.data.value);\n\t\t}\n\n\t\treturn key.data.bytes[bytes_pos++];\n\t}\n\n\treturn getc(opt_tty.file);\n}\n\nstatic bool\nupdate_views(void)\n{\n\tstruct view *view;\n\tint i;\n\tbool is_loading = false;\n\n\tforeach_view (view, i) {\n\t\tupdate_view(view);\n\t\tif (view->pipe ||\n\t\t    (view_is_displayed(view) && view->watch.changed))\n\t\t\tis_loading = true;\n\t}\n\n\treturn is_loading;\n}\n\nint\nget_input(int prompt_position, struct key *key)\n{\n\tstruct view *view;\n\tint i, key_value, cursor_y, cursor_x;\n\n\tif (prompt_position > 0)\n\t\tinput_mode = true;\n\n\tmemset(key, 0, sizeof(*key));\n\n\twhile (true) {\n\t\tint delay = -1;\n\n\t\tif (opt_refresh_mode != REFRESH_MODE_MANUAL) {\n\t\t\tbool refs_refreshed = false;\n\n\t\t\tif (opt_refresh_mode == REFRESH_MODE_PERIODIC)\n\t\t\t\tdelay = watch_periodic(opt_refresh_interval);\n\n\t\t\tforeach_displayed_view (view, i) {\n\t\t\t\tif (view_can_refresh(view) &&\n\t\t\t\t\twatch_dirty(&view->watch)) {\n\t\t\t\t\tif (!refs_refreshed) {\n\t\t\t\t\t\tload_refs(true);\n\t\t\t\t\t\trefs_refreshed = true;\n\t\t\t\t\t}\n\t\t\t\t\trefresh_view(view);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (update_views())\n\t\t\tdelay = 0;\n\n\t\t/* Update the cursor position. */\n\t\tif (prompt_position) {\n\t\t\tgetbegyx(status_win, cursor_y, cursor_x);\n\t\t\tcursor_x = prompt_position;\n\t\t} else {\n\t\t\tview = display[current_view];\n\t\t\tgetbegyx(view->win, cursor_y, cursor_x);\n\t\t\tcursor_x += view->width - 1;\n\t\t\tcursor_y += view->pos.lineno - view->pos.offset;\n\t\t}\n\t\tset_cursor_pos(cursor_y, cursor_x);\n\n\t\tif (is_script_executing()) {\n\t\t\t/* Wait for the current command to complete. */\n\t\t\tif (delay == 0 || !read_script(key))\n\t\t\t\tcontinue;\n\t\t\treturn key->modifiers.multibytes ? OK : key->data.value;\n\n\t\t} else {\n\t\t\t/* Refresh, accept single keystroke of input */\n\t\t\tdoupdate();\n\t\t\twtimeout(status_win, delay);\n\t\t\tkey_value = wgetch(status_win);\n\t\t}\n\n\t\t/* wgetch() with nodelay() enabled returns ERR when\n\t\t * there's no input. */\n\t\tif (key_value == ERR) {\n\n\t\t} else if (key_value == KEY_RESIZE) {\n\t\t\tint height, width;\n\n\t\t\tgetmaxyx(stdscr, height, width);\n\n\t\t\twresize(status_win, 1, width);\n\t\t\tmvwin(status_win, height - 1, 0);\n\t\t\twnoutrefresh(status_win);\n\t\t\tresize_display();\n\t\t\tredraw_display(true);\n\n\t\t} else if (key_value == KEY_CTL('z')) {\n\t\t\traise(SIGTSTP);\n\n\t\t} else {\n\t\t\tint pos, key_length;\n\n\t\t\tinput_mode = false;\n\t\t\tif (key_value == erasechar())\n\t\t\t\tkey_value = KEY_BACKSPACE;\n\n\t\t\t/*\n\t\t\t * Ctrl-<key> values are represented using a 0x1F\n\t\t\t * bitmask on the key value. To 'unmap' we assume that:\n\t\t\t *\n\t\t\t * - Ctrl-Z is handled separately for job control.\n\t\t\t * - Ctrl-m is the same as Return/Enter.\n\t\t\t * - Ctrl-i is the same as Tab.\n\t\t\t * - Ctrl-[ is the same as Esc.\n\t\t\t *\n\t\t\t * For all other key values in the range the Ctrl flag\n\t\t\t * is set and the key value is updated to the proper\n\t\t\t * ASCII value.\n\t\t\t */\n\t\t\tif (KEY_CTL('@') <= key_value && key_value <= KEY_CTL('_') &&\n\t\t\t    key_value != KEY_RETURN && key_value != KEY_TAB && key_value != KEY_ESC) {\n\t\t\t\tkey->modifiers.control = 1;\n\t\t\t\tkey_value = key_value | 0x40;\n\t\t\t}\n\n\t\t\tif ((key_value >= KEY_MIN && key_value < KEY_MAX) || key_value <= 0x1F) {\n\t\t\t\tkey->data.value = key_value;\n\t\t\t\treturn key->data.value;\n\t\t\t}\n\n\t\t\tkey->modifiers.multibytes = 1;\n\t\t\tkey->data.bytes[0] = key_value;\n\n\t\t\tkey_length = utf8_char_length(key->data.bytes);\n\t\t\tfor (pos = 1; pos < key_length && pos < sizeof(key->data.bytes) - 1; pos++) {\n\t\t\t\tkey->data.bytes[pos] = wgetch(status_win);\n\t\t\t}\n\n\t\t\treturn OK;\n\t\t}\n\t}\n}\n\nvoid\nenable_mouse(bool enable)\n{\n#ifdef NCURSES_MOUSE_VERSION\n\tstatic bool enabled = false;\n\n\tif (enable != enabled) {\n\t\tmmask_t mask = enable ? ALL_MOUSE_EVENTS : 0;\n\n\t\tif (mousemask(mask, NULL))\n\t\t\tmouseinterval(0);\n\t\tenabled = enable;\n\t}\n#endif\n}\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/draw.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/tig.h\"\n#include \"tig/graph.h\"\n#include \"tig/draw.h\"\n#include \"tig/options.h\"\n#include \"tig/display.h\"\n#include \"compat/hashtab.h\"\n\nstatic const enum line_type palette_colors[] = {\n\tLINE_PALETTE_0,\n\tLINE_PALETTE_1,\n\tLINE_PALETTE_2,\n\tLINE_PALETTE_3,\n\tLINE_PALETTE_4,\n\tLINE_PALETTE_5,\n\tLINE_PALETTE_6,\n\tLINE_PALETTE_7,\n\tLINE_PALETTE_8,\n\tLINE_PALETTE_9,\n\tLINE_PALETTE_10,\n\tLINE_PALETTE_11,\n\tLINE_PALETTE_12,\n\tLINE_PALETTE_13,\n};\n\n/*\n * View drawing.\n */\n\nstatic inline void\nset_view_attr(struct view *view, enum line_type type)\n{\n\tif (!view->curline->selected && view->curtype != type) {\n\t\t(void) wattrset(view->win, get_view_attr(view, type));\n\t\twchgat(view->win, -1, 0, get_view_color(view, type), NULL);\n#if defined(NCURSES_VERSION_PATCH) && NCURSES_VERSION_PATCH < 20061217\n\t\ttouchwin(view->win);\n#endif\n\t\tview->curtype = type;\n\t}\n}\n\n#define VIEW_MAX_LEN(view) ((view)->width + (view)->pos.col - (view)->col)\n\nstatic bool\ndraw_chars(struct view *view, enum line_type type, const char *string, int length,\n\t   int max_width, bool use_tilde)\n{\n\tint len = 0;\n\tint col = 0;\n\tint trimmed = false;\n\tsize_t skip = view->pos.col > view->col ? view->pos.col - view->col : 0;\n\n\tif (max_width <= 0)\n\t\treturn VIEW_MAX_LEN(view) <= 0;\n\n\tif (length == -1)\n\t\tlength = strlen(string);\n\n\tif (opt_iconv_out != ICONV_NONE) {\n\t\tstring = encoding_iconv(opt_iconv_out, string, length);\n\t\tif (!string)\n\t\t\treturn VIEW_MAX_LEN(view) <= 0;\n\t\tlength = strlen(string);\n\t}\n\n\tlen = utf8_length(&string, length, skip, &col, max_width, &trimmed, use_tilde, opt_tab_size);\n\n\tset_view_attr(view, type);\n\tif (len > 0)\n\t\twaddnstr(view->win, string, len);\n\n\tif (trimmed && use_tilde) {\n\t\tset_view_attr(view, LINE_DELIMITER);\n\t\twaddstr(view->win, opt_truncation_delimiter ? opt_truncation_delimiter : \"~\");\n\t\tcol++;\n\t}\n\n\tview->col += col;\n\treturn VIEW_MAX_LEN(view) <= 0;\n}\n\nstatic bool\ndraw_space(struct view *view, enum line_type type, int max, int spaces)\n{\n\tstatic char space[] = \"                    \";\n\n\tspaces = MIN(max, spaces);\n\n\twhile (spaces > 0) {\n\t\tint len = MIN(spaces, sizeof(space) - 1);\n\n\t\tif (draw_chars(view, type, space, -1, len, false))\n\t\t\treturn true;\n\t\tspaces -= len;\n\t}\n\n\treturn VIEW_MAX_LEN(view) <= 0;\n}\n\nstatic bool\ndraw_text_expanded(struct view *view, enum line_type type, const char *string, int length, int max_width, bool use_tilde)\n{\n\tstatic char text[SIZEOF_STR];\n\n\tif (length == -1)\n\t\tlength = strlen(string);\n\n\tdo {\n\t\tsize_t pos = string_expand(text, sizeof(text), string, length, opt_tab_size);\n\t\tsize_t col = view->col;\n\n\t\tif (draw_chars(view, type, text, -1, max_width, use_tilde))\n\t\t\treturn true;\n\t\tstring += pos;\n\t\tlength -= pos;\n\t\tmax_width -= view->col - col;\n\t} while (*string && length > 0);\n\n\treturn VIEW_MAX_LEN(view) <= 0;\n}\n\nstatic inline bool\ndraw_textn(struct view *view, enum line_type type, const char *string, int length)\n{\n\treturn draw_text_expanded(view, type, string, length, VIEW_MAX_LEN(view), false);\n}\n\nbool\ndraw_text(struct view *view, enum line_type type, const char *string)\n{\n\treturn draw_textn(view, type, string, -1);\n}\n\nstatic bool\ndraw_text_overflow(struct view *view, const char *text, enum line_type type,\n\t\t   int overflow_length, int offset)\n{\n\tbool on = overflow_length > 0;\n\n\tif (on) {\n\t\tint overflow = overflow_length + offset;\n\t\tint max = MIN(VIEW_MAX_LEN(view), overflow);\n\t\tconst char *tmp = text;\n\t\tint text_width = 0;\n\t\tint trimmed = false;\n\t\tsize_t len = utf8_length(&tmp, -1, 0, &text_width, max, &trimmed, false, 1);\n\n\t\tif (draw_text_expanded(view, type, text, -1, text_width, max < overflow))\n\t\t\treturn true;\n\n\t\ttext += len;\n\t\ttype = LINE_OVERFLOW;\n\t}\n\n\tif (*text && draw_text(view, type, text))\n\t\treturn true;\n\n\treturn VIEW_MAX_LEN(view) <= 0;\n}\n\nbool PRINTF_LIKE(3, 4)\ndraw_formatted(struct view *view, enum line_type type, const char *format, ...)\n{\n\tchar text[SIZEOF_STR];\n\tint retval;\n\n\tFORMAT_BUFFER(text, sizeof(text), format, retval, true);\n\treturn retval >= 0 ? draw_text(view, type, text) : VIEW_MAX_LEN(view) <= 0;\n}\n\nbool\ndraw_graphic(struct view *view, enum line_type type, const chtype graphic[], size_t size, bool separator)\n{\n\tsize_t skip = view->pos.col > view->col ? view->pos.col - view->col : 0;\n\tint max = VIEW_MAX_LEN(view);\n\tint i;\n\n\tif (max < size)\n\t\tsize = max;\n\n\tset_view_attr(view, type);\n\t/* Using waddch() instead of waddnstr() ensures that\n\t * they'll be rendered correctly for the cursor line. */\n\tfor (i = skip; i < size; i++)\n\t\twaddch(view->win, graphic[i]);\n\n\tview->col += size;\n\tif (separator) {\n\t\tif (size < max && skip <= size)\n\t\t\twaddch(view->win, ' ');\n\t\tview->col++;\n\t}\n\n\treturn VIEW_MAX_LEN(view) <= 0;\n}\n\nbool\ndraw_field(struct view *view, enum line_type type, const char *text, int width, enum align align, bool trim)\n{\n\tint max = MIN(VIEW_MAX_LEN(view), width + 1);\n\tint col = view->col;\n\n\tif (!text)\n\t\treturn draw_space(view, type, max, max);\n\n\tif (align == ALIGN_RIGHT) {\n\t\tint textlen = utf8_width_max(text, max);\n\t\tint leftpad = max - textlen - 1;\n\n\t\tif (leftpad > 0) {\n\t\t\tif (draw_space(view, type, leftpad, leftpad))\n\t\t\t\treturn true;\n\t\t\tmax -= leftpad;\n\t\t\tcol += leftpad;;\n\t\t}\n\t}\n\n\treturn draw_chars(view, type, text, -1, max - 1, trim)\n\t    || draw_space(view, type, max - (view->col - col), max);\n}\n\nstatic bool\ndraw_date(struct view *view, struct view_column *column, const struct time *time)\n{\n\tstruct date_options *opt = &column->opt.date;\n\tenum date date = opt->display;\n\tconst char *text = mkdate(time, date, opt->local, opt->format);\n\tenum align align = (date == DATE_RELATIVE || date == DATE_RELATIVE_COMPACT) ? ALIGN_RIGHT : ALIGN_LEFT;\n\n\tif (date == DATE_NO)\n\t\treturn false;\n\n\treturn draw_field(view, LINE_DATE, text, column->width, align, false);\n}\n\nstatic bool\ndraw_author(struct view *view, struct view_column *column, const struct ident *author)\n{\n\tbool trim = author_trim(column->width);\n\tconst char *text = mkauthor(author, MAX(column->opt.author.width, column->opt.author.maxwidth),\n\t\t\t\t    column->opt.author.display);\n\n\tif (column->opt.author.display == AUTHOR_NO)\n\t\treturn false;\n\n\treturn draw_field(view, LINE_AUTHOR, text, column->width, ALIGN_LEFT, trim);\n}\n\nstatic bool\ndraw_committer(struct view *view, struct view_column *column, const struct ident *committer)\n{\n\tbool trim = author_trim(column->width);\n\tconst char *text = mkauthor(committer, MAX(column->opt.committer.width, column->opt.committer.maxwidth),\n\t\t\t\t    column->opt.committer.display);\n\n\tif (column->opt.committer.display == AUTHOR_NO)\n\t\treturn false;\n\n\treturn draw_field(view, LINE_COMMITTER, text, column->width, ALIGN_LEFT, trim);\n}\n\nstatic bool\ndraw_id(struct view *view, struct view_column *column, const char *id)\n{\n\tenum line_type type = LINE_ID;\n\n\tif (!column->opt.id.display)\n\t\treturn false;\n\n\tif (column->opt.id.color && id) {\n\t\thashval_t color = iterative_hash(id, SIZEOF_REV - 1, 0);\n\n\t\ttype = palette_colors[color % ARRAY_SIZE(palette_colors)];\n\t}\n\n\treturn draw_field(view, type, id, column->width, ALIGN_LEFT, false);\n}\n\nstatic bool\ndraw_filename(struct view *view, struct view_column *column, const char *filename, mode_t mode)\n{\n\tsize_t width = filename ? utf8_width(filename) : 0;\n\tbool trim = width >= column->width;\n\t/* Note, type for filename field is independent from line->type. */\n\tenum line_type type = S_ISDIR(mode) ? LINE_DIRECTORY : LINE_FILE;\n\tint column_width = column->width ? column->width : width;\n\n\tif (column->opt.file_name.display == FILENAME_NO)\n\t\treturn false;\n\n\treturn draw_field(view, type, filename, column_width, ALIGN_LEFT, trim);\n}\n\nstatic bool\ndraw_file_size(struct view *view, struct view_column *column, unsigned long size, mode_t mode)\n{\n\tconst char *str = S_ISREG(mode) ? mkfilesize(size, column->opt.file_size.display) : NULL;\n\n\tif (!column->width || column->opt.file_size.display == FILE_SIZE_NO)\n\t\treturn false;\n\n\treturn draw_field(view, LINE_FILE_SIZE, str, column->width, ALIGN_RIGHT, false);\n}\n\nstatic bool\ndraw_mode(struct view *view, struct view_column *column, mode_t mode)\n{\n\tconst char *str = mkmode(mode);\n\n\tif (!column->width || !column->opt.mode.display)\n\t\treturn false;\n\n\treturn draw_field(view, LINE_MODE, str, column->width, ALIGN_LEFT, false);\n}\n\nstatic bool\ndraw_lineno_custom(struct view *view, struct view_column *column, unsigned int lineno)\n{\n\tchar number[10];\n\tunsigned long digits3 = MIN(9,MAX(3,column->width));\n\tint max = MIN(VIEW_MAX_LEN(view), digits3);\n\tchar *text = NULL;\n\tchtype separator = ACS_VLINE;\n\tstruct line_number_options *opts = &column->opt.line_number;\n\tint interval = opts->interval > 0 ? opts->interval : 5;\n\n\tif (!column->opt.line_number.display)\n\t\treturn false;\n\n\tif (lineno == 1 || (lineno % interval) == 0) {\n\t\tstatic char fmt[] = \"%3u\";\n\n\t\tfmt[1] = '0' + digits3;\n\t\tif (string_format(number, fmt, lineno))\n\t\t\ttext = number;\n\t}\n\tif (text)\n\t\tdraw_chars(view, LINE_LINE_NUMBER, text, -1, max, true);\n\telse\n\t\tdraw_space(view, LINE_LINE_NUMBER, max, digits3);\n\n\tswitch (opt_line_graphics) {\n\tcase GRAPHIC_ASCII:\n\t\treturn draw_chars(view, LINE_DEFAULT, \"| \", -1, 2, false);\n\tcase GRAPHIC_DEFAULT:\n\t\treturn draw_graphic(view, LINE_DEFAULT, &separator, 1, true);\n\tcase GRAPHIC_UTF_8:\n\t\treturn draw_chars(view, LINE_DEFAULT, \"│ \", -1, 2, false);\n\t}\n\n\treturn false;\n}\n\nbool\ndraw_lineno(struct view *view, struct view_column *column, unsigned int lineno, bool add_offset)\n{\n\tlineno += 1;\n\tif (add_offset)\n\t\tlineno += view->pos.offset;\n\treturn draw_lineno_custom(view, column, lineno);\n}\n\nstatic bool\ndraw_ref(struct view *view, struct view_column *column, const struct ref *ref)\n{\n\tenum line_type type = !ref || !ref->valid ? LINE_DEFAULT : get_line_type_from_ref(ref);\n\tconst char *name = ref ? ref->name : NULL;\n\n\treturn draw_field(view, type, name, column->width, ALIGN_LEFT, false);\n}\n\nstatic bool\ndraw_refs(struct view *view, struct view_column *column, const struct ref *refs)\n{\n\tfor (; refs; refs = refs->next) {\n\t\tconst struct ref *ref = refs;\n\t\tenum line_type type = get_line_type_from_ref(ref);\n\t\tconst struct ref_format *format = get_ref_format(opt_reference_format, ref);\n\n\t\tif (!strcmp(format->start, \"hide:\") && !*format->end)\n\t\t\tcontinue;\n\n\t\tif (draw_formatted(view, type, \"%s%s%s\", format->start, ref->name, format->end))\n\t\t\treturn true;\n\n\t\tif (draw_text(view, LINE_DEFAULT, \" \"))\n\t\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nstatic bool\ndraw_status(struct view *view, struct view_column *column,\n\t    enum line_type type, const char *status)\n{\n\tconst char *label = mkstatus(status ? *status : 0, column->opt.status.display);\n\n\treturn draw_field(view, type, label, column->width, ALIGN_LEFT, false);\n}\n\n/*\n * Revision graph\n */\n\nstatic inline enum line_type\nget_graph_color(int color_id)\n{\n\tif (color_id == GRAPH_COMMIT_COLOR)\n\t\treturn LINE_GRAPH_COMMIT;\n\tassert(color_id < ARRAY_SIZE(palette_colors));\n\treturn palette_colors[color_id];\n}\n\nstatic bool\ndraw_graph_utf8(void *view, const struct graph *graph, const struct graph_symbol *symbol, int color_id, bool first)\n{\n\tconst char *chars = graph->symbol_to_utf8(symbol);\n\n\treturn draw_text(view, get_graph_color(color_id), chars + !!first);\n}\n\nstatic bool\ndraw_graph_ascii(void *view, const struct graph *graph, const struct graph_symbol *symbol, int color_id, bool first)\n{\n\tconst char *chars = graph->symbol_to_ascii(symbol);\n\n\treturn draw_text(view, get_graph_color(color_id), chars + !!first);\n}\n\nstatic bool\ndraw_graph_chtype(void *view, const struct graph *graph, const struct graph_symbol *symbol, int color_id, bool first)\n{\n\tconst chtype *chars = graph->symbol_to_chtype(symbol);\n\n\treturn draw_graphic(view, get_graph_color(color_id), chars + !!first, 2 - !!first, false);\n}\n\nstatic bool\ndraw_graph(struct view *view, const struct graph *graph, const struct graph_canvas *canvas)\n{\n\tstatic const graph_symbol_iterator_fn fns[] = {\n\t\tdraw_graph_ascii,\n\t\tdraw_graph_chtype,\n\t\tdraw_graph_utf8\n\t};\n\n\tgraph->foreach_symbol(graph, canvas, fns[opt_line_graphics], view);\n\treturn draw_text(view, LINE_DEFAULT, \" \");\n}\n\nstatic bool\ndraw_commit_title(struct view *view, struct view_column *column, enum line_type type,\n\t\t  const struct graph *graph, const struct graph_canvas *graph_canvas,\n\t\t  const struct ref *refs, const char *commit_title)\n{\n\tif (!column->opt.commit_title.display)\n\t\treturn false;\n\tif (column->opt.commit_title.graph && graph && graph_canvas &&\n\t    draw_graph(view, graph, graph_canvas))\n\t\treturn true;\n\tif (column->opt.commit_title.refs && refs &&\n\t    draw_refs(view, column, refs))\n\t\treturn true;\n\treturn draw_text_overflow(view, commit_title, type,\n\t\t\tcolumn->opt.commit_title.overflow, 0);\n}\n\nbool\nview_column_draw(struct view *view, struct line *line, unsigned int lineno)\n{\n\tstruct view_column *column = view->columns;\n\tstruct view_column_data column_data = {0};\n\n\tif (!view->ops->get_column_data(view, line, &column_data))\n\t\treturn true;\n\n\tif (column_data.section)\n\t\tcolumn = column_data.section;\n\n\tfor (; column; column = column->next) {\n\t\tmode_t mode = column_data.mode ? *column_data.mode : 0;\n\n\t\tif (column->hidden)\n\t\t\tcontinue;\n\n\t\tswitch (column->type) {\n\t\tcase VIEW_COLUMN_DATE:\n\t\t\tif (draw_date(view, column, column_data.date))\n\t\t\t\treturn true;\n\t\t\tcontinue;\n\n\t\tcase VIEW_COLUMN_AUTHOR:\n\t\t\tif (draw_author(view, column, column_data.author))\n\t\t\t\treturn true;\n\t\t\tcontinue;\n\n\t\tcase VIEW_COLUMN_COMMITTER:\n\t\t\tif (draw_committer(view, column, column_data.committer))\n\t\t\t\treturn true;\n\t\t\tcontinue;\n\n\t\tcase VIEW_COLUMN_REF:\n\t\t\tif (draw_ref(view, column, column_data.ref))\n\t\t\t\treturn true;\n\t\t\tcontinue;\n\n\t\tcase VIEW_COLUMN_ID:\n\t\t\tif (draw_id(view, column, column_data.id))\n\t\t\t\treturn true;\n\t\t\tcontinue;\n\n\t\tcase VIEW_COLUMN_LINE_NUMBER:\n\t\t\t/* Avoid corrupting line numbers (which actually are search results)\n\t\t\t * in grep mode by special-treating that view. */\n\t\t\tif (draw_lineno(view, column,\n\t\t\t                column_data.line_number ? *column_data.line_number : lineno,\n\t\t\t                !view_has_flags(view, VIEW_GREP_LIKE)))\n\t\t\t\treturn true;\n\t\t\tcontinue;\n\n\t\tcase VIEW_COLUMN_MODE:\n\t\t\tif (draw_mode(view, column, mode))\n\t\t\t\treturn true;\n\t\t\tcontinue;\n\n\t\tcase VIEW_COLUMN_FILE_SIZE:\n\t\t\tif (draw_file_size(view, column, column_data.file_size ? *column_data.file_size : 0, mode))\n\t\t\t\treturn true;\n\t\t\tcontinue;\n\n\t\tcase VIEW_COLUMN_COMMIT_TITLE:\n\t\t\tif (draw_commit_title(view, column, line->type == LINE_MAIN_ANNOTATED ? LINE_MAIN_ANNOTATED : LINE_MAIN_COMMIT,\n\t\t\t\t\t      column_data.graph, column_data.graph_canvas, column_data.refs, column_data.commit_title))\n\t\t\t\treturn true;\n\t\t\tcontinue;\n\n\t\tcase VIEW_COLUMN_FILE_NAME:\n\t\t\tif (draw_filename(view, column, column_data.file_name, mode))\n\t\t\t\treturn true;\n\t\t\tcontinue;\n\n\t\tcase VIEW_COLUMN_SECTION:\n\t\t\tif (draw_text(view, column->opt.section.type, column->opt.section.text))\n\t\t\t\treturn true;\n\t\t\tcontinue;\n\n\t\tcase VIEW_COLUMN_STATUS:\n\t\t\tif (draw_status(view, column, line->type, column_data.status))\n\t\t\t\treturn true;\n\t\t\tcontinue;\n\n\t\tcase VIEW_COLUMN_TEXT:\n\t\t{\n\t\t\tenum line_type type = line->type;\n\t\t\tconst char *text = column_data.text;\n\t\t\tsize_t indent = 0;\n\n\t\t\tif (line->wrapped && draw_text(view, LINE_DELIMITER, \"+\"))\n\t\t\t\treturn true;\n\n\t\t\tif (line->graph_indent) {\n\t\t\t\tindent = get_graph_indent(text);\n\n\t\t\t\tif (draw_text_expanded(view, LINE_DEFAULT, text, -1, indent, false))\n\t\t\t\t\treturn true;\n\t\t\t\ttext += indent;\n\t\t\t}\n\n\t\t\tif (line->commit_title) {\n\t\t\t\tif (draw_text_overflow(view, text, LINE_DEFAULT,\n\t\t\t\t\t\t       column->opt.text.commit_title_overflow, 4))\n\t\t\t\t\treturn true;\n\n\t\t\t} else if (column_data.box) {\n\t\t\t\tconst struct box *box = column_data.box;\n\t\t\t\tconst char *text = box->text;\n\t\t\t\tsize_t i;\n\n\t\t\t\tfor (i = 0; i < box->cells; i++) {\n\t\t\t\t\tconst struct box_cell *cell = &box->cell[i];\n\t\t\t\t\tint length = cell->length;\n\n\t\t\t\t\tif (indent) {\n\t\t\t\t\t\ttext += indent;\n\t\t\t\t\t\tlength -= indent;\n\t\t\t\t\t\tindent = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (draw_textn(view, cell->type, text, length))\n\t\t\t\t\t\treturn true;\n\n\t\t\t\t\ttext += length;\n\t\t\t\t}\n\n\t\t\t} else if (draw_text(view, type, text)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\tcontinue;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nstatic void\ndraw_view_line_search_result(struct view *view, unsigned int lineno)\n{\n\tsize_t bufsize = view->width * 4;\n\tchar *buf = malloc(bufsize + 1);\n\tregmatch_t pmatch[1];\n\tregoff_t bufpos = 0;\n#if defined(NCURSES_VERSION_PATCH) && NCURSES_VERSION_PATCH < 20070721\n\tint width;\n\tint trimmed;\n#endif\n\n\tif (!buf || mvwinnstr(view->win, lineno, 0, buf, bufsize) == ERR) {\n\t\tfree(buf);\n\t\treturn;\n\t}\n\n#if defined(NCURSES_VERSION_PATCH) && NCURSES_VERSION_PATCH < 20070721\n\t/* Older winnstr() did not always stop at the end of the line. */\n\tbuf[utf8_length((const char **) &buf, bufsize, 0, &width, view->width, &trimmed, false, 1)] = 0;\n#endif\n\tbufsize = strlen(string_trim_end(buf));\n\n\twhile (bufpos < bufsize && !regexec(view->regex, buf + bufpos, ARRAY_SIZE(pmatch), pmatch, 0)) {\n\t\tregoff_t start = pmatch[0].rm_so;\n\t\tregoff_t end = pmatch[0].rm_eo;\n\n\t\tif (start == -1 || end <= 0 || end <= start)\n\t\t\tbreak;\n\n\t\tmvwchgat(view->win, lineno,\n\t\t\t utf8_width_of(buf, bufpos + start, -1),\n\t\t\t utf8_width_of(buf + bufpos + start, end - start, -1),\n\t\t\t get_view_attr(view, LINE_SEARCH_RESULT),\n\t\t\t get_view_color(view, LINE_SEARCH_RESULT),\n\t\t\t NULL);\n\n\t\tbufpos += end;\n\t}\n\n\tfree(buf);\n}\n\nbool\ndraw_view_line(struct view *view, unsigned int lineno)\n{\n\tstruct line *line;\n\tbool selected = (view->pos.offset + lineno == view->pos.lineno);\n\tbool ok;\n\n\t/* FIXME: Disabled during code split.\n\tassert(view_is_displayed(view));\n\t*/\n\n\tif (view->pos.offset + lineno >= view->lines)\n\t\treturn false;\n\n\tline = &view->line[view->pos.offset + lineno];\n\n\twmove(view->win, lineno, 0);\n\tif (line->cleareol)\n\t\twclrtoeol(view->win);\n\tview->col = 0;\n\tview->curline = line;\n\tview->curtype = LINE_NONE;\n\tline->selected = false;\n\tline->dirty = line->cleareol = 0;\n\n\tif (selected) {\n\t\tset_view_attr(view, view == display[current_view] ? LINE_CURSOR : LINE_CURSOR_BLUR);\n\t\tline->selected = true;\n\t\tview->ops->select(view, line);\n\t}\n\n\tok = view->ops->draw(view, line, lineno);\n\n\tif (ok && line->search_result && *view->grep)\n\t\tdraw_view_line_search_result(view, lineno);\n\n\treturn ok;\n}\n\nvoid\nredraw_view_dirty(struct view *view)\n{\n\tbool dirty = false;\n\tint lineno;\n\n\tfor (lineno = 0; lineno < view->height; lineno++) {\n\t\tif (view->pos.offset + lineno >= view->lines)\n\t\t\tbreak;\n\t\tif (!view->line[view->pos.offset + lineno].dirty)\n\t\t\tcontinue;\n\t\tdirty = true;\n\t\tif (!draw_view_line(view, lineno))\n\t\t\tbreak;\n\t}\n\n\tif (!dirty)\n\t\treturn;\n\twnoutrefresh(view->win);\n}\n\nvoid\nredraw_view_from(struct view *view, int lineno)\n{\n\tassert(0 <= lineno && lineno < view->height);\n\n\tif (view->columns && view_column_info_changed(view, false)) {\n\t\tint i;\n\n\t\tview_column_reset(view);\n\t\tfor (i = 0; i < view->lines; i++) {\n\t\t\tview_column_info_update(view, &view->line[i]);\n\t\t}\n\t}\n\n\tfor (; lineno < view->height; lineno++) {\n\t\tif (!draw_view_line(view, lineno))\n\t\t\tbreak;\n\t}\n\n\twnoutrefresh(view->win);\n}\n\nvoid\nredraw_view(struct view *view)\n{\n\twerase(view->win);\n\tredraw_view_from(view, 0);\n}\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/graph-v1.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/tig.h\"\n#include \"tig/util.h\"\n#include \"tig/graph.h\"\n\nstruct graph_symbol {\n\tunsigned int color:8;\n\tunsigned int bold:1;\n\n\tunsigned int commit:1;\n\tunsigned int branch:1;\n\n\tunsigned int boundary:1;\n\tunsigned int initial:1;\n\tunsigned int merge:1;\n\n\tunsigned int vbranch:1;\n\tunsigned int branched:1;\n};\n\nstruct graph_column {\n\tstruct graph_symbol symbol;\n\tchar id[SIZEOF_REV];\t\t/* Parent SHA1 ID. */\n};\n\nstruct graph_row {\n\tsize_t size;\n\tstruct graph_column *columns;\n};\n\nstruct graph_v1 {\n\tstruct graph api;\n\tstruct graph_row row;\n\tstruct graph_row parents;\n\tsize_t position;\n\tsize_t expanded;\n\tconst char *id;\n\tstruct graph_canvas *canvas;\n\tsize_t colors[GRAPH_COLORS];\n\tbool has_parents;\n\tbool is_boundary;\n};\n\nDEFINE_ALLOCATOR(realloc_graph_columns, struct graph_column, 32)\nDEFINE_ALLOCATOR(realloc_graph_symbols, struct graph_symbol, 1)\n\nstatic size_t get_free_graph_color(struct graph_v1 *graph)\n{\n\tsize_t i, free_color;\n\n\tfor (free_color = i = 0; i < ARRAY_SIZE(graph->colors); i++) {\n\t\tif (graph->colors[i] < graph->colors[free_color])\n\t\t\tfree_color = i;\n\t}\n\n\tgraph->colors[free_color]++;\n\treturn free_color;\n}\n\nstatic void\ndone_graph(struct graph *graph_)\n{\n\tstruct graph_v1 *graph = graph_->private;\n\n\tfree(graph);\n}\n\nstatic void\ndone_graph_rendering(struct graph *graph_)\n{\n\tstruct graph_v1 *graph = graph_->private;\n\n\tfree(graph->row.columns);\n\tfree(graph->parents.columns);\n}\n\n#define graph_column_has_commit(col) ((col)->id[0])\n\nstatic size_t\ngraph_find_column_by_id(struct graph_row *row, const char *id)\n{\n\tsize_t free_column = row->size;\n\tsize_t i;\n\n\tfor (i = 0; i < row->size; i++) {\n\t\tif (!graph_column_has_commit(&row->columns[i]))\n\t\t\tfree_column = i;\n\t\telse if (!strcmp(row->columns[i].id, id))\n\t\t\treturn i;\n\t}\n\n\treturn free_column;\n}\n\nstatic struct graph_column *\ngraph_insert_column(struct graph_v1 *graph, struct graph_row *row, size_t pos, const char *id)\n{\n\tstruct graph_column *column;\n\n\tif (!realloc_graph_columns(&row->columns, row->size, 1))\n\t\treturn NULL;\n\n\tcolumn = &row->columns[pos];\n\tif (pos < row->size) {\n\t\tmemmove(column + 1, column, sizeof(*column) * (row->size - pos));\n\t}\n\n\trow->size++;\n\tmemset(column, 0, sizeof(*column));\n\tstring_copy_rev(column->id, id);\n\tcolumn->symbol.boundary = !!graph->is_boundary;\n\n\treturn column;\n}\n\nstatic bool\ngraph_add_parent(struct graph *graph_, const char *parent)\n{\n\tstruct graph_v1 *graph = graph_->private;\n\n\tif (graph->has_parents)\n\t\treturn true;\n\treturn graph_insert_column(graph, &graph->parents, graph->parents.size, parent) != NULL;\n}\n\nstatic bool\ngraph_needs_expansion(struct graph_v1 *graph)\n{\n\treturn graph->position + graph->parents.size > graph->row.size;\n#if 0\n\treturn graph->parents.size > 1\n\t    && graph->expanded < graph->parents.size;\n#endif\n}\n\nstatic bool\ngraph_expand(struct graph_v1 *graph)\n{\n\twhile (graph_needs_expansion(graph)) {\n\t\tif (!graph_insert_column(graph, &graph->row, graph->position + graph->expanded, \"\"))\n\t\t\treturn false;\n\t\tgraph->expanded++;\n\t}\n\n\treturn true;\n}\n\nstatic bool\ngraph_needs_collapsing(struct graph_v1 *graph)\n{\n\treturn graph->row.size > 1\n\t    && !graph_column_has_commit(&graph->row.columns[graph->row.size - 1]);\n}\n\nstatic bool\ngraph_collapse(struct graph_v1 *graph)\n{\n\twhile (graph_needs_collapsing(graph)) {\n\t\tgraph->row.size--;\n\t}\n\n\treturn true;\n}\n\nstatic void\ngraph_reorder_parents(struct graph_v1 *graph)\n{\n\tstruct graph_row *row = &graph->row;\n\tstruct graph_row *parents = &graph->parents;\n\tint i;\n\n\tif (parents->size == 1)\n\t\treturn;\n\n\tfor (i = 0; i < parents->size; i++) {\n\t\tstruct graph_column *column = &parents->columns[i];\n\t\tsize_t match = graph_find_column_by_id(row, column->id);\n\n\t\tif (match < graph->position && graph_column_has_commit(&row->columns[match])) {\n\t\t\t//die(\"Reorder: %s -> %s\", graph->commit->id, column->id);\n//\t\t\trow->columns[match].symbol.initial = 1;\n\t\t}\n\t}\n}\n\nstatic void\ngraph_canvas_append_symbol(struct graph_v1 *graph, struct graph_symbol *symbol)\n{\n\tstruct graph_canvas *canvas = graph->canvas;\n\n\tif (realloc_graph_symbols(&canvas->symbols, canvas->size, 1))\n\t\tcanvas->symbols[canvas->size++] = *symbol;\n}\n\nstatic bool\ngraph_insert_parents(struct graph_v1 *graph)\n{\n\tstruct graph_row *row = &graph->row;\n\tstruct graph_row *parents = &graph->parents;\n\tsize_t orig_size = row->size;\n\tbool branched = false;\n\tbool merge = parents->size > 1;\n\tint pos;\n\n\tassert(!graph_needs_expansion(graph));\n\n\tfor (pos = 0; pos < graph->position; pos++) {\n\t\tstruct graph_column *column = &row->columns[pos];\n\t\tstruct graph_symbol symbol = column->symbol;\n\n\t\tif (graph_column_has_commit(column)) {\n\t\t\tsize_t match = graph_find_column_by_id(parents, column->id);\n\n\t\t\tif (match < parents->size) {\n\t\t\t\tcolumn->symbol.initial = 1;\n\t\t\t}\n\n\t\t\tsymbol.branch = 1;\n\t\t}\n\t\tsymbol.vbranch = !!branched;\n\t\tif (!strcmp(column->id, graph->id)) {\n\t\t\tbranched = true;\n\t\t\tcolumn->id[0] = 0;\n\t\t}\n\n\t\tgraph_canvas_append_symbol(graph, &symbol);\n\t}\n\n\tfor (; pos < graph->position + parents->size; pos++) {\n\t\tstruct graph_column *old = &row->columns[pos];\n\t\tstruct graph_column *new = &parents->columns[pos - graph->position];\n\t\tstruct graph_symbol symbol = old->symbol;\n\n\t\tsymbol.merge = !!merge;\n\n\t\tif (pos == graph->position) {\n\t\t\tsymbol.commit = 1;\n\t\t\tif (new->symbol.boundary) {\n\t\t\t\tsymbol.boundary = 1;\n\t\t\t} else if (!graph_column_has_commit(new)) {\n\t\t\t\tsymbol.initial = 1;\n\t\t\t}\n\n\t\t} else if (!strcmp(old->id, new->id) && orig_size == row->size) {\n\t\t\tsymbol.vbranch = 1;\n\t\t\tsymbol.branch = 1;\n\t\t\t//symbol.merge = 1;\n\n\t\t} else if (parents->size > 1) {\n\t\t\tsymbol.merge = 1;\n\t\t\tsymbol.vbranch = !(pos == graph->position + parents->size - 1);\n\n\t\t} else if (graph_column_has_commit(old)) {\n\t\t\tsymbol.branch = 1;\n\t\t}\n\n\t\tgraph_canvas_append_symbol(graph, &symbol);\n\t\tif (!graph_column_has_commit(old))\n\t\t\tnew->symbol.color = get_free_graph_color(graph);\n\t\t*old = *new;\n\t}\n\n\tfor (; pos < row->size; pos++) {\n\t\tbool too = !strcmp(row->columns[row->size - 1].id, graph->id);\n\t\tstruct graph_symbol symbol = row->columns[pos].symbol;\n\n\t\tsymbol.vbranch = !!too;\n\t\tif (row->columns[pos].id[0]) {\n\t\t\tsymbol.branch = 1;\n\t\t\tif (!strcmp(row->columns[pos].id, graph->id)) {\n\t\t\t\tsymbol.branched = 1;\n\t\t\t\tif (too && pos != row->size - 1) {\n\t\t\t\t\tsymbol.vbranch = 1;\n\t\t\t\t} else {\n\t\t\t\t\tsymbol.vbranch = 0;\n\t\t\t\t}\n\t\t\t\trow->columns[pos].id[0] = 0;\n\t\t\t}\n\t\t}\n\t\tgraph_canvas_append_symbol(graph, &symbol);\n\t}\n\n\tgraph->parents.size = graph->expanded = graph->position = 0;\n\n\treturn true;\n}\n\nstatic bool\ngraph_render_parents(struct graph *graph_, struct graph_canvas *canvas)\n{\n\tstruct graph_v1 *graph = graph_->private;\n\n\tif (!graph_expand(graph))\n\t\treturn false;\n\tgraph_reorder_parents(graph);\n\tgraph_insert_parents(graph);\n\tif (!graph_collapse(graph))\n\t\treturn false;\n\n\treturn true;\n}\n\nstatic bool\ngraph_is_merge(struct graph_canvas *canvas)\n{\n\treturn !!canvas->symbols->merge;\n}\n\nstatic bool\ngraph_add_commit(struct graph *graph_, struct graph_canvas *canvas,\n\t\t const char *id, const char *parents, bool is_boundary)\n{\n\tstruct graph_v1 *graph = graph_->private;\n\tint has_parents = 0;\n\n\tgraph->position = graph_find_column_by_id(&graph->row, id);\n\tgraph->id = id;\n\tgraph->canvas = canvas;\n\tgraph->is_boundary = is_boundary;\n\tgraph->has_parents = false;\n\n\twhile ((parents = strchr(parents, ' '))) {\n\t\tparents++;\n\t\tif (!graph_add_parent(graph_, parents))\n\t\t\treturn false;\n\t\thas_parents++;\n\t}\n\n\tif (graph->parents.size == 0 &&\n\t    !graph_add_parent(graph_, \"\"))\n\t\treturn false;\n\n\tgraph->has_parents = has_parents > 0;\n\n\treturn true;\n}\n\nstatic const char *\ngraph_symbol_to_utf8(const struct graph_symbol *symbol)\n{\n\tif (symbol->commit) {\n\t\tif (symbol->boundary)\n\t\t\treturn \" ◯\";\n\t\telse if (symbol->initial)\n\t\t\treturn \" ◎\";\n\t\telse if (symbol->merge)\n\t\t\treturn \" ●\";\n\t\treturn \" ∙\";\n\t}\n\n\tif (symbol->merge) {\n\t\tif (symbol->branch) {\n\t\t\treturn \"━┪\";\n\t\t}\n\t\tif (symbol->vbranch)\n\t\t\treturn \"━┯\";\n\t\treturn \"━┑\";\n\t}\n\n\tif (symbol->branch) {\n\t\tif (symbol->branched) {\n\t\t\tif (symbol->vbranch)\n\t\t\t\treturn \"─┴\";\n\t\t\treturn \"─┘\";\n\t\t}\n\t\tif (symbol->vbranch)\n\t\t\treturn \"─│\";\n\t\treturn \" │\";\n\t}\n\n\tif (symbol->vbranch)\n\t\treturn \"──\";\n\n\treturn \"  \";\n}\n\nstatic const chtype *\ngraph_symbol_to_chtype(const struct graph_symbol *symbol)\n{\n\tstatic chtype graphics[2];\n\n\tif (symbol->commit) {\n\t\tgraphics[0] = ' ';\n\t\tif (symbol->boundary)\n\t\t\tgraphics[1] = 'o';\n\t\telse if (symbol->initial)\n\t\t\tgraphics[1] = 'I';\n\t\telse if (symbol->merge)\n\t\t\tgraphics[1] = 'M';\n\t\telse\n\t\t\tgraphics[1] = 'o'; //ACS_DIAMOND; //'*';\n\t\treturn graphics;\n\t}\n\n\tif (symbol->merge) {\n\t\tgraphics[0] = ACS_HLINE;\n\t\tif (symbol->branch)\n\t\t\tgraphics[1] = ACS_RTEE;\n\t\telse\n\t\t\tgraphics[1] = ACS_URCORNER;\n\t\treturn graphics;\n\t}\n\n\tif (symbol->branch) {\n\t\tgraphics[0] = ACS_HLINE;\n\t\tif (symbol->branched) {\n\t\t\tif (symbol->vbranch)\n\t\t\t\tgraphics[1] = ACS_BTEE;\n\t\t\telse\n\t\t\t\tgraphics[1] = ACS_LRCORNER;\n\t\t\treturn graphics;\n\t\t}\n\n\t\tif (!symbol->vbranch)\n\t\t\tgraphics[0] = ' ';\n\t\tgraphics[1] = ACS_VLINE;\n\t\treturn graphics;\n\t}\n\n\tif (symbol->vbranch) {\n\t\tgraphics[0] = graphics[1] = ACS_HLINE;\n\t} else\n\t\tgraphics[0] = graphics[1] = ' ';\n\n\treturn graphics;\n}\n\nstatic const char *\ngraph_symbol_to_ascii(const struct graph_symbol *symbol)\n{\n\tif (symbol->commit) {\n\t\tif (symbol->boundary)\n\t\t\treturn \" o\";\n\t\telse if (symbol->initial)\n\t\t\treturn \" I\";\n\t\telse if (symbol->merge)\n\t\t\treturn \" M\";\n\t\treturn \" *\";\n\t}\n\n\tif (symbol->merge) {\n\t\tif (symbol->branch)\n\t\t\treturn \"-+\";\n\t\treturn \"-.\";\n\t}\n\n\tif (symbol->branch) {\n\t\tif (symbol->branched) {\n\t\t\tif (symbol->vbranch)\n\t\t\t\treturn \"-+\";\n\t\t\treturn \"-'\";\n\t\t}\n\t\tif (symbol->vbranch)\n\t\t\treturn \"-|\";\n\t\treturn \" |\";\n\t}\n\n\tif (symbol->vbranch)\n\t\treturn \"--\";\n\n\treturn \"  \";\n}\n\nstatic void\ngraph_foreach_symbol(const struct graph *graph, const struct graph_canvas *canvas,\n\t\t     graph_symbol_iterator_fn fn, void *data)\n{\n\tint i;\n\n\tfor (i = 0; i < canvas->size; i++) {\n\t\tstruct graph_symbol *symbol = &canvas->symbols[i];\n\t\tint color_id = symbol->commit ? GRAPH_COMMIT_COLOR : symbol->color;\n\n\t\tif (fn(data, graph, symbol, color_id, i == 0))\n\t\t\tbreak;\n\t}\n}\n\nstruct graph *\ninit_graph_v1(void)\n{\n\tstruct graph_v1 *graph = calloc(1, sizeof(*graph));\n\tstruct graph *api = NULL;\n\n\tif (graph) {\n\t\tapi = &graph->api;\n\n\t\tapi->private = graph;\n\t\tapi->done = done_graph;\n\t\tapi->done_rendering = done_graph_rendering;\n\t\tapi->add_commit = graph_add_commit;\n\t\tapi->add_parent = graph_add_parent;\n\t\tapi->render_parents = graph_render_parents;\n\t\tapi->is_merge = graph_is_merge;\n\t\tapi->foreach_symbol = graph_foreach_symbol;\n\t\tapi->symbol_to_ascii = graph_symbol_to_ascii;\n\t\tapi->symbol_to_utf8 = graph_symbol_to_utf8;\n\t\tapi->symbol_to_chtype = graph_symbol_to_chtype;\n\t}\n\n\treturn api;\n}\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/graph-v2.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/tig.h\"\n#include \"tig/util.h\"\n#include \"tig/graph.h\"\n#include \"compat/hashtab.h\"\n\nstruct graph_symbol {\n\tunsigned int color:8;\n\n\tunsigned int commit:1;\n\tunsigned int boundary:1;\n\tunsigned int initial:1;\n\tunsigned int merge:1;\n\n\tunsigned int continued_down:1;\n\tunsigned int continued_up:1;\n\tunsigned int continued_right:1;\n\tunsigned int continued_left:1;\n\tunsigned int continued_up_left:1;\n\n\tunsigned int parent_down:1;\n\tunsigned int parent_right:1;\n\n\tunsigned int below_commit:1;\n\tunsigned int flanked:1;\n\tunsigned int next_right:1;\n\tunsigned int matches_commit:1;\n\n\tunsigned int shift_left:1;\n\tunsigned int continue_shift:1;\n\tunsigned int below_shift:1;\n\n\tunsigned int new_column:1;\n\tunsigned int empty:1;\n};\n\nstruct graph_column {\n\tstruct graph_symbol symbol;\n\tconst char *id;\t\t\t/* Parent SHA1 ID. */\n};\n\nstruct graph_row {\n\tsize_t size;\n\tstruct graph_column *columns;\n};\n\nstruct colors {\n\thtab_t id_map;\n\tsize_t count[GRAPH_COLORS];\n};\n\nstruct graph_v2 {\n\tstruct graph api;\n\tstruct graph_row row;\n\tstruct graph_row parents;\n\tstruct graph_row prev_row;\n\tstruct graph_row next_row;\n\tsize_t position;\n\tsize_t prev_position;\n\tsize_t expanded;\n\tconst char *id;\n\tstruct colors colors;\n\tbool has_parents;\n\tbool is_boundary;\n};\n\nDEFINE_ALLOCATOR(realloc_graph_columns, struct graph_column, 32)\nDEFINE_ALLOCATOR(realloc_graph_symbols, struct graph_symbol, 1)\n\nstatic htab_t intern_string_htab;\n\nstatic int\nintern_string_eq(const void *entry, const void *element)\n{\n\treturn strcmp((const char *) entry, (const char *) element) == 0;\n}\n\nstatic hashval_t\nintern_string_hash(const void *node)\n{\n\treturn htab_hash_string((const char *) node);\n}\n\nstatic const char *intern_string(const char *str)\n{\n\tvoid **result;\n\n\tif (!str)\n\t\treturn NULL;\n\n\tif (!intern_string_htab)\n\t\tintern_string_htab = htab_create_alloc(500, intern_string_hash, intern_string_eq, free, calloc, free);\n\n\tresult = htab_find_slot(intern_string_htab, str, INSERT);\n\tif (!*result)\n\t\t*result = strdup(str);\n\n\treturn *result;\n}\n\nstruct id_color {\n\tsize_t color;\n\tchar id[1];\n};\n\nstatic struct id_color *\nid_color_new(const char *id, size_t color)\n{\n\tstruct id_color *node = malloc(sizeof(struct id_color) + strlen(id));\n\n\tif (!node)\n\t\tdie(\"Failed to allocate color\");\n\tstrcpy(node->id, id);\n\tnode->color = color;\n\n\treturn node;\n}\n\nstatic void\nid_color_delete(struct id_color *node)\n{\n\tfree(node);\n}\n\nstatic int\nid_color_eq(const void *entry, const void *element)\n{\n\treturn strcmp(((const struct id_color *) entry)->id, ((const struct id_color *) element)->id) == 0;\n}\n\nstatic void\nkey_del(void *key)\n{\n\tid_color_delete((struct id_color *) key);\n}\n\nstatic hashval_t\nid_color_hash(const void *node)\n{\n\treturn htab_hash_string(((const struct id_color*) node)->id);\n}\n\nstatic void\ncolors_add_id(struct colors *colors, const char *id, const size_t color)\n{\n\tstruct id_color *node = id_color_new(id, color);\n\tvoid **slot = htab_find_slot(colors->id_map, node, INSERT);\n\n\tif (slot != NULL && *slot == NULL) {\n\t\t*slot = node;\n\t\tcolors->count[color]++;\n\t} else {\n\t\tid_color_delete(node);\n\t}\n}\n\nstatic void\ncolors_remove_id(struct colors *colors, const char *id)\n{\n\tstruct id_color *node = id_color_new(id, 0);\n\tvoid **slot = htab_find_slot(colors->id_map, node, NO_INSERT);\n\n\tif (slot != NULL && *slot != NULL) {\n\t\tcolors->count[((struct id_color *) *slot)->color]--;\n\t\thtab_clear_slot(colors->id_map, slot);\n\t}\n\n\tid_color_delete(node);\n}\n\nstatic size_t\ncolors_get_color(struct colors *colors, const char *id)\n{\n\tstruct id_color *key = id_color_new(id, 0);\n\tstruct id_color *node = (struct id_color *) htab_find(colors->id_map, key);\n\n\tid_color_delete(key);\n\n\tif (node == NULL) {\n\t\treturn (size_t) -1; // Max value of size_t. ID not found.\n\t}\n\treturn node->color;\n}\n\nstatic size_t\ncolors_get_free_color(struct colors *colors)\n{\n\tsize_t free_color = 0;\n\tsize_t lowest = (size_t) -1; // Max value of size_t\n\tint i;\n\n\tfor (i = 0; i < ARRAY_SIZE(colors->count); i++) {\n\t\tif (colors->count[i] < lowest) {\n\t\t\tlowest = colors->count[i];\n\t\t\tfree_color = i;\n\t\t}\n\t}\n\treturn free_color;\n}\n\nstatic void\ncolors_init(struct colors *colors)\n{\n\tif (colors->id_map == NULL) {\n\t\tsize_t size = 500;\n\n\t\tcolors->id_map = htab_create_alloc(size, id_color_hash, id_color_eq, key_del, calloc, free);\n\t}\n}\n\nstatic size_t\nget_color(struct graph_v2 *graph, const char *new_id)\n{\n\tsize_t color;\n\n\tif (!new_id)\n\t\tnew_id = \"\";\n\n\tcolors_init(&graph->colors);\n\tcolor = colors_get_color(&graph->colors, new_id);\n\n\tif (color < (size_t) -1) {\n\t\treturn color;\n\t}\n\n\tcolor = colors_get_free_color(&graph->colors);\n\tcolors_add_id(&graph->colors, new_id, color);\n\n\treturn color;\n}\n\nstatic void\ndone_graph_rendering(struct graph *graph_ref)\n{\n\tstruct graph_v2 *graph = graph_ref->private;\n\n\tfree(graph->prev_row.columns);\n\tfree(graph->row.columns);\n\tfree(graph->next_row.columns);\n\tfree(graph->parents.columns);\n}\n\nstatic void\ndone_graph(struct graph *graph_ref)\n{\n\tstruct graph_v2 *graph = graph_ref->private;\n\n\tif (graph->colors.id_map)\n\t\thtab_delete(graph->colors.id_map);\n\n\tfree(graph);\n\n\tif (intern_string_htab)\n\t\thtab_empty(intern_string_htab);\n}\n\n#define graph_column_has_commit(col) ((col)->id)\n\nstatic size_t\ngraph_find_column_by_id(struct graph_row *row, const char *id)\n{\n\tsize_t free_column = row->size;\n\tsize_t i;\n\n\tfor (i = 0; i < row->size; i++) {\n\t\tif (!graph_column_has_commit(&row->columns[i]) && free_column == row->size)\n\t\t\tfree_column = i;\n\t\telse if (row->columns[i].id == id)\n\t\t\treturn i;\n\t}\n\n\treturn free_column;\n}\n\nstatic size_t\ngraph_find_free_column(struct graph_row *row)\n{\n\tsize_t i;\n\n\tfor (i = 0; i < row->size; i++) {\n\t\tif (!graph_column_has_commit(&row->columns[i]))\n\t\t\treturn i;\n\t}\n\n\treturn row->size;\n}\n\nstatic struct graph_column *\ngraph_insert_column(struct graph_v2 *graph, struct graph_row *row, size_t pos, const char *id)\n{\n\tstruct graph_column *column;\n\n\tif (!realloc_graph_columns(&row->columns, row->size, 1))\n\t\treturn NULL;\n\n\tcolumn = &row->columns[pos];\n\tif (pos < row->size) {\n\t\tmemmove(column + 1, column, sizeof(*column) * (row->size - pos));\n\t}\n\n\tid = intern_string(id);\n\n\trow->size++;\n\tmemset(column, 0, sizeof(*column));\n\tcolumn->id = id;\n\tcolumn->symbol.boundary = !!graph->is_boundary;\n\n\treturn column;\n}\n\nstatic bool\ngraph_add_parent(struct graph *graph_ref, const char *parent)\n{\n\tstruct graph_v2 *graph = graph_ref->private;\n\n\tif (graph->has_parents)\n\t\treturn true;\n\treturn graph_insert_column(graph, &graph->parents, graph->parents.size, parent) != NULL;\n}\n\nstatic bool\ngraph_needs_expansion(struct graph_v2 *graph)\n{\n\treturn graph->position + graph->parents.size > graph->row.size;\n}\n\nstatic bool\ngraph_expand(struct graph_v2 *graph)\n{\n\twhile (graph_needs_expansion(graph)) {\n\t\tif (!graph_insert_column(graph, &graph->prev_row, graph->prev_row.size, NULL))\n\t\t\treturn false;\n\n\t\tif (!graph_insert_column(graph, &graph->row, graph->row.size, NULL))\n\t\t\treturn false;\n\n\t\tif (!graph_insert_column(graph, &graph->next_row, graph->next_row.size, NULL))\n\t\t\treturn false;\n\t}\n\n\treturn true;\n}\n\nstatic bool\ngraph_needs_collapsing(struct graph_v2 *graph)\n{\n\treturn graph->row.size > 1\n\t    && !graph_column_has_commit(&graph->row.columns[graph->row.size - 1]);\n}\n\nstatic bool\ngraph_collapse(struct graph_v2 *graph)\n{\n\twhile (graph_needs_collapsing(graph)) {\n\t\tgraph->prev_row.size--;\n\t\tgraph->row.size--;\n\t\tgraph->next_row.size--;\n\t}\n\n\treturn true;\n}\n\nstatic void\ngraph_canvas_append_symbol(struct graph_v2 *graph, struct graph_canvas *canvas, struct graph_symbol *symbol)\n{\n\tif (realloc_graph_symbols(&canvas->symbols, canvas->size, 1))\n\t\tcanvas->symbols[canvas->size++] = *symbol;\n}\n\nstatic void\ngraph_row_clear_commit(struct graph_row *row, const char *id)\n{\n\tint i;\n\n\tfor (i = 0; i < row->size; i++) {\n\t\tif (row->columns[i].id == id) {\n\t\t\trow->columns[i].id = NULL;\n\t\t}\n\t}\n}\n\nstatic void\ngraph_insert_parents(struct graph_v2 *graph)\n{\n\tstruct graph_row *prev_row = &graph->prev_row;\n\tstruct graph_row *row = &graph->row;\n\tstruct graph_row *next_row = &graph->next_row;\n\tstruct graph_row *parents = &graph->parents;\n\tint i;\n\n\tfor (i = 0; i < parents->size; i++) {\n\t\tstruct graph_column *new = &parents->columns[i];\n\n\t\tif (graph_column_has_commit(new)) {\n\t\t\tsize_t match = graph_find_free_column(next_row);\n\n\t\t\tif (match == next_row->size && graph_column_has_commit(&next_row->columns[next_row->size - 1])) {\n\t\t\t\tgraph_insert_column(graph, next_row, next_row->size, new->id);\n\t\t\t\tgraph_insert_column(graph, row, row->size, NULL);\n\t\t\t\tgraph_insert_column(graph, prev_row, prev_row->size, NULL);\n\t\t\t} else {\n\t\t\t\tnext_row->columns[match] = *new;\n\t\t\t}\n\t\t}\n\t}\n}\n\nstatic bool\ncommit_is_in_row(const char *id, struct graph_row *row)\n{\n\tint i;\n\n\tfor (i = 0; i < row->size; i++) {\n\t\tif (!graph_column_has_commit(&row->columns[i]))\n\t\t\tcontinue;\n\n\t\tif (id == row->columns[i].id)\n\t\t\treturn true;\n\t}\n\treturn false;\n}\n\nstatic void\ngraph_remove_collapsed_columns(struct graph_v2 *graph)\n{\n\tstruct graph_row *row = &graph->next_row;\n\tint i;\n\n\tfor (i = row->size - 1; i > 0; i--) {\n\t\tif (i == graph->position)\n\t\t\tcontinue;\n\n\t\tif (i == graph->position + 1)\n\t\t\tcontinue;\n\n\t\tif (row->columns[i].id == graph->id)\n\t\t\tcontinue;\n\n\t\tif (row->columns[i].id != row->columns[i - 1].id)\n\t\t\tcontinue;\n\n\t\tif (commit_is_in_row(row->columns[i].id, &graph->parents) && !graph_column_has_commit(&graph->prev_row.columns[i]))\n\t\t\tcontinue;\n\n\t\tif (row->columns[i - 1].id != graph->prev_row.columns[i - 1].id || graph->prev_row.columns[i - 1].symbol.shift_left) {\n\t\t\tif (i + 1 >= row->size)\n\t\t\t\tmemset(&row->columns[i], 0, sizeof(row->columns[i]));\n\t\t\telse\n\t\t\t\trow->columns[i] = row->columns[i + 1];\n\t\t}\n\t}\n}\n\nstatic void\ngraph_fill_empty_columns(struct graph_v2 *graph)\n{\n\tstruct graph_row *row = &graph->next_row;\n\tint i;\n\n\tfor (i = row->size - 2; i >= 0; i--) {\n\t\tif (!graph_column_has_commit(&row->columns[i])) {\n\t\t\trow->columns[i] = row->columns[i + 1];\n\t\t}\n\t}\n}\n\nstatic void\ngraph_generate_next_row(struct graph_v2 *graph)\n{\n\tgraph_row_clear_commit(&graph->next_row, graph->id);\n\tgraph_insert_parents(graph);\n\tgraph_remove_collapsed_columns(graph);\n\tgraph_fill_empty_columns(graph);\n}\n\nstatic int\ncommits_in_row(struct graph_row *row)\n{\n\tint count = 0;\n\tint i;\n\n\tfor (i = 0; i < row->size;i++) {\n\t\tif (graph_column_has_commit(&row->columns[i]))\n\t\t\tcount++;\n\t}\n\n\treturn count;\n}\n\nstatic void\ngraph_commit_next_row(struct graph_v2 *graph)\n{\n\tint i;\n\n\tfor (i = 0; i < graph->row.size; i++) {\n\t\tgraph->prev_row.columns[i] = graph->row.columns[i];\n\n\t\tif (i == graph->position && commits_in_row(&graph->parents) > 0)\n\t\t\tgraph->prev_row.columns[i] = graph->next_row.columns[i];\n\n\t\tif (!graph_column_has_commit(&graph->prev_row.columns[i]))\n\t\t\tgraph->prev_row.columns[i] = graph->next_row.columns[i];\n\n\t\tgraph->row.columns[i] = graph->next_row.columns[i];\n\t}\n\n\tgraph->prev_position = graph->position;\n}\n\nstatic bool\ncontinued_down(struct graph_row *row, struct graph_row *next_row, int pos)\n{\n\tif (row->columns[pos].id != next_row->columns[pos].id)\n\t\treturn false;\n\n\tif (row->columns[pos].symbol.shift_left)\n\t\treturn false;\n\n\treturn true;\n}\n\nstatic bool\nshift_left(struct graph_row *row, struct graph_row *prev_row, int pos)\n{\n\tint i;\n\n\tif (!graph_column_has_commit(&row->columns[pos]))\n\t\treturn false;\n\n\tfor (i = pos - 1; i >= 0; i--) {\n\t\tif (!graph_column_has_commit(&row->columns[i]))\n\t\t\tcontinue;\n\n\t\tif (row->columns[i].id != row->columns[pos].id)\n\t\t\tcontinue;\n\n\t\tif (!continued_down(prev_row, row, i))\n\t\t\treturn true;\n\n\t\tbreak;\n\t}\n\n\treturn false;\n}\n\nstatic bool\nnew_column(struct graph_row *row, struct graph_row *prev_row, int pos)\n{\n\tint i;\n\n\tif (!graph_column_has_commit(&prev_row->columns[pos]))\n\t\treturn true;\n\n\tfor (i = pos; i < row->size; i++) {\n\t\tif (row->columns[pos].id == prev_row->columns[i].id)\n\t\t\treturn false;\n\t}\n\n\treturn true;\n}\n\nstatic bool\ncontinued_right(struct graph_row *row, int pos, int commit_pos)\n{\n\tint i, end;\n\n\tif (pos < commit_pos)\n\t\tend = commit_pos;\n\telse\n\t\tend = row->size;\n\n\tfor (i = pos + 1; i < end; i++) {\n\t\tif (row->columns[pos].id == row->columns[i].id)\n\t\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nstatic bool\ncontinued_left(struct graph_row *row, int pos, int commit_pos)\n{\n\tint i, start;\n\n\tif (pos < commit_pos)\n\t\tstart = 0;\n\telse\n\t\tstart = commit_pos;\n\n\tfor (i = start; i < pos; i++) {\n\t\tif (!graph_column_has_commit(&row->columns[i]))\n\t\t\tcontinue;\n\n\t\tif (row->columns[pos].id == row->columns[i].id)\n\t\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nstatic bool\nparent_down(struct graph_row *parents, struct graph_row *next_row, int pos)\n{\n\tint parent;\n\n\tfor (parent = 0; parent < parents->size; parent++) {\n\t\tif (!graph_column_has_commit(&parents->columns[parent]))\n\t\t\tcontinue;\n\n\t\tif (parents->columns[parent].id == next_row->columns[pos].id)\n\n\t\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nstatic bool\nparent_right(struct graph_row *parents, struct graph_row *row, struct graph_row *next_row, int pos)\n{\n\tint parent, i;\n\n\tfor (parent = 0; parent < parents->size; parent++) {\n\t\tif (!graph_column_has_commit(&parents->columns[parent]))\n\t\t\tcontinue;\n\n\t\tfor (i = pos + 1; i < next_row->size; i++) {\n\t\t\tif (parents->columns[parent].id != next_row->columns[i].id)\n\t\t\t\tcontinue;\n\n\t\t\tif (parents->columns[parent].id != row->columns[i].id)\n\t\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\nstatic bool\nflanked(struct graph_row *row, int pos, int commit_pos, const char *commit_id)\n{\n\tint i, start, end;\n\n\tif (pos < commit_pos) {\n\t\tstart = 0;\n\t\tend = pos;\n\t} else {\n\t\tstart = pos + 1;\n\t\tend = row->size;\n\t}\n\n\tfor (i = start; i < end; i++) {\n\t\tif (row->columns[i].id == commit_id)\n\t\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nstatic bool\nbelow_commit(int pos, struct graph_v2 *graph)\n{\n\tif (pos != graph->prev_position)\n\t\treturn false;\n\n\tif (graph->row.columns[pos].id != graph->prev_row.columns[pos].id)\n\t\treturn false;\n\n\treturn true;\n}\n\nstatic void\ngraph_generate_symbols(struct graph_v2 *graph, struct graph_canvas *canvas)\n{\n\tstruct graph_row *prev_row = &graph->prev_row;\n\tstruct graph_row *row = &graph->row;\n\tstruct graph_row *next_row = &graph->next_row;\n\tstruct graph_row *parents = &graph->parents;\n\tint commits = commits_in_row(parents);\n\tint initial = commits < 1;\n\tint merge = commits > 1;\n\tint pos;\n\n\tfor (pos = 0; pos < row->size; pos++) {\n\t\tstruct graph_column *column = &row->columns[pos];\n\t\tstruct graph_symbol *symbol = &column->symbol;\n\t\tconst char *id = next_row->columns[pos].id;\n\n\t\tsymbol->commit            = (pos == graph->position);\n\t\tsymbol->boundary          = (pos == graph->position && next_row->columns[pos].symbol.boundary);\n\t\tsymbol->initial           = initial;\n\t\tsymbol->merge             = merge;\n\n\t\tsymbol->continued_down    = continued_down(row, next_row, pos);\n\t\tsymbol->continued_up      = continued_down(prev_row, row, pos);\n\t\tsymbol->continued_right   = continued_right(row, pos, graph->position);\n\t\tsymbol->continued_left    = continued_left(row, pos, graph->position);\n\t\tsymbol->continued_up_left = continued_left(prev_row, pos, prev_row->size);\n\n\t\tsymbol->parent_down       = parent_down(parents, next_row, pos);\n\t\tsymbol->parent_right      = (pos > graph->position && parent_right(parents, row, next_row, pos));\n\n\t\tsymbol->below_commit      = below_commit(pos, graph);\n\t\tsymbol->flanked           = flanked(row, pos, graph->position, graph->id);\n\t\tsymbol->next_right        = continued_right(next_row, pos, 0);\n\t\tsymbol->matches_commit    = column->id == graph->id;\n\n\t\tsymbol->shift_left        = shift_left(row, prev_row, pos);\n\t\tsymbol->continue_shift    = (pos + 1 < row->size) ? shift_left(row, prev_row, pos + 1) : 0;\n\t\tsymbol->below_shift       = prev_row->columns[pos].symbol.shift_left;\n\n\t\tsymbol->new_column        = new_column(row, prev_row, pos);\n\t\tsymbol->empty             = (!graph_column_has_commit(&row->columns[pos]));\n\n\t\tif (graph_column_has_commit(column)) {\n\t\t\tid = column->id;\n\t\t}\n\t\tsymbol->color = get_color(graph, id);\n\n\t\tgraph_canvas_append_symbol(graph, canvas, symbol);\n\t}\n\n\tcolors_remove_id(&graph->colors, graph->id);\n}\n\nstatic bool\ngraph_render_parents(struct graph *graph_ref, struct graph_canvas *canvas)\n{\n\tstruct graph_v2 *graph = graph_ref->private;\n\n\tif (graph->parents.size == 0 &&\n\t    !graph_add_parent(graph_ref, NULL))\n\t\treturn false;\n\n\tif (!graph_expand(graph))\n\t\treturn false;\n\n\tgraph_generate_next_row(graph);\n\tgraph_generate_symbols(graph, canvas);\n\tgraph_commit_next_row(graph);\n\n\tgraph->parents.size = graph->position = 0;\n\n\tif (!graph_collapse(graph))\n\t\treturn false;\n\n\treturn true;\n}\n\nstatic bool\ngraph_is_merge(struct graph_canvas *canvas)\n{\n\treturn !!canvas->symbols->merge;\n}\n\nstatic bool\ngraph_add_commit(struct graph *graph_ref, struct graph_canvas *canvas,\n\t\t const char *id, const char *parents, bool is_boundary)\n{\n\tstruct graph_v2 *graph = graph_ref->private;\n\tint has_parents = 0;\n\n\tid = intern_string(id);\n\n\tgraph->position = graph_find_column_by_id(&graph->row, id);\n\tgraph->id = id;\n\tgraph->is_boundary = is_boundary;\n\tgraph->has_parents = false;\n\n\twhile ((parents = strchr(parents, ' '))) {\n\t\tchar parent[SIZEOF_REV] = {0};\n\t\tparents++;\n\t\tstring_copy_rev(parent, parents);\n\t\tif (!graph_add_parent(graph_ref, *parent ? parent : NULL))\n\t\t\treturn false;\n\t\thas_parents++;\n\t}\n\n\tgraph->has_parents = has_parents > 0;\n\n\treturn true;\n}\n\nstatic bool\ngraph_symbol_forks(const struct graph_symbol *symbol)\n{\n\tif (!symbol->continued_down)\n\t\treturn false;\n\n\tif (!symbol->continued_right)\n\t\treturn false;\n\n\tif (!symbol->continued_up)\n\t\treturn false;\n\n\treturn true;\n}\n\nstatic bool\ngraph_symbol_cross_merge(const struct graph_symbol *symbol)\n{\n\tif (symbol->empty)\n\t\treturn false;\n\n\tif (!symbol->continued_up && !symbol->new_column && !symbol->below_commit)\n\t\treturn false;\n\n\tif (symbol->shift_left && symbol->continued_up_left)\n\t\treturn false;\n\n\tif (symbol->next_right)\n\t\treturn false;\n\n\tif (symbol->merge && symbol->continued_up && symbol->continued_right && symbol->continued_left && symbol->parent_down && !symbol->next_right)\n\t\treturn true;\n\n\treturn false;\n}\n\nstatic bool\ngraph_symbol_vertical_merge(const struct graph_symbol *symbol)\n{\n\tif (symbol->empty)\n\t\treturn false;\n\n\tif (!symbol->continued_up && !symbol->new_column && !symbol->below_commit)\n\t\treturn false;\n\n\tif (symbol->shift_left && symbol->continued_up_left)\n\t\treturn false;\n\n\tif (symbol->next_right)\n\t\treturn false;\n\n\tif (!symbol->matches_commit)\n\t\treturn false;\n\n\tif (symbol->merge && symbol->continued_up && symbol->continued_left && symbol->parent_down && !symbol->continued_right)\n\t\treturn true;\n\n\treturn false;\n}\n\nstatic bool\ngraph_symbol_cross_over(const struct graph_symbol *symbol)\n{\n\tif (symbol->empty)\n\t\treturn false;\n\n\tif (!symbol->continued_down)\n\t\treturn false;\n\n\tif (!symbol->continued_up && !symbol->new_column && !symbol->below_commit)\n\t\treturn false;\n\n\tif (symbol->shift_left)\n\t\treturn false;\n\n\tif (symbol->parent_right && symbol->merge)\n\t\treturn true;\n\n\tif (symbol->flanked)\n\t\treturn true;\n\n\treturn false;\n}\n\nstatic bool\ngraph_symbol_turn_left(const struct graph_symbol *symbol)\n{\n\tif (symbol->matches_commit && symbol->continued_right && !symbol->continued_down)\n\t\treturn false;\n\n\tif (symbol->continue_shift)\n\t\treturn false;\n\n\tif (symbol->continued_up || symbol->new_column || symbol->below_commit) {\n\t\tif (symbol->matches_commit)\n\t\t\treturn true;\n\n\t\tif (symbol->shift_left)\n\t\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nstatic bool\ngraph_symbol_turn_down_cross_over(const struct graph_symbol *symbol)\n{\n\tif (!symbol->continued_down)\n\t\treturn false;\n\n\tif (!symbol->continued_right)\n\t\treturn false;\n\n\tif (!symbol->parent_right && !symbol->flanked)\n\t\treturn false;\n\n\tif (symbol->flanked)\n\t\treturn true;\n\n\tif (symbol->merge)\n\t\treturn true;\n\n\treturn false;\n}\n\nstatic bool\ngraph_symbol_turn_down(const struct graph_symbol *symbol)\n{\n\tif (!symbol->continued_down)\n\t\treturn false;\n\n\tif (!symbol->continued_right)\n\t\treturn false;\n\n\treturn true;\n}\n\nstatic bool\ngraph_symbol_merge(const struct graph_symbol *symbol)\n{\n\tif (symbol->continued_down)\n\t\treturn false;\n\n\tif (!symbol->parent_down)\n\t\treturn false;\n\n\tif (symbol->parent_right)\n\t\treturn false;\n\n\tif (symbol->continued_right)\n\t\treturn false;\n\n\treturn true;\n}\n\nstatic bool\ngraph_symbol_multi_merge(const struct graph_symbol *symbol)\n{\n\tif (!symbol->parent_down)\n\t\treturn false;\n\n\tif (!symbol->parent_right && !symbol->continued_right)\n\t\treturn false;\n\n\treturn true;\n}\n\nstatic bool\ngraph_symbol_vertical_bar(const struct graph_symbol *symbol)\n{\n\tif (symbol->empty)\n\t\treturn false;\n\n\tif (symbol->shift_left)\n\t\treturn false;\n\n\tif (!symbol->continued_down)\n\t\treturn false;\n\n\tif (symbol->continued_up)\n\t\treturn true;\n\n\tif (symbol->parent_right)\n\t\treturn false;\n\n\tif (symbol->flanked)\n\t\treturn false;\n\n\tif (symbol->continued_right)\n\t\treturn false;\n\n\treturn true;\n}\n\nstatic bool\ngraph_symbol_horizontal_bar(const struct graph_symbol *symbol)\n{\n\tif (!symbol->next_right)\n\t\treturn false;\n\n\tif (symbol->shift_left)\n\t\treturn true;\n\n\tif (symbol->continued_down)\n\t\treturn false;\n\n\tif (!symbol->parent_right && !symbol->continued_right)\n\t\treturn false;\n\n\tif ((symbol->continued_up && !symbol->continued_up_left))\n\t\treturn false;\n\n\tif (!symbol->below_commit)\n\t\treturn true;\n\n\treturn false;\n}\n\nstatic bool\ngraph_symbol_multi_branch(const struct graph_symbol *symbol)\n{\n\tif (symbol->continued_down)\n\t\treturn false;\n\n\tif (!symbol->continued_right)\n\t\treturn false;\n\n\tif (symbol->below_shift)\n\t\treturn false;\n\n\tif (symbol->continued_up || symbol->new_column || symbol->below_commit) {\n\t\tif (symbol->matches_commit)\n\t\t\treturn true;\n\n\t\tif (symbol->shift_left)\n\t\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nstatic const char *\ngraph_symbol_to_utf8(const struct graph_symbol *symbol)\n{\n\tif (symbol->commit) {\n\t\tif (symbol->boundary)\n\t\t\treturn \" ◯\";\n\t\telse if (symbol->initial)\n\t\t\treturn \" ◎\";\n\t\telse if (symbol->merge)\n\t\t\treturn \" ●\";\n\t\treturn \" ∙\";\n\t}\n\n\tif (graph_symbol_cross_merge(symbol))\n\t\treturn \"─┼\";\n\n\tif (graph_symbol_vertical_merge(symbol))\n\t\treturn \"─┤\";\n\n\tif (graph_symbol_cross_over(symbol))\n\t\treturn \"─│\";\n\n\tif (graph_symbol_vertical_bar(symbol))\n\t\treturn \" │\";\n\n\tif (graph_symbol_turn_left(symbol))\n\t\treturn \"─╯\";\n\n\tif (graph_symbol_multi_branch(symbol))\n\t\treturn \"─┴\";\n\n\tif (graph_symbol_horizontal_bar(symbol))\n\t\treturn \"──\";\n\n\tif (graph_symbol_forks(symbol))\n\t\treturn \" ├\";\n\n\tif (graph_symbol_turn_down_cross_over(symbol))\n\t\treturn \"─╭\";\n\n\tif (graph_symbol_turn_down(symbol))\n\t\treturn \" ╭\";\n\n\tif (graph_symbol_merge(symbol))\n\t\treturn \"─╮\";\n\n\tif (graph_symbol_multi_merge(symbol))\n\t\treturn \"─┬\";\n\n\treturn \"  \";\n}\n\nstatic const chtype *\ngraph_symbol_to_chtype(const struct graph_symbol *symbol)\n{\n\tstatic chtype graphics[2];\n\n\tif (symbol->commit) {\n\t\tgraphics[0] = ' ';\n\t\tif (symbol->boundary)\n\t\t\tgraphics[1] = 'o';\n\t\telse if (symbol->initial)\n\t\t\tgraphics[1] = 'I';\n\t\telse if (symbol->merge)\n\t\t\tgraphics[1] = 'M';\n\t\telse\n\t\t\tgraphics[1] = 'o'; //ACS_DIAMOND; //'*';\n\t\treturn graphics;\n\n\t} else if (graph_symbol_cross_merge(symbol)) {\n\t\tgraphics[0] = ACS_HLINE;\n\t\tgraphics[1] = ACS_PLUS;\n\n\t} else if (graph_symbol_vertical_merge(symbol)) {\n\t\tgraphics[0] = ACS_HLINE;\n\t\tgraphics[1] = ACS_RTEE;\n\n\t} else if (graph_symbol_cross_over(symbol)) {\n\t\tgraphics[0] = ACS_HLINE;\n\t\tgraphics[1] = ACS_VLINE;\n\n\t} else if (graph_symbol_vertical_bar(symbol)) {\n\t\tgraphics[0] = ' ';\n\t\tgraphics[1] = ACS_VLINE;\n\n\t} else if (graph_symbol_turn_left(symbol)) {\n\t\tgraphics[0] = ACS_HLINE;\n\t\tgraphics[1] = ACS_LRCORNER;\n\n\t} else if (graph_symbol_multi_branch(symbol)) {\n\t\tgraphics[0] = ACS_HLINE;\n\t\tgraphics[1] = ACS_BTEE;\n\n\t} else if (graph_symbol_horizontal_bar(symbol)) {\n\t\tgraphics[0] = graphics[1] = ACS_HLINE;\n\n\t} else if (graph_symbol_forks(symbol)) {\n\t\tgraphics[0] = ' ';\n\t\tgraphics[1] = ACS_LTEE;\n\n\t} else if (graph_symbol_turn_down_cross_over(symbol)) {\n\t\tgraphics[0] = ACS_HLINE;\n\t\tgraphics[1] = ACS_ULCORNER;\n\n\t} else if (graph_symbol_turn_down(symbol)) {\n\t\tgraphics[0] = ' ';\n\t\tgraphics[1] = ACS_ULCORNER;\n\n\t} else if (graph_symbol_merge(symbol)) {\n\t\tgraphics[0] = ACS_HLINE;\n\t\tgraphics[1] = ACS_URCORNER;\n\n\t} else if (graph_symbol_multi_merge(symbol)) {\n\t\tgraphics[0] = ACS_HLINE;\n\t\tgraphics[1] = ACS_TTEE;\n\n\t} else {\n\t\tgraphics[0] = graphics[1] = ' ';\n\t}\n\n\treturn graphics;\n}\n\nstatic const char *\ngraph_symbol_to_ascii(const struct graph_symbol *symbol)\n{\n\tif (symbol->commit) {\n\t\tif (symbol->boundary)\n\t\t\treturn \" o\";\n\t\telse if (symbol->initial)\n\t\t\treturn \" I\";\n\t\telse if (symbol->merge)\n\t\t\treturn \" M\";\n\t\treturn \" *\";\n\t}\n\n\tif (graph_symbol_cross_merge(symbol))\n\t\treturn \"-+\";\n\n\tif (graph_symbol_vertical_merge(symbol))\n\t\treturn \"-|\";\n\n\tif (graph_symbol_cross_over(symbol))\n\t\treturn \"-|\";\n\n\tif (graph_symbol_vertical_bar(symbol))\n\t\treturn \" |\";\n\n\tif (graph_symbol_turn_left(symbol))\n\t\treturn \"-'\";\n\n\tif (graph_symbol_multi_branch(symbol))\n\t\treturn \"-+\";\n\n\tif (graph_symbol_horizontal_bar(symbol))\n\t\treturn \"--\";\n\n\tif (graph_symbol_forks(symbol))\n\t\treturn \" +\";\n\n\tif (graph_symbol_turn_down_cross_over(symbol))\n\t\treturn \"-.\";\n\n\tif (graph_symbol_turn_down(symbol))\n\t\treturn \" .\";\n\n\tif (graph_symbol_merge(symbol))\n\t\treturn \"-.\";\n\n\tif (graph_symbol_multi_merge(symbol))\n\t\treturn \"-+\";\n\n\treturn \"  \";\n}\n\nstatic void\ngraph_foreach_symbol(const struct graph *graph, const struct graph_canvas *canvas,\n\t\t     graph_symbol_iterator_fn fn, void *data)\n{\n\tint i;\n\n\tfor (i = 0; i < canvas->size; i++) {\n\t\tstruct graph_symbol *symbol = &canvas->symbols[i];\n\t\tint color_id = symbol->commit ? GRAPH_COMMIT_COLOR : symbol->color;\n\n\t\tif (fn(data, graph, symbol, color_id, i == 0))\n\t\t\tbreak;\n\t}\n}\n\nstruct graph *\ninit_graph_v2(void)\n{\n\tstruct graph_v2 *graph = calloc(1, sizeof(*graph));\n\tstruct graph *api = NULL;\n\n\tif (graph) {\n\t\tapi = &graph->api;\n\n\t\tapi->private = graph;\n\t\tapi->done = done_graph;\n\t\tapi->done_rendering = done_graph_rendering;\n\t\tapi->add_commit = graph_add_commit;\n\t\tapi->add_parent = graph_add_parent;\n\t\tapi->render_parents = graph_render_parents;\n\t\tapi->is_merge = graph_is_merge;\n\t\tapi->foreach_symbol = graph_foreach_symbol;\n\t\tapi->symbol_to_ascii = graph_symbol_to_ascii;\n\t\tapi->symbol_to_utf8 = graph_symbol_to_utf8;\n\t\tapi->symbol_to_chtype = graph_symbol_to_chtype;\n\t}\n\n\treturn api;\n}\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/graph.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/tig.h\"\n#include \"tig/graph.h\"\n\nstruct graph *init_graph_v1(void);\nstruct graph *init_graph_v2(void);\n\nstruct graph *\ninit_graph(enum graph_display display)\n{\n\tif (display == GRAPH_DISPLAY_V1)\n\t\treturn init_graph_v1();\n\tif (display == GRAPH_DISPLAY_V2)\n\t\treturn init_graph_v2();\n\treturn NULL;\n}\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/grep.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/refdb.h\"\n#include \"tig/options.h\"\n#include \"tig/parse.h\"\n#include \"tig/repo.h\"\n#include \"tig/display.h\"\n#include \"tig/prompt.h\"\n#include \"tig/draw.h\"\n#include \"tig/blob.h\"\n#include \"tig/grep.h\"\n\nstruct grep_line {\n\tconst char *file;\n\tunsigned long lineno;\n\tchar text[1];\n};\n\nstruct grep_state {\n\tconst char *last_file;\n\tbool no_file_group;\n};\n\nstatic struct grep_line *\ngrep_get_line(const struct line *line)\n{\n\tstatic struct grep_line grep_line;\n\n\tif (line->type == LINE_DEFAULT)\n\t\treturn line->data;\n\n\tgrep_line.file = line->type == LINE_DELIMITER ? \"\" : get_path(box_text(line));\n\treturn &grep_line;\n}\n\nstatic bool\ngrep_get_column_data(struct view *view, const struct line *line, struct view_column_data *column_data)\n{\n\tstruct grep_line *grep = grep_get_line(line);\n\n\tif (line->type == LINE_DELIMITER) {\n\t\tstatic struct view_column separator_column;\n\n\t\tseparator_column.type = VIEW_COLUMN_TEXT;\n\t\tcolumn_data->section = &separator_column;\n\t\tcolumn_data->text = \"--\";\n\t\treturn true;\n\t}\n\n\tif (*grep->file && !*grep->text) {\n\t\tstatic struct view_column file_name_column;\n\n\t\tfile_name_column.type = VIEW_COLUMN_FILE_NAME;\n\t\tfile_name_column.opt.file_name.display = FILENAME_ALWAYS;\n\n\t\tcolumn_data->section = &file_name_column;\n\t}\n\n\tcolumn_data->line_number = &grep->lineno;\n\tcolumn_data->file_name = grep->file;\n\tcolumn_data->text = grep->text;\n\treturn true;\n}\n\nstatic void\ngrep_select(struct view *view, struct line *line)\n{\n\tstruct grep_line *grep = grep_get_line(line);\n\tconst char *text = grep->text;\n\tconst char *sep;\n\n\tif (!*grep->file)\n\t\treturn;\n\tsep = strchr(grep->file, ':');\n\tif (sep) {\n\t\tstring_ncopy(view->env->ref, grep->file, sep - grep->file);\n\t\tstring_ncopy(view->env->file, sep + 1, strlen(sep + 1));\n\t} else {\n\t\tview->env->ref[0] = 0;\n\t\tstring_ncopy(view->env->file, grep->file, strlen(grep->file));\n\t}\n\tstring_ncopy(view->ref, grep->file, strlen(grep->file));\n\tview->env->lineno = grep->lineno + 1;\n\tstring_ncopy(view->env->text, text, strlen(text));\n\tview->env->blob[0] = 0;\n}\n\nstatic const char *grep_args[] = {\n\t\"git\", \"grep\", \"--no-color\", \"-n\", \"-z\", \"--full-name\", NULL\n};\n\nstatic const char **grep_argv;\n\nstatic bool\ngrep_prompt(void)\n{\n\tconst char *argv[SIZEOF_ARG];\n\tint argc = 0;\n\tchar *grep = read_prompt(\"grep: \");\n\n\treport_clear();\n\n\tif (!grep || !*grep || !argv_from_string_no_quotes(argv, &argc, grep))\n\t\treturn false;\n\tif (grep_argv)\n\t\targv_free(grep_argv);\n\treturn argv_append_array(&grep_argv, argv);\n}\n\nvoid\nopen_grep_view(struct view *prev)\n{\n\tstruct view *view = &grep_view;\n\tbool in_grep_view = prev == view;\n\n\tif ((!prev && is_initial_view(view)) || (view->lines && !in_grep_view)) {\n\t\topen_view(prev, view, OPEN_DEFAULT);\n\t} else {\n\t\tif (grep_prompt()) {\n\t\t\tclear_position(&view->pos);\n\t\t\topen_view(prev, view, OPEN_RELOAD);\n\t\t}\n\t}\n}\n\nstatic enum status_code\ngrep_open(struct view *view, enum open_flags flags)\n{\n\tstruct grep_state *state = view->private;\n\tconst char **argv = NULL;\n\tenum status_code code;\n\n\tif (is_initial_view(view)) {\n\t\tgrep_argv = opt_cmdline_args;\n\t\topt_cmdline_args = NULL;\n\t}\n\n\tif (!argv_append_array(&argv, grep_args) ||\n\t    !argv_append_array(&argv, grep_argv))\n\t\treturn ERROR_OUT_OF_MEMORY;\n\n\t{\n\t\tstruct view_column *column = get_view_column(view, VIEW_COLUMN_FILE_NAME);\n\n\t\tstate->no_file_group = !column || column->opt.file_name.display != FILENAME_NO;\n\t}\n\n\tcode = begin_update(view, NULL, argv, flags);\n\targv_free(argv);\n\tfree(argv);\n\treturn code;\n}\n\nstatic enum request\ngrep_request(struct view *view, enum request request, struct line *line)\n{\n\tstruct grep_state *state = view->private;\n\tstruct grep_line *grep = grep_get_line(line);\n\tstruct view *file_view = &blob_view;\n\n\tswitch (request) {\n\tcase REQ_REFRESH:\n\t\trefresh_view(view);\n\t\treturn REQ_NONE;\n\n\tcase REQ_ENTER:\n\t\tif (!*grep->file)\n\t\t\treturn REQ_NONE;\n\t\tif (file_view->parent == view && file_view->prev == view &&\n\t\t    state->last_file == grep->file && view_is_displayed(file_view)) {\n\t\t\tif (*grep->text) {\n\t\t\t\tselect_view_line(file_view, grep->lineno);\n\t\t\t\tupdate_view_title(file_view);\n\t\t\t}\n\n\t\t} else {\n\t\t\tenum open_flags flags = view_is_displayed(view) ? OPEN_SPLIT : OPEN_DEFAULT;\n\n\t\t\tclear_position(&file_view->pos);\n\t\t\tview->env->goto_lineno = grep->lineno;\n\t\t\tview->env->blob[0] = 0;\n\n\t\t\tif (view->env->ref[0]) {\n\t\t\t\tstring_copy_rev(view->env->commit, view->env->ref);\n\t\t\t\topen_blob_view(view, flags);\n\n\t\t\t} else {\n\t\t\t\tconst char *file_argv[] = { repo.exec_dir, grep->file, NULL };\n\n\t\t\t\topen_argv(view, file_view, file_argv, repo.exec_dir, flags | OPEN_RELOAD);\n\t\t\t}\n\t\t}\n\t\tstate->last_file = grep->file;\n\t\treturn REQ_NONE;\n\n\tcase REQ_EDIT:\n\t\tif (!*view->env->file)\n\t\t\treturn request;\n\t\topen_editor(view->env->file, view->env->lineno);\n\t\treturn REQ_NONE;\n\n\tcase REQ_VIEW_BLAME:\n\t\tview->env->goto_lineno = grep->lineno;\n\t\treturn request;\n\n\tdefault:\n\t\treturn request;\n\t}\n}\n\nstatic bool\ngrep_read(struct view *view, struct buffer *buf, bool force_stop)\n{\n\tstruct grep_state *state = view->private;\n\tstruct grep_line *grep;\n\tchar *lineno, *text;\n\tstruct line *line;\n\tconst char *file;\n\tsize_t textlen;\n\n\tif (!buf) {\n\t\tstate->last_file = NULL;\n\t\tif (!view->lines) {\n\t\t\tview->ref[0] = 0;\n\t\t\treport(\"No matches found\");\n\t\t}\n\t\treturn true;\n\t}\n\n\tif (!strcmp(buf->data, \"--\"))\n\t\treturn add_line_nodata(view, LINE_DELIMITER) != NULL;\n\n\tlineno = io_memchr(buf, buf->data, 0);\n\ttext = io_memchr(buf, lineno, 0);\n\n\t/*\n\t * No data indicates binary file matches, e.g.:\n\t *\t> git grep vertical- -- test\n\t *\ttest/graph/20-tig-all-long-test:● │ Add \"auto\" vertical-split\n\t *\tBinary file test/graph/20-tig-all-long-test.in matches\n\t */\n\tif (!lineno || !text)\n\t\treturn true;\n\n\ttextlen = strlen(text);\n\n\tfile = get_path(buf->data);\n\tif (!file)\n\t\treturn false;\n\n\tif (!state->no_file_group && file != state->last_file &&\n\t    !add_line_text(view, file, LINE_FILE))\n\t\treturn false;\n\n\tline = add_line_alloc(view, &grep, LINE_DEFAULT, textlen, false);\n\tif (!line)\n\t\treturn false;\n\n\tgrep->file = file;\n\tgrep->lineno = atoi(lineno);\n\tif (grep->lineno > 0)\n\t\tgrep->lineno -= 1;\n\tstrncpy(grep->text, text, textlen + 1);\n\tview_column_info_update(view, line);\n\n\tstate->last_file = file;\n\n\treturn true;\n}\n\nstatic struct view_ops grep_ops = {\n\t\"line\",\n\t\"\",\n\tVIEW_REFRESH | VIEW_GREP_LIKE,\n\tsizeof(struct grep_state),\n\tgrep_open,\n\tgrep_read,\n\tview_column_draw,\n\tgrep_request,\n\tview_column_grep,\n\tgrep_select,\n\tNULL,\n\tview_column_bit(FILE_NAME) | view_column_bit(LINE_NUMBER) |\n\t\tview_column_bit(TEXT),\n\tgrep_get_column_data,\n};\n\nDEFINE_VIEW(grep);\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/help.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/argv.h\"\n#include \"tig/view.h\"\n#include \"tig/search.h\"\n#include \"tig/prompt.h\"\n#include \"tig/draw.h\"\n\nextern const struct menu_item toggle_menu_items[];\n\nstatic const char collapse_expand_names[2][13] = {\n\t\"Collapse all\",\n\t\"Expand all\"\n};\nstatic struct keymap collapse_expand_keymap = {\n\tcollapse_expand_names[0], NULL, 0, false\n};\nstatic struct keymap toggle_menu_keymap = {\n\t\"toggle\", NULL, 0, false\n};\n\n/*\n * Help backend\n */\n\nstruct help_state {\n\tint keys_width;\n\tint name_width;\n};\n\nstruct help {\n\tenum request request;\n\tunion {\n\t\tstruct keymap *keymap;\n\t\tstruct menu_item *menu;\n\t} item;\n\tunion {\n\t\tconst char *text;\n\t\tconst struct request_info *req_info;\n\t} data;\n};\n\nstatic bool\nhelp_draw(struct view *view, struct line *line, unsigned int lineno)\n{\n\tstruct help *help = line->data;\n\tconst struct keymap *keymap = help->item.keymap;\n\tstruct help_state *state = view->private;\n\n\tif (line->type == LINE_SECTION) {\n\t\tdraw_formatted(view, line->type, \"[%c] %s %s\",\n\t\t\t\tkeymap->hidden ? '+' : '-', keymap->name,\n\t\t\t\tkeymap == &collapse_expand_keymap ? \"sections\" : \"bindings\");\n\n\t} else if (line->type == LINE_HELP_GROUP || !keymap) {\n\t\tdraw_text(view, line->type, help->data.text);\n\n\t} else if (line->type == LINE_HELP_TOGGLE) {\n\t\tstruct menu_item *item = help->item.menu;\n\t\tchar key[2];\n\n\t\tif (!string_nformat(key, sizeof(key), NULL, \"%c\", item->hotkey))\n\t\t\treturn true;\n\t\tif (draw_field(view, LINE_DEFAULT, key, state->keys_width + 2, ALIGN_RIGHT, false))\n\t\t\treturn true;\n\n\t\tif (draw_field(view, LINE_HELP_ACTION, item->data, state->name_width, ALIGN_LEFT, false))\n\t\t\treturn true;\n\n\t\tdraw_formatted(view, LINE_DEFAULT, \"Toggle %s\", item->text);\n\n\t} else if (help->request > REQ_RUN_REQUESTS) {\n\t\tstruct run_request *req = get_run_request(help->request);\n\t\tconst char *key = get_keys(keymap, help->request, true);\n\t\tconst char *sep = format_run_request_flags(req);\n\t\tint i;\n\n\t\tif (draw_field(view, LINE_DEFAULT, key, state->keys_width + 2, ALIGN_RIGHT, false))\n\t\t\treturn true;\n\n\t\tfor (i = 0; req->argv[i]; i++) {\n\t\t\tif (draw_formatted(view, LINE_HELP_ACTION, \"%s%s\", sep, req->argv[i]))\n\t\t\t\treturn true;\n\t\t\tsep = \" \";\n\t\t}\n\n\t} else {\n\t\tconst struct request_info *req_info = help->data.req_info;\n\t\tconst char *key = get_keys(keymap, req_info->request, true);\n\n\t\tif (draw_field(view, LINE_DEFAULT, key, state->keys_width + 2, ALIGN_RIGHT, false))\n\t\t\treturn true;\n\n\t\tif (draw_field(view, LINE_HELP_ACTION, enum_name(req_info->name), state->name_width, ALIGN_LEFT, false))\n\t\t\treturn true;\n\n\t\tdraw_text(view, LINE_DEFAULT, req_info->help);\n\t}\n\n\treturn true;\n}\n\nstatic bool\nhelp_grep(struct view *view, struct line *line)\n{\n\tstruct help *help = line->data;\n\tconst struct keymap *keymap = help->item.keymap;\n\n\tif (line->type == LINE_SECTION) {\n\t\tconst char *text[] = { keymap->name, NULL };\n\n\t\treturn grep_text(view, text);\n\n\t} else if (line->type == LINE_HELP_GROUP || !keymap) {\n\t\tconst char *text[] = { help->data.text, NULL };\n\n\t\treturn grep_text(view, text);\n\n\t} else if (line->type == LINE_HELP_TOGGLE) {\n\t\tchar key[2];\n\t\tconst char *text[] = { key, help->item.menu->data, \"Toggle\", help->item.menu->text, NULL };\n\n\t\tif (!string_nformat(key, sizeof(key), NULL, \"%c\", help->item.menu->hotkey))\n\t\t\treturn false;\n\n\t\treturn grep_text(view, text);\n\n\t} else if (help->request > REQ_RUN_REQUESTS) {\n\t\tstruct run_request *req = get_run_request(help->request);\n\t\tconst char *key = get_keys(keymap, help->request, true);\n\t\tchar buf[SIZEOF_STR] = \"\";\n\t\tconst char *text[] = { key, buf, NULL };\n\n\t\tif (!argv_to_string(req->argv, buf, sizeof(buf), \" \"))\n\t\t\treturn false;\n\n\t\treturn grep_text(view, text);\n\n\t} else {\n\t\tconst struct request_info *req_info = help->data.req_info;\n\t\tconst char *key = get_keys(keymap, req_info->request, true);\n\t\tconst char *text[] = { key, enum_name(req_info->name), req_info->help, NULL };\n\n\t\treturn grep_text(view, text);\n\t}\n}\n\nstruct help_request_iterator {\n\tstruct view *view;\n\tstruct keymap *keymap;\n};\n\nstatic bool\nadd_help_line(struct view *view, struct help **help_ptr, struct keymap *keymap, enum line_type type)\n{\n\tstruct help *help;\n\n\tif (!add_line_alloc(view, &help, type, 0, false))\n\t\treturn false;\n\thelp->item.keymap = keymap;\n\tif (help_ptr)\n\t\t*help_ptr = help;\n\treturn true;\n}\n\nstatic bool\nhelp_keys_visitor(void *data, const char *group, struct keymap *keymap,\n\t\t  enum request request, const char *key,\n\t\t  const struct request_info *req_info, const struct run_request *run_req)\n{\n\tstruct help_request_iterator *iterator = data;\n\tstruct view *view = iterator->view;\n\tstruct help_state *state = view->private;\n\tstruct help *help;\n\n\tif (iterator->keymap != keymap) {\n\t\titerator->keymap = keymap;\n\t\tif (!add_help_line(view, &help, keymap, LINE_SECTION))\n\t\t\treturn false;\n\t}\n\n\tif (keymap->hidden)\n\t\treturn true;\n\n\tif (group) {\n\t\tif (!add_help_line(view, &help, keymap, LINE_HELP_GROUP))\n\t\t\treturn false;\n\t\thelp->data.text = group;\n\t}\n\n\tif (!add_help_line(view, &help, keymap, LINE_DEFAULT))\n\t\treturn false;\n\n\tstate->keys_width = MAX(state->keys_width, strlen(key));\n\thelp->request = request;\n\n\tif (req_info) {\n\t\tstate->name_width = MAX(state->name_width, strlen(enum_name(req_info->name)));\n\t\thelp->data.req_info = req_info;\n\t}\n\n\treturn true;\n}\n\nstatic bool\nhelp_collapse_expand_keys_visitor(void *data, const char *group, struct keymap *keymap,\n\t\t  enum request request, const char *key,\n\t\t  const struct request_info *req_info, const struct run_request *run_req)\n{\n\tstruct help_request_iterator *iterator = data;\n\n\tif (iterator->keymap != keymap) {\n\t\titerator->keymap = keymap;\n\t\tkeymap->hidden = collapse_expand_keymap.hidden;\n\t}\n\n\treturn true;\n}\n\nstatic enum status_code\nhelp_open(struct view *view, enum open_flags flags)\n{\n\tstruct help_request_iterator iterator = { view };\n\tstruct help_state *state = view->private;\n\tstruct help *help;\n\n\treset_view(view);\n\n\tif (!add_help_line(view, &help, NULL, LINE_HEADER))\n\t\treturn ERROR_OUT_OF_MEMORY;\n\thelp->data.text = \"Quick reference for tig keybindings:\";\n\n\tif (!add_help_line(view, &help, &collapse_expand_keymap, LINE_SECTION))\n\t\treturn ERROR_OUT_OF_MEMORY;\n\n\tif (!add_help_line(view, &help, NULL, LINE_DEFAULT))\n\t\treturn ERROR_OUT_OF_MEMORY;\n\thelp->data.text = \"\";\n\n\tif (!foreach_key(help_keys_visitor, &iterator, true))\n\t\treturn error(\"Failed to render key bindings\");\n\n\tif (!add_help_line(view, &help, &toggle_menu_keymap, LINE_SECTION))\n\t\treturn ERROR_OUT_OF_MEMORY;\n\tif (!toggle_menu_keymap.hidden) {\n\t\tint i;\n\n\t\tif (!add_help_line(view, &help, NULL, LINE_HELP_GROUP))\n\t\t\treturn ERROR_OUT_OF_MEMORY;\n\t\thelp->data.text = \"Toggle keys (enter: o <key>):\";\n\n\t\tfor (i = 0; toggle_menu_items[i].data; i++) {\n\t\t\tstate->name_width = MAX(state->name_width, strlen(toggle_menu_items[i].data));\n\t\t\tif (!add_help_line(view, &help, (struct keymap *)&toggle_menu_items[i], LINE_HELP_TOGGLE))\n\t\t\t\treturn ERROR_OUT_OF_MEMORY;\n\t\t}\n\t}\n\n\treturn SUCCESS;\n}\n\nstatic enum request\nhelp_request(struct view *view, enum request request, struct line *line)\n{\n\tstruct help *help = line->data;\n\n\tswitch (request) {\n\tcase REQ_ENTER:\n\t\tif (line->type == LINE_SECTION) {\n\t\t\tstruct keymap *keymap = help->item.keymap;\n\n\t\t\tkeymap->hidden = !keymap->hidden;\n\t\t\tif (keymap == &collapse_expand_keymap) {\n\t\t\t\tstruct help_request_iterator iterator = { view };\n\n\t\t\t\tcollapse_expand_keymap.name = collapse_expand_names[keymap->hidden];\n\t\t\t\tforeach_key(help_collapse_expand_keys_visitor, &iterator, true);\n\t\t\t\ttoggle_menu_keymap.hidden = keymap->hidden;\n\t\t\t}\n\t\t\trefresh_view(view);\n\t\t}\n\t\treturn REQ_NONE;\n\n\tcase REQ_REFRESH:\n\t\trefresh_view(view);\n\t\treturn REQ_NONE;\n\n\tdefault:\n\t\treturn request;\n\t}\n}\n\nstatic void\nhelp_select(struct view *view, struct line *line)\n{\n}\n\nstatic struct view_ops help_ops = {\n\t\"line\",\n\t\"\",\n\tVIEW_NO_GIT_DIR | VIEW_REFRESH,\n\tsizeof(struct help_state),\n\thelp_open,\n\tNULL,\n\thelp_draw,\n\thelp_request,\n\thelp_grep,\n\thelp_select,\n\tNULL,\n};\n\nDEFINE_VIEW(help);\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/io.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/tig.h\"\n#include \"tig/util.h\"\n#include \"tig/io.h\"\n\n/*\n * Encoding conversion.\n */\n\n#define ENCODING_SEP\t\": encoding: \"\n#define ENCODING_ARG\t\"--encoding=\" ENCODING_UTF8\n\n#define CHARSET_SEP\t\"; charset=\"\n\nstruct encoding {\n\tstruct encoding *next;\n\ticonv_t cd;\n\tchar fromcode[1];\n};\n\nchar encoding_arg[] = ENCODING_ARG;\nstruct encoding *default_encoding;\nstatic struct encoding *encodings;\n\nstruct encoding *\nencoding_open(const char *fromcode)\n{\n\tstruct encoding *encoding;\n\tsize_t len = strlen(fromcode);\n\n\tif (!*fromcode)\n\t\treturn NULL;\n\n\tfor (encoding = encodings; encoding; encoding = encoding->next) {\n\t\tif (!strcasecmp(encoding->fromcode, fromcode))\n\t\t\treturn encoding;\n\t}\n\n\tencoding = calloc(1, sizeof(*encoding) + len);\n\tif (!encoding)\n\t\tdie(\"Failed to allocate encoding\");\n\tstrcpy(encoding->fromcode, fromcode);\n\tencoding->cd = iconv_open(ENCODING_UTF8, fromcode);\n\tif (encoding->cd == ICONV_NONE) {\n\t\tfree(encoding);\n\t\treturn NULL;\n\t}\n\n\tencoding->next = encodings;\n\tencodings = encoding;\n\n\treturn encoding;\n}\n\nstatic bool\nencoding_convert_string(iconv_t iconv_cd, struct buffer *buf)\n{\n\tstatic char *out_buffer;\n\tstatic size_t out_size;\n\tICONV_CONST char *inbuf = buf->data;\n\tsize_t inlen = buf->size + 1;\n\n\tchar *outbuf;\n\tsize_t outlen;\n\n\tsize_t ret;\n\n\tif (!out_size) {\n\t\tout_size = BUFSIZ * 2;\n\t\tout_buffer = malloc(out_size);\n\t\tif (!out_buffer)\n\t\t\tdie(\"Failed to allocate buffer\");\n\t}\n\n\toutbuf = out_buffer;\n\toutlen = out_size;\n\n\tfor (;;) {\n\t\tret = iconv(iconv_cd, &inbuf, &inlen, &outbuf, &outlen);\n\t\tif (ret == (size_t) -1 && errno == E2BIG) {\n\t\t\tchar *tmp = realloc(out_buffer, out_size + BUFSIZ);\n\t\t\tif (!tmp)\n\t\t\t\tbreak;\n\t\t\tout_buffer = tmp;\n\t\t\toutbuf = out_buffer + (out_size - outlen);\n\t\t\tout_size += BUFSIZ;\n\t\t\toutlen += BUFSIZ;\n\t\t} else\n\t\t\tbreak;\n\t}\n\n\tif (ret != (size_t) -1) {\n\t\tbuf->data = out_buffer;\n\t\tbuf->size = out_size - outlen;\n\t}\n\n\treturn (ret != (size_t) -1);\n}\n\nbool\nencoding_convert(struct encoding *encoding, struct buffer *buf)\n{\n\treturn encoding_convert_string(encoding->cd, buf);\n}\n\nconst char *\nencoding_iconv(iconv_t iconv_cd, const char *string, size_t length)\n{\n\tchar *instr = strndup(string, length);\n\tstruct buffer buf = { instr, length };\n\tconst char *ret = buf.data && encoding_convert_string(iconv_cd, &buf) ? buf.data : string;\n\n\tfree(instr);\n\treturn ret == instr ? string : ret;\n}\n\nstruct encoding *\nget_path_encoding(const char *path, struct encoding *default_encoding)\n{\n\tconst char *check_attr_argv[] = {\n\t\t\"git\", \"check-attr\", \"encoding\", \"--\", path, NULL\n\t};\n\tchar buf[SIZEOF_STR];\n\tchar *encoding;\n\n\t/* <path>: encoding: <encoding> */\n\n\tif (!*path || !io_run_buf(check_attr_argv, buf, sizeof(buf), NULL, false)\n\t    || !(encoding = strstr(buf, ENCODING_SEP)))\n\t\treturn default_encoding;\n\n\tencoding += STRING_SIZE(ENCODING_SEP);\n\tif (!strcmp(encoding, ENCODING_UTF8)\n\t    || !strcmp(encoding, \"unspecified\")\n\t    || !strcmp(encoding, \"set\")) {\n\t\tconst char *file_argv[] = {\n\t\t\t\"file\", \"--mime\", \"--\", path, NULL\n\t\t};\n\n\t\tif (!*path || !io_run_buf(file_argv, buf, sizeof(buf), NULL, false)\n\t\t    || !(encoding = strstr(buf, CHARSET_SEP)))\n\t\t\treturn default_encoding;\n\n\t\tencoding += STRING_SIZE(CHARSET_SEP);\n\t}\n\n\treturn encoding_open(encoding);\n}\n\n/*\n * Path manipulation.\n */\n\nbool\npath_expand(char *dst, size_t dstlen, const char *src)\n{\n\tif (!src)\n\t\treturn false;\n\n\tif (src[0] == '~') {\n\t\t/* constrain wordexp to tilde expansion only */\n\t\tconst char *ifs = getenv(\"IFS\") ? getenv(\"IFS\") : \" \\t\\n\";\n\t\twordexp_t we_result;\n\t\tsize_t metachar_pos;\n\t\tchar metachars[SIZEOF_STR];\n\t\tchar leading[SIZEOF_STR];\n\n\t\tstring_format(metachars, \"%s%s\", \"/$|&;<>(){}`\", ifs);\n\t\tmetachar_pos = strcspn(src, metachars);\n\t\tif (src[metachar_pos] == '/' || src[metachar_pos] == 0) {\n\t\t\tstring_nformat(leading, metachar_pos + 1, NULL, \"%s\", src);\n\t\t\tif (wordexp(leading, &we_result, WRDE_NOCMD))\n\t\t\t\treturn false;\n\t\t\tstring_nformat(dst, dstlen, NULL, \"%s%s\", we_result.we_wordv[0], src + metachar_pos);\n\t\t\twordfree(&we_result);\n\t\t\treturn true;\n\t\t}\n\t}\n\n\t/* else */\n\tstring_ncopy_do(dst, dstlen, src, strlen(src));\n\treturn true;\n}\n\nbool\npath_search(char *dst, size_t dstlen, const char *query, const char *colon_path, int access_flags)\n{\n\tconst char *_colon_path = _PATH_DEFPATH; /* emulate execlp() */\n\tchar test[SIZEOF_STR];\n\tchar elt[SIZEOF_STR];\n\tsize_t elt_len;\n\n\tif (!query || !*query)\n\t\treturn false;\n\n\tif (strchr(query, '/')) {\n\t\tif (access(query, access_flags))\n\t\t\treturn false;\n\t\tstring_ncopy_do(dst, dstlen, query, strlen(query));\n\t\treturn true;\n\t}\n\n\tif (colon_path && *colon_path)\n\t\t_colon_path = colon_path;\n\n\twhile (_colon_path && *_colon_path) {\n\t\telt_len = strcspn(_colon_path, \":\");\n\t\tif (elt_len)\n\t\t\tstring_ncopy(elt, _colon_path, elt_len);\n\t\telse\n\t\t\tstring_ncopy(elt, \".\", 1);\n\n\t\t_colon_path += elt_len;\n\t\tif (*_colon_path)\n\t\t\t_colon_path += 1;\n\n\t\tstring_format(test, \"%s/%s\", elt, query);\n\t\tif (!access(test, access_flags)) {\n\t\t\tstring_ncopy_do(dst, dstlen, test, strlen(test));\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\n/*\n * Executing external commands.\n */\n\nstatic void\nio_init(struct io *io)\n{\n\tmemset(io, 0, sizeof(*io));\n\tio->pipe = -1;\n}\n\nbool\nio_open(struct io *io, const char *fmt, ...)\n{\n\tchar name[SIZEOF_STR] = \"\";\n\tint retval;\n\n\tio_init(io);\n\n\tFORMAT_BUFFER(name, sizeof(name), fmt, retval, false);\n\tif (retval < 0) {\n\t\tio->error = ENAMETOOLONG;\n\t\treturn false;\n\t}\n\n\tio->pipe = *name ? open(name, O_RDONLY) : dup(STDIN_FILENO);\n\tif (io->pipe == -1)\n\t\tio->error = errno;\n\treturn io->pipe != -1;\n}\n\nbool\nio_kill(struct io *io)\n{\n\treturn io->pid == 0 || kill(io->pid, SIGKILL) != -1;\n}\n\nbool\nio_done(struct io *io)\n{\n\tpid_t pid = io->pid;\n\n\tif (io->pipe != -1)\n\t\tclose(io->pipe);\n\tfree(io->buf);\n\tio_init(io);\n\n\twhile (pid > 0) {\n\t\tint status = 0;\n\t\tpid_t waiting = waitpid(pid, &status, 0);\n\n\t\tif (waiting < 0) {\n\t\t\tif (errno == EINTR)\n\t\t\t\tcontinue;\n\t\t\tio->error = errno;\n\t\t\treturn false;\n\t\t}\n\n\t\tio->status = WIFEXITED(status) ? WEXITSTATUS(status) : 0;\n\n\t\treturn waiting == pid &&\n\t\t       !WIFSIGNALED(status) &&\n\t\t       !io->status;\n\t}\n\n\treturn true;\n}\n\nstatic int\nopen_trace(int devnull, const char *argv[])\n{\n\tstatic const char *trace_file;\n\n\tif (!trace_file) {\n\t\ttrace_file = getenv(\"TIG_TRACE\");\n\t\tif (!trace_file)\n\t\t\ttrace_file = \"\";\n\t}\n\n\tif (*trace_file) {\n\t\tint fd = open(trace_file, O_RDWR | O_CREAT | O_APPEND, 0666);\n\t\tint i;\n\n\t\tflock(fd, LOCK_EX);\n\t\tfor (i = 0; argv[i]; i++) {\n\t\t\tif (write(fd, argv[i], strlen(argv[i])) == -1\n\t\t\t    || write(fd, \" \", 1) == -1)\n\t\t\t\tbreak;\n\t\t}\n\t\tif (argv[i] || write(fd, \"\\n\", 1) == -1) {\n\t\t\tflock(fd, LOCK_UN);\n\t\t\tclose(fd);\n\t\t\treturn devnull;\n\t\t}\n\n\t\tflock(fd, LOCK_UN);\n\t\treturn fd;\n\t}\n\n\treturn devnull;\n}\n\nbool\nio_trace(const char *fmt, ...)\n{\n\tstatic FILE *trace_out; /* Intentionally leaked. */\n\tva_list args;\n\tint retval;\n\n\tif (!trace_out) {\n\t\tconst char *trace_file = getenv(\"TIG_TRACE\");\n\n\t\tif (trace_file)\n\t\t\ttrace_out = fopen(trace_file, \"a\");\n\t\tif (!trace_out)\n\t\t\treturn false;\n\t}\n\n\tva_start(args, fmt);\n\tretval = vfprintf(trace_out, fmt, args);\n\tva_end(args);\n\tfflush(trace_out);\n\n\treturn retval != -1;\n}\n\nbool\nio_exec(struct io *io, enum io_type type, const char *dir, char * const env[], const char *argv[], int custom)\n{\n\tint pipefds[2] = { -1, -1 };\n\tbool read_from_stdin = type == IO_RD && (custom & IO_RD_FORWARD_STDIN);\n\tbool read_with_stderr = type == IO_RD && (custom & IO_RD_WITH_STDERR);\n\n\tio_init(io);\n\n\tif (dir && !strcmp(dir, argv[0]))\n\t\treturn io_open(io, \"%s%s\", dir, argv[1]);\n\n\tif ((type == IO_RD || type == IO_RP || type == IO_WR) && pipe(pipefds) < 0) {\n\t\tio->error = errno;\n\t\treturn false;\n\t} else if (type == IO_AP) {\n\t\tpipefds[1] = custom;\n\t}\n\n\tif ((io->pid = fork())) {\n\t\tif (io->pid == -1)\n\t\t\tio->error = errno;\n\t\tif (pipefds[!(type == IO_WR)] != -1)\n\t\t\tclose(pipefds[!(type == IO_WR)]);\n\t\tif (io->pid != -1) {\n\t\t\tio->pipe = pipefds[!!(type == IO_WR)];\n\t\t\treturn true;\n\t\t}\n\n\t} else {\n\t\tif (type != IO_FG) {\n\t\t\tint devnull = open(\"/dev/null\", O_RDWR);\n\t\t\tint readfd  = type == IO_WR ? pipefds[0]\n\t\t\t\t    : type == IO_RP ? custom\n\t\t\t\t    : devnull;\n\t\t\tint writefd = (type == IO_RD || type == IO_RP || type == IO_AP)\n\t\t\t\t    ? pipefds[1] : devnull;\n\t\t\tint errorfd = open_trace(devnull, argv);\n\n\t\t\t/* Inject stdin given on the command line. */\n\t\t\tif (read_from_stdin)\n\t\t\t\treadfd = dup(STDIN_FILENO);\n\n\t\t\tdup2(readfd,  STDIN_FILENO);\n\t\t\tdup2(writefd, STDOUT_FILENO);\n\t\t\tif (read_with_stderr)\n\t\t\t\tdup2(writefd, STDERR_FILENO);\n\t\t\telse\n\t\t\t\tdup2(errorfd, STDERR_FILENO);\n\n\t\t\tif (devnull != errorfd)\n\t\t\t\tclose(errorfd);\n\t\t\tclose(devnull);\n\t\t\tif (pipefds[0] != -1)\n\t\t\t\tclose(pipefds[0]);\n\t\t\tif (pipefds[1] != -1)\n\t\t\t\tclose(pipefds[1]);\n\t\t} else {\n\t\t\tif (custom != -1) {\n\t\t\t\tdup2(custom, STDIN_FILENO);\n\t\t\t\tclose(custom);\n\t\t\t}\n\t\t}\n\n\t\tif (dir && *dir && chdir(dir) == -1)\n\t\t\t_exit(errno);\n\n\t\tif (env) {\n\t\t\tint i;\n\n\t\t\tfor (i = 0; env[i]; i++)\n\t\t\t\tif (*env[i])\n\t\t\t\t\tputenv(env[i]);\n\t\t}\n\n\t\tsignal(SIGHUP, SIG_DFL);\n\t\tsignal(SIGINT, SIG_DFL);\n\t\tsignal(SIGPIPE, SIG_DFL);\n#ifdef DEBUG\n\t\tsignal(SIGSEGV, SIG_DFL);\n#endif\n\n\t\texecvp(argv[0], (char *const*) argv);\n\n\t\tclose(STDOUT_FILENO);\n\t\t_exit(errno);\n\t}\n\n\tif (pipefds[!!(type == IO_WR)] != -1)\n\t\tclose(pipefds[!!(type == IO_WR)]);\n\treturn false;\n}\n\nbool\nio_run(struct io *io, enum io_type type, const char *dir, char * const env[], const char *argv[])\n{\n\treturn io_exec(io, type, dir, env, argv, 0);\n}\n\nstatic bool\nio_complete(enum io_type type, const char **argv, const char *dir, int fd)\n{\n\tstruct io io;\n\n\treturn io_exec(&io, type, dir, NULL, argv, fd) && io_done(&io);\n}\n\nbool\nio_run_bg(const char **argv, const char *dir)\n{\n\treturn io_complete(IO_BG, argv, dir, -1);\n}\n\nbool\nio_run_fg(const char **argv, const char *dir, int fd)\n{\n\treturn io_complete(IO_FG, argv, dir, fd);\n}\n\nbool\nio_run_append(const char **argv, int fd)\n{\n\treturn io_complete(IO_AP, argv, NULL, fd);\n}\n\nbool\nio_eof(struct io *io)\n{\n\treturn io->eof;\n}\n\nint\nio_error(struct io *io)\n{\n\treturn io->error;\n}\n\nchar *\nio_strerror(struct io *io)\n{\n\treturn strerror(io->error);\n}\n\nbool\nio_can_read(struct io *io, bool can_block)\n{\n\tstruct timeval tv = { 0, 500 };\n\tfd_set fds;\n\n\tFD_ZERO(&fds);\n\tFD_SET(io->pipe, &fds);\n\n\treturn select(io->pipe + 1, &fds, NULL, NULL, can_block ? NULL : &tv) > 0;\n}\n\nssize_t\nio_read(struct io *io, void *buf, size_t bufsize)\n{\n\tdo {\n\t\tssize_t readsize = read(io->pipe, buf, bufsize);\n\n\t\tif (readsize < 0 && (errno == EAGAIN || errno == EINTR))\n\t\t\tcontinue;\n\t\telse if (readsize == -1)\n\t\t\tio->error = errno;\n\t\telse if (readsize == 0)\n\t\t\tio->eof = 1;\n\t\treturn readsize;\n\t} while (1);\n}\n\nchar *\nio_memchr(struct buffer *buf, char *data, int c)\n{\n\tchar *pos;\n\n\tif (!buf || data < buf->data || buf->data + buf->size <= data)\n\t\treturn NULL;\n\n\tpos = memchr(data, c, buf->size - (data - buf->data));\n\treturn pos ? pos + 1 : NULL;\n}\n\nDEFINE_ALLOCATOR(io_realloc_buf, char, BUFSIZ)\n\nstatic bool\nio_get_line(struct io *io, struct buffer *buf, int c, size_t *lineno, bool can_read, char eol_char)\n{\n\tchar *eol;\n\tssize_t readsize;\n\n\twhile (true) {\n\t\tif (io->bufsize > 0) {\n\t\t\teol = memchr(io->bufpos, c, io->bufsize);\n\n\t\t\twhile (eol_char && io->bufpos < eol && eol[-1] == eol_char) {\n\t\t\t\tif (lineno)\n\t\t\t\t\t(*lineno)++;\n\t\t\t\teol[-1] = eol[0] = ' ';\n\t\t\t\teol = memchr(io->bufpos, c, io->bufsize);\n\t\t\t}\n\t\t\tif (eol) {\n\t\t\t\tbuf->data = io->bufpos;\n\t\t\t\tbuf->size = eol - buf->data;\n\n\t\t\t\t*eol = 0;\n\t\t\t\tio->bufpos = eol + 1;\n\t\t\t\tio->bufsize -= io->bufpos - buf->data;\n\t\t\t\tif (lineno)\n\t\t\t\t\t(*lineno)++;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tif (io_eof(io)) {\n\t\t\tif (io->bufsize) {\n\t\t\t\tbuf->data = io->bufpos;\n\t\t\t\tbuf->size = io->bufsize;\n\n\t\t\t\tio->bufpos[io->bufsize] = 0;\n\t\t\t\tio->bufpos += io->bufsize;\n\t\t\t\tio->bufsize = 0;\n\t\t\t\tif (lineno)\n\t\t\t\t\t(*lineno)++;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!can_read)\n\t\t\treturn false;\n\n\t\tif (io->bufsize > 0 && io->bufpos > io->buf)\n\t\t\tmemmove(io->buf, io->bufpos, io->bufsize);\n\n\t\tif (io->bufalloc == io->bufsize) {\n\t\t\tif (!io_realloc_buf(&io->buf, io->bufalloc, BUFSIZ))\n\t\t\t\treturn false;\n\t\t\tio->bufalloc += BUFSIZ;\n\t\t}\n\n\t\tio->bufpos = io->buf;\n\t\treadsize = io_read(io, io->buf + io->bufsize, io->bufalloc - io->bufsize);\n\t\tif (io_error(io))\n\t\t\treturn NULL;\n\t\tio->bufsize += readsize;\n\t}\n}\n\nbool\nio_get(struct io *io, struct buffer *buf, int c, bool can_read)\n{\n\treturn io_get_line(io, buf, c, NULL, can_read, 0);\n}\n\nbool\nio_write(struct io *io, const void *buf, size_t bufsize)\n{\n\tconst char *bytes = buf;\n\tsize_t written = 0;\n\n\twhile (!io_error(io) && written < bufsize) {\n\t\tssize_t size;\n\n\t\tsize = write(io->pipe, bytes + written, bufsize - written);\n\t\tif (size < 0 && (errno == EAGAIN || errno == EINTR))\n\t\t\tcontinue;\n\t\telse if (size == -1)\n\t\t\tio->error = errno;\n\t\telse\n\t\t\twritten += size;\n\t}\n\n\treturn written == bufsize;\n}\n\nbool\nio_printf(struct io *io, const char *fmt, ...)\n{\n\tchar buf[SIZEOF_STR] = \"\";\n\tint retval;\n\n\tFORMAT_BUFFER(buf, sizeof(buf), fmt, retval, false);\n\tif (retval < 0) {\n\t\tio->error = ENAMETOOLONG;\n\t\treturn false;\n\t}\n\n\treturn io_write(io, buf, retval);\n}\n\nbool\nio_read_buf(struct io *io, char buf[], size_t bufsize, bool allow_empty)\n{\n\tstruct buffer result = {0};\n\n\tif (io_get(io, &result, '\\n', true)) {\n\t\tresult.data = string_trim(result.data);\n\t\tstring_ncopy_do(buf, bufsize, result.data, strlen(result.data));\n\t}\n\n\treturn io_done(io) && (result.data || allow_empty);\n}\n\nbool\nio_run_buf(const char **argv, char buf[], size_t bufsize, const char *dir, bool allow_empty)\n{\n\tstruct io io;\n\n\treturn io_run(&io, IO_RD, dir, NULL, argv) && io_read_buf(&io, buf, bufsize, allow_empty);\n}\n\nbool\nio_from_string(struct io *io, const char *str)\n{\n\tsize_t len = strlen(str);\n\n\tio_init(io);\n\n\tif (!io_realloc_buf(&io->buf, io->bufalloc, len))\n\t\treturn false;\n\n\tio->bufsize = io->bufalloc = len;\n\tio->bufpos = io->buf;\n\tio->eof = true;\n\tstrcpy(io->buf, str);\n\n\treturn true;\n}\n\nstatic enum status_code\nio_load_file(struct io *io, const char *separators,\n\t     size_t *lineno, io_read_fn read_property, void *data)\n{\n\tstruct buffer buf;\n\tenum status_code state = SUCCESS;\n\n\twhile (state == SUCCESS && io_get_line(io, &buf, '\\n', lineno, true, '\\\\')) {\n\t\tchar *name;\n\t\tchar *value;\n\t\tsize_t namelen;\n\t\tsize_t valuelen;\n\n\t\tname = string_trim(buf.data);\n\t\tnamelen = strcspn(name, separators);\n\n\t\tif (name[namelen]) {\n\t\t\tname[namelen] = 0;\n\t\t\tvalue = string_trim(name + namelen + 1);\n\t\t\tvaluelen = strlen(value);\n\n\t\t} else {\n\t\t\tvalue = \"\";\n\t\t\tvaluelen = 0;\n\t\t}\n\n\t\tstate = read_property(name, namelen, value, valuelen, data);\n\t}\n\n\tif (state == SUCCESS && io_error(io))\n\t\tstate = error(\"%s\", io_strerror(io));\n\tio_done(io);\n\n\treturn state;\n}\n\nenum status_code\nio_load_span(struct io *io, const char *separators, size_t *lineno,\n\t     io_read_fn read_property, void *data)\n{\n\treturn io_load_file(io, separators, lineno, read_property, data);\n}\n\nenum status_code\nio_load(struct io *io, const char *separators,\n\tio_read_fn read_property, void *data)\n{\n\treturn io_load_file(io, separators, NULL, read_property, data);\n}\n\nenum status_code\nio_run_load(struct io *io, const char **argv, const char *separators,\n\t    io_read_fn read_property, void *data)\n{\n\tif (!io_run(io, IO_RD, NULL, NULL, argv))\n\t\treturn error(\"Failed to open IO\");\n\treturn io_load(io, separators, read_property, data);\n}\n\nbool\nio_fprintf(FILE *file, const char *fmt, ...)\n{\n\tva_list args;\n\tint fmtlen, retval;\n\n\tva_start(args, fmt);\n\tfmtlen = vsnprintf(NULL, 0, fmt, args);\n\tva_end(args);\n\n\tva_start(args, fmt);\n\tretval = vfprintf(file, fmt, args);\n\tva_end(args);\n\n\treturn fmtlen == retval;\n}\n\nconst char *\nget_temp_dir(void)\n{\n\tstatic const char *tmp;\n\n\tif (tmp)\n\t\treturn tmp;\n\n\tif (!tmp)\n\t\ttmp = getenv(\"TMPDIR\");\n\tif (!tmp)\n\t\ttmp = getenv(\"TEMP\");\n\tif (!tmp)\n\t\ttmp = getenv(\"TMP\");\n\tif (!tmp)\n\t\ttmp = \"/tmp\";\n\n\treturn tmp;\n}\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/keys.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/tig.h\"\n#include \"tig/types.h\"\n#include \"tig/argv.h\"\n#include \"tig/io.h\"\n#include \"tig/keys.h\"\n\nstruct keybinding {\n\tenum request request;\n\tsize_t keys;\n\tstruct key key[1];\n};\n\nstatic struct keymap keymaps[] = {\n\t{ \"generic\" },\n\t{ \"search\" },\n#define VIEW_KEYMAP(id, name) { #name }\n\tVIEW_INFO(VIEW_KEYMAP)\n};\n\nstatic struct keymap *generic_keymap = keymaps;\n#define is_generic_keymap(keymap) ((keymap) == generic_keymap)\n\nstatic struct keymap *search_keymap = keymaps + 1;\n#define is_search_keymap(keymap) ((keymap) == search_keymap)\n\nstruct keymap *\nget_keymap(const char *name, size_t namelen)\n{\n\tint i;\n\n\tfor (i = 0; i < ARRAY_SIZE(keymaps); i++)\n\t\tif (!strncasecmp(keymaps[i].name, name, namelen))\n\t\t\treturn &keymaps[i];\n\n\treturn NULL;\n}\n\nbool\nupdate_keymap_visibility(const char *name, size_t namelen)\n{\n\tbool changed = false;\n\tint i;\n\n\t/* Skip generic and search keymaps. */\n\tfor (i = 2; i < ARRAY_SIZE(keymaps); i++) {\n\t\tbool hidden = !!strncmp(keymaps[i].name, name, namelen);\n\t\tif (keymaps[i].hidden != hidden) {\n\t\t\tkeymaps[i].hidden = hidden;\n\t\t\tchanged = true;\n\t\t}\n\t}\n\treturn changed;\n}\n\nstatic bool\nkeybinding_matches(const struct keybinding *keybinding, const struct key key[],\n\t\t  size_t keys, bool *conflict_ptr)\n{\n\tbool conflict = false;\n\tint i;\n\n\tif (keybinding->keys < keys)\n\t\treturn false;\n\n\tfor (i = 0; i < keys; i++) {\n\t\tconst struct key *key1 = &keybinding->key[i];\n\t\tconst struct key *key2 = &key[i];\n\n\t\tif (key1->modifiers.control &&\n\t\t    key1->modifiers.multibytes &&\n\t\t    !memcmp(&key1->modifiers, &key2->modifiers, sizeof(key1->modifiers)) &&\n\t\t    strlen(key1->data.bytes) == 1 &&\n\t\t    strlen(key2->data.bytes) == 1) {\n\t\t\tint c1 = key1->data.bytes[0];\n\t\t\tint c2 = key2->data.bytes[0];\n\n\t\t\tif (ascii_toupper(c1) != ascii_toupper(c2))\n\t\t\t\treturn false;\n\t\t\tif (c1 != c2)\n\t\t\t\tconflict = true;\n\t\t} else {\n\t\t\tif (memcmp(key1, key2, sizeof(*key1)))\n\t\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (conflict_ptr && keybinding->request != REQ_NONE)\n\t\t*conflict_ptr = conflict;\n\treturn true;\n}\n\nstatic bool\nkeybinding_equals(const struct keybinding *keybinding, const struct key key[],\n\t\t  size_t keys, bool *conflict_ptr)\n{\n\tif (keybinding->keys != keys)\n\t\treturn false;\n\treturn keybinding_matches(keybinding, key, keys, conflict_ptr);\n}\n\nstatic enum status_code\ndel_keybinding(const struct key key[], size_t keys)\n{\n\tbool found = false;\n\tsize_t i;\n\n\tfor (i = 0; i < ARRAY_SIZE(keymaps); i++) {\n\t\tstruct keymap *table = &keymaps[i];\n\t\tsize_t j;\n\n\t\tfor (j = 0; j < table->size; j++)\n\t\t\tif (keybinding_equals(table->data[j], key, keys, NULL)) {\n\t\t\t\tfound = true;\n\t\t\t\tfree(table->data[j]);\n\t\t\t\ttable->size--;\n\t\t\t\tfor (; j < table->size; j++)\n\t\t\t\t\ttable->data[j] = table->data[j + 1];\n\t\t\t\tif (table->size)\n\t\t\t\t\ttable->data = realloc(table->data, table->size * sizeof(*table->data));\n\t\t\t}\n\t}\n\n\treturn found ? SUCCESS : error(\"No keybinding found for %s\", get_key_name(key, keys, false));\n}\n\nenum status_code\nadd_keybinding(struct keymap *table, enum request request,\n\t       const struct key key[], size_t keys)\n{\n\tstruct keybinding *keybinding;\n\tchar buf[SIZEOF_STR];\n\tbool conflict = false;\n\tsize_t i;\n\n\tif (is_generic_keymap(table) && request == REQ_NONE)\n\t\treturn del_keybinding(key, keys);\n\n\tfor (i = 0; i < table->size; i++) {\n\t\tif (keybinding_equals(table->data[i], key, keys, &conflict)) {\n\t\t\tenum request old_request = table->data[i]->request;\n\t\t\tconst char *old_name;\n\n\t\t\ttable->data[i]->request = request;\n\t\t\tif (!conflict)\n\t\t\t\treturn SUCCESS;\n\n\t\t\told_name = get_request_name(old_request);\n\t\t\tstring_ncopy(buf, old_name, strlen(old_name));\n\t\t\treturn error(\"Key binding for %s and %s conflict; \"\n\t\t\t\t     \"keys using Ctrl are case insensitive\",\n\t\t\t\t     buf, get_request_name(request));\n\t\t}\n\t}\n\n\ttable->data = realloc(table->data, (table->size + 1) * sizeof(*table->data));\n\tkeybinding = calloc(1, sizeof(*keybinding) + (sizeof(*key) * (keys - 1)));\n\tif (!table->data || !keybinding)\n\t\tdie(\"Failed to allocate keybinding\");\n\n\tmemcpy(keybinding->key, key, sizeof(*key) * keys);\n\tkeybinding->keys = keys;\n\tkeybinding->request = request;\n\ttable->data[table->size++] = keybinding;\n\treturn SUCCESS;\n}\n\nstatic enum request\nget_keybinding_in_keymap(const struct keymap *keymap, const struct key key[], size_t keys, int *matches)\n{\n\tenum request request = REQ_UNKNOWN;\n\tsize_t i;\n\n\tfor (i = 0; i < keymap->size; i++)\n\t\tif (keybinding_matches(keymap->data[i], key, keys, NULL)) {\n\t\t\tif (matches && keymap->data[i]->request != REQ_NONE)\n\t\t\t\t(*matches)++;\n\t\t\t/* Overriding keybindings, might have been added\n\t\t\t * at the end of the keymap so we need to\n\t\t\t * iterate all keybindings. */\n\t\t\tif (keymap->data[i]->keys == keys)\n\t\t\t\trequest = keymap->data[i]->request;\n\t\t}\n\n\treturn request;\n}\n\n/* Looks for a key binding first in the given keymap, then in the generic keymap. */\nenum request\nget_keybinding(const struct keymap *keymap, const struct key key[], size_t keys, int *matches)\n{\n\tenum request request = get_keybinding_in_keymap(keymap, key, keys, matches);\n\n\tif (!is_search_keymap(keymap)) {\n\t\tint generic_matches = 0;\n\t\tenum request generic_request = get_keybinding_in_keymap(generic_keymap, key, keys, &generic_matches);\n\n\t\t/* Include generic matches iff there are more than one\n\t\t * so unbound keys in the current keymap still override\n\t\t * generic keys while still ensuring that the key combo\n\t\t * handler continues to wait for more keys if there is\n\t\t * another possible match. E.g. while in `main` view:\n\t\t *\n\t\t *   bind generic q  quit  # 'q' will quit\n\t\t *   bind main    q  none  # 'q' will do nothing\n\t\t *   bind generic qa quit  # 'qa' will quit\n\t\t *   bind main    qn next  # 'qn' will move to next entry\n\t\t */\n\t\tif (matches && (request == REQ_UNKNOWN || generic_matches > 1))\n\t\t\t(*matches) += generic_matches;\n\t\tif (request == REQ_UNKNOWN)\n\t\t\trequest = generic_request;\n\t}\n\n\treturn request == REQ_NONE ? REQ_UNKNOWN : request;\n}\n\n\nstruct key_mapping {\n\tconst char *name;\n\tint value;\n};\n\nstatic const struct key_mapping key_mappings[] = {\n\t{ \"Enter\",\tKEY_RETURN },\n\t{ \"Space\",\t' ' },\n\t{ \"Backspace\",\tKEY_BACKSPACE },\n\t{ \"Tab\",\tKEY_TAB },\n\t{ \"Escape\",\tKEY_ESC },\n\t{ \"Esc\",\tKEY_ESC },\n\t{ \"Left\",\tKEY_LEFT },\n\t{ \"Right\",\tKEY_RIGHT },\n\t{ \"Up\",\t\tKEY_UP },\n\t{ \"Down\",\tKEY_DOWN },\n\t{ \"Insert\",\tKEY_IC },\n\t{ \"Ins\",\tKEY_IC },\n\t{ \"Delete\",\tKEY_DC },\n\t{ \"Del\",\tKEY_DC },\n\t{ \"Hash\",\t'#' },\n\t{ \"Home\",\tKEY_HOME },\n\t{ \"End\",\tKEY_END },\n\t{ \"PageUp\",\tKEY_PPAGE },\n\t{ \"PgUp\",\tKEY_PPAGE },\n\t{ \"PageDown\",\tKEY_NPAGE },\n\t{ \"PgDown\",\tKEY_NPAGE },\n\t{ \"LessThan\",\t'<' },\n\t{ \"LT\",\t\t'<' },\n\t{ \"F1\",\t\tKEY_F(1) },\n\t{ \"F2\",\t\tKEY_F(2) },\n\t{ \"F3\",\t\tKEY_F(3) },\n\t{ \"F4\",\t\tKEY_F(4) },\n\t{ \"F5\",\t\tKEY_F(5) },\n\t{ \"F6\",\t\tKEY_F(6) },\n\t{ \"F7\",\t\tKEY_F(7) },\n\t{ \"F8\",\t\tKEY_F(8) },\n\t{ \"F9\",\t\tKEY_F(9) },\n\t{ \"F10\",\tKEY_F(10) },\n\t{ \"F11\",\tKEY_F(11) },\n\t{ \"F12\",\tKEY_F(12) },\n\t{ \"F13\",\tKEY_F(13) },\n\t{ \"F14\",\tKEY_F(14) },\n\t{ \"F15\",\tKEY_F(15) },\n\t{ \"F16\",\tKEY_F(16) },\n\t{ \"F17\",\tKEY_F(17) },\n\t{ \"F18\",\tKEY_F(18) },\n\t{ \"F19\",\tKEY_F(19) },\n\t{ \"ScrollBack\",\tKEY_SR },\n\t{ \"SBack\",\tKEY_SR },\n\t{ \"ScrollFwd\",\tKEY_SF },\n\t{ \"SFwd\",\tKEY_SF },\n\t{ \"BackTab\",\tKEY_BTAB },\n\t{ \"ShiftTab\",\tKEY_BTAB },\n\t{ \"ShiftLeft\",\tKEY_SLEFT },\n\t{ \"ShiftRight\",\tKEY_SRIGHT },\n\t{ \"ShiftDelete\",\tKEY_SDC },\n\t{ \"ShiftDel\",\tKEY_SDC },\n\t{ \"ShiftHome\",\tKEY_SHOME },\n\t{ \"ShiftEnd\",\tKEY_SEND },\n\t{ \"SingleQuote\", '\\'' },\n\t{ \"DoubleQuote\", '\"' },\n};\n\nstatic const struct key_mapping *\nget_key_mapping(const char *name, size_t namelen)\n{\n\tint i;\n\n\tfor (i = 0; i < ARRAY_SIZE(key_mappings); i++) {\n\t\tif (namelen == strlen(key_mappings[i].name) &&\n\t\t    !strncasecmp(key_mappings[i].name, name, namelen))\n\t\t\treturn &key_mappings[i];\n\t}\n\n\treturn NULL;\n}\n\nstatic enum status_code\nparse_key_value(struct key *key, const char **name_ptr, size_t offset,\n\t\tconst char *replacement, const char *end)\n{\n\tconst char *name = replacement ? replacement : *name_ptr + offset;\n\tsize_t namelen = utf8_char_length(name);\n\tconst char *nameend = name + namelen;\n\n\tif (strlen(name) < namelen || utf8_to_unicode(name, namelen) == 0)\n\t\treturn error(\"Error parsing UTF-8 bytes: %s\", name);\n\n\tstrncpy(key->data.bytes, name, namelen);\n\tkey->modifiers.multibytes = 1;\n\tif (end) {\n\t\t*name_ptr = end + 1;\n\t\tif (!replacement && nameend + 1 < end)\n\t\t\treturn success(\"Ignoring text after key mapping: %.*s\",\n\t\t\t\t(int) (end - nameend), nameend);\n\t} else {\n\t\t*name_ptr = nameend;\n\t}\n\n\treturn SUCCESS;\n}\n\nenum status_code\nget_key_value(const char **name_ptr, struct key *key)\n{\n\tconst char *name = *name_ptr;\n\tconst char *end = NULL;\n\n\tmemset(key, 0, sizeof(*key));\n\n\tif (*name == '<') {\n\t\tend = strchr(name + 1, '>');\n\t\tif (!end)\n\t\t\treturn error(\"Missing '>' from key mapping: %s\", name);\n\n\t\tif (!prefixcmp(name, \"<Ctrl-\")) {\n\t\t\tkey->modifiers.control = 1;\n\t\t\treturn parse_key_value(key, name_ptr, 6, NULL, end);\n\n\t\t} else if (!prefixcmp(name, \"<C-\")) {\n\t\t\tkey->modifiers.control = 1;\n\t\t\treturn parse_key_value(key, name_ptr, 3, NULL, end);\n\n\t\t} else {\n\t\t\tconst struct key_mapping *mapping;\n\t\t\tconst char *start = name + 1;\n\t\t\tint len = end - start;\n\n\t\t\tmapping = get_key_mapping(start, len);\n\t\t\tif (!mapping)\n\t\t\t\treturn error(\"Unknown key mapping: %.*s\", len, start);\n\n\t\t\tif (strchr(\" #<'\\\"\", mapping->value)) {\n\t\t\t\tconst char replacement[] = { mapping->value, 0 };\n\n\t\t\t\treturn parse_key_value(key, name_ptr, 0, replacement, end);\n\t\t\t}\n\n\t\t\t*name_ptr = end + 1;\n\t\t\tkey->data.value = mapping->value;\n\t\t\treturn SUCCESS;\n\t\t}\n\t}\n\n\tif (name[0] == '^' && name[1] == '[') {\n\t\treturn error(\"Escape key combo must now use '<Esc>%s' \"\n\t\t\t     \"instead of '%s'\", name + 2, name);\n\t} else if (name[0] == '^' && name[1] != '\\0') {\n\t\treturn error(\"Control key mapping must now use '<Ctrl-%s>' \"\n\t\t\t     \"instead of '%s'\", name + 1, name);\n\t}\n\n\treturn parse_key_value(key, name_ptr, 0, NULL, end);\n}\n\nconst char *\nget_key_name(const struct key key[], size_t keys, bool quote_comma)\n{\n\tstatic char buf[SIZEOF_STR];\n\tsize_t pos = 0;\n\tint i;\n\n\tfor (i = 0; i < keys; i++) {\n\t\tbool multibytes = key[i].modifiers.multibytes;\n\t\tconst char *name = multibytes ? key[i].data.bytes : \"\";\n\t\tconst char *start = \"\";\n\t\tconst char *end = \"\";\n\t\tbool use_symbolic;\n\n\t\tif (key[i].modifiers.control) {\n\t\t\tstart = \"<Ctrl-\";\n\t\t\tend = \">\";\n\t\t} else if (*name == ',' && quote_comma) {\n\t\t\t/* Quote commas so they stand out in the help view. */\n\t\t\tstart = \"'\";\n\t\t\tend = \"'\";\n\t\t}\n\n\t\t/* Use symbolic name for spaces so they are readable. */\n\t\tuse_symbolic = !*name || *name == ' ';\n\t\t/* When listing keys for :save-options quote illegal characters. */\n\t\tif (!quote_comma && (*name == '<' || *name == '#'))\n\t\t\tuse_symbolic = true;\n\n\t\tif (use_symbolic) {\n\t\t\tint value = *name ? *name : key[i].data.value;\n\t\t\tint j;\n\n\t\t\tname = \"<?>\";\n\t\t\tfor (j = 0; j < ARRAY_SIZE(key_mappings); j++)\n\t\t\t\tif (key_mappings[j].value == value) {\n\t\t\t\t\tstart = \"<\";\n\t\t\t\t\tend = \">\";\n\t\t\t\t\tname = key_mappings[j].name;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t}\n\n\t\tif (!string_format_from(buf, &pos, \"%s%s%s\", start, name, end))\n\t\t\treturn \"(no key)\";\n\t}\n\n\treturn buf;\n}\n\nstatic bool\nappend_key(char *buf, size_t *pos, const struct keybinding *keybinding, bool all)\n{\n\tconst char *sep = *pos > 0 ? \", \" : \"\";\n\tconst char *keyname = get_key_name(keybinding->key, keybinding->keys, all);\n\n\treturn string_nformat(buf, BUFSIZ, pos, \"%s%s\", sep, keyname);\n}\n\nstatic bool\nappend_keymap_request_keys(char *buf, size_t *pos, enum request request,\n\t\t\t   const struct keymap *keymap, bool all)\n{\n\tint i;\n\n\tfor (i = 0; i < keymap->size; i++) {\n\t\tif (keymap->data[i]->request == request) {\n\t\t\tif (!append_key(buf, pos, keymap->data[i], all))\n\t\t\t\treturn false;\n\t\t\tif (!all)\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nconst char *\nget_keys(const struct keymap *keymap, enum request request, bool all)\n{\n\tstatic char buf[BUFSIZ];\n\tsize_t pos = 0;\n\n\tbuf[pos] = 0;\n\n\tif (!append_keymap_request_keys(buf, &pos, request, keymap, all))\n\t\treturn \"Too many keybindings!\";\n\tif (pos > 0 && !all)\n\t\treturn buf;\n\n\tif (!is_generic_keymap(keymap)) {\n\t\t/* Only the generic keymap includes the default keybindings when\n\t\t * listing all keys. */\n\t\tif (all)\n\t\t\treturn buf;\n\n\t\tif (!append_keymap_request_keys(buf, &pos, request, generic_keymap, all))\n\t\t\treturn \"Too many keybindings!\";\n\t\tif (pos)\n\t\t\treturn buf;\n\t}\n\n\treturn buf;\n}\n\nstatic struct run_request *run_request;\nstatic size_t run_requests;\n\nDEFINE_ALLOCATOR(realloc_run_requests, struct run_request, 8)\n\n#define COMMAND_FLAGS \":!?@<+>\"\n\nenum status_code\nparse_run_request_flags(struct run_request_flags *flags, const char **argv)\n{\n\tif (!argv[0])\n\t\treturn error(\"No arguments\");\n\n\tif (!strchr(COMMAND_FLAGS, *argv[0]))\n\t\treturn error(\"Unknown command flag '%c'; expected one of %s\", argv[0][0], COMMAND_FLAGS);\n\n\twhile (*argv[0]) {\n\t\tif (*argv[0] == ':') {\n\t\t\tflags->internal = 1;\n\t\t\targv[0]++;\n\t\t\tbreak;\n\t\t} else if (*argv[0] == '@') {\n\t\t\tflags->silent = 1;\n\t\t} else if (*argv[0] == '?') {\n\t\t\tflags->confirm = 1;\n\t\t} else if (*argv[0] == '<') {\n\t\t\tflags->exit = 1;\n\t\t} else if (*argv[0] == '+') {\n\t\t\tflags->echo = 1;\n\t\t} else if (*argv[0] == '>') {\n\t\t\tflags->quick = 1;\n\t\t} else if (*argv[0] != '!') {\n\t\t\tbreak;\n\t\t}\n\t\targv[0]++;\n\t}\n\n\treturn SUCCESS;\n}\n\nenum status_code\nadd_run_request(struct keymap *keymap, const struct key key[],\n\t\tsize_t keys, const char **argv)\n{\n\tstruct run_request *req;\n\tstruct run_request_flags flags = {0};\n\tenum status_code code = parse_run_request_flags(&flags, argv);\n\n\tif (code != SUCCESS)\n\t\treturn code;\n\n\tif (!realloc_run_requests(&run_request, run_requests, 1))\n\t\treturn ERROR_OUT_OF_MEMORY;\n\n\tif (!argv_copy(&run_request[run_requests].argv, argv))\n\t\treturn ERROR_OUT_OF_MEMORY;\n\n\treq = &run_request[run_requests++];\n\treq->flags = flags;\n\treq->keymap = keymap;\n\n\treturn add_keybinding(keymap, REQ_RUN_REQUESTS + run_requests, key, keys);\n}\n\nstruct run_request *\nget_run_request(enum request request)\n{\n\tif (request <= REQ_RUN_REQUESTS || request > REQ_RUN_REQUESTS + run_requests)\n\t\treturn NULL;\n\treturn &run_request[request - REQ_RUN_REQUESTS - 1];\n}\n\nconst char *\nformat_run_request_flags(const struct run_request *req)\n{\n\tstatic char flags[8];\n\tint flagspos = 0;\n\n\tmemset(flags, 0, sizeof(flags));\n\n\tif (req->flags.internal)\n\t\tflags[flagspos++] = ':';\n\telse\n\t\tflags[flagspos] = '!'; /* Optional, if other flags are defined */\n\n\tif (req->flags.silent)\n\t    flags[flagspos++] = '@';\n\tif (req->flags.confirm)\n\t    flags[flagspos++] = '?';\n\tif (req->flags.exit)\n\t\tflags[flagspos++] = '<';\n\tif (req->flags.echo)\n\t\tflags[flagspos++] = '+';\n\tif (req->flags.quick)\n\t\tflags[flagspos++] = '>';\n\tif (flagspos > 1)\n\t\tflags[flagspos++] = 0;\n\n\treturn flags;\n}\n\nstruct key_visitor_state {\n\tkey_visitor_fn visitor;\n\tvoid *data;\n\tstruct keymap *keymap;\n\tbool combine_keys;\n\tconst char *group;\n};\n\nstatic bool\nforeach_key_visit(struct key_visitor_state *state, const char *group,\n\t\t  enum request request,\n\t\t  const struct request_info *req_info, const struct run_request *run_req)\n{\n\tstruct keymap *keymap = state->keymap;\n\tint i;\n\n\tif (state->group == group)\n\t\tgroup = NULL;\n\n\tif (state->combine_keys) {\n\t\tconst char *key = get_keys(keymap, request, true);\n\n\t\tif (!key || !*key)\n\t\t\treturn true;\n\n\t\tif (group)\n\t\t\tstate->group = group;\n\t\treturn state->visitor(state->data, group, keymap, request,\n\t\t\t\t      key, req_info, run_req);\n\t}\n\n\tfor (i = 0; i < keymap->size; i++) {\n\t\tif (keymap->data[i]->request == request) {\n\t\t\tstruct keybinding *keybinding = keymap->data[i];\n\t\t\tconst char *key = get_key_name(keybinding->key, keybinding->keys, false);\n\n\t\t\tif (!key || !*key)\n\t\t\t\tcontinue;\n\n\t\t\tif (!state->visitor(state->data, group, keymap, request,\n\t\t\t\t\t    key, req_info, run_req))\n\t\t\t\treturn false;\n\n\t\t\tif (group)\n\t\t\t\tstate->group = group;\n\t\t\tgroup = NULL;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nstatic bool\nforeach_key_request(void *data, const struct request_info *req_info, const char *group)\n{\n\tstruct key_visitor_state *state = data;\n\n\tif (req_info->request == REQ_NONE)\n\t\treturn true;\n\n\treturn foreach_key_visit(state, group, req_info->request, req_info, NULL);\n}\n\nstatic bool\nforeach_key_run_request(struct key_visitor_state *state, bool internal, bool toggles)\n{\n\tstruct keymap *keymap = state->keymap;\n\tconst char *group = !internal ?\t\"External commands:\" :\n\t\t\t    toggles ?\t\"Option toggling:\" :\n\t\t\t\t\t\"Internal commands:\";\n\tenum request request = REQ_RUN_REQUESTS + 1;\n\n\tfor (; true; request++) {\n\t\tstruct run_request *req = get_run_request(request);\n\t\tconst char *key;\n\n\t\tif (!req)\n\t\t\tbreak;\n\n\t\tif (req->flags.internal != !!internal ||\n\t\t    req->keymap != keymap ||\n\t\t    !*(key = get_keys(keymap, request, true)))\n\t\t\tcontinue;\n\n\t\tif (toggles != !strcmp(req->argv[0], \"toggle\"))\n\t\t\tcontinue;\n\n\t\tif (!foreach_key_visit(state, group, request, NULL, req))\n\t\t\treturn false;\n\t}\n\n\treturn true;\n}\n\nbool\nforeach_key(key_visitor_fn visitor, void *data, bool combine_keys)\n{\n\tint i;\n\n\tfor (i = 0; i < ARRAY_SIZE(keymaps); i++) {\n\t\tstruct key_visitor_state state = { visitor, data, &keymaps[i], combine_keys };\n\n\t\tif (!foreach_request(foreach_key_request, &state)\n\t\t    || !foreach_key_run_request(&state, true, true)\n\t\t    || !foreach_key_run_request(&state, true, false)\n\t\t    || !foreach_key_run_request(&state, false, false))\n\t\t\treturn false;\n\t}\n\n\treturn true;\n}\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/line.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/tig.h\"\n#include \"tig/types.h\"\n#include \"tig/refdb.h\"\n#include \"tig/line.h\"\n#include \"tig/util.h\"\n\nstatic struct line_rule *line_rule;\nstatic size_t line_rules;\n\nstatic struct line_info **color_pair;\nstatic size_t color_pairs;\n\nDEFINE_ALLOCATOR(realloc_line_rule, struct line_rule, 8)\nDEFINE_ALLOCATOR(realloc_color_pair, struct line_info *, 8)\n\nenum line_type\nget_line_type(const char *line)\n{\n\tint linelen = strlen(line);\n\tenum line_type type;\n\n\tfor (type = 0; type < line_rules; type++) {\n\t\tstruct line_rule *rule = &line_rule[type];\n\n\t\tif (rule->regex && !regexec(rule->regex, line, 0, NULL, 0))\n\t\t\treturn type;\n\n\t\t/* Case insensitive search matches Signed-off-by lines better. */\n\t\tif (rule->linelen && linelen >= rule->linelen &&\n\t\t    !strncasecmp(rule->line, line, rule->linelen))\n\t\t\treturn type;\n\t}\n\n\treturn LINE_DEFAULT;\n}\n\nenum line_type\nget_line_type_from_ref(const struct ref *ref)\n{\n\tif (ref->type == REFERENCE_HEAD)\n\t\treturn LINE_MAIN_HEAD;\n\telse if (ref->type == REFERENCE_LOCAL_TAG)\n\t\treturn LINE_MAIN_LOCAL_TAG;\n\telse if (ref->type == REFERENCE_TAG)\n\t\treturn LINE_MAIN_TAG;\n\telse if (ref->type == REFERENCE_TRACKED_REMOTE)\n\t\treturn LINE_MAIN_TRACKED;\n\telse if (ref->type == REFERENCE_REMOTE)\n\t\treturn LINE_MAIN_REMOTE;\n\telse if (ref->type == REFERENCE_STASH)\n\t\treturn LINE_MAIN_STASH;\n\telse if (ref->type == REFERENCE_NOTE)\n\t\treturn LINE_MAIN_NOTE;\n\telse if (ref->type == REFERENCE_PREFETCH)\n\t\treturn LINE_MAIN_PREFETCH;\n\telse if (ref->type == REFERENCE_OTHER)\n\t\treturn LINE_MAIN_OTHER;\n\telse if (ref->type == REFERENCE_REPLACE)\n\t\treturn LINE_MAIN_REPLACE;\n\n\treturn LINE_MAIN_REF;\n}\n\nconst char *\nget_line_type_name(enum line_type type)\n{\n\tassert(0 <= type && type < line_rules);\n\treturn line_rule[type].name;\n}\n\nstruct line_info *\nget_line_info(const char *prefix, enum line_type type)\n{\n\tstruct line_info *info;\n\tstruct line_rule *rule;\n\n\tassert(0 <= type && type < line_rules);\n\trule = &line_rule[type];\n\tfor (info = &rule->info; info; info = info->next) {\n\t\tif (prefix && info->prefix == prefix)\n\t\t\treturn info;\n\t\tif (!prefix && !info->prefix)\n\t\t\treturn info;\n\t}\n\n\treturn &rule->info;\n}\n\nstatic struct line_info *\ninit_line_info(const char *prefix, const char *name, size_t namelen, const char *line, size_t linelen, regex_t *regex)\n{\n\tstruct line_rule *rule;\n\n\tif (!realloc_line_rule(&line_rule, line_rules, 1))\n\t\tdie(\"Failed to allocate line info\");\n\n\trule = &line_rule[line_rules++];\n\trule->name = name;\n\trule->namelen = namelen;\n\trule->line = line;\n\trule->linelen = linelen;\n\trule->regex = regex;\n\n\trule->info.prefix = prefix;\n\trule->info.fg = COLOR_DEFAULT;\n\trule->info.bg = COLOR_DEFAULT;\n\n\treturn &rule->info;\n}\n\n#define INIT_BUILTIN_LINE_INFO(type, line) \\\n\tinit_line_info(NULL, #type, STRING_SIZE(#type), (line), STRING_SIZE(line), NULL)\n\nstatic struct line_rule *\nfind_line_rule(struct line_rule *query)\n{\n\tenum line_type type;\n\n\tif (!line_rules) {\n\t\tLINE_INFO(INIT_BUILTIN_LINE_INFO);\n\t}\n\n\tfor (type = 0; type < line_rules; type++) {\n\t\tstruct line_rule *rule = &line_rule[type];\n\n\t\tif (query->namelen && enum_equals(*rule, query->name, query->namelen))\n\t\t\treturn rule;\n\n\t\tif (query->linelen && query->linelen == rule->linelen &&\n\t\t    !strncasecmp(rule->line, query->line, rule->linelen))\n\t\t\treturn rule;\n\t}\n\n\treturn NULL;\n}\n\nstruct line_info *\nadd_line_rule(const char *prefix, struct line_rule *query)\n{\n\tstruct line_rule *rule = find_line_rule(query);\n\tstruct line_info *info, *last;\n\n\tif (!rule) {\n\t\tif (query->name)\n\t\t\treturn NULL;\n\n\t\treturn init_line_info(prefix, \"\", 0, query->line, query->linelen, query->regex);\n\t}\n\n\t/* When a rule already exists and we are just adding view-specific\n\t * colors, query->line and query->regex can be freed. */\n\tfree((void *) query->line);\n\tif (query->regex) {\n\t\tregfree(query->regex);\n\t\tfree(query->regex);\n\t}\n\n\tfor (info = &rule->info; info; last = info, info = info->next)\n\t\tif (info->prefix == prefix)\n\t\t\treturn info;\n\n\tinfo = calloc(1, sizeof(*info));\n\tif (info)\n\t\tinfo->prefix = prefix;\n\tlast->next = info;\n\treturn info;\n}\n\nbool\nforeach_line_rule(line_rule_visitor_fn visitor, void *data)\n{\n\tenum line_type type;\n\n\tfor (type = 0; type < line_rules; type++) {\n\t\tstruct line_rule *rule = &line_rule[type];\n\n\t\tif (!visitor(data, rule))\n\t\t\treturn false;\n\t}\n\n\treturn true;\n}\n\nstatic void\ninit_line_info_color_pair(struct line_info *info, enum line_type type,\n\tint default_bg, int default_fg)\n{\n\tint bg = info->bg == COLOR_DEFAULT ? default_bg : info->bg;\n\tint fg = info->fg == COLOR_DEFAULT ? default_fg : info->fg;\n\tint i;\n\n\tfor (i = 0; i < color_pairs; i++) {\n\t\tif (color_pair[i]->fg == info->fg && color_pair[i]->bg == info->bg) {\n\t\t\tinfo->color_pair = i;\n\t\t\treturn;\n\t\t}\n\t}\n\n\tif (!realloc_color_pair(&color_pair, color_pairs, 1))\n\t\tdie(\"Failed to allocate color pair\");\n\n\tcolor_pair[color_pairs] = info;\n\tinfo->color_pair = color_pairs++;\n\tinit_pair(COLOR_ID(info->color_pair), fg, bg);\n}\n\nvoid\ninit_colors(void)\n{\n\tchar *no_color = getenv(\"NO_COLOR\");\n\tstruct line_rule query = { \"default\", STRING_SIZE(\"default\") };\n\tstruct line_rule *rule = find_line_rule(&query);\n\tint default_bg = rule ? rule->info.bg : COLOR_BLACK;\n\tint default_fg = rule ? rule->info.fg : COLOR_WHITE;\n\tenum line_type type;\n\n\t/* XXX: Even if the terminal does not support colors (e.g.\n\t * TERM=dumb) init_colors() must ensure that the built-in rules\n\t * have been initialized. This is done by the above call to\n\t * find_line_rule(). */\n\tif (!has_colors() || (no_color != NULL && no_color[0] != '\\0'))\n\t\treturn;\n\n\tstart_color();\n\n\tif (assume_default_colors(default_fg, default_bg) == ERR) {\n\t\tdefault_bg = COLOR_BLACK;\n\t\tdefault_fg = COLOR_WHITE;\n\t}\n\n\tfor (type = 0; type < line_rules; type++) {\n\t\tstruct line_rule *rule = &line_rule[type];\n\t\tstruct line_info *info;\n\n\t\tfor (info = &rule->info; info; info = info->next) {\n\t\t\tinit_line_info_color_pair(info, type, default_bg, default_fg);\n\t\t}\n\t}\n}\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/log.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/refdb.h\"\n#include \"tig/display.h\"\n#include \"tig/draw.h\"\n#include \"tig/log.h\"\n#include \"tig/diff.h\"\n#include \"tig/pager.h\"\n\nstruct log_state {\n\t/* Used for tracking when we need to recalculate the previous\n\t * commit, for example when the user scrolls up or uses the page\n\t * up/down in the log view. */\n\tint last_lineno;\n\tsize_t graph_indent;\n\tenum line_type last_type;\n\tbool commit_title_read;\n\tbool after_commit_header;\n\tbool reading_diff_stat;\n};\n\nstatic inline void\nlog_copy_rev(struct view *view, struct line *line)\n{\n\tconst char *text = box_text(line);\n\tsize_t offset = get_graph_indent(text);\n\n\tstring_copy_rev_from_commit_line(view->ref, text + offset);\n\tview->env->blob[0] = 0;\n}\n\nstatic void\nlog_select(struct view *view, struct line *line)\n{\n\tstruct log_state *state = view->private;\n\tint last_lineno = state->last_lineno;\n\tconst char *text = box_text(line);\n\n\tif (!last_lineno || abs(last_lineno - line->lineno) > 1\n\t    || (state->last_type == LINE_COMMIT && last_lineno > line->lineno)) {\n\t\tstruct line *commit_line = find_prev_line_by_type(view, line, LINE_COMMIT);\n\n\t\tif (commit_line)\n\t\t\tlog_copy_rev(view, commit_line);\n\t}\n\n\tif (line->type == LINE_COMMIT && !view_has_flags(view, VIEW_NO_REF))\n\t\tlog_copy_rev(view, line);\n\tstring_copy_rev(view->env->commit, view->ref);\n\tstring_ncopy(view->env->text, text, strlen(text));\n\tstate->last_lineno = line->lineno;\n\tstate->last_type = line->type;\n}\n\nstatic enum status_code\nlog_open(struct view *view, enum open_flags flags)\n{\n\tconst char *log_argv[] = {\n\t\t\"git\", \"log\", encoding_arg, commit_order_arg(),\n\t\t\tuse_mailmap_arg(), \"%(logargs)\", \"%(cmdlineargs)\",\n\t\t\t\"%(revargs)\", \"--no-color\", \"--\", \"%(fileargs)\", NULL\n\t};\n\tenum status_code code;\n\n\tcode = begin_update(view, NULL, log_argv, flags | OPEN_WITH_STDERR);\n\tif (code != SUCCESS)\n\t\treturn code;\n\n\twatch_register(&view->watch, WATCH_HEAD | WATCH_REFS);\n\n\treturn SUCCESS;\n}\n\nstatic enum request\nlog_request(struct view *view, enum request request, struct line *line)\n{\n\tenum open_flags flags = view_is_displayed(view) ? OPEN_SPLIT : OPEN_DEFAULT;\n\n\tswitch (request) {\n\tcase REQ_REFRESH:\n\t\tload_refs(true);\n\t\trefresh_view(view);\n\t\treturn REQ_NONE;\n\n\tcase REQ_EDIT:\n\t\treturn diff_common_edit(view, request, line);\n\n\tcase REQ_ENTER:\n\t\tif (!display[1] || strcmp(display[1]->vid, view->ref))\n\t\t\topen_diff_view(view, flags);\n\t\treturn REQ_NONE;\n\n\tdefault:\n\t\treturn request;\n\t}\n}\n\nstatic bool\nlog_read(struct view *view, struct buffer *buf, bool force_stop)\n{\n\tstruct line *line = NULL;\n\tenum line_type type = LINE_DEFAULT;\n\tstruct log_state *state = view->private;\n\tsize_t len;\n\tchar *commit;\n\tchar *data;\n\n\tif (!buf)\n\t\treturn true;\n\n\tdata = buf->data;\n\tcommit = strstr(data, \"commit \");\n\tif (commit && get_graph_indent(data) == commit - data)\n\t\tstate->graph_indent = commit - data;\n\n\tlen = strlen(data);\n\tif (len >= state->graph_indent) {\n\t\ttype = get_line_type(data + state->graph_indent);\n\t\tlen -= state->graph_indent;\n\t}\n\n\tif (type == LINE_COMMIT)\n\t\tstate->commit_title_read = true;\n\telse if (state->commit_title_read && len < 1) {\n\t\tstate->commit_title_read = false;\n\t\tstate->after_commit_header = true;\n\t} else if ((state->after_commit_header && len < 1) || type == LINE_DIFF_START) {\n\t\tstate->after_commit_header = false;\n\t\tstate->reading_diff_stat = true;\n\t} else if (state->reading_diff_stat) {\n\t\tline = diff_common_add_diff_stat(view, data, state->graph_indent);\n\t\tif (line) {\n\t\t\tif (state->graph_indent)\n\t\t\t\tline->graph_indent = 1;\n\t\t\treturn true;\n\t\t}\n\t\tstate->reading_diff_stat = false;\n\t}\n\n\tif (!pager_common_read(view, data, type, &line))\n\t\treturn false;\n\tif (line && state->graph_indent)\n\t\tline->graph_indent = 1;\n\treturn true;\n}\n\nstatic struct view_ops log_ops = {\n\t\"line\",\n\targv_env.head,\n\tVIEW_ADD_PAGER_REFS | VIEW_OPEN_DIFF | VIEW_SEND_CHILD_ENTER | VIEW_LOG_LIKE | VIEW_REFRESH | VIEW_FLEX_WIDTH,\n\tsizeof(struct log_state),\n\tlog_open,\n\tlog_read,\n\tview_column_draw,\n\tlog_request,\n\tview_column_grep,\n\tlog_select,\n\tNULL,\n\tview_column_bit(LINE_NUMBER) | view_column_bit(TEXT),\n\tpager_get_column_data,\n};\n\nDEFINE_VIEW(log);\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/main.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/repo.h\"\n#include \"tig/options.h\"\n#include \"tig/parse.h\"\n#include \"tig/watch.h\"\n#include \"tig/graph.h\"\n#include \"tig/display.h\"\n#include \"tig/view.h\"\n#include \"tig/draw.h\"\n#include \"tig/git.h\"\n#include \"tig/status.h\"\n#include \"tig/stage.h\"\n#include \"tig/main.h\"\n#include \"tig/diff.h\"\n#include \"tig/search.h\"\n\n/*\n * Main view backend\n */\n\nDEFINE_ALLOCATOR(realloc_reflogs, char *, 32)\n\nstatic struct view_history main_view_history = { sizeof(unsigned long) };\n\nbool\nmain_status_exists(struct view *view, enum line_type type)\n{\n\tstruct main_state *state;\n\n\trefresh_view(view);\n\n\tstate = view->private;\n\tstate->goto_line_type = type;\n\tif (type == LINE_STAT_STAGED && state->add_changes_staged)\n\t\treturn true;\n\tif (type == LINE_STAT_UNSTAGED && state->add_changes_unstaged)\n\t\treturn true;\n\tif (type == LINE_STAT_UNTRACKED && state->add_changes_untracked)\n\t\treturn true;\n\n\treturn false;\n}\n\nstatic bool main_add_changes(struct view *view, struct main_state *state, const char *parent);\n\nstatic void\nmain_register_commit(struct view *view, struct commit *commit, const char *ids, bool is_boundary)\n{\n\tstruct main_state *state = view->private;\n\tstruct graph *graph = state->graph;\n\n\tstring_copy_rev(commit->id, ids);\n\n\t/* FIXME: lazily check index state here instead of in main_open. */\n\tif ((state->add_changes_untracked || state->add_changes_unstaged || state->add_changes_staged) && is_head_commit(commit->id)) {\n\t\tmain_add_changes(view, state, ids);\n\t\tstate->add_changes_untracked = state->add_changes_unstaged = state->add_changes_staged = false;\n\t}\n\n\tif (state->with_graph)\n\t\tgraph->add_commit(graph, &commit->graph, commit->id, ids, is_boundary);\n}\n\nstatic struct commit *\nmain_add_commit(struct view *view, enum line_type type, struct commit *template,\n\t\tconst char *title, bool custom)\n{\n\tstruct main_state *state = view->private;\n\tsize_t titlelen;\n\tstruct commit *commit;\n\tchar buf[SIZEOF_STR / 2];\n\tstruct line *line;\n\n\t/* FIXME: More graceful handling of titles; append \"...\" to\n\t * shortened titles, etc. */\n\tstring_expand(buf, sizeof(buf), title, strlen(title), 1);\n\ttitle = buf;\n\ttitlelen = strlen(title);\n\n\tline = add_line_alloc(view, &commit, type, titlelen, custom);\n\tif (!line)\n\t\treturn NULL;\n\n\t*commit = *template;\n\tstrcpy(commit->title, title);\n\tmemset(template, 0, sizeof(*template));\n\tstate->reflogmsg[0] = 0;\n\n\tview_column_info_update(view, line);\n\n\tif (view->env->goto_id[0] && !strncmp(view->env->goto_id, commit->id, SIZEOF_REV - 1)) {\n\t\tselect_view_line(view, line->lineno + 1);\n\t\tview->env->goto_id[0] = 0;\n\t} else if (opt_start_on_head && is_head_commit(commit->id)) {\n\t\tselect_view_line(view, line->lineno + 1);\n\t\topt_start_on_head = false;\n\t}\n\n\treturn commit;\n}\n\nstatic inline void\nmain_flush_commit(struct view *view, struct commit *commit)\n{\n\tif (*commit->id)\n\t\tmain_add_commit(view, LINE_MAIN_COMMIT, commit, \"\", false);\n}\n\nstatic bool\nmain_add_changes_commit(struct view *view, enum line_type type, const char *parent, const char *title)\n{\n\tchar ids[SIZEOF_STR] = NULL_ID \" \";\n\tstruct main_state *state = view->private;\n\tstruct graph *graph = state->graph;\n\tstruct commit commit = {{0}};\n\tstruct timeval now;\n\tstruct timezone tz = {0};\n\n\tif (!parent)\n\t\treturn true;\n\n\tif (*parent)\n\t\tstring_copy_rev(ids + STRING_SIZE(NULL_ID \" \"), parent);\n\telse\n\t\tids[STRING_SIZE(NULL_ID)] = 0;\n\n\tif (!time_now(&now, &tz)) {\n\t\tcommit.author_time.tz = commit.commit_time.tz = tz.tz_minuteswest * 60;\n\t\tcommit.author_time.sec = commit.commit_time.sec = now.tv_sec - commit.author_time.tz;\n\t}\n\n\tcommit.author = commit.committer = &unknown_ident;\n\tmain_register_commit(view, &commit, ids, false);\n\tif (state->with_graph && *parent)\n\t\tgraph->render_parents(graph, &commit.graph);\n\n\tif (!main_add_commit(view, type, &commit, title, true))\n\t\treturn false;\n\n\tif (state->goto_line_type == type)\n\t\tselect_view_line(view, view->lines - 1);\n\n\treturn true;\n}\n\nstatic bool\nmain_check_index(struct view *view, struct main_state *state)\n{\n\tstruct index_diff diff;\n\n\tif (!index_diff(&diff, opt_show_untracked, false))\n\t\treturn false;\n\n\tif (!diff.untracked) {\n\t\twatch_apply(&view->watch, WATCH_INDEX_UNTRACKED_NO);\n\t} else {\n\t\twatch_apply(&view->watch, WATCH_INDEX_UNTRACKED_YES);\n\t\tstate->add_changes_untracked = true;\n\t}\n\n\tif (!diff.unstaged) {\n\t\twatch_apply(&view->watch, WATCH_INDEX_UNSTAGED_NO);\n\t} else {\n\t\twatch_apply(&view->watch, WATCH_INDEX_UNSTAGED_YES);\n\t\tstate->add_changes_unstaged = true;\n\t}\n\n\tif (!diff.staged) {\n\t\twatch_apply(&view->watch, WATCH_INDEX_STAGED_NO);\n\t} else {\n\t\twatch_apply(&view->watch, WATCH_INDEX_STAGED_YES);\n\t\tstate->add_changes_staged = true;\n\t}\n\n\treturn true;\n}\n\nstatic bool\nmain_add_changes(struct view *view, struct main_state *state, const char *parent)\n{\n\tconst char *staged_parent = parent;\n\tconst char *unstaged_parent = NULL_ID;\n\tconst char *untracked_parent = NULL_ID;\n\n\tif (!state->add_changes_staged) {\n\t\tstaged_parent = NULL;\n\t\tunstaged_parent = parent;\n\t}\n\n\tif (!state->add_changes_unstaged) {\n\t\tunstaged_parent = NULL;\n\t\tif (!state->add_changes_staged)\n\t\t\tuntracked_parent = parent;\n\t}\n\n\tif (!state->add_changes_untracked) {\n\t\tuntracked_parent = NULL;\n\t}\n\n\treturn main_add_changes_commit(view, LINE_STAT_UNTRACKED, untracked_parent, \"Untracked changes\")\n\t    && main_add_changes_commit(view, LINE_STAT_UNSTAGED, unstaged_parent, \"Unstaged changes\")\n\t    && main_add_changes_commit(view, LINE_STAT_STAGED, staged_parent, \"Staged changes\");\n}\n\nstatic bool\nmain_check_argv(struct view *view, const char *argv[])\n{\n\tstruct main_state *state = view->private;\n\tbool with_reflog = false;\n\tint i;\n\n\tfor (i = 0; argv[i]; i++) {\n\t\tconst char *arg = argv[i];\n\t\tstruct rev_flags rev_flags = {0};\n\n\t\tif (!strcmp(arg, \"--graph\")) {\n\t\t\tstruct view_column *column = get_view_column(view, VIEW_COLUMN_COMMIT_TITLE);\n\n\t\t\tif (column) {\n\t\t\t\tcolumn->opt.commit_title.graph = true;\n\t\t\t\tif (opt_commit_order != COMMIT_ORDER_REVERSE)\n\t\t\t\t\tstate->with_graph = true;\n\t\t\t}\n\t\t\targv[i] = \"\";\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!strcmp(arg, \"--merge\")) {\n\t\t\targv_append(&opt_rev_args, \"--boundary\");\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!strcmp(arg, \"--first-parent\")) {\n\t\t\tstate->first_parent = true;\n\t\t\targv_append(&opt_diff_options, arg);\n\t\t}\n\n\t\tif (!argv_parse_rev_flag(arg, &rev_flags))\n\t\t\tcontinue;\n\n\t\tif (rev_flags.with_reflog)\n\t\t\twith_reflog = true;\n\t\tif (!rev_flags.with_graph)\n\t\t\tstate->with_graph = false;\n\t\targ += rev_flags.search_offset;\n\t\t/* Copy the pattern to search buffer only when starting\n\t\t * from the main view. */\n\t\tif (*arg && !*view->ref && !view->prev)\n\t\t\tstring_ncopy(view->env->search, arg, strlen(arg));\n\t}\n\n\treturn with_reflog;\n}\n\nstatic enum graph_display\nmain_with_graph(struct view *view, struct view_column *column, enum open_flags flags)\n{\n\treturn column && opt_commit_order != COMMIT_ORDER_REVERSE && !open_in_pager_mode(flags) && !opt_log_follow\n\t       ? column->opt.commit_title.graph : GRAPH_DISPLAY_NO;\n}\n\nstatic enum status_code\nmain_open(struct view *view, enum open_flags flags)\n{\n\tstruct view_column *commit_title_column = get_view_column(view, VIEW_COLUMN_COMMIT_TITLE);\n\tenum graph_display graph_display = main_with_graph(view, commit_title_column, flags);\n\tconst char *pretty_custom_argv[] = {\n\t\tGIT_MAIN_LOG(encoding_arg, commit_order_arg_with_graph(graph_display),\n\t\t\t\"%(mainargs)\", \"%(cmdlineargs)\", \"%(revargs)\", \"%(fileargs)\",\n\t\t\tshow_notes_arg(), log_custom_pretty_arg())\n\t};\n\tconst char *pretty_raw_argv[] = {\n\t\tGIT_MAIN_LOG_RAW(encoding_arg, commit_order_arg_with_graph(graph_display),\n\t\t\t\"%(mainargs)\", \"%(cmdlineargs)\", \"%(revargs)\", \"%(fileargs)\",\n\t\t\tshow_notes_arg())\n\t};\n\tstruct main_state *state = view->private;\n\tconst char **main_argv = pretty_custom_argv;\n\tenum watch_trigger changes_triggers = WATCH_NONE;\n\n\tif (opt_show_changes && (repo.is_inside_work_tree || *repo.worktree))\n\t\tchanges_triggers |= WATCH_INDEX;\n\n\tstate->with_graph = graph_display != GRAPH_DISPLAY_NO;\n\n\tif (opt_rev_args && main_check_argv(view, opt_rev_args))\n\t\tmain_argv = pretty_raw_argv;\n\n\tif (state->with_graph) {\n\t\tstate->graph = init_graph(commit_title_column->opt.commit_title.graph);\n\t\tif (!state->graph)\n\t\t\treturn ERROR_OUT_OF_MEMORY;\n\t}\n\n\tif (open_in_pager_mode(flags)) {\n\t\tchanges_triggers = WATCH_NONE;\n\t}\n\n\t{\n\t\t/* This calls reset_view() so must be before adding changes commits. */\n\t\tenum status_code code = begin_update(view, NULL, main_argv, flags);\n\n\t\tif (code != SUCCESS)\n\t\t\treturn code;\n\t}\n\n\t/* Register watch before changes commits are added to record the\n\t * start. */\n\tif (view_can_refresh(view))\n\t\twatch_register(&view->watch, WATCH_HEAD | WATCH_REFS | changes_triggers);\n\n\tif (changes_triggers)\n\t\tmain_check_index(view, state);\n\n\treturn SUCCESS;\n}\n\nvoid\nmain_done(struct view *view)\n{\n\tstruct main_state *state = view->private;\n\tint i;\n\n\tfor (i = 0; i < view->lines; i++) {\n\t\tstruct commit *commit = view->line[i].data;\n\n\t\tfree(commit->graph.symbols);\n\t}\n\n\tif (state->graph)\n\t\tstate->graph->done(state->graph);\n\n\tfor (i = 0; i < state->reflogs; i++)\n\t\tfree(state->reflog[i]);\n\tfree(state->reflog);\n}\n\n#define main_check_commit_refs(line)\t!((line)->no_commit_refs)\n#define main_mark_no_commit_refs(line)\t(((struct line *) (line))->no_commit_refs = 1)\n\nstatic inline const struct ref *\nmain_get_commit_refs(const struct line *line, struct commit *commit)\n{\n\tconst struct ref *refs = NULL;\n\n\tif (main_check_commit_refs(line) && !(refs = get_ref_list(commit->id)))\n\t\tmain_mark_no_commit_refs(line);\n\n\treturn refs;\n}\n\nbool\nmain_get_column_data(struct view *view, const struct line *line, struct view_column_data *column_data)\n{\n\tstruct main_state *state = view->private;\n\tstruct commit *commit = line->data;\n\tstruct view_column *column = get_view_column(view, VIEW_COLUMN_DATE);\n\tbool use_author_date = column && column->opt.date.use_author;\n\n\tcolumn_data->author = commit->author;\n\tcolumn_data->committer = commit->committer;\n\tcolumn_data->date = use_author_date\n\t\t\t\t? &commit->author_time\n\t\t\t\t: &commit->commit_time;\n\tcolumn_data->id = commit->id;\n\n\tcolumn_data->commit_title = commit->title;\n\tif (state->with_graph) {\n\t\tcolumn_data->graph = state->graph;\n\t\tcolumn_data->graph_canvas = &commit->graph;\n\t}\n\n\tcolumn_data->refs = main_get_commit_refs(line, commit);\n\n\treturn true;\n}\n\nstatic bool\nmain_add_reflog(struct view *view, struct main_state *state, char *reflog)\n{\n\tchar *end = strchr(reflog, '}');\n\tint id_width;\n\n\tif (!end)\n\t\treturn false;\n\t*++end = 0;\n\n\tif (!realloc_reflogs(&state->reflog, state->reflogs, 1)\n\t    || !(reflog = strdup(reflog)))\n\t\treturn false;\n\n\tstate->reflog[state->reflogs++] = reflog;\n\tid_width = strlen(reflog);\n\tif (state->reflog_width < id_width) {\n\t\tstruct view_column *column = get_view_column(view, VIEW_COLUMN_ID);\n\n\t\tstate->reflog_width = id_width;\n\t\tif (column && column->opt.id.display)\n\t\t\tview->force_redraw = true;\n\t}\n\n\treturn true;\n}\n\n/* Reads git log --pretty=raw output and parses it into the commit struct. */\nbool\nmain_read(struct view *view, struct buffer *buf, bool force_stop)\n{\n\tstruct main_state *state = view->private;\n\tstruct graph *graph = state->graph;\n\tenum line_type type;\n\tstruct commit *commit = &state->current;\n\tchar *line;\n\n\tif (!buf) {\n\t\tmain_flush_commit(view, commit);\n\n\t\tif (!force_stop && failed_to_load_initial_view(view))\n\t\t\tdie(\"No revisions match the given arguments.\");\n\t\tif (view->lines > 0) {\n\t\t\tstruct commit *last = view->line[view->lines - 1].data;\n\n\t\t\tview->line[view->lines - 1].dirty = 1;\n\t\t\tif (!last->author) {\n\t\t\t\tview->lines--;\n\t\t\t\tfree(last);\n\t\t\t}\n\t\t}\n\n\t\tif (state->graph)\n\t\t\tstate->graph->done_rendering(graph);\n\t\treturn true;\n\t}\n\n\tline = buf->data;\n\n\t/* Skip remaining lines of notes until <ETX>. */\n\tif (state->has_notes) {\n\t\tif (!strcmp(line, \"\\x03\"))\n\t\t\tstate->has_notes = false;\n\t\treturn true;\n\t}\n\n\ttype = get_line_type(line);\n\tif (type == LINE_COMMIT) {\n\t\tbool is_boundary;\n\t\tchar *author;\n\n\t\tstate->in_header = true;\n\t\tline += STRING_SIZE(\"commit \");\n\t\tis_boundary = *line == '-';\n\t\twhile (*line && !isalnum((unsigned char)*line))\n\t\t\tline++;\n\n\t\tmain_flush_commit(view, commit);\n\n\t\tauthor = io_memchr(buf, line, 0);\n\n\t\tif (state->first_parent) {\n\t\t\tchar *parent = strchr(line, ' ');\n\t\t\tchar *parent_end = parent ? strchr(parent + 1, ' ') : NULL;\n\n\t\t\tif (parent_end)\n\t\t\t\t*parent_end = 0;\n\t\t}\n\n\t\tmain_register_commit(view, &state->current, line, is_boundary);\n\n\t\tif (author) {\n\t\t\tchar *committer = io_memchr(buf, author, 0);\n\t\t\tchar *title = io_memchr(buf, committer, 0);\n\n\t\t\tparse_author_line(author, &commit->author, &commit->author_time);\n\t\t\tif (committer)\n\t\t\t\tparse_author_line(committer, &commit->committer, &commit->commit_time);\n\t\t\tif (state->with_graph)\n\t\t\t\tgraph->render_parents(graph, &commit->graph);\n\t\t\tif (title) {\n\t\t\t\tchar *notes = io_memchr(buf, title, 0);\n\n\t\t\t\tstate->has_notes = (notes && *notes != '\\x03');\n\t\t\t\tmain_add_commit(view, state->has_notes ? LINE_MAIN_ANNOTATED : LINE_MAIN_COMMIT,\n\t\t\t\t\t\tcommit, title, false);\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tif (!*commit->id)\n\t\treturn true;\n\n\t/* Empty line separates the commit header from the log itself. */\n\tif (*line == '\\0')\n\t\tstate->in_header = false;\n\n\tswitch (type) {\n\tcase LINE_PP_REFLOG:\n\t\tif (!main_add_reflog(view, state, line + STRING_SIZE(\"Reflog: \")))\n\t\t\treturn false;\n\t\tbreak;\n\n\tcase LINE_PP_REFLOGMSG:\n\t\tline += STRING_SIZE(\"Reflog message: \");\n\t\tstring_ncopy(state->reflogmsg, line, strlen(line));\n\t\tbreak;\n\n\tcase LINE_PARENT:\n\t\tif (state->with_graph)\n\t\t\tgraph->add_parent(graph, line + STRING_SIZE(\"parent \"));\n\t\tbreak;\n\n\tcase LINE_AUTHOR:\n\t\tparse_author_line(line + STRING_SIZE(\"author \"),\n\t\t\t\t  &commit->author, &commit->author_time);\n\t\tif (state->with_graph)\n\t\t\tgraph->render_parents(graph, &commit->graph);\n\t\tbreak;\n\n\tcase LINE_COMMITTER:\n\t\tparse_author_line(line + STRING_SIZE(\"committer \"),\n\t\t\t\t  &commit->committer, &commit->commit_time);\n\t\tbreak;\n\n\tdefault:\n\t\t/* Fill in the commit title if it has not already been set. */\n\t\tif (*commit->title)\n\t\t\tbreak;\n\n\t\t/* Skip lines in the commit header. */\n\t\tif (state->in_header)\n\t\t\tbreak;\n\n\t\t/* Require titles to start with a non-space character at the\n\t\t * offset used by git log. */\n\t\tif (strncmp(line, \"    \", 4))\n\t\t\tbreak;\n\t\tline += 4;\n\t\t/* Well, if the title starts with a whitespace character,\n\t\t * try to be forgiving.  Otherwise we end up with no title. */\n\t\twhile (isspace((unsigned char)*line))\n\t\t\tline++;\n\t\tif (*line == '\\0')\n\t\t\tbreak;\n\t\tif (*state->reflogmsg)\n\t\t\tline = state->reflogmsg;\n\t\tmain_add_commit(view, LINE_MAIN_COMMIT, commit, line, false);\n\t}\n\n\treturn true;\n}\n\nenum request\nmain_request(struct view *view, enum request request, struct line *line)\n{\n\tenum open_flags flags = (request != REQ_VIEW_DIFF &&\n\t\t\t\t (view_is_displayed(view) ||\n\t\t\t\t  ((line->type == LINE_MAIN_COMMIT ||\n\t\t\t\t    line->type == LINE_MAIN_ANNOTATED) &&\n\t\t\t\t   !view_is_displayed(&diff_view)) ||\n\t\t\t\t  line->type == LINE_STAT_UNSTAGED ||\n\t\t\t\t  line->type == LINE_STAT_STAGED ||\n\t\t\t\t  line->type == LINE_STAT_UNTRACKED))\n\t\t\t\t? OPEN_SPLIT : OPEN_DEFAULT;\n\tstruct commit *commit = line->data;\n\n\tswitch (request) {\n\tcase REQ_VIEW_DIFF:\n\tcase REQ_ENTER:\n\t\tif ((view_is_displayed(view) && display[0] != view) ||\n\t\t    (!view_is_displayed(view) && flags == OPEN_SPLIT)) {\n\t\t\tmaximize_view(view, true);\n\t\t\tif (view->parent)\n\t\t\t\tview->parent = NULL;\n\t\t}\n\n\t\tif (line->type == LINE_STAT_UNSTAGED\n\t\t    || line->type == LINE_STAT_STAGED)\n\t\t\topen_stage_view(view, NULL, line->type, flags);\n\t\telse if (line->type == LINE_STAT_UNTRACKED)\n\t\t\topen_status_view(view, true, flags);\n\t\telse\n\t\t\topen_diff_view(view, flags);\n\t\tbreak;\n\n\tcase REQ_VIEW_STAGE:\n\t\tif (line->type == LINE_STAT_UNSTAGED\n\t\t    || line->type == LINE_STAT_STAGED)\n\t\t\topen_stage_view(view, NULL, line->type, OPEN_DEFAULT);\n\t\telse\n\t\t\treturn request;\n\t\tbreak;\n\n\tcase REQ_VIEW_BLAME:\n\t\tif (string_rev_is_null(commit->id))\n\t\t\tview->env->ref[0] = 0;\n\t\telse\n\t\t\tstring_copy_rev(view->env->ref, commit->id);\n\t\treturn request;\n\n\tcase REQ_REFRESH:\n\t\tload_refs(true);\n\t\trefresh_view(view);\n\t\tbreak;\n\n\tcase REQ_PARENT:\n\t\tif (push_view_history_state(&main_view_history, &view->pos, &view->pos.lineno)) {\n\t\t\tgoto_id(view, \"%(commit)^\", true, false);\n\t\t} else {\n\t\t\treport(\"Failed to save current view state\");\n\t\t}\n\t\tbreak;\n\n\tcase REQ_BACK:\n\t\tif (pop_view_history_state(&main_view_history, &view->pos, NULL)) {\n\t\t\tredraw_view(view);\n\t\t} else {\n\t\t\treport(\"Already at start of history\");\n\t\t}\n\t\tbreak;\n\n\tcase REQ_MOVE_NEXT_MERGE:\n\tcase REQ_MOVE_PREV_MERGE:\n\t\tfind_merge(view, request);\n\t\tbreak;\n\n\tdefault:\n\t\treturn request;\n\t}\n\n\treturn REQ_NONE;\n}\n\nvoid\nmain_select(struct view *view, struct line *line)\n{\n\tstruct commit *commit = line->data;\n\n\tif (line->type == LINE_STAT_STAGED || line->type == LINE_STAT_UNSTAGED || line->type == LINE_STAT_UNTRACKED) {\n\t\tstring_ncopy(view->ref, commit->title, strlen(commit->title));\n\t\tstatus_stage_info(view->env->status, line->type, NULL);\n\t} else {\n\t\tstruct main_state *state = view->private;\n\t\tconst struct ref *ref = main_get_commit_refs(line, commit);\n\n\t\tif (state->reflogs) {\n\t\t\tassert(state->reflogs >= line->lineno);\n\t\t\tstring_ncopy(view->ref, state->reflog[line->lineno - 1],\n\t\t\t\t     strlen(state->reflog[line->lineno - 1]));\n\t\t} else {\n\t\t\tstring_copy_rev(view->ref, commit->id);\n\t\t}\n\t\tif (ref)\n\t\t\tref_update_env(view->env, ref, true);\n\t\telse\n\t\t\tview->env->tag[0] = view->env->remote[0] = view->env->branch[0] = view->env->refname[0] = 0;\n\t\tview->env->status[0] = 0;\n\t}\n\tstring_copy_rev(view->env->commit, commit->id);\n\tview->env->blob[0] = 0;\n}\n\nstatic struct view_ops main_ops = {\n\t\"commit\",\n\targv_env.head,\n\tVIEW_SEND_CHILD_ENTER | VIEW_FILE_FILTER | VIEW_REV_FILTER | VIEW_LOG_LIKE | VIEW_REFRESH,\n\tsizeof(struct main_state),\n\tmain_open,\n\tmain_read,\n\tview_column_draw,\n\tmain_request,\n\tview_column_grep,\n\tmain_select,\n\tmain_done,\n\tview_column_bit(AUTHOR) | view_column_bit(COMMITTER) | view_column_bit(COMMIT_TITLE) |\n\t\tview_column_bit(DATE) |\tview_column_bit(ID) |\n\t\tview_column_bit(LINE_NUMBER),\n\tmain_get_column_data,\n};\n\nDEFINE_VIEW(main);\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/map.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/tig.h\"\n#include \"tig/map.h\"\n\n#include \"compat/hashtab.h\"\n\n\nstring_map_hash_fn string_map_hash_helper = htab_hash_string;\n\nstatic int\nstring_map_equal(const void *element, const void *map_)\n{\n\tstruct string_map *map = (struct string_map *) map_;\n\tconst char *key = map->key_fn(element);\n\n\treturn !strcmp(key, map->key);\n}\n\nvoid *\nstring_map_get(struct string_map *map, const char *key)\n{\n\tif (map->htab) {\n\t\tmap->key = key;\n\t\treturn htab_find_with_hash(map->htab, map, htab_hash_string(key));\n\t}\n\n\treturn NULL;\n}\n\nvoid **\nstring_map_get_at(struct string_map *map, const char *key)\n{\n\tif (map->htab) {\n\t\tmap->key = key;\n\t\treturn htab_find_slot_with_hash(map->htab, map, htab_hash_string(key), NO_INSERT);\n\t}\n\n\treturn NULL;\n}\n\nvoid **\nstring_map_put_to(struct string_map *map, const char *key)\n{\n\tif (!map->htab) {\n\t\tmap->htab = htab_create_alloc(map->init_size, map->hash_fn, string_map_equal, NULL, calloc, free);\n\t\tif (!map->htab)\n\t\t\treturn NULL;\n\t}\n\n\tmap->key = key;\n\treturn htab_find_slot_with_hash(map->htab, map, htab_hash_string(key), INSERT);\n}\n\nvoid *\nstring_map_put(struct string_map *map, const char *key, void *value)\n{\n\tvoid **slot = string_map_put_to(map, key);\n\n\tif (!slot)\n\t\treturn NULL;\n\n\t*slot = value;\n\treturn value;\n}\n\nvoid *\nstring_map_remove(struct string_map *map, const char *key)\n{\n\tvoid *value = NULL;\n\tvoid **slot = string_map_get_at(map, key);\n\n\tif (slot) {\n\t\tvalue = *slot;\n\t\thtab_clear_slot(map->htab, slot);\n\t}\n\n\treturn value;\n}\n\nvoid\nstring_map_clear(struct string_map *map)\n{\n\tif (map->htab)\n\t\thtab_empty(map->htab);\n}\n\nstruct string_map_iterator {\n\tstring_map_iterator_fn fn;\n\tvoid *data;\n};\n\nstatic int\nstring_map_iterate(void **slot, void *data)\n{\n\tstruct string_map_iterator *iterator = data;\n\n\treturn iterator->fn(iterator->data, *slot);\n}\n\nvoid\nstring_map_foreach(struct string_map *map, string_map_iterator_fn fn, void *data)\n{\n\tif (map->htab) {\n\t\tstruct string_map_iterator iterator = { fn, data };\n\n\t\thtab_traverse_noresize(map->htab, string_map_iterate, &iterator);\n\t}\n}\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/options.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/tig.h\"\n#include \"tig/types.h\"\n#include \"tig/argv.h\"\n#include \"tig/io.h\"\n#include \"tig/repo.h\"\n#include \"tig/refdb.h\"\n#include \"tig/options.h\"\n#include \"tig/request.h\"\n#include \"tig/line.h\"\n#include \"tig/keys.h\"\n#include \"tig/view.h\"\n\n/*\n * Option variables.\n */\n\n#define DEFINE_OPTION_VARIABLES(name, type, flags) type opt_##name;\nOPTION_INFO(DEFINE_OPTION_VARIABLES)\n\nstatic struct option_info option_info[] = {\n#define DEFINE_OPTION_INFO(name, type, flags) { #name, STRING_SIZE(#name), #type, &opt_##name },\n\tOPTION_INFO(DEFINE_OPTION_INFO)\n};\n\nstruct option_info *\nfind_option_info(struct option_info *option, size_t options, const char *prefix, const char *name)\n{\n\tsize_t namelen = strlen(name);\n\tchar prefixed[SIZEOF_STR];\n\tint i;\n\n\tif (*prefix && namelen == strlen(prefix) &&\n\t    !string_enum_compare(prefix, name, namelen)) {\n\t\tname = \"display\";\n\t\tnamelen = strlen(name);\n\t}\n\n\tfor (i = 0; i < options; i++) {\n\t\tif (!strcmp(option[i].type, \"view_settings\") &&\n\t\t    enum_equals_prefix(option[i], name, namelen))\n\t\t\treturn &option[i];\n\n\t\tif (enum_equals(option[i], name, namelen))\n\t\t\treturn &option[i];\n\n\t\tif (enum_name_prefixed(prefixed, sizeof(prefixed), prefix, option[i].name) &&\n\t\t    namelen == strlen(prefixed) &&\n\t\t    !string_enum_compare(prefixed, name, namelen))\n\t\t\treturn &option[i];\n\t}\n\n\treturn NULL;\n}\n\nstatic struct option_info *\nfind_option_info_by_value(void *value)\n{\n\tint i;\n\n\tfor (i = 0; i < ARRAY_SIZE(option_info); i++)\n\t\tif (option_info[i].value == value)\n\t\t\treturn &option_info[i];\n\n\treturn NULL;\n}\n\nstatic void\nmark_option_seen(void *value)\n{\n\tstruct option_info *option = find_option_info_by_value(value);\n\n\tif (option)\n\t\toption->seen = true;\n}\n\nstruct option_info *\nfind_column_option_info(enum view_column_type type, union view_column_options *opts,\n\t\t\tconst char *option, struct option_info *column_info,\n\t\t\tconst char **column_name)\n{\n#define DEFINE_COLUMN_OPTION_INFO(name, type, flags) \\\n\t{ #name, STRING_SIZE(#name), #type, &opt->name, flags },\n\n#define DEFINE_COLUMN_OPTION_INFO_CHECK(name, id, options) \\\n\tif (type == VIEW_COLUMN_##id) { \\\n\t\tstruct name##_options *opt = &opts->name; \\\n\t\tstruct option_info info[] = { \\\n\t\t\toptions(DEFINE_COLUMN_OPTION_INFO) \\\n\t\t}; \\\n\t\tstruct option_info *match; \\\n\t\tmatch = find_option_info(info, ARRAY_SIZE(info), #name, option); \\\n\t\tif (match) { \\\n\t\t\t*column_info = *match; \\\n\t\t\t*column_name = #name; \\\n\t\t\treturn column_info; \\\n\t\t} \\\n\t}\n\n\tCOLUMN_OPTIONS(DEFINE_COLUMN_OPTION_INFO_CHECK);\n\n\t*column_name = NULL;\n\treturn NULL;\n}\n\n/*\n * State variables.\n */\n\niconv_t opt_iconv_out\t\t= ICONV_NONE;\nchar opt_editor[SIZEOF_STR]\t= \"\";\nconst char **opt_cmdline_args\t= NULL;\nbool opt_log_follow\t\t= false;\n\n/*\n * Mapping between options and command argument mapping.\n */\n\nconst char *\ndiff_context_arg()\n{\n\tstatic char opt_diff_context_arg[9]\t= \"\";\n\n\tif (opt_diff_context < 0 ||\n\t    !string_format(opt_diff_context_arg, \"-U%u\", opt_diff_context))\n\t\treturn \"\";\n\n\treturn opt_diff_context_arg;\n}\n\nconst char *\ndiff_prefix_arg()\n{\n\treturn opt_diff_noprefix ? \"--no-prefix\" : \"\"; /* --default-prefix did not exist before Git 2.41. */\n}\n\nconst char *\nword_diff_arg()\n{\n\treturn opt_word_diff ? \"--word-diff=plain\" : \"--word-diff=none\";\n}\n\nconst char *\nuse_mailmap_arg()\n{\n\treturn opt_mailmap ? \"--use-mailmap\" : \"--no-use-mailmap\";\n}\n\nconst char *\nlog_custom_pretty_arg(void)\n{\n\treturn opt_show_notes\n\t\t? opt_mailmap\n\t\t\t? \"--pretty=format:commit %m %H %P%x00%aN <%aE> %ad%x00%cN <%cE> %cd%x00%s%x00%N%x03\"\n\t\t\t: \"--pretty=format:commit %m %H %P%x00%an <%ae> %ad%x00%cn <%ce> %cd%x00%s%x00%N%x03\"\n\t\t: opt_mailmap\n\t\t\t? \"--pretty=format:commit %m %H %P%x00%aN <%aE> %ad%x00%cN <%cE> %cd%x00%s\"\n\t\t\t: \"--pretty=format:commit %m %H %P%x00%an <%ae> %ad%x00%cn <%ce> %cd%x00%s\";\n}\n\n#define ENUM_ARG(enum_name, arg_string) ENUM_MAP_ENTRY(arg_string, enum_name)\n\nstatic const struct enum_map_entry ignore_space_arg_map[] = {\n\tENUM_ARG(IGNORE_SPACE_NO,\t\"\"),\n\tENUM_ARG(IGNORE_SPACE_ALL,\t\"--ignore-all-space\"),\n\tENUM_ARG(IGNORE_SPACE_SOME,\t\"--ignore-space-change\"),\n\tENUM_ARG(IGNORE_SPACE_AT_EOL,\t\"--ignore-space-at-eol\"),\n};\n\nconst char *\nignore_space_arg()\n{\n\treturn ignore_space_arg_map[opt_ignore_space].name;\n}\n\nstatic const struct enum_map_entry commit_order_arg_map[] = {\n\tENUM_ARG(COMMIT_ORDER_AUTO,\t\t\"\"),\n\tENUM_ARG(COMMIT_ORDER_DEFAULT,\t\t\"\"),\n\tENUM_ARG(COMMIT_ORDER_TOPO,\t\t\"--topo-order\"),\n\tENUM_ARG(COMMIT_ORDER_DATE,\t\t\"--date-order\"),\n\tENUM_ARG(COMMIT_ORDER_AUTHOR_DATE,\t\"--author-date-order\"),\n\tENUM_ARG(COMMIT_ORDER_REVERSE,\t\t\"--reverse\"),\n};\n\nconst char *\ncommit_order_arg()\n{\n\treturn commit_order_arg_map[opt_commit_order].name;\n}\n\nconst char *\ncommit_order_arg_with_graph(enum graph_display graph_display)\n{\n\tenum commit_order commit_order = opt_commit_order;\n\n\tif (commit_order == COMMIT_ORDER_AUTO &&\n\t    graph_display != GRAPH_DISPLAY_NO)\n\t\tcommit_order = COMMIT_ORDER_TOPO;\n\n\treturn commit_order_arg_map[commit_order].name;\n}\n\n/* Use --show-notes to support Git >= 1.7.6 */\n#define NOTES_ARG\t\"--show-notes\"\n#define NOTES_EQ_ARG\tNOTES_ARG \"=\"\n\nstatic char opt_notes_arg[SIZEOF_STR] = NOTES_ARG;\n\nconst char *\nshow_notes_arg()\n{\n\tif (opt_show_notes)\n\t\treturn opt_notes_arg;\n\t/* Notes are disabled by default when passing --pretty args. */\n\treturn \"\";\n}\n\nvoid\nupdate_options_from_argv(const char *argv[])\n{\n\tint next, flags_pos;\n\n\tfor (next = flags_pos = 0; argv[next]; next++) {\n\t\tconst char *flag = argv[next];\n\t\tint value = -1;\n\n\t\tif (map_enum(&value, commit_order_arg_map, flag)) {\n\t\t\topt_commit_order = value;\n\t\t\tmark_option_seen(&opt_commit_order);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (map_enum(&value, ignore_space_arg_map, flag)) {\n\t\t\topt_ignore_space = value;\n\t\t\tmark_option_seen(&opt_ignore_space);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!strcmp(flag, \"--no-notes\")) {\n\t\t\topt_show_notes = false;\n\t\t\tmark_option_seen(&opt_show_notes);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!prefixcmp(flag, \"--show-notes\") ||\n\t\t    !prefixcmp(flag, \"--notes\")) {\n\t\t\topt_show_notes = true;\n\t\t\tstring_ncopy(opt_notes_arg, flag, strlen(flag));\n\t\t\tmark_option_seen(&opt_show_notes);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!prefixcmp(flag, \"-U\")\n\t\t    && parse_int(&value, flag + 2, 0, 999999) == SUCCESS) {\n\t\t\topt_diff_context = value;\n\t\t\tmark_option_seen(&opt_diff_context);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!strcmp(flag, \"--word-diff=none\")) {\n\t\t\topt_word_diff = false;\n\t\t\tmark_option_seen(&opt_word_diff);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!strcmp(flag, \"--word-diff\") ||\n\t\t    !strcmp(flag, \"--word-diff=plain\")) {\n\t\t\topt_word_diff = true;\n\t\t\tmark_option_seen(&opt_word_diff);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!prefixcmp(flag, \"--word-diff-regex=\")) {\n\t\t\topt_word_diff = true;\n\t\t\tmark_option_seen(&opt_word_diff);\n\t\t\t/* Keep the flag in argv. */\n\t\t}\n\n\t\tif (!strcmp(flag, \"--no-prefix\")) {\n\t\t\topt_diff_noprefix = true;\n\t\t\tmark_option_seen(&opt_diff_noprefix);\n\t\t\t/* Keep the flag in argv. */\n\t\t}\n\n\t\tif (!strcmp(flag, \"--default-prefix\")) {\n\t\t\topt_diff_noprefix = false;\n\t\t\tmark_option_seen(&opt_diff_noprefix);\n\t\t\t/* Keep the flag in argv. */\n\t\t}\n\n\t\targv[flags_pos++] = flag;\n\t}\n\n\targv[flags_pos] = NULL;\n}\n\n/*\n * User config file handling.\n */\n\nstatic const struct enum_map_entry color_map[] = {\n#define COLOR_MAP(name) ENUM_MAP_ENTRY(#name, COLOR_##name)\n\tCOLOR_MAP(DEFAULT),\n\tCOLOR_MAP(BLACK),\n\tCOLOR_MAP(BLUE),\n\tCOLOR_MAP(CYAN),\n\tCOLOR_MAP(GREEN),\n\tCOLOR_MAP(MAGENTA),\n\tCOLOR_MAP(RED),\n\tCOLOR_MAP(WHITE),\n\tCOLOR_MAP(YELLOW),\n};\n\nstatic const struct enum_map_entry attr_map[] = {\n#define ATTR_MAP(name) ENUM_MAP_ENTRY(#name, A_##name)\n\tATTR_MAP(NORMAL),\n\tATTR_MAP(BLINK),\n\tATTR_MAP(BOLD),\n\tATTR_MAP(DIM),\n\tATTR_MAP(REVERSE),\n\tATTR_MAP(STANDOUT),\n\tATTR_MAP(UNDERLINE),\n};\n\n#define set_attribute(attr, name)\tmap_enum(attr, attr_map, name)\n\nenum status_code\nparse_step(double *opt, const char *arg)\n{\n\tint value = atoi(arg);\n\n\tif (!value && !isdigit((unsigned char)*arg))\n\t\treturn error(\"Invalid double or percentage\");\n\n\t*opt = value;\n\tif (!strchr(arg, '%'))\n\t\treturn SUCCESS;\n\n\t/* \"Shift down\" so 100% and 1 does not conflict. */\n\t*opt /= 100;\n\tif (*opt >= 1.0) {\n\t\t*opt = 0.99;\n\t\treturn error(\"Percentage is larger than 100%%\");\n\t}\n\tif (*opt < 0.0) {\n\t\t*opt = 1;\n\t\treturn error(\"Percentage is less than 0%%\");\n\t}\n\treturn SUCCESS;\n}\n\nenum status_code\nparse_int(int *opt, const char *arg, int min, int max)\n{\n\tint value = atoi(arg);\n\n\tif (min <= value && value <= max) {\n\t\t*opt = value;\n\t\treturn SUCCESS;\n\t}\n\n\treturn error(\"Value must be between %d and %d\", min, max);\n}\n\nstatic bool\nset_color(int *color, const char *name)\n{\n\tif (map_enum(color, color_map, name))\n\t\treturn true;\n\t/* Git expects a plain int w/o prefix, however, color<int> is\n\t * the preferred Tig color notation.  */\n\tif (!prefixcmp(name, \"color\"))\n\t\tname += 5;\n\treturn string_isnumber(name) &&\n\t       parse_int(color, name, 0, 255) == SUCCESS;\n}\n\n#define is_quoted(c)\t((c) == '\"' || (c) == '\\'')\n\nstatic enum status_code\nparse_color_name(const char *color, struct line_rule *rule, const char **prefix_ptr)\n{\n\tconst char *prefixend = is_quoted(*color) ? NULL : strchr(color, '.');\n\n\tif (prefixend) {\n\t\tstruct keymap *keymap = get_keymap(color, prefixend - color);\n\n\t\tif (!keymap)\n\t\t\treturn error(\"Unknown key map: %.*s\", (int) (prefixend - color), color);\n\t\tif (prefix_ptr)\n\t\t\t*prefix_ptr = keymap->name;\n\t\tcolor = prefixend + 1;\n\t}\n\n\tmemset(rule, 0, sizeof(*rule));\n\tif (is_quoted(*color)) {\n\t\t/* Interpret strings of the form \"/.../\" as regular expressions. */\n\t\tif (strlen(color) >= 4 && color[1] == '/' && color[strlen(color) - 2] == '/') {\n\t\t\tint regex_err;\n\n\t\t\t/* rule->line and rule->regex are allocated here rather\n\t\t\t * than in add_line_rule() to allow proper error reporting.\n\t\t\t * Though only rule->regex will be used for matching regular\n\t\t\t * expressions, rule->line and rule->linelen are still filled\n\t\t\t * to look up exiting rules when defining view-specific\n\t\t\t * colors. */\n\t\t\trule->linelen = strlen(color) - 4;\n\t\t\trule->line = strndup(color + 2, rule->linelen);\n\t\t\tif (!rule->line)\n\t\t\t\treturn ERROR_OUT_OF_MEMORY;\n\n\t\t\trule->regex = calloc(1, sizeof(*rule->regex));\n\t\t\tif (!rule->regex) {\n\t\t\t\tfree((void *) rule->line);\n\t\t\t\treturn ERROR_OUT_OF_MEMORY;\n\t\t\t}\n\n\t\t\tregex_err = regcomp(rule->regex, rule->line, REG_EXTENDED);\n\n\t\t\tif (regex_err != 0) {\n\t\t\t\tchar buf[SIZEOF_STR];\n\t\t\t\tregerror(regex_err, rule->regex, buf, sizeof(buf));\n\t\t\t\tfree((void *) rule->line);\n\t\t\t\tfree(rule->regex);\n\t\t\t\treturn error(\"Invalid color mapping: %s\", buf);\n\t\t\t}\n\t\t} else {\n\t\t\trule->linelen = strlen(color) - 2;\n\t\t\trule->line = strndup(color + 1, rule->linelen);\n\t\t\tif (!rule->line)\n\t\t\t\treturn ERROR_OUT_OF_MEMORY;\n\t\t}\n\t} else {\n\t\t/* Built-in area names are preloaded on first call to\n\t\t * find_line_rule(), so rule->name is only used to look\n\t\t * up an existing rule and does not need to persist. */\n\t\trule->name = color;\n\t\trule->namelen = strlen(color);\n\t}\n\n\treturn SUCCESS;\n}\n\nstatic int\nfind_remapped(const char *remapped[][2], size_t remapped_size, const char *arg)\n{\n\tsize_t arglen = strlen(arg);\n\tint i;\n\n\tfor (i = 0; i < remapped_size; i++) {\n\t\tconst char *name = remapped[i][0];\n\t\tsize_t namelen = strlen(name);\n\n\t\tif (arglen == namelen &&\n\t\t    !string_enum_compare(arg, name, namelen))\n\t\t\treturn i;\n\t}\n\n\treturn -1;\n}\n\n/* Wants: object fgcolor bgcolor [attribute] */\nstatic enum status_code\noption_color_command(int argc, const char *argv[])\n{\n\tstruct line_rule rule = {0};\n\tconst char *prefix = NULL;\n\tstruct line_info *info;\n\tenum status_code code;\n\n\tif (argc < 3)\n\t\treturn error(\"Invalid color mapping: color area fgcolor bgcolor [attrs]\");\n\n\tcode = parse_color_name(argv[0], &rule, &prefix);\n\tif (code != SUCCESS)\n\t\treturn code;\n\n\tinfo = add_line_rule(prefix, &rule);\n\tif (!info) {\n\t\tstatic const char *obsolete[][2] = {\n\t\t\t{ \"acked\",\t\t\t\"'    Acked-by'\" },\n\t\t\t{ \"diff-copy-from\",\t\t\"'copy from '\" },\n\t\t\t{ \"diff-copy-to\",\t\t\"'copy to '\" },\n\t\t\t{ \"diff-deleted-file-mode\",\t\"'deleted file mode '\" },\n\t\t\t{ \"diff-dissimilarity\",\t\t\"'dissimilarity '\" },\n\t\t\t{ \"diff-rename-from\",\t\t\"'rename from '\" },\n\t\t\t{ \"diff-rename-to\",\t\t\"'rename to '\" },\n\t\t\t{ \"diff-tree\",\t\t\t\"'diff-tree '\" },\n\t\t\t{ \"filename\",\t\t\t\"file\" },\n\t\t\t{ \"help-keymap\",\t\t\"help.section\" },\n\t\t\t{ \"main-revgraph\",\t\t\"\" },\n\t\t\t{ \"pp-adate\",\t\t\t\"'AuthorDate: '\" },\n\t\t\t{ \"pp-author\",\t\t\t\"'Author: '\" },\n\t\t\t{ \"pp-cdate\",\t\t\t\"'CommitDate: '\" },\n\t\t\t{ \"pp-commit\",\t\t\t\"'Commit: '\" },\n\t\t\t{ \"pp-date\",\t\t\t\"'Date: '\" },\n\t\t\t{ \"reviewed\",\t\t\t\"'    Reviewed-by'\" },\n\t\t\t{ \"signoff\",\t\t\t\"'    Signed-off-by'\" },\n\t\t\t{ \"stat-head\",\t\t\t\"status.header\" },\n\t\t\t{ \"stat-section\",\t\t\"status.section\" },\n\t\t\t{ \"tested\",\t\t\t\"'    Tested-by'\" },\n\t\t\t{ \"tree-dir\",\t\t\t\"tree.directory\" },\n\t\t\t{ \"tree-file\",\t\t\t\"tree.file\" },\n\t\t\t{ \"tree-head\",\t\t\t\"tree.header\" },\n\t\t};\n\t\tint index;\n\n\t\tindex = find_remapped(obsolete, ARRAY_SIZE(obsolete), rule.name);\n\t\tif (index != -1) {\n\t\t\tif (!*obsolete[index][1])\n\t\t\t\treturn error(\"%s is obsolete\", argv[0]);\n\t\t\t/* Keep the initial prefix if defined. */\n\t\t\tcode = parse_color_name(obsolete[index][1], &rule, prefix ? NULL : &prefix);\n\t\t\tif (code != SUCCESS)\n\t\t\t\treturn code;\n\t\t\tinfo = add_line_rule(prefix, &rule);\n\t\t}\n\n\t\tif (!info)\n\t\t\treturn error(\"Unknown color name: %s\", argv[0]);\n\n\t\tcode = error(\"%s has been replaced by %s\",\n\t\t\t     obsolete[index][0], obsolete[index][1]);\n\t}\n\n\tif (!set_color(&info->fg, argv[1]))\n\t\treturn error(\"Unknown color: %s\", argv[1]);\n\n\tif (!set_color(&info->bg, argv[2]))\n\t\treturn error(\"Unknown color: %s\", argv[2]);\n\n\tinfo->attr = 0;\n\twhile (argc-- > 3) {\n\t\tint attr;\n\n\t\tif (!set_attribute(&attr, argv[argc]))\n\t\t\treturn error(\"Unknown color attribute: %s\", argv[argc]);\n\t\tinfo->attr |= attr;\n\t}\n\n\treturn code;\n}\n\nstatic enum status_code\nparse_bool(bool *opt, const char *arg)\n{\n\t*opt = (!strcmp(arg, \"1\") || !strcmp(arg, \"true\") || !strcmp(arg, \"yes\"))\n\t\t? true : false;\n\tif (*opt || !strcmp(arg, \"0\") || !strcmp(arg, \"false\") || !strcmp(arg, \"no\"))\n\t\treturn SUCCESS;\n\treturn error(\"Non-boolean value treated as false: %s\", arg);\n}\n\nstatic enum status_code\nparse_enum(const char *name, unsigned int *opt, const char *arg,\n\t   const struct enum_map *map)\n{\n\tbool is_true;\n\tenum status_code code;\n\n\tassert(map->size > 1);\n\n\tif (map_enum_do(map->entries, map->size, (int *) opt, arg))\n\t\treturn SUCCESS;\n\n\tcode = parse_bool(&is_true, arg);\n\t*opt = is_true ? map->entries[1].value : map->entries[0].value;\n\tif (code == SUCCESS)\n\t\treturn code;\n\n\tif (!strcmp(name, \"date-display\")) {\n\t\tconst char *msg = \"\";\n\n\t\tif (!strcasecmp(arg, \"local\"))\n\t\t\tmsg = \", use the 'date-local' column option\";\n\t\telse if (!strcasecmp(arg, \"short\"))\n\t\t\tmsg = \", use the 'custom' display mode and set 'date-format'\";\n\n\t\t*opt = map->entries[1].value;\n\t\treturn error(\"'%s' is no longer supported for %s%s\", arg, name, msg);\n\t}\n\n\treturn error(\"'%s' is not a valid value for %s; using %s\",\n\t\t     arg, name, enum_name(map->entries[*opt].name));\n}\n\nstatic enum status_code\nparse_string(char *opt, const char *arg, size_t optsize)\n{\n\tint arglen = strlen(arg);\n\n\tswitch (arg[0]) {\n\tcase '\\\"':\n\tcase '\\'':\n\t\tif (arglen == 1 || arg[arglen - 1] != arg[0])\n\t\t\treturn ERROR_UNMATCHED_QUOTATION;\n\t\targ += 1; arglen -= 2;\n\t\t/* Fall-through */\n\tdefault:\n\t\tstring_ncopy_do(opt, optsize, arg, arglen);\n\t\treturn SUCCESS;\n\t}\n}\n\nstatic enum status_code\nparse_encoding(struct encoding **encoding_ref, const char *arg, bool priority)\n{\n\tchar buf[SIZEOF_STR];\n\tenum status_code code = parse_string(buf, arg, sizeof(buf));\n\n\tif (code == SUCCESS) {\n\t\tstruct encoding *encoding = *encoding_ref;\n\n\t\tif (encoding && !priority)\n\t\t\treturn code;\n\t\tencoding = encoding_open(buf);\n\t\tif (encoding)\n\t\t\t*encoding_ref = encoding;\n\t}\n\n\treturn code;\n}\n\nstatic enum status_code\nparse_args(const char ***args, const char *argv[])\n{\n\tif (!argv_copy(args, argv))\n\t\treturn ERROR_OUT_OF_MEMORY;\n\treturn SUCCESS;\n}\n\nenum status_code\nparse_option(struct option_info *option, const char *prefix, const char *arg)\n{\n\tchar name[SIZEOF_STR];\n\n\tif (!enum_name_prefixed(name, sizeof(name), prefix, option->name))\n\t\treturn error(\"Failed to parse option\");\n\n\tif (!strcmp(option->type, \"bool\")) {\n\t\tif (!strcmp(\"show-notes\", name)) {\n\t\t\tbool *value = option->value;\n\t\t\tenum status_code res;\n\n\t\t\tif (parse_bool(option->value, arg) == SUCCESS)\n\t\t\t\treturn SUCCESS;\n\n\t\t\t*value = true;\n\t\t\tstring_copy(opt_notes_arg, NOTES_EQ_ARG);\n\t\t\tres = parse_string(opt_notes_arg + STRING_SIZE(NOTES_EQ_ARG), arg,\n\t\t\t\t\t   sizeof(opt_notes_arg) - STRING_SIZE(NOTES_EQ_ARG));\n\t\t\tif (res == SUCCESS && !opt_notes_arg[STRING_SIZE(NOTES_EQ_ARG)])\n\t\t\t\topt_notes_arg[STRING_SIZE(NOTES_ARG)] = 0;\n\t\t\treturn res;\n\t\t}\n\n\t\treturn parse_bool(option->value, arg);\n\t}\n\n\tif (!strcmp(option->type, \"double\"))\n\t\treturn parse_step(option->value, arg);\n\n\tif (!strncmp(option->type, \"enum\", 4)) {\n\t\tif (!strcmp(name, \"line-graphics\") && !strcasecmp(arg, \"auto\")) {\n\t\t\tconst char *locale;\n\t\t\tint *value = option->value;\n\n\t\t\tif ((((locale = getenv(\"LC_ALL\")) && *locale) ||\n\t\t\t     ((locale = getenv(\"LC_CTYPE\")) && *locale) ||\n\t\t\t     ((locale = getenv(\"LANG\")) && *locale)) &&\n\t\t\t    (strstr(locale, \"UTF\") || strstr(locale, \"utf\")))\n\t\t\t\t*value = GRAPHIC_UTF_8;\n\t\t\telse\n\t\t\t\t*value = GRAPHIC_DEFAULT;\n\t\t\treturn SUCCESS;\n\t\t} else {\n\t\t\tconst char *type = option->type + STRING_SIZE(\"enum \");\n\t\t\tconst struct enum_map *map = find_enum_map(type);\n\n\t\t\treturn parse_enum(name, option->value, arg, map);\n\t\t}\n\t}\n\n\tif (!strcmp(option->type, \"int\")) {\n\t\tif (strstr(name, \"title-overflow\")) {\n\t\t\tbool enabled = false;\n\t\t\tint *value = option->value;\n\n\t\t\t/* We try to parse it as a boolean (and set the\n\t\t\t * value to 0 if false), otherwise we parse it as\n\t\t\t * an integer and use the given value. */\n\t\t\tif (parse_bool(&enabled, arg) == SUCCESS) {\n\t\t\t\tif (!enabled) {\n\t\t\t\t\t*value = 0;\n\t\t\t\t\treturn SUCCESS;\n\t\t\t\t}\n\t\t\t\targ = \"50\";\n\t\t\t}\n\t\t}\n\n\t\tif (strstr(name, \"-maxwidth\") && strchr(arg, '%') &&\n\t\t    parse_int(option->value, arg, 0, 100) == SUCCESS) {\n\t\t\tint *value = option->value;\n\n\t\t\t/* Use negative values to signify maxwidth is\n\t\t\t * not fixed but is a % of the view width. */\n\t\t\t*value *= -1;\n\t\t\treturn SUCCESS;\n\t\t}\n\n\t\tif (!strcmp(name, \"line-number-interval\") ||\n\t\t    !strcmp(name, \"tab-size\"))\n\t\t\treturn parse_int(option->value, arg, 1, 1024);\n\t\telse if (!strcmp(name, \"id-width\"))\n\t\t\treturn parse_int(option->value, arg, 0, SIZEOF_REV - 1);\n\t\telse\n\t\t\treturn parse_int(option->value, arg, 0, 1024);\n\t}\n\n\tif (!strcmp(option->type, \"const char *\")) {\n\t\tconst char **value = option->value;\n\t\tchar *alloc = NULL;\n\n\t\tif (option->value == &opt_diff_highlight) {\n\t\t\tbool enabled = false;\n\n\t\t\tif (parse_bool(&enabled, arg) == SUCCESS) {\n\t\t\t\tif (!enabled) {\n\t\t\t\t\t*value = NULL;\n\t\t\t\t\treturn SUCCESS;\n\t\t\t\t}\n\t\t\t\targ = \"diff-highlight\";\n\t\t\t}\n\t\t}\n\n\t\tif (strlen(arg)) {\n\t\t\tif (arg[0] == '\"' && arg[strlen(arg) - 1] == '\"')\n\t\t\t\talloc = strndup(arg + 1, strlen(arg + 1) - 1);\n\t\t\telse\n\t\t\t\talloc = strdup(arg);\n\t\t\tif (!alloc)\n\t\t\t\treturn ERROR_OUT_OF_MEMORY;\n\t\t}\n\n\t\tif (alloc && !strcmp(name, \"truncation-delimiter\")) {\n\t\t\tif (!strcmp(alloc, \"utf-8\") || !strcmp(alloc, \"utf8\")) {\n\t\t\t\tfree(alloc);\n\t\t\t\talloc = strdup(\"⋯\");\n\t\t\t\tif (!alloc)\n\t\t\t\t\treturn ERROR_OUT_OF_MEMORY;\n\t\t\t} else if (utf8_width_of(alloc, -1, -1) != 1) {\n\t\t\t\tfree(alloc);\n\t\t\t\talloc = strdup(\"~\");\n\t\t\t\tif (!alloc)\n\t\t\t\t\treturn ERROR_OUT_OF_MEMORY;\n\t\t\t}\n\t\t}\n\n\t\tfree((void *) *value);\n\t\t*value = alloc;\n\t\treturn SUCCESS;\n\t}\n\n\treturn error(\"Unhandled option: %s\", name);\n}\n\nstatic enum status_code\nparse_view_settings(struct view_column **view_column, const char *name_, const char *argv[])\n{\n\tchar buf[SIZEOF_STR];\n\tconst char *name = enum_name_copy(buf, sizeof(buf), name_) ? buf : name_;\n\tconst char *prefixed;\n\n\tif ((prefixed = strstr(name, \"-view-\"))) {\n\t\tconst char *column_name = prefixed + STRING_SIZE(\"-view-\");\n\t\tsize_t column_namelen = strlen(column_name);\n\t\tenum view_column_type type;\n\n\t\tfor (type = 0; type < view_column_type_map->size; type++) {\n\t\t\tconst struct enum_map_entry *column = &view_column_type_map->entries[type];\n\n\t\t\tif (enum_equals(*column, column_name, column_namelen))\n\t\t\t\treturn parse_view_column_config(name, type, NULL, argv);\n\n\t\t\tif (enum_equals_prefix(*column, column_name, column_namelen))\n\t\t\t\treturn parse_view_column_config(name, type,\n\t\t\t\t\t\t\t\tcolumn_name + column->namelen + 1,\n\t\t\t\t\t\t\t\targv);\n\t\t}\n\t}\n\n\treturn parse_view_config(view_column, name, argv);\n}\n\nstatic enum status_code\noption_update(struct option_info *option, int argc, const char *argv[])\n{\n\tenum status_code code;\n\n\tif (option->seen)\n\t\treturn SUCCESS;\n\n\tif (!strcmp(option->type, \"const char **\"))\n\t\treturn parse_args(option->value, argv + 2);\n\n\tif (argc < 3)\n\t\treturn error(\"Invalid set command: set option = value\");\n\n\tif (!strcmp(option->type, \"view_settings\"))\n\t\treturn parse_view_settings(option->value, argv[0], argv + 2);\n\n\tif (!strcmp(option->type, \"struct ref_format **\"))\n\t\treturn parse_ref_formats(option->value, argv + 2);\n\n\tcode = parse_option(option, \"\", argv[2]);\n\tif (code == SUCCESS && argc != 3)\n\t\treturn error(\"Option %s only takes one value\", argv[0]);\n\n\treturn code;\n}\n\n/* Wants: name = value */\nstatic enum status_code\noption_set_command(int argc, const char *argv[])\n{\n\tstruct option_info *option;\n\n\tif (argc < 2)\n\t\treturn error(\"Invalid set command: set option = value\");\n\n\tif (strcmp(argv[1], \"=\"))\n\t\treturn error(\"No value assigned to %s\", argv[0]);\n\n\toption = find_option_info(option_info, ARRAY_SIZE(option_info), \"\", argv[0]);\n\tif (option)\n\t\treturn option_update(option, argc, argv);\n\n\t{\n\t\tconst char *obsolete[][2] = {\n\t\t\t{ \"status-untracked-dirs\", \"status-show-untracked-dirs\" },\n\t\t};\n\t\tint index = find_remapped(obsolete, ARRAY_SIZE(obsolete), argv[0]);\n\n\t\tif (index != -1) {\n\t\t\toption = find_option_info(option_info, ARRAY_SIZE(option_info), \"\", obsolete[index][1]);\n\t\t\tif (option) {\n\t\t\t\tenum status_code code = option_update(option, argc, argv);\n\n\t\t\t\tif (code != SUCCESS)\n\t\t\t\t\treturn code;\n\t\t\t\treturn error(\"%s has been renamed to %s\",\n\t\t\t\t\t     obsolete[index][0], obsolete[index][1]);\n\t\t\t}\n\t\t}\n\t}\n\n\t{\n\t\tconst char *obsolete[][2] = {\n\t\t\t{ \"author-width\",\t\t\"author\" },\n\t\t\t{ \"filename-width\",\t\t\"file-name\" },\n\t\t\t{ \"line-number-interval\",\t\"line-number\" },\n\t\t\t{ \"show-author\",\t\t\"author\" },\n\t\t\t{ \"show-date\",\t\t\t\"date\" },\n\t\t\t{ \"show-file-size\",\t\t\"file-size\" },\n\t\t\t{ \"show-filename\",\t\t\"file-name\" },\n\t\t\t{ \"show-id\",\t\t\t\"id\" },\n\t\t\t{ \"show-line-numbers\",\t\t\"line-number\" },\n\t\t\t{ \"show-refs\",\t\t\t\"commit-title\" },\n\t\t\t{ \"show-rev-graph\",\t\t\"commit-title\" },\n\t\t\t{ \"title-overflow\",\t\t\"commit-title and text\" },\n\t\t};\n\t\tint index = find_remapped(obsolete, ARRAY_SIZE(obsolete), argv[0]);\n\n\t\tif (index != -1)\n\t\t\treturn error(\"%s is obsolete; see tigrc(5) for how to set the %s column option\",\n\t\t\t\t     obsolete[index][0], obsolete[index][1]);\n\n\t\tif (!strcmp(argv[0], \"read-git-colors\"))\n\t\t\treturn error(\"read-git-colors has been obsoleted by the git-colors option\");\n\n\t\tif (!strcmp(argv[0], \"cmdline-args\"))\n\t\t\treturn error(\"cmdline-args is obsolete; use view-specific options instead, e.g. main-options\");\n\t}\n\n\treturn error(\"Unknown option name: %s\", argv[0]);\n}\n\n/* Wants: mode request key */\nstatic enum status_code\noption_bind_command(int argc, const char *argv[])\n{\n\tstruct key key[16];\n\tsize_t keys = 0;\n\tenum request request;\n\tstruct keymap *keymap;\n\tconst char *key_arg;\n\n\tif (argc < 3)\n\t\treturn error(\"Invalid key binding: bind keymap key action\");\n\n\tif (!(keymap = get_keymap(argv[0], strlen(argv[0])))) {\n\t\tif (!strcmp(argv[0], \"branch\"))\n\t\t\tkeymap = get_keymap(\"refs\", strlen(\"refs\"));\n\t\tif (!keymap)\n\t\t\treturn error(\"Unknown key map: %s\", argv[0]);\n\t}\n\n\tfor (keys = 0, key_arg = argv[1]; *key_arg && keys < ARRAY_SIZE(key); keys++) {\n\t\tenum status_code code = get_key_value(&key_arg, &key[keys]);\n\n\t\tif (code != SUCCESS)\n\t\t\treturn code;\n\t}\n\n\tif (*key_arg && keys == ARRAY_SIZE(key))\n\t\treturn error(\"Except for <Esc> combos only one key is allowed \"\n\t\t\t     \"in key combos: %s\", argv[1]);\n\n\trequest = get_request(argv[2]);\n\tif (request == REQ_UNKNOWN) {\n\t\tstatic const char *obsolete[][2] = {\n\t\t\t{ \"view-branch\",\t\t\"view-refs\" },\n\t\t};\n\t\tstatic const char *toggles[][2] = {\n\t\t\t{ \"diff-context-down\",\t\t\"diff-context\" },\n\t\t\t{ \"diff-context-up\",\t\t\"diff-context\" },\n\t\t\t{ \"stage-next\",\t\t\t\":/^@@\" },\n\t\t\t{ \"status-untracked-dirs\",\t\"status-show-untracked-dirs\" },\n\t\t\t{ \"toggle-author\",\t\t\"author\" },\n\t\t\t{ \"toggle-changes\",\t\t\"show-changes\" },\n\t\t\t{ \"toggle-commit-order\",\t\"show-commit-order\" },\n\t\t\t{ \"toggle-date\",\t\t\"date\" },\n\t\t\t{ \"toggle-files\",\t\t\"file-filter\" },\n\t\t\t{ \"toggle-file-filter\",\t\t\"file-filter\" },\n\t\t\t{ \"toggle-rev-filter\",\t\t\"rev-filter\" },\n\t\t\t{ \"toggle-file-size\",\t\t\"file-size\" },\n\t\t\t{ \"toggle-filename\",\t\t\"filename\" },\n\t\t\t{ \"toggle-graphic\",\t\t\"show-graphic\" },\n\t\t\t{ \"toggle-id\",\t\t\t\"id\" },\n\t\t\t{ \"toggle-ignore-space\",\t\"show-ignore-space\" },\n\t\t\t{ \"toggle-lineno\",\t\t\"line-number\" },\n\t\t\t{ \"toggle-refs\",\t\t\"commit-title-refs\" },\n\t\t\t{ \"toggle-rev-graph\",\t\t\"commit-title-graph\" },\n\t\t\t{ \"toggle-show-changes\",\t\"show-changes\" },\n\t\t\t{ \"toggle-sort-field\",\t\t\"sort-field\" },\n\t\t\t{ \"toggle-sort-order\",\t\t\"sort-order\" },\n\t\t\t{ \"toggle-title-overflow\",\t\"commit-title-overflow\" },\n\t\t\t{ \"toggle-untracked-dirs\",\t\"status-show-untracked-dirs\" },\n\t\t\t{ \"toggle-vertical-split\",\t\"show-vertical-split\" },\n\t\t};\n\t\tint alias;\n\n\t\talias = find_remapped(obsolete, ARRAY_SIZE(obsolete), argv[2]);\n\t\tif (alias != -1) {\n\t\t\tconst char *action = obsolete[alias][1];\n\n\t\t\tadd_keybinding(keymap, get_request(action), key, keys);\n\t\t\treturn error(\"%s has been renamed to %s\",\n\t\t\t\t     obsolete[alias][0], action);\n\t\t}\n\n\t\talias = find_remapped(toggles, ARRAY_SIZE(toggles), argv[2]);\n\t\tif (alias != -1) {\n\t\t\tconst char *action = toggles[alias][0];\n\t\t\tconst char *arg = prefixcmp(action, \"diff-context-\")\n\t\t\t\t\t? NULL : (strstr(action, \"-down\") ? \"-1\" : \"+1\");\n\t\t\tconst char *mapped = toggles[alias][1];\n\t\t\tconst char *toggle[] = { \":toggle\", mapped, arg, NULL};\n\t\t\tconst char *other[] = { mapped, NULL };\n\t\t\tconst char **prompt = *mapped == ':' ? other : toggle;\n\t\t\tenum status_code code = add_run_request(keymap, key, keys, prompt);\n\n\t\t\tif (code == SUCCESS)\n\t\t\t\tcode = error(\"%s has been replaced by `%s%s%s%s'\",\n\t\t\t\t\t     action, prompt == other ? mapped : \":toggle \",\n\t\t\t\t\t     prompt == other ? \"\" : mapped,\n\t\t\t\t\t     arg ? \" \" : \"\", arg ? arg : \"\");\n\t\t\treturn code;\n\t\t}\n\t}\n\n\tif (request == REQ_UNKNOWN)\n\t\treturn add_run_request(keymap, key, keys, argv + 2);\n\n\treturn add_keybinding(keymap, request, key, keys);\n}\n\n\nstatic enum status_code load_option_file(const char *path);\n\nstatic enum status_code\noption_source_command(int argc, const char *argv[])\n{\n\tenum status_code code;\n\tbool quiet = false;\n\n\tif ((argc < 1) || (argc > 2))\n\t\treturn error(\"Invalid source command: source [-q] <path>\");\n\n\tif (argc == 2) {\n\t\tif (!strcmp(argv[0], \"-q\"))\n\t\t\tquiet = true;\n\t\telse\n\t\t\treturn error(\"Invalid source option: %s\", argv[0]);\n\t}\n\n\tcode = load_option_file(argv[argc - 1]);\n\n\tif (quiet)\n\t\treturn code == ERROR_FILE_DOES_NOT_EXIST ? 0 : code;\n\n\treturn code == ERROR_FILE_DOES_NOT_EXIST\n\t\t? error(\"File does not exist: %s\", argv[argc - 1]) : code;\n}\n\nenum status_code\nset_option(const char *opt, int argc, const char *argv[])\n{\n\tif (!strcmp(opt, \"color\"))\n\t\treturn option_color_command(argc, argv);\n\n\tif (!strcmp(opt, \"set\"))\n\t\treturn option_set_command(argc, argv);\n\n\tif (!strcmp(opt, \"bind\"))\n\t\treturn option_bind_command(argc, argv);\n\n\tif (!strcmp(opt, \"source\"))\n\t\treturn option_source_command(argc, argv);\n\n\treturn error(\"Unknown option command: %s\", opt);\n}\n\nstruct config_state {\n\tconst char *path;\n\tsize_t lineno;\n\tbool errors;\n};\n\nstatic enum status_code\nread_option(char *opt, size_t optlen, char *value, size_t valuelen, void *data)\n{\n\tstruct config_state *config = data;\n\tenum status_code status = ERROR_NO_OPTION_VALUE;\n\n\t/* Check for comment markers, since read_properties() will\n\t * only ensure opt and value are split at first \" \\t\". */\n\toptlen = strcspn(opt, \"#\");\n\tif (optlen == 0)\n\t\treturn SUCCESS;\n\n\tif (opt[optlen] == 0) {\n\t\t/* Look for comment endings in the value. */\n\t\tsize_t len = strcspn(value, \"#\");\n\t\tconst char *argv[SIZEOF_ARG];\n\t\tint argc = 0;\n\n\t\tif (len < valuelen) {\n\t\t\tvaluelen = len;\n\t\t\tvalue[valuelen] = 0;\n\t\t}\n\n\t\tif (!argv_from_string(argv, &argc, value))\n\t\t\tstatus = error(\"Too many option arguments for %s\", opt);\n\t\telse\n\t\t\tstatus = set_option(opt, argc, argv);\n\t}\n\n\tif (status != SUCCESS) {\n\t\twarn(\"%s:%zu: %s\", config->path, config->lineno,\n\t\t     get_status_message(status));\n\t\tconfig->errors = true;\n\t}\n\n\t/* Always keep going if errors are encountered. */\n\treturn SUCCESS;\n}\n\nstatic enum status_code\nload_option_file(const char *path)\n{\n\tstruct config_state config = { path, 0, false };\n\tstruct io io;\n\tchar buf[SIZEOF_STR];\n\n\t/* Do not read configuration from stdin if set to \"\" */\n\tif (!path || !strlen(path))\n\t\treturn SUCCESS;\n\n\tif (!path_expand(buf, sizeof(buf), path))\n\t\treturn error(\"Failed to expand path: %s\", path);\n\n\t/* It's OK that the file doesn't exist. */\n\tif (!io_open(&io, \"%s\", buf)) {\n\t\t/* XXX: Must return ERROR_FILE_DOES_NOT_EXIST so missing\n\t\t * system tigrc is detected properly. */\n\t\tif (io_error(&io) == ENOENT)\n\t\t\treturn ERROR_FILE_DOES_NOT_EXIST;\n\t\treturn error(\"Error loading file %s: %s\", buf, io_strerror(&io));\n\t}\n\n\tif (io_load_span(&io, \" \\t\", &config.lineno, read_option, &config) != SUCCESS ||\n\t    config.errors == true)\n\t\twarn(\"Errors while loading %s.\", buf);\n\treturn SUCCESS;\n}\n\nextern const char *builtin_config;\n\nenum status_code\nload_options(void)\n{\n\tconst char *tigrc_user = getenv(\"TIGRC_USER\");\n\tconst char *tigrc_system = getenv(\"TIGRC_SYSTEM\");\n\tconst char *tig_diff_opts = getenv(\"TIG_DIFF_OPTS\");\n\tconst bool diff_opts_from_args = !!opt_diff_options;\n\tbool custom_tigrc_system = !!tigrc_system;\n\tchar buf[SIZEOF_STR];\n\n\topt_file_filter = true;\n\topt_rev_filter = true;\n\tif (!find_option_info_by_value(&opt_diff_context)->seen)\n\t\topt_diff_context = -3;\n\n\tif (!custom_tigrc_system)\n\t\ttigrc_system = SYSCONFDIR \"/tigrc\";\n\n\tif (!*tigrc_system ||\n\t    (load_option_file(tigrc_system) == ERROR_FILE_DOES_NOT_EXIST && !custom_tigrc_system)) {\n\t\tstruct config_state config = { \"<built-in>\", 0, false };\n\t\tstruct io io;\n\n\t\tif (!io_from_string(&io, builtin_config))\n\t\t\treturn error(\"Failed to get built-in config\");\n\t\tif (io_load_span(&io, \" \\t\", &config.lineno, read_option, &config) != SUCCESS || config.errors == true)\n\t\t\treturn error(\"Error in built-in config\");\n\t}\n\n\tif (tigrc_user) {\n\t\tload_option_file(tigrc_user);\n\t} else {\n\t\tconst char *xdg_config_home = getenv(\"XDG_CONFIG_HOME\");\n\n\t\tif (!xdg_config_home || !*xdg_config_home)\n\t\t\ttigrc_user = \"~/.config/tig/config\";\n\t\telse if (!string_format(buf, \"%s/tig/config\", xdg_config_home))\n\t\t\treturn error(\"Failed to expand $XDG_CONFIG_HOME\");\n\t\telse\n\t\t\ttigrc_user = buf;\n\n\t\tif (load_option_file(tigrc_user) == ERROR_FILE_DOES_NOT_EXIST)\n\t\t\tload_option_file(TIG_USER_CONFIG);\n\t}\n\n\tif (!diff_opts_from_args && tig_diff_opts && *tig_diff_opts) {\n\t\tstatic const char *diff_opts[SIZEOF_ARG] = { NULL };\n\t\tchar buf[SIZEOF_STR];\n\t\tint argc = 0;\n\n\t\tif (!string_format(buf, \"%s\", tig_diff_opts) ||\n\t\t    !argv_from_string(diff_opts, &argc, buf))\n\t\t\treturn error(\"TIG_DIFF_OPTS contains too many arguments\");\n\t\telse if (!argv_copy(&opt_diff_options, diff_opts))\n\t\t\treturn error(\"Failed to format TIG_DIFF_OPTS arguments\");\n\t}\n\n\tif (!find_option_info_by_value(&opt_word_diff)->seen &&\n\t    (argv_contains(opt_diff_options, \"--word-diff\") ||\n\t     argv_contains(opt_diff_options, \"--word-diff=plain\") ||\n\t     argv_containsn(opt_diff_options, \"--word-diff-regex=\", STRING_SIZE(\"--word-diff-regex=\"))))\n\t\topt_word_diff = true;\n\n\treturn SUCCESS;\n}\n\nconst char *\nformat_option_value(const struct option_info *option, char buf[], size_t bufsize)\n{\n\tbuf[0] = 0;\n\n\tif (!strcmp(option->type, \"bool\")) {\n\t\tbool *opt = option->value;\n\n\t\tif (string_nformat(buf, bufsize, NULL, \"%s\", *opt ? \"yes\" : \"no\"))\n\t\t\treturn buf;\n\n\t} else if (!strncmp(option->type, \"enum\", 4)) {\n\t\tconst char *type = option->type + STRING_SIZE(\"enum \");\n\t\tenum author *opt = option->value;\n\t\tconst struct enum_map *map = find_enum_map(type);\n\n\t\tif (enum_name_copy(buf, bufsize, map->entries[*opt].name))\n\t\t\treturn buf;\n\n\t} else if (!strcmp(option->type, \"int\")) {\n\t\tint *opt = option->value;\n\n\t\tif (opt == &opt_diff_context && *opt < 0)\n\t\t\t*opt = -*opt;\n\n\t\tif (string_nformat(buf, bufsize, NULL, \"%d\", *opt))\n\t\t\treturn buf;\n\n\t} else if (!strcmp(option->type, \"double\")) {\n\t\tdouble *opt = option->value;\n\n\t\tif (*opt >= 1) {\n\t\t\tif (string_nformat(buf, bufsize, NULL, \"%d\", (int) *opt))\n\t\t\t\treturn buf;\n\n\t\t} else if (string_nformat(buf, bufsize, NULL, \"%.0f%%\", (*opt) * 100)) {\n\t\t\treturn buf;\n\t\t}\n\n\t} else if (!strcmp(option->type, \"const char *\")) {\n\t\tconst char **opt = option->value;\n\t\tsize_t bufpos = 0;\n\n\t\tif (!*opt)\n\t\t\treturn \"\\\"\\\"\";\n\t\tif (!string_nformat(buf, bufsize, &bufpos, \"\\\"%s\\\"\", *opt))\n\t\t\treturn NULL;\n\t\treturn buf;\n\n\t} else if (!strcmp(option->type, \"const char **\")) {\n\t\tconst char *sep = \"\";\n\t\tconst char ***opt = option->value;\n\t\tsize_t bufpos = 0;\n\t\tint i;\n\n\t\tfor (i = 0; (*opt) && (*opt)[i]; i++) {\n\t\t\tconst char *arg = (*opt)[i];\n\n\t\t\tif (!string_nformat(buf, bufsize, &bufpos, \"%s%s\", sep, arg))\n\t\t\t\treturn NULL;\n\n\t\t\tsep = \" \";\n\t\t}\n\n\t\treturn buf;\n\n\t} else if (!strcmp(option->type, \"struct ref_format **\")) {\n\t\tstruct ref_format ***opt = option->value;\n\n\t\tif (format_ref_formats(*opt, buf, bufsize) == SUCCESS)\n\t\t\treturn buf;\n\n\t} else if (!strcmp(option->type, \"view_settings\")) {\n\t\tstruct view_column **opt = option->value;\n\n\t\tif (format_view_config(*opt, buf, bufsize) == SUCCESS)\n\t\t\treturn buf;\n\n\t} else {\n\t\tif (string_nformat(buf, bufsize, NULL, \"<%s>\", option->type))\n\t\t\treturn buf;\n\t}\n\n\treturn NULL;\n}\n\nstatic bool\nsave_option_settings(FILE *file)\n{\n\tchar buf[SIZEOF_STR];\n\tint i;\n\n\tif (!io_fprintf(file, \"%s\", \"\\n## Settings\\n\"))\n\t\treturn false;\n\n\tfor (i = 0; i < ARRAY_SIZE(option_info); i++) {\n\t\tstruct option_info *option = &option_info[i];\n\t\tconst char *name = enum_name(option->name);\n\t\tconst char *value = format_option_value(option, buf, sizeof(buf));\n\n\t\tif (!value)\n\t\t\treturn false;\n\n\t\tif (!suffixcmp(name, strlen(name), \"-args\"))\n\t\t\tcontinue;\n\n\t\tif (!io_fprintf(file, \"\\nset %-25s = %s\", name, value))\n\t\t\treturn false;\n\t}\n\n\treturn true;\n}\n\nstatic bool\nsave_option_keybinding(void *data, const char *group, struct keymap *keymap,\n\t\t       enum request request, const char *key,\n\t\t       const struct request_info *req_info,\n\t\t       const struct run_request *run_req)\n{\n\tFILE *file = data;\n\n\tif (group && !io_fprintf(file, \"\\n# %s\", group))\n\t\treturn false;\n\n\tif (!io_fprintf(file, \"\\nbind %-10s %-15s \", enum_name(keymap->name), key))\n\t\treturn false;\n\n\tif (req_info) {\n\t\treturn io_fprintf(file, \"%s\", enum_name(req_info->name));\n\n\t} else {\n\t\tconst char *sep = format_run_request_flags(run_req);\n\t\tint i;\n\n\t\tfor (i = 0; run_req->argv[i]; i++) {\n\t\t\tif (!io_fprintf(file, \"%s%s\", sep, run_req->argv[i]))\n\t\t\t\treturn false;\n\t\t\tsep = \" \";\n\t\t}\n\n\t\treturn true;\n\t}\n}\n\nstatic bool\nsave_option_keybindings(FILE *file)\n{\n\tif (!io_fprintf(file, \"%s\", \"\\n\\n## Keybindings\\n\"))\n\t\treturn false;\n\n\treturn foreach_key(save_option_keybinding, file, false);\n}\n\nstatic bool\nsave_option_color_name(FILE *file, int color)\n{\n\tint i;\n\n\tfor (i = 0; i < ARRAY_SIZE(color_map); i++)\n\t\tif (color_map[i].value == color)\n\t\t\treturn io_fprintf(file, \" %-8s\", enum_name(color_map[i].name));\n\n\treturn io_fprintf(file, \" color%d\", color);\n}\n\nstatic bool\nsave_option_color_attr(FILE *file, int attr)\n{\n\tint i;\n\n\tfor (i = 0; i < ARRAY_SIZE(attr_map); i++)\n\t\tif ((attr & attr_map[i].value) &&\n\t\t    !io_fprintf(file, \" %s\", enum_name(attr_map[i].name)))\n\t\t\treturn false;\n\n\treturn true;\n}\n\nstatic bool\nsave_option_color(void *data, const struct line_rule *rule)\n{\n\tFILE *file = data;\n\tconst struct line_info *info;\n\n\tfor (info = &rule->info; info; info = info->next) {\n\t\tconst char *prefix = info->prefix ? info->prefix : \"\";\n\t\tconst char *prefix_sep = info->prefix ? \".\" : \"\";\n\t\tconst char *quote = *rule->line ? \"\\\"\" : \"\";\n\t\tconst char *name = *rule->line ? rule->line : enum_name(rule->name);\n\t\tint name_width = strlen(prefix) + strlen(prefix_sep) + 2 * strlen(quote) + strlen(name);\n\t\tint padding = name_width > 30 ? 0 : 30 - name_width;\n\n\t\tif (!io_fprintf(file, \"\\ncolor %s%s%s%s%s%-*s\",\n\t\t\t\t      prefix, prefix_sep, quote, name, quote, padding, \"\")\n\t\t    || !save_option_color_name(file, info->fg)\n\t\t    || !save_option_color_name(file, info->bg)\n\t\t    || !save_option_color_attr(file, info->attr))\n\t\t\treturn false;\n\t}\n\n\treturn true;\n}\n\nstatic bool\nsave_option_colors(FILE *file)\n{\n\tif (!io_fprintf(file, \"%s\", \"\\n\\n## Colors\\n\"))\n\t\treturn false;\n\n\treturn foreach_line_rule(save_option_color, file);\n}\n\nenum status_code\nsave_options(const char *path)\n{\n\tint fd = open(path, O_WRONLY | O_CREAT | O_EXCL, 0666);\n\tFILE *file = fd != -1 ? fdopen(fd, \"w\") : NULL;\n\tenum status_code code = SUCCESS;\n\n\tif (!file)\n\t\treturn error(\"%s\", strerror(errno));\n\n\tif (!io_fprintf(file, \"%s\", \"# Saved by Tig\\n\")\n\t    || !save_option_settings(file)\n\t    || !save_option_keybindings(file)\n\t    || !save_option_colors(file))\n\t\tcode = error(\"Write returned an error\");\n\n\tfclose(file);\n\treturn code;\n}\n\n/*\n * Repository properties\n */\n\nstatic void\nset_remote_branch(const char *name, const char *value, size_t valuelen)\n{\n\tif (!strcmp(name, \".remote\")) {\n\t\tstring_ncopy(repo.remote, value, valuelen);\n\n\t} else if (*repo.remote && !strcmp(name, \".merge\")) {\n\t\tif (!prefixcmp(value, \"refs/heads/\"))\n\t\t\tvalue += STRING_SIZE(\"refs/heads/\");\n\n\t\tif (!string_format(repo.upstream, \"%s/%s\", repo.remote, value))\n\t\t\trepo.upstream[0] = 0;\n\t}\n}\n\nstatic void\nset_repo_config_option(char *name, char *value, enum status_code (*cmd)(int, const char **))\n{\n\tconst char *argv[SIZEOF_ARG] = { name, \"=\" };\n\tint argc = 1 + (cmd == option_set_command);\n\tenum status_code code;\n\n\tif (!argv_from_string(argv, &argc, value))\n\t\tcode = error(\"Too many arguments\");\n\telse\n\t\tcode = cmd(argc, argv);\n\n\tif (code != SUCCESS)\n\t\twarn(\"Option 'tig.%s': %s\", name, get_status_message(code));\n}\n\nstatic struct line_info *\nparse_git_color_option(struct line_info *info, char *value)\n{\n\tconst char *argv[SIZEOF_ARG];\n\tint argc = 0;\n\tbool first_color = true;\n\tint i;\n\n\tif (!argv_from_string(argv, &argc, value))\n\t\treturn NULL;\n\n\tinfo->fg = COLOR_DEFAULT;\n\tinfo->bg = COLOR_DEFAULT;\n\tinfo->attr = 0;\n\n\tfor (i = 0; i < argc; i++) {\n\t\tint attr = 0;\n\n\t\tif (!strncmp(argv[i], \"ul\", 2)) {\n\t\t\targv[i] = \"underline\";\n\t\t}\n\t\tif (set_attribute(&attr, argv[i])) {\n\t\t\tinfo->attr |= attr;\n\n\t\t} else if (set_color(&attr, argv[i])) {\n\t\t\tif (first_color)\n\t\t\t\tinfo->fg = attr;\n\t\t\telse\n\t\t\t\tinfo->bg = attr;\n\t\t\tfirst_color = false;\n\t\t}\n\t}\n\treturn info;\n}\n\nstatic void\nset_git_color_option(const char *name, char *value)\n{\n\tstruct line_info parsed = {0};\n\tstruct line_info *color = NULL;\n\tsize_t namelen = strlen(name);\n\tint i;\n\n\tif (!opt_git_colors)\n\t\treturn;\n\n\tfor (i = 0; opt_git_colors[i]; i++) {\n\t\tstruct line_rule rule = {0};\n\t\tconst char *prefix = NULL;\n\t\tstruct line_info *info;\n\t\tconst char *alias = opt_git_colors[i];\n\t\tconst char *sep = strchr(alias, '=');\n\n\t\tif (!sep || namelen != sep - alias ||\n\t\t    string_enum_compare(name, alias, namelen))\n\t\t\tcontinue;\n\n\t\tif (!color) {\n\t\t\tcolor = parse_git_color_option(&parsed, value);\n\t\t\tif (!color)\n\t\t\t\treturn;\n\t\t}\n\n\t\tif (parse_color_name(sep + 1, &rule, &prefix) == SUCCESS &&\n\t\t    (info = add_line_rule(prefix, &rule))) {\n\t\t\tinfo->fg = parsed.fg;\n\t\t\tinfo->bg = parsed.bg;\n\t\t\tinfo->attr = parsed.attr;\n\t\t}\n\t}\n}\n\nstatic void\nset_encoding(struct encoding **encoding_ref, const char *arg, bool priority)\n{\n\tif (!strcasecmp(arg, \"utf-8\") || !strcasecmp(arg, \"utf8\"))\n\t\treturn;\n\tif (parse_encoding(encoding_ref, arg, priority) == SUCCESS)\n\t\tencoding_arg[0] = 0;\n}\n\nstatic enum status_code\nread_repo_config_option(char *name, size_t namelen, char *value, size_t valuelen, void *data)\n{\n\tif (!strcmp(name, \"i18n.commitencoding\"))\n\t\tset_encoding(&default_encoding, value, false);\n\n\telse if (!strcmp(name, \"gui.encoding\"))\n\t\tset_encoding(&default_encoding, value, true);\n\n\telse if (!strcmp(name, \"core.editor\"))\n\t\tstring_ncopy(opt_editor, value, valuelen);\n\n\telse if (!strcmp(name, \"core.worktree\"))\n\t\tstring_ncopy(repo.worktree, value, valuelen);\n\n\telse if (!strcmp(name, \"core.abbrev\"))\n\t\tparse_int(&opt_id_width, value, 0, SIZEOF_REV - 1);\n\n\telse if (!strcmp(name, \"diff.noprefix\")) {\n\t\tif (!find_option_info_by_value(&opt_diff_noprefix)->seen)\n\t\t\tparse_bool(&opt_diff_noprefix, value);\n\n\t} else if (!strcmp(name, \"status.showuntrackedfiles\"))\n\t\topt_status_show_untracked_files = !!strcmp(value, \"no\"),\n\t\topt_status_show_untracked_dirs = !strcmp(value, \"all\");\n\n\telse if (!prefixcmp(name, \"tig.color.\"))\n\t\tset_repo_config_option(name + 10, value, option_color_command);\n\n\telse if (!prefixcmp(name, \"tig.bind.\"))\n\t\tset_repo_config_option(name + 9, value, option_bind_command);\n\n\telse if (!prefixcmp(name, \"tig.\"))\n\t\tset_repo_config_option(name + 4, value, option_set_command);\n\n\telse if (!prefixcmp(name, \"color.\"))\n\t\tset_git_color_option(name + STRING_SIZE(\"color.\"), value);\n\n\telse if (*repo.head && !prefixcmp(name, \"branch.\") &&\n\t\t !strncmp(name + 7, repo.head, strlen(repo.head)))\n\t\tset_remote_branch(name + 7 + strlen(repo.head), value, valuelen);\n\n\telse if (!strcmp(name, \"diff.context\")) {\n\t\tif (!find_option_info_by_value(&opt_diff_context)->seen)\n\t\t\topt_diff_context = -atoi(value);\n\n\t} else if (!strcmp(name, \"format.pretty\")) {\n\t\tif (!prefixcmp(value, \"format:\") && strstr(value, \"%C(\"))\n\t\t\targv_append(&opt_log_options, \"--pretty=medium\");\n\n\t} else if (!strcmp(name, \"log.follow\") && opt_file_args && !opt_file_args[1])\n\t\tparse_bool(&opt_log_follow, value);\n\n\treturn SUCCESS;\n}\n\nenum status_code\nload_git_config(void)\n{\n\tenum status_code code;\n\tstruct io io;\n\tconst char *config_list_argv[] = { \"git\", \"config\", \"--list\", NULL };\n\tconst char *git_worktree = getenv(\"GIT_WORK_TREE\");\n\n\tcode = io_run_load(&io, config_list_argv, \"=\", read_repo_config_option, NULL);\n\n\tif (git_worktree && *git_worktree)\n\t\tstring_ncopy(repo.worktree, git_worktree, strlen(git_worktree));\n\n\treturn code;\n}\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/pager.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/tig.h\"\n#include \"tig/pager.h\"\n#include \"tig/options.h\"\n#include \"tig/request.h\"\n#include \"tig/line.h\"\n#include \"tig/keys.h\"\n#include \"tig/display.h\"\n#include \"tig/view.h\"\n#include \"tig/draw.h\"\n#include \"tig/diff.h\"\n\n/*\n * Pager backend\n */\n\nbool\npager_get_column_data(struct view *view, const struct line *line, struct view_column_data *column_data)\n{\n\tcolumn_data->text = box_text(line);\n\tcolumn_data->box = line->data;\n\treturn true;\n}\n\nstatic void\nadd_pager_refs(struct view *view, const char *commit_id)\n{\n\tchar buf[SIZEOF_STR];\n\tconst struct ref *list;\n\tsize_t bufpos = 0;\n\tconst char *sep = \"Refs: \";\n\n\tlist = get_ref_list(commit_id);\n\tif (!list) {\n\t\tif (view_has_flags(view, VIEW_ADD_DESCRIBE_REF) && refs_contain_tag())\n\t\t\tadd_line_text(view, sep, LINE_PP_REFS);\n\t\treturn;\n\t}\n\n\tfor (; list; list = list->next) {\n\t\tconst struct ref *ref = list;\n\t\tconst struct ref_format *fmt = get_ref_format(opt_reference_format, ref);\n\n\t\tif (!strcmp(fmt->start, \"hide:\") && !*fmt->end)\n\t\t\tcontinue;\n\n\t\tif (!string_format_from(buf, &bufpos, \"%s%s%s%s\", sep,\n\t\t\t\t\tfmt->start, ref->name, fmt->end))\n\t\t\treturn;\n\t\tsep = \", \";\n\t}\n\n\tif (bufpos == 0)\n\t\treturn;\n\n\tadd_line_text(view, buf, LINE_PP_REFS);\n}\n\nstatic struct line *\npager_wrap_line(struct view *view, const char *data, enum line_type type)\n{\n\tsize_t first_line = 0;\n\tbool has_first_line = false;\n\tsize_t datalen = strlen(data);\n\tsize_t lineno = 0;\n\n\twhile (datalen > 0 || !has_first_line) {\n\t\tint width;\n\t\tint trimmed;\n\t\tbool wrapped = !!first_line;\n\t\tsize_t linelen = utf8_length(&data, datalen, 0, &width, view->width, &trimmed, wrapped, opt_tab_size);\n\t\tstruct line *line;\n\n\t\tline = add_line_text_at_(view, view->lines, data, linelen, type, 1, wrapped);\n\t\tif (!line)\n\t\t\tbreak;\n\t\tif (!has_first_line) {\n\t\t\tfirst_line = view->lines - 1;\n\t\t\thas_first_line = true;\n\t\t}\n\n\t\tif (!wrapped)\n\t\t\tlineno = line->lineno;\n\n\t\tline->wrapped = wrapped;\n\t\tline->lineno = lineno;\n\n\t\tdatalen -= linelen;\n\t\tdata += linelen;\n\t}\n\n\treturn has_first_line ? &view->line[first_line] : NULL;\n}\n\nbool\npager_common_read(struct view *view, const char *data, enum line_type type, struct line **line_ptr)\n{\n\tstruct line *line;\n\n\tif (!data)\n\t\treturn true;\n\n\tif (opt_wrap_lines) {\n\t\tline = pager_wrap_line(view, data, type);\n\t} else {\n\t\tline = add_line_text(view, data, type);\n\t}\n\n\tif (!line)\n\t\treturn false;\n\n\tif (line_ptr)\n\t\t*line_ptr = line;\n\n\tif (line->type == LINE_COMMIT && view_has_flags(view, VIEW_ADD_PAGER_REFS)) {\n\t\tdata += STRING_SIZE(\"commit \");\n\t\twhile (*data && !isalnum((unsigned char)*data))\n\t\t\tdata++;\n\t\tadd_pager_refs(view, data);\n\t}\n\n\treturn true;\n}\n\nstatic bool\npager_read(struct view *view, struct buffer *buf, bool force_stop)\n{\n\tif (opt_pager_autoscroll && view->pos.offset + view->height == view->lines - 1)\n\t\tdo_scroll_view(view, 1);\n\n\tif (!buf) {\n\t\tif (!diff_done_highlight(view->private)) {\n\t\t\tif (!force_stop)\n\t\t\t\treport(\"Failed to run the diff-highlight program: %s\", opt_diff_highlight);\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\treturn diff_common_read(view, buf->data, view->private);\n}\n\nenum request\npager_request(struct view *view, enum request request, struct line *line)\n{\n\tenum open_flags flags = view_is_displayed(view) ? OPEN_SPLIT : OPEN_DEFAULT;\n\tint split = 0;\n\n\tif (request == REQ_EDIT)\n\t\treturn diff_common_edit(view, request, line);\n\n\tif (request != REQ_ENTER)\n\t\treturn request;\n\n\tif (line->type == LINE_COMMIT && view_has_flags(view, VIEW_OPEN_DIFF)) {\n\t\topen_diff_view(view, flags);\n\t\tsplit = 1;\n\t}\n\n\t/* Always scroll the view even if it was split. That way\n\t * you can use Enter to scroll through the log view and\n\t * split open each commit diff. */\n\tif (view == display[current_view] || !opt_focus_child)\n\t\tscroll_view(view, REQ_SCROLL_LINE_DOWN);\n\n\t/* FIXME: A minor workaround. Scrolling the view will call report_clear()\n\t * but if we are scrolling a non-current view this won't properly\n\t * update the view title. */\n\tif (split)\n\t\tupdate_view_title(view);\n\n\treturn REQ_NONE;\n}\n\nvoid\npager_select(struct view *view, struct line *line)\n{\n\tconst char *text = box_text(line);\n\n\tstring_ncopy(view->env->text, text, strlen(text));\n\n\tif (line->type == LINE_COMMIT) {\n\t\tstring_copy_rev_from_commit_line(view->env->commit, text);\n\t\tif (!view_has_flags(view, VIEW_NO_REF))\n\t\t\tstring_copy_rev(view->ref, view->env->commit);\n\t}\n}\n\nstatic enum status_code\npager_open(struct view *view, enum open_flags flags)\n{\n\tenum status_code code;\n\n\tif (!open_from_stdin(flags) && !view->lines && !(flags & OPEN_PREPARED))\n\t\treturn error(\"No pager content, press %s to run command from prompt\",\n\t\t\t     get_view_key(view, REQ_PROMPT));\n\n\tcode = begin_update(view, NULL, NULL, flags);\n\tif (code != SUCCESS)\n\t\treturn code;\n\n\treturn diff_init_highlight(view, view->private);\n}\n\nstatic struct view_ops pager_ops = {\n\t\"line\",\n\t\"\",\n\tVIEW_OPEN_DIFF | VIEW_NO_REF | VIEW_NO_GIT_DIR,\n\tsizeof(struct diff_state),\n\tpager_open,\n\tpager_read,\n\tview_column_draw,\n\tpager_request,\n\tview_column_grep,\n\tpager_select,\n\tNULL,\n\tview_column_bit(LINE_NUMBER) | view_column_bit(TEXT),\n\tpager_get_column_data,\n};\n\nDEFINE_VIEW(pager);\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/parse.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/tig.h\"\n#include \"tig/parse.h\"\n#include \"tig/map.h\"\n\nsize_t\nparse_size(const char *text)\n{\n\tsize_t size = 0;\n\n\twhile (*text == ' ')\n\t\ttext++;\n\n\twhile (isdigit((unsigned char)*text))\n\t\tsize = (size * 10) + (*text++ - '0');\n\n\treturn size;\n}\n\n/*\n * Parsing of ident lines.\n */\n\nstatic void\nparse_timesec(struct time *time, const char *sec)\n{\n\ttime->sec = (time_t) atol(sec);\n}\n\nstatic void\nparse_timezone(struct time *time, const char *zone)\n{\n\tlong tz;\n\n\ttz  = ('0' - zone[1]) * 60 * 60 * 10;\n\ttz += ('0' - zone[2]) * 60 * 60;\n\ttz += ('0' - zone[3]) * 60 * 10;\n\ttz += ('0' - zone[4]) * 60;\n\n\tif (zone[0] == '-')\n\t\ttz = -tz;\n\n\ttime->tz = tz;\n\ttime->sec -= tz;\n}\n\nvoid\nparse_author_line(char *ident, const struct ident **author, struct time *time)\n{\n\tchar *nameend = strchr(ident, '<');\n\tchar *emailend = strchr(ident, '>');\n\tconst char *name, *email = \"\";\n\n\tif (nameend && emailend)\n\t\t*nameend = *emailend = 0;\n\tname = string_trim(ident);\n\tif (nameend)\n\t\temail = string_trim(nameend + 1);\n\tif (!*name)\n\t\tname = *email ? email : unknown_ident.name;\n\tif (!*email)\n\t\temail = *name ? name : unknown_ident.email;\n\n\tif (author)\n\t\t*author = get_author(name, email);\n\n\t/* Parse epoch and timezone */\n\tif (time && emailend && emailend[1] == ' ') {\n\t\tchar *secs = emailend + 2;\n\t\tchar *zone = strchr(secs, ' ');\n\n\t\tparse_timesec(time, secs);\n\n\t\tif (zone && strlen(zone) == STRING_SIZE(\" +0700\"))\n\t\t\tparse_timezone(time, zone + 1);\n\t}\n}\n\n/*\n * Blame.\n */\n\nstatic bool\nparse_number(const char **posref, size_t *number)\n{\n\tconst char *pos = *posref;\n\n\t*posref = NULL;\n\tpos = strchr(pos + 1, ' ');\n\tif (!pos || !isdigit((unsigned char)pos[1]))\n\t\treturn false;\n\t*number = atoi(pos + 1);\n\n\t*posref = pos;\n\treturn true;\n}\n\nbool\nparse_blame_header(struct blame_header *header, const char *text)\n{\n\tconst char *pos = text + SIZEOF_REV - 2;\n\n\tif (strlen(text) <= SIZEOF_REV || pos[1] != ' ')\n\t\treturn false;\n\n\tstring_ncopy(header->id, text, SIZEOF_REV);\n\n\tif (!parse_number(&pos, &header->orig_lineno) ||\n\t    !parse_number(&pos, &header->lineno))\n\t\treturn false;\n\tif (!parse_number(&pos, &header->group))\n\t\theader->group = 0;\n\n\treturn true;\n}\n\nstatic bool\nmatch_blame_header(const char *name, char **line)\n{\n\tsize_t namelen = strlen(name);\n\tbool matched = !strncmp(name, *line, namelen);\n\n\tif (matched)\n\t\t*line += namelen;\n\n\treturn matched;\n}\n\nbool\nparse_blame_info(struct blame_commit *commit, char *author, char *committer, char *line)\n{\n\tif (match_blame_header(\"author \", &line)) {\n\t\tstring_ncopy_do(author, SIZEOF_STR, line, strlen(line));\n\n\t} else if (match_blame_header(\"author-mail \", &line)) {\n\t\tchar *end = strchr(line, '>');\n\n\t\tif (end)\n\t\t\t*end = 0;\n\t\tif (*line == '<')\n\t\t\tline++;\n\t\tcommit->author = get_author(author, line);\n\t\tauthor[0] = 0;\n\n\t} else if (match_blame_header(\"author-time \", &line)) {\n\t\tparse_timesec(&commit->author_time, line);\n\n\t} else if (match_blame_header(\"author-tz \", &line)) {\n\t\tparse_timezone(&commit->author_time, line);\n\n\t} else if (match_blame_header(\"committer \", &line)) {\n\t\tstring_ncopy_do(committer, SIZEOF_STR, line, strlen(line));\n\n\t} else if (match_blame_header(\"committer-mail \", &line)) {\n\t\tchar *end = strchr(line, '>');\n\n\t\tif (end)\n\t\t\t*end = 0;\n\t\tif (*line == '<')\n\t\t\tline++;\n\t\tcommit->committer = get_author(committer, line);\n\t\tcommitter[0] = 0;\n\n\t} else if (match_blame_header(\"committer-time \", &line)) {\n\t\tparse_timesec(&commit->commit_time, line);\n\n\t} else if (match_blame_header(\"committer-tz \", &line)) {\n\t\tparse_timezone(&commit->commit_time, line);\n\n\t} else if (match_blame_header(\"summary \", &line)) {\n\t\tstring_ncopy(commit->title, line, strlen(line));\n\n\t} else if (match_blame_header(\"previous \", &line)) {\n\t\tif (strlen(line) <= SIZEOF_REV)\n\t\t\treturn false;\n\t\tstring_copy_rev(commit->parent_id, line);\n\t\tline += SIZEOF_REV;\n\t\tcommit->parent_filename = get_path(line);\n\t\tif (!commit->parent_filename)\n\t\t\treturn true;\n\n\t} else if (match_blame_header(\"filename \", &line)) {\n\t\tcommit->filename = get_path(line);\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\n/*\n * Diff.\n */\n\nstatic bool\nparse_ulong(const char **pos_ptr, unsigned long *value, char skip, bool optional)\n{\n\tconst char *start = *pos_ptr;\n\tchar *end;\n\n\tif (*start != skip)\n\t\treturn optional;\n\n\tstart++;\n\t*value = strtoul(start, &end, 10);\n\tif (end == start)\n\t\treturn false;\n\n\twhile (isspace((unsigned char)*end))\n\t\tend++;\n\t*pos_ptr = end;\n\treturn true;\n}\n\nbool\nparse_chunk_header(struct chunk_header *header, const char *line)\n{\n\tmemset(header, 0, sizeof(*header));\n\theader->new.lines = header->old.lines = 1;\n\n\tif (!prefixcmp(line, \"@@ -\"))\n\t\tline += STRING_SIZE(\"@@ -\") - 1;\n\telse if (!prefixcmp(line, \"@@@\") &&\n\t\t (line = strstr(line, \" @@@\")))\n\t\twhile (*line != '-')\n\t\t\tline--;\n\telse\n\t\treturn false;\n\n\treturn  parse_ulong(&line, &header->old.position, '-', false) &&\n\t\tparse_ulong(&line, &header->old.lines, ',', true) &&\n\t\tparse_ulong(&line, &header->new.position, '+', false) &&\n\t\tparse_ulong(&line, &header->new.lines, ',', true);\n}\n\nbool\nparse_chunk_lineno(unsigned long *lineno, const char *chunk, int marker)\n{\n\tstruct chunk_header chunk_header;\n\n\t*lineno = 0;\n\n\tif (!parse_chunk_header(&chunk_header, chunk))\n\t\treturn false;\n\n\t*lineno = marker == '-' ? chunk_header.old.position : chunk_header.new.position;\n\treturn true;\n}\n\n/*\n * Caches.\n */\n\nstruct path_entry {\n\tchar path[1];\n};\n\nDEFINE_STRING_MAP(path_cache, struct path_entry *, path, 32)\n\n/* Small cache to reduce memory consumption. No entries are ever\n * freed. */\nconst char *\nget_path(const char *path)\n{\n\tstruct path_entry *entry = string_map_get(&path_cache, path);\n\n\tif (!entry) {\n\t\tentry = calloc(1, sizeof(*entry) + strlen(path));\n\t\tif (!entry || !string_map_put(&path_cache, path, entry)) {\n\t\t\tfree(entry);\n\t\t\treturn NULL;\n\t\t}\n\t\tstrcpy(entry->path, path);\n\t}\n\n\treturn entry->path;\n}\n\nDEFINE_STRING_MAP(author_cache, const struct ident *, key, 32)\n\n/* Small author cache to reduce memory consumption. No entries\n * are ever freed. */\nstruct ident *\nget_author(const char *name, const char *email)\n{\n\tchar key[SIZEOF_STR + SIZEOF_STR];\n\tstruct ident *ident;\n\n\tstring_format(key, \"%s%s\", email, name);\n\n\tident = string_map_get(&author_cache, key);\n\tif (ident)\n\t\treturn ident;\n\n\tident = calloc(1, sizeof(*ident));\n\tif (!ident)\n\t\treturn NULL;\n\tident->key = strdup(key);\n\tident->name = strdup(name);\n\tident->email = strdup(email);\n\tif (!ident->key || !ident->name || !ident->email ||\n\t    !string_map_put(&author_cache, key, ident)) {\n\t\tfree((void *) ident->key);\n\t\tfree((void *) ident->name);\n\t\tfree((void *) ident->email);\n\t\tfree(ident);\n\t\treturn NULL;\n\t}\n\n\treturn ident;\n}\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/prompt.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/tig.h\"\n#include \"tig/repo.h\"\n#include \"tig/view.h\"\n#include \"tig/draw.h\"\n#include \"tig/display.h\"\n#include \"tig/options.h\"\n#include \"tig/prompt.h\"\n#include \"tig/pager.h\"\n#include \"tig/types.h\"\n\n#ifdef HAVE_READLINE\n#include <readline/readline.h>\n#include <readline/history.h>\n#endif /* HAVE_READLINE */\n\nstatic char *\nprompt_input(const char *prompt, struct input *input)\n{\n\tenum input_status status = INPUT_OK;\n\tunsigned char chars_length[SIZEOF_STR];\n\tstruct key key;\n\tsize_t promptlen = strlen(prompt);\n\tint pos = 0, chars = 0;\n\tint last_buf_length = promptlen ? -1 : promptlen;\n\n\tinput->buf[0] = 0;\n\tinput->context[0] = 0;\n\n\tif (strlen(prompt) > 0)\n\t\tcurs_set(1);\n\n\twhile (status == INPUT_OK || status == INPUT_SKIP) {\n\t\tint buf_length = strlen(input->buf) + promptlen;\n\t\tint offset = pos || buf_length != last_buf_length ? pos + promptlen : -1;\n\n\t\tlast_buf_length = buf_length;\n\t\tif (offset >= 0)\n\t\t\tupdate_status_with_context(input->context, \"%s%.*s\", prompt, pos, input->buf);\n\t\telse\n\t\t\twmove(status_win, 0, buf_length);\n\n\t\tif (get_input(offset, &key) == OK) {\n\t\t\tint len = strlen(key.data.bytes);\n\n\t\t\tif (pos + len >= sizeof(input->buf)) {\n\t\t\t\treport(\"Input string too long\");\n\t\t\t\tcurs_set(0);\n\t\t\t\treturn NULL;\n\t\t\t}\n\n\t\t\tstring_ncopy_do(input->buf + pos, sizeof(input->buf) - pos, key.data.bytes, len);\n\t\t\tpos += len;\n\t\t\tchars_length[chars++] = len;\n\t\t\tstatus = input->handler(input, &key);\n\t\t\tif (status != INPUT_OK) {\n\t\t\t\tpos -= len;\n\t\t\t\tchars--;\n\t\t\t} else {\n\t\t\t\tint changed_pos = strlen(input->buf);\n\n\t\t\t\tif (changed_pos != pos) {\n\t\t\t\t\tpos = changed_pos;\n\t\t\t\t\tchars_length[chars - 1] = changed_pos - (pos - len);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tstatus = input->handler(input, &key);\n\t\t\tif (status == INPUT_DELETE) {\n\t\t\t\tint len = chars_length[--chars];\n\n\t\t\t\tpos -= len;\n\t\t\t\tstatus = INPUT_OK;\n\t\t\t} else {\n\t\t\t\tint changed_pos = strlen(input->buf);\n\n\t\t\t\tif (changed_pos != pos) {\n\t\t\t\t\tpos = changed_pos;\n\t\t\t\t\tchars_length[chars++] = changed_pos - pos;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tinput->buf[pos] = 0;\n\t}\n\n\tcurs_set(0);\n\treport_clear();\n\n\tif (status == INPUT_CANCEL)\n\t\treturn NULL;\n\n\tinput->buf[pos++] = 0;\n\n\treturn input->buf;\n}\n\nenum input_status\nprompt_default_handler(struct input *input, struct key *key)\n{\n\tswitch (key_to_value(key)) {\n\tcase KEY_RETURN:\n\tcase KEY_ENTER:\n\tcase '\\n':\n\t\treturn *input->buf || input->allow_empty ? INPUT_STOP : INPUT_CANCEL;\n\n\tcase KEY_BACKSPACE:\n\t\treturn *input->buf ? INPUT_DELETE : INPUT_CANCEL;\n\n\tcase KEY_ESC:\n\t\treturn INPUT_CANCEL;\n\n\tdefault:\n\t\treturn INPUT_SKIP;\n\t}\n}\n\nstatic enum input_status\nprompt_script_handler(struct input *input, struct key *key)\n{\n\tswitch (key_to_value(key)) {\n\tcase KEY_RETURN:\n\tcase KEY_ENTER:\n\tcase '\\n':\n\t\treturn INPUT_STOP;\n\n\tdefault:\n\t\treturn INPUT_OK;\n\t}\n}\n\nstatic enum input_status\nprompt_yesno_handler(struct input *input, struct key *key)\n{\n\tunsigned long c = key_to_unicode(key);\n\n\tif (c == 'y' || c == 'Y')\n\t\treturn INPUT_STOP;\n\tif (c == 'n' || c == 'N' || key_to_control(key) == 'C')\n\t\treturn INPUT_CANCEL;\n\treturn prompt_default_handler(input, key);\n}\n\nbool\nprompt_yesno(const char *prompt)\n{\n\tchar prompt2[SIZEOF_STR];\n\tstruct input input = { prompt_yesno_handler, false, NULL };\n\n\tif (!string_format(prompt2, \"%s [Yy/Nn]\", prompt))\n\t\treturn false;\n\n\treturn !!prompt_input(prompt2, &input);\n}\n\nstruct incremental_input {\n\tstruct input input;\n\tinput_handler handler;\n\tbool edit_mode;\n};\n\nstatic enum input_status\nread_prompt_handler(struct input *input, struct key *key)\n{\n\tstruct incremental_input *incremental = (struct incremental_input *) input;\n\n\tif (incremental->edit_mode && !key->modifiers.multibytes)\n\t\treturn prompt_default_handler(input, key);\n\n\tif (!unicode_width(key_to_unicode(key), 8))\n\t\treturn INPUT_SKIP;\n\n\tif (!incremental->handler)\n\t\treturn INPUT_OK;\n\n\treturn incremental->handler(input, key);\n}\n\nchar *\nread_prompt_incremental(const char *prompt, bool edit_mode, bool allow_empty, input_handler handler, void *data)\n{\n\tstatic struct incremental_input incremental = { { read_prompt_handler } };\n\n\tincremental.input.allow_empty = allow_empty;\n\tincremental.input.data = data;\n\tincremental.input.buf[0] = 0;\n\tincremental.input.context[0] = 0;\n\tincremental.handler = handler;\n\tincremental.edit_mode = edit_mode;\n\n\treturn prompt_input(prompt, (struct input *) &incremental);\n}\n\n#ifdef HAVE_READLINE\nstatic volatile bool prompt_interrupted = false;\n\nstatic void\nreadline_display(void)\n{\n\tupdate_status(\"%s%s\", rl_display_prompt, rl_line_buffer);\n\twmove(status_win, 0, strlen(rl_display_prompt) + rl_point);\n\twrefresh(status_win);\n}\n\nstatic char *\nreadline_variable_generator(const char *text, int state)\n{\n\tstatic const char *vars[] = {\n#define FORMAT_VAR(type, name, ifempty, initval) \"%(\" #name \")\",\n\t\tARGV_ENV_INFO(FORMAT_VAR)\n#undef FORMAT_VAR\n#define FORMAT_VAR(type, name) \"%(repo:\" #name \")\",\n\t\tREPO_INFO(FORMAT_VAR)\n#undef FORMAT_VAR\n\t\tNULL\n\t};\n\n\tstatic int index, len;\n\tconst char *name;\n\tchar *variable = NULL; /* No match */\n\n\t/* If it is a new word to complete, initialize */\n\tif (!state) {\n\t\tindex = 0;\n\t\tlen = strlen(text);\n\t}\n\n\t/* Return the next name which partially matches */\n\twhile ((name = vars[index])) {\n\t\tindex++;\n\n\t\t/* Complete or format a variable */\n\t\tif (strncmp(name, text, len) == 0) {\n\t\t\tif (strlen(name) > len)\n\t\t\t\tvariable = strdup(name);\n\t\t\telse\n\t\t\t\tvariable = argv_format_arg(&argv_env, text);\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn variable;\n}\n\nstatic char *\nreadline_action_generator(const char *text, int state)\n{\n\tstatic const char *actions[] = {\n\t\t\"!\",\n\t\t\"source\",\n\t\t\"color\",\n\t\t\"bind\",\n\t\t\"set\",\n\t\t\"toggle\",\n\t\t\"goto\",\n\t\t\"save-display\",\n\t\t\"save-options\",\n\t\t\"exec\",\n\t\t\"echo\",\n#define REQ_GROUP(help)\n#define REQ_(req, help)\t#req\n\t\tREQ_INFO,\n#undef\tREQ_GROUP\n#undef\tREQ_\n\t\tNULL\n\t};\n\n\tstatic int index, len;\n\tconst char *name;\n\tchar *match = NULL; /* No match */\n\n\t/* If it is a new word to complete, initialize */\n\tif (!state) {\n\t\tindex = 0;\n\t\tlen = strlen(text);\n\t}\n\n\t/* Return the next name which partially matches */\n\twhile ((name = actions[index])) {\n\t\tname = enum_name(name);\n\t\tindex++;\n\n\t\tif (strncmp(name, text, len) == 0) {\n\t\t\t/* Ignore exact completion */\n\t\t\tif (strlen(name) > len)\n\t\t\t\tmatch = strdup(name);\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn match;\n}\n\nstatic char *\nreadline_set_generator(const char *text, int state)\n{\n\tstatic const char *words[] = {\n#define DEFINE_OPTION_NAME(name, type, flags) #name \" = \",\n\t\tOPTION_INFO(DEFINE_OPTION_NAME)\n#undef DEFINE_OPTION_NAME\n\t\tNULL\n\t};\n\n\tstatic int index, len;\n\tconst char *name;\n\tchar *match = NULL; /* No match */\n\n\t/* If it is a new word to complete, initialize */\n\tif (!state) {\n\t\tindex = 0;\n\t\tlen = strlen(text);\n\t}\n\n\t/* Return the next name which partially matches */\n\twhile ((name = words[index])) {\n\t\tname = enum_name(name);\n\t\tindex++;\n\n\t\tif (strncmp(name, text, len) == 0) {\n\t\t\t/* Ignore exact completion */\n\t\t\tif (strlen(name) > len)\n\t\t\t\tmatch = strdup(name);\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn match;\n}\n\nstatic char *\nreadline_toggle_generator(const char *text, int state)\n{\n\tstatic const char **words;\n\tstatic int index, len;\n\tconst char *name;\n\tchar *match = NULL; /* No match */\n\n\tif (!words) {\n\t\t/* TODO: Only complete column options that are defined\n\t\t * for the view. */\n\n#define DEFINE_OPTION_WORD(name, type, flags) argv_append(&words, #name);\n#define DEFINE_COLUMN_OPTIONS_WORD(name, type, flags) #name,\n#define DEFINE_COLUMN_OPTIONS_WORDS(name, id, options) \\\n\tif (VIEW_COLUMN_##id != VIEW_COLUMN_SECTION) { \\\n\t\tconst char *vars[] = { \\\n\t\t\toptions(DEFINE_COLUMN_OPTIONS_WORD) \\\n\t\t}; \\\n\t\tchar buf[SIZEOF_STR]; \\\n\t\tint i; \\\n\t\tfor (i = 0; i < ARRAY_SIZE(vars); i++) { \\\n\t\t\tif (enum_name_prefixed(buf, sizeof(buf), #name, vars[i])) \\\n\t\t\t\targv_append(&words, buf); \\\n\t\t} \\\n\t}\n\n\t\tOPTION_INFO(DEFINE_OPTION_WORD)\n\t\tCOLUMN_OPTIONS(DEFINE_COLUMN_OPTIONS_WORDS);\n\t}\n\n\t/* If it is a new word to complete, initialize */\n\tif (!state) {\n\t\tindex = 0;\n\t\tlen = strlen(text);\n\t}\n\n\t/* Return the next name which partially matches */\n\twhile ((name = words[index])) {\n\t\tname = enum_name(name);\n\t\tindex++;\n\n\t\tif (strncmp(name, text, len) == 0) {\n\t\t\t/* Ignore exact completion */\n\t\t\tif (strlen(name) > len)\n\t\t\t\tmatch = strdup(name);\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn match;\n}\n\nstatic int\nreadline_getc(FILE *stream)\n{\n\treturn get_input_char();\n}\n\nstatic char **\nreadline_completion(const char *text, int start, int end)\n{\n\t/* Do not append a space after a completion */\n\trl_completion_suppress_append = 1;\n\n\t/*\n\t * If the word is at the start of the line,\n\t * then it is a tig action to complete.\n\t */\n\tif (start == 0)\n\t\treturn rl_completion_matches(text, readline_action_generator);\n\n\t/*\n\t * If the line begins with \"toggle\", then we complete toggle options.\n\t */\n\tif (start >= 7 && strncmp(rl_line_buffer, \"toggle \", 7) == 0)\n\t\treturn rl_completion_matches(text, readline_toggle_generator);\n\n\t/*\n\t * If the line begins with \"set\", then we complete set options.\n\t * (unless it is already completed)\n\t */\n\tif (start >= 4 && strncmp(rl_line_buffer, \"set \", 4) == 0 &&\n\t\t\t!strchr(rl_line_buffer, '='))\n\t\treturn rl_completion_matches(text, readline_set_generator);\n\n\t/*\n\t * Otherwise it might be a variable name...\n\t */\n\tif (strncmp(text, \"%(\", 2) == 0)\n\t\treturn rl_completion_matches(text, readline_variable_generator);\n\n\t/*\n\t * ... or finally fall back to filename completion.\n\t */\n\treturn NULL;\n}\n\nstatic void\nreadline_display_matches(char **matches, int num_matches, int max_length)\n{\n\tunsigned int i;\n\n\twmove(status_win, 0, 0);\n\twaddstr(status_win, \"matches: \");\n\n\t/* matches[0] is the incomplete word */\n\tfor (i = 1; i < num_matches + 1; ++i) {\n\t\twaddstr(status_win, matches[i]);\n\t\twaddch(status_win, ' ');\n\t}\n\n\twgetch(status_win);\n\twrefresh(status_win);\n}\n\nstatic void\nreadline_init(void)\n{\n\t/* Allow conditional parsing of the ~/.inputrc file. */\n\trl_readline_name = \"tig\";\n\n\t/* Word break characters (we removed '(' to match variables) */\n\trl_basic_word_break_characters = \" \\t\\n\\\"\\\\'`@$><=;|&{\";\n\n\t/* Custom display function */\n\trl_redisplay_function = readline_display;\n\trl_getc_function = readline_getc;\n\n\t/* Completion support */\n\trl_attempted_completion_function = readline_completion;\n\n\trl_completion_display_matches_hook = readline_display_matches;\n\n\t/* Let ncurses deal with the LINES and COLUMNS environment variables */\n\trl_change_environment = 0;\n\trl_catch_sigwinch = 0;\n\trl_deprep_term_function = NULL;\n\trl_prep_term_function = NULL;\n}\n\nstatic void sigint_absorb_handler(int sig) {\n\tsignal(SIGINT, SIG_DFL);\n\tprompt_interrupted = true;\n\trl_done = 1;\n}\n\nchar *\nread_prompt(const char *prompt)\n{\n\tstatic char *line = NULL;\n\tHIST_ENTRY *last_entry;\n\n\tif (line) {\n\t\tfree(line);\n\t\tline = NULL;\n\t}\n\n\tcurs_set(1);\n\tif (signal(SIGINT, sigint_absorb_handler) == SIG_ERR)\n\t\tdie(\"Failed to setup sigint handler\");\n\tnoraw();\n\tcbreak();\n\tline = readline(prompt);\n\traw();\n\tif (signal(SIGINT, SIG_DFL) == SIG_ERR)\n\t\tdie(\"Failed to remove sigint handler\");\n\tcurs_set(0);\n\n\t/* readline can leave the virtual cursor out-of-place */\n\tset_cursor_pos(0, 0);\n\n\tif (prompt_interrupted) {\n\t\tfree(line);\n\t\tline = NULL;\n\t\treport_clear();\n\t}\n\n\tprompt_interrupted = false;\n\n\tlast_entry = history_get(history_length);\n\tif (line && *line &&\n\t    (!last_entry || strcmp(line, last_entry->line)))\n\t\tadd_history(line);\n\n\treturn line;\n}\n\nstatic const char *\nprompt_histfile(void)\n{\n\tstatic char path[SIZEOF_STR] = \"\";\n\tconst char *xdg_data_home = getenv(\"XDG_DATA_HOME\");\n\tconst char *home = getenv(\"HOME\");\n\tint fd;\n\n\tif (!xdg_data_home || !*xdg_data_home) {\n\t\tif (!string_format(path, \"%s/.local/share/tig/history\", home))\n\t\t\tdie(\"Failed to expand $HOME\");\n\t} else if (!string_format(path, \"%s/tig/history\", xdg_data_home))\n\t\tdie(\"Failed to expand $XDG_DATA_HOME\");\n\telse {\n\t\tchar path_copy[SIZEOF_STR];\n\t\tstrncpy(path_copy, path, SIZEOF_STR);\n\t\tmkdir(dirname(path_copy), 0777);\n\t}\n\n\tfd = open(path, O_RDWR | O_CREAT | O_APPEND, 0666);\n\tif (fd > 0)\n\t\tclose(fd);\n\telse if (!string_format(path, \"%s/.tig_history\", home))\n\t\tdie(\"Failed to expand $HOME\");\n\n\treturn path;\n}\n\nstatic int\nhistory_go_line(int rel_line_num)\n{\n\t/* history_set_pos confusingly takes an absolute index. Expose a\n\t * \"relative offset\" version consistent with the rest of readline.\n\t */\n\treturn history_set_pos(rel_line_num - history_base);\n}\n\nstatic void\nprompt_history_dedupe(void)\n{\n\tHIST_ENTRY *uniq_entry, *earlier_entry;\n\tint uniq_lineno;\n\n\tusing_history();\n\tuniq_lineno = history_length;\n\n\twhile (uniq_lineno >= history_base) {\n\t\thistory_go_line(uniq_lineno);\n\t\tuniq_entry = current_history();\n\t\tif (!uniq_entry)\n\t\t\tbreak;\n\t\twhile ((earlier_entry = previous_history())) {\n\t\t\tif (!strcmp(earlier_entry->line, uniq_entry->line)\n\t\t\t    && ((earlier_entry = remove_history(where_history())))) {\n\t\t\t\tfree_history_entry(earlier_entry);\n\t\t\t\tuniq_lineno--;\n\t\t\t}\n\t\t}\n\t\tuniq_lineno--;\n\t}\n\n\t/* defensive hard reset */\n\tusing_history();\n\thistory_go_line(history_length);\n}\n\nstatic void\nprompt_teardown(void)\n{\n\tif (opt_history_size <= 0)\n\t\treturn;\n\n\tprompt_history_dedupe();\n\twrite_history(prompt_histfile());\n}\n\nvoid\nprompt_init(void)\n{\n\tHIST_ENTRY *last_entry;\n\n\treadline_init();\n\n\tif (opt_history_size <= 0)\n\t\treturn;\n\n\tusing_history();\n\tstifle_history(opt_history_size);\n\tread_history(prompt_histfile());\n\tif (atexit(prompt_teardown))\n\t\tdie(\"Failed to register prompt_teardown\");\n\n\tlast_entry = history_get(history_length);\n\tif (last_entry)\n\t\tstring_ncopy(argv_env.search, last_entry->line, strlen(last_entry->line));\n}\n#else\nchar *\nread_prompt(const char *prompt)\n{\n\treturn read_prompt_incremental(prompt, true, true, NULL, NULL);\n}\n\nvoid\nprompt_init(void)\n{\n}\n#endif /* HAVE_READLINE */\n\nbool\nprompt_menu(const char *prompt, const struct menu_item *items, int *selected)\n{\n\tenum input_status status = INPUT_OK;\n\tchar buf[128];\n\tstruct key key;\n\tint size = 0;\n\n\twhile (items[size].text)\n\t\tsize++;\n\n\tassert(size > 0);\n\n\tcurs_set(1);\n\twhile (status == INPUT_OK) {\n\t\tconst struct menu_item *item = &items[*selected];\n\t\tconst char hotkey[] = { ' ', '[', (char) item->hotkey, ']', 0 };\n\t\tint i;\n\n\t\tif (!string_format(buf, \"(%d of %d)\", *selected + 1, size))\n\t\t\tbuf[0] = 0;\n\n\t\tupdate_status_with_context(buf, \"%s %s%s\", prompt, item->text,\n\t\t\t      item->hotkey ? hotkey : \"\");\n\n\t\tswitch (get_input(COLS - 1, &key)) {\n\t\tcase KEY_RETURN:\n\t\tcase KEY_ENTER:\n\t\tcase '\\n':\n\t\t\tstatus = INPUT_STOP;\n\t\t\tbreak;\n\n\t\tcase KEY_LEFT:\n\t\tcase KEY_UP:\n\t\t\t*selected = *selected - 1;\n\t\t\tif (*selected < 0)\n\t\t\t\t*selected = size - 1;\n\t\t\tbreak;\n\n\t\tcase KEY_RIGHT:\n\t\tcase KEY_DOWN:\n\t\t\t*selected = (*selected + 1) % size;\n\t\t\tbreak;\n\n\t\tcase KEY_ESC:\n\t\t\tstatus = INPUT_CANCEL;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tif (key_to_control(&key) == 'C') {\n\t\t\t\tstatus = INPUT_CANCEL;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tfor (i = 0; items[i].text; i++)\n\t\t\t\tif (items[i].hotkey == key.data.bytes[0]) {\n\t\t\t\t\t*selected = i;\n\t\t\t\t\tstatus = INPUT_STOP;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t}\n\t}\n\tcurs_set(0);\n\n\treport_clear();\n\n\treturn status != INPUT_CANCEL;\n}\n\nstatic struct option_info option_toggles[] = {\n#define DEFINE_OPTION_TOGGLES(name, type, flags) { #name, STRING_SIZE(#name), #type, &opt_ ## name, flags },\n\tOPTION_INFO(DEFINE_OPTION_TOGGLES)\n};\n\nstatic bool\nfind_arg(const char *argv[], const char *arg)\n{\n\tint i;\n\n\tfor (i = 0; argv && argv[i]; i++)\n\t\tif (!strcmp(argv[i], arg))\n\t\t\treturn true;\n\treturn false;\n}\n\nstatic enum status_code\nprompt_toggle_option(struct view *view, const char *argv[], const char *prefix,\n\t\t     struct option_info *toggle, enum view_flag *flags)\n{\n/* Define a partial version of success() to format the option name as a suffix to the view name,\n * thereby reducing the arguments needed by success() to only the option value and its format string.\n */\n#define Success(opt_fmt, opt_val) *prefix \\\n\t? success(\":set %s-view-%s = \" opt_fmt, view->name, name, opt_val) \\\n\t: success(\":set %s = \" opt_fmt, name, opt_val)\n\n\tchar name[SIZEOF_STR];\n\n\tif (!enum_name_prefixed(name, sizeof(name), prefix, toggle->name))\n\t\treturn error(\"Failed to toggle option %s\", toggle->name);\n\n\t*flags = toggle->flags;\n\n\tif (!strcmp(toggle->type, \"bool\")) {\n\t\tbool *opt = toggle->value;\n\n\t\t*opt = !*opt;\n\t\tif (opt == &opt_mouse)\n\t\t\tenable_mouse(*opt);\n\t\treturn Success(\"%s\", *opt ? \"yes\" : \"no\");\n\n\t} else if (!strncmp(toggle->type, \"enum\", 4)) {\n\t\tconst char *type = toggle->type + STRING_SIZE(\"enum \");\n\t\tenum author *opt = toggle->value;\n\t\tconst struct enum_map *map = find_enum_map(type);\n\n\t\t*opt = (*opt + 1) % map->size;\n\t\treturn Success(\"%s\", enum_name(map->entries[*opt].name));\n\n\t} else if (!strcmp(toggle->type, \"int\")) {\n\t\tconst char *arg = argv[2] ? argv[2] : \"1\";\n\t\tint diff = atoi(arg);\n\t\tint *opt = toggle->value;\n\n\t\tif (!diff)\n\t\t\tdiff = *arg == '-' ? -1 : 1;\n\n\t\tif (opt == &opt_diff_context && *opt < 0)\n\t\t\t*opt = -*opt;\n\t\tif (opt == &opt_diff_context && diff < 0) {\n\t\t\tif (!*opt)\n\t\t\t\treturn error(\"Diff context cannot be less than zero\");\n\t\t\tif (*opt < -diff)\n\t\t\t\tdiff = -*opt;\n\t\t}\n\n\t\tif (strstr(name, \"commit-title-overflow\")) {\n\t\t\t*opt = *opt ? -*opt : 50;\n\t\t\tif (*opt < 0)\n\t\t\t\treturn Success(\"%s\", \"no\");\n\t\t\tdiff = 0;\n\t\t}\n\n\t\t*opt += diff;\n\t\treturn Success(\"%d\", *opt);\n\n\t} else if (!strcmp(toggle->type, \"double\")) {\n\t\tconst char *arg = argv[2] ? argv[2] : \"1.0\";\n\t\tdouble *opt = toggle->value;\n\t\tint sign = 1;\n\t\tdouble diff;\n\n\t\tif (*arg == '-') {\n\t\t\tsign = -1;\n\t\t\targ++;\n\t\t}\n\n\t\tif (parse_step(&diff, arg) != SUCCESS)\n\t\t\tdiff = strtod(arg, NULL);\n\n\t\t*opt += sign * diff;\n\t\treturn Success(\"%.2f\", *opt);\n\n\t} else if (!strcmp(toggle->type, \"const char **\")) {\n\t\tconst char ***opt = toggle->value;\n\t\tbool found = true;\n\t\tint i;\n\n\t\tif (argv_size(argv) <= 2) {\n\t\t\tif (*opt) {\n\t\t\t\targv_free(*opt);\n\t\t\t\t(*opt)[0] = NULL;\n\t\t\t}\n\t\t\treturn SUCCESS;\n\t\t}\n\n\t\tfor (i = 2; argv[i]; i++) {\n\t\t\tif (!find_arg(*opt, argv[i])) {\n\t\t\t\tfound = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (found) {\n\t\t\tint next, pos;\n\n\t\t\tfor (next = 0, pos = 0; (*opt)[pos]; pos++) {\n\t\t\t\tconst char *arg = (*opt)[pos];\n\n\t\t\t\tif (find_arg(argv + 2, arg)) {\n\t\t\t\t\tfree((void *) arg);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t(*opt)[next++] = arg;\n\t\t\t}\n\n\t\t\t(*opt)[next] = NULL;\n\n\t\t} else if (!argv_copy(opt, argv + 2)) {\n\t\t\treturn ERROR_OUT_OF_MEMORY;\n\t\t}\n\t\treturn SUCCESS;\n\n\t} else {\n\t\treturn error(\"Unsupported `:toggle %s` (%s)\", name, toggle->type);\n\t}\n#undef Success\n}\n\nstatic enum status_code\nprompt_toggle(struct view *view, const char *argv[], enum view_flag *flags)\n{\n\tconst char *option = argv[1];\n\tsize_t optionlen = option ? strlen(option) : 0;\n\tstruct option_info template;\n\tstruct option_info *toggle;\n\tstruct view_column *column;\n\tconst char *column_name;\n\n\tif (!option)\n\t\treturn error(\"%s\", \"No option name given to :toggle\");\n\n\tif (enum_equals_static(\"sort-field\", option, optionlen) ||\n\t    enum_equals_static(\"sort-order\", option, optionlen)) {\n\t\tif (!view_has_flags(view, VIEW_SORTABLE)) {\n\t\t\treturn error(\"Sorting is not yet supported for the %s view\", view->name);\n\t\t} else {\n\t\t\tbool sort_field = enum_equals_static(\"sort-field\", option, optionlen);\n\t\t\tstruct sort_state *sort = &view->sort;\n\n\t\t\tsort_view(view, sort_field);\n\t\t\treturn success(\"set %s = %s\", option,\n\t\t\t\tsort_field ? view_column_name(get_sort_field(view))\n\t\t\t\t\t   : sort->reverse ? \"descending\" : \"ascending\");\n\t\t}\n\t}\n\n\ttoggle = find_option_info(option_toggles, ARRAY_SIZE(option_toggles), \"\", option);\n\tif (toggle) {\n\t\tif ((view_has_flags(view, VIEW_FILE_FILTER) &&\n\t\t     !strcmp(toggle->name, \"file_filter\")) ||\n\t\t    (view_has_flags(view, VIEW_REV_FILTER) &&\n\t\t     !strcmp(toggle->name, \"rev_filter\")))\n\t\t\tstring_copy_rev(view->env->goto_id, view->env->commit);\n\t\treturn prompt_toggle_option(view, argv, \"\", toggle, flags);\n\t}\n\n\tfor (column = view->columns; column; column = column->next) {\n\t\ttoggle = find_column_option_info(column->type, &column->opt, option, &template, &column_name);\n\t\tif (toggle)\n\t\t\treturn prompt_toggle_option(view, argv, column_name, toggle, flags);\n\t}\n\n\treturn error(\"`:toggle %s` not supported\", option);\n}\n\nstatic enum view_flag\nprompt_option_flags(struct view *view, const char *option)\n{\n\tstruct option_info template;\n\tstruct option_info *toggle;\n\tstruct view_column *column;\n\tconst char *column_name;\n\n\ttoggle = find_option_info(option_toggles, ARRAY_SIZE(option_toggles), \"\", option);\n\n\tif (!toggle || !toggle->flags) {\n\t\tconst char *prefixed;\n\n\t\tif ((prefixed = strstr(option, \"-view-\"))) {\n\t\t\toption = prefixed + STRING_SIZE(\"-view-\");\n\t\t\tfor (column = view->columns; column; column = column->next) {\n\t\t\t\ttoggle = find_column_option_info(column->type, &column->opt,\n\t\t\t\t\t\t\t\t option, &template, &column_name);\n\t\t\t\tif (toggle)\n\t\t\t\t\treturn toggle->flags;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (toggle)\n\t\treturn toggle->flags;\n\n\treturn VIEW_NO_FLAGS;\n}\n\nstatic void\nprompt_update_display(enum view_flag flags)\n{\n\tstruct view *view;\n\tint i;\n\n\tif (flags & VIEW_RESET_DISPLAY) {\n\t\tresize_display();\n\t\tredraw_display(true);\n\t}\n\n\tforeach_displayed_view(view, i) {\n\t\tif (view_has_flags(view, flags) && view_can_refresh(view))\n\t\t\treload_view(view);\n\t\telse\n\t\t\tredraw_view(view);\n\t}\n}\n\nenum request\nrun_prompt_command(struct view *view, const char *argv[])\n{\n\tenum request request;\n\tconst char *cmd = argv[0];\n\tsize_t cmdlen = cmd ? strlen(cmd) : 0;\n\n\tif (!cmd)\n\t\treturn REQ_NONE;\n\n\tif (string_isnumber(cmd)) {\n\t\tint lineno = view->pos.lineno + 1;\n\n\t\tif (parse_int(&lineno, cmd, 0, view->lines) == SUCCESS) {\n\t\t\tif (!lineno)\n\t\t\t\tlineno = 1;\n\t\t\tselect_view_line(view, lineno - 1);\n\t\t\treport_clear();\n\t\t} else {\n\t\t\treport(\"Unable to parse '%s' as a line number\", cmd);\n\t\t}\n\t} else if (iscommit(cmd)) {\n\t\tgoto_id(view, cmd, true, true);\n\t\treturn REQ_NONE;\n\n\t} else if (cmdlen > 1 && (cmd[0] == '/' || cmd[0] == '?')) {\n\t\tchar search[SIZEOF_STR];\n\n\t\tif (!argv_to_string(argv, search, sizeof(search), \" \")) {\n\t\t\treport(\"Failed to copy search string\");\n\t\t\treturn REQ_NONE;\n\t\t}\n\n\t\tif (!strcmp(search + 1, view->env->search))\n\t\t\treturn cmd[0] == '/' ? REQ_FIND_NEXT : REQ_FIND_PREV;\n\n\t\tstring_ncopy(view->env->search, search + 1, strlen(search + 1));\n\t\treturn cmd[0] == '/' ? REQ_FIND_NEXT : REQ_FIND_PREV;\n\n\t} else if (cmdlen > 1 && cmd[0] == '!') {\n\t\tstruct view *next = &pager_view;\n\t\tbool copied;\n\n\t\t/* Trim the leading '!'. */\n\t\targv[0] = cmd + 1;\n\t\tcopied = argv_format(view->env, &next->argv, argv, argv_flag_file_filter | argv_flag_rev_filter);\n\t\targv[0] = cmd;\n\n\t\tif (!copied) {\n\t\t\treport(\"Argument formatting failed\");\n\t\t} else {\n\t\t\t/* When running random commands, initially show the\n\t\t\t * command in the title. However, it maybe later be\n\t\t\t * overwritten if a commit line is selected. */\n\t\t\targv_to_string(next->argv, next->ref, sizeof(next->ref), \" \");\n\n\t\t\tnext->dir = NULL;\n\t\t\topen_pager_view(view, OPEN_PREPARED | OPEN_WITH_STDERR);\n\t\t}\n\n\t} else if (!strcmp(cmd, \"goto\")) {\n\t\tif (!argv[1] || !strlen(argv[1]))\n\t\t\treport(\"goto requires an argument\");\n\t\telse\n\t\t\tgoto_id(view, argv[1], true, true);\n\t\treturn REQ_NONE;\n\n\t} else if (!strcmp(cmd, \"echo\")) {\n\t\tconst char **fmt_argv = NULL;\n\t\tchar text[SIZEOF_STR] = \"\";\n\n\t\tif (argv[1]\n\t\t    && strlen(argv[1]) > 0\n\t\t    && (!argv_format(view->env, &fmt_argv, &argv[1], argv_flag_file_filter | argv_flag_rev_filter)\n\t\t\t|| !argv_to_string(fmt_argv, text, sizeof(text), \" \")\n\t\t\t)) {\n\t\t\treport(\"Failed to format echo string\");\n\t\t\treturn REQ_NONE;\n\t\t}\n\n\t\treport(\"%s\", text);\n\t\treturn REQ_NONE;\n\n\t} else if (!strcmp(cmd, \"save-display\")) {\n\t\tconst char *path = argv[1] ? argv[1] : \"tig-display.txt\";\n\n\t\tif (!save_display(path))\n\t\t\treport(\"Failed to save screen to %s\", path);\n\t\telse\n\t\t\treport(\"Saved screen to %s\", path);\n\n\t} else if (!strcmp(cmd, \"save-view\")) {\n\t\tconst char *path = argv[1] ? argv[1] : \"tig-view.txt\";\n\n\t\tif (!save_view(view, path))\n\t\t\treport(\"Failed to save view to %s\", path);\n\t\telse\n\t\t\treport(\"Saved view to %s\", path);\n\n\t} else if (!strcmp(cmd, \"save-options\")) {\n\t\tconst char *path = argv[1] ? argv[1] : \"tig-options.txt\";\n\t\tenum status_code code = save_options(path);\n\n\t\tif (code != SUCCESS)\n\t\t\treport(\"Failed to save options: %s\", get_status_message(code));\n\t\telse\n\t\t\treport(\"Saved options to %s\", path);\n\n\t} else if (!strcmp(cmd, \"exec\")) {\n\t\t// argv may be allocated and mutations below will cause\n\t\t// free() to error out so backup and restore. :(\n\t\tconst char *cmd = argv[1];\n\t\tstruct run_request req = { view->keymap, {0}, argv + 1 };\n\t\tenum status_code code = parse_run_request_flags(&req.flags, argv + 1);\n\n\t\tif (code != SUCCESS) {\n\t\t\targv[1] = cmd;\n\t\t\treport(\"Failed to execute command: %s\", get_status_message(code));\n\t\t} else {\n\t\t\trequest = exec_run_request(view, &req);\n\t\t\targv[1] = cmd;\n\t\t\treturn request;\n\t\t}\n\n\t} else if (!strcmp(cmd, \"toggle\")) {\n\t\tenum view_flag flags = VIEW_NO_FLAGS;\n\t\tenum status_code code = prompt_toggle(view, argv, &flags);\n\t\tconst char *action = get_status_message(code);\n\n\t\tif (code != SUCCESS) {\n\t\t\treport(\"%s\", action);\n\t\t\treturn REQ_NONE;\n\t\t}\n\n\t\tprompt_update_display(flags);\n\n\t\tif (*action)\n\t\t\treport(\"%s\", action);\n\n\t} else if (!strcmp(cmd, \"script\")) {\n\t\tenum status_code code = open_script(argv[1]);\n\n\t\tif (code != SUCCESS)\n\t\t\treport(\"%s\", get_status_message(code));\n\t\treturn REQ_NONE;\n\n\t} else {\n\t\tstruct key key = {{0}};\n\t\tenum status_code code;\n\n\t\t/* Try :<key> */\n\t\tkey.modifiers.multibytes = 1;\n\t\tstring_ncopy(key.data.bytes, cmd, cmdlen);\n\t\trequest = get_keybinding(view->keymap, &key, 1, NULL);\n\t\tif (request != REQ_UNKNOWN)\n\t\t\treturn request;\n\n\t\t/* Try :<command> */\n\t\trequest = get_request(cmd);\n\t\tif (request != REQ_UNKNOWN)\n\t\t\treturn request;\n\n\t\tcode = set_option(argv[0], argv_size(argv + 1), &argv[1]);\n\t\tif (code != SUCCESS) {\n\t\t\treport(\"%s\", get_status_message(code));\n\t\t\treturn REQ_NONE;\n\t\t}\n\n\t\tif (!strcmp(cmd, \"set\")) {\n\t\t\tenum view_flag flags = prompt_option_flags(view, argv[1]);\n\n\t\t\tif (flags) {\n\t\t\t\tprompt_update_display(flags);\n\t\t\t\treturn REQ_NONE;\n\t\t\t}\n\t\t}\n\n\t\tif (!strcmp(cmd, \"color\"))\n\t\t\tinit_colors();\n\t\tresize_display();\n\t\tredraw_display(true);\n\t}\n\treturn REQ_NONE;\n}\n\nenum request\nexec_run_request(struct view *view, struct run_request *req)\n{\n\tconst char **argv = NULL;\n\tbool confirmed = false;\n\tenum request request = REQ_NONE;\n\tchar cmd[SIZEOF_MED_STR];\n\tconst char *req_argv[SIZEOF_ARG];\n\tint req_argc = 0;\n\t/* req may be invalid after run_prompt_command if run_request\n\t * is reallocated, so use a copy of the flags. */\n\tstruct run_request_flags req_flags = req->flags;\n\n\tif (!argv_to_string(req->argv, cmd, sizeof(cmd), \" \")\n\t    || !argv_from_string_no_quotes(req_argv, &req_argc, cmd)\n\t    || !argv_format(view->env, &argv, req_argv, argv_flag_file_filter | argv_flag_rev_filter)\n\t    || !argv) {\n\t\treport(\"Failed to format arguments\");\n\t\treturn REQ_NONE;\n\t}\n\n\tif (req->flags.internal) {\n\t\trequest = run_prompt_command(view, argv);\n\n\t} else {\n\t\tconfirmed = !req->flags.confirm;\n\n\t\tif (req->flags.confirm) {\n\t\t\tchar cmd[SIZEOF_STR], prompt[SIZEOF_STR];\n\t\t\tconst char *and_exit = req->flags.exit ? \" and exit\" : \"\";\n\n\t\t\tif (argv_to_string_quoted(argv, cmd, sizeof(cmd), \" \") &&\n\t\t\t    string_format(prompt, \"Run `%s`%s?\", cmd, and_exit) &&\n\t\t\t    prompt_yesno(prompt)) {\n\t\t\t\tconfirmed = true;\n\t\t\t}\n\t\t}\n\n\t\tif (confirmed)\n\t\t\topen_external_viewer(argv, repo.cdup, req->flags.silent,\n\t\t\t\t\t     !req->flags.exit, req->flags.echo, req->flags.quick, false, \"\");\n\t}\n\n\tif (argv)\n\t\targv_free(argv);\n\tfree(argv);\n\n\tif (request == REQ_NONE) {\n\t\tif (req_flags.confirm && !confirmed)\n\t\t\trequest = REQ_NONE;\n\n\t\telse if (req_flags.exit)\n\t\t\trequest = REQ_QUIT;\n\n\t\telse if (!req_flags.internal && watch_dirty(&view->watch))\n\t\t\trequest = REQ_REFRESH;\n\n\t}\n\n\treturn request;\n}\n\nenum request\nopen_prompt(struct view *view)\n{\n\tchar *cmd;\n\tconst char *argv[SIZEOF_ARG] = { NULL };\n\tint argc = 0;\n\n\tif (is_script_executing())\n\t\tcmd = read_prompt_incremental(\" \", false, true, prompt_script_handler, NULL);\n\telse\n\t\tcmd = read_prompt(\":\");\n\n\tif (cmd && *cmd && !argv_from_string(argv, &argc, cmd)) {\n\t\treport(\"Too many arguments\");\n\t\treturn REQ_NONE;\n\t}\n\n\tif (!cmd || !*cmd) {\n\t\treport_clear();\n\t\treturn REQ_NONE;\n\t}\n\n\treturn run_prompt_command(view, argv);\n}\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/refdb.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/tig.h\"\n#include \"tig/map.h\"\n#include \"tig/argv.h\"\n#include \"tig/io.h\"\n#include \"tig/watch.h\"\n#include \"tig/options.h\"\n#include \"tig/repo.h\"\n#include \"tig/refdb.h\"\n\nstatic struct ref *refs_head = NULL;\nstatic size_t refs_tags;\n\nDEFINE_STRING_MAP(refs_by_name, struct ref *, name, 32)\nDEFINE_STRING_MAP(refs_by_id, struct ref *, id, 16)\n\nint\nref_compare(const struct ref *ref1, const struct ref *ref2)\n{\n\tif (ref1->type != ref2->type)\n\t\treturn ref1->type - ref2->type;\n\treturn strcmp_numeric(ref1->name, ref2->name);\n}\n\nstatic int\nref_canonical_compare(const struct ref *ref1, const struct ref *ref2)\n{\n\tint tag_diff = !!ref_is_tag(ref2) - !!ref_is_tag(ref1);\n\n\tif (tag_diff)\n\t\treturn tag_diff;\n\tif (ref1->type != ref2->type)\n\t\treturn (ref1->type - ref2->type);\n\treturn strcmp_numeric(ref1->name, ref2->name);\n}\n\nstruct ref_visitor_data {\n\tref_visitor_fn visitor;\n\tvoid *data;\n};\n\nstatic bool\nforeach_ref_visitor(void *data, void *value)\n{\n\tstruct ref_visitor_data *visitor_data = data;\n\tconst struct ref *ref = value;\n\n\tif (!ref->valid)\n\t\treturn true;\n\treturn visitor_data->visitor(visitor_data->data, ref);\n}\n\nvoid\nforeach_ref(ref_visitor_fn visitor, void *data)\n{\n\tstruct ref_visitor_data visitor_data = { visitor, data };\n\n\tstring_map_foreach(&refs_by_name, foreach_ref_visitor, &visitor_data);\n}\n\nconst struct ref *\nget_ref_head()\n{\n\treturn refs_head;\n}\n\nconst struct ref *\nget_ref_list(const char *id)\n{\n\treturn string_map_get(&refs_by_id, id);\n}\n\nconst struct ref *\nget_canonical_ref(const char *id)\n{\n\tconst struct ref *ref = NULL;\n\tconst struct ref *pos;\n\n\tforeach_ref_list(pos, id)\n\t\tif (!ref || ref_canonical_compare(pos, ref) < 0)\n\t\t\tref = pos;\n\n\treturn ref;\n}\n\nbool\nref_list_contains_tag(const char *id)\n{\n\tconst struct ref *ref;\n\n\tforeach_ref_list(ref, id)\n\t\tif (ref_is_tag(ref))\n\t\t\treturn true;\n\n\treturn false;\n}\n\nstruct ref_opt {\n\tconst char *remote;\n\tconst char *head;\n\tenum watch_trigger changed;\n};\n\nstatic enum status_code\nadd_ref_to_id_map(struct ref *ref)\n{\n\tvoid **ref_lists_slot = string_map_put_to(&refs_by_id, ref->id);\n\n\tif (!ref_lists_slot)\n\t\treturn SUCCESS;\n\n\t/* First remove the ref from the ID list, to ensure that it is\n\t * reinserted at the right position if the type changes. */\n\t{\n\t\tstruct ref *list, *prev;\n\n\t\tfor (list = *ref_lists_slot, prev = NULL; list; prev = list, list = list->next)\n\t\t\tif (list == ref) {\n\t\t\t\tif (!prev)\n\t\t\t\t\t*ref_lists_slot = ref->next;\n\t\t\t\telse\n\t\t\t\t\tprev->next = ref->next;\n\t\t\t}\n\n\t\tref->next = NULL;\n\t}\n\n\tif (*ref_lists_slot == NULL || ref_compare(ref, *ref_lists_slot) <= 0) {\n\t\tref->next = *ref_lists_slot;\n\t\t*ref_lists_slot = ref;\n\n\t} else {\n\t\tstruct ref *list;\n\n\t\tfor (list = *ref_lists_slot; list->next; list = list->next) {\n\t\t\tif (ref_compare(ref, list->next) <= 0)\n\t\t\t\tbreak;\n\t\t}\n\n\t\tref->next = list->next;\n\t\tlist->next = ref;\n\t}\n\n\treturn SUCCESS;\n}\n\nstatic void\nremove_ref_from_id_map(struct ref *ref)\n{\n\tvoid **ref_slot = string_map_get_at(&refs_by_id, ref->id);\n\tstruct ref *list = ref_slot ? *ref_slot : NULL;\n\tstruct ref *prev = NULL;\n\n\tfor (; list; prev = list, list = list->next) {\n\t\tif (list != ref)\n\t\t\tcontinue;\n\n\t\tif (!prev)\n\t\t\t*ref_slot = ref->next;\n\t\telse\n\t\t\tprev->next = ref->next;\n\t\tref->next = NULL;\n\t\tbreak;\n\t}\n\n\tif (ref_slot && !*ref_slot)\n\t\tstring_map_remove(&refs_by_id, ref->id);\n}\n\nstatic enum status_code\nadd_to_refs(const char *id, size_t idlen, char *name, size_t namelen, struct ref_opt *opt)\n{\n\tstruct ref *ref = NULL;\n\tenum reference_type type = REFERENCE_OTHER;\n\tvoid **ref_slot = NULL;\n\n\tif (!prefixcmp(name, \"refs/tags/\")) {\n\t\ttype = REFERENCE_TAG;\n\t\tif (!suffixcmp(name, namelen, \"^{}\")) {\n\t\t\tnamelen -= 3;\n\t\t\tname[namelen] = 0;\n\t\t} else {\n\t\t\ttype = REFERENCE_LOCAL_TAG;\n\t\t}\n\n\t\t/* Don't remove the prefix if there is already a branch\n\t\t * with the same name. */\n\t\tref = string_map_get(&refs_by_name, name + STRING_SIZE(\"refs/tags/\"));\n\t\tif (ref == NULL || ref_is_tag(ref)) {\n\t\t\tnamelen -= STRING_SIZE(\"refs/tags/\");\n\t\t\tname\t+= STRING_SIZE(\"refs/tags/\");\n\t\t}\n\n\t} else if (!prefixcmp(name, \"refs/remotes/\")) {\n\t\ttype = REFERENCE_REMOTE;\n\t\tnamelen -= STRING_SIZE(\"refs/remotes/\");\n\t\tname\t+= STRING_SIZE(\"refs/remotes/\");\n\t\tif (!strcmp(opt->remote, name))\n\t\t\ttype = REFERENCE_TRACKED_REMOTE;\n\n\t} else if (!prefixcmp(name, \"refs/replace/\")) {\n\t\ttype = REFERENCE_REPLACE;\n\t\tid\t= name + strlen(\"refs/replace/\");\n\t\tidlen\t= namelen - strlen(\"refs/replace/\");\n\t\tname\t= \"replaced\";\n\t\tnamelen\t= strlen(name);\n\n\t} else if (!prefixcmp(name, \"refs/heads/\")) {\n\t\ttype = REFERENCE_BRANCH;\n\t\tnamelen -= STRING_SIZE(\"refs/heads/\");\n\t\tname\t+= STRING_SIZE(\"refs/heads/\");\n\t\tif (strlen(opt->head) == namelen &&\n\t\t    !strncmp(opt->head, name, namelen))\n\t\t\ttype = REFERENCE_HEAD;\n\n\t} else if (!strcmp(name, \"refs/stash\")) {\n\t\ttype = REFERENCE_STASH;\n\t\tnamelen -= STRING_SIZE(\"refs/\");\n\t\tname\t+= STRING_SIZE(\"refs/\");\n\n\t} else if (!prefixcmp(name, \"refs/notes/\")) {\n\t\ttype = REFERENCE_NOTE;\n\t\tnamelen -= STRING_SIZE(\"refs/\");\n\t\tname\t+= STRING_SIZE(\"refs/\");\n\n\t} else if (!prefixcmp(name, \"refs/prefetch/\")) {\n\t\ttype = REFERENCE_PREFETCH;\n\t\tnamelen -= STRING_SIZE(\"refs/\");\n\t\tname\t+= STRING_SIZE(\"refs/\");\n\n\t} else if (!strcmp(name, \"HEAD\")) {\n\t\t/* Handle the case of HEAD not being a symbolic ref,\n\t\t * i.e. during a rebase. */\n\t\tif (*opt->head)\n\t\t\treturn SUCCESS;\n\t\ttype = REFERENCE_HEAD;\n\t}\n\n\t/* If we are reloading or it's an annotated tag, replace the\n\t * previous SHA1 with the resolved commit id; relies on the fact\n\t * git-ls-remote lists the commit id of an annotated tag right\n\t * before the commit id it points to. */\n\tif (type == REFERENCE_REPLACE) {\n\t\tref = string_map_remove(&refs_by_id, id);\n\n\t} else {\n\t\tref_slot = string_map_put_to(&refs_by_name, name);\n\t\tif (!ref_slot)\n\t\t\treturn ERROR_OUT_OF_MEMORY;\n\t\tref = *ref_slot;\n\t}\n\n\tif (!ref) {\n\t\tref = calloc(1, sizeof(*ref) + namelen);\n\t\tif (!ref)\n\t\t\treturn ERROR_OUT_OF_MEMORY;\n\t\tstrncpy(ref->name, name, namelen);\n\t\tif (ref_slot)\n\t\t\t*ref_slot = ref;\n\t}\n\n\tif (strncmp(ref->id, id, idlen) || ref->type != type) {\n\t\topt->changed |= WATCH_REFS;\n\t\tif (*ref->id)\n\t\t\tremove_ref_from_id_map(ref);\n\t}\n\n\tref->valid = true;\n\tref->type = type;\n\tstring_ncopy_do(ref->id, SIZEOF_REV, id, idlen);\n\n\tif (type == REFERENCE_HEAD) {\n\t\tif (!refs_head ||\n\t\t    (refs_head != ref && memcmp(refs_head, ref, sizeof(*ref))))\n\t\t\topt->changed |= WATCH_HEAD;\n\t\trefs_head = ref;\n\t}\n\n\tif (type == REFERENCE_TAG)\n\t\trefs_tags++;\n\n\treturn add_ref_to_id_map(ref);\n}\n\nstatic enum status_code\nread_ref(char *id, size_t idlen, char *name, size_t namelen, void *data)\n{\n\treturn add_to_refs(id, idlen, name, namelen, data);\n}\n\nstatic bool\ninvalidate_refs(void *data, void *ref_)\n{\n\tstruct ref *ref = ref_;\n\n\tref->valid = 0;\n\tref->next = NULL;\n\treturn true;\n}\n\nstatic bool\ncleanup_refs(void *data, void *ref_)\n{\n\tstruct ref_opt *opt = data;\n\tstruct ref *ref = ref_;\n\n\tif (!ref->valid) {\n\t\tref->id[0] = 0;\n\t\topt->changed |= WATCH_REFS;\n\t}\n\n\treturn true;\n}\n\nstatic enum status_code\nreload_refs(bool force)\n{\n\tstruct io io;\n\tconst char *ls_remote_argv[SIZEOF_ARG] = {\n\t\t\"git\", \"show-ref\", \"--head\", \"--dereference\", NULL\n\t};\n\tchar ls_remote_cmd[SIZEOF_STR];\n\tstruct ref_opt opt = { repo.upstream, repo.head, WATCH_NONE };\n\tstruct repo_info old_repo = repo;\n\tenum status_code code;\n\tconst char *env = getenv(\"TIG_LS_REMOTE\");\n\n\tif (env && *env) {\n\t\tint argc = 0;\n\n\t\tstring_ncopy(ls_remote_cmd, env, strlen(env));\n\t\tif (!argv_from_string_no_quotes(ls_remote_argv, &argc, ls_remote_cmd))\n\t\t\treturn error(\"Failed to parse TIG_LS_REMOTE: %s\", env);\n\t}\n\n\tif (!*repo.git_dir)\n\t\treturn SUCCESS;\n\n\tif (force || !*repo.head)\n\t\tload_repo_head();\n\n\tif (strcmp(old_repo.head, repo.head))\n\t\topt.changed |= WATCH_HEAD;\n\n\trefs_head = NULL;\n\trefs_tags = 0;\n\tstring_map_clear(&refs_by_id);\n\tstring_map_foreach(&refs_by_name, invalidate_refs, NULL);\n\n\tcode = io_run_load(&io, ls_remote_argv, \" \\t\", read_ref, &opt);\n\tif (code != SUCCESS)\n\t\treturn code;\n\n\tstring_map_foreach(&refs_by_name, cleanup_refs, &opt);\n\n\tif (opt.changed)\n\t\twatch_apply(NULL, opt.changed);\n\n\treturn SUCCESS;\n}\n\nenum status_code\nload_refs(bool force)\n{\n\tstatic bool loaded = false;\n\n\tif (!force && loaded)\n\t\treturn SUCCESS;\n\n\tloaded = true;\n\treturn reload_refs(force);\n}\n\nenum status_code\nadd_ref(const char *id, char *name, const char *remote_name, const char *head)\n{\n\tstruct ref_opt opt = { remote_name, head };\n\n\treturn add_to_refs(id, strlen(id), name, strlen(name), &opt);\n}\n\nvoid\nref_update_env(struct argv_env *env, const struct ref *ref, bool recurse)\n{\n\tbool clear = recurse ? !ref->next : true;\n\n\tif (recurse && ref->next)\n\t\tref_update_env(env, ref->next, true);\n\n\tif (clear)\n\t\tenv->tag[0] = env->remote[0] = env->branch[0] = 0;\n\n\tstring_copy_rev(env->commit, ref->id);\n\tstring_ncopy(env->refname, ref->name, strlen(ref->name));\n\n\tif (ref_is_tag(ref)) {\n\t\tstring_ncopy(env->tag, ref->name, strlen(ref->name));\n\n\t} else if (ref_is_remote(ref)) {\n\t\tconst char *sep = strchr(ref->name, '/');\n\n\t\tif (!sep)\n\t\t\treturn;\n\t\tstring_ncopy(env->remote, ref->name, sep - ref->name);\n\t\tstring_ncopy(env->branch, sep + 1, strlen(sep + 1));\n\n\t} else if (ref->type == REFERENCE_BRANCH || ref->type == REFERENCE_HEAD) {\n\t\tstring_ncopy(env->branch, ref->name, strlen(ref->name));\n\t}\n}\n\nbool\nrefs_contain_tag(void)\n{\n\treturn refs_tags > 0;\n}\n\nconst struct ref_format *\nget_ref_format(struct ref_format **ref_formats, const struct ref *ref)\n{\n\tstatic const struct ref_format default_format = { \"\", \"\" };\n\n\tif (ref_formats) {\n\t\tstruct ref_format *format = ref_formats[ref->type];\n\n\t\tif (!format && ref_is_tag(ref))\n\t\t\tformat = ref_formats[REFERENCE_TAG];\n\t\tif (!format && ref_is_remote(ref))\n\t\t\tformat = ref_formats[REFERENCE_REMOTE];\n\t\tif (!format)\n\t\t\tformat = ref_formats[REFERENCE_BRANCH];\n\t\tif (format)\n\t\t\treturn format;\n\t}\n\n\treturn &default_format;\n}\n\nstatic enum status_code\nparse_ref_format_arg(struct ref_format **ref_formats, const char *arg, const struct enum_map *map)\n{\n\tsize_t arglen = strlen(arg);\n\tconst char *pos;\n\n\tfor (pos = arg; *pos && arglen > 0; pos++, arglen--) {\n\t\tenum reference_type type;\n\n\t\tfor (type = 0; type < map->size; type++) {\n\t\t\tconst struct enum_map_entry *entry = &map->entries[type];\n\t\t\tstruct ref_format *format;\n\n\t\t\tif (arglen < entry->namelen ||\n\t\t\t    string_enum_compare(pos, entry->name, entry->namelen))\n\t\t\t\tcontinue;\n\n\t\t\tformat = malloc(sizeof(*format));\n\t\t\tif (!format)\n\t\t\t\treturn ERROR_OUT_OF_MEMORY;\n\t\t\tformat->start = strndup(arg, pos - arg);\n\t\t\tformat->end = strdup(pos + entry->namelen);\n\t\t\tif (!format->start || !format->end) {\n\t\t\t\tfree((void *) format->start);\n\t\t\t\tfree((void *) format->end);\n\t\t\t\tfree(format);\n\t\t\t\treturn ERROR_OUT_OF_MEMORY;\n\t\t\t}\n\n\t\t\tref_formats[type] = format;\n\t\t\treturn SUCCESS;\n\t\t}\n\t}\n\n\treturn error(\"Unknown ref format: %s\", arg);\n}\n\nenum status_code\nparse_ref_formats(struct ref_format ***formats, const char *argv[])\n{\n\tconst struct enum_map *map = reference_type_map;\n\tint argc;\n\n\tif (!*formats) {\n\t\t*formats = calloc(reference_type_map->size, sizeof(struct ref_format *));\n\t\tif (!*formats)\n\t\t\treturn ERROR_OUT_OF_MEMORY;\n\t}\n\n\tfor (argc = 0; argv[argc]; argc++) {\n\t\tenum status_code code = parse_ref_format_arg(*formats, argv[argc], map);\n\t\tif (code != SUCCESS)\n\t\t\treturn code;\n\t}\n\n\treturn SUCCESS;\n}\n\nenum status_code\nformat_ref_formats(struct ref_format **formats, char buf[], size_t bufsize)\n{\n\tconst struct enum_map *map = reference_type_map;\n\tchar name[SIZEOF_STR];\n\tenum reference_type type;\n\tsize_t bufpos = 0;\n\tconst char *sep = \"\";\n\n\tif (!formats)\n\t\treturn SUCCESS;\n\n\tfor (type = 0; type < map->size; type++) {\n\t\tstruct ref_format *format = formats[type];\n\n\t\tif (!format)\n\t\t\tcontinue;\n\n\t\tif (!enum_name_copy(name, sizeof(name), map->entries[type].name)\n\t\t    || !string_nformat(buf, bufsize, &bufpos, \"%s%s%s%s\",\n\t\t\t\t       sep, format->start, name, format->end))\n\t\t\treturn error(\"No space left in buffer\");\n\n\t\tsep = \" \";\n\t}\n\n\treturn SUCCESS;\n}\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/reflog.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/display.h\"\n#include \"tig/draw.h\"\n#include \"tig/git.h\"\n#include \"tig/main.h\"\n\nstatic enum status_code\nreflog_open(struct view *view, enum open_flags flags)\n{\n\tstruct main_state *state = view->private;\n\tconst char *reflog_argv[] = {\n\t\t\"git\", \"reflog\", \"show\", encoding_arg, \"%(cmdlineargs)\",\n\t\t\t\"%(revargs)\", \"--no-color\", \"--pretty=raw\", NULL\n\t};\n\n\tif (is_initial_view(view) && opt_file_args)\n\t\tdie(\"No revisions match the given arguments.\");\n\n\tstate->with_graph = false;\n\twatch_register(&view->watch, WATCH_HEAD | WATCH_REFS);\n\treturn begin_update(view, NULL, reflog_argv, flags);\n}\n\nstatic enum request\nreflog_request(struct view *view, enum request request, struct line *line)\n{\n\tstruct commit *commit = line->data;\n\n\tswitch (request) {\n\tcase REQ_ENTER:\n\t{\n\t\tconst char *main_argv[] = {\n\t\t\tGIT_MAIN_LOG(encoding_arg, commit_order_arg(),\n\t\t\t\t\"%(mainargs)\", \"\", commit->id, \"\",\n\t\t\t\tshow_notes_arg(), log_custom_pretty_arg())\n\t\t};\n\t\tenum open_flags flags = view_is_displayed(view) ? OPEN_SPLIT : OPEN_DEFAULT;\n\n\t\tif (!argv_format(main_view.env, &main_view.argv, main_argv, 0))\n\t\t\treport(\"Failed to format argument\");\n\t\telse\n\t\t\topen_main_view(view, flags | OPEN_PREPARED);\n\t\treturn REQ_NONE;\n\t}\n\n\tdefault:\n\t\treturn main_request(view, request, line);\n\t}\n}\n\nstatic struct view_ops reflog_ops = {\n\t\"reference\",\n\targv_env.head,\n\tVIEW_LOG_LIKE | VIEW_REFRESH,\n\tsizeof(struct main_state),\n\treflog_open,\n\tmain_read,\n\tview_column_draw,\n\treflog_request,\n\tview_column_grep,\n\tmain_select,\n\tmain_done,\n\tview_column_bit(AUTHOR) | view_column_bit(COMMITTER) | view_column_bit(COMMIT_TITLE) |\n\t\tview_column_bit(DATE) | view_column_bit(ID) |\n\t\tview_column_bit(LINE_NUMBER),\n\tmain_get_column_data,\n};\n\nDEFINE_VIEW(reflog);\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/refs.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/io.h\"\n#include \"tig/options.h\"\n#include \"tig/parse.h\"\n#include \"tig/display.h\"\n#include \"tig/view.h\"\n#include \"tig/draw.h\"\n#include \"tig/git.h\"\n#include \"tig/main.h\"\n\n/*\n * Branch backend\n */\n\nstruct reference {\n\tconst struct ident *author;\t/* Author of the last commit. */\n\tstruct time author_time;\t/* Date of the last activity. */\n\tconst struct ident *committer;\t/* Last committer. */\n\tstruct time commit_time;\t/* Date of the last activity. */\n\tchar title[128];\t\t/* First line of the commit message. */\n\tconst struct ref *ref;\t\t/* Name and commit ID information. */\n};\n\nstatic const struct ref *refs_all;\n#define REFS_ALL_NAME \"All references\"\n#define REFS_TAGS_NAME \"All tags\"\n#define REFS_BRANCHES_NAME \"All branches\"\n#define REFS_REMOTES_NAME \"All remotes\"\n#define refs_is_all(reference) ((reference)->ref == refs_all)\n\nenum refs_filter {\n\tREFS_FILTER_NONE     = 0,\n\tREFS_FILTER_TAGS     = 1 << 0,\n\tREFS_FILTER_BRANCHES = 1 << 1,\n\tREFS_FILTER_REMOTES  = 1 << 2,\n\tREFS_FILTER_ALL\t     = 1 << 3,\n} refs_filter = REFS_FILTER_NONE;\n\nstatic bool\nrefs_get_column_data(struct view *view, const struct line *line, struct view_column_data *column_data)\n{\n\tconst struct reference *reference = line->data;\n\tstruct view_column *column = get_view_column(view, VIEW_COLUMN_DATE);\n\tbool use_author_date = column && column->opt.date.use_author;\n\n\tcolumn_data->author = reference->author;\n\tcolumn_data->committer = reference->committer;\n\tcolumn_data->date = use_author_date\n\t\t\t\t? &reference->author_time\n\t\t\t\t: &reference->commit_time;\n\tcolumn_data->id = reference->ref->id;\n\tcolumn_data->ref = reference->ref;\n\tcolumn_data->commit_title = reference->title;\n\n\treturn true;\n}\n\nstatic enum request\nrefs_request(struct view *view, enum request request, struct line *line)\n{\n\tstruct reference *reference = line->data;\n\n\tswitch (request) {\n\tcase REQ_REFRESH:\n\t\tload_refs(true);\n\t\trefresh_view(view);\n\t\treturn REQ_NONE;\n\n\tcase REQ_ENTER:\n\t{\n\t\tconst struct ref *ref = reference->ref;\n\t\tconst char *all_references_argv[] = {\n\t\t\tGIT_MAIN_LOG(encoding_arg, commit_order_arg(),\n\t\t\t\t\"%(mainargs)\", \"\",\n\t\t\t\trefs_is_all(reference) ? \"--all\" : ref->id, \"\",\n\t\t\t\tshow_notes_arg(), log_custom_pretty_arg())\n\t\t};\n\t\tenum open_flags flags = view_is_displayed(view) ? OPEN_SPLIT : OPEN_DEFAULT;\n\n\t\tif (!argv_format(main_view.env, &main_view.argv, all_references_argv, 0))\n\t\t\treport(\"Failed to format argument\");\n\t\telse\n\t\t\topen_main_view(view, flags | OPEN_PREPARED);\n\t\treturn REQ_NONE;\n\t}\n\tdefault:\n\t\treturn request;\n\t}\n}\n\nstatic bool\nrefs_read(struct view *view, struct buffer *buf, bool force_stop)\n{\n\tstruct reference template = {0};\n\tchar *author;\n\tchar *committer;\n\tchar *title;\n\tsize_t i;\n\n\tif (!buf)\n\t\treturn true;\n\n\tif (!*buf->data)\n\t\treturn false;\n\n\tauthor = io_memchr(buf, buf->data, 0);\n\tcommitter = io_memchr(buf, author, 0);\n\ttitle = io_memchr(buf, committer, 0);\n\n\tif (author)\n\t\tparse_author_line(author, &template.author, &template.author_time);\n\n\tif (committer)\n\t\tparse_author_line(committer, &template.committer, &template.commit_time);\n\n\tfor (i = 0; i < view->lines; i++) {\n\t\tstruct reference *reference = view->line[i].data;\n\n\t\tif (strcmp(reference->ref->id, buf->data))\n\t\t\tcontinue;\n\n\t\treference->author = template.author;\n\t\treference->author_time = template.author_time;\n\t\treference->committer = template.committer;\n\t\treference->commit_time = template.commit_time;\n\n\t\tif (title)\n\t\t\tstring_expand(reference->title, sizeof(reference->title), title, strlen(title), 1);\n\n\t\tview->line[i].dirty = true;\n\t\tview_column_info_update(view, &view->line[i]);\n\t}\n\n\treturn true;\n}\n\nstatic bool\nrefs_open_visitor(void *data, const struct ref *ref)\n{\n\tstruct view *view = data;\n\tstruct reference *reference;\n\tbool is_all = ref == refs_all;\n\tconst struct ref_format *fmt = get_ref_format(opt_reference_format, ref);\n\tstruct line *line;\n\n\tif (!is_all)\n\t\tswitch (refs_filter) {\n\t\tcase REFS_FILTER_TAGS:\n\t\t\tif (ref->type != REFERENCE_TAG && ref->type != REFERENCE_LOCAL_TAG)\n\t\t\t\treturn true;\n\t\t\tbreak;\n\t\tcase REFS_FILTER_BRANCHES:\n\t\t\tif (ref->type != REFERENCE_BRANCH && ref->type != REFERENCE_HEAD)\n\t\t\t\treturn true;\n\t\t\tbreak;\n\t\tcase REFS_FILTER_REMOTES:\n\t\t\tif (ref->type != REFERENCE_TRACKED_REMOTE && ref->type != REFERENCE_REMOTE)\n\t\t\t\treturn true;\n\t\t\tbreak;\n\t\tcase REFS_FILTER_NONE:\n\t\t\tif (ref->type == REFERENCE_STASH ||\n\t\t\t    ref->type == REFERENCE_NOTE ||\n\t\t\t    ref->type == REFERENCE_PREFETCH ||\n\t\t\t    (!strcmp(fmt->start, \"hide:\") && !*fmt->end))\n\t\t\t\treturn true;\n\t\t\tbreak;\n\t\tcase REFS_FILTER_ALL:\n\t\tdefault:\n\t\t\tbreak;\n\t\t}\n\n\tline = add_line_alloc(view, &reference, LINE_DEFAULT, 0, is_all);\n\tif (!line)\n\t\treturn false;\n\n\treference->ref = ref;\n\tview_column_info_update(view, line);\n\n\treturn true;\n}\n\nstatic const char **refs_argv;\n\nstatic enum status_code\nrefs_open(struct view *view, enum open_flags flags)\n{\n\tconst char *refs_log[] = {\n\t\t\"git\", \"log\", encoding_arg, \"--no-color\", \"--date=raw\",\n\t\t\topt_mailmap ? \"--pretty=format:%H%x00%aN <%aE> %ad%x00%cN <%cE> %cd%x00%s\"\n\t\t\t\t    : \"--pretty=format:%H%x00%an <%ae> %ad%x00%cn <%ce> %cd%x00%s\",\n\t\t\t\"--all\", \"--decorate-refs=\", \"--simplify-by-decoration\",\n\t\t\tNULL\n\t};\n\tenum status_code code;\n\tconst char *name = REFS_ALL_NAME;\n\tint i;\n\n\tif (is_initial_view(view)) {\n\t\trefs_argv = opt_cmdline_args;\n\t\topt_cmdline_args = NULL;\n\t}\n\n\tfor (i = 0; refs_argv && refs_argv[i]; ++i) {\n\t\tif (!strncmp(refs_argv[i], \"--tags\", 6)) {\n\t\t\trefs_filter = REFS_FILTER_TAGS;\n\t\t\tname = REFS_TAGS_NAME;\n\t\t} else if (!strncmp(refs_argv[i], \"--branches\", 10)) {\n\t\t\trefs_filter = REFS_FILTER_BRANCHES;\n\t\t\tname = REFS_BRANCHES_NAME;\n\t\t} else if (!strncmp(refs_argv[i], \"--remotes\", 9)) {\n\t\t\trefs_filter = REFS_FILTER_REMOTES;\n\t\t\tname = REFS_REMOTES_NAME;\n\t\t} else if (!strncmp(refs_argv[i], \"--all\", 5)) {\n\t\t\trefs_filter = REFS_FILTER_ALL;\n\t\t}\n\t}\n\n\tif (!refs_all) {\n\t\tint name_length = strlen(name);\n\t\tstruct ref *ref = calloc(1, sizeof(*refs_all) + name_length);\n\n\t\tif (!ref)\n\t\t\treturn ERROR_OUT_OF_MEMORY;\n\n\t\tstrcpy(ref->name, name);\n\t\trefs_all = ref;\n\t}\n\n\tcode = begin_update(view, NULL, refs_log, OPEN_RELOAD);\n\tif (code != SUCCESS)\n\t\treturn code;\n\n\tif (!view->lines)\n\t\tif (!(view->sort.current = get_view_column(view, VIEW_COLUMN_REF)))\n\t\t\tdie(\"Failed to setup the refs view\");\n\trefs_open_visitor(view, refs_all);\n\tforeach_ref(refs_open_visitor, view);\n\tresort_view(view, true);\n\n\twatch_register(&view->watch, WATCH_HEAD | WATCH_REFS);\n\n\treturn SUCCESS;\n}\n\nstatic void\nrefs_select(struct view *view, struct line *line)\n{\n\tstruct reference *reference = line->data;\n\n\tif (refs_is_all(reference)) {\n\t\tstring_copy(view->ref, REFS_ALL_NAME);\n\t\treturn;\n\t}\n\tstring_copy_rev(view->ref, reference->ref->id);\n\tstring_copy_rev(view->env->head, reference->ref->id);\n\tstring_ncopy(view->env->ref, reference->ref->name, strlen(reference->ref->name));\n\tref_update_env(view->env, reference->ref, false);\n\tview->env->blob[0] = 0;\n}\n\nstatic struct view_ops refs_ops = {\n\t\"reference\",\n\targv_env.head,\n\tVIEW_REFRESH | VIEW_SORTABLE | VIEW_LOG_LIKE,\n\t0,\n\trefs_open,\n\trefs_read,\n\tview_column_draw,\n\trefs_request,\n\tview_column_grep,\n\trefs_select,\n\tNULL,\n\tview_column_bit(AUTHOR) | view_column_bit(COMMITTER) | view_column_bit(COMMIT_TITLE) |\n\t\tview_column_bit(DATE) | view_column_bit(ID) |\n\t\tview_column_bit(LINE_NUMBER) | view_column_bit(REF),\n\trefs_get_column_data,\n};\n\nDEFINE_VIEW(refs);\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/repo.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/tig.h\"\n#include \"tig/repo.h\"\n#include \"tig/io.h\"\n#include \"tig/refdb.h\"\n#include \"tig/git.h\"\n\n#define REPO_INFO_GIT_DIR\t\"--git-dir\"\n#define REPO_INFO_WORK_TREE\t\"--is-inside-work-tree\"\n#define REPO_INFO_SHOW_CDUP\t\"--show-cdup\"\n#define REPO_INFO_SHOW_PREFIX\t\"--show-prefix\"\n#define REPO_INFO_SYMBOLIC_HEAD\t\"--symbolic-full-name\"\n#define REPO_INFO_RESOLVED_HEAD\t\"HEAD\"\n#define REPO_INFO_REMOTE\t\"--abbrev-ref\"\n\nstruct repo_info_state {\n\tconst char **argv;\n};\n\nstatic enum status_code\nread_repo_info(char *name, size_t namelen, char *value, size_t valuelen, void *data)\n{\n\tstruct repo_info_state *state = data;\n\tconst char *arg = *state->argv ? *state->argv++ : \"\";\n\n\tif (!strcmp(arg, REPO_INFO_GIT_DIR)) {\n\t\tstring_ncopy(repo.git_dir, name, namelen);\n\n\t} else if (!strcmp(arg, REPO_INFO_WORK_TREE)) {\n\t\t/* This can be 3 different values depending on the\n\t\t * version of git being used. If git-rev-parse does not\n\t\t * understand --is-inside-work-tree it will simply echo\n\t\t * the option else either \"true\" or \"false\" is printed.\n\t\t * Default to true for the unknown case. */\n\t\trepo.is_inside_work_tree = strcmp(name, \"false\") ? true : false;\n\n\t} else if (!strcmp(arg, REPO_INFO_SHOW_CDUP)) {\n\t\tstring_ncopy(repo.cdup, name, namelen);\n\t\tif (repo.is_inside_work_tree)\n\t\t\tstring_ncopy(repo.exec_dir, name, namelen);\n\n\t} else if (!strcmp(arg, REPO_INFO_SHOW_PREFIX)) {\n\t\t/* Some versions of Git does not emit anything for --show-prefix\n\t\t * when the user is in the repository root directory. Try to detect\n\t\t * this special case by looking at the emitted value. If it looks\n\t\t * like a commit ID and there's no cdup path assume that no value\n\t\t * was emitted. */\n\t\tif (!*repo.cdup && ((namelen == 40 && iscommit(name)) ||\n\t\t\t\t    !strcmp(name, REPO_INFO_RESOLVED_HEAD)))\n\t\t\treturn read_repo_info(name, namelen, value, valuelen, data);\n\n\t\tstring_ncopy(repo.prefix, name, namelen);\n\n\t} else if (!strcmp(arg, REPO_INFO_RESOLVED_HEAD)) {\n\t\tif (strcmp(name, REPO_INFO_RESOLVED_HEAD))\n\t\t\tstring_ncopy(repo.head_id, name, namelen);\n\n\t} else if (!strcmp(arg, REPO_INFO_SYMBOLIC_HEAD)) {\n\t\tif (!prefixcmp(name, \"refs/heads/\")) {\n\t\t\tconst char *head = name + STRING_SIZE(\"refs/heads/\");\n\n\t\t\tstring_ncopy(repo.head, head, strlen(head) + 1);\n\t\t\tadd_ref(repo.head_id, name, repo.upstream, repo.head);\n\t\t}\n\t\tstate->argv++;\n\n\t} else if (!strcmp(arg, REPO_INFO_REMOTE)) {\n\t\tchar *sep = strchr(name, '/');\n\n\t\tstring_ncopy(repo.remote, name, sep - name);\n\t\tstring_ncopy(repo.upstream, name, namelen);\n\t\tstate->argv++;\n\t}\n\n\treturn SUCCESS;\n}\n\nstatic enum status_code\nreload_repo_info(const char **rev_parse_argv)\n{\n\tstruct io io;\n\tstruct repo_info_state state = { rev_parse_argv + 2 };\n\n\treturn io_run_load(&io, rev_parse_argv, \"\\n\", read_repo_info, &state);\n}\n\nenum status_code\nload_repo_info(void)\n{\n\tconst char *rev_parse_argv[] = {\n\t\t\"git\", \"rev-parse\", REPO_INFO_GIT_DIR, REPO_INFO_WORK_TREE,\n\t\t\tREPO_INFO_SHOW_CDUP, REPO_INFO_SHOW_PREFIX, \\\n\t\t\tREPO_INFO_RESOLVED_HEAD, REPO_INFO_SYMBOLIC_HEAD, \"HEAD\",\n\t\t\tNULL\n\t};\n\n\tmemset(&repo, 0, sizeof(repo));\n\treturn reload_repo_info(rev_parse_argv);\n}\n\nenum status_code\nload_repo_head(void)\n{\n\tconst char *rev_parse_remote_argv[] = {\n\t\t\"git\", \"rev-parse\", REPO_INFO_REMOTE, \"@{upstream}\", NULL\n\t};\n\tconst char *rev_parse_argv[] = {\n\t\t\"git\", \"rev-parse\", REPO_INFO_RESOLVED_HEAD,\n\t\t\tREPO_INFO_SYMBOLIC_HEAD, \"HEAD\", NULL\n\t};\n\n\tmemset(repo.remote, 0, sizeof(repo.remote));\n\tmemset(repo.upstream, 0, sizeof(repo.upstream));\n\treload_repo_info(rev_parse_remote_argv);\n\tmemset(repo.head, 0, sizeof(repo.head));\n\tmemset(repo.head_id, 0, sizeof(repo.head_id));\n\treturn reload_repo_info(rev_parse_argv);\n}\n\nstruct repo_info repo;\n\n/*\n * Git index utils.\n */\n\nbool\nupdate_index(void)\n{\n\tconst char *update_index_argv[] = {\n\t\t\"git\", \"update-index\", \"-q\", \"--unmerged\", \"--refresh\", NULL\n\t};\n\n\treturn io_run_bg(update_index_argv, repo.exec_dir);\n}\n\nbool\nindex_diff(struct index_diff *diff, bool untracked, bool count_all)\n{\n\tconst char *untracked_arg = !untracked ? \"--untracked-files=no\" :\n\t\t\t\t     count_all ? \"--untracked-files=all\" :\n\t\t\t\t\t\t \"--untracked-files=normal\";\n\tconst char *status_argv[] = {\n\t\t\"git\", \"status\", \"--porcelain\", \"-z\", untracked_arg, NULL\n\t};\n\tstruct io io;\n\tstruct buffer buf;\n\tbool ok = true;\n\n\tmemset(diff, 0, sizeof(*diff));\n\n\tif (!io_run(&io, IO_RD, repo.exec_dir, NULL, status_argv))\n\t\treturn false;\n\n\twhile (io_get(&io, &buf, 0, true) && (ok = buf.size > 3)) {\n\t\tif (buf.data[0] == '?')\n\t\t\tdiff->untracked++;\n\t\t/* Ignore staged but unmerged entries. */\n\t\telse if (buf.data[0] != ' ' && buf.data[0] != 'U')\n\t\t\tdiff->staged++;\n\t\tif (buf.data[1] != ' ' && buf.data[1] != '?')\n\t\t\tdiff->unstaged++;\n\t\tif (!count_all && diff->staged && diff->unstaged &&\n\t\t    (!untracked || diff->untracked))\n\t\t\tbreak;\n\n\t\t/* Skip source filename in rename */\n\t\tif (buf.data[0] == 'R') {\n\t\t\tio_get(&io, &buf, 0, true);\n\t\t}\n\t}\n\n\tif (io_error(&io))\n\t\tok = false;\n\n\tio_done(&io);\n\treturn ok;\n}\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/request.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/tig.h\"\n#include \"tig/types.h\"\n#include \"tig/request.h\"\n\nstatic const struct request_info req_info[] = {\n#define REQ_GROUP(help)\t{ 0, NULL, 0, (help) },\n#define REQ_(req, help)\t{ REQ_##req, (#req), STRING_SIZE(#req), (help) }\n\tREQ_INFO\n#undef\tREQ_GROUP\n#undef\tREQ_\n};\n\nenum request\nget_request(const char *name)\n{\n\tint namelen = strlen(name);\n\tint i;\n\n\tfor (i = 0; i < ARRAY_SIZE(req_info); i++)\n\t\tif (enum_equals(req_info[i], name, namelen))\n\t\t\treturn req_info[i].request;\n\n\treturn REQ_UNKNOWN;\n}\n\nconst char *\nget_request_name(enum request request)\n{\n\tint i;\n\n\tfor (i = 0; i < ARRAY_SIZE(req_info); i++)\n\t\tif (req_info[i].request == request)\n\t\t\treturn enum_name(req_info[i].name);\n\treturn request == REQ_UNKNOWN ? \"unknown\" : \"run request\";\n}\n\nbool\nforeach_request(bool (*visitor)(void *data, const struct request_info *req_info, const char *group), void *data)\n{\n\tconst char *group = NULL;\n\tint i;\n\n\tfor (i = 0; i < ARRAY_SIZE(req_info); i++) {\n\t\tif (!req_info[i].request) {\n\t\t\tgroup = req_info[i].help;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!visitor(data, &req_info[i], group))\n\t\t\treturn false;\n\t}\n\n\treturn true;\n}\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/search.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/search.h\"\n#include \"tig/prompt.h\"\n#include \"tig/display.h\"\n#include \"tig/draw.h\"\n#include \"tig/main.h\"\n#include \"tig/graph.h\"\n\nDEFINE_ALLOCATOR(realloc_unsigned_ints, unsigned int, 32)\n\nbool\ngrep_text(struct view *view, const char *text[])\n{\n\tsize_t i;\n\n\tfor (i = 0; text[i]; i++)\n\t\tif (*text[i] && !regexec(view->regex, text[i], 0, NULL, 0))\n\t\t\treturn true;\n\treturn false;\n}\n\nstatic bool\nfind_matches(struct view *view)\n{\n\tsize_t lineno;\n\n\t/* Note, lineno is unsigned long so will wrap around in which case it\n\t * will become bigger than view->lines. */\n\tfor (lineno = 0; lineno < view->lines; lineno++) {\n\t\tview->line[lineno].search_result = view->ops->grep(view, &view->line[lineno]);\n\n\t\tif (!view->line[lineno].search_result)\n\t\t\tcontinue;\n\n\t\tif (!realloc_unsigned_ints(&view->matched_line, view->matched_lines, 1))\n\t\t\treturn false;\n\n\t\tview->matched_line[view->matched_lines++] = lineno;\n\t}\n\n\t/* Clear and show highlighted results. */\n\tredraw_view_from(view, 0);\n\n\treturn true;\n}\n\nstatic enum status_code find_next_match(struct view *view, enum request request);\n\nstatic enum status_code\nsetup_and_find_next(struct view *view, enum request request)\n{\n\tint regex_err;\n\tint regex_flags = opt_ignore_case == IGNORE_CASE_YES ? REG_ICASE : 0;\n\n\tif (opt_ignore_case == IGNORE_CASE_SMART_CASE\n\t    && !utf8_string_contains_uppercase(view->env->search))\n\t\tregex_flags |= REG_ICASE;\n\n\tif (!view->regex) {\n\t\tview->regex = calloc(1, sizeof(*view->regex));\n\t\tif (!view->regex)\n\t\t\treturn ERROR_OUT_OF_MEMORY;\n\t}\n\n\tif (*view->grep) {\n\t\tregfree(view->regex);\n\t\t*view->grep = 0;\n\t}\n\n\tregex_err = regcomp(view->regex, view->env->search, REG_EXTENDED | regex_flags);\n\tif (regex_err != 0) {\n\t\tchar buf[SIZEOF_STR] = \"unknown error\";\n\n\t\t/* Clear highlighted results. */\n\t\tredraw_view_from(view, 0);\n\n\t\tregerror(regex_err, view->regex, buf, sizeof(buf));\n\t\treturn error(\"Search failed: %s\", buf);\n\t}\n\n\tstring_copy(view->grep, view->env->search);\n\n\treset_search(view);\n\n\treturn find_next_match(view, request);\n}\n\nstatic enum status_code\nfind_next_match_line(struct view *view, int direction, bool wrapped)\n{\n\t/* Note, `i` is unsigned and will wrap around in which case it\n\t * will become bigger than view->matched_lines. */\n\tsize_t i = direction > 0 ? 0 : view->matched_lines - 1;\n\n\tfor (; i < view->matched_lines; i += direction) {\n\t\tsize_t lineno = view->matched_line[i];\n\n\t\tif (direction > 0) {\n\t\t\tif (!wrapped && lineno <= view->pos.lineno)\n\t\t\t\tcontinue;\n\t\t\tif (wrapped && lineno > view->pos.lineno)\n\t\t\t\tcontinue;\n\t\t} else {\n\t\t\tif (!wrapped && lineno >= view->pos.lineno)\n\t\t\t\tcontinue;\n\t\t\tif (wrapped && lineno < view->pos.lineno)\n\t\t\t\tcontinue;\n\t\t}\n\n\t\tselect_view_line(view, lineno);\n\t\treturn success(\"Line %zu matches '%s' (%zu of %zu)\", lineno + 1, view->grep, i + 1, view->matched_lines);\n\t}\n\n\treturn -1;\n}\n\nstatic enum status_code\nfind_next_match(struct view *view, enum request request)\n{\n\tenum status_code code;\n\tint direction;\n\n\tif (!*view->grep || strcmp(view->grep, view->env->search)) {\n\t\tif (!*view->env->search)\n\t\t\treturn success(\"No previous search\");\n\t\treturn setup_and_find_next(view, request);\n\t}\n\n\tswitch (request) {\n\tcase REQ_SEARCH:\n\tcase REQ_FIND_NEXT:\n\t\tdirection = 1;\n\t\tbreak;\n\n\tcase REQ_SEARCH_BACK:\n\tcase REQ_FIND_PREV:\n\t\tdirection = -1;\n\t\tbreak;\n\n\tdefault:\n\t\treturn error(\"Unknown search request\");\n\t}\n\n\tif (!view->matched_lines && !find_matches(view))\n\t\treturn ERROR_OUT_OF_MEMORY;\n\n\tcode = find_next_match_line(view, direction, false);\n\tif (code != SUCCESS && opt_wrap_search)\n\t\tcode = find_next_match_line(view, direction, true);\n\n\treturn code == SUCCESS ? code : success(\"No match found for '%s'\", view->grep);\n}\n\nvoid\nfind_next(struct view *view, enum request request)\n{\n\tenum status_code code = find_next_match(view, request);\n\n\treport(\"%s\", get_status_message(code));\n}\n\nstatic enum status_code\nfind_next_merge_line(struct view *view, int direction, bool wrapped)\n{\n\tint dist;\n\tsize_t max;\n\n\tif (wrapped)\n\t\tmax = view->lines;\n\telse\n\t\tmax = direction > 0 ? view->lines - view->pos.lineno\n\t\t\t\t    : view->pos.lineno;\n\n\tfor (dist = direction; abs(dist) < max; dist += direction) {\n\t\tssize_t lineno = view->pos.lineno + dist;\n\t\tif (lineno < 0)\n\t\t\tlineno += view->lines;\n\t\telse if (lineno >= view->lines)\n\t\t\tlineno -= view->lines;\n\n\t\tstruct line *line = &view->line[lineno];\n\t\tstruct commit *commit = line->data;\n\t\tstruct graph_canvas *canvas = &commit->graph;\n\t\tstruct view_column_data column_data;\n\n\t\tif (!view->ops->get_column_data(view, line, &column_data))\n\t\t\tcontinue;\n\n\t\tif (column_data.graph && !column_data.graph->is_merge(canvas))\n\t\t\tcontinue;\n\n\t\tselect_view_line(view, lineno);\n\t\treturn SUCCESS;\n\t}\n\n\treturn success(\"No merge commit found\");\n}\n\nstatic enum status_code\nfind_next_merge(struct view *view, enum request request)\n{\n\tswitch (request) {\n\tcase REQ_MOVE_NEXT_MERGE:\n\t\treturn find_next_merge_line(view, 1, opt_wrap_search);\n\n\tcase REQ_MOVE_PREV_MERGE:\n\t\treturn find_next_merge_line(view, -1, opt_wrap_search);\n\n\tdefault:\n\t\treturn error(\"Invalid request searching for next merge\");\n\t}\n}\n\nvoid\nfind_merge(struct view *view, enum request request)\n{\n\tenum status_code code = find_next_merge(view, request);\n\n\treport(\"%s\", get_status_message(code));\n}\n\nvoid\nreset_search(struct view *view)\n{\n\tfree(view->matched_line);\n\tview->matched_line = NULL;\n\tview->matched_lines = 0;\n}\n\nvoid\nsearch_view(struct view *view, enum request request)\n{\n\tconst char *prompt = request == REQ_SEARCH ? \"/\" : \"?\";\n\tchar *search = read_prompt(prompt);\n\n\tif (search && *search) {\n\t\tenum status_code code;\n\n\t\tstring_ncopy(argv_env.search, search, strlen(search));\n\t\tcode = setup_and_find_next(view, request);\n\t\treport(\"%s\", get_status_message(code));\n\t} else if (search && *argv_env.search) {\n\t\tfind_next(view, request);\n\t} else {\n\t\treport_clear();\n\t}\n}\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/stage.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/repo.h\"\n#include \"tig/argv.h\"\n#include \"tig/options.h\"\n#include \"tig/parse.h\"\n#include \"tig/display.h\"\n#include \"tig/prompt.h\"\n#include \"tig/view.h\"\n#include \"tig/draw.h\"\n#include \"tig/git.h\"\n#include \"tig/pager.h\"\n#include \"tig/diff.h\"\n#include \"tig/status.h\"\n#include \"tig/main.h\"\n#include \"tig/stage.h\"\n#include \"tig/search.h\"\n\nstatic struct status stage_status;\nstatic enum line_type stage_line_type;\n\ntypedef enum\n{\n\tUPDATE_NORMAL,\n\tUPDATE_SINGLE_LINE,\n\tUPDATE_PART\n} update_t;\n\nvoid\nopen_stage_view(struct view *prev, struct status *status, enum line_type type, enum open_flags flags)\n{\n\tif (type) {\n\t\tstage_line_type = type;\n\t\tif (status)\n\t\t\tstage_status = *status;\n\t\telse\n\t\t\tmemset(&stage_status, 0, sizeof(stage_status));\n\t}\n\n\topen_view(prev, &stage_view, flags);\n}\n\nstruct stage_state {\n\tstruct diff_state diff;\n};\n\nstatic inline bool\nstage_diff_done(struct line *line, struct line *end)\n{\n\treturn line >= end ||\n\t       line->type == LINE_DIFF_CHUNK ||\n\t       line->type == LINE_DIFF_HEADER;\n}\n\nstatic bool\nstage_diff_write(struct io *io, struct line *line, struct line *end)\n{\n\twhile (line < end) {\n\t\tconst char *text = box_text(line);\n\n\t\tif (!io_write(io, text, strlen(text)) ||\n\t\t    !io_write(io, \"\\n\", 1))\n\t\t\treturn false;\n\t\tline++;\n\t\tif (stage_diff_done(line, end))\n\t\t\tbreak;\n\t}\n\n\treturn true;\n}\n\nstatic bool\nstage_diff_range_write(struct io *io, bool staged,\n\t\t       struct line *line, struct line *first,\n\t\t       struct line *last, struct line *end)\n{\n\tenum line_type write_as_normal = staged ? LINE_DIFF_ADD : LINE_DIFF_DEL;\n\tenum line_type ignore = staged ? LINE_DIFF_DEL : LINE_DIFF_ADD;\n\n\twhile (line < end) {\n\t\tconst char *prefix = \"\";\n\t\tconst char *data = box_text(line);\n\n\t\tif (line >= first && line <= last) {\n\t\t\t/* Write the complete line. */\n\n\t\t} else if (line->type == write_as_normal) {\n\t\t\tprefix = \" \";\n\t\t\tdata = data + 1;\n\n\t\t} else if (line->type == ignore) {\n\t\t\tdata = NULL;\n\t\t}\n\n\t\tif (data && !io_printf(io, \"%s%s\\n\", prefix, data))\n\t\t\treturn false;\n\n\t\tline++;\n\t\tif (stage_diff_done(line, end))\n\t\t\tbreak;\n\t}\n\n\treturn true;\n}\n\nstatic bool\nstage_apply_line(struct io *io, struct line *diff_hdr, struct line *chunk, struct line *single, struct line *end)\n{\n\tstruct chunk_header header;\n\tbool staged = stage_line_type == LINE_STAT_STAGED;\n\tint diff = single->type == LINE_DIFF_DEL ? -1 : 1;\n\n\tif (!parse_chunk_header(&header, box_text(chunk)))\n\t\treturn false;\n\n\tif (staged)\n\t\theader.old.lines = header.new.lines - diff;\n\telse\n\t\theader.new.lines = header.old.lines + diff;\n\n\treturn stage_diff_write(io, diff_hdr, chunk) &&\n\t       io_printf(io, \"@@ -%lu,%lu +%lu,%lu @@\\n\",\n\t\t       header.old.position, header.old.lines,\n\t\t       header.new.position, header.new.lines) &&\n\t       stage_diff_range_write(io, staged, chunk + 1, single, single, end);\n}\n\nstatic bool\nstage_apply_part(struct io *io, struct line *diff_hdr, struct line *chunk,\n\t\t struct line *current, struct line *end)\n{\n\tstruct chunk_header header;\n\tstruct line *first, *last, *line;\n\tbool staged = stage_line_type == LINE_STAT_STAGED;\n\tint diff;\n\n\tif (!parse_chunk_header(&header, box_text(chunk)))\n\t\treturn false;\n\n\t/* find beginning of the partial chunk */\n\tfor (first = NULL, line = chunk; line < current; line++) {\n\t\tbool change;\n\n\t\tchange = (line->type == LINE_DIFF_DEL || line->type == LINE_DIFF_ADD);\n\t\tif (!first && change)\n\t\t\tfirst = line;\n\t\telse if (first && !change)\n\t\t\tfirst = NULL;\n\t}\n\tif (!first)\n\t\tfirst = current;\n\t/* find the end of the partial chunk */\n\tlast = first;\n\tfor (line = first, diff = 0; line < end; line++)\n\t{\n\t\tif (line->type == LINE_DIFF_DEL) {\n\t\t\tlast = line;\n\t\t\tdiff--;\n\t\t}\n\t\telse if (line->type == LINE_DIFF_ADD) {\n\t\t\tlast = line;\n\t\t\tdiff++;\n\t\t}\n\t\telse if (line->type == LINE_DIFF_NO_NEWLINE) {\n\t\t\tlast = line;\n\t\t}\n\t\telse\n\t\t\tbreak;\n\t}\n\tif (staged)\n\t\theader.old.lines = header.new.lines - diff;\n\telse\n\t\theader.new.lines = header.old.lines + diff;\n\n\treturn stage_diff_write(io, diff_hdr, chunk) &&\n\t       io_printf(io, \"@@ -%lu,%lu +%lu,%lu @@\\n\",\n\t\t       header.old.position, header.old.lines,\n\t\t       header.new.position, header.new.lines) &&\n\t       stage_diff_range_write(io, staged, chunk + 1, first, last, end);\n}\n\nstatic bool\nstage_apply_chunk(struct view *view, struct line *chunk, struct line *single,\n\t\t  bool revert, update_t update_type)\n{\n\tconst char *apply_argv[SIZEOF_ARG] = {\n\t\t\"git\", \"apply\", \"--whitespace=nowarn\", NULL\n\t};\n\tstruct line *diff_hdr;\n\tstruct io io;\n\tint argc = 3;\n\n\tdiff_hdr = find_prev_line_by_type(view, chunk, LINE_DIFF_HEADER);\n\tif (!diff_hdr)\n\t\treturn false;\n\n\tif (opt_diff_noprefix)\n\t\tapply_argv[argc++] = \"-p0\";\n\tif (!revert)\n\t\tapply_argv[argc++] = \"--cached\";\n\tif (revert || stage_line_type == LINE_STAT_STAGED)\n\t\tapply_argv[argc++] = \"-R\";\n\tapply_argv[argc++] = \"-\";\n\tapply_argv[argc++] = NULL;\n\tif (!io_run(&io, IO_WR, repo.exec_dir, NULL, apply_argv))\n\t\treturn false;\n\n\tswitch (update_type)\n\t{\n\tcase UPDATE_SINGLE_LINE:\n\t\tif (!stage_apply_line(&io, diff_hdr, chunk, single, view->line + view->lines))\n\t\t\tchunk = NULL;\n\t\tbreak;\n\tcase UPDATE_PART:\n\t\tif (!stage_apply_part(&io, diff_hdr, chunk, single, view->line + view->lines))\n\t\t\tchunk = NULL;\n\t\tbreak;\n\tcase UPDATE_NORMAL:\n\t\tif (!stage_diff_write(&io, diff_hdr, chunk) ||\n\t\t    !stage_diff_write(&io, chunk, view->line + view->lines))\n\t\t\tchunk = NULL;\n\t\tbreak;\n\t}\n\n\treturn io_done(&io) && chunk;\n}\n\nstatic bool\nstage_update_files(struct view *view, enum line_type type)\n{\n\tstruct line *line;\n\n\tif (view->parent != &status_view) {\n\t\tbool updated = false;\n\n\t\tfor (line = view->line; (line = find_next_line_by_type(view, line, LINE_DIFF_CHUNK)); line++) {\n\t\t\tif (!stage_apply_chunk(view, line, NULL, false, UPDATE_NORMAL)) {\n\t\t\t\treport(\"Failed to apply chunk\");\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tupdated = true;\n\t\t}\n\n\t\treturn updated;\n\t}\n\n\tview = view->parent;\n\tline = find_next_line_by_type(view, view->line, type);\n\treturn line && status_update_files(view, line + 1);\n}\n\nstatic bool\nstage_update(struct view *view, struct line *line, update_t update_type)\n{\n\tstruct line *chunk = NULL;\n\n\tif (!is_initial_commit() && stage_line_type != LINE_STAT_UNTRACKED)\n\t\tchunk = find_prev_line_by_type(view, line, LINE_DIFF_CHUNK);\n\n\tif (chunk) {\n\t\tif (!stage_apply_chunk(view, chunk, line, false, update_type)) {\n\t\t\treport(\"Failed to apply chunk\");\n\t\t\treturn false;\n\t\t}\n\n\t} else if (!stage_status.status) {\n\t\tif (!stage_update_files(view, stage_line_type)) {\n\t\t\treport(\"Failed to update files\");\n\t\t\treturn false;\n\t\t}\n\n\t} else if (!status_update_file(&stage_status, stage_line_type)) {\n\t\treport(\"Failed to update file\");\n\t\treturn false;\n\t}\n\n\twatch_apply(&view->watch, WATCH_INDEX);\n\n\treturn true;\n}\n\nstatic bool\nstage_revert(struct view *view, struct line *line)\n{\n\tstruct line *chunk = NULL;\n\n\tif (!is_initial_commit() && stage_line_type == LINE_STAT_UNSTAGED)\n\t\tchunk = find_prev_line_by_type(view, line, LINE_DIFF_CHUNK);\n\n\tif (chunk) {\n\t\tif (!prompt_yesno(\"Are you sure you want to revert changes?\"))\n\t\t\treturn false;\n\n\t\tif (!stage_apply_chunk(view, chunk, NULL, true, UPDATE_NORMAL)) {\n\t\t\treport(\"Failed to revert chunk\");\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\n\t} else {\n\t\treturn status_revert(stage_status.status ? &stage_status : NULL,\n\t\t\t\t     stage_line_type, false);\n\t}\n}\n\nstatic struct line *\nstage_insert_chunk(struct view *view, struct chunk_header *header,\n\t\t   struct line *from, struct line *to, struct line *last_unchanged_line)\n{\n\tstruct box *box;\n\tunsigned long from_lineno = last_unchanged_line - view->line;\n\tunsigned long to_lineno = to - view->line;\n\tunsigned long after_lineno = to_lineno;\n\tint i;\n\n\tbox = from->data;\n\tfor (i = 0; i < box->cells; i++) {\n\t\tbox->cell[i].length = 0;\n\t\tbox->cell[i].type = LINE_DIFF_CHUNK;\n\t}\n\n\tif (!append_line_format(view, from, \"@@ -%lu,%lu +%lu,%lu @@\",\n\t\t\theader->old.position, header->old.lines,\n\t\t\theader->new.position, header->new.lines))\n\t\treturn NULL;\n\n\tif (!to)\n\t\treturn from;\n\n\t// Next diff chunk line\n\tif (!add_line_text_at(view, after_lineno++, \"\", LINE_DIFF_CHUNK, 1))\n\t\treturn NULL;\n\n\twhile (from_lineno < to_lineno) {\n\t\tstruct line *line = &view->line[from_lineno++];\n\t\tconst char *text = box_text(line);\n\n\t\tif (!add_line_text_at(view, after_lineno++, text, line->type, 1))\n\t\t\treturn false;\n\t}\n\n\treturn view->line + after_lineno;\n}\n\nstatic void\nstage_split_chunk(struct view *view, struct line *chunk_start)\n{\n\tstruct chunk_header header;\n\tstruct line *last_changed_line = NULL, *last_unchanged_line = NULL, *pos;\n\tint chunks = 0;\n\n\tif (!chunk_start || !parse_chunk_header(&header, box_text(chunk_start))) {\n\t\treport(\"Failed to parse chunk header\");\n\t\treturn;\n\t}\n\n\theader.old.lines = header.new.lines = 0;\n\n\tfor (pos = chunk_start + 1; view_has_line(view, pos); pos++) {\n\t\tconst char *chunk_line = box_text(pos);\n\n\t\tif (*chunk_line == '@' || *chunk_line == '\\\\')\n\t\t\tbreak;\n\n\t\tif (*chunk_line == ' ') {\n\t\t\theader.old.lines++;\n\t\t\theader.new.lines++;\n\t\t\tif (last_unchanged_line < last_changed_line)\n\t\t\t\tlast_unchanged_line = pos;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (last_changed_line && last_changed_line < last_unchanged_line) {\n\t\t\tunsigned long chunk_start_lineno = pos - view->line;\n\t\t\tunsigned long diff = pos - last_unchanged_line;\n\n\t\t\tpos = stage_insert_chunk(view, &header, chunk_start, pos, last_unchanged_line);\n\n\t\t\theader.old.position += header.old.lines - diff;\n\t\t\theader.new.position += header.new.lines - diff;\n\t\t\theader.old.lines = header.new.lines = diff;\n\n\t\t\tchunk_start = view->line + chunk_start_lineno;\n\t\t\tlast_changed_line = last_unchanged_line = NULL;\n\t\t\tchunks++;\n\t\t}\n\n\t\tif (*chunk_line == '-') {\n\t\t\theader.old.lines++;\n\t\t\tlast_changed_line = pos;\n\t\t} else if (*chunk_line == '+') {\n\t\t\theader.new.lines++;\n\t\t\tlast_changed_line = pos;\n\t\t}\n\t}\n\n\tif (chunks) {\n\t\tstage_insert_chunk(view, &header, chunk_start, NULL, NULL);\n\t\tredraw_view(view);\n\t\treset_search(view);\n\t\treport(\"Split the chunk in %d\", chunks + 1);\n\t} else {\n\t\treport(\"The chunk cannot be split\");\n\t}\n}\n\nstatic bool\nstage_exists(struct view *view, struct status *status, enum line_type type)\n{\n\tstruct view *parent = view->parent;\n\n\tif (parent == &status_view)\n\t\treturn status_exists(parent, status, type);\n\n\tif (parent == &main_view)\n\t\treturn main_status_exists(parent, type);\n\n\treturn false;\n}\n\nstatic bool\nstage_chunk_is_wrapped(struct view *view, struct line *line)\n{\n\tstruct line *pos = find_prev_line_by_type(view, line, LINE_DIFF_HEADER);\n\n\tif (!opt_wrap_lines || !pos)\n\t\treturn false;\n\n\tfor (; pos <= line; pos++)\n\t\tif (pos->wrapped)\n\t\t\treturn true;\n\n\treturn false;\n}\n\nstatic bool\nfind_deleted_line_in_head(struct view *view, struct line *line) {\n\tstruct io io;\n\tstruct buffer buffer;\n\tstruct status file_status;\n\tunsigned long line_number_in_head, line_number = 0;\n\tlong bias_by_staged_changes = 0;\n\tchar buf[SIZEOF_STR] = \"\";\n\tchar file_in_head_pathspec[sizeof(\"HEAD:\") + SIZEOF_STR],\n\t\tfile_in_index_pathspec[sizeof(\":\") + SIZEOF_STR];\n\tconst char *file_in_head = NULL;\n\tconst char *ls_tree_argv[] = {\n\t\t\"git\", \"ls-tree\", \"-z\", \"HEAD\", view->env->file, NULL\n\t};\n\tconst char *diff_argv[] = {\n\t\t\"git\", \"diff\", file_in_head_pathspec, file_in_index_pathspec,\n\t\t\"--no-color\", NULL\n\t};\n\n\tif (line->type != LINE_DIFF_DEL)\n\t\treturn false;\n\n\t// Check if the file exists in HEAD.\n\tio_run_buf(ls_tree_argv, buf, sizeof(buf), repo.exec_dir, false);\n\tif (buf[0]) {\n\t\tfile_in_head = view->env->file;\n\t} else { // The file might might be renamed in the index. Find its old name.\n\t\tconst char *diff_index_argv[] = {\n\t\t\t\"git\", \"diff-index\", \"--cached\", \"-C\",\n\t\t\t\"--diff-filter=ACR\", \"-z\", \"HEAD\", NULL\n\t\t};\n\t\tif (!io_run(&io, IO_RD, repo.exec_dir, NULL, diff_index_argv) || io.status)\n\t\t\treturn false;\n\t\twhile (io_get(&io, &buffer, 0, true)) {\n\t\t\tif (!status_get_diff(&file_status, buffer.data, buffer.size))\n\t\t\t\treturn false;\n\t\t\tif (file_status.status != 'A') {\n\t\t\t\tif (!io_get(&io, &buffer, 0, true))\n\t\t\t\t\treturn false;\n\t\t\t\tstring_ncopy(file_status.old.name, buffer.data, buffer.size);\n\t\t\t}\n\t\t\tif (!io_get(&io, &buffer, 0, true))\n\t\t\t\treturn false;\n\t\t\tstring_ncopy(file_status.new.name, buffer.data, buffer.size);\n\t\t\tif (strcmp(file_status.new.name, view->env->file))\n\t\t\t\tcontinue;\n\t\t\t// Quit if the file does not exist in HEAD.\n\t\t\tif (file_status.status == 'A') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfile_in_head = file_status.old.name;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (!file_in_head)\n\t\treturn false;\n\n\t// We want to compute the line number in HEAD. The current view is a diff\n\t// of (un)staged changes on top of HEAD.\n\tline_number_in_head = diff_get_lineno(view, line, /*old=*/true);\n\tassert(line_number_in_head);\n\n\t// When looking at staged changes, we already have the correct\n\t// line number in HEAD.\n\tif (stage_line_type == LINE_STAT_STAGED)\n\t\tgoto found_line;\n\n\t// If we are in an unstaged diff, we also need to take into\n\t// account the staged changes to this file, since they happened\n\t// between HEAD and our diff.\n\tsnprintf(file_in_head_pathspec, sizeof(file_in_head_pathspec), \"HEAD:%s\", file_in_head);\n\tsnprintf(file_in_index_pathspec, sizeof(file_in_index_pathspec), \":%s\", view->env->file);\n\tif (!io_run(&io, IO_RD, repo.exec_dir, NULL, diff_argv) || io.status)\n\t\treturn false;\n\t// line_number_in_head is still the line number in the staged\n\t// version of the file. Go through the staged changes up to our\n\t// line number and count the additions and deletions on the way,\n\t// to compute the line number before the staged changes.\n\twhile (line_number < line_number_in_head && io_get(&io, &buffer, '\\n', true)) {\n\t\tenum line_type type = get_line_type(buffer.data);\n\t\tif (type == LINE_DIFF_CHUNK) {\n\t\t\tstruct chunk_header header;\n\t\t\tif (!parse_chunk_header(&header, buffer.data))\n\t\t\t\treturn false;\n\t\t\tline_number = header.new.position;\n\t\t\tcontinue;\n\t\t}\n\t\tif (!line_number) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (type == LINE_DIFF_DEL) {\n\t\t\tbias_by_staged_changes--;\n\t\t\tcontinue;\n\t\t}\n\t\tassert(type == LINE_DIFF_ADD || type == LINE_DEFAULT ||\n\t\t       // These are just context lines that happen to start with [-+].\n\t\t       type == LINE_DIFF_ADD2 || type == LINE_DIFF_DEL2);\n\t\tif (type == LINE_DIFF_ADD)\n\t\t\tbias_by_staged_changes++;\n\t\tline_number++;\n\t}\n\n\tline_number_in_head -= bias_by_staged_changes;\n\nfound_line:\n\tif (file_in_head != view->env->file)\n\t\tstring_ncopy(view->env->file, file_in_head, strlen(file_in_head));\n\tview->env->goto_lineno = line_number_in_head;\n\treturn true;\n}\n\nstatic enum request\nstage_request(struct view *view, enum request request, struct line *line)\n{\n\tswitch (request) {\n\tcase REQ_STATUS_UPDATE:\n\t\tif (!stage_update(view, line, UPDATE_NORMAL))\n\t\t\treturn REQ_NONE;\n\t\tbreak;\n\n\tcase REQ_STATUS_REVERT:\n\t\tif (!stage_revert(view, line))\n\t\t\treturn REQ_NONE;\n\t\tbreak;\n\n\tcase REQ_STAGE_UPDATE_LINE:\n\t\tif (stage_line_type == LINE_STAT_UNTRACKED ||\n\t\t    stage_status.status == 'A') {\n\t\t\treport(\"Staging single lines is not supported for new files\");\n\t\t\treturn REQ_NONE;\n\t\t}\n\t\tif (line->type != LINE_DIFF_DEL && line->type != LINE_DIFF_ADD) {\n\t\t\treport(\"Please select a change to stage\");\n\t\t\treturn REQ_NONE;\n\t\t}\n\t\tif (stage_chunk_is_wrapped(view, line)) {\n\t\t\treport(\"Staging is not supported for wrapped lines\");\n\t\t\treturn REQ_NONE;\n\t\t}\n\t\tif (!stage_update(view, line, UPDATE_SINGLE_LINE))\n\t\t\treturn REQ_NONE;\n\t\tbreak;\n\n\n\tcase REQ_STAGE_UPDATE_PART:\n\t\tif (stage_line_type == LINE_STAT_UNTRACKED ||\n\t\t    stage_status.status == 'A') {\n\t\t\treport(\"Staging partial chunks is not supported for new files\");\n\t\t\treturn REQ_NONE;\n\t\t}\n\t\tif (line->type != LINE_DIFF_DEL && line->type != LINE_DIFF_ADD) {\n\t\t\treport(\"Please select a change to stage\");\n\t\t\treturn REQ_NONE;\n\t\t}\n\t\tif (stage_chunk_is_wrapped(view, line)) {\n\t\t\treport(\"Staging is not supported for wrapped lines\");\n\t\t\treturn REQ_NONE;\n\t\t}\n\t\tif (!stage_update(view, line, UPDATE_PART))\n\t\t\treturn REQ_NONE;\n\t\tbreak;\n\n\n\tcase REQ_STAGE_SPLIT_CHUNK:\n\t\tif (stage_line_type == LINE_STAT_UNTRACKED ||\n\t\t    !(line = find_prev_line_by_type(view, line, LINE_DIFF_CHUNK))) {\n\t\t\treport(\"No chunks to split in sight\");\n\t\t\treturn REQ_NONE;\n\t\t}\n\t\tstage_split_chunk(view, line);\n\t\treturn REQ_NONE;\n\n\tcase REQ_EDIT:\n\t\tif (!stage_status.new.name[0])\n\t\t\treturn diff_common_edit(view, request, line);\n\n\t\tif (stage_status.status == 'D') {\n\t\t\treport(\"File has been deleted.\");\n\t\t\treturn REQ_NONE;\n\t\t}\n\n\t\tif (stage_line_type == LINE_STAT_UNTRACKED) {\n\t\t\topen_editor(stage_status.new.name, (line - view->line) + 1);\n\t\t} else {\n\t\t\topen_editor(stage_status.new.name, diff_get_lineno(view, line, false));\n\t\t}\n\t\tbreak;\n\n\tcase REQ_REFRESH:\n\t\t/* Reload everything(including current branch information) ... */\n\t\tload_refs(true);\n\t\tbreak;\n\n\tcase REQ_VIEW_BLAME:\n\t\tif (stage_line_type == LINE_STAT_UNTRACKED) {\n\t\t\treport(\"Nothing to blame here\");\n\t\t\treturn REQ_NONE;\n\t\t}\n\n\t\tif (stage_status.new.name[0]) {\n\t\t\tstring_copy(view->env->file, stage_status.new.name);\n\t\t} else {\n\t\t\tconst char *file = diff_get_pathname(view, line, false);\n\n\t\t\tif (file)\n\t\t\t\tstring_ncopy(view->env->file, file, strlen(file));\n\t\t}\n\n\t\tview->env->ref[0] = 0;\n\t\tif (find_deleted_line_in_head(view, line))\n\t\t\tstring_copy(view->env->ref, \"HEAD\");\n\t\telse\n\t\t\tview->env->goto_lineno = diff_get_lineno(view, line, false);\n\t\tif (view->env->goto_lineno > 0)\n\t\t\tview->env->goto_lineno--;\n\t\treturn request;\n\n\tcase REQ_VIEW_BLOB:\n\t\tview->env->goto_lineno = diff_get_lineno(view, line, true);\n\t\tif (view->env->goto_lineno > 0)\n\t\t\tview->env->goto_lineno--;\n\t\treturn request;\n\n\tcase REQ_VIEW_CLOSE:\n\tcase REQ_VIEW_CLOSE_NO_QUIT:\n\t\tstage_line_type = 0;\n\t\treturn request;\n\n\tcase REQ_ENTER:\n\t\treturn diff_common_enter(view, request, line);\n\n\tdefault:\n\t\treturn request;\n\t}\n\n\t/* Check whether the staged entry still exists, and close the\n\t * stage view if it doesn't. */\n\tif (view->parent && !stage_exists(view, &stage_status, stage_line_type)) {\n\t\tstage_line_type = 0;\n\t\treturn view->parent == &status_view && view_is_displayed(view->parent)\n\t\t\t\t? view_request(view->parent, REQ_ENTER)\n\t\t\t\t: REQ_VIEW_CLOSE;\n\t} else if (stage_line_type == LINE_STAT_UNTRACKED)\n\t\treturn REQ_VIEW_CLOSE;\n\n\trefresh_view(view);\n\n\treturn REQ_NONE;\n}\n\nstatic void\nstage_select(struct view *view, struct line *line)\n{\n\tconst char *changes_msg = stage_line_type == LINE_STAT_STAGED ? \"Staged changes\"\n\t\t\t\t: stage_line_type == LINE_STAT_UNSTAGED ? \"Unstaged changes\"\n\t\t\t\t: NULL;\n\n\tdiff_common_select(view, line, changes_msg);\n}\n\nstatic enum status_code\nstage_open(struct view *view, enum open_flags flags)\n{\n\tconst char *no_head_diff_argv[] = {\n\t\tGIT_DIFF_STAGED_INITIAL(encoding_arg, diff_context_arg(), ignore_space_arg(),\n\t\t\tstage_status.new.name)\n\t};\n\tconst char *index_show_argv[] = {\n\t\tGIT_DIFF_STAGED(encoding_arg, diff_context_arg(), diff_prefix_arg(),\n\t\t\tignore_space_arg(), word_diff_arg(), stage_status.old.name,\n\t\t\tstage_status.new.name)\n\t};\n\tconst char *files_show_argv[] = {\n\t\tGIT_DIFF_UNSTAGED(encoding_arg, diff_context_arg(), diff_prefix_arg(),\n\t\t\tignore_space_arg(), word_diff_arg(), stage_status.old.name,\n\t\t\tstage_status.new.name)\n\t};\n\t/* Diffs for unmerged entries are empty when passing the new\n\t * path, so leave out the new path. */\n\tconst char *files_unmerged_argv[] = {\n\t\t\"git\", \"diff-files\", encoding_arg, \"--textconv\", \"--patch-with-stat\",\n\t\t\tDIFF_ARGS, diff_context_arg(), diff_prefix_arg(),\n\t\t\tignore_space_arg(), \"--\", stage_status.old.name, NULL\n\t};\n\tstatic const char *file_argv[] = { repo.exec_dir, stage_status.new.name, NULL };\n\tconst char **argv = NULL;\n\tstruct stage_state *state = view->private;\n\tenum status_code code;\n\n\tif (!stage_line_type)\n\t\treturn error(\"No stage content, press %s to open the status view and choose file\",\n\t\t\t     get_view_key(view, REQ_VIEW_STATUS));\n\n\tview->encoding = NULL;\n\n\tswitch (stage_line_type) {\n\tcase LINE_STAT_STAGED:\n\t\twatch_register(&view->watch, WATCH_INDEX_STAGED);\n\t\tif (is_initial_commit()) {\n\t\t\targv = no_head_diff_argv;\n\t\t} else {\n\t\t\targv = index_show_argv;\n\t\t}\n\t\tbreak;\n\n\tcase LINE_STAT_UNSTAGED:\n\t\twatch_register(&view->watch, WATCH_INDEX_UNSTAGED);\n\t\tif (stage_status.status != 'U')\n\t\t\targv = files_show_argv;\n\t\telse\n\t\t\targv = files_unmerged_argv;\n\t\tbreak;\n\n\tcase LINE_STAT_UNTRACKED:\n\t\twatch_register(&view->watch, WATCH_INDEX_UNTRACKED);\n\t\targv = file_argv;\n\t\tview->encoding = get_path_encoding(stage_status.old.name, default_encoding);\n\t\tbreak;\n\n\tdefault:\n\t\tdie(\"line type %d not handled in switch\", stage_line_type);\n\t}\n\n\tif (!status_stage_info(view->ref, stage_line_type, &stage_status))\n\t\treturn error(\"Failed to open stage view\");\n\n\tstate->diff.stage = true;\n\n\tif (stage_line_type != LINE_STAT_UNTRACKED)\n\t\tdiff_save_line(view, &state->diff, flags);\n\n\tview->vid[0] = 0;\n\tcode = begin_update(view, repo.exec_dir, argv, flags | OPEN_WITH_STDERR);\n\tif (code == SUCCESS && stage_line_type != LINE_STAT_UNTRACKED)\n\t\treturn diff_init_highlight(view, &state->diff);\n\n\treturn code;\n}\n\nstatic bool\nstage_read(struct view *view, struct buffer *buf, bool force_stop)\n{\n\tstruct stage_state *state = view->private;\n\n\tif (!stage_line_type)\n\t\treturn true;\n\n\tif (stage_line_type == LINE_STAT_UNTRACKED)\n\t\treturn pager_common_read(view, buf ? buf->data : NULL, LINE_DEFAULT, NULL);\n\n\tif (!buf) {\n\t\tif (!diff_done_highlight(&state->diff)) {\n\t\t\tif (!force_stop)\n\t\t\t\treport(\"Failed to run the diff-highlight program: %s\", opt_diff_highlight);\n\t\t\treturn false;\n\t\t}\n\n\t\t/* After git apply, git diff-files can sometimes return an empty line. */\n\t\tif (view->lines <= 1 && !force_stop && view->prev) {\n\t\t\twatch_apply(&view->watch, WATCH_INDEX);\n\t\t\tstage_line_type = 0;\n\t\t\tmaximize_view(view->prev, false);\n\t\t\treturn false;\n\t\t}\n\n\t\tdiff_restore_line(view, &state->diff);\n\n\t\treturn true;\n\t}\n\n\treturn diff_common_read(view, buf->data, &state->diff);\n}\n\nstatic struct view_ops stage_ops = {\n\t\"line\",\n\targv_env.status,\n\tVIEW_DIFF_LIKE | VIEW_REFRESH | VIEW_FLEX_WIDTH,\n\tsizeof(struct stage_state),\n\tstage_open,\n\tstage_read,\n\tview_column_draw,\n\tstage_request,\n\tview_column_grep,\n\tstage_select,\n\tNULL,\n\tview_column_bit(LINE_NUMBER) | view_column_bit(TEXT),\n\tpager_get_column_data,\n};\n\nDEFINE_VIEW(stage);\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/stash.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/display.h\"\n#include \"tig/draw.h\"\n#include \"tig/main.h\"\n#include \"tig/diff.h\"\n#include \"tig/repo.h\"\n\nstatic enum status_code\nstash_open(struct view *view, enum open_flags flags)\n{\n\tstatic const char *stash_argv[] = { \"git\", \"stash\", \"list\",\n\t\tencoding_arg, \"--no-color\", \"--pretty=raw\", NULL };\n\tconst char **argv = NULL;\n\tstruct main_state *state = view->private;\n\tenum status_code code;\n\n\tif (!(repo.is_inside_work_tree || *repo.worktree))\n\t\treturn error(\"The stash view requires a working tree\");\n\n\t/* git stash list only works well with commit limiting options,\n\t * so filter --all, --branches, --remotes and revisions from\n\t * %(revargs). */\n\tif (!argv_append_array(&argv, stash_argv))\n\t\treturn ERROR_OUT_OF_MEMORY;\n\tif (opt_rev_args) {\n\t\tint i;\n\t\tfor (i = 0; opt_rev_args[i]; i++) {\n\t\t\tconst char *arg = opt_rev_args[i];\n\t\t\tif (arg[0] == '-' && strcmp(arg, \"--all\") &&\n\t\t\t    strcmp(arg, \"--branches\") && strcmp(arg, \"--remotes\"))\n\t\t\t\targv_append(&argv, arg);\n\t\t}\n\t}\n\n\tstate->with_graph = false;\n\twatch_register(&view->watch, WATCH_STASH);\n\tcode = begin_update(view, NULL, argv, flags | OPEN_RELOAD);\n\targv_free(argv);\n\tfree(argv);\n\treturn code;\n}\n\nstatic void\nstash_select(struct view *view, struct line *line)\n{\n\tstruct main_state *state = view->private;\n\n\tmain_select(view, line);\n\tassert(state->reflogs >= line->lineno);\n\tstring_ncopy(view->env->stash, state->reflog[line->lineno - 1] + STRING_SIZE(\"refs/\"),\n\t\t     strlen(state->reflog[line->lineno - 1]) - STRING_SIZE(\"refs/\"));\n\tstring_copy(view->ref, view->env->stash);\n\tview->env->blob[0] = 0;\n}\n\nstatic enum request\nstash_request(struct view *view, enum request request, struct line *line)\n{\n\tenum open_flags flags = (view_is_displayed(view) && request != REQ_VIEW_DIFF)\n\t\t\t\t? OPEN_SPLIT : OPEN_DEFAULT;\n\tstruct view *diff = &diff_view;\n\n\tswitch (request) {\n\tcase REQ_VIEW_DIFF:\n\tcase REQ_ENTER:\n\t\tif (!view_is_displayed(diff) ||\n\t\t    strcmp(view->env->stash, diff->ref)) {\n\t\t\tconst char *diff_argv[] = {\n\t\t\t\t\"git\", \"stash\", \"show\", encoding_arg, \"--pretty=fuller\",\n\t\t\t\t\t\"--patch-with-stat\", diff_context_arg(),\n\t\t\t\t\tignore_space_arg(), word_diff_arg(), DIFF_ARGS,\n\t\t\t\t\t\"%(cmdlineargs)\", \"--no-color\", \"%(stash)\", NULL\n\t\t\t};\n\n\t\t\tif (!argv_format(diff_view.env, &diff_view.argv, diff_argv, 0))\n\t\t\t\treport(\"Failed to format argument\");\n\t\t\telse\n\t\t\t\topen_diff_view(view, flags | OPEN_PREPARED);\n\t\t}\n\t\treturn REQ_NONE;\n\n\tdefault:\n\t\treturn main_request(view, request, line);\n\t}\n}\n\nstatic struct view_ops stash_ops = {\n\t\"stash\",\n\t\"\",\n\tVIEW_SEND_CHILD_ENTER | VIEW_REFRESH,\n\tsizeof(struct main_state),\n\tstash_open,\n\tmain_read,\n\tview_column_draw,\n\tstash_request,\n\tview_column_grep,\n\tstash_select,\n\tmain_done,\n\tview_column_bit(AUTHOR) | view_column_bit(COMMIT_TITLE) |\n\t\tview_column_bit(DATE) | view_column_bit(ID) |\n\t\tview_column_bit(LINE_NUMBER),\n\tmain_get_column_data,\n};\n\nDEFINE_VIEW(stash);\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/status.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/io.h\"\n#include \"tig/refdb.h\"\n#include \"tig/repo.h\"\n#include \"tig/options.h\"\n#include \"tig/parse.h\"\n#include \"tig/display.h\"\n#include \"tig/prompt.h\"\n#include \"tig/view.h\"\n#include \"tig/search.h\"\n#include \"tig/draw.h\"\n#include \"tig/git.h\"\n#include \"tig/watch.h\"\n#include \"tig/status.h\"\n#include \"tig/main.h\"\n#include \"tig/stage.h\"\n\n/*\n * Status backend\n */\n\nstatic char status_onbranch[SIZEOF_STR];\nstatic bool show_untracked_only = false;\nstatic bool no_files_staged;\n\nvoid\nopen_status_view(struct view *prev, bool untracked_only, enum open_flags flags)\n{\n\tif (show_untracked_only != untracked_only) {\n\t\tshow_untracked_only = untracked_only;\n\t\tflags |= OPEN_RELOAD;\n\t}\n\topen_view(prev, &status_view, flags);\n}\n\n/* This should work even for the \"On branch\" line. */\nstatic inline bool\nstatus_has_none(struct view *view, struct line *line)\n{\n\treturn view_has_line(view, line) && !line[1].data;\n}\n\n/* Get fields from the diff line:\n * :100644 100644 06a5d6ae9eca55be2e0e585a152e6b1336f2b20e 0000000000000000000000000000000000000000 M\n */\ninline bool\nstatus_get_diff(struct status *file, const char *buf, size_t bufsize)\n{\n\tconst char *old_mode = buf +  1;\n\tconst char *new_mode = buf +  8;\n\tconst char *old_rev  = buf + 15;\n\tconst char *new_rev  = buf + 56;\n\tconst char *status   = buf + 97;\n\n\tif (bufsize < 98 ||\n\t    old_mode[-1] != ':' ||\n\t    new_mode[-1] != ' ' ||\n\t    old_rev[-1]  != ' ' ||\n\t    new_rev[-1]  != ' ' ||\n\t    status[-1]   != ' ')\n\t\treturn false;\n\n\tfile->status = *status;\n\n\tstring_copy_rev(file->old.rev, old_rev);\n\tstring_copy_rev(file->new.rev, new_rev);\n\n\tfile->old.mode = strtoul(old_mode, NULL, 8);\n\tfile->new.mode = strtoul(new_mode, NULL, 8);\n\n\tfile->old.name[0] = file->new.name[0] = 0;\n\n\treturn true;\n}\n\nstatic bool\nstatus_run(struct view *view, const char *argv[], char status, enum line_type type)\n{\n\tstruct status *unmerged = NULL;\n\tstruct buffer buf;\n\tstruct io io;\n\tconst char **status_argv = NULL;\n\tbool ok = argv_format(view->env, &status_argv, argv, 0) &&\n\t\t  io_run(&io, IO_RD, repo.exec_dir, NULL, status_argv);\n\n\targv_free(status_argv);\n\tfree(status_argv);\n\tif (!ok)\n\t\treturn false;\n\n\tadd_line_nodata(view, type);\n\n\twhile (io_get(&io, &buf, 0, true)) {\n\t\tstruct line *line;\n\t\tstruct status parsed = {0};\n\t\tstruct status *file = &parsed;\n\n\t\t/* Parse diff info part. */\n\t\tif (status) {\n\t\t\tfile->status = status;\n\t\t\tif (status == 'A')\n\t\t\t\tstring_copy(file->old.rev, NULL_ID);\n\n\t\t} else {\n\t\t\tif (!status_get_diff(&parsed, buf.data, buf.size))\n\t\t\t\tgoto error_out;\n\n\t\t\tif (!io_get(&io, &buf, 0, true))\n\t\t\t\tbreak;\n\t\t}\n\n\t\t/* Grab the old name for rename/copy. */\n\t\tif (!*file->old.name &&\n\t\t    (file->status == 'R' || file->status == 'C')) {\n\t\t\tstring_ncopy(file->old.name, buf.data, buf.size);\n\n\t\t\tif (!io_get(&io, &buf, 0, true))\n\t\t\t\tbreak;\n\t\t}\n\n\t\t/* git-ls-files just delivers a NUL separated list of\n\t\t * file names similar to the second half of the\n\t\t * git-diff-* output. */\n\t\tstring_ncopy(file->new.name, buf.data, buf.size);\n\t\tif (!*file->old.name)\n\t\t\tstring_copy(file->old.name, file->new.name);\n\n\t\t/* Collapse all modified entries that follow an associated\n\t\t * unmerged entry. */\n\t\tif (unmerged && !strcmp(unmerged->new.name, file->new.name)) {\n\t\t\tunmerged->status = 'U';\n\t\t\tunmerged = NULL;\n\t\t\tcontinue;\n\t\t}\n\n\t\tline = add_line_alloc(view, &file, type, 0, false);\n\t\tif (!line)\n\t\t\tgoto error_out;\n\t\t*file = parsed;\n\t\tview_column_info_update(view, line);\n\t\tif (file->status == 'U')\n\t\t\tunmerged = file;\n\t}\n\n\tif (io_error(&io)) {\nerror_out:\n\t\tio_done(&io);\n\t\treturn false;\n\t}\n\n\tif (!view->line[view->lines - 1].data) {\n\t\tadd_line_nodata(view, LINE_STAT_NONE);\n\t\tif (type == LINE_STAT_STAGED) {\n\t\t\twatch_apply(&view->watch, WATCH_INDEX_STAGED_NO);\n\t\t\tno_files_staged = true;\n\t\t} else if (type == LINE_STAT_UNSTAGED) {\n\t\t\twatch_apply(&view->watch, WATCH_INDEX_UNSTAGED_NO);\n\t\t} else if (type == LINE_STAT_UNTRACKED) {\n\t\t\twatch_apply(&view->watch, WATCH_INDEX_UNTRACKED_NO);\n\t\t}\n\t} else {\n\t\tif (type == LINE_STAT_STAGED) {\n\t\t\twatch_apply(&view->watch, WATCH_INDEX_STAGED_YES);\n\t\t\tno_files_staged = false;\n\t\t} else if (type == LINE_STAT_UNSTAGED) {\n\t\t\twatch_apply(&view->watch, WATCH_INDEX_UNSTAGED_YES);\n\t\t} else if (type == LINE_STAT_UNTRACKED) {\n\t\t\twatch_apply(&view->watch, WATCH_INDEX_UNTRACKED_YES);\n\t\t}\n\t}\n\n\tio_done(&io);\n\treturn true;\n}\n\nstatic const char *status_diff_index_argv[] = { GIT_DIFF_STAGED_FILES(\"-z\") };\nstatic const char *status_diff_files_argv[] = { GIT_DIFF_UNSTAGED_FILES(\"-z\") };\n\nstatic const char *status_list_other_argv[] = {\n\t\"git\", \"ls-files\", \"-z\", \"--others\", \"--exclude-standard\", NULL, NULL, NULL\n};\n\nstatic const char *status_list_no_head_argv[] = {\n\t\"git\", \"ls-files\", \"-z\", \"--cached\", \"--exclude-standard\", NULL\n};\n\n/* Restore the previous line number to stay in the context or select a\n * line with something that can be updated. */\nstatic void\nstatus_restore(struct view *view)\n{\n\tif (!check_position(&view->prev_pos))\n\t\treturn;\n\n\tif (view->prev_pos.lineno >= view->lines)\n\t\tview->prev_pos.lineno = view->lines - 1;\n\twhile (view->prev_pos.lineno < view->lines && !view->line[view->prev_pos.lineno].data)\n\t\tview->prev_pos.lineno++;\n\twhile (view->prev_pos.lineno > 0 && !view->line[view->prev_pos.lineno].data)\n\t\tview->prev_pos.lineno--;\n\n\t/* If the above fails, always skip the \"On branch\" line. */\n\tif (view->prev_pos.lineno < view->lines)\n\t\tview->pos.lineno = view->prev_pos.lineno;\n\telse\n\t\tview->pos.lineno = 1;\n\n\tif (view->prev_pos.offset > view->pos.lineno)\n\t\tview->pos.offset = view->pos.lineno;\n\telse if (view->prev_pos.offset < view->lines)\n\t\tview->pos.offset = view->prev_pos.offset;\n\n\tclear_position(&view->prev_pos);\n}\n\nstatic bool\nstatus_branch_tracking_info(char *buf, size_t buf_len, const char *head,\n\t\t\t    const char *remote)\n{\n\tif (!string_nformat(buf, buf_len, NULL, \"%s...%s\",\n\t\t\t    head, remote)) {\n\t\treturn false;\n\t}\n\n\tconst char *tracking_info_argv[] = {\n\t\t\"git\", \"rev-list\", \"--left-right\", buf, NULL\n\t};\n\n\tstruct io io;\n\n\tif (!io_run(&io, IO_RD, repo.exec_dir, NULL, tracking_info_argv)) {\n\t\treturn false;\n\t}\n\n\tstruct buffer result = { 0 };\n\tint ahead = 0;\n\tint behind = 0;\n\n\twhile (io_get(&io, &result, '\\n', true)) {\n\t\tif (result.size > 0 && result.data) {\n\t\t\tif (result.data[0] == '<') {\n\t\t\t\tahead++;\n\t\t\t} else if (result.data[0] == '>') {\n\t\t\t\tbehind++;\n\t\t\t}\n\t\t}\n\t}\n\n\tbool io_failed = io_error(&io);\n\tio_done(&io);\n\n\tif (io_failed) {\n\t\treturn false;\n\t}\n\n\tif (ahead == 0 && behind == 0) {\n\t\treturn string_nformat(buf, buf_len, NULL,\n\t\t\t\t      \"Your branch is up-to-date with '%s'.\",\n\t\t\t\t      remote);\n\t} else if (ahead > 0 && behind > 0) {\n\t\treturn string_nformat(buf, buf_len, NULL,\n\t\t\t\t      \"Your branch and '%s' have diverged, \"\n\t\t\t\t      \"and have %d and %d different commits \"\n\t\t\t\t      \"each, respectively\",\n\t\t\t\t      remote, ahead, behind);\n\t} else if (ahead > 0) {\n\t\treturn string_nformat(buf, buf_len, NULL,\n\t\t\t\t      \"Your branch is ahead of '%s' by \"\n\t\t\t\t      \"%d commit%s.\", remote, ahead,\n\t\t\t\t      ahead > 1 ? \"s\" : \"\");\n\t} else if (behind > 0) {\n\t\treturn string_nformat(buf, buf_len, NULL,\n\t\t\t\t      \"Your branch is behind '%s' by \"\n\t\t\t\t      \"%d commit%s.\", remote, behind,\n\t\t\t\t      behind > 1 ? \"s\" : \"\");\n\t}\n\n\treturn false;\n}\n\nstatic void\nstatus_update_onbranch(void)\n{\n\tstatic const char *paths[][3] = {\n\t\t{ \"rebase-apply/rebasing\",\t\"rebase-apply/head-name\",\t\"Rebasing\" },\n\t\t{ \"rebase-apply/applying\",\t\"rebase-apply/head-name\",\t\"Applying mailbox to\" },\n\t\t{ \"rebase-apply/\",\t\t\"rebase-apply/head-name\",\t\"Rebasing mailbox onto\" },\n\t\t{ \"rebase-merge/interactive\",\t\"rebase-merge/head-name\",\t\"Interactive rebase\" },\n\t\t{ \"rebase-merge/\",\t\t\"rebase-merge/head-name\",\t\"Rebase merge\" },\n\t\t{ \"MERGE_HEAD\",\t\t\tNULL,\t\t\t\t\"Merging\" },\n\t\t{ \"BISECT_LOG\",\t\t\tNULL,\t\t\t\t\"Bisecting\" },\n\t\t{ \"HEAD\",\t\t\tNULL,\t\t\t\t\"On branch\" },\n\t};\n\tchar buf[SIZEOF_STR];\n\tstruct stat stat;\n\tint i;\n\n\tif (is_initial_commit()) {\n\t\tstring_copy(status_onbranch, \"Initial commit\");\n\t\treturn;\n\t}\n\n\tfor (i = 0; i < ARRAY_SIZE(paths); i++) {\n\t\tconst char *prefix = paths[i][2];\n\t\tconst char *head = repo.head;\n\t\tconst char *tracking_info = \"\";\n\n\t\tif (!string_format(buf, \"%s/%s\", repo.git_dir, paths[i][0]) ||\n\t\t    lstat(buf, &stat) < 0)\n\t\t\tcontinue;\n\n\t\tif (paths[i][1]) {\n\t\t\tstruct io io;\n\n\t\t\tif (io_open(&io, \"%s/%s\", repo.git_dir, paths[i][1]) &&\n\t\t\t    io_read_buf(&io, buf, sizeof(buf), false)) {\n\t\t\t\thead = buf;\n\t\t\t\tif (!prefixcmp(head, \"refs/heads/\"))\n\t\t\t\t\thead += STRING_SIZE(\"refs/heads/\");\n\t\t\t}\n\t\t}\n\n\t\tif (!*head && !strcmp(paths[i][0], \"HEAD\") && *repo.head_id) {\n\t\t\tconst struct ref *ref = get_canonical_ref(repo.head_id);\n\n\t\t\tprefix = \"HEAD detached at\";\n\t\t\thead = repo.head_id;\n\n\t\t\tif (ref && strcmp(ref->name, \"HEAD\"))\n\t\t\t\thead = ref->name;\n\t\t} else if (!paths[i][1] && *repo.upstream) {\n\t\t\tif (status_branch_tracking_info(buf, sizeof(buf),\n\t\t\t\t\t\t\thead, repo.upstream)) {\n\t\t\t\ttracking_info = buf;\n\t\t\t}\n\t\t}\n\n\t\tconst char *fmt = *tracking_info == '\\0' ? \"%s %s\" : \"%s %s. %s\";\n\n\t\tif (!string_format(status_onbranch, fmt,\n\t\t\t\t   prefix, head, tracking_info))\n\t\t\tstring_copy(status_onbranch, repo.head);\n\t\treturn;\n\t}\n\n\tstring_copy(status_onbranch, \"Not currently on any branch\");\n}\n\nstatic bool\nstatus_read_untracked(struct view *view)\n{\n\tif (!opt_status_show_untracked_files)\n\t\treturn add_line_nodata(view, LINE_STAT_UNTRACKED)\n\t\t    && add_line_nodata(view, LINE_STAT_NONE);\n\n\tstatus_list_other_argv[ARRAY_SIZE(status_list_other_argv) - 3] =\n\t\topt_status_show_untracked_dirs ? NULL : \"--directory\";\n\tstatus_list_other_argv[ARRAY_SIZE(status_list_other_argv) - 2] =\n\t\topt_status_show_untracked_dirs ? NULL : \"--no-empty-directory\";\n\n\treturn status_run(view, status_list_other_argv, '?', LINE_STAT_UNTRACKED);\n}\n\n/* First parse staged info using git-diff-index(1), then parse unstaged\n * info using git-diff-files(1), and finally untracked files using\n * git-ls-files(1). */\nstatic enum status_code\nstatus_open(struct view *view, enum open_flags flags)\n{\n\tconst char **staged_argv = is_initial_commit() ?\n\t\tstatus_list_no_head_argv : status_diff_index_argv;\n\tchar staged_status = staged_argv == status_list_no_head_argv ? 'A' : 0;\n\n\tif (!(repo.is_inside_work_tree || *repo.worktree))\n\t\treturn error(\"The status view requires a working tree\");\n\n\treset_view(view);\n\n\t/* FIXME: Watch untracked files and on-branch info. */\n\twatch_register(&view->watch, WATCH_INDEX);\n\n\tadd_line_nodata(view, LINE_HEADER);\n\tstatus_update_onbranch();\n\n\tupdate_index();\n\n\tif ((!show_untracked_only && !status_run(view, staged_argv, staged_status, LINE_STAT_STAGED)) ||\n\t    (!show_untracked_only && !status_run(view, status_diff_files_argv, 0, LINE_STAT_UNSTAGED)) ||\n\t    !status_read_untracked(view))\n\t\treturn error(\"Failed to load status data\");\n\n\t/* Restore the exact position or use the specialized restore\n\t * mode? */\n\tstatus_restore(view);\n\treturn SUCCESS;\n}\n\nstatic bool\nstatus_get_column_data(struct view *view, const struct line *line, struct view_column_data *column_data)\n{\n\tstruct status *status = line->data;\n\n\tif (!status) {\n\t\tstatic struct view_column group_column;\n\t\tconst char *text;\n\t\tenum line_type type;\n\n\t\tcolumn_data->section = &group_column;\n\t\tcolumn_data->section->type = VIEW_COLUMN_SECTION;\n\n\t\tswitch (line->type) {\n\t\tcase LINE_STAT_STAGED:\n\t\t\ttype = LINE_SECTION;\n\t\t\ttext = \"Changes to be committed:\";\n\t\t\tbreak;\n\n\t\tcase LINE_STAT_UNSTAGED:\n\t\t\ttype = LINE_SECTION;\n\t\t\ttext = \"Changes not staged for commit:\";\n\t\t\tbreak;\n\n\t\tcase LINE_STAT_UNTRACKED:\n\t\t\ttype = LINE_SECTION;\n\t\t\ttext = \"Untracked files:\";\n\t\t\tbreak;\n\n\t\tcase LINE_STAT_NONE:\n\t\t\ttype = LINE_DEFAULT;\n\t\t\ttext = \"  (no files)\";\n\t\t\tif (!opt_status_show_untracked_files\n\t\t\t    && view->line < line\n\t\t\t    && line[-1].type == LINE_STAT_UNTRACKED)\n\t\t\t\ttext = \"  (not shown)\";\n\t\t\tbreak;\n\n\t\tcase LINE_HEADER:\n\t\t\ttype = LINE_HEADER;\n\t\t\ttext = status_onbranch;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\treturn false;\n\t\t}\n\n\t\tcolumn_data->section->opt.section.text = text;\n\t\tcolumn_data->section->opt.section.type = type;\n\n\t} else {\n\t\tcolumn_data->status = &status->status;\n\t\tcolumn_data->file_name = status->new.name;\n\t}\n\treturn true;\n}\n\nstatic enum request\nstatus_enter(struct view *view, struct line *line, enum open_flags flags)\n{\n\tstruct status *status = line->data;\n\n\tif (line->type == LINE_STAT_NONE ||\n\t    (!status && line[1].type == LINE_STAT_NONE)) {\n\t\tif (displayed_views() == 2)\n\t\t\tmaximize_view(view, true);\n\t\treport(\"No file to diff\");\n\t\treturn REQ_NONE;\n\t}\n\n\tswitch (line->type) {\n\tcase LINE_STAT_STAGED:\n\tcase LINE_STAT_UNSTAGED:\n\t\tbreak;\n\n\tcase LINE_STAT_UNTRACKED:\n\t\tif (!status) {\n\t\t\treport(\"No file to show\");\n\t\t\treturn REQ_NONE;\n\t\t}\n\n\t\tif (!suffixcmp(status->new.name, -1, \"/\")) {\n\t\t\treport(\"Cannot display a directory\");\n\t\t\treturn REQ_NONE;\n\t\t}\n\t\tbreak;\n\n\tdefault:\n\t\tif (displayed_views() == 2)\n\t\t\tmaximize_view(view, true);\n\t\treport(\"Nothing to enter\");\n\t\treturn REQ_NONE;\n\t}\n\n\topen_stage_view(view, status, line->type, flags);\n\treturn REQ_NONE;\n}\n\nbool\nstatus_exists(struct view *view, struct status *status, enum line_type type)\n{\n\tunsigned long lineno;\n\n\trefresh_view(view);\n\n\tfor (lineno = 0; lineno < view->lines; lineno++) {\n\t\tstruct line *line = &view->line[lineno];\n\t\tstruct status *pos = line->data;\n\n\t\tif (line->type != type)\n\t\t\tcontinue;\n\t\tif ((!pos && (!status || !status->status) && line[1].data) ||\n\t\t    (pos && status && !strcmp(status->new.name, pos->new.name))) {\n\t\t\tselect_view_line(view, lineno);\n\t\t\tstatus_restore(view);\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\n\nstatic bool\nstatus_update_prepare(struct io *io, enum line_type type)\n{\n\tconst char *staged_argv[] = {\n\t\t\"git\", \"update-index\", \"-z\", \"--index-info\", NULL\n\t};\n\tconst char *others_argv[] = {\n\t\t\"git\", \"update-index\", \"-z\", \"--add\", \"--remove\", \"--stdin\", NULL\n\t};\n\n\tswitch (type) {\n\tcase LINE_STAT_STAGED:\n\t\treturn io_run(io, IO_WR, repo.exec_dir, NULL, staged_argv);\n\n\tcase LINE_STAT_UNSTAGED:\n\tcase LINE_STAT_UNTRACKED:\n\t\treturn io_run(io, IO_WR, repo.exec_dir, NULL, others_argv);\n\n\tdefault:\n\t\tdie(\"line type %d not handled in switch\", type);\n\t\treturn false;\n\t}\n}\n\nstatic bool\nstatus_update_write(struct io *io, struct status *status, enum line_type type)\n{\n\tswitch (type) {\n\tcase LINE_STAT_STAGED:\n\t\treturn io_printf(io, \"%06o %s\\t%s%c\", status->old.mode,\n\t\t\t\t status->old.rev, status->old.name, 0);\n\n\tcase LINE_STAT_UNSTAGED:\n\tcase LINE_STAT_UNTRACKED:\n\t\treturn io_printf(io, \"%s%c\", status->new.name, 0);\n\n\tdefault:\n\t\tdie(\"line type %d not handled in switch\", type);\n\t\treturn false;\n\t}\n}\n\nbool\nstatus_update_file(struct status *status, enum line_type type)\n{\n\tconst char *name = status->new.name;\n\tstruct io io;\n\tbool result;\n\n\tif (type == LINE_STAT_UNTRACKED && !suffixcmp(name, strlen(name), \"/\")) {\n\t\tconst char *add_argv[] = { \"git\", \"add\", \"--\", name, NULL };\n\n\t\treturn io_run_bg(add_argv, repo.exec_dir);\n\t}\n\n\tif (!status_update_prepare(&io, type))\n\t\treturn false;\n\n\tresult = status_update_write(&io, status, type);\n\treturn io_done(&io) && result;\n}\n\nbool\nstatus_update_files(struct view *view, struct line *line)\n{\n\tchar buf[sizeof(view->ref)];\n\tstruct io io;\n\tbool result = true;\n\tstruct line *pos;\n\tint files = 0;\n\tint file, done;\n\tint cursor_y = -1, cursor_x = -1;\n\n\tif (!status_update_prepare(&io, line->type))\n\t\treturn false;\n\n\tfor (pos = line; view_has_line(view, pos) && pos->data; pos++)\n\t\tfiles++;\n\n\tstring_copy(buf, view->ref);\n\tget_cursor_pos(cursor_y, cursor_x);\n\tfor (file = 0, done = 5; result && file < files; line++, file++) {\n\t\tint almost_done = file * 100 / files;\n\n\t\tif (almost_done > done && view_is_displayed(view)) {\n\t\t\tdone = almost_done;\n\t\t\tstring_format(view->ref, \"updating file %d of %d (%d%% done)\",\n\t\t\t\t      file, files, done);\n\t\t\tupdate_view_title(view);\n\t\t\tset_cursor_pos(cursor_y, cursor_x);\n\t\t\tdoupdate();\n\t\t}\n\t\tresult = status_update_write(&io, line->data, line->type);\n\t}\n\tstring_copy(view->ref, buf);\n\n\treturn io_done(&io) && result;\n}\n\nstatic bool\nstatus_update(struct view *view)\n{\n\tstruct line *line = &view->line[view->pos.lineno];\n\n\tassert(view->lines);\n\n\tif (!line->data) {\n\t\tif (status_has_none(view, line)) {\n\t\t\treport(\"Nothing to update\");\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!status_update_files(view, line + 1)) {\n\t\t\treport(\"Failed to update file status\");\n\t\t\treturn false;\n\t\t}\n\n\t} else if (!status_update_file(line->data, line->type)) {\n\t\treport(\"Failed to update file status\");\n\t\treturn false;\n\t}\n\n\tif (!show_untracked_only && line->type != LINE_STAT_STAGED && !no_files_staged)\n\t\tview->pos.lineno += 1;\n\n\treturn true;\n}\n\nbool\nstatus_revert(struct status *status, enum line_type type, bool has_none)\n{\n\tif (!status || type != LINE_STAT_UNSTAGED) {\n\t\tif (type == LINE_STAT_STAGED) {\n\t\t\treport(\"Cannot revert changes to staged files\");\n\t\t} else if (type == LINE_STAT_UNTRACKED) {\n\t\t\treport(\"Cannot revert changes to untracked files\");\n\t\t} else if (has_none) {\n\t\t\treport(\"Nothing to revert\");\n\t\t} else {\n\t\t\treport(\"Cannot revert changes to multiple files\");\n\t\t}\n\n\t} else if (prompt_yesno(\"Are you sure you want to revert changes?\")) {\n\t\tchar mode[10] = \"100644\";\n\t\tconst char *reset_argv[] = {\n\t\t\t\"git\", \"update-index\", \"--cacheinfo\", mode,\n\t\t\t\tstatus->old.rev, status->old.name, NULL\n\t\t};\n\t\tconst char *checkout_argv[] = {\n\t\t\t\"git\", \"checkout\", \"--\", status->old.name, NULL\n\t\t};\n\n\t\tif (status->status == 'U') {\n\t\t\tstring_format(mode, \"%5o\", status->old.mode);\n\n\t\t\tif (status->old.mode == 0 && status->new.mode == 0) {\n\t\t\t\treset_argv[2] = \"--force-remove\";\n\t\t\t\treset_argv[3] = status->old.name;\n\t\t\t\treset_argv[4] = NULL;\n\t\t\t}\n\n\t\t\tif (!io_run_fg(reset_argv, repo.exec_dir, -1))\n\t\t\t\treturn false;\n\t\t\tif (status->old.mode == 0 && status->new.mode == 0)\n\t\t\t\treturn true;\n\t\t}\n\n\t\treturn io_run_fg(checkout_argv, repo.exec_dir, -1);\n\t}\n\n\treturn false;\n}\n\nstatic void\nopen_mergetool(const char *file)\n{\n\tconst char *mergetool_argv[] = { \"git\", \"mergetool\", file, NULL };\n\n\topen_external_viewer(mergetool_argv, repo.exec_dir, false, true, false, true, true, \"\");\n}\n\nstatic enum request\nstatus_request(struct view *view, enum request request, struct line *line)\n{\n\tstruct status *status = line->data;\n\n\tswitch (request) {\n\tcase REQ_STATUS_UPDATE:\n\t\tif (!status_update(view))\n\t\t\treturn REQ_NONE;\n\t\tbreak;\n\n\tcase REQ_STATUS_REVERT:\n\t\tif (!status_revert(status, line->type, status_has_none(view, line)))\n\t\t\treturn REQ_NONE;\n\t\tbreak;\n\n\tcase REQ_STATUS_MERGE:\n\t\tif (!status || status->status != 'U') {\n\t\t\treport(\"Merging only possible for files with unmerged status ('U').\");\n\t\t\treturn REQ_NONE;\n\t\t}\n\t\topen_mergetool(status->new.name);\n\t\tbreak;\n\n\tcase REQ_EDIT:\n\t\tif (!status)\n\t\t\treturn request;\n\t\tif (status->status == 'D') {\n\t\t\treport(\"File has been deleted.\");\n\t\t\treturn REQ_NONE;\n\t\t}\n\n\t\topen_editor(status->new.name, 0);\n\t\tbreak;\n\n\tcase REQ_VIEW_BLAME:\n\t\tif (line->type == LINE_STAT_UNTRACKED || !status) {\n\t\t\treport(\"Nothing to blame here\");\n\t\t\treturn REQ_NONE;\n\t\t}\n\t\tif (status)\n\t\t\tview->env->ref[0] = 0;\n\t\treturn request;\n\n\tcase REQ_ENTER:\n\t\t/* After returning the status view has been split to\n\t\t * show the stage view. No further reloading is\n\t\t * necessary. */\n\t\treturn status_enter(view, line, view_is_displayed(view) ? OPEN_SPLIT : OPEN_DEFAULT);\n\n\tcase REQ_VIEW_STAGE:\n\t\treturn status_enter(view, line, OPEN_DEFAULT);\n\n\tcase REQ_REFRESH:\n\t\t/* Load the current branch information and then the view. */\n\t\tload_repo_head();\n\t\tbreak;\n\n\tdefault:\n\t\treturn request;\n\t}\n\n\tif (show_untracked_only && view->parent == &main_view && !main_status_exists(view->parent, LINE_STAT_UNTRACKED))\n\t\treturn REQ_VIEW_CLOSE;\n\n\trefresh_view(view);\n\n\treturn REQ_NONE;\n}\n\nbool\nstatus_stage_info_(char *buf, size_t bufsize,\n\t\t   enum line_type type, struct status *status)\n{\n\tconst char *file = status ? status->new.name : \"\";\n\tconst char *info;\n\n\tswitch (type) {\n\tcase LINE_STAT_STAGED:\n\t\tif (status && status->status)\n\t\t\tinfo = \"Staged changes to %s\";\n\t\telse\n\t\t\tinfo = \"Staged changes\";\n\t\tbreak;\n\n\tcase LINE_STAT_UNSTAGED:\n\t\tif (status && status->status)\n\t\t\tinfo = \"Unstaged changes to %s\";\n\t\telse\n\t\t\tinfo = \"Unstaged changes\";\n\t\tbreak;\n\n\tcase LINE_STAT_UNTRACKED:\n\t\tinfo = \"Untracked file %s\";\n\t\tbreak;\n\n\tcase LINE_HEADER:\n\tdefault:\n\t\tinfo = \"\";\n\t}\n\n\treturn string_nformat(buf, bufsize, NULL, info, file);\n}\n\nstatic void\nstatus_select(struct view *view, struct line *line)\n{\n\tstruct status *status = line->data;\n\tchar file[SIZEOF_STR] = \"all files\";\n\tconst char *text;\n\tconst char *key;\n\n\tif (status && !string_format(file, \"'%s'\", status->new.name))\n\t\treturn;\n\n\tif (!status && line[1].type == LINE_STAT_NONE)\n\t\tline++;\n\n\tswitch (line->type) {\n\tcase LINE_STAT_STAGED:\n\t\ttext = \"Press %s to unstage %s for commit\";\n\t\tbreak;\n\n\tcase LINE_STAT_UNSTAGED:\n\t\ttext = \"Press %s to stage %s for commit\";\n\t\tbreak;\n\n\tcase LINE_STAT_UNTRACKED:\n\t\ttext = \"Press %s to stage %s for addition\";\n\t\tbreak;\n\n\tdefault:\n\t\ttext = \"Nothing to update\";\n\t}\n\n\tif (status && status->status == 'U') {\n\t\ttext = \"Press %s to resolve conflict in %s\";\n\t\tkey = get_view_key(view, REQ_STATUS_MERGE);\n\n\t} else {\n\t\tkey = get_view_key(view, REQ_STATUS_UPDATE);\n\t}\n\n\tstring_format(view->ref, text, key, file);\n\tstatus_stage_info(view->env->status, line->type, status);\n\tif (status) {\n\t\tstring_copy(view->env->file, status->new.name);\n\t\tview->env->blob[0] = 0;\n\t}\n}\n\nstatic struct view_ops status_ops = {\n\t\"file\",\n\t\"\",\n\tVIEW_CUSTOM_STATUS | VIEW_SEND_CHILD_ENTER | VIEW_STATUS_LIKE | VIEW_REFRESH,\n\t0,\n\tstatus_open,\n\tNULL,\n\tview_column_draw,\n\tstatus_request,\n\tview_column_grep,\n\tstatus_select,\n\tNULL,\n\tview_column_bit(FILE_NAME) | view_column_bit(LINE_NUMBER) |\n\t\tview_column_bit(STATUS),\n\tstatus_get_column_data,\n};\n\nDEFINE_VIEW(status);\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/string.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/tig.h\"\n#include \"tig/string.h\"\n#include \"compat/utf8proc.h\"\n\n/*\n * Strings.\n */\n\nbool\nstring_isnumber(const char *str)\n{\n\tint pos;\n\n\tfor (pos = 0; str[pos]; pos++) {\n\t\tif (!isdigit((unsigned char)str[pos]))\n\t\t\treturn false;\n\t}\n\n\treturn pos > 0;\n}\n\nbool\niscommit(const char *str)\n{\n\tint pos;\n\n\tfor (pos = 0; str[pos]; pos++) {\n\t\tif (!isxdigit((unsigned char)str[pos]))\n\t\t\treturn false;\n\t}\n\n\treturn 7 <= pos && pos < SIZEOF_REV;\n}\n\nint\nsuffixcmp(const char *str, int slen, const char *suffix)\n{\n\tsize_t len = slen >= 0 ? slen : strlen(str);\n\tsize_t suffixlen = strlen(suffix);\n\n\treturn suffixlen < len ? strcmp(str + len - suffixlen, suffix) : -1;\n}\n\nvoid\nstring_ncopy_do(char *dst, size_t dstlen, const char *src, size_t srclen)\n{\n\tif (srclen > dstlen - 1)\n\t\tsrclen = dstlen - 1;\n\n\tstrncpy(dst, src, srclen);\n\tdst[srclen] = 0;\n}\n\nvoid\nstring_copy_rev(char *dst, const char *src)\n{\n\tsize_t srclen;\n\n\tif (!*src)\n\t\treturn;\n\n\tfor (srclen = 0; srclen < SIZEOF_REV; srclen++)\n\t\tif (!src[srclen] || isspace((unsigned char)src[srclen]))\n\t\t\tbreak;\n\n\tstring_ncopy_do(dst, SIZEOF_REV, src, srclen);\n}\n\nvoid\nstring_copy_rev_from_commit_line(char *dst, const char *src)\n{\n\tsrc += STRING_SIZE(\"commit \");\n\twhile (*src && !isalnum((unsigned char)*src))\n\t\tsrc++;\n\tstring_copy_rev(dst, src);\n}\n\nsize_t\nstring_expand(char *dst, size_t dstlen, const char *src, int srclen, int tabsize)\n{\n\tsize_t size, pos;\n\n\tfor (size = pos = 0; size < dstlen - 1 && (srclen == -1 || pos < srclen) && src[pos]; pos++) {\n\t\tconst char c = src[pos];\n\n\t\tif (c == '\\t') {\n\t\t\tsize_t expanded = tabsize - (size % tabsize);\n\n\t\t\tif (expanded + size >= dstlen - 1)\n\t\t\t\texpanded = dstlen - size - 1;\n\t\t\tmemcpy(dst + size, \"        \", expanded);\n\t\t\tsize += expanded;\n\t\t} else if (isspace((unsigned char)c) || iscntrl((unsigned char)c)) {\n\t\t\tdst[size++] = ' ';\n\t\t} else {\n\t\t\tdst[size++] = src[pos];\n\t\t}\n\t}\n\n\tdst[size] = 0;\n\treturn pos;\n}\n\nchar *\nstring_trim_end(char *name)\n{\n\tint namelen = strlen(name) - 1;\n\n\twhile (namelen > 0 && isspace((unsigned char)name[namelen]))\n\t\tname[namelen--] = 0;\n\n\treturn name;\n}\n\nchar *\nstring_trim(char *name)\n{\n\twhile (isspace((unsigned char)*name))\n\t\tname++;\n\n\treturn string_trim_end(name);\n}\n\nbool PRINTF_LIKE(4, 5)\nstring_nformat(char *buf, size_t bufsize, size_t *bufpos, const char *fmt, ...)\n{\n\tsize_t pos = bufpos ? *bufpos : 0;\n\tint retval;\n\n\tFORMAT_BUFFER(buf + pos, bufsize - pos, fmt, retval, false);\n\tif (bufpos && retval > 0)\n\t\t*bufpos = pos + retval;\n\n\treturn pos >= bufsize ? false : true;\n}\n\nint\nstrcmp_null(const char *s1, const char *s2)\n{\n\tif (!s1 || !s2) {\n\t\treturn (!!s1) - (!!s2);\n\t}\n\n\treturn strcmp(s1, s2);\n}\n\nint\nstrcmp_numeric(const char *s1, const char *s2)\n{\n\tint number = 0;\n\tint num1, num2;\n\n\tfor (; *s1 && *s2 && *s1 == *s2; s1++, s2++) {\n\t\tint c = *s1;\n\n\t\tif (isdigit((unsigned char)c)) {\n\t\t\tnumber = 10 * number + (c - '0');\n\t\t} else {\n\t\t\tnumber = 0;\n\t\t}\n\t}\n\n\tnum1 = number * 10 + atoi(s1);\n\tnum2 = number * 10 + atoi(s2);\n\n\tif (num1 != num2)\n\t\treturn num2 - num1;\n\n\tif (!!*s1 != !!*s2)\n\t\treturn !!*s2 - !!*s1;\n\treturn *s1 - *s2;\n}\n\n/*\n * Unicode / UTF-8 handling\n */\n\nint\nunicode_width(unsigned long c, int tab_size)\n{\n\tif (c == '\\0')\n\t\t/*\n\t\t * xterm mk_wcwidth() returns 0 for NUL, which causes two tig\n\t\t * tests to fail, which seems like a tig bug.  Return 1 here\n\t\t * as a workaround.\n\t\t */\n\t\treturn 1;\n\tif (c == '\\t')\n\t\treturn tab_size;\n\n\t/* Guaranteed to return 0 for unmapped codepints. */\n\treturn utf8proc_charwidth((utf8proc_int32_t) c);\n}\n\n/* Number of bytes used for encoding a UTF-8 character indexed by first byte.\n * Illegal bytes are set one. */\nunsigned char\nutf8_char_length(const char *string)\n{\n\tutf8proc_int8_t length = utf8proc_utf8class[*(utf8proc_uint8_t *) string];\n\n\treturn length ? length : 1;\n}\n\n/* Decode UTF-8 multi-byte representation into a Unicode character. */\nunsigned long\nutf8_to_unicode(const char *string, size_t length)\n{\n\tutf8proc_int32_t unicode;\n\n\tutf8proc_iterate((const utf8proc_uint8_t *) string, length, &unicode);\n\n\t/* Invalid characters could return the special 0xfffd value but NUL\n\t * should be just as good. */\n\treturn unicode < 0 ? 0 : unicode;\n}\n\n/* Calculates how much of string can be shown within the given maximum width\n * and sets trimmed parameter to non-zero value if all of string could not be\n * shown. If the reserve flag is true, it will reserve at least one\n * trailing character, which can be useful when drawing a delimiter.\n *\n * Returns the number of bytes to output from string to satisfy max_width. */\nsize_t\nutf8_length(const char **start, int max_chars, size_t skip, int *width, size_t max_width, int *trimmed, bool reserve, int tab_size)\n{\n\tconst char *string = *start;\n\tconst char *end = max_chars < 0 ? strchr(string, '\\0') : string + max_chars;\n\tutf8proc_ssize_t last_bytes = 0;\n\tint last_ucwidth = 0;\n\n\t*width = 0;\n\t*trimmed = 0;\n\n\twhile (string < end) {\n\t\t/* Change representation to figure out whether it is a\n\t\t * single- or double-width character and assume a width\n\t\t * and size of 1 for invalid UTF-8 encoding (can be\n\t\t * ISO-8859-1, Windows-1252, ...). */\n\t\tutf8proc_int32_t unicode;\n\t\tutf8proc_ssize_t bytes = utf8proc_iterate((const utf8proc_uint8_t *) string,\n\t\t\t\t\t\t\t  end - string, &unicode);\n\t\tint ucwidth;\n\n\t\tif (unicode < 0)\n\t\t\tucwidth = bytes = 1;\n\t\telse\n\t\t\tucwidth = unicode == '\\t' ? tab_size - (*width % tab_size)\n\t\t\t\t\t\t  : utf8proc_charwidth(unicode);\n\t\tif (skip > 0) {\n\t\t\tskip -= ucwidth <= skip ? ucwidth : skip;\n\t\t\t*start += bytes;\n\t\t}\n\t\t*width  += ucwidth;\n\t\tif (max_width > 0 && *width > max_width) {\n\t\t\t*trimmed = 1;\n\t\t\t*width -= ucwidth;\n\t\t\tif (reserve && *width == max_width) {\n\t\t\t\tstring -= last_bytes;\n\t\t\t\t*width -= last_ucwidth;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tstring  += bytes;\n\t\tif (ucwidth) {\n\t\t\tlast_bytes = bytes;\n\t\t\tlast_ucwidth = ucwidth;\n\t\t} else {\n\t\t\tlast_bytes += bytes;\n\t\t}\n\t}\n\n\treturn string - *start;\n}\n\nint\nutf8_width_of(const char *text, int max_bytes, int max_width)\n{\n\tint text_width = 0;\n\tconst char *tmp = text;\n\tint trimmed = false;\n\n\tutf8_length(&tmp, max_bytes, 0, &text_width, max_width, &trimmed, false, 1);\n\treturn text_width;\n}\n\nstatic bool\nutf8_string_contains(const char *text, int category)\n{\n\tssize_t textlen = strlen(text);\n\n\twhile (textlen > 0) {\n\t\tutf8proc_int32_t unicode;\n\t\tutf8proc_ssize_t slen = utf8proc_iterate((const utf8proc_uint8_t *) text,\n\t\t\t\t\t\t\t textlen, &unicode);\n\t\tconst utf8proc_property_t *property;\n\n\t\tif (slen <= 0)\n\t\t\tbreak;\n\n\t\tproperty = utf8proc_get_property(unicode);\n\t\tif (property->category == category)\n\t\t\treturn true;\n\n\t\ttext += slen;\n\t\ttextlen -= slen;\n\t}\n\n\treturn false;\n}\n\nbool\nutf8_string_contains_uppercase(const char *search)\n{\n\treturn utf8_string_contains(search, UTF8PROC_CATEGORY_LU);\n}\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/tig.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#define WARN_MISSING_CURSES_CONFIGURATION\n\n#include \"tig/tig.h\"\n#include \"tig/types.h\"\n#include \"tig/util.h\"\n#include \"tig/parse.h\"\n#include \"tig/io.h\"\n#include \"tig/argv.h\"\n#include \"tig/refdb.h\"\n#include \"tig/watch.h\"\n#include \"tig/graph.h\"\n#include \"tig/git.h\"\n#include \"tig/request.h\"\n#include \"tig/line.h\"\n#include \"tig/keys.h\"\n#include \"tig/view.h\"\n#include \"tig/search.h\"\n#include \"tig/repo.h\"\n#include \"tig/options.h\"\n#include \"tig/draw.h\"\n#include \"tig/display.h\"\n#include \"tig/prompt.h\"\n\n/* Views. */\n#include \"tig/blame.h\"\n#include \"tig/blob.h\"\n#include \"tig/diff.h\"\n#include \"tig/grep.h\"\n#include \"tig/help.h\"\n#include \"tig/log.h\"\n#include \"tig/reflog.h\"\n#include \"tig/main.h\"\n#include \"tig/pager.h\"\n#include \"tig/refs.h\"\n#include \"tig/stage.h\"\n#include \"tig/stash.h\"\n#include \"tig/status.h\"\n#include \"tig/tree.h\"\n\n#ifdef HAVE_READLINE\n#include <readline/readline.h>\n#endif /* HAVE_READLINE */\n\n#if defined HAVE_PCRE2\n#include <pcre2.h>\n#elif defined HAVE_PCRE\n#include <pcre.h>\n#endif\n\n/*\n * Option management\n */\n\n#define TOGGLE_MENU_INFO(_) \\\n\t_('.', \"line numbers\",\t\t\t\"line-number\"), \\\n\t_('D', \"dates\",\t\t\t\t\"date\"), \\\n\t_('A', \"author\",\t\t\t\"author\"), \\\n\t_('T', \"committer\",\t\t\t\"committer\"), \\\n\t_('~', \"graphics\",\t\t\t\"line-graphics\"), \\\n\t_('g', \"revision graph\",\t\t\"commit-title-graph\"), \\\n\t_('#', \"file names\",\t\t\t\"file-name\"), \\\n\t_('*', \"file sizes\",\t\t\t\"file-size\"), \\\n\t_('W', \"space changes\",\t\t\t\"ignore-space\"), \\\n\t_('l', \"commit order\",\t\t\t\"commit-order\"), \\\n\t_('F', \"reference display\",\t\t\"commit-title-refs\"), \\\n\t_('C', \"local change display\",\t\t\"show-changes\"), \\\n\t_('X', \"commit ID display\",\t\t\"id\"), \\\n\t_('%', \"file filtering\",\t\t\"file-filter\"), \\\n\t_('^', \"revision filtering\",\t\t\"rev-filter\"), \\\n\t_('$', \"commit title overflow display\",\t\"commit-title-overflow\"), \\\n\t_('d', \"untracked directory info\",\t\"status-show-untracked-dirs\"), \\\n\t_('|', \"view split\",\t\t\t\"vertical-split\"), \\\n\n\nconst struct menu_item toggle_menu_items[] = {\n#define DEFINE_TOGGLE_MENU(key, help, name) { key, help, name }\n        TOGGLE_MENU_INFO(DEFINE_TOGGLE_MENU)\n        { 0 }\n};\n\nstatic void\ntoggle_option(struct view *view)\n{\n\tconst char *toggle_argv[] = { \"toggle\", NULL, NULL };\n\tint i = 0;\n\n\tif (!prompt_menu(\"Toggle option\", toggle_menu_items, &i))\n\t\treturn;\n\n\ttoggle_argv[1] = toggle_menu_items[i].data;\n\trun_prompt_command(view, toggle_argv);\n}\n\n\n/*\n * View opening\n */\n\nstatic enum request\nopen_run_request(struct view *view, enum request request)\n{\n\tstruct run_request *req = get_run_request(request);\n\n\tif (!req) {\n\t\treport(\"Unknown run request\");\n\t\treturn REQ_NONE;\n\t}\n\n\treturn exec_run_request(view, req);\n}\n\n/*\n * User request switch noodle\n */\n\nstatic bool\nview_driver(struct view *view, enum request request)\n{\n\tint i;\n\n\tif (request == REQ_NONE)\n\t\treturn true;\n\n\tif (request >= REQ_RUN_REQUESTS) {\n\t\trequest = open_run_request(view, request);\n\n\t\t// exit quickly rather than going through view_request and back\n\t\tif (request == REQ_QUIT)\n\t\t\treturn false;\n\t}\n\n\trequest = view_request(view, request);\n\tif (request == REQ_NONE)\n\t\treturn true;\n\n\tswitch (request) {\n\tcase REQ_MOVE_UP:\n\tcase REQ_MOVE_DOWN:\n\tcase REQ_MOVE_PAGE_UP:\n\tcase REQ_MOVE_PAGE_DOWN:\n\tcase REQ_MOVE_HALF_PAGE_UP:\n\tcase REQ_MOVE_HALF_PAGE_DOWN:\n\tcase REQ_MOVE_FIRST_LINE:\n\tcase REQ_MOVE_LAST_LINE:\n\tcase REQ_MOVE_WHEEL_DOWN:\n\tcase REQ_MOVE_WHEEL_UP:\n\t\tmove_view(view, request);\n\t\tbreak;\n\n\tcase REQ_SCROLL_FIRST_COL:\n\tcase REQ_SCROLL_LEFT:\n\tcase REQ_SCROLL_RIGHT:\n\tcase REQ_SCROLL_LINE_DOWN:\n\tcase REQ_SCROLL_LINE_UP:\n\tcase REQ_SCROLL_PAGE_DOWN:\n\tcase REQ_SCROLL_PAGE_UP:\n\tcase REQ_SCROLL_HALF_PAGE_DOWN:\n\tcase REQ_SCROLL_HALF_PAGE_UP:\n\tcase REQ_SCROLL_WHEEL_DOWN:\n\tcase REQ_SCROLL_WHEEL_UP:\n\t\tscroll_view(view, request);\n\t\tbreak;\n\n\tcase REQ_VIEW_GREP:\n\t\topen_grep_view(view);\n\t\tbreak;\n\n\tcase REQ_VIEW_MAIN:\n\t\topen_main_view(view, OPEN_DEFAULT);\n\t\tbreak;\n\tcase REQ_VIEW_DIFF:\n\t\tif (view && string_rev_is_null(view->env->commit))\n\t\t\topen_stage_view(view, NULL, 0, OPEN_DEFAULT);\n\t\telse\n\t\t\topen_diff_view(view, OPEN_DEFAULT);\n\t\tbreak;\n\tcase REQ_VIEW_LOG:\n\t\topen_log_view(view, OPEN_DEFAULT);\n\t\tbreak;\n\tcase REQ_VIEW_REFLOG:\n\t\topen_reflog_view(view, OPEN_DEFAULT);\n\t\tbreak;\n\tcase REQ_VIEW_TREE:\n\t\topen_tree_view(view, OPEN_DEFAULT);\n\t\tbreak;\n\tcase REQ_VIEW_HELP:\n\t\topen_help_view(view, OPEN_DEFAULT);\n\t\tbreak;\n\tcase REQ_VIEW_REFS:\n\t\topen_refs_view(view, OPEN_DEFAULT);\n\t\tbreak;\n\tcase REQ_VIEW_BLAME:\n\t\topen_blame_view(view, OPEN_DEFAULT);\n\t\tbreak;\n\tcase REQ_VIEW_BLOB:\n\t\topen_blob_view(view, OPEN_DEFAULT);\n\t\tbreak;\n\tcase REQ_VIEW_STATUS:\n\t\topen_status_view(view, false, OPEN_DEFAULT);\n\t\tbreak;\n\tcase REQ_VIEW_STAGE:\n\t\topen_stage_view(view, NULL, 0, OPEN_DEFAULT);\n\t\tbreak;\n\tcase REQ_VIEW_PAGER:\n\t\topen_pager_view(view, OPEN_DEFAULT);\n\t\tbreak;\n\tcase REQ_VIEW_STASH:\n\t\topen_stash_view(view, OPEN_DEFAULT);\n\t\tbreak;\n\n\tcase REQ_NEXT:\n\tcase REQ_PREVIOUS:\n\t\tif (view->parent) {\n\t\t\tstruct view *parent = view->parent;\n\t\t\tint line;\n\n\t\t\tline = parent->pos.lineno;\n\t\t\tview_request(parent, request);\n\t\t\tmove_view(parent, request);\n\t\t\tif (view_is_displayed(parent))\n\t\t\t\tupdate_view_title(parent);\n\t\t\tif (line != parent->pos.lineno &&\n\t\t\t    !(parent == &tree_view && \n\t\t\t      parent->line[parent->pos.lineno].type == LINE_DIRECTORY)) {\n\t\t\t\tend_update(view, true);\n\t\t\t\tview_request(parent, REQ_ENTER);\n\t\t\t}\n\t\t} else {\n\t\t\tmove_view(view, request);\n\t\t}\n\t\tbreak;\n\n\tcase REQ_VIEW_NEXT:\n\t{\n\t\tint nviews = displayed_views();\n\t\tint next_view = nviews ? (current_view + 1) % nviews : current_view;\n\t\tstruct view *next = display[next_view];\n\n\t\tif (next_view == current_view) {\n\t\t\treport(\"Only one view is displayed\");\n\t\t\tbreak;\n\t\t}\n\n\t\tcurrent_view = next_view;\n\t\t/* Blur out the title and cursor of the previous view. */\n\t\tupdate_view_title(view);\n\t\tdraw_view_line(view, view->pos.lineno - view->pos.offset);\n\t\twnoutrefresh(view->win);\n\t\t/* Brighten the title and cursor of the next view. */\n\t\treport_clear();\n\t\tdraw_view_line(next, next->pos.lineno - next->pos.offset);\n\t\twnoutrefresh(next->win);\n\t\tbreak;\n\t}\n\tcase REQ_REFRESH:\n\t\treport(\"Refreshing is not supported by the %s view\", view->name);\n\t\tbreak;\n\n\tcase REQ_PARENT:\n\t\treport(\"Moving to parent is not supported by the %s view\", view->name);\n\t\tbreak;\n\n\tcase REQ_BACK:\n\t\treport(\"Going back is not supported by the %s view\", view->name);\n\t\tbreak;\n\n\tcase REQ_MAXIMIZE:\n\t\tif (displayed_views() == 2)\n\t\t\tmaximize_view(view, true);\n\t\tbreak;\n\n\tcase REQ_OPTIONS:\n\t\ttoggle_option(view);\n\t\tbreak;\n\n\tcase REQ_SEARCH:\n\tcase REQ_SEARCH_BACK:\n\t\tsearch_view(view, request);\n\t\tbreak;\n\n\tcase REQ_FIND_NEXT:\n\tcase REQ_FIND_PREV:\n\t\tfind_next(view, request);\n\t\tbreak;\n\n\tcase REQ_MOVE_NEXT_MERGE:\n\tcase REQ_MOVE_PREV_MERGE:\n\t\treport(\"Moving between merge commits is not supported by the %s view\", view->name);\n\t\tbreak;\n\n\tcase REQ_STOP_LOADING:\n\t\tforeach_view(view, i) {\n\t\t\tif (view->pipe)\n\t\t\t\treport(\"Stopped loading the %s view\", view->name),\n\t\t\tend_update(view, true);\n\t\t\tif (view_is_displayed(view))\n\t\t\t\tupdate_view_title(view);\n\t\t}\n\t\tbreak;\n\n\tcase REQ_SHOW_VERSION:\n\t\treport(\"tig-%s\", TIG_VERSION);\n\t\treturn true;\n\n\tcase REQ_SCREEN_REDRAW:\n\t\tredraw_display(true);\n\t\tbreak;\n\n\tcase REQ_EDIT:\n\t\treport(\"Nothing to edit\");\n\t\tbreak;\n\n\tcase REQ_ENTER:\n\t\treport(\"Nothing to enter\");\n\t\tbreak;\n\n\tcase REQ_VIEW_CLOSE_NO_QUIT:\n\tcase REQ_VIEW_CLOSE:\n\t\t/* XXX: Mark closed views by letting view->prev point to the\n\t\t * view itself. Parents to closed view should never be\n\t\t * followed. */\n\t\tif (view->prev && view->prev != view) {\n\t\t\tend_update(view, true);\n\t\t\tmaximize_view(view->prev, true);\n\t\t\tview->prev = view;\n\t\t\tview->parent = NULL;\n\t\t\tbreak;\n\t\t}\n\t\tif (request == REQ_VIEW_CLOSE_NO_QUIT) {\n\t\t\treport(\"Can't close last remaining view\");\n\t\t\tbreak;\n\t\t}\n\t\t/* Fall-through */\n\tcase REQ_QUIT:\n\t\tforeach_view(view, i)\n\t\t\tend_update(view, true);\n\t\treturn false;\n\n\tdefault:\n\t\treport(\"Unknown key, press %s for help\",\n\t\t       get_view_key(view, REQ_VIEW_HELP));\n\t\treturn true;\n\t}\n\n\treturn true;\n}\n\n/*\n * Main\n */\n\nstatic const char usage_string[] =\n\"tig \" TIG_VERSION \" \\n\"\n\"\\n\"\n\"Usage: tig        [options] [revs] [--] [paths]\\n\"\n\"   or: tig log    [options] [revs] [--] [paths]\\n\"\n\"   or: tig show   [options] [revs] [--] [paths]\\n\"\n\"   or: tig reflog [options] [revs]\\n\"\n\"   or: tig blame  [options] [rev] [--] path\\n\"\n\"   or: tig grep   [options] [pattern]\\n\"\n\"   or: tig refs   [options]\\n\"\n\"   or: tig stash  [options]\\n\"\n\"   or: tig status\\n\"\n\"   or: tig <      [git command output]\\n\"\n\"\\n\"\n\"Options:\\n\"\n\"  +<number>       Select line <number> in the first view\\n\"\n\"  -v, --version   Show version and exit\\n\"\n\"  -h, --help      Show help message and exit\\n\"\n\"  -C <path>       Start in <path>\";\n\nvoid\nusage(const char *message)\n{\n\tdie(\"%s\\n\\n%s\", message, usage_string);\n}\n\nstatic enum status_code\nread_filter_args(char *name, size_t namelen, char *value, size_t valuelen, void *data)\n{\n\tconst char ***filter_args = data;\n\n\treturn argv_append(filter_args, name) ? SUCCESS : ERROR_OUT_OF_MEMORY;\n}\n\nstatic bool\nfilter_rev_parse(const char ***args, const char *arg1, const char *arg2, const char *argv[])\n{\n\tconst char *rev_parse_argv[SIZEOF_ARG] = { \"git\", \"rev-parse\", arg1, arg2 };\n\tconst char **all_argv = NULL;\n\tstruct io io;\n\n\tif (!argv_append_array(&all_argv, rev_parse_argv) ||\n\t    !argv_append_array(&all_argv, argv) ||\n\t    io_run_load(&io, all_argv, \"\\n\", read_filter_args, args) != SUCCESS)\n\t\tdie(\"Failed to split arguments\");\n\targv_free(all_argv);\n\tfree(all_argv);\n\n\treturn !io.status;\n}\n\nstatic void\nfilter_options(const char *argv[], enum request request)\n{\n\tconst char **flags = NULL;\n\tint next, flags_pos;\n\n\tupdate_options_from_argv(argv);\n\n\tif (request == REQ_VIEW_GREP || request == REQ_VIEW_REFS) {\n\t\topt_cmdline_args = argv;\n\t\treturn;\n\t}\n\n\t/* Add known revision arguments in opt_rev_args and use\n\t * git-rev-parse to filter out the remaining options.\n\t */\n\tfor (next = flags_pos = 0; argv[next]; next++) {\n\t\tconst char *arg = argv[next];\n\n\t\tif (!strcmp(arg, \"--\"))\n\t\t\twhile (argv[next])\n\t\t\t\targv[flags_pos++] = argv[next++];\n\t\telse if (argv_parse_rev_flag(arg, NULL))\n\t\t\targv_append(&opt_rev_args, arg);\n\t\telse {\n\t\t\targv[flags_pos++] = arg;\n\t\t\tstring_copy_rev(argv_env.head, arg);\n\t\t}\n\t}\n\n\targv[flags_pos] = NULL;\n\n\tif (!filter_rev_parse(&opt_file_args, \"--no-revs\", \"--no-flags\", argv) &&\n\t    request != REQ_VIEW_BLAME)\n\t\tdie(\"No revisions match the given arguments.\");\n\tfilter_rev_parse(&flags, \"--flags\", \"--no-revs\", argv);\n\n\tif (flags) {\n\t\tfor (next = flags_pos = 0; flags && flags[next]; next++) {\n\t\t\tconst char *flag = flags[next];\n\n\t\t\tif (argv_parse_rev_flag(flag, NULL))\n\t\t\t\targv_append(&opt_rev_args, flag);\n\t\t\telse\n\t\t\t\tflags[flags_pos++] = flag;\n\t\t}\n\n\t\tflags[flags_pos] = NULL;\n\n\t\topt_cmdline_args = flags;\n\t}\n\n\tfilter_rev_parse(&opt_rev_args, \"--symbolic\", \"--revs-only\", argv);\n}\n\nstatic enum request\nparse_options(int argc, const char *argv[], bool pager_mode)\n{\n\tenum request request;\n\tconst char *subcommand;\n\tbool seen_dashdash = false;\n\tconst char **filter_argv = NULL;\n\tint i;\n\n\trequest = pager_mode ? REQ_VIEW_PAGER : REQ_VIEW_MAIN;\n\n\t/* Options that must come before any subcommand. */\n\tfor (i = 1; i < argc; i++) {\n\t\tconst char *opt = argv[i];\n\t\tif (!strcmp(opt, \"-C\") && i + 1 < argc && *argv[i + 1] != '-') {\n\t\t\tconst char *dir = argv[++i];\n\t\t\tif (chdir(dir))\n\t\t\t\tdie(\"Failed to change directory to %s\", dir);\n\t\t\tcontinue;\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (i >= argc)\n\t\treturn request;\n\n\tsubcommand = argv[i++];\n\tif (!strcmp(subcommand, \"status\")) {\n\t\trequest = REQ_VIEW_STATUS;\n\n\t} else if (!strcmp(subcommand, \"blame\")) {\n\t\trequest = REQ_VIEW_BLAME;\n\n\t} else if (!strcmp(subcommand, \"grep\")) {\n\t\trequest = REQ_VIEW_GREP;\n\n\t} else if (!strcmp(subcommand, \"show\")) {\n\t\trequest = REQ_VIEW_DIFF;\n\n\t} else if (!strcmp(subcommand, \"log\")) {\n\t\trequest = REQ_VIEW_LOG;\n\n\t} else if (!strcmp(subcommand, \"reflog\")) {\n\t\trequest = REQ_VIEW_REFLOG;\n\n\t} else if (!strcmp(subcommand, \"stash\")) {\n\t\trequest = REQ_VIEW_STASH;\n\n\t} else if (!strcmp(subcommand, \"refs\")) {\n\t\trequest = REQ_VIEW_REFS;\n\n\t} else {\n\t\tsubcommand = NULL;\n\t\ti--; /* revisit option in loop below */\n\t}\n\n\tfor (; i < argc; i++) {\n\t\tconst char *opt = argv[i];\n\n\t\t// stop parsing our options after -- and let rev-parse handle the rest\n\t\tif (!seen_dashdash) {\n\t\t\tif (!strcmp(opt, \"--\")) {\n\t\t\t\tseen_dashdash = true;\n\n\t\t\t} else if (!strcmp(opt, \"-v\") || !strcmp(opt, \"--version\")) {\n#if defined HAVE_PCRE2\n\t\t\t\tchar pcre2_version[64];\n#endif\n\t\t\t\tprintf(\"tig version %s\\n\", TIG_VERSION);\n#ifdef NCURSES_VERSION\n\t\t\t\tprintf(\"%s version %s.%d\\n\",\n#if defined(HAVE_NCURSESW_CURSES_H) || defined(HAVE_NCURSESW_H)\n\t\t\t\t       \"ncursesw\",\n#else\n\t\t\t\t       \"ncurses\",\n#endif\n\t\t\t\t       NCURSES_VERSION, NCURSES_VERSION_PATCH);\n#endif\n#ifdef HAVE_READLINE\n\t\t\t\tprintf(\"readline version %s\\n\", rl_library_version);\n#endif\n#if defined HAVE_PCRE2\n\t\t\t\tpcre2_config(PCRE2_CONFIG_VERSION, pcre2_version);\n\t\t\t\tprintf(\"PCRE2 version %s\\n\", pcre2_version);\n#elif defined HAVE_PCRE\n\t\t\t\tprintf(\"PCRE version %s\\n\", pcre_version());\n#endif\n\t\t\t\texit(EXIT_SUCCESS);\n\n\t\t\t} else if (!strcmp(opt, \"-h\") || !strcmp(opt, \"--help\")) {\n\t\t\t\tprintf(\"%s\\n\", usage_string);\n\t\t\t\texit(EXIT_SUCCESS);\n\n\t\t\t} else if (strlen(opt) >= 2 && *opt == '+' && string_isnumber(opt + 1)) {\n\t\t\t\tint lineno = atoi(opt + 1);\n\n\t\t\t\targv_env.goto_lineno = lineno > 0 ? lineno - 1 : 0;\n\t\t\t\tcontinue;\n\n\t\t\t}\n\t\t}\n\n\t\tif (!argv_append(&filter_argv, opt))\n\t\t\tdie(\"command too long\");\n\t}\n\n\tif (filter_argv)\n\t\tfilter_options(filter_argv, request);\n\n\treturn request;\n}\n\nstatic enum request\nopen_pager_mode(enum request request)\n{\n\tif (request == REQ_VIEW_PAGER) {\n\t\t/* Detect if the user requested the main view. */\n\t\tif (argv_contains(opt_rev_args, \"--stdin\")) {\n\t\t\topen_main_view(NULL, OPEN_FORWARD_STDIN);\n\t\t} else if (argv_contains(opt_cmdline_args, \"--pretty=raw\")) {\n\t\t\topen_main_view(NULL, OPEN_STDIN);\n\t\t} else {\n\t\t\topen_pager_view(NULL, OPEN_STDIN);\n\t\t}\n\n\t} else if (request == REQ_VIEW_DIFF) {\n\t\tif (argv_contains(opt_rev_args, \"--stdin\"))\n\t\t\topen_diff_view(NULL, OPEN_FORWARD_STDIN);\n\t\telse\n\t\t\topen_diff_view(NULL, OPEN_STDIN);\n\n\t} else {\n\t\tclose(STDIN_FILENO);\n\t\treport(\"Ignoring stdin.\");\n\t\treturn request;\n\t}\n\n\treturn REQ_NONE;\n}\n\n#ifdef NCURSES_MOUSE_VERSION\nstatic struct view *\nfind_clicked_view(MEVENT *event)\n{\n\tstruct view *view;\n\tint i;\n\n\tforeach_displayed_view (view, i) {\n\t\tint beg_y = 0, beg_x = 0;\n\n\t\tgetbegyx(view->win, beg_y, beg_x);\n\n\t\tif (beg_y <= event->y && event->y < beg_y + view->height\n\t\t    && beg_x <= event->x && event->x < beg_x + view->width) {\n\t\t\treturn view;\n\t\t}\n\t}\n\n\treturn NULL;\n}\n\nstatic enum request\nhandle_mouse_event(void)\n{\n\tMEVENT event;\n\tstruct view *view;\n\n\tif (getmouse(&event) != OK)\n\t\treturn REQ_NONE;\n\n\tview = find_clicked_view(&event);\n\tif (!view)\n\t\treturn REQ_NONE;\n\n\tif (view != display[current_view])\n\t\treturn REQ_VIEW_NEXT;\n\n#ifdef BUTTON5_PRESSED\n\tif (event.bstate & (BUTTON2_PRESSED | BUTTON5_PRESSED))\n#else\n\tif (event.bstate & BUTTON2_PRESSED)\n#endif\n\t\treturn opt_mouse_wheel_cursor ? REQ_MOVE_WHEEL_DOWN : REQ_SCROLL_WHEEL_DOWN;\n\n\tif (event.bstate & BUTTON4_PRESSED)\n\t\treturn opt_mouse_wheel_cursor ? REQ_MOVE_WHEEL_UP : REQ_SCROLL_WHEEL_UP;\n\n\tif (event.bstate & BUTTON1_PRESSED) {\n\t\tint y = getbegy(view->win);\n\t\tunsigned long lineno = (event.y - y) + view->pos.offset;\n\n\t\tif (lineno == view->pos.lineno) {\n\t\t\t/* Click is on the same line, perform an \"ENTER\"\n\t\t\t * unless we are outside of diffstat in diff as\n\t\t\t * that might move/scroll ... */\n\t\t\tif (view_has_flags(view, VIEW_DIFF_LIKE) &&\n\t\t\t    view->line[lineno].type != LINE_DIFF_STAT)\n\t\t\t\treturn REQ_NONE;\n\t\t\treturn REQ_ENTER;\n\n\t\t} else {\n\t\t\tselect_view_line(view, lineno);\n\t\t\tupdate_view_title(view);\n\t\t\treport_clear();\n\t\t}\n\t}\n\n\treturn REQ_NONE;\n}\n#endif\n\n/*\n * Error handling.\n *\n * Inspired by code from src/util.c in ELinks\n * (f86be659718c0cd0a67f88b42f07044c23d0d028).\n */\n\n#ifdef DEBUG\nvoid\nsigsegv_handler(int sig)\n{\n\tif (die_callback)\n\t\tdie_callback();\n\n\tfputs(\"Tig crashed!\\n\\n\"\n\t      \"Please report this issue along with all info printed below to\\n\\n\"\n\t      \"  https://github.com/jonas/tig/issues/new\\n\\n\", stderr);\n\n\tfputs(\"Tig version: \", stderr);\n\tfputs(TIG_VERSION, stderr);\n\tfputs(\"\\n\\n\", stderr);\n\n#ifdef HAVE_EXECINFO_H\n\t{\n\t\t/* glibc way of doing this */\n\t\tvoid *stack[20];\n\t\tsize_t size = backtrace(stack, 20);\n\n\t\tbacktrace_symbols_fd(stack, size, STDERR_FILENO);\n\t}\n#endif\n\n\t/* The fastest way OUT! */\n\tabort();\n}\n#endif\n\nstatic void\nsighup_handler(int sig)\n{\n\tif (die_callback)\n\t\tdie_callback();\n\n\texit(EXIT_SUCCESS);\n}\n\nstruct key_combo {\n\tenum request request;\n\tstruct keymap *keymap;\n\tsize_t bufpos;\n\tsize_t keys;\n\tstruct key key[16];\n};\n\nstatic enum input_status\nkey_combo_handler(struct input *input, struct key *key)\n{\n\tstruct key_combo *combo = input->data;\n\tint matches = 0;\n\n#ifdef NCURSES_MOUSE_VERSION\n\tif (key_to_value(key) == KEY_MOUSE) {\n\t\tcombo->request = handle_mouse_event();\n\t\treturn INPUT_STOP;\n\t}\n#endif\n\n\tif (combo->keys && key_to_value(key) == KEY_ESC)\n\t\treturn INPUT_CANCEL;\n\n\tstring_format_from(input->buf, &combo->bufpos, \"%s%s\",\n\t\t\t   combo->bufpos ? \" \" : \"Keys: \", get_key_name(key, 1, false));\n\tcombo->key[combo->keys++] = *key;\n\tcombo->request = get_keybinding(combo->keymap, combo->key, combo->keys, &matches);\n\n\tif (combo->request == REQ_UNKNOWN)\n\t\treturn matches > 0 ? INPUT_OK : INPUT_STOP;\n\treturn INPUT_STOP;\n}\n\nstatic enum request\nread_key_combo(struct keymap *keymap)\n{\n\tstruct key_combo combo = { REQ_NONE, keymap, 0 };\n\tchar *value = read_prompt_incremental(\"\", false, false, key_combo_handler, &combo);\n\n\treturn value ? combo.request : REQ_NONE;\n}\n\nstatic inline void\ndie_if_failed(enum status_code code, const char *msg)\n{\n\tif (code != SUCCESS)\n\t\tdie(\"%s: %s\", msg, get_status_message(code));\n}\n\nstatic void\nhangup_children(void)\n{\n\tif (signal(SIGHUP, SIG_IGN) == SIG_ERR)\n\t\treturn;\n\tkillpg(getpid(), SIGHUP);\n}\n\nstatic inline enum status_code\nhandle_git_prefix(void)\n{\n\tconst char *prefix = getenv(\"GIT_PREFIX\");\n\tchar cwd[4096];\n\n\tif (!prefix || !*prefix)\n\t\treturn SUCCESS;\n\n\t/*\n\t * GIT_PREFIX is set when tig is invoked as a git alias.\n\t * Tig expects to run from the subdirectory so clear the prefix\n\t * and set GIT_WORK_TREE accordingly.\n\t */\n\tif (!getcwd(cwd, sizeof(cwd)))\n\t\treturn error(\"Failed to read CWD\");\n\tif (setenv(\"GIT_WORK_TREE\", cwd, 1))\n\t\treturn error(\"Failed to set GIT_WORK_TREE\");\n\tif (chdir(prefix))\n\t\treturn error(\"Failed to change directory to %s\", prefix);\n\tif (setenv(\"GIT_PREFIX\", \"\", 1))\n\t\treturn error(\"Failed to clear GIT_PREFIX\");\n\n\treturn SUCCESS;\n}\n\nint\nmain(int argc, const char *argv[])\n{\n\tconst char *codeset = ENCODING_UTF8;\n\tbool pager_mode = !isatty(STDIN_FILENO);\n\tenum request request = parse_options(argc, argv, pager_mode);\n\tstruct view *view;\n\n\tif (signal(SIGPIPE, SIG_IGN) == SIG_ERR)\n\t\tdie(\"Failed to setup signal handler\");\n\n\tif (signal(SIGHUP, sighup_handler) == SIG_ERR)\n\t\tdie(\"Failed to setup signal handler\");\n\n#ifdef DEBUG\n\tif (signal(SIGSEGV, sigsegv_handler) == SIG_ERR)\n\t\tdie(\"Failed to setup signal handler\");\n#endif\n\n\tif (setlocale(LC_ALL, \"\")) {\n\t\tcodeset = nl_langinfo(CODESET);\n\t}\n\n\tdie_if_failed(handle_git_prefix(), \"Failed to handle GIT_PREFIX\");\n\tdie_if_failed(load_repo_info(), \"Failed to load repo info.\");\n\tdie_if_failed(load_options(), \"Failed to load user config.\");\n\tdie_if_failed(load_git_config(), \"Failed to load repo config.\");\n\n\tinit_tty();\n\n\tif (opt_pgrp)\n\t\tatexit(hangup_children);\n\n\tprompt_init();\n\n\t/* Require a git repository unless when running in pager mode. */\n\tif (!repo.git_dir[0] && request != REQ_VIEW_PAGER)\n\t\tdie(\"Not a git repository\");\n\n\tif (codeset && strcmp(codeset, ENCODING_UTF8)) {\n\t\tchar translit[SIZEOF_STR];\n\n\t\tif (string_format(translit, \"%s%s\", codeset, ICONV_TRANSLIT))\n\t\t\topt_iconv_out = iconv_open(translit, ENCODING_UTF8);\n\t\telse\n\t\t\topt_iconv_out = iconv_open(codeset, ENCODING_UTF8);\n\t\tif (opt_iconv_out == ICONV_NONE)\n\t\t\tdie(\"Failed to initialize character set conversion\");\n\t}\n\n\tdie_if_failed(load_refs(false), \"Failed to load refs.\");\n\n\tinit_display();\n\n\tif (pager_mode)\n\t\trequest = open_pager_mode(request);\n\n\tif (getenv(\"TIG_SCRIPT\")) {\n\t\tconst char *script_command[] = { \"script\", getenv(\"TIG_SCRIPT\"), NULL };\n\n\t\trun_prompt_command(NULL, script_command);\n\t}\n\n\twhile (view_driver(display[current_view], request)) {\n\t\tview = display[current_view];\n\t\trequest = read_key_combo(view->keymap);\n\n\t\t/* Some low-level request handling. This keeps access to\n\t\t * status_win restricted. */\n\t\tswitch (request) {\n\t\tcase REQ_UNKNOWN:\n\t\t\treport(\"Unknown key, press %s for help\",\n\t\t\t       get_view_key(view, REQ_VIEW_HELP));\n\t\t\trequest = REQ_NONE;\n\t\t\tbreak;\n\t\tcase REQ_PROMPT:\n\t\t\trequest = open_prompt(view);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t\t}\n\t}\n\n\texit(EXIT_SUCCESS);\n\n\treturn 0;\n}\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/tree.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/tree.h\"\n#include \"tig/util.h\"\n#include \"tig/repo.h\"\n#include \"tig/io.h\"\n#include \"tig/parse.h\"\n#include \"tig/options.h\"\n#include \"tig/display.h\"\n#include \"tig/view.h\"\n#include \"tig/draw.h\"\n#include \"tig/blob.h\"\n\n/* The top of the path stack. */\nstatic struct view_history tree_view_history = { sizeof(char *) };\n\nstatic void\npop_tree_stack_entry(struct position *position)\n{\n\tchar *path_position = NULL;\n\n\tpop_view_history_state(&tree_view_history, position, &path_position);\n\tpath_position[0] = 0;\n}\n\nstatic void\npush_tree_stack_entry(struct view *view, const char *name, struct position *position)\n{\n\tsize_t pathlen = strlen(view->env->directory);\n\tchar *path_position = view->env->directory + pathlen;\n\tstruct view_state *state = push_view_history_state(&tree_view_history, position, &path_position);\n\n\tif (!state)\n\t\treturn;\n\n\tif (!string_format_from(view->env->directory, &pathlen, \"%s/\", name)) {\n\t\tpop_tree_stack_entry(NULL);\n\t\treturn;\n\t}\n\n\tclear_position(position);\n}\n\n/* Parse output from git-ls-tree(1):\n *\n * 100644 blob 95925677ca47beb0b8cce7c0e0011bcc3f61470f  213045\ttig.c\n */\n\n#define tree_path_is_parent(path)\t(!strcmp(\"..\", (path)))\n\nstruct tree_entry {\n\tchar id[SIZEOF_REV];\n\tchar commit[SIZEOF_REV];\n\tmode_t mode;\n\tstruct time author_time;\t/* Date from the author ident. */\n\tconst struct ident *author;\t/* Author of the commit. */\n\tstruct time commit_time;\t/* Date from the committer ident. */\n\tconst struct ident *committer;\t/* Committer. */\n\tunsigned long size;\n\tchar name[1];\n};\n\nstruct tree_state {\n\tchar commit[SIZEOF_REV];\n\tconst struct ident *author;\n\tstruct time author_time;\n\tconst struct ident *committer;\n\tstruct time commit_time;\n\tbool read_date;\n};\n\nstatic const char *\ntree_path(const struct line *line)\n{\n\treturn ((struct tree_entry *) line->data)->name;\n}\n\nstatic int\ntree_compare_entry(const struct line *line1, const struct line *line2)\n{\n\tif (line1->type != line2->type)\n\t\treturn line1->type == LINE_DIRECTORY ? -1 : 1;\n\treturn strcmp(tree_path(line1), tree_path(line2));\n}\n\nstatic bool\ntree_get_column_data(struct view *view, const struct line *line, struct view_column_data *column_data)\n{\n\tconst struct tree_entry *entry = line->data;\n\tstruct view_column *column = get_view_column(view, VIEW_COLUMN_DATE);\n\tbool use_author_date = column && column->opt.date.use_author;\n\n\tif (line->type == LINE_HEADER)\n\t\treturn false;\n\n\tcolumn_data->author = entry->author;\n\tcolumn_data->committer = entry->committer;\n\tcolumn_data->date = use_author_date\n\t\t\t\t? &entry->author_time\n\t\t\t\t: &entry->commit_time;\n\tif (line->type != LINE_DIRECTORY)\n\t\tcolumn_data->file_size = &entry->size;\n\tcolumn_data->id = entry->commit;\n\tcolumn_data->mode = &entry->mode;\n\tcolumn_data->file_name = entry->name;\n\n\treturn true;\n}\n\n\nstatic struct line *\ntree_entry(struct view *view, enum line_type type, const char *path,\n\t   const char *mode, const char *id, unsigned long size)\n{\n\tbool custom = type == LINE_HEADER || tree_path_is_parent(path);\n\tstruct tree_entry *entry;\n\tstruct line *line = add_line_alloc(view, &entry, type, strlen(path), custom);\n\n\tif (!line)\n\t\treturn NULL;\n\n\tstrcpy(entry->name, path);\n\tif (mode)\n\t\tentry->mode = strtoul(mode, NULL, 8);\n\tif (id)\n\t\tstring_copy_rev(entry->id, id);\n\tentry->size = size;\n\n\treturn line;\n}\n\nstatic bool\ntree_read_date(struct view *view, struct buffer *buf, struct tree_state *state)\n{\n\tchar *text = buf ? buf->data : NULL;\n\n\tif (!text && state->read_date) {\n\t\tstate->read_date = false;\n\t\treturn true;\n\n\t} else if (!text) {\n\t\t/* Find next entry to process */\n\t\tconst char *log_file[] = {\n\t\t\t\"git\", \"log\", encoding_arg, \"--no-color\", \"--pretty=raw\",\n\t\t\t\t\"--cc\", \"--raw\", view->ops->id, \"--\", \"%(directory)\", NULL\n\t\t};\n\n\t\tif (!view->lines) {\n\t\t\ttree_entry(view, LINE_HEADER, view->env->directory, NULL, NULL, 0);\n\t\t\ttree_entry(view, LINE_DIRECTORY, \"..\", \"040000\", view->ref, 0);\n\t\t\treport(\"Tree is empty\");\n\t\t\treturn true;\n\t\t}\n\n\t\tif (begin_update(view, repo.exec_dir, log_file, OPEN_EXTRA) != SUCCESS) {\n\t\t\treport(\"Failed to load tree data\");\n\t\t\treturn true;\n\t\t}\n\n\t\tstate->read_date = true;\n\t\treturn false;\n\n\t} else if (*text == 'c' && get_line_type(text) == LINE_COMMIT) {\n\t\tstring_copy_rev_from_commit_line(state->commit, text);\n\n\t} else if (*text == 'a' && get_line_type(text) == LINE_AUTHOR) {\n\t\tparse_author_line(text + STRING_SIZE(\"author \"),\n\t\t\t\t  &state->author, &state->author_time);\n\n\t} else if (*text == 'c' && get_line_type(text) == LINE_COMMITTER) {\n\t\tparse_author_line(text + STRING_SIZE(\"committer \"),\n\t\t\t\t  &state->committer, &state->commit_time);\n\n\t} else if (*text == ':') {\n\t\tchar *pos;\n\t\tsize_t annotated = 1;\n\t\tsize_t i;\n\n\t\tpos = strrchr(text, '\\t');\n\t\tif (!pos)\n\t\t\treturn true;\n\t\ttext = pos + 1;\n\t\tif (*view->env->directory && !strncmp(text, view->env->directory, strlen(view->env->directory)))\n\t\t\ttext += strlen(view->env->directory);\n\t\tpos = strchr(text, '/');\n\t\tif (pos)\n\t\t\t*pos = 0;\n\n\t\tfor (i = 1; i < view->lines; i++) {\n\t\t\tstruct line *line = &view->line[i];\n\t\t\tstruct tree_entry *entry = line->data;\n\n\t\t\tannotated += !!entry->author;\n\t\t\tif (entry->author || strcmp(entry->name, text))\n\t\t\t\tcontinue;\n\n\t\t\tstring_copy_rev(entry->commit, state->commit);\n\t\t\tentry->author = state->author;\n\t\t\tentry->author_time = state->author_time;\n\t\t\tentry->committer = state->committer;\n\t\t\tentry->commit_time = state->commit_time;\n\t\t\tline->dirty = 1;\n\t\t\tview_column_info_update(view, line);\n\t\t\tbreak;\n\t\t}\n\n\t\tif (annotated == view->lines)\n\t\t\tio_kill(view->pipe);\n\t}\n\treturn true;\n}\n\nstatic bool\ntree_read(struct view *view, struct buffer *buf, bool force_stop)\n{\n\tstruct tree_state *state = view->private;\n\tstruct tree_entry *data;\n\tstruct line *entry, *line;\n\t/* Note, type computed here is only used for sorting, not for drawing. */\n\tenum line_type type = LINE_DEFAULT;\n\tchar *pos;\n\tchar *mode;\n\tchar *id;\n\tchar *path;\n\tsize_t size;\n\n\tif (state->read_date || !buf)\n\t\treturn tree_read_date(view, buf, state);\n\n\tif (view->lines == 0 &&\n\t    !tree_entry(view, LINE_HEADER, view->env->directory, NULL, NULL, 0))\n\t\treturn false;\n\n\t/* 100644 */\n\tmode = buf->data;\n\n\t/* blob */\n\tpos = strchr(mode, ' ');\n\tif (!pos || !*pos)\n\t\treturn false;\n\tpos++;\n\tif (!strncmp(pos, \"blob\", STRING_SIZE(\"blob\")))\n\t\ttype = LINE_FILE;\n\telse if (!strncmp(pos, \"tree\", STRING_SIZE(\"tree\")))\n\t\ttype = LINE_DIRECTORY;\n\n\t/* 95925677ca47beb0b8cce7c0e0011bcc3f61470f */\n\tid = strchr(pos, ' ');\n\tif (!id || !*id)\n\t\treturn false;\n\tid++;\n\n\t/* 213045 */\n\tpos = strchr(id, ' ');\n\tif (!pos || !*pos)\n\t\treturn false;\n\tpos++;\n\tsize = parse_size(pos);\n\n\t/* tig.c */\n\tpath = strchr(pos, '\\t');\n\tif (!path || !*path)\n\t\treturn false;\n\tpath++;\n\n\t/* Strip the path part ... */\n\tif (*view->env->directory) {\n\t\tsize_t pathlen = strlen(path);\n\t\tsize_t striplen = strlen(view->env->directory);\n\n\t\tif (pathlen > striplen)\n\t\t\tmemmove(path, path + striplen,\n\t\t\t\tpathlen - striplen + 1);\n\n\t\t/* Insert \"link\" to parent directory. */\n\t\tif (view->lines == 1 &&\n\t\t    !tree_entry(view, LINE_DIRECTORY, \"..\", \"040000\", view->ref, 0))\n\t\t\treturn false;\n\t}\n\n\tentry = tree_entry(view, type, path, mode, id, size);\n\tif (!entry)\n\t\treturn false;\n\tdata = entry->data;\n\tview_column_info_update(view, entry);\n\n\t/* Skip \"Directory ...\" and \"..\" line. */\n\tfor (line = &view->line[1 + !!*view->env->directory]; line < entry; line++) {\n\t\tif (tree_compare_entry(line, entry) <= 0)\n\t\t\tcontinue;\n\n\t\tmemmove(line + 1, line, (entry - line) * sizeof(*entry));\n\n\t\tline->data = data;\n\t\tline->type = type;\n\t\tline->dirty = line->cleareol = 1;\n\t\tfor (line++; line <= entry; line++) {\n\t\t\tline->dirty = line->cleareol = 1;\n\t\t\tline->lineno++;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/* Move the current line to the first tree entry. */\n\tif (!check_position(&view->prev_pos) && !check_position(&view->pos))\n\t\tgoto_view_line(view, 0, 1);\n\n\treturn true;\n}\n\nstatic bool\ntree_draw(struct view *view, struct line *line, unsigned int lineno)\n{\n\tstruct tree_entry *entry = line->data;\n\n\tif (line->type == LINE_HEADER) {\n\t\tdraw_formatted(view, line->type, \"Directory path /%s\", entry->name);\n\t\treturn true;\n\t}\n\n\treturn view_column_draw(view, line, lineno);\n}\n\nvoid\nopen_blob_editor(const char *id, const char *name, unsigned int lineno)\n{\n\tconst char *blob_argv[] = { \"git\", \"cat-file\", \"blob\", id, NULL };\n\tchar file[SIZEOF_STR];\n\tint fd;\n\n\tif (!name)\n\t\tname = \"unknown\";\n\n\tif (!string_format(file, \"%s/tigblob.XXXXXX.%s\", get_temp_dir(), name)) {\n\t\treport(\"Temporary file name is too long\");\n\t\treturn;\n\t}\n\n\tfd = mkstemps(file, strlen(name) + 1);\n\n\tif (fd == -1)\n\t\treport(\"Failed to create temporary file\");\n\telse if (!io_run_append(blob_argv, fd))\n\t\treport(\"Failed to save blob data to file\");\n\telse\n\t\topen_editor(file, lineno);\n\tif (fd != -1)\n\t\tunlink(file);\n}\n\nstatic enum request\ntree_request(struct view *view, enum request request, struct line *line)\n{\n\tenum open_flags flags;\n\tstruct tree_entry *entry = line->data;\n\n\tswitch (request) {\n\tcase REQ_VIEW_BLAME:\n\t\tif (line->type != LINE_FILE) {\n\t\t\treport(\"Blame only supported for files\");\n\t\t\treturn REQ_NONE;\n\t\t}\n\n\t\tstring_copy(view->env->ref, view->vid);\n\t\treturn request;\n\n\tcase REQ_EDIT:\n\t\tif (line->type != LINE_FILE) {\n\t\t\treport(\"Edit only supported for files\");\n\t\t} else if (!is_head_commit(view->vid)) {\n\t\t\topen_blob_editor(entry->id, entry->name, 0);\n\t\t} else {\n\t\t\topen_editor(view->env->file, 0);\n\t\t}\n\t\treturn REQ_NONE;\n\n\tcase REQ_PARENT:\n\tcase REQ_BACK:\n\t\tif (!*view->env->directory) {\n\t\t\t/* quit view if at top of tree */\n\t\t\treturn REQ_VIEW_CLOSE;\n\t\t}\n\t\t/* fake 'cd  ..' */\n\t\tpop_tree_stack_entry(&view->pos);\n\t\treload_view(view);\n\t\treturn REQ_NONE;\n\n\tcase REQ_ENTER:\n\t\tbreak;\n\n\tdefault:\n\t\treturn request;\n\t}\n\n\t/* Cleanup the stack if the tree view is at a different tree. */\n\tif (!*view->env->directory)\n\t\treset_view_history(&tree_view_history);\n\n\tswitch (line->type) {\n\tcase LINE_DIRECTORY:\n\t\t/* Depending on whether it is a subdirectory or parent link\n\t\t * mangle the path buffer. */\n\t\tif (tree_path_is_parent(entry->name) && *view->env->directory) {\n\t\t\tpop_tree_stack_entry(&view->pos);\n\n\t\t} else {\n\t\t\tconst char *basename = tree_path(line);\n\n\t\t\tpush_tree_stack_entry(view, basename, &view->pos);\n\t\t}\n\n\t\t/* Trees and subtrees share the same ID, so they are not not\n\t\t * unique like blobs. */\n\t\treload_view(view);\n\t\tbreak;\n\n\tcase LINE_FILE:\n\t\tflags = view_is_displayed(view) ? OPEN_SPLIT : OPEN_DEFAULT;\n\t\topen_blob_view(view, flags);\n\t\tbreak;\n\n\tdefault:\n\t\treturn REQ_NONE;\n\t}\n\n\treturn REQ_NONE;\n}\n\nstatic void\ntree_select(struct view *view, struct line *line)\n{\n\tstruct tree_entry *entry = line->data;\n\n\tif (line->type == LINE_HEADER) {\n\t\tstring_format(view->ref, \"Files in /%s\", view->env->directory);\n\t\treturn;\n\t}\n\n\tif (line->type == LINE_DIRECTORY && tree_path_is_parent(entry->name)) {\n\t\tstring_copy(view->ref, \"Open parent directory\");\n\t\tview->env->blob[0] = 0;\n\t\treturn;\n\t}\n\n\tif (line->type == LINE_FILE) {\n\t\tstring_copy_rev(view->env->blob, entry->id);\n\t\tstring_format(view->env->file, \"%s%s\", view->env->directory, tree_path(line));\n\t}\n\n\tstring_copy_rev(view->ref, entry->id);\n}\n\nstatic enum status_code\ntree_open(struct view *view, enum open_flags flags)\n{\n\tstatic const char *tree_argv[] = {\n\t\t\"git\", \"ls-tree\", \"-l\", \"%(commit)\", \"--\", \"%(directory)\", NULL\n\t};\n\n\tif (string_rev_is_null(view->env->commit))\n\t\treturn error(\"No tree exists for this commit\");\n\n\tif (view->lines == 0 && repo.prefix[0]) {\n\t\tchar *pos = repo.prefix;\n\n\t\twhile (pos && *pos) {\n\t\t\tchar *end = strchr(pos, '/');\n\n\t\t\tif (end)\n\t\t\t\t*end = 0;\n\t\t\tpush_tree_stack_entry(view, pos, &view->pos);\n\t\t\tpos = end;\n\t\t\tif (end) {\n\t\t\t\t*end = '/';\n\t\t\t\tpos++;\n\t\t\t}\n\t\t}\n\n\t} else if (strcmp(view->vid, view->ops->id)) {\n\t\tview->env->directory[0] = 0;\n\t}\n\n\treturn begin_update(view, repo.exec_dir, tree_argv, flags);\n}\n\nstatic struct view_ops tree_ops = {\n\t\"file\",\n\targv_env.commit,\n\tVIEW_SEND_CHILD_ENTER | VIEW_SORTABLE,\n\tsizeof(struct tree_state),\n\ttree_open,\n\ttree_read,\n\ttree_draw,\n\ttree_request,\n\tview_column_grep,\n\ttree_select,\n\tNULL,\n\tview_column_bit(AUTHOR) | view_column_bit(COMMITTER) | view_column_bit(DATE) |\n\t\tview_column_bit(FILE_NAME) | view_column_bit(FILE_SIZE) |\n\t\tview_column_bit(ID) | view_column_bit(LINE_NUMBER) |\n\t\tview_column_bit(MODE),\n\ttree_get_column_data,\n};\n\nDEFINE_VIEW(tree);\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/types.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/tig.h\"\n#include \"tig/types.h\"\n\n/*\n * Enumerations\n */\n\nint\nstring_enum_compare(const char *str1, const char *str2, int len)\n{\n\tsize_t i;\n\n\t/* Diff-Header == DIFF_HEADER */\n\tfor (i = 0; i < len; i++) {\n\t\tif (ascii_toupper(str1[i]) == ascii_toupper(str2[i]))\n\t\t\tcontinue;\n\n\t\tif (string_enum_sep(str1[i]) &&\n\t\t    string_enum_sep(str2[i]))\n\t\t\tcontinue;\n\n\t\treturn str1[i] - str2[i];\n\t}\n\n\treturn 0;\n}\n\nbool\nenum_name_copy(char buf[], size_t bufsize, const char *name)\n{\n\tint bufpos;\n\n\tfor (bufpos = 0; name[bufpos] && bufpos < bufsize - 1; bufpos++) {\n\t\tbuf[bufpos] = ascii_tolower(name[bufpos]);\n\t\tif (string_enum_sep(buf[bufpos]))\n\t\t\tbuf[bufpos] = '-';\n\t}\n\n\tbuf[bufpos] = 0;\n\treturn bufpos < bufsize;\n}\n\nconst char *\nenum_name(const char *name)\n{\n\tstatic char buf[SIZEOF_STR];\n\n\treturn enum_name_copy(buf, sizeof(buf), name) ? buf : name;\n}\n\nbool\nenum_name_prefixed(char buf[], size_t bufsize, const char *prefix, const char *name)\n{\n\tchar prefixed[SIZEOF_STR];\n\n\tif (*prefix) {\n\t\tif (!string_format(prefixed, \"%s-%s\", prefix, name))\n\t\t\treturn false;\n\t\tname = prefixed;\n\t}\n\n\treturn enum_name_copy(buf, bufsize, name);\n}\n\nconst struct enum_map *\nfind_enum_map(const char *type)\n{\n\tstatic struct {\n\t\tconst char *type;\n\t\tconst struct enum_map *map;\n\t} mappings[] = {\n#define DEFINE_ENUM_MAPPING(name, macro) { #name, name##_map },\n\t\tENUM_INFO(DEFINE_ENUM_MAPPING)\n\t};\n\tint i;\n\n\tfor (i = 0; i < ARRAY_SIZE(mappings); i++)\n\t\tif (!strcmp(type, mappings[i].type))\n\t\t\treturn mappings[i].map;\n\treturn NULL;\n}\n\nbool\nmap_enum_do(const struct enum_map_entry *map, size_t map_size, int *value, const char *name)\n{\n\tsize_t namelen = strlen(name);\n\tint i;\n\n\tfor (i = 0; i < map_size; i++)\n\t\tif (enum_equals(map[i], name, namelen)) {\n\t\t\t*value = map[i].value;\n\t\t\treturn true;\n\t\t}\n\n\treturn false;\n}\n\n#define DEFINE_ENUM_MAPS(name, macro) DEFINE_ENUM_MAP(name, macro);\nENUM_INFO(DEFINE_ENUM_MAPS)\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/ui.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/util.h\"\n#include \"tig/parse.h\"\n#include \"tig/repo.h\"\n#include \"tig/prompt.h\"\n#include \"tig/display.h\"\n#include \"tig/view.h\"\n#include \"tig/ui.h\"\n\nstruct file_finder_line {\n\tsize_t matches;\n\tchar text[1];\n};\n\nDEFINE_ALLOCATOR(realloc_file_array, struct file_finder_line *, 256)\n\nstruct file_finder {\n\tWINDOW *win;\n\tint height, width;\n\n\tstruct file_finder_line **file;\n\n\tstruct file_finder_line **line;\n\tsize_t lines;\n\tstruct position pos;\n\n\tstruct keymap *keymap;\n\tconst char **search;\n\tsize_t searchlen;\n};\n\nstatic bool\nfile_finder_read(struct file_finder *finder, const char *commit)\n{\n\tconst char *tree = string_rev_is_null(commit) ? \"HEAD\" : commit;\n\tconst char *ls_tree_files_argv[] = {\n\t\t\"git\", \"ls-tree\", \"-z\", \"-r\", \"--name-only\", \"--full-name\",\n\t\t\ttree, NULL\n\t};\n\tstruct buffer buf;\n\tstruct io io;\n\tsize_t files;\n\tbool ok = true;\n\n\tif (!io_run(&io, IO_RD, repo.exec_dir, NULL, ls_tree_files_argv))\n\t\treturn false;\n\n\tfor (files = 0; io_get(&io, &buf, 0, true); files++) {\n\t\t/* Alloc two to ensure NULL terminated array. */\n\t\tif (!realloc_file_array(&finder->file, files, 2)) {\n\t\t\tok = false;\n\t\t\tbreak;\n\t\t}\n\n\t\tfinder->file[files] = calloc(1, sizeof(struct file_finder_line) + buf.size);\n\t\tif (!finder->file[files]) {\n\t\t\tok = false;\n\t\t\tbreak;\n\t\t}\n\n\t\tstrncpy(finder->file[files]->text, buf.data, buf.size);\n\t}\n\n\tif (io_error(&io) || !realloc_file_array(&finder->line, 0, files + 1))\n\t\tok = false;\n\tio_done(&io);\n\treturn ok;\n}\n\nstatic void\nfile_finder_done(struct file_finder *finder)\n{\n\tint i;\n\n\tfree(finder->line);\n\tif (finder->file) {\n\t\tfor (i = 0; finder->file[i]; i++)\n\t\t\tfree(finder->file[i]);\n\t\tfree(finder->file);\n\t}\n\n\tif (finder->win)\n\t\tdelwin(finder->win);\n}\n\nstatic void\nfile_finder_move(struct file_finder *finder, int direction)\n{\n\tif (direction < 0 && finder->pos.lineno <= -direction)\n\t\tfinder->pos.lineno = 0;\n\telse\n\t\tfinder->pos.lineno += direction;\n\n\tif (finder->pos.lineno >= finder->lines)\n\t\tfinder->pos.lineno = finder->lines > 0 ? finder->lines - 1 : 0;\n\n\tif (finder->pos.offset + finder->height <= finder->pos.lineno)\n\t\tfinder->pos.offset = finder->pos.lineno - (finder->height / 2);\n\n\tif (finder->pos.offset > finder->pos.lineno)\n\t\tfinder->pos.offset = finder->pos.lineno;\n\n\tif (finder->lines <= finder->height)\n\t\tfinder->pos.offset = 0;\n}\n\nstatic void\nfile_finder_draw_line(struct file_finder *finder, struct file_finder_line *line)\n{\n\tconst char **search = finder->search;\n\tconst char *text = line->text;\n\tconst char *pos;\n\n\tfor (; *text && search && *search && (pos = strstr(text, *search)); search++) {\n\t\tif (text < pos)\n\t\t\twaddnstr(finder->win, text, pos - text);\n\t\twattron(finder->win, A_STANDOUT);\n\t\twaddnstr(finder->win, pos, 1);\n\t\twattroff(finder->win, A_STANDOUT);\n\t\ttext = pos + 1;\n\t}\n\n\tif (*text)\n\t\twaddstr(finder->win, text);\n}\n\nstatic void\nfile_finder_draw(struct file_finder *finder)\n{\n\tstruct position *pos = &finder->pos;\n\tstruct file_finder_line *current_line = finder->line[pos->lineno];\n\tstruct file_finder_line **line_pos = &finder->line[pos->offset];\n\tint column;\n\n\twbkgdset(finder->win, get_line_attr(NULL, LINE_DEFAULT));\n\twerase(finder->win);\n\n\tfor (column = 0; *line_pos && column < finder->height - 1; line_pos++) {\n\t\tstruct file_finder_line *line = *line_pos;\n\n\t\tif (finder->searchlen != line->matches)\n\t\t\tcontinue;\n\n\t\twmove(finder->win, column++, 0);\n\t\tif (line == current_line) {\n\t\t\twbkgdset(finder->win, get_line_attr(NULL, LINE_CURSOR));\n\t\t}\n\t\tfile_finder_draw_line(finder, line);\n\t\tif (line == current_line) {\n\t\t\twclrtoeol(finder->win);\n\t\t\twbkgdset(finder->win, get_line_attr(NULL, LINE_DEFAULT));\n\t\t}\n\t}\n\n\twmove(finder->win, finder->height - 1, 0);\n\twbkgdset(finder->win, get_line_attr(NULL, LINE_TITLE_FOCUS));\n\twprintw(finder->win, \"[finder] file %lu of %zu\", pos->lineno + 1, finder->lines);\n\twclrtoeol(finder->win);\n\twrefresh(finder->win);\n}\n\nstatic size_t\nfile_finder_line_matches(struct file_finder_line *line, const char **search)\n{\n\tconst char *text = line->text;\n\tconst char *pos;\n\tsize_t matches = 0;\n\n\tfor (; *text && *search && (pos = strstr(text, *search)); search++) {\n\t\ttext = pos + strlen(*search);\n\t\tmatches++;\n\t}\n\n\treturn matches;\n}\n\nstatic void\nfile_finder_update(struct file_finder *finder)\n{\n\tstruct file_finder_line *current = finder->line[finder->pos.lineno];\n\tsize_t new_lineno = 0;\n\tint i;\n\n\tmemset(finder->line, 0, sizeof(*finder->line) * finder->lines);\n\tfinder->lines = 0;\n\n\tfor (i = 0; finder->file && finder->file[i]; i++) {\n\t\tstruct file_finder_line *line = finder->file[i];\n\n\t\tif (line == current)\n\t\t\tcurrent = NULL;\n\n\t\tif (line->matches + 1 < finder->searchlen) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (line->matches >= finder->searchlen) {\n\t\t\tline->matches = finder->searchlen;\n\t\t} else {\n\t\t\tline->matches = file_finder_line_matches(line, finder->search);\n\t\t\tif (line->matches < finder->searchlen)\n\t\t\t\tcontinue;\n\t\t}\n\n\t\tif (current != NULL)\n\t\t\tnew_lineno++;\n\n\t\tfinder->line[finder->lines++] = line;\n\t}\n\n\tfinder->pos.lineno = new_lineno;\n}\n\nstatic enum input_status\nfile_finder_input_handler(struct input *input, struct key *key)\n{\n\tstruct file_finder *finder = input->data;\n\tenum input_status status;\n\n\tstatus = prompt_default_handler(input, key);\n\tif (status == INPUT_DELETE) {\n\t\tif (finder->searchlen > 0) {\n\t\t\tfinder->searchlen--;\n\t\t\tfree((void *) finder->search[finder->searchlen]);\n\t\t\tfinder->search[finder->searchlen] = NULL;\n\t\t}\n\t\tfile_finder_update(finder);\n\t\tfile_finder_move(finder, 0);\n\t\tfile_finder_draw(finder);\n\t\treturn status;\n\t}\n\n\tif (status != INPUT_SKIP)\n\t\treturn status;\n\n\tswitch (get_keybinding(finder->keymap, key, 1, NULL)) {\n\tcase REQ_FIND_PREV:\n\t\tfile_finder_move(finder, -1);\n\t\tfile_finder_draw(finder);\n\t\treturn INPUT_SKIP;\n\n\tcase REQ_FIND_NEXT:\n\t\tfile_finder_move(finder, +1);\n\t\tfile_finder_draw(finder);\n\t\treturn INPUT_SKIP;\n\n\tcase REQ_BACK:\n\tcase REQ_PARENT:\n\tcase REQ_VIEW_CLOSE:\n\tcase REQ_VIEW_CLOSE_NO_QUIT:\n\t\treturn INPUT_CANCEL;\n\n\tdefault:\n\t\tif (key_to_value(key) == 0) {\n\t\t\targv_append(&finder->search, key->data.bytes);\n\t\t\tfinder->searchlen++;\n\t\t\tfile_finder_update(finder);\n\t\t\tfile_finder_move(finder, 0);\n\t\t\tfile_finder_draw(finder);\n\t\t\treturn INPUT_OK;\n\t\t}\n\n\t\t/* Catch all non-multibyte keys. */\n\t\treturn INPUT_SKIP;\n\t}\n}\n\nconst char *\nopen_file_finder(const char *commit)\n{\n\tstruct file_finder finder = {0};\n\tconst char *file = NULL;\n\n\tif (!file_finder_read(&finder, commit)) {\n\t\tfile_finder_done(&finder);\n\t\treturn false;\n\t}\n\n\tgetmaxyx(stdscr, finder.height, finder.width);\n\tfinder.height--;\n\tfinder.win = newwin(finder.height, finder.width, 0, 0);\n\tif (!finder.win) {\n\t\tfile_finder_done(&finder);\n\t\treturn false;\n\t}\n\n\tfinder.keymap = get_keymap(\"search\", STRING_SIZE(\"search\"));\n\tfile_finder_update(&finder);\n\tfile_finder_draw(&finder);\n\tif (read_prompt_incremental(\"Find file: \", false, true, file_finder_input_handler, &finder) && finder.pos.lineno < finder.lines)\n\t\tfile = get_path(finder.line[finder.pos.lineno]->text);\n\n\tfile_finder_done(&finder);\n\tredraw_display(true);\n\treturn file;\n}\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/util.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/tig.h\"\n#include \"tig/util.h\"\n\n/*\n * Error handling.\n */\n\nstatic const char *status_messages[] = {\n\t\"Success\",\n#define STATUS_CODE_MESSAGE(name, msg) msg\n\tSTATUS_CODE_INFO(STATUS_CODE_MESSAGE)\n};\n\nstatic char status_custom_message[SIZEOF_STR];\nstatic bool status_success_message = false;\n\nconst char *\nget_status_message(enum status_code code)\n{\n\tif (code == SUCCESS) {\n\t\tconst char *message = status_success_message ? status_custom_message : \"\";\n\n\t\tstatus_success_message = false;\n\t\treturn message;\n\t}\n\tif (code == ERROR_CUSTOM_MESSAGE)\n\t\treturn status_custom_message;\n\treturn status_messages[code];\n}\n\nenum status_code\nerror(const char *msg, ...)\n{\n\tint retval;\n\n\tFORMAT_BUFFER(status_custom_message, sizeof(status_custom_message), msg, retval, true);\n\tstatus_success_message = false;\n\n\treturn ERROR_CUSTOM_MESSAGE;\n}\n\nenum status_code\nsuccess(const char *msg, ...)\n{\n\tint retval;\n\n\tFORMAT_BUFFER(status_custom_message, sizeof(status_custom_message), msg, retval, true);\n\tstatus_success_message = true;\n\n\treturn SUCCESS;\n}\n\nvoid\nwarn(const char *msg, ...)\n{\n\tva_list args;\n\n\tva_start(args, msg);\n\tfputs(\"tig warning: \", stderr);\n\tvfprintf(stderr, msg, args);\n\tfputs(\"\\n\", stderr);\n\tva_end(args);\n}\n\ndie_fn die_callback = NULL;\nvoid TIG_NORETURN\ndie(const char *err, ...)\n{\n\tva_list args;\n\n\tif (die_callback)\n\t\tdie_callback();\n\n\tva_start(args, err);\n\tfputs(\"tig: \", stderr);\n\tvfprintf(stderr, err, args);\n\tfputs(\"\\n\", stderr);\n\tva_end(args);\n\n\texit(1);\n}\n\n/*\n * Git data formatters and parsers.\n */\n\nint\ntime_now(struct timeval *timeval, struct timezone *tz)\n{\n\tstatic bool check_env = true;\n\n\tif (check_env) {\n\t\tconst char *time;\n\n\t\tif ((time = getenv(\"TEST_TIME_NOW\"))) {\n\t\t\tmemset(timeval, 0, sizeof(*timeval));\n\t\t\tif (tz)\n\t\t\t\tmemset(tz, 0, sizeof(*tz));\n\t\t\ttimeval->tv_sec = atoi(time);\n\t\t\treturn 0;\n\t\t}\n\n\t\tcheck_env = false;\n\t}\n\n\treturn gettimeofday(timeval, tz);\n}\n\nint\ntimecmp(const struct time *t1, const struct time *t2)\n{\n\treturn t1->sec - t2->sec;\n}\n\nstruct reldate {\n\tconst char *name;\n\tconst char compact_symbol;\n\tint in_seconds, interval;\n};\n\nstatic const struct reldate reldate[] = {\n\t{ \"second\", 's', 1,\t\t\t 60 * 2 },\n\t{ \"minute\", 'm', 60,\t\t\t 60 * 60 * 2 },\n\t{ \"hour\",   'h', 60 * 60,\t\t 60 * 60 * 24 * 2 },\n\t{ \"day\",    'D', 60 * 60 * 24,\t\t 60 * 60 * 24 * 7 * 2 },\n\t{ \"week\",   'W', 60 * 60 * 24 * 7,\t 60 * 60 * 24 * 7 * 5 },\n\t{ \"month\",  'M', 60 * 60 * 24 * 30,\t 60 * 60 * 24 * 365 },\n\t{ \"year\",   'Y', 60 * 60 * 24 * 365,  0 },\n};\n\nstatic const char *\nget_relative_date(const struct time *time, char *buf, size_t buflen, bool compact)\n{\n\tstruct timeval now;\n\ttime_t timestamp = time->sec + time->tz;\n\tlong long seconds;\n\tint i;\n\n\tif (time_now(&now, NULL))\n\t\treturn \"\";\n\n\tseconds = now.tv_sec < timestamp ? (long long) difftime(timestamp, now.tv_sec) : (long long) difftime(now.tv_sec, timestamp);\n\n\tfor (i = 0; i < ARRAY_SIZE(reldate); i++) {\n\t\tif (seconds >= reldate[i].interval && reldate[i].interval)\n\t\t\tcontinue;\n\n\t\tseconds /= reldate[i].in_seconds;\n\t\tif (compact) {\n\t\t\tif (!string_nformat(buf, buflen, NULL, \"%s%lld%c\",\n\t\t\t\t    now.tv_sec >= timestamp ? \"\" : \"-\",\n\t\t\t\t    seconds, reldate[i].compact_symbol))\n\t\t\t\treturn \"\";\n\n\t\t} else if (!string_nformat(buf, buflen, NULL, \"%lld %s%s %s\",\n\t\t\t\t    seconds, reldate[i].name,\n\t\t\t\t    seconds > 1 ? \"s\" : \"\",\n\t\t\t\t    now.tv_sec >= timestamp ? \"ago\" : \"ahead\"))\n\t\t\treturn \"\";\n\n\t\treturn buf;\n\t}\n\n\treturn \"\";\n}\n\nconst char *\nmkdate(const struct time *time, enum date date, bool local, const char *custom_format)\n{\n\tstatic char buf[SIZEOF_STR];\n\tstruct tm tm;\n\tconst char *format;\n\tbool tz_fmt;\n\n\tif (!date || !time || !time->sec)\n\t\treturn \"\";\n\n\tif (date == DATE_RELATIVE || date == DATE_RELATIVE_COMPACT)\n\t\treturn get_relative_date(time, buf, sizeof(buf),\n\t\t\t\t\t date == DATE_RELATIVE_COMPACT);\n\n\tformat = (date == DATE_CUSTOM && custom_format)\n\t       ? custom_format\n\t       : local\n\t       ? \"%Y-%m-%d %H:%M\"\n\t       : \"%Y-%m-%d %H:%M %z\";\n\n\ttz_fmt = strstr(format, \"%z\") || strstr(format, \"%Z\");\n\n\tif (local) {\n\t\ttime_t timestamp = time->sec + time->tz;\n\n\t\tlocaltime_r(&timestamp, &tm);\n\t} else {\n\t\tgmtime_r(&time->sec, &tm);\n\t}\n\n\tif (local || (!tz_fmt))\n\t\treturn !strftime(buf, sizeof(buf), format, &tm) ? NULL : buf;\n\n\t{\n\t\tchar format_buf[SIZEOF_STR];\n\t\tchar *format_pos = format_buf;\n\t\tchar *buf_pos = buf;\n\t\tsize_t buf_size = sizeof(buf);\n\t\tint tz = ABS(time->tz);\n\n\t\tstring_ncopy(format_buf, format, strlen(format));\n\n\t\twhile (*format_pos) {\n\t\t\tchar *z_pos = strstr(format_pos, \"%z\");\n\t\t\tchar *Z_pos = strstr(format_pos, \"%Z\");\n\t\t\tchar *tz_pos = (z_pos && Z_pos) ? MIN(z_pos, Z_pos) : MAX(z_pos, Z_pos);\n\t\t\tsize_t time_len;\n\n\t\t\tif (tz_pos)\n\t\t\t\t*tz_pos = 0;\n\n\t\t\ttime_len = strftime(buf_pos, buf_size, format_pos, &tm);\n\t\t\tif (!time_len)\n\t\t\t\treturn NULL;\n\n\t\t\tbuf_pos += time_len;\n\t\t\tbuf_size -= time_len;\n\n\t\t\tif (!tz_pos)\n\t\t\t\tbreak;\n\n\t\t\t/* Skip the %z format flag and insert the timezone. */\n\t\t\tformat_pos = tz_pos + 2;\n\n\t\t\tif (buf_size < 5)\n\t\t\t\treturn NULL;\n\n\t\t\tbuf_pos[0] = time->tz > 0 ? '-' : '+';\n\t\t\tbuf_pos[1] = '0' + (tz / 60 / 60 / 10);\n\t\t\tbuf_pos[2] = '0' + (tz / 60 / 60 % 10);\n\t\t\tbuf_pos[3] = '0' + (tz / 60 % 60 / 10);\n\t\t\tbuf_pos[4] = '0' + (tz / 60 % 60 % 10);\n\t\t\tbuf_pos[5] = 0;\n\n\t\t\tbuf_pos += 5;\n\t\t\tbuf_size -= 5;\n\t\t}\n\n#undef buf_size\n\t}\n\n\treturn buf;\n}\n\nconst char *\nmkfilesize(unsigned long size, enum file_size format)\n{\n\tstatic char buf[64 + 1];\n\tstatic const char relsize[] = {\n\t\t'B', 'K', 'M', 'G', 'T', 'P'\n\t};\n\n\tif (!format)\n\t\treturn \"\";\n\n\tif (format == FILE_SIZE_UNITS) {\n\t\tconst char *fmt = \"%.0f%c\";\n\t\tdouble rsize = size;\n\t\tint i;\n\n\t\tfor (i = 0; i < ARRAY_SIZE(relsize); i++) {\n\t\t\tif (rsize > 1024.0 && i + 1 < ARRAY_SIZE(relsize)) {\n\t\t\t\trsize /= 1024;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tsize = rsize * 10;\n\t\t\tif (size % 10 > 0)\n\t\t\t\tfmt = \"%.1f%c\";\n\n\t\t\treturn string_format(buf, fmt, rsize, relsize[i])\n\t\t\t\t? buf : NULL;\n\t\t}\n\t}\n\n\treturn string_format(buf, \"%lu\", size) ? buf : NULL;\n}\n\nconst struct ident unknown_ident = {\n\t\"not.committed.yetNot Committed Yet\",\t// key\n\t\"Not Committed Yet\",\t\t\t// name\n\t\"not.committed.yet\"\t\t\t// email\n};\n\nint\nident_compare(const struct ident *i1, const struct ident *i2)\n{\n\tif (!i1 || !i2)\n\t\treturn (!!i1) - (!!i2);\n\tif (!i1->name || !i2->name)\n\t\treturn (!!i1->name) - (!!i2->name);\n\treturn strcmp(i1->name, i2->name);\n}\n\nstatic const char *\nget_author_initials(const char *author)\n{\n\tstatic char initials[256];\n\tsize_t pos = 0;\n\tconst char *end = strchr(author, '\\0');\n\n#define is_initial_sep(c) (isspace((unsigned char)(c)) || ispunct((unsigned char)(c)) || (c) == '@' || (c) == '-')\n\n\tmemset(initials, 0, sizeof(initials));\n\twhile (author < end) {\n\t\tunsigned char bytes;\n\t\tsize_t i;\n\n\t\twhile (author < end && is_initial_sep(*author))\n\t\t\tauthor++;\n\n\t\tbytes = utf8_char_length(author);\n\t\tif (bytes >= sizeof(initials) - 1 - pos)\n\t\t\tbreak;\n\t\twhile (bytes--) {\n\t\t\tinitials[pos++] = *author++;\n\t\t}\n\n\t\ti = pos;\n\t\twhile (author < end && !is_initial_sep(*author)) {\n\t\t\tbytes = utf8_char_length(author);\n\t\t\tif (bytes >= sizeof(initials) - 1 - i) {\n\t\t\t\twhile (author < end && !is_initial_sep(*author))\n\t\t\t\t\tauthor++;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\twhile (bytes--) {\n\t\t\t\tinitials[i++] = *author++;\n\t\t\t}\n\t\t}\n\n\t\tinitials[i++] = 0;\n\t}\n\n\treturn initials;\n}\n\nstatic const char *\nget_email_user(const char *email)\n{\n\tstatic char user[SIZEOF_STR + 1];\n\tconst char *end = strchr(email, '@');\n\tint length = end ? end - email : strlen(email);\n\n\tstring_format(user, \"%.*s%c\", length, email, 0);\n\treturn user;\n}\n\nconst char *\nmkauthor(const struct ident *ident, int cols, enum author author)\n{\n\tbool trim = author_trim(cols);\n\tbool abbreviate = author == AUTHOR_ABBREVIATED || !trim;\n\n\tif (author == AUTHOR_NO || !ident)\n\t\treturn \"\";\n\tif (author == AUTHOR_EMAIL && ident->email)\n\t\treturn ident->email;\n\tif (author == AUTHOR_EMAIL_USER && ident->email)\n\t\treturn get_email_user(ident->email);\n\tif (abbreviate && ident->name)\n\t\treturn get_author_initials(ident->name);\n\treturn ident->name;\n}\n\nconst char *\nmkmode(mode_t mode)\n{\n\tif (S_ISDIR(mode))\n\t\treturn \"drwxr-xr-x\";\n\telse if (S_ISLNK(mode))\n\t\treturn \"lrwxrwxrwx\";\n\telse if (S_ISGITLINK(mode))\n\t\treturn \"m---------\";\n\telse if (S_ISREG(mode) && mode & S_IXUSR)\n\t\treturn \"-rwxr-xr-x\";\n\telse if (S_ISREG(mode))\n\t\treturn \"-rw-r--r--\";\n\telse\n\t\treturn \"----------\";\n}\n\nconst char *\nmkstatus(const char status, enum status_label label)\n{\n\tstatic char default_label[] = { '?', 0 };\n\tstatic const char *labels[][2] = {\n\t\t{ \"!\", \"ignored\" },\n\t\t{ \"?\", \"untracked\" },\n\t\t{ \"A\", \"added\" },\n\t\t{ \"C\", \"copied\" },\n\t\t{ \"D\", \"deleted\" },\n\t\t{ \"M\", \"modified\" },\n\t\t{ \"R\", \"renamed\" },\n\t\t{ \"U\", \"unmerged\" },\n\t};\n\tint i;\n\n\tif (label == STATUS_LABEL_NO)\n\t\treturn \"\";\n\n\tfor (i = 0; i < ARRAY_SIZE(labels); i++) {\n\t\tif (status == *labels[i][0]) {\n\t\t\tif (label == STATUS_LABEL_LONG)\n\t\t\t\treturn labels[i][1];\n\t\t\telse\n\t\t\t\treturn labels[i][0];\n\t\t}\n\t}\n\n\tdefault_label[0] = status;\n\treturn default_label;\n}\n\n/*\n * Allocation helper.\n */\n\nvoid *\nchunk_allocator(void *mem, size_t type_size, size_t chunk_size, size_t size, size_t increase)\n{\n\tsize_t num_chunks = (size + chunk_size - 1) / chunk_size;\n\tsize_t num_chunks_new = (size + increase + chunk_size - 1) / chunk_size;\n\n\tif (mem == NULL || num_chunks != num_chunks_new) {\n\t\tsize_t newsize = num_chunks_new * chunk_size * type_size;\n\t\tchar *tmp = realloc(mem, newsize);\n\n\t\tif (!tmp)\n\t\t\tdie(\"Failed to allocate chunk\");\n\n\t\tif (num_chunks_new > num_chunks) {\n\t\t\tsize_t oldsize = num_chunks * chunk_size * type_size;\n\n\t\t\tmemset(tmp + oldsize, 0, newsize - oldsize);\n\t\t}\n\n\t\treturn tmp;\n\t}\n\n\treturn mem;\n}\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/view.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/tig.h\"\n#include \"tig/argv.h\"\n#include \"tig/repo.h\"\n#include \"tig/watch.h\"\n#include \"tig/options.h\"\n#include \"tig/view.h\"\n#include \"tig/search.h\"\n#include \"tig/draw.h\"\n#include \"tig/display.h\"\n\n/*\n * Navigation\n */\n\nbool\ngoto_view_line(struct view *view, unsigned long offset, unsigned long lineno)\n{\n\tif (lineno >= view->lines)\n\t\tlineno = view->lines > 0 ? view->lines - 1 : 0;\n\n\tif (offset > lineno || offset + view->height <= lineno) {\n\t\tunsigned long half = view->height / 2;\n\n\t\tif (lineno > half)\n\t\t\toffset = lineno - half;\n\t\telse\n\t\t\toffset = 0;\n\t}\n\n\tif (offset != view->pos.offset || lineno != view->pos.lineno) {\n\t\tview->pos.offset = offset;\n\t\tview->pos.lineno = lineno;\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\n/* Scrolling backend */\nvoid\ndo_scroll_view(struct view *view, int lines)\n{\n\tbool redraw_current_line = false;\n\n\t/* The rendering expects the new offset. */\n\tview->pos.offset += lines;\n\n\tassert(0 <= view->pos.offset && view->pos.offset < view->lines);\n\tassert(lines);\n\n\t/* Move current line into the view. */\n\tif (view->pos.lineno < view->pos.offset) {\n\t\tview->pos.lineno = view->pos.offset;\n\t\tredraw_current_line = true;\n\t} else if (view->pos.lineno >= view->pos.offset + view->height) {\n\t\tview->pos.lineno = view->pos.offset + view->height - 1;\n\t\tredraw_current_line = true;\n\t}\n\n\tassert(view->pos.offset <= view->pos.lineno && view->pos.lineno < view->lines);\n\n\t/* Redraw the whole screen if scrolling is pointless. */\n\tif (view->height < ABS(lines)) {\n\t\tredraw_view(view);\n\n\t} else {\n\t\tint line = lines > 0 ? view->height - lines : 0;\n\t\tint end = line + ABS(lines);\n\n\t\tscrollok(view->win, true);\n\t\twscrl(view->win, lines);\n\t\tscrollok(view->win, false);\n\n\t\twhile (line < end && draw_view_line(view, line))\n\t\t\tline++;\n\n\t\tif (redraw_current_line)\n\t\t\tdraw_view_line(view, view->pos.lineno - view->pos.offset);\n\t\twnoutrefresh(view->win);\n\t}\n\n\treport_clear();\n}\n\n/* Scroll frontend */\nvoid\nscroll_view(struct view *view, enum request request)\n{\n\tint lines = 1;\n\tunsigned long orig_offset, orig_lineno;\n\tint move_lines;\n\tint i;\n\n\tassert(view_is_displayed(view));\n\n\tif (request == REQ_SCROLL_WHEEL_DOWN || request == REQ_SCROLL_WHEEL_UP)\n\t\tlines = opt_mouse_scroll;\n\n\tswitch (request) {\n\tcase REQ_SCROLL_FIRST_COL:\n\t\tview->pos.col = 0;\n\t\tredraw_view_from(view, 0);\n\t\treport_clear();\n\t\treturn;\n\tcase REQ_SCROLL_LEFT:\n\t\tif (view->pos.col == 0) {\n\t\t\treport(\"Cannot scroll beyond the first column\");\n\t\t\treturn;\n\t\t}\n\t\tif (view->pos.col <= apply_step(opt_horizontal_scroll, view->width))\n\t\t\tview->pos.col = 0;\n\t\telse\n\t\t\tview->pos.col -= apply_step(opt_horizontal_scroll, view->width);\n\t\tredraw_view_from(view, 0);\n\t\treport_clear();\n\t\treturn;\n\tcase REQ_SCROLL_RIGHT:\n\t\tview->pos.col += apply_step(opt_horizontal_scroll, view->width);\n\t\tredraw_view(view);\n\t\treport_clear();\n\t\treturn;\n\tcase REQ_SCROLL_PAGE_DOWN:\n\tcase REQ_SCROLL_HALF_PAGE_DOWN:\n\t\tlines = request == REQ_SCROLL_PAGE_DOWN ? view->height : view->height / 2;\n\t\t/* Fall-through */\n\tcase REQ_SCROLL_WHEEL_DOWN:\n\tcase REQ_SCROLL_LINE_DOWN:\n\t\tif (view->pos.offset + lines > view->lines)\n\t\t\tlines = view->lines - view->pos.offset;\n\n\t\t// do not scroll past bottom ...\n\t\tif ((view->pos.offset + view->height + lines) > view->lines)\n\t\t\tlines = view->lines - view->pos.offset - view->height;\n\n\t\tif (lines == 0 || view->pos.offset + view->height >= view->lines) {\n\t\t\treport(\"Cannot scroll beyond the last line\");\n\t\t\t// if wanted to move down when can no longer scroll ...\n\t\t\t// move_view(view, REQ_MOVE_DOWN);\n\t\t\treturn;\n\t\t}\n\t\tbreak;\n\n\tcase REQ_SCROLL_PAGE_UP:\n\tcase REQ_SCROLL_HALF_PAGE_UP:\n\t\tlines = request == REQ_SCROLL_PAGE_UP ? view->height : view->height / 2;\n\t\t/* Fall-through */\n\tcase REQ_SCROLL_LINE_UP:\n\tcase REQ_SCROLL_WHEEL_UP:\n\t\tif (lines > view->pos.offset)\n\t\t\tlines = view->pos.offset;\n\n\t\tif (lines == 0) {\n\t\t\treport(\"Cannot scroll beyond the first line\");\n\t\t\t// if wanted to move up when can no longer scroll ...\n\t\t\t// move_view(view, REQ_MOVE_UP);\n\t\t\treturn;\n\t\t}\n\n\t\tlines = -lines;\n\t\tbreak;\n\n\tdefault:\n\t\tdie(\"request %d not handled in switch\", request);\n\t}\n\n\torig_offset = view->pos.offset;\n\torig_lineno = view->pos.lineno;\n\n\tdo_scroll_view(view, lines);\n\n\tmove_lines = (view->pos.offset - orig_offset) - (view->pos.lineno - orig_lineno);\n\n\tfor (i = 0; i < ABS(move_lines); i++)\n\t\tmove_view(view, move_lines < 0 ? REQ_MOVE_UP : REQ_MOVE_DOWN);\n}\n\n/* Cursor moving */\nvoid\nmove_view(struct view *view, enum request request)\n{\n\tint scroll_steps = 0;\n\tint steps;\n\n\tswitch (request) {\n\tcase REQ_MOVE_FIRST_LINE:\n\t\tsteps = -view->pos.lineno;\n\t\tbreak;\n\n\tcase REQ_MOVE_LAST_LINE:\n\t\tsteps = view->lines - view->pos.lineno - 1;\n\t\tbreak;\n\n\tcase REQ_MOVE_PAGE_UP:\n\t\tsteps = view->height > view->pos.lineno\n\t\t      ? -view->pos.lineno : -view->height;\n\t\tbreak;\n\n\tcase REQ_MOVE_PAGE_DOWN:\n\t\tsteps = view->pos.lineno + view->height >= view->lines\n\t\t      ? view->lines - view->pos.lineno - 1 : view->height;\n\t\tbreak;\n\n\tcase REQ_MOVE_HALF_PAGE_UP:\n\t\tsteps = view->height / 2 > view->pos.lineno\n\t\t      ? -view->pos.lineno : -(view->height / 2);\n\t\tbreak;\n\n\tcase REQ_MOVE_HALF_PAGE_DOWN:\n\t\tsteps = view->pos.lineno + view->height / 2 >= view->lines\n\t\t      ? view->lines - view->pos.lineno - 1 : view->height / 2;\n\t\tbreak;\n\n\tcase REQ_MOVE_WHEEL_DOWN:\n\t\tsteps = view->pos.lineno + opt_mouse_scroll >= view->lines\n\t\t      ? view->lines - view->pos.lineno - 1 : opt_mouse_scroll;\n\t\tbreak;\n\n\tcase REQ_MOVE_WHEEL_UP:\n\t\tsteps = opt_mouse_scroll > view->pos.lineno\n\t\t      ? -view->pos.lineno : -opt_mouse_scroll;\n\t\tbreak;\n\n\tcase REQ_MOVE_UP:\n\tcase REQ_PREVIOUS:\n\t\tsteps = -1;\n\t\tbreak;\n\n\tcase REQ_MOVE_DOWN:\n\tcase REQ_NEXT:\n\t\tsteps = 1;\n\t\tbreak;\n\n\tdefault:\n\t\tdie(\"request %d not handled in switch\", request);\n\t}\n\n\tif (steps <= 0 && view->pos.lineno == 0) {\n\t\treport(\"Cannot move beyond the first line\");\n\t\treturn;\n\n\t} else if (steps >= 0 && view->pos.lineno + 1 >= view->lines) {\n\t\treport(\"Cannot move beyond the last line\");\n\t\treturn;\n\t}\n\n\t/* Move the current line */\n\tview->pos.lineno += steps;\n\tassert(0 <= view->pos.lineno && view->pos.lineno < view->lines);\n\n\t/* Check whether the view needs to be scrolled */\n\tif (view->pos.lineno < view->pos.offset ||\n\t    view->pos.lineno >= view->pos.offset + view->height) {\n\t\tscroll_steps = steps;\n\t\tif (steps < 0 && -steps > view->pos.offset) {\n\t\t\tscroll_steps = -view->pos.offset;\n\n\t\t} else if (steps > 0) {\n\t\t\tif (view->pos.lineno == view->lines - 1 &&\n\t\t\t    view->lines > view->height) {\n\t\t\t\tscroll_steps = view->lines - view->pos.offset - 1;\n\t\t\t\tif (scroll_steps >= view->height)\n\t\t\t\t\tscroll_steps -= view->height - 1;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!view_is_displayed(view)) {\n\t\tview->pos.offset += scroll_steps;\n\t\tassert(0 <= view->pos.offset && view->pos.offset < view->lines);\n\t\tview->ops->select(view, &view->line[view->pos.lineno]);\n\t\treturn;\n\t}\n\n\t/* Repaint the old \"current\" line if we be scrolling */\n\tif (ABS(steps) < view->height)\n\t\tdraw_view_line(view, view->pos.lineno - steps - view->pos.offset);\n\n\tif (scroll_steps) {\n\t\tdo_scroll_view(view, scroll_steps);\n\t\treturn;\n\t}\n\n\t/* Draw the current line */\n\tdraw_view_line(view, view->pos.lineno - view->pos.offset);\n\n\twnoutrefresh(view->win);\n\treport_clear();\n}\n\nvoid\nselect_view_line(struct view *view, unsigned long lineno)\n{\n\tstruct position old = view->pos;\n\n\tif (goto_view_line(view, view->pos.offset, lineno)) {\n\t\tif (view_is_displayed(view)) {\n\t\t\tif (old.offset != view->pos.offset) {\n\t\t\t\tredraw_view(view);\n\t\t\t} else {\n\t\t\t\tdraw_view_line(view, old.lineno - view->pos.offset);\n\t\t\t\tdraw_view_line(view, view->pos.lineno - view->pos.offset);\n\t\t\t\twnoutrefresh(view->win);\n\t\t\t}\n\t\t} else {\n\t\t\tview->ops->select(view, &view->line[view->pos.lineno]);\n\t\t}\n\t}\n}\n\nvoid\ngoto_id(struct view *view, const char *expr, bool from_start, bool save_search)\n{\n\tstruct view_column_data column_data = {0};\n\tchar id[SIZEOF_STR] = \"\";\n\tsize_t idlen;\n\tstruct line *line = &view->line[view->pos.lineno];\n\n\tif (!(view->ops->column_bits & view_column_bit(ID))) {\n\t\treport(\"Jumping to ID is not supported by the %s view\", view->name);\n\t\treturn;\n\t} else {\n\t\tchar tmp[SIZEOF_STR];\n\t\tchar *rev = (snprintf(tmp, SIZEOF_STR, \"%s^{}\", expr), argv_format_arg(view->env, tmp));\n\t\tconst char *rev_parse_argv[] = {\n\t\t\t\"git\", \"rev-parse\", \"--revs-only\", rev, NULL\n\t\t};\n\t\tbool ok = rev && io_run_buf(rev_parse_argv, id, sizeof(id), NULL, true);\n\n\t\tfree(rev);\n\t\tif (!ok) {\n\t\t\treport(\"Failed to parse expression '%s'\", expr);\n\t\t\treturn;\n\t\t}\n\t}\n\n\tif (!id[0]) {\n\t\tif (view->ops->get_column_data(view, line, &column_data)\n\t\t    && column_data.id && string_rev_is_null(column_data.id)) {\n\t\t\tselect_view_line(view, view->pos.lineno + 1);\n\t\t\treport_clear();\n\t\t} else {\n\t\t\treport(\"Expression '%s' is not a meaningful revision\", expr);\n\t\t}\n\t\treturn;\n\t}\n\n\tline = from_start ? view->line : &view->line[view->pos.lineno];\n\n\tfor (idlen = strlen(id); view_has_line(view, line); line++) {\n\t\tstruct view_column_data column_data = {0};\n\n\t\tif (view->ops->get_column_data(view, line, &column_data) &&\n\t\t    column_data.id &&\n\t\t    !strncasecmp(column_data.id, id, idlen)) {\n\t\t\tif (save_search)\n\t\t\t\tstring_ncopy(view->env->search, id, idlen);\n\t\t\tselect_view_line(view, line - view->line);\n\t\t\treport_clear();\n\t\t\treturn;\n\t\t}\n\t}\n\n\treport(\"Unable to find commit '%s'\", id);\n}\n\n/*\n * View history\n */\n\nstatic bool\nview_history_is_empty(struct view_history *history)\n{\n\treturn !history->stack;\n}\n\nstruct view_state *\npush_view_history_state(struct view_history *history, struct position *position, void *data)\n{\n\tstruct view_state *state = history->stack;\n\n\tif (state && data && history->state_alloc &&\n\t    !memcmp(state->data, data, history->state_alloc))\n\t\treturn state;\n\n\tstate = calloc(1, sizeof(*state) + history->state_alloc);\n\tif (!state)\n\t\treturn NULL;\n\n\tstate->prev = history->stack;\n\thistory->stack = state;\n\tclear_position(&history->position);\n\tstate->position = *position;\n\tstate->data = &state[1];\n\tif (data && history->state_alloc)\n\t\tmemcpy(state->data, data, history->state_alloc);\n\treturn state;\n}\n\nbool\npop_view_history_state(struct view_history *history, struct position *position, void *data)\n{\n\tstruct view_state *state = history->stack;\n\n\tif (view_history_is_empty(history))\n\t\treturn false;\n\n\thistory->position = state->position;\n\thistory->stack = state->prev;\n\n\tif (data && history->state_alloc)\n\t\tmemcpy(data, state->data, history->state_alloc);\n\tif (position)\n\t\t*position = state->position;\n\n\tfree(state);\n\treturn true;\n}\n\nvoid\nreset_view_history(struct view_history *history)\n{\n\twhile (pop_view_history_state(history, NULL, NULL))\n\t\t;\n}\n\n/*\n * Incremental updating\n */\n\nvoid\nreset_view(struct view *view)\n{\n\tint i;\n\n\tfor (i = 0; i < view->lines; i++)\n\t\tfree(view->line[i].data);\n\tfree(view->line);\n\n\treset_search(view);\n\tview->prev_pos = view->pos;\n\t/* A view without a previous view is the first view */\n\tif (!view->prev && !view->lines && view->prev_pos.lineno == 0)\n\t\tview->prev_pos.lineno = view->env->goto_lineno;\n\tclear_position(&view->pos);\n\n\tif (view->columns)\n\t\tview_column_reset(view);\n\n\tview->line = NULL;\n\tview->lines  = 0;\n\tview->vid[0] = 0;\n\tview->custom_lines = 0;\n\tview->update_secs = 0;\n}\n\nstatic bool\nrestore_view_position(struct view *view)\n{\n\t/* Ensure that the view position is in a valid state. */\n\tif (!check_position(&view->prev_pos) ||\n\t    (view->pipe && view->lines <= view->prev_pos.lineno))\n\t\treturn goto_view_line(view, view->pos.offset, view->pos.lineno);\n\n\t/* Changing the view position cancels the restoring. */\n\t/* FIXME: Changing back to the first line is not detected. */\n\tif (check_position(&view->pos)) {\n\t\tclear_position(&view->prev_pos);\n\t\treturn false;\n\t}\n\n\tif (goto_view_line(view, view->prev_pos.offset, view->prev_pos.lineno) &&\n\t    view_is_displayed(view))\n\t\twerase(view->win);\n\n\tview->pos.col = view->prev_pos.col;\n\tclear_position(&view->prev_pos);\n\n\treturn true;\n}\n\nvoid\nend_update(struct view *view, bool force)\n{\n\tif (!view->pipe)\n\t\treturn;\n\twhile (!view->ops->read(view, NULL, force))\n\t\tif (!force)\n\t\t\treturn;\n\tif (force)\n\t\tio_kill(view->pipe);\n\tio_done(view->pipe);\n\tview->pipe = NULL;\n}\n\nstatic void\nsetup_update(struct view *view, const char *vid)\n{\n\treset_view(view);\n\t/* XXX: Do not use string_copy_rev(), it copies until first space. */\n\tstring_ncopy(view->vid, vid, strlen(vid));\n\tview->pipe = &view->io;\n\tview->start_time = time(NULL);\n}\n\nstatic bool\nview_no_refresh(struct view *view, enum open_flags flags)\n{\n\tbool reload = !!(flags & OPEN_ALWAYS_LOAD) || !view->lines;\n\n\treturn (!reload && !strcmp(view->vid, view->ops->id)) ||\n\t       ((flags & OPEN_REFRESH) && !view_can_refresh(view));\n}\n\nstatic const char *\nstat_arg(struct view *view, enum open_flags flags)\n{\n\tstatic char opt_stat_arg[64] = \"\";\n\tint views = displayed_views();\n\tbool split = (views == 1 && !!(flags & OPEN_SPLIT)) || views == 2;\n\tint height, width;\n\n\tgetmaxyx(stdscr, height, width);\n\tif (split && vertical_split_is_enabled(opt_vertical_split, height, width)) {\n\t\tbool is_base_view = display[0] == view;\n\t\tint split_width = apply_vertical_split(width);\n\n\t\tif (is_base_view)\n\t\t\twidth -= split_width;\n\t\telse\n\t\t\twidth = split_width - 1;\n\t}\n\n\tstring_format(opt_stat_arg, \"--stat=%d\", MAX(0, width));\n\treturn opt_stat_arg;\n}\n\nbool\nview_exec(struct view *view, enum open_flags flags)\n{\n\tconst char **argv = NULL;\n\tint i;\n\tbool ok;\n\n\tenum io_flags forward_stdin = (flags & OPEN_FORWARD_STDIN) ? IO_RD_FORWARD_STDIN : 0;\n\tenum io_flags with_stderr = (flags & OPEN_WITH_STDERR) ? IO_RD_WITH_STDERR : 0;\n\tenum io_flags io_flags = forward_stdin | with_stderr;\n\n\tfor (i = 0; view->argv[i]; i++) {\n\t\tconst char *arg = view->argv[i];\n\t\tif (strcmp(arg, \"--stat\"))\n\t\t\targv_append(&argv, arg);\n\t\tif (!strcmp(arg, \"--stat\") || !strcmp(arg, \"--patch-with-stat\"))\n\t\t\targv_append(&argv, stat_arg(view, flags));\n\t}\n\tok = io_exec(&view->io, IO_RD, view->dir, NULL, argv, io_flags);\n\targv_free(argv);\n\tfree(argv);\n\treturn ok;\n}\n\nenum status_code\nbegin_update(struct view *view, const char *dir, const char **argv, enum open_flags flags)\n{\n\tbool extra = !!(flags & (OPEN_EXTRA));\n\tbool refresh = flags & (OPEN_REFRESH | OPEN_PREPARED | OPEN_STDIN);\n\n\tif (view_no_refresh(view, flags))\n\t\treturn SUCCESS;\n\n\tif (view->pipe) {\n\t\tif (extra)\n\t\t\tio_done(view->pipe);\n\t\telse\n\t\t\tend_update(view, true);\n\t}\n\n\tview->unrefreshable = open_in_pager_mode(flags);\n\n\tif (!refresh && argv) {\n\t\tint flags = 0;\n\t\tif (!view->prev)\n\t\t\tflags |= argv_flag_first;\n\t\tif (!view_has_flags(view, VIEW_FILE_FILTER) || opt_file_filter)\n\t\t\tflags |= argv_flag_file_filter;\n\t\tif (!view_has_flags(view, VIEW_REV_FILTER) || opt_rev_filter)\n\t\t\tflags |= argv_flag_rev_filter;\n\n\t\tview->dir = dir;\n\t\tif (!argv_format(view->env, &view->argv, argv, flags))\n\t\t\treturn error(\"Failed to format %s arguments\", view->name);\n\t}\n\n\tif (view->argv && view->argv[0] &&\n\t    !view_exec(view, flags))\n\t\treturn error(\"Failed to open %s view\", view->name);\n\n\tif (open_from_stdin(flags)) {\n\t\tif (!io_open(&view->io, \"%s\", \"\"))\n\t\t\tdie(\"Failed to open stdin\");\n\t}\n\n\tif (!extra)\n\t\tsetup_update(view, view->ops->id);\n\n\treturn SUCCESS;\n}\n\nbool\nupdate_view(struct view *view)\n{\n\t/* Clear the view and redraw everything since the tree sorting\n\t * might have rearranged things. */\n\tbool redraw = view->lines == 0;\n\tbool can_read = true;\n\tstruct encoding *encoding = view->encoding ? view->encoding : default_encoding;\n\tstruct buffer line;\n\n\tif (!view->pipe)\n\t\treturn true;\n\n\tif (!io_can_read(view->pipe, false)) {\n\t\tif (view->lines == 0 && view_is_displayed(view)) {\n\t\t\ttime_t secs = time(NULL) - view->start_time;\n\n\t\t\tif (secs > 1 && secs > view->update_secs) {\n\t\t\t\tif (view->update_secs == 0)\n\t\t\t\t\tredraw_view(view);\n\t\t\t\tupdate_view_title(view);\n\t\t\t\tview->update_secs = secs;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tfor (; io_get(view->pipe, &line, '\\n', can_read); can_read = false) {\n\t\tif (encoding && !encoding_convert(encoding, &line))\n\t\t\treport(\"Encoding failure\");\n\n\t\tif (!view->ops->read(view, &line, false)) {\n\t\t\treport(\"Allocation failure\");\n\t\t\tend_update(view, true);\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (io_error(view->pipe)) {\n\t\treport(\"Failed to read: %s\", io_strerror(view->pipe));\n\t\tend_update(view, true);\n\n\t} else if (io_eof(view->pipe)) {\n\t\tend_update(view, false);\n\t}\n\n\tif (restore_view_position(view))\n\t\tredraw = true;\n\n\tif (!view_is_displayed(view))\n\t\treturn true;\n\n\tif (redraw || view->force_redraw)\n\t\tredraw_view_from(view, 0);\n\telse\n\t\tredraw_view_dirty(view);\n\tview->force_redraw = false;\n\n\t/* Update the title _after_ the redraw so that if the redraw picks up a\n\t * commit reference in view->ref it'll be available here. */\n\tupdate_view_title(view);\n\treset_search(view);\n\treturn true;\n}\n\nvoid\nupdate_view_title(struct view *view)\n{\n\tWINDOW *window = view->title;\n\tunsigned int view_lines, lines;\n\tint update_increment = view_has_flags(view, VIEW_LOG_LIKE | VIEW_GREP_LIKE)\n\t\t\t       ? 100\n\t\t\t       : view_has_flags(view, VIEW_DIFF_LIKE) ? 10 : 1;\n\n\tassert(view_is_displayed(view));\n\n\tif (view == display[current_view])\n\t\twbkgdset(window, get_view_attr(view, LINE_TITLE_FOCUS));\n\telse\n\t\twbkgdset(window, get_view_attr(view, LINE_TITLE_BLUR));\n\n\twerase(window);\n\tmvwprintw(window, 0, 0, \"[%s]\", view->name);\n\n\tif (*view->ref) {\n\t\twprintw(window, \" %s\", view->ref);\n\t}\n\n\tif (!view_has_flags(view, VIEW_CUSTOM_STATUS) && view->line != NULL) {\n\t\tstruct line *line = &view->line[view->pos.lineno];\n\t\tif (view_has_line(view, line) && line->lineno) {\n\t\t\twprintw(window, \" - %s %u of %zu\",\n\t\t\t\t\t\t   view->ops->type,\n\t\t\t\t\t\t   line->lineno,\n\t\t\t\t\t\t   MAX(line->lineno,\n\t\t\t\t\t\t       view->pipe\n\t\t\t\t\t\t       ? update_increment *\n\t\t\t\t\t\t\t (size_t) ((view->lines - view->custom_lines) / update_increment)\n\t\t\t\t\t\t       : view->lines - view->custom_lines));\n\t\t}\n\t}\n\n\tif (view->pipe) {\n\t\tlong long secs = (long long) difftime(time(NULL), view->start_time);\n\n\t\t/* Three git seconds are a long time ... */\n\t\tif (secs > 2)\n\t\t\twprintw(window, \" loading %llds\", secs);\n\t}\n\n\tview_lines = view->pos.offset + view->height;\n\tlines = view->lines ? MIN(view_lines, view->lines) * 100 / view->lines : 0;\n\tmvwprintw(window, 0, view->width - count_digits(lines) - 2, \" %u%%\", lines);\n\n\twnoutrefresh(window);\n}\n\n/*\n * View opening\n */\n\nvoid\nsplit_view(struct view *prev, struct view *view)\n{\n\tint height, width;\n\tbool vsplit;\n\tint nviews = displayed_views();\n\n\tgetmaxyx(stdscr, height, width);\n\tvsplit = vertical_split_is_enabled(opt_vertical_split, height, width);\n\n\tdisplay[1] = view;\n\tcurrent_view = opt_focus_child ? 1 : 0;\n\tview->parent = prev;\n\tresize_display();\n\n\tif (prev->pos.lineno - prev->pos.offset >= prev->height) {\n\t\t/* Take the title line into account. */\n\t\tint lines = prev->pos.lineno - prev->pos.offset - prev->height + 1;\n\n\t\t/* Scroll the view that was split if the current line is\n\t\t * outside the new limited view. */\n\t\tdo_scroll_view(prev, lines);\n\t}\n\n\tif (view != prev && view_is_displayed(prev)) {\n\t\t/* \"Blur\" the previous view. */\n\t\tupdate_view_title(prev);\n\t\tdraw_view_line(prev, prev->pos.lineno - prev->pos.offset);\n\t\twnoutrefresh(prev->win);\n\t}\n\n\tif (view_has_flags(prev, VIEW_FLEX_WIDTH) && vsplit && nviews == 1)\n\t\treload_view(prev);\n}\n\nvoid\nmaximize_view(struct view *view, bool redraw)\n{\n\tint height, width;\n\tbool vsplit;\n\tint nviews = displayed_views();\n\n\tgetmaxyx(stdscr, height, width);\n\tvsplit = vertical_split_is_enabled(opt_vertical_split, height, width);\n\n\tmemset(display, 0, sizeof(display));\n\tcurrent_view = 0;\n\tdisplay[current_view] = view;\n\tresize_display();\n\tif (redraw) {\n\t\tredraw_display(false);\n\t\treport_clear();\n\t}\n\n\tif (view_has_flags(view, VIEW_FLEX_WIDTH) && vsplit && nviews > 1)\n\t\treload_view(view);\n}\n\nvoid\nload_view(struct view *view, struct view *prev, enum open_flags flags)\n{\n\tbool refresh = !view_no_refresh(view, flags);\n\n\t/* When prev == view it means this is the first loaded view. */\n\tif (prev && view != prev) {\n\t\tview->prev = prev;\n\t}\n\n\tif (!refresh && view_can_refresh(view) &&\n\t    watch_update_single(&view->watch, WATCH_EVENT_SWITCH_VIEW)) {\n\t\trefresh = watch_dirty(&view->watch);\n\t\tif (refresh)\n\t\t\tflags |= OPEN_REFRESH;\n\t}\n\n\tif (refresh) {\n\t\tenum status_code code;\n\n\t\tif (view->pipe)\n\t\t\tend_update(view, true);\n\t\tif (view->ops->private_size) {\n\t\t\tif (!view->private) {\n\t\t\t\tview->private = calloc(1, view->ops->private_size);\n\t\t\t} else {\n\t\t\t\tif (view->ops->done)\n\t\t\t\t\tview->ops->done(view);\n\t\t\t\tmemset(view->private, 0, view->ops->private_size);\n\t\t\t}\n\t\t}\n\n\t\tcode = view->ops->open(view, flags);\n\t\tif (code != SUCCESS) {\n\t\t\treport(\"%s\", get_status_message(code));\n\t\t\treturn;\n\t\t}\n\t}\n\n\tif (prev) {\n\t\tbool split = !!(flags & OPEN_SPLIT);\n\n\t\tif (split) {\n\t\t\tsplit_view(prev, view);\n\t\t} else {\n\t\t\tmaximize_view(view, false);\n\t\t}\n\t}\n\n\trestore_view_position(view);\n\n\tif (view->pipe && view->lines == 0) {\n\t\t/* Clear the old view and let the incremental updating refill\n\t\t * the screen. */\n\t\twerase(view->win);\n\t\t/* Do not clear the position if it is the first view. */\n\t\tif (view->prev && !(flags & (OPEN_RELOAD | OPEN_REFRESH))) {\n\t\t\tclear_position(&view->prev_pos);\n\t\t\treport_clear();\n\t\t}\n\t} else if (view_is_displayed(view)) {\n\t\tredraw_view(view);\n\t\treport_clear();\n\t}\n}\n\nvoid\nopen_view(struct view *prev, struct view *view, enum open_flags flags)\n{\n\tbool reload = !!(flags & (OPEN_RELOAD | OPEN_PREPARED));\n\tint nviews = displayed_views();\n\n\tassert(flags ^ OPEN_REFRESH);\n\n\tif (view == prev && nviews == 1 && !reload) {\n\t\tif (view->parent)\n\t\t\tview->parent = NULL;\n\t\telse\n\t\t\treport(\"Already in %s view\", view->name);\n\t\treturn;\n\t}\n\n\tif (!view_has_flags(view, VIEW_NO_GIT_DIR) && !repo.git_dir[0]) {\n\t\treport(\"The %s view is disabled in pager mode\", view->name);\n\t\treturn;\n\t}\n\n\t/* don't use a child view as previous view */\n\tif (prev && prev->parent && prev == display[1])\n\t\tprev = prev->parent;\n\n\tif (view != display[0])\n\t\tview->parent = NULL;\n\n\tif (!view->keymap)\n\t\tview->keymap = get_keymap(view->name, strlen(view->name));\n\tload_view(view, prev ? prev : view, flags);\n}\n\nvoid\nopen_argv(struct view *prev, struct view *view, const char *argv[], const char *dir, enum open_flags flags)\n{\n\tif (view->pipe)\n\t\tend_update(view, true);\n\tview->dir = dir;\n\n\tif (!argv_copy(&view->argv, argv)) {\n\t\treport(\"Failed to open %s view: %s\", view->name, io_strerror(&view->io));\n\t} else {\n\t\topen_view(prev, view, flags | OPEN_PREPARED);\n\t}\n}\n\n/*\n * Various utilities.\n */\n\nstatic struct view *sorting_view;\n\n#define apply_comparator(cmp, o1, o2) \\\n\t(!(o1) || !(o2)) ? !!(o2) - !!(o1) : cmp(o1, o2)\n\n#define number_compare(size1, size2)\t(*(size1) - *(size2))\n\n#define mode_is_dir(mode)\t\t((mode) && S_ISDIR(*(mode)))\n\nstatic int\ncompare_view_column(enum view_column_type column, bool use_file_mode,\n\t\t    const struct line *line1, struct view_column_data *column_data1,\n\t\t    const struct line *line2, struct view_column_data *column_data2)\n{\n\tswitch (column) {\n\tcase VIEW_COLUMN_AUTHOR:\n\t\treturn apply_comparator(ident_compare, column_data1->author, column_data2->author);\n\n\tcase VIEW_COLUMN_COMMITTER:\n\t\treturn apply_comparator(ident_compare, column_data1->committer, column_data2->committer);\n\n\tcase VIEW_COLUMN_DATE:\n\t\treturn apply_comparator(timecmp, column_data1->date, column_data2->date);\n\n\tcase VIEW_COLUMN_ID:\n\t\treturn apply_comparator(strcmp, column_data1->id, column_data2->id);\n\n\tcase VIEW_COLUMN_FILE_NAME:\n\t\tif (use_file_mode && mode_is_dir(column_data1->mode) != mode_is_dir(column_data2->mode))\n\t\t\treturn mode_is_dir(column_data1->mode) ? -1 : 1;\n\t\treturn apply_comparator(strcmp, column_data1->file_name, column_data2->file_name);\n\n\tcase VIEW_COLUMN_FILE_SIZE:\n\t\treturn apply_comparator(number_compare, column_data1->file_size, column_data2->file_size);\n\n\tcase VIEW_COLUMN_LINE_NUMBER:\n\t\treturn line1->lineno - line2->lineno;\n\n\tcase VIEW_COLUMN_MODE:\n\t\treturn apply_comparator(number_compare, column_data1->mode, column_data2->mode);\n\n\tcase VIEW_COLUMN_REF:\n\t\treturn apply_comparator(ref_compare, column_data1->ref, column_data2->ref);\n\n\tcase VIEW_COLUMN_COMMIT_TITLE:\n\t\treturn apply_comparator(strcmp, column_data1->commit_title, column_data2->commit_title);\n\n\tcase VIEW_COLUMN_SECTION:\n\t\treturn apply_comparator(strcmp, column_data1->section->opt.section.text,\n\t\t\t\t\t\tcolumn_data2->section->opt.section.text);\n\n\tcase VIEW_COLUMN_STATUS:\n\t\treturn apply_comparator(number_compare, column_data1->status, column_data2->status);\n\n\tcase VIEW_COLUMN_TEXT:\n\t\tif (column_data1->box && column_data2->box)\n\t\t\treturn apply_comparator(strcmp, column_data1->box->text,\n\t\t\t\t\t\t\tcolumn_data2->box->text);\n\t\treturn apply_comparator(strcmp, column_data1->text, column_data2->text);\n\t}\n\n\treturn 0;\n}\n\nstatic enum view_column_type view_column_order[] = {\n\tVIEW_COLUMN_FILE_NAME,\n\tVIEW_COLUMN_STATUS,\n\tVIEW_COLUMN_MODE,\n\tVIEW_COLUMN_FILE_SIZE,\n\tVIEW_COLUMN_DATE,\n\tVIEW_COLUMN_AUTHOR,\n\tVIEW_COLUMN_COMMITTER,\n\tVIEW_COLUMN_COMMIT_TITLE,\n\tVIEW_COLUMN_LINE_NUMBER,\n\tVIEW_COLUMN_SECTION,\n\tVIEW_COLUMN_TEXT,\n\tVIEW_COLUMN_REF,\n\tVIEW_COLUMN_ID,\n};\n\nstatic int\nsort_view_compare(const void *l1, const void *l2)\n{\n\tconst struct line *line1 = l1;\n\tconst struct line *line2 = l2;\n\tstruct view_column_data column_data1 = {0};\n\tstruct view_column_data column_data2 = {0};\n\tstruct sort_state *sort = &sorting_view->sort;\n\tenum view_column_type column = get_sort_field(sorting_view);\n\tint cmp;\n\tint i;\n\n\tif (!sorting_view->ops->get_column_data(sorting_view, line1, &column_data1))\n\t\treturn -1;\n\telse if (!sorting_view->ops->get_column_data(sorting_view, line2, &column_data2))\n\t\treturn 1;\n\n\tcmp = compare_view_column(column, true, line1, &column_data1, line2, &column_data2);\n\n\t/* Ensure stable sorting by ordering by the other\n\t * columns if the selected column values are equal. */\n\tfor (i = 0; !cmp && i < ARRAY_SIZE(view_column_order); i++)\n\t\tif (column != view_column_order[i])\n\t\t\tcmp = compare_view_column(view_column_order[i], false,\n\t\t\t\t\t\t  line1, &column_data1,\n\t\t\t\t\t\t  line2, &column_data2);\n\n\treturn sort->reverse ? -cmp : cmp;\n}\n\nvoid\nresort_view(struct view *view, bool renumber)\n{\n\tsorting_view = view;\n\tqsort(view->line, view->lines, sizeof(*view->line), sort_view_compare);\n\n\tif (renumber) {\n\t\tsize_t i, lineno;\n\n\t\tfor (i = 0, lineno = 1; i < view->lines; i++)\n\t\t\tif (view->line[i].lineno)\n\t\t\t\tview->line[i].lineno = lineno++;\n\t}\n}\n\nvoid\nsort_view(struct view *view, bool change_field)\n{\n\tstruct sort_state *state = &view->sort;\n\n\tif (change_field) {\n\t\twhile (true) {\n\t\t\tstate->current = state->current->next\n\t\t\t\t? state->current->next : view->columns;\n\t\t\tif (get_sort_field(view) == VIEW_COLUMN_ID &&\n\t\t\t    !state->current->opt.id.display)\n\t\t\t\tcontinue;\n\t\t\tbreak;\n\t\t}\n\t} else {\n\t\tstate->reverse = !state->reverse;\n\t}\n\n\tresort_view(view, false);\n}\n\nstatic const char *\nview_column_text(struct view *view, struct view_column_data *column_data,\n\t\t struct view_column *column)\n{\n\tconst char *text = \"\";\n\n\tswitch (column->type) {\n\tcase VIEW_COLUMN_AUTHOR:\n\t\tif (column_data->author)\n\t\t\ttext = mkauthor(column_data->author, column->opt.author.width, column->opt.author.display);\n\t\tbreak;\n\n\tcase VIEW_COLUMN_COMMITTER:\n\t\tif (column_data->committer)\n\t\t\ttext = mkauthor(column_data->committer, column->opt.committer.width, column->opt.committer.display);\n\t\tbreak;\n\n\tcase VIEW_COLUMN_COMMIT_TITLE:\n\t\ttext = column_data->commit_title;\n\t\tbreak;\n\n\tcase VIEW_COLUMN_DATE:\n\t\tif (column_data->date)\n\t\t\ttext = mkdate(column_data->date, column->opt.date.display,\n\t\t\t\t      column->opt.date.local, column->opt.date.format);\n\t\tbreak;\n\n\tcase VIEW_COLUMN_REF:\n\t\tif (column_data->ref)\n\t\t\ttext = column_data->ref->name;\n\t\tbreak;\n\n\tcase VIEW_COLUMN_FILE_NAME:\n\t\tif (column_data->file_name)\n\t\t\ttext = column_data->file_name;\n\t\tbreak;\n\n\tcase VIEW_COLUMN_FILE_SIZE:\n\t\tif (column_data->file_size)\n\t\t\ttext = mkfilesize(*column_data->file_size, column->opt.file_size.display);\n\t\tbreak;\n\n\tcase VIEW_COLUMN_ID:\n\t\tif (column->opt.id.display)\n\t\t\ttext = column_data->id;\n\t\tbreak;\n\n\tcase VIEW_COLUMN_LINE_NUMBER:\n\t\tbreak;\n\n\tcase VIEW_COLUMN_MODE:\n\t\tif (column_data->mode)\n\t\t\ttext = mkmode(*column_data->mode);\n\t\tbreak;\n\n\tcase VIEW_COLUMN_STATUS:\n\t\tif (column_data->status)\n\t\t\ttext = mkstatus(*column_data->status, column->opt.status.display);\n\t\tbreak;\n\n\tcase VIEW_COLUMN_SECTION:\n\t\ttext = column_data->section->opt.section.text;\n\t\tbreak;\n\n\tcase VIEW_COLUMN_TEXT:\n\t\ttext = column_data->text;\n\t\tbreak;\n\t}\n\n\treturn text ? text : \"\";\n}\n\nstatic bool\ngrep_refs(struct view *view, struct view_column *column, const struct ref *ref)\n{\n\tregmatch_t pmatch;\n\n\tfor (; ref; ref = ref->next) {\n\t\tif (!regexec(view->regex, ref->name, 1, &pmatch, 0))\n\t\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nbool\nview_column_grep(struct view *view, struct line *line)\n{\n\tstruct view_column_data column_data = {0};\n\tbool ok = view->ops->get_column_data(view, line, &column_data);\n\tstruct view_column *column;\n\n\tif (!ok)\n\t\treturn false;\n\n\tif (column_data.section) {\n\t\tconst char *text[] = {\n\t\t\tcolumn_data.section->opt.section.text,\n\t\t\tNULL\n\t\t};\n\n\t\treturn grep_text(view, text);\n\t}\n\n\tfor (column = view->columns; column; column = column->next) {\n\t\tconst char *text[] = {\n\t\t\tview_column_text(view, &column_data, column),\n\t\t\tNULL\n\t\t};\n\n\t\tif (grep_text(view, text))\n\t\t\treturn true;\n\n\t\tif (column->type == VIEW_COLUMN_COMMIT_TITLE &&\n\t\t    column->opt.commit_title.refs &&\n\t\t    grep_refs(view, column, column_data.refs))\n\t\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nbool\nview_column_info_changed(struct view *view, bool update)\n{\n\tstruct view_column *column;\n\tbool changed = false;\n\n\tfor (column = view->columns; column; column = column->next) {\n\t\tif (memcmp(&column->prev_opt, &column->opt, sizeof(column->opt))) {\n\t\t\tif (!update)\n\t\t\t\treturn true;\n\t\t\tcolumn->prev_opt = column->opt;\n\t\t\tchanged = true;\n\t\t}\n\t}\n\n\treturn changed;\n}\n\nvoid\nview_column_reset(struct view *view)\n{\n\tstruct view_column *column;\n\n\tview_column_info_changed(view, true);\n\tfor (column = view->columns; column; column = column->next)\n\t\tcolumn->width = 0;\n}\n\nstatic enum status_code\nparse_view_column_config_expr(char **pos, const char **name, const char **value, bool first)\n{\n\tsize_t len = strcspn(*pos, \",\");\n\tsize_t optlen;\n\n\tif (strlen(*pos) > len)\n\t\t(*pos)[len] = 0;\n\toptlen = strcspn(*pos, \":=\");\n\n\tif (first) {\n\t\t*name = \"display\";\n\n\t\tif (optlen == len) {\n\t\t\t*value = len ? *pos : \"yes\";\n\t\t\t*pos += len + 1;\n\t\t\treturn SUCCESS;\n\t\t}\n\n\t\t/* Fake boolean enum value. */\n\t\t*value = \"yes\";\n\t\treturn SUCCESS;\n\t}\n\n\t*name = *pos;\n\tif (optlen == len)\n\t\t*value = \"yes\";\n\telse\n\t\t*value = *pos + optlen + 1;\n\t(*pos)[optlen] = 0;\n\t*pos += len + 1;\n\n\treturn SUCCESS;\n}\n\nstatic enum status_code\nparse_view_column_option(struct view_column *column,\n\t\t\t const char *opt_name, const char *opt_value)\n{\n#define DEFINE_COLUMN_OPTION_INFO(name, type, flags) \\\n\t{ #name, STRING_SIZE(#name), #type, &opt->name, flags },\n\n#define DEFINE_COLUMN_OPTIONS_PARSE(name, id, options) \\\n\tif (column->type == VIEW_COLUMN_##id) { \\\n\t\tstruct name##_options *opt = &column->opt.name; \\\n\t\tstruct option_info info[] = { \\\n\t\t\toptions(DEFINE_COLUMN_OPTION_INFO) \\\n\t\t}; \\\n\t\tstruct option_info *option = find_option_info(info, ARRAY_SIZE(info), \"\", opt_name); \\\n\t\tif (!option) \\\n\t\t\treturn error(\"Unknown option `%s' for column %s\", opt_name, \\\n\t\t\t\t     view_column_name(VIEW_COLUMN_##id)); \\\n\t\treturn parse_option(option, #name, opt_value); \\\n\t}\n\n\tCOLUMN_OPTIONS(DEFINE_COLUMN_OPTIONS_PARSE);\n\n\treturn error(\"Unknown view column option: %s\", opt_name);\n}\n\nstatic enum status_code\nparse_view_column_config_exprs(struct view_column *column, const char *arg)\n{\n\tchar buf[SIZEOF_STR] = \"\";\n\tchar *pos, *end;\n\tbool first = true;\n\tenum status_code code = SUCCESS;\n\n\tstring_ncopy(buf, arg, strlen(arg));\n\n\tfor (pos = buf, end = pos + strlen(pos); code == SUCCESS && pos <= end; first = false) {\n\t\tconst char *name = NULL;\n\t\tconst char *value = NULL;\n\n\t\tcode = parse_view_column_config_expr(&pos, &name, &value, first);\n\t\tif (code == SUCCESS)\n\t\t\tcode = parse_view_column_option(column, name, value);\n\t}\n\n\treturn code;\n}\n\nstatic enum status_code\nparse_view_column_type(struct view_column *column, const char **arg)\n{\n\tenum view_column_type type;\n\tsize_t typelen = strcspn(*arg, \":,\");\n\n\tfor (type = 0; type < view_column_type_map->size; type++)\n\t\tif (enum_equals(view_column_type_map->entries[type], *arg, typelen)) {\n\t\t\t*arg += typelen + !!(*arg)[typelen];\n\t\t\tcolumn->type = type;\n\t\t\treturn SUCCESS;\n\t\t}\n\n\treturn error(\"Failed to parse view column type: %.*s\", (int) typelen, *arg);\n}\n\nstatic struct view *\nfind_view(const char *view_name)\n{\n\tstruct view *view;\n\tint i;\n\n\tforeach_view(view, i)\n\t\tif (!strncmp(view_name, view->name, strlen(view->name)))\n\t\t\treturn view;\n\n\treturn NULL;\n}\n\nenum status_code\nparse_view_column_config(const char *view_name, enum view_column_type type,\n\t\t\t const char *option_name, const char *argv[])\n{\n\tstruct view_column *column;\n\tstruct view *view = find_view(view_name);\n\n\tif (!view)\n\t\treturn error(\"Unknown view: %s\", view_name);\n\n\tif (!(view->ops->column_bits & (1 << type)))\n\t\treturn error(\"The %s view does not support %s column\", view->name,\n\t\t\t     view_column_name(type));\n\n\tcolumn = get_view_column(view, type);\n\tif (!column)\n\t\treturn error(\"The %s view does not have a %s column configured\", view->name,\n\t\t\t     view_column_name(type));\n\n\tif (option_name)\n\t\treturn parse_view_column_option(column, option_name, argv[0]);\n\treturn parse_view_column_config_exprs(column, argv[0]);\n}\n\nenum status_code\nparse_view_config(struct view_column **column_ref, const char *view_name, const char *argv[])\n{\n\tenum status_code code = SUCCESS;\n\tsize_t size = argv_size(argv);\n\tstruct view_column *columns;\n\tstruct view_column *column;\n\tstruct view *view = find_view(view_name);\n\tint i;\n\n\tif (!view)\n\t\treturn error(\"Unknown view: %s\", view_name);\n\n\tcolumns = calloc(size, sizeof(*columns));\n\tif (!columns)\n\t\treturn ERROR_OUT_OF_MEMORY;\n\n\tfor (i = 0, column = NULL; code == SUCCESS && i < size; i++) {\n\t\tconst char *arg = argv[i];\n\n\t\tif (column)\n\t\t\tcolumn->next = &columns[i];\n\t\tcolumn = &columns[i];\n\n\t\tcode = parse_view_column_type(column, &arg);\n\t\tif (code != SUCCESS)\n\t\t\tbreak;\n\n\t\tif (!(view->ops->column_bits & (1 << column->type)))\n\t\t\treturn error(\"The %s view does not support %s column\", view->name,\n\t\t\t\t     view_column_name(column->type));\n\n\t\tif ((column->type == VIEW_COLUMN_TEXT ||\n\t\t     column->type == VIEW_COLUMN_COMMIT_TITLE) &&\n\t\t     i + 1 < size)\n\t\t\treturn error(\"The %s column must always be last\",\n\t\t\t\t     view_column_name(column->type));\n\n\t\tcode = parse_view_column_config_exprs(column, arg);\n\t\tcolumn->prev_opt = column->opt;\n\t}\n\n\tif (code == SUCCESS) {\n\t\tfree(view->columns);\n\t\tview->columns = columns;\n\t\tview->sort.current = view->columns;\n\t\t*column_ref = columns;\n\t} else {\n\t\tfree(columns);\n\t}\n\n\treturn code;\n}\n\nstatic enum status_code\nformat_view_column_options(struct option_info options[], size_t options_size, char buf[], size_t bufsize)\n{\n\tchar name[SIZEOF_STR];\n\tchar value[SIZEOF_STR];\n\tsize_t bufpos = 0;\n\tconst char *sep = \":\";\n\tint i;\n\n\tbuf[0] = 0;\n\n\tfor (i = 0; i < options_size; i++) {\n\t\tstruct option_info *option = &options[i];\n\t\tconst char *assign = \"=\";\n\n\t\tif (!enum_name_copy(name, sizeof(name), option->name)\n\t\t    || !format_option_value(option, value, sizeof(value)))\n\t\t\treturn error(\"No space left in buffer\");\n\n\t\tif (!strcmp(name, \"display\")) {\n\t\t\tname[0] = 0;\n\t\t\tassign = \"\";\n\n\t\t}\n\n\t\tif (!strcmp(option->type, \"bool\") && !strcmp(value, \"yes\")) {\n\t\t\tif (!*name) {\n\t\t\t\tsep = \":yes,\";\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t/* For non-display boolean options 'yes' is implied. */\n#if 0\n\t\t\tvalue[0] = 0;\n\t\t\tassign = \"\";\n#endif\n\t\t}\n\n\t\tif (!strcmp(option->type, \"int\") && !strcmp(value, \"0\"))\n\t\t\tcontinue;\n\n\t\tif (!string_nformat(buf, bufsize, &bufpos, \"%s%s%s%s\",\n\t\t\t\t    sep, name, assign, value))\n\t\t\treturn error(\"No space left in buffer\");\n\n\t\tsep = \",\";\n\t}\n\n\treturn SUCCESS;\n}\n\nstatic enum status_code\nformat_view_column(struct view_column *column, char buf[], size_t bufsize)\n{\n#define FORMAT_COLUMN_OPTION_INFO(name, type, flags) \\\n\t{ #name, STRING_SIZE(#name), #type, &opt->name, flags },\n\n#define FORMAT_COLUMN_OPTIONS_PARSE(col_name, id, options) \\\n\tif (column->type == VIEW_COLUMN_##id) { \\\n\t\tstruct col_name##_options *opt = &column->opt.col_name; \\\n\t\tstruct option_info info[] = { \\\n\t\t\toptions(FORMAT_COLUMN_OPTION_INFO) \\\n\t\t}; \\\n\t\t\\\n\t\treturn format_view_column_options(info, ARRAY_SIZE(info), buf, bufsize); \\\n\t}\n\n\tCOLUMN_OPTIONS(FORMAT_COLUMN_OPTIONS_PARSE);\n\n\treturn error(\"Unknown view column type: %d\", column->type);\n}\n\nenum status_code\nformat_view_config(struct view_column *column, char buf[], size_t bufsize)\n{\n\tconst struct enum_map *map = view_column_type_map;\n\tconst char *sep = \"\";\n\tsize_t bufpos = 0;\n\tchar type[SIZEOF_STR];\n\tchar value[SIZEOF_STR];\n\n\tfor (; column; column = column->next) {\n\t\tenum status_code code = format_view_column(column, value, sizeof(value));\n\n\t\tif (code != SUCCESS)\n\t\t\treturn code;\n\n\t\tif (!enum_name_copy(type, sizeof(type), map->entries[column->type].name)\n\t\t    || !string_nformat(buf, bufsize, &bufpos, \"%s%s%s\",\n\t\t\t\t       sep, type, value))\n\t\t\treturn error(\"No space left in buffer\");\n\n\t\tsep = \" \";\n\t}\n\n\treturn SUCCESS;\n}\n\nstruct view_column *\nget_view_column(struct view *view, enum view_column_type type)\n{\n\tstruct view_column *column;\n\n\tfor (column = view->columns; column; column = column->next)\n\t\tif (column->type == type)\n\t\t\treturn column;\n\treturn NULL;\n}\n\n#define MAXWIDTH(maxwidth)\t(width == 0 ? maxwidth < 0 ? -maxwidth * view->width / 100 : maxwidth : 0)\n\nbool\nview_column_info_update(struct view *view, struct line *line)\n{\n\tstruct view_column_data column_data = {0};\n\tstruct view_column *column;\n\tbool changed = false;\n\n\tif (!view->ops->get_column_data(view, line, &column_data))\n\t\treturn false;\n\n\tfor (column = view->columns; column; column = column->next) {\n\t\tconst char *text = view_column_text(view, &column_data, column);\n\t\tint width = 0;\n\t\tint maxwidth = 0;\n\n\t\tswitch (column->type) {\n\t\tcase VIEW_COLUMN_AUTHOR:\n\t\t\twidth = column->opt.author.width;\n\t\t\tmaxwidth = MAXWIDTH(column->opt.author.maxwidth);\n\t\t\tbreak;\n\n\t\tcase VIEW_COLUMN_COMMITTER:\n\t\t\twidth = column->opt.committer.width;\n\t\t\tmaxwidth = MAXWIDTH(column->opt.committer.maxwidth);\n\t\t\tbreak;\n\n\t\tcase VIEW_COLUMN_COMMIT_TITLE:\n\t\t\tbreak;\n\n\t\tcase VIEW_COLUMN_DATE:\n\t\t\twidth = column->opt.date.width;\n\t\t\tbreak;\n\n\t\tcase VIEW_COLUMN_FILE_NAME:\n\t\t\twidth = column->opt.file_name.width;\n\t\t\tmaxwidth = MAXWIDTH(column->opt.file_name.maxwidth);\n\t\t\tbreak;\n\n\t\tcase VIEW_COLUMN_FILE_SIZE:\n\t\t\twidth = column->opt.file_size.width;\n\t\t\tbreak;\n\n\t\tcase VIEW_COLUMN_ID:\n\t\t\twidth = column->opt.id.width;\n\t\t\tif (!width)\n\t\t\t\twidth = opt_id_width;\n\t\t\tif (!width)\n\t\t\t\twidth = 7;\n\t\t\tbreak;\n\n\t\tcase VIEW_COLUMN_LINE_NUMBER:\n\t\t\twidth = column->opt.line_number.width;\n\t\t\tif (!width) {\n\t\t\t\tif (column_data.line_number)\n\t\t\t\t\twidth = count_digits(*column_data.line_number);\n\t\t\t\telse\n\t\t\t\t\twidth = count_digits(view->lines);\n\t\t\t}\n\t\t\tif (width < 3)\n\t\t\t\twidth = 3;\n\t\t\tbreak;\n\n\t\tcase VIEW_COLUMN_MODE:\n\t\t\twidth = column->opt.mode.width;\n\t\t\tbreak;\n\n\t\tcase VIEW_COLUMN_REF:\n\t\t\twidth = column->opt.ref.width;\n\t\t\tmaxwidth = MAXWIDTH(column->opt.ref.maxwidth);\n\t\t\tbreak;\n\n\t\tcase VIEW_COLUMN_SECTION:\n\t\t\tbreak;\n\n\t\tcase VIEW_COLUMN_STATUS:\n\t\t\tbreak;\n\n\t\tcase VIEW_COLUMN_TEXT:\n\t\t\tbreak;\n\t\t}\n\n\t\tif (*text && !width)\n\t\t\twidth = utf8_width(text);\n\n\t\tif ((maxwidth > 0) && (width > maxwidth))\n\t\t\twidth = maxwidth;\n\n\t\tif (width > column->width) {\n\t\t\tcolumn->width = width;\n\t\t\tchanged = true;\n\t\t}\n\t}\n\n\tif (changed)\n\t\tview->force_redraw = true;\n\treturn changed;\n}\n\nstruct line *\nfind_line_by_type(struct view *view, struct line *line, enum line_type type, int direction, enum line_type fence)\n{\n\tfor (; view_has_line(view, line); line += direction)\n\t\tif (line->type == type)\n\t\t\treturn line;\n\t\telse if (line->type == fence)\n\t\t\tbreak;\n\n\treturn NULL;\n}\n\nstatic inline bool\nforward_request_to_child(struct view *child, enum request request)\n{\n\treturn displayed_views() == 2 && view_is_displayed(child) &&\n\t\t!strcmp(child->vid, child->ops->id);\n}\n\nenum request\nview_request(struct view *view, enum request request)\n{\n\tif (!view || !view->lines)\n\t\treturn request;\n\n\tif (request == REQ_ENTER && view == display[0] &&\n\t    !opt_focus_child && opt_send_child_enter &&\n\t    view_has_flags(view, VIEW_SEND_CHILD_ENTER)) {\n\t\tstruct view *child = display[1];\n\n\t\tif (forward_request_to_child(child, request)) {\n\t\t\tview_request(child, request);\n\t\t\treturn REQ_NONE;\n\t\t}\n\t}\n\n\tif (request == REQ_REFRESH && !view_can_refresh(view)) {\n\t\treport(\"This view can not be refreshed\");\n\t\treturn REQ_NONE;\n\t}\n\n\treturn view->ops->request(view, request, &view->line[view->pos.lineno]);\n}\n\n/*\n * Line utilities.\n */\n\nDEFINE_ALLOCATOR(realloc_lines, struct line, 256)\n\nstatic inline char *\nbox_text_offset(struct box *box, size_t cells)\n{\n\treturn (char *) &box->cell[cells];\n}\n\nvoid\nbox_text_copy(struct box *box, size_t cells, const char *src, size_t srclen)\n{\n\tchar *dst = box_text_offset(box, cells);\n\n\tbox->text = dst;\n\tstrncpy(dst, src, srclen);\n}\n\nstruct line *\nadd_line_at(struct view *view, unsigned long pos, const void *data, enum line_type type, size_t data_size, bool custom)\n{\n\tstruct line *line;\n\tunsigned long lineno;\n\n\tif (!realloc_lines(&view->line, view->lines, 1))\n\t\treturn NULL;\n\n\tif (data_size) {\n\t\tvoid *alloc_data = calloc(1, data_size);\n\n\t\tif (!alloc_data)\n\t\t\treturn NULL;\n\n\t\tif (data)\n\t\t\tmemcpy(alloc_data, data, data_size);\n\t\tdata = alloc_data;\n\t}\n\n\tif (pos < view->lines) {\n\t\tview->lines++;\n\t\tline = view->line + pos;\n\t\tlineno = line->lineno;\n\n\t\tmemmove(line + 1, line, (view->lines - 1 - pos) * sizeof(*view->line));\n\t\twhile (pos < view->lines) {\n\t\t\tview->line[pos].lineno++;\n\t\t\tview->line[pos++].dirty = 1;\n\t\t}\n\t} else {\n\t\tline = &view->line[view->lines++];\n\t\tlineno = view->lines - view->custom_lines;\n\t}\n\n\tmemset(line, 0, sizeof(*line));\n\tline->type = type;\n\tline->data = (void *) data;\n\tline->dirty = 1;\n\n\tif (custom)\n\t\tview->custom_lines++;\n\telse\n\t\tline->lineno = lineno;\n\n\treturn line;\n}\n\nstruct line *\nadd_line(struct view *view, const void *data, enum line_type type, size_t data_size, bool custom)\n{\n\treturn add_line_at(view, view->lines, data, type, data_size, custom);\n}\n\nstruct line *\nadd_line_alloc_(struct view *view, void **ptr, enum line_type type, size_t data_size, bool custom)\n{\n\tstruct line *line = add_line(view, NULL, type, data_size, custom);\n\n\tif (line)\n\t\t*ptr = line->data;\n\treturn line;\n}\n\nstruct line *\nadd_line_nodata(struct view *view, enum line_type type)\n{\n\treturn add_line(view, NULL, type, 0, false);\n}\n\nstruct line *\nadd_line_text_at_(struct view *view, unsigned long pos, const char *text, size_t textlen, enum line_type type, size_t cells, bool custom)\n{\n\tstruct box *box;\n\tstruct line *line = add_line_at(view, pos, NULL, type, box_sizeof(NULL, cells, textlen), custom);\n\n\tif (!line)\n\t\treturn NULL;\n\n\tbox = line->data;\n\tbox->cell[box->cells].length = textlen;\n\tbox->cell[box->cells++].type = type;\n\tbox_text_copy(box, cells, text, textlen);\n\n\tif (view->ops->column_bits)\n\t\tview_column_info_update(view, line);\n\treturn line;\n}\n\nstruct line *\nadd_line_text_at(struct view *view, unsigned long pos, const char *text, enum line_type type, size_t cells)\n{\n\tsize_t textlen = strlen(text);\n\n\t/* If the filename contains a space, Git adds a tab at the end of\n\t * the line, to satisfy GNU patch. Drop it to correct the filename. */\n\tif ((type == LINE_DIFF_ADD_FILE || type == LINE_DIFF_DEL_FILE) && text[textlen - 1] == '\\t')\n\t\ttextlen--;\n\n\treturn add_line_text_at_(view, pos, text, textlen, type, cells, false);\n}\n\nstruct line *\nadd_line_text(struct view *view, const char *text, enum line_type type)\n{\n\treturn add_line_text_at(view, view->lines, text, type, 1);\n}\n\nstruct line * PRINTF_LIKE(3, 4)\nadd_line_format(struct view *view, enum line_type type, const char *fmt, ...)\n{\n\tchar buf[SIZEOF_STR];\n\tint retval;\n\n\tFORMAT_BUFFER(buf, sizeof(buf), fmt, retval, false);\n\treturn retval >= 0 ? add_line_text(view, buf, type) : NULL;\n}\n\nbool\nappend_line_format(struct view *view, struct line *line, const char *fmt, ...)\n{\n\tstruct box *box;\n\tsize_t textlen = box_text_length(line->data);\n\tint fmtlen, retval;\n\tva_list args;\n\tchar *text;\n\n\tva_start(args, fmt);\n\tfmtlen = vsnprintf(NULL, 0, fmt, args);\n\tva_end(args);\n\n\tif (fmtlen <= 0)\n\t\treturn false;\n\n\tbox = realloc(line->data, box_sizeof(line->data, 0, fmtlen));\n\tif (!box)\n\t\treturn false;\n\n\tbox->text = text = box_text_offset(box, box->cells);\n\tFORMAT_BUFFER(text + textlen, fmtlen + 1, fmt, retval, false);\n\tif (retval < 0)\n\t\ttext[textlen] = 0;\n\n\tbox->cell[box->cells - 1].length += fmtlen;\n\tline->data = box;\n\tline->dirty = true;\n\n\tif (view->ops->column_bits)\n\t\tview_column_info_update(view, line);\n\n\treturn true;\n}\n\n/*\n * Global view state.\n */\n\n/* Included last to not pollute the rest of the file. */\n#include \"tig/main.h\"\n#include \"tig/diff.h\"\n#include \"tig/log.h\"\n#include \"tig/reflog.h\"\n#include \"tig/tree.h\"\n#include \"tig/blob.h\"\n#include \"tig/blame.h\"\n#include \"tig/refs.h\"\n#include \"tig/status.h\"\n#include \"tig/stage.h\"\n#include \"tig/stash.h\"\n#include \"tig/grep.h\"\n#include \"tig/pager.h\"\n#include \"tig/help.h\"\n\nstatic struct view *views[] = {\n#define VIEW_DATA(id, name) &name##_view\n\tVIEW_INFO(VIEW_DATA)\n};\n\nstruct view *\nget_view(int i)\n{\n\treturn 0 <= i && i < ARRAY_SIZE(views) ? views[i] : NULL;\n}\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "src/watch.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/tig.h\"\n#include \"tig/repo.h\"\n#include \"tig/refdb.h\"\n#include \"tig/io.h\"\n#include \"tig/options.h\"\n#include \"tig/watch.h\"\n\nstatic struct watch *watches;\n\nvoid\nwatch_register(struct watch *watch, enum watch_trigger triggers)\n{\n\twatch_unregister(watch);\n\n\twatch->next = watches;\n\twatches = watch;\n\n\twatch->triggers = triggers;\n\twatch->changed = WATCH_NONE;\n\twatch->state = WATCH_NONE;\n}\n\nvoid\nwatch_unregister(struct watch *watch)\n{\n\tstruct watch *pos, *prev = NULL;\n\n\tfor (pos = watches; pos; prev = pos, pos = pos->next) {\n\t\tif (watch != pos)\n\t\t\tcontinue;\n\t\tif (!prev)\n\t\t\twatches = watch->next;\n\t\telse\n\t\t\tprev->next = watch->next;\n\t\tbreak;\n\t}\n\n\tmemset(watch, 0, sizeof(*watch));\n}\n\nstruct watch_handler {\n\tenum watch_trigger (*check)(struct watch_handler *handler, enum watch_event event, enum watch_trigger check);\n\tenum watch_trigger triggers;\n\ttime_t last_modified;\n\tstruct index_diff diff;\n};\n\nstatic bool\ncheck_file_mtime(time_t *last_modified, const char *path_fmt, ...)\n{\n\tchar path[SIZEOF_STR];\n\tstruct stat stat;\n\tint retval;\n\tbool has_changed = !!*last_modified;\n\n\tFORMAT_BUFFER(path, sizeof(path), path_fmt, retval, false);\n\n\tif (retval < 0 ||\n\t    lstat(path, &stat) < 0 ||\n\t    stat.st_mtime <= *last_modified)\n\t\treturn false;\n\n\t*last_modified = stat.st_mtime;\n\treturn has_changed;\n}\n\nstatic enum watch_trigger\nwatch_head_handler(struct watch_handler *handler, enum watch_event event, enum watch_trigger check)\n{\n\tconst struct ref *head;\n\n\tif (check_file_mtime(&handler->last_modified, \"%s/HEAD\", repo.git_dir))\n\t\treturn WATCH_HEAD;\n\n\t// FIXME: check branch\n\tif ((head = get_ref_head()) &&\n\t    check_file_mtime(&handler->last_modified, \"%s/refs/heads/%s\", repo.git_dir, head->name))\n\t\treturn WATCH_HEAD;\n\n\treturn WATCH_NONE;\n}\n\nstatic enum watch_trigger\nwatch_stash_handler(struct watch_handler *handler, enum watch_event event, enum watch_trigger check)\n{\n\tif (check_file_mtime(&handler->last_modified, \"%s/refs/stash\", repo.git_dir))\n\t\treturn WATCH_STASH;\n\n\treturn WATCH_NONE;\n}\n\nstatic enum watch_trigger\nwatch_index_handler(struct watch_handler *handler, enum watch_event event, enum watch_trigger check)\n{\n\tenum watch_trigger changed = WATCH_NONE;\n\tstruct index_diff diff;\n\n\tif (event == WATCH_EVENT_AFTER_COMMAND)\n\t\treturn check_file_mtime(&handler->last_modified, \"%s/index\", repo.git_dir)\n\t\t\t? check : WATCH_NONE;\n\n\tif (event == WATCH_EVENT_SWITCH_VIEW)\n\t\treturn WATCH_NONE;\n\n\tif (!index_diff(&diff, opt_show_untracked, opt_status_show_untracked_files))\n\t\treturn check_file_mtime(&handler->last_modified, \"%s/index\", repo.git_dir)\n\t\t\t? check : WATCH_NONE;\n\n\tif (check & WATCH_INDEX_STAGED && diff.staged != handler->diff.staged) {\n\t\tif (handler->last_modified)\n\t\t\tchanged |= WATCH_INDEX_STAGED;\n\t\thandler->diff.staged = diff.staged;\n\t}\n\n\tif (check & WATCH_INDEX_UNSTAGED && diff.unstaged != handler->diff.unstaged) {\n\t\tif (handler->last_modified)\n\t\t\tchanged |= WATCH_INDEX_UNSTAGED;\n\t\thandler->diff.unstaged = diff.unstaged;\n\t}\n\n\tif (check & WATCH_INDEX_UNTRACKED && diff.untracked != handler->diff.untracked) {\n\t\tif (handler->last_modified)\n\t\t\tchanged |= WATCH_INDEX_UNTRACKED;\n\t\thandler->diff.untracked = diff.untracked;\n\t}\n\n\thandler->last_modified = time(NULL);\n\n\treturn changed;\n}\n\nstatic enum watch_trigger\nwatch_refs_handler(struct watch_handler *handler, enum watch_event event,\n\t\t   enum watch_trigger check)\n{\n\tif (event == WATCH_EVENT_AFTER_COMMAND ||\n\t    check_file_mtime(&handler->last_modified, \"%s/refs/heads\", repo.git_dir) ||\n\t    check_file_mtime(&handler->last_modified, \"%s/refs/tags\", repo.git_dir) ||\n\t    check_file_mtime(&handler->last_modified, \"%s/refs/notes\", repo.git_dir) ||\n\t    check_file_mtime(&handler->last_modified, \"%s/packed-refs\", repo.git_dir)) {\n\t\thandler->last_modified = time(NULL);\n\t\treturn WATCH_REFS;\n\t}\n\n\treturn WATCH_NONE;\n}\n\nstatic struct watch_handler watch_handlers[] = {\n\t{ watch_index_handler, WATCH_INDEX },\n\t{ watch_head_handler, WATCH_HEAD },\n\t{ watch_stash_handler, WATCH_STASH },\n\t{ watch_refs_handler, WATCH_HEAD | WATCH_REFS },\n};\n\nstatic bool\nwatch_no_refresh(enum watch_event event)\n{\n\treturn opt_refresh_mode == REFRESH_MODE_MANUAL ||\n\t       (opt_refresh_mode == REFRESH_MODE_AFTER_COMMAND &&\n\t\tevent != WATCH_EVENT_AFTER_COMMAND);\n}\n\nstatic void\nwatch_apply_changes(struct watch *source, enum watch_event event,\n\t\t    enum watch_trigger changed)\n{\n\tstruct watch *watch;\n\n\tif (watch_no_refresh(event))\n\t\treturn;\n\n\tfor (watch = watches; watch; watch = watch->next) {\n\t\tenum watch_trigger triggers = changed & watch->triggers;\n\n\t\tif (source == watch) {\n\t\t\tsource->state |= triggers;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (event == WATCH_EVENT_AFTER_COMMAND) {\n\t\t\twatch->state = WATCH_NONE;\n\t\t\ttriggers = watch->triggers;\n\t\t}\n\n\t\twatch->changed |= triggers;\n\t}\n}\n\nvoid\nwatch_apply(struct watch *source, enum watch_trigger changed)\n{\n\twatch_apply_changes(source, WATCH_EVENT_LOAD, changed);\n}\n\nstatic enum watch_trigger\nwatch_update_event(enum watch_event event, enum watch_trigger trigger,\n\t\t   enum watch_trigger changed)\n{\n\ttime_t timestamp = 0;\n\tint i;\n\n\tif (watch_no_refresh(event))\n\t\treturn WATCH_NONE;\n\n\tif (event == WATCH_EVENT_AFTER_COMMAND)\n\t\ttimestamp = time(NULL);\n\n\tfor (i = 0; i < ARRAY_SIZE(watch_handlers); i++) {\n\t\tstruct watch_handler *handler = &watch_handlers[i];\n\n\t\tif (event == WATCH_EVENT_AFTER_COMMAND) {\n\t\t\tchanged = handler->triggers;\n\t\t\thandler->last_modified = timestamp;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (*repo.git_dir &&\n\t\t    (trigger & handler->triggers) &&\n\t\t    (changed | handler->triggers) != changed)\n\t\t\tchanged |= handler->check(handler, event, trigger);\n\t}\n\n\tif (changed)\n\t\twatch_apply_changes(NULL, event, changed);\n\n\treturn changed;\n}\n\n#define watch_trigger_unmask(triggers, set) ((triggers) & ~(set))\n\nstatic inline enum watch_trigger\nwatch_unchanged_triggers(struct watch *watch)\n{\n\treturn watch_trigger_unmask(watch->triggers, watch->changed);\n}\n\nenum watch_trigger\nwatch_update_single(struct watch *watch, enum watch_event event)\n{\n\tenum watch_trigger trigger = watch_unchanged_triggers(watch);\n\n\treturn watch_update_event(event, trigger, watch->changed);\n}\n\nenum watch_trigger\nwatch_update(enum watch_event event)\n{\n\tenum watch_trigger trigger = WATCH_NONE;\n\tstruct watch *watch;\n\n\t/* Collect triggers to check. Skkipping watches that are already\n\t * marked dirty to avoid unnecessary checks. */\n\tfor (watch = watches; watch; watch = watch->next)\n\t\ttrigger |= watch_unchanged_triggers(watch);\n\n\treturn watch_update_event(event, trigger, WATCH_NONE);\n}\n\nint\nwatch_periodic(int interval)\n{\n\tstatic time_t last_update;\n\tint delay = -1;\n\n\tif (watches && interval > 0) {\n\t\ttime_t now = time(NULL);\n\n\t\tif (!last_update || last_update + interval <= now) {\n\t\t\twatch_update(WATCH_EVENT_PERIODIC);\n\t\t\tlast_update = now;\n\t\t}\n\n\t\tdelay = (now - last_update + interval) * 1000;\n\t}\n\n\treturn delay;\n}\n\nbool\nwatch_dirty(struct watch *watch)\n{\n\tenum watch_trigger old_index = watch->state & WATCH_INDEX;\n\tenum watch_trigger new_index = watch->changed & WATCH_INDEX;\n\tenum watch_trigger index = watch_trigger_unmask(new_index, old_index);\n\tenum watch_trigger other = watch_trigger_unmask(watch->changed, WATCH_INDEX);\n\tbool dirty = !!(index | other);\n\n\twatch->changed = WATCH_NONE;\n\treturn dirty;\n}\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "test/API.adoc",
    "content": "Testing API\n-----------\n\nfile(filename, [content, ...]) [< content]::\n\ntig_script(name, content, [content, ...])::\n\nsteps(content, [content, ...])::\n\nstdin([content, ...]) [< content]::\n\ntigrc([content, ...]) [< content]::\n\ngitconfig(content, ...)::\n\nin_work_dir(command, [args, ...])::\n\nassert_equals(filename, [whitespace, note, ...]) < expected::\n\nassert_not_exists(filename)::\n\nassert_vars(count)::\n\ntest_todo([note, ...])::\n\ntest_timeout(seconds)::\n\nrequire_git_version(version, [note, ...])::\n\ntest_require(git-worktree, address-sanitizer, diff-highlight, readline)::\n\ntest_setup()::\n\ntest_tig()::\n\n\tSet up a controlled environment and report the test result.\n\tInput to be processed via stdin is passed and stderr is captured and\n\tcan be used for later assertions.\n\tExample\n--------------------------------------------------------------------------------\ntest_tig show 1a2b3c4d5e6f\n--------------------------------------------------------------------------------\n\ntest_graph() < expected::\n\ntest_case([--before=<string>, --after=<string>, --script=<string>, --args=<string>, --cwd=<string>, --tigrc=<string>, --assert-stderr=<string>, --todo=<string>, --subshell=<string>, --timeout=<string>]) < expected::\n\nrun_test_cases()::\n\n"
  },
  {
    "path": "test/README.adoc",
    "content": "Test Overview\n=============\n\nAll tests can be run with `make test`. This will run all scripts that\nend with `-test` in the `test` folder and summarize the test results\nusing the script `test/tools/show-results.sh`.\n\nTo run individual tests, use `make <path-to-test>` e.g. `make\ntest/tigrc/parse-test`. Alternatively, tests can be run directly via the\ntest scripts as long as `PATH` is set to include the directories `src/`\nand `test/tools`. The latter directory is where the test helper\nlibraries are located, the most important of which is `libtest.sh`.\n\nThe test suite requires `stty -tostop` to be set in the running terminal,\nwhich is typically the default.\n\nOptions\n-------\n\nTests can be configured by setting the `TEST_OPTS` environment variable.\nThe variable should contain a space-separated list of options. The\nfollowing options are supported:\n\nverbose::\n\n\tWhether to print individual test results even when all\n\tassertions passed. The default is to not show results for passed\n\ttests.\n\nno-indent::\n\n\tDo not indent test output. This is automatically set depending\n\ton whether `V=1` was passed to `make` to show verbose output.\n\ndebugger[=<program]::\n\n\tInvoke tig via a debugger, for example `debugger=lldb`. When no\n\tprogram is specified it is auto-detected. Remember to recompile\n\tusing `make clean all-debug` to expose all symbols.\n\nfilter=<file-glob>:<case-glob>::\n\n\tOnly run test files or cases matching a shell-style glob filter. A\n\tcolon separates the file glob from the case glob.  No colon, or\n\ttrailing colon, is equivalent to trailing `:*` (all cases). Leading\n\tcolon is equivalent to leading `*:` (all files).  The file portion\n\tis matched against a path fragment from the project root.\n\tExample:\n--------------------------------------------------------------------------------\n\t$ TEST_OPTS='filter=*:*default' make test/tigrc/width-test\n--------------------------------------------------------------------------------\n\t::\n\tThis option is a convenience for development against specific tests.\n\tTest files and test cases are filtered, but not assertions.  Thus some\n\tassertions are expected to fail in the presence of a filter.  Testing\n\toutput originating from `make` is also not filtered.\n\ntrace::\n\n\tShow trace information.\n\ntodos::\n\n\tRun TODO tests, which are otherwise skipped.\n\nvalgrind::\n\n\tRun tests and verify memory access with Valgrind.\n\ntimeout=<int>::\n\n\tSet the default timeout for each invocation of tig under the\n\ttest harness. The default is 10 if unset. 0 means \"no\n\ttimeout\". Individual tests may override the value.\n"
  },
  {
    "path": "test/blame/blob-blame-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport COLUMNS=200\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\ntigrc <<EOF\nset line-graphics = ascii\nEOF\n\nsteps '\n\t# Go to the \"clean in deltablue\" line.\n\t:36\n\t# Find the commit that added that line.\n\t:view-blame\n\t# Assert that we still select that line.\n\t:save-display recursive-blame.screen\n'\n\ntest_tig blame project/Build.scala\n\nassert_equals 'recursive-blame.screen' <<EOF\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  22|           \"-feature\",\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  23|           \"-encoding\", \"utf8\"\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  24|       )\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  25|   )\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  26|\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  27|   lazy val benchmarkSettings = defaultSettings ++ Seq(\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  28|       unmanagedSources in (Compile, packageJS) +=\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  29|           baseDirectory.value / \"exports.js\"\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  30|   )\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  31|\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  32|   lazy val parent: Project = Project(\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  33|       id = \"parent\",\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  34|       base = file(\".\"),\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  35|       settings = projectSettings ++ Seq(\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  36|           name := \"Scala.js Benchmarks\",\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  37|           publishArtifact in Compile := false,\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  38|\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  39|           clean := clean.dependsOn(\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  40|              clean in common,\nb103989 Jonas Fonseca 2013-10-20 00:23 -0700  41|              clean in deltablue,\n4edd069 Jonas Fonseca 2013-10-17 20:34 -0400  42|              clean in richards,\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  43|              clean in tracer\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  44|           ).value\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  45|       )\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  46|   ).aggregate(\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  47|       common,\nb103989 Jonas Fonseca 2013-10-20 00:23 -0700  48|       deltablue,\n4edd069 Jonas Fonseca 2013-10-17 20:34 -0400  49|       richards,\n[blame] b103989d59edab3adc312ff5408fa3d344ea0201:project/Build.scala - line 41 of 66                                                                                                                 74%\nEOF\n"
  },
  {
    "path": "test/blame/default-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\ntigrc <<EOF\nset vertical-split = no\nset line-graphics = ascii\nset blame-view-date-use-author = yes\nEOF\n\nsteps '\n\t:save-display blame-default.screen\n\n\t:4\n\t:enter\n\t:save-display blame-with-diff.screen\n\n\t:toggle file-filter\n\t:save-display blame-with-diff-no-file-filter.screen\n\n\t:view-close\n\t:parent\n\t:save-display blame-parent-of-74537d9.screen\n'\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\ntest_tig blame project/Build.scala\n\nassert_equals 'blame-default.screen' <<EOF\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400   1| import sbt._\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400   2| import Keys._\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400   3|\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100   4| import scala.scalajs.sbtp\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400   5| import ScalaJSPlugin._\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400   6| import ScalaJSKeys._\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400   7|\n4779f9b Jonas Fonseca      2013-11-26 20:13 -0500   8| object ScalaJSBenchmarks\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400   9|\n4779f9b Jonas Fonseca      2013-11-26 20:13 -0500  10|   val scalaJSScalaVersion\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400  11|\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400  12|   val projectSettings = D\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400  13|       organization := \"sc\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400  14|       version := \"0.1-SNA\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400  15|   )\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400  16|\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400  17|   val defaultSettings = p\n4779f9b Jonas Fonseca      2013-11-26 20:13 -0500  18|       scalaVersion := sca\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400  19|       scalacOptions ++= S\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400  20|           \"-deprecation\",\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400  21|           \"-unchecked\",\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400  22|           \"-feature\",\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400  23|           \"-encoding\", \"u\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400  24|       )\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400  25|   )\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400  26|\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400  27|   lazy val parent: Projec\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400  28|       id = \"parent\",\n[blame] 90286e0752016a6bca30dfa7ca236d1f99345eb8:project/Build.scala - line  43%\nEOF\n\nassert_equals 'blame-with-diff.screen' <<EOF\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400   1| import sbt._\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400   2| import Keys._\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400   3|\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100   4| import scala.scalajs.sbtp\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400   5| import ScalaJSPlugin._\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400   6| import ScalaJSKeys._\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400   7|\n4779f9b Jonas Fonseca      2013-11-26 20:13 -0500   8| object ScalaJSBenchmarks\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400   9|\n[blame] 74537d9b257954056d3caa19eb3837500aded883:project/Build.scala - line  14%\n\ndiff --git a/project/Build.scala b/project/Build.scala\nindex 560bca1..1713681 100644\n--- a/project/Build.scala\n+++ b/project/Build.scala\n@@ -1,7 +1,7 @@\n import sbt._\n import Keys._\n\n-import ch.epfl.lamp.sbtscalajs._\n+import scala.scalajs.sbtplugin._\n import ScalaJSPlugin._\n import ScalaJSKeys._\n\n\n\n\n\n[diff] Changes to 'project/Build.scala' - line 20 of 24                     100%\nEOF\n\nassert_equals 'blame-with-diff-no-file-filter.screen' <<EOF\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400   1| import sbt._\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400   2| import Keys._\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400   3|\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100   4| import scala.scalajs.sbtp\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400   5| import ScalaJSPlugin._\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400   6| import ScalaJSKeys._\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400   7|\n4779f9b Jonas Fonseca      2013-11-26 20:13 -0500   8| object ScalaJSBenchmarks\n90286e0 Jonas Fonseca      2013-10-14 13:15 -0400   9|\n[blame] 74537d9b257954056d3caa19eb3837500aded883:project/Build.scala - line  14%\n\ndiff --git a/project/Build.scala b/project/Build.scala\nindex 560bca1..1713681 100644\n--- a/project/Build.scala\n+++ b/project/Build.scala\n@@ -1,7 +1,7 @@\n import sbt._\n import Keys._\n\n-import ch.epfl.lamp.sbtscalajs._\n+import scala.scalajs.sbtplugin._\n import ScalaJSPlugin._\n import ScalaJSKeys._\n\ndiff --git a/project/build.sbt b/project/build.sbt\nindex 63f84d4..f5971c3 100644\n--- a/project/build.sbt\n+++ b/project/build.sbt\n[diff] Changes to 'project/Build.scala' - line 24 of 76                      42%\nEOF\n\nassert_equals 'blame-parent-of-74537d9.screen' <<EOF\n90286e0 Jonas Fonseca 2013-10-14 13:15 -0400   1| import sbt._\n90286e0 Jonas Fonseca 2013-10-14 13:15 -0400   2| import Keys._\n90286e0 Jonas Fonseca 2013-10-14 13:15 -0400   3|\n90286e0 Jonas Fonseca 2013-10-14 13:15 -0400   4| import ch.epfl.lamp.sbtscalajs\n90286e0 Jonas Fonseca 2013-10-14 13:15 -0400   5| import ScalaJSPlugin._\n90286e0 Jonas Fonseca 2013-10-14 13:15 -0400   6| import ScalaJSKeys._\n90286e0 Jonas Fonseca 2013-10-14 13:15 -0400   7|\n90286e0 Jonas Fonseca 2013-10-14 13:15 -0400   8| object ScalaJSBuild extends Bu\n90286e0 Jonas Fonseca 2013-10-14 13:15 -0400   9|\n90286e0 Jonas Fonseca 2013-10-14 13:15 -0400  10|   val scalajsScalaVersion = \"2\n90286e0 Jonas Fonseca 2013-10-14 13:15 -0400  11|\n90286e0 Jonas Fonseca 2013-10-14 13:15 -0400  12|   val projectSettings = Defaul\n90286e0 Jonas Fonseca 2013-10-14 13:15 -0400  13|       organization := \"scalajs\n90286e0 Jonas Fonseca 2013-10-14 13:15 -0400  14|       version := \"0.1-SNAPSHOT\n90286e0 Jonas Fonseca 2013-10-14 13:15 -0400  15|   )\n90286e0 Jonas Fonseca 2013-10-14 13:15 -0400  16|\n90286e0 Jonas Fonseca 2013-10-14 13:15 -0400  17|   val defaultSettings = projec\n90286e0 Jonas Fonseca 2013-10-14 13:15 -0400  18|       scalaVersion := scalajsS\n90286e0 Jonas Fonseca 2013-10-14 13:15 -0400  19|       scalacOptions ++= Seq(\n90286e0 Jonas Fonseca 2013-10-14 13:15 -0400  20|           \"-deprecation\",\n90286e0 Jonas Fonseca 2013-10-14 13:15 -0400  21|           \"-unchecked\",\n90286e0 Jonas Fonseca 2013-10-14 13:15 -0400  22|           \"-feature\",\n90286e0 Jonas Fonseca 2013-10-14 13:15 -0400  23|           \"-encoding\", \"utf8\"\n90286e0 Jonas Fonseca 2013-10-14 13:15 -0400  24|       )\n90286e0 Jonas Fonseca 2013-10-14 13:15 -0400  25|   )\n90286e0 Jonas Fonseca 2013-10-14 13:15 -0400  26|\n90286e0 Jonas Fonseca 2013-10-14 13:15 -0400  27|   lazy val benchmarkSettings =\n90286e0 Jonas Fonseca 2013-10-14 13:15 -0400  28|       unmanagedSources in (Com\n[blame] 90286e0752016a6bca30dfa7ca236d1f99345eb8:project/Build.scala - line  42%\nEOF\n"
  },
  {
    "path": "test/blame/initial-diff-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nsteps '\n\t:save-display initial-diff.screen\n\t:20 # Move to a deleted line.\n\t:view-blame\n\t:scroll-right\n\t:save-display blame-deleted-line.screen\n'\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\nLINES=23 test_tig show a1dcf1a\n\nassert_equals 'initial-diff.screen' <<EOF\ncommit a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff\nAuthor:     Jonas Fonseca <jonas.fonseca@gmail.com>\nAuthorDate: Sat Mar 1 15:59:02 2014 -0500\nCommit:     Jonas Fonseca <jonas.fonseca@gmail.com>\nCommitDate: Sat Mar 1 15:59:02 2014 -0500\n\n    Add type parameter for js.Dynamic\n---\n common/src/main/scala/org/scalajs/benchmark/Benchmark.scala | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala b/commo\nindex 65f914a..3aa4320 100644\n--- a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala\n+++ b/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala\n@@ -15,7 +15,7 @@ object Benchmark {\n   val benchmarks = js.Array[Benchmark]()\n   val benchmarkApps = js.Array[BenchmarkApp]()\n\n-  val global = js.Dynamic.global.asInstanceOf[js.Dictionary]\n+  val global = js.Dynamic.global.asInstanceOf[js.Dictionary[js.Any]]\n[diff] a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff - line 1 of 24               87%\nEOF\n\n# Make sure that we find the commit that introduce the deleted line.\nassert_equals 'blame-deleted-line.screen' <<EOF\n0400   1x /*                     __\n0400   2x **     ________ ___   / /  ___      __ ____  Scala.js Benchmarks\n0400   3x **    / __/ __// _ | / /  / _ | __ / // __/  (c) 2003-2013, LAMP/EPFL\n0400   4x **  __\\ \\/ /__/ __ |/ /__/ __ |/_// /_\\ \\    (c) 2013, Jonas Fonseca\n0400   5x ** /____/\\___/_/ |_/____/_/ | |__/ /____/\n0400   6x **                          |/____/\n0400   7x \\*\n0400   8x\n0400   9x package benchmarks\n0400  10x\n0400  11x import scala.compat.Platform\n0500  12x import scala.scalajs.js\n0500  13x\n0500  14x object Benchmark {\n0500  15x   val benchmarks = js.Array[js.Function0[Unit]]()\n0500  16x\n0500  17x   val global = js.Dynamic.global.asInstanceOf[js.Dictionary]\n0500  18x   global(\"ScalaJSBenchmarks\") = benchmarks\n0500  19x\n0500  20x   def add(benchmark: Benchmark) {\n0500  21x     benchmarks.push {\n[blame] 34d6868cfae60a7cc2494d282eaee27efa900059:common/Benchmark.scala - li 21%\nEOF\n"
  },
  {
    "path": "test/blame/navigation-parent-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport COLUMNS=200\n\n# The test checks that pressing ',' in blame view correctly navigates\n# to the corresponding line in the target commit.\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\ntigrc <<EOF\nset line-graphics = ascii\nEOF\n\nsteps '\n\t# Press , to go to the parent of the blamed commit for that line\n\t:parent\n\t:save-display recursive-blame.screen\n'\n\ntest_tig blame +36 project/Build.scala\n\n# This shows that after pressing ',' we should be positioned on line 40\n# (starting with \"clean in common\"), as shown in the status bar. We should *not*\n# stay on line 36.\nassert_equals 'recursive-blame.screen' <<EOF\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  22|           \"-feature\",\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  23|           \"-encoding\", \"utf8\"\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  24|       )\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  25|   )\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  26|\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  27|   lazy val benchmarkSettings = defaultSettings ++ Seq(\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  28|       unmanagedSources in (Compile, packageJS) +=\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  29|           baseDirectory.value / \"exports.js\"\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  30|   )\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  31|\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  32|   lazy val parent: Project = Project(\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  33|       id = \"parent\",\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  34|       base = file(\".\"),\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  35|       settings = projectSettings ++ Seq(\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  36|           name := \"Scala.js Benchmarks\",\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  37|           publishArtifact in Compile := false,\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  38|\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  39|           clean := clean.dependsOn(\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  40|              clean in common,\n4edd069 Jonas Fonseca 2013-10-17 20:34 -0400  41|              clean in richards,\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  42|              clean in tracer\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  43|           ).value\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  44|       )\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  45|   ).aggregate(\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  46|       common,\n4edd069 Jonas Fonseca 2013-10-17 20:34 -0400  47|       richards,\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  48|       tracer\n90286e0 Jonas Fonseca 2013-10-14 14:56 -0400  49|   )\n[blame] 90286e0752016a6bca30dfa7ca236d1f99345eb8:project/Build.scala - line 40 of 63                                                                                                                 77%\nEOF\n"
  },
  {
    "path": "test/blame/revargs-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nsteps '\n\t:save-display limit.screen\n\n\t:8\n\t:parent\n\t:save-display parent-of-4779f9b.screen\n'\n\ntigrc <<EOF\nset line-graphics = ascii\nEOF\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\ntest_tig blame 74537d9..HEAD project/Build.scala\n\n# note that we show boundary commits, so the lower bound 74537d9 appears\nassert_equals 'limit.screen' <<EOF\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100   1| import sbt._\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100   2| import Keys._\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100   3|\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100   4| import scala.scalajs.sbtp\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100   5| import ScalaJSPlugin._\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100   6| import ScalaJSKeys._\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100   7|\n4779f9b Jonas Fonseca      2013-11-26 20:13 -0500   8| object ScalaJSBenchmarks\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100   9|\n4779f9b Jonas Fonseca      2013-11-26 20:13 -0500  10|   val scalaJSScalaVersion\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  11|\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  12|   val projectSettings = D\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  13|       organization := \"sc\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  14|       version := \"0.1-SNA\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  15|   )\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  16|\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  17|   val defaultSettings = p\n4779f9b Jonas Fonseca      2013-11-26 20:13 -0500  18|       scalaVersion := sca\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  19|       scalacOptions ++= S\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  20|           \"-deprecation\",\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  21|           \"-unchecked\",\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  22|           \"-feature\",\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  23|           \"-encoding\", \"u\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  24|       )\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  25|   )\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  26|\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  27|   lazy val parent: Projec\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  28|       id = \"parent\",\n[blame] 74537d9b257954056d3caa19eb3837500aded883:project/Build.scala - line  43%\nEOF\n\n# confirm that we kept our lower bound\nassert_equals 'parent-of-4779f9b.screen' <<EOF\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100   1| import sbt._\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100   2| import Keys._\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100   3|\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100   4| import scala.scalajs.sbtp\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100   5| import ScalaJSPlugin._\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100   6| import ScalaJSKeys._\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100   7|\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100   8| object ScalaJSBuild exten\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100   9|\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  10|   val scalajsScalaVersion\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  11|\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  12|   val projectSettings = D\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  13|       organization := \"sc\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  14|       version := \"0.1-SNA\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  15|   )\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  16|\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  17|   val defaultSettings = p\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  18|       scalaVersion := sca\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  19|       scalacOptions ++= S\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  20|           \"-deprecation\",\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  21|           \"-unchecked\",\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  22|           \"-feature\",\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  23|           \"-encoding\", \"u\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  24|       )\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  25|   )\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  26|\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  27|   lazy val benchmarkSetti\n74537d9 Sébastien Doeraene 2013-10-29 18:46 +0100  28|       unmanagedSources in\n[blame] 74537d9b257954056d3caa19eb3837500aded883:project/Build.scala - line  40%\nEOF\n"
  },
  {
    "path": "test/blame/start-on-line-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport COLUMNS=200\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\nsteps '\n\t:save-display position.screen\n'\n\ntigrc <<EOF\nset line-graphics = ascii\nEOF\n\ntest_tig blame deltablue/src/main/scala/org/scalajs/benchmark/deltablue/DeltaBlue.scala +42\n\nassert_equals 'position.screen' <<EOF\nb103989 deltablue/DeltaBlue.scala                                                Jonas Fonseca 2013-10-20 00:23 -0700  28| // Dart by Google 2008-2010.\nb103989 deltablue/DeltaBlue.scala                                                Jonas Fonseca 2013-10-20 00:23 -0700  29| // Translated to Scala.js by Jonas Fonseca 2013\nb103989 deltablue/DeltaBlue.scala                                                Jonas Fonseca 2013-10-20 00:23 -0700  30|\n296fc90 deltablue/src/main/scala/org/scalajs/benchmark/deltablue/DeltaBlue.scala Jonas Fonseca 2014-01-16 22:51 -0500  31| package org.scalajs.benchmark.deltablue\nb103989 deltablue/DeltaBlue.scala                                                Jonas Fonseca 2013-10-20 00:23 -0700  32|\nb103989 deltablue/DeltaBlue.scala                                                Jonas Fonseca 2013-10-20 00:23 -0700  33| /**\nb103989 deltablue/DeltaBlue.scala                                                Jonas Fonseca 2013-10-20 00:23 -0700  34|  * A Scala implementation of the DeltaBlue constraint-solving\nb103989 deltablue/DeltaBlue.scala                                                Jonas Fonseca 2013-10-20 00:23 -0700  35|  * algorithm, as described in:\nb103989 deltablue/DeltaBlue.scala                                                Jonas Fonseca 2013-10-20 00:23 -0700  36|  *\nb103989 deltablue/DeltaBlue.scala                                                Jonas Fonseca 2013-10-20 00:23 -0700  37|  * \"The DeltaBlue Algorithm: An Incremental Constraint Hierarchy Solver\"\nb103989 deltablue/DeltaBlue.scala                                                Jonas Fonseca 2013-10-20 00:23 -0700  38|  *   Bjorn N. Freeman-Benson and John Maloney\nb103989 deltablue/DeltaBlue.scala                                                Jonas Fonseca 2013-10-20 00:23 -0700  39|  *   January 1990 Communications of the ACM,\nb103989 deltablue/DeltaBlue.scala                                                Jonas Fonseca 2013-10-20 00:23 -0700  40|  *   also available as University of Washington TR 89-08-06.\nb103989 deltablue/DeltaBlue.scala                                                Jonas Fonseca 2013-10-20 00:23 -0700  41|  *\nb103989 deltablue/DeltaBlue.scala                                                Jonas Fonseca 2013-10-20 00:23 -0700  42|  * Beware: this benchmark is written in a grotesque style where\nb103989 deltablue/DeltaBlue.scala                                                Jonas Fonseca 2013-10-20 00:23 -0700  43|  * the constraint model is built by side-effects from constructors.\nb103989 deltablue/DeltaBlue.scala                                                Jonas Fonseca 2013-10-20 00:23 -0700  44|  * I've kept it this way to avoid deviating too much from the original\nb103989 deltablue/DeltaBlue.scala                                                Jonas Fonseca 2013-10-20 00:23 -0700  45|  * implementation.\nb103989 deltablue/DeltaBlue.scala                                                Jonas Fonseca 2013-10-20 00:23 -0700  46|  */\nb103989 deltablue/DeltaBlue.scala                                                Jonas Fonseca 2013-10-20 00:23 -0700  47|\nb103989 deltablue/DeltaBlue.scala                                                Jonas Fonseca 2013-10-20 00:23 -0700  48| import scala.collection.mutable.ArrayBuffer\nee91287 deltablue/src/main/scala/org/scalajs/benchmark/deltablue/DeltaBlue.scala Jonas Fonseca 2014-03-01 17:26 -0500  49| import scala.scalajs.js.annotation.JSExport\nb103989 deltablue/DeltaBlue.scala                                                Jonas Fonseca 2013-10-20 00:23 -0700  50|\nee91287 deltablue/src/main/scala/org/scalajs/benchmark/deltablue/DeltaBlue.scala Jonas Fonseca 2014-03-01 17:26 -0500  51| @JSExport\n296fc90 deltablue/src/main/scala/org/scalajs/benchmark/deltablue/DeltaBlue.scala Jonas Fonseca 2014-01-16 22:51 -0500  52| object DeltaBlue extends org.scalajs.benchmark.Benchmark {\nb103989 deltablue/DeltaBlue.scala                                                Jonas Fonseca 2013-10-20 00:23 -0700  53|\nb103989 deltablue/DeltaBlue.scala                                                Jonas Fonseca 2013-10-20 00:23 -0700  54|   override def prefix = \"DeltaBlue\"\nb103989 deltablue/DeltaBlue.scala                                                Jonas Fonseca 2013-10-20 00:23 -0700  55|\n[blame] b103989d59edab3adc312ff5408fa3d344ea0201:deltablue/DeltaBlue.scala - line 42 of 711                                                                                                           7%\nEOF\n"
  },
  {
    "path": "test/blame/stash-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\ntigrc <<EOF\nset blame-view = text\nEOF\n\nsteps '\n\t:view-stash\n\t:view-diff\n\t:move-last-line\n\t:move-up\n\t:save-display diff.screen\n\t:view-blame\n\t:save-display blame1.screen\n\t:view-close\n\t:view-blame\n\t:save-display blame2.screen\n'\n\ngit_init\n\ntest_setup_work_dir()\n{\n\techo \"original line\" > file\n\tgit add file\n\texport GIT_AUTHOR_DATE=\"1486403695\"\n\texport GIT_COMMITTER_DATE=\"$GIT_AUTHOR_DATE\"\n\tgit commit -m \"Initial commit\"\n\techo \"changed line\" > file\n\tgit stash\n}\n\nLINES=3 test_tig\n\nassert_equals 'diff.screen' <<EOF\n-original line\n[diff] Changes to 'file' - line 9 of 10  90%\nEOF\n\nassert_equals 'blame1.screen' <<EOF\noriginal line\n[blame] 973a46fa50e2704ee2d550a931ad8edb1c50731c:file - line 1 of 1         100%\nEOF\n\nassert_equals 'blame2.screen' <<EOF\noriginal line\n[blame] 973a46fa50e2704ee2d550a931ad8edb1c50731c:file - line 1 of 1         100%\nEOF\n"
  },
  {
    "path": "test/blob/wrap-lines-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport COLUMNS=40\n\nsteps '\n\t:view-tree\n\t:/README.md\n\t:view-blob\n\t:save-display wrapped.screen\n'\n\ntigrc <<EOF\nset line-graphics = utf-8\nset wrap-lines = true\nEOF\n\ngit_init\n\ntest_setup_work_dir()\n{\n\tprintf 'Как пуст, и вял, и ничтожен почти всякий прожитой день! Как мало следов оставляет он за собою! Как бессмысленно глупо пробежали эти часы за часами!\\tИван Сергеевич Тургенев\\n' >README.md\n\tgit add README.md\n\tgit_commit -m \"tomorrow\"\n}\n\ntest_tig\n\nassert_equals 'wrapped.screen' <<EOF\nКак пуст, и вял, и ничтожен почти всякий\n прожитой день! Как мало следов оставляе\nт он за собою! Как бессмысленно глупо пр\nобежали эти часы за часами!       Иван С\nгеевич Тургенев\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n[blob] README.md - line 1 of 5      100%\nEOF\n"
  },
  {
    "path": "test/diff/diff-context-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nsteps '\n\t:save-display diff-default.screen\n\n\t:21\n\t]\n\t:save-display diff-u4.screen\n\n\t]\n\t:save-display diff-u5.screen\n\n\t:toggle diff-context +5\n\t:save-display diff-u10.screen\n\n\t[\n\t[\n\t:save-display diff-u8.screen\n\n\t:0\n\t:set diff-context = 3\n\t:view-main\n\t:view-diff\n\t:save-display diff-default-from-main.screen\n\n\t:21\n\t]\n\t:save-display diff-u4-from-main.screen\n\n\t]\n\t:save-display diff-u5-from-main.screen\n\n\t:toggle diff-context +5\n\t:save-display diff-u10-from-main.screen\n\n\t[\n\t[\n\t:save-display diff-u8-from-main.screen\n'\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\ntest_tig show master^\n\nassert_equals 'diff-default.screen' <<EOF\ncommit a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff\nAuthor:     Jonas Fonseca <jonas.fonseca@gmail.com>\nAuthorDate: Sat Mar 1 15:59:02 2014 -0500\nCommit:     Jonas Fonseca <jonas.fonseca@gmail.com>\nCommitDate: Sat Mar 1 15:59:02 2014 -0500\n\n    Add type parameter for js.Dynamic\n---\n common/src/main/scala/org/scalajs/benchmark/Benchmark.scala | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala b/commo\nindex 65f914a..3aa4320 100644\n--- a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala\n+++ b/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala\n@@ -15,7 +15,7 @@ object Benchmark {\n   val benchmarks = js.Array[Benchmark]()\n   val benchmarkApps = js.Array[BenchmarkApp]()\n\n-  val global = js.Dynamic.global.asInstanceOf[js.Dictionary]\n+  val global = js.Dynamic.global.asInstanceOf[js.Dictionary[js.Any]]\n   global(\"runScalaJSBenchmarks\") = runBenchmarks _\n   global(\"initScalaJSBenchmarkApps\") = initBenchmarkApps _\n\n\n\n\n\n[diff] a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff - line 1 of 24              100%\nEOF\n\nassert_equals 'diff-u4.screen' <<EOF\ncommit a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff\nAuthor:     Jonas Fonseca <jonas.fonseca@gmail.com>\nAuthorDate: Sat Mar 1 15:59:02 2014 -0500\nCommit:     Jonas Fonseca <jonas.fonseca@gmail.com>\nCommitDate: Sat Mar 1 15:59:02 2014 -0500\n\n    Add type parameter for js.Dynamic\n---\n common/src/main/scala/org/scalajs/benchmark/Benchmark.scala | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala b/commo\nindex 65f914a..3aa4320 100644\n--- a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala\n+++ b/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala\n@@ -14,9 +14,9 @@ import scala.scalajs.js\n object Benchmark {\n   val benchmarks = js.Array[Benchmark]()\n   val benchmarkApps = js.Array[BenchmarkApp]()\n\n-  val global = js.Dynamic.global.asInstanceOf[js.Dictionary]\n+  val global = js.Dynamic.global.asInstanceOf[js.Dictionary[js.Any]]\n   global(\"runScalaJSBenchmarks\") = runBenchmarks _\n   global(\"initScalaJSBenchmarkApps\") = initBenchmarkApps _\n\n   def add(benchmark: Benchmark) {\n\n\n[diff] Changes to 'common/src/main/scala/org/scalajs/benchmark/Benchmark.sc 100%\nEOF\n\nassert_equals 'diff-u5.screen' <<EOF\nAuthor:     Jonas Fonseca <jonas.fonseca@gmail.com>\nAuthorDate: Sat Mar 1 15:59:02 2014 -0500\nCommit:     Jonas Fonseca <jonas.fonseca@gmail.com>\nCommitDate: Sat Mar 1 15:59:02 2014 -0500\n\n    Add type parameter for js.Dynamic\n---\n common/src/main/scala/org/scalajs/benchmark/Benchmark.scala | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala b/commo\nindex 65f914a..3aa4320 100644\n--- a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala\n+++ b/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala\n@@ -13,11 +13,11 @@ import scala.scalajs.js\n\n object Benchmark {\n   val benchmarks = js.Array[Benchmark]()\n   val benchmarkApps = js.Array[BenchmarkApp]()\n\n-  val global = js.Dynamic.global.asInstanceOf[js.Dictionary]\n+  val global = js.Dynamic.global.asInstanceOf[js.Dictionary[js.Any]]\n   global(\"runScalaJSBenchmarks\") = runBenchmarks _\n   global(\"initScalaJSBenchmarkApps\") = initBenchmarkApps _\n\n   def add(benchmark: Benchmark) {\n     benchmarks.push(benchmark)\n\n[diff] Changes to 'common/src/main/scala/org/scalajs/benchmark/Benchmark.sc 100%\nEOF\n\nassert_equals 'diff-u10.screen' <<EOF\n    Add type parameter for js.Dynamic\n---\n common/src/main/scala/org/scalajs/benchmark/Benchmark.scala | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala b/commo\nindex 65f914a..3aa4320 100644\n--- a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala\n+++ b/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala\n@@ -8,21 +8,21 @@\n\n package org.scalajs.benchmark\n\n import scala.compat.Platform\n import scala.scalajs.js\n\n object Benchmark {\n   val benchmarks = js.Array[Benchmark]()\n   val benchmarkApps = js.Array[BenchmarkApp]()\n\n-  val global = js.Dynamic.global.asInstanceOf[js.Dictionary]\n+  val global = js.Dynamic.global.asInstanceOf[js.Dictionary[js.Any]]\n   global(\"runScalaJSBenchmarks\") = runBenchmarks _\n   global(\"initScalaJSBenchmarkApps\") = initBenchmarkApps _\n\n   def add(benchmark: Benchmark) {\n     benchmarks.push(benchmark)\n     if (benchmark.isInstanceOf[BenchmarkApp]) {\n[diff] Changes to 'common/src/main/scala/org/scalajs/benchmark/Benchmark.sca 89%\nEOF\n\nassert_equals 'diff-u8.screen' <<EOF\nCommitDate: Sat Mar 1 15:59:02 2014 -0500\n\n    Add type parameter for js.Dynamic\n---\n common/src/main/scala/org/scalajs/benchmark/Benchmark.scala | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala b/commo\nindex 65f914a..3aa4320 100644\n--- a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala\n+++ b/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala\n@@ -10,17 +10,17 @@ package org.scalajs.benchmark\n\n import scala.compat.Platform\n import scala.scalajs.js\n\n object Benchmark {\n   val benchmarks = js.Array[Benchmark]()\n   val benchmarkApps = js.Array[BenchmarkApp]()\n\n-  val global = js.Dynamic.global.asInstanceOf[js.Dictionary]\n+  val global = js.Dynamic.global.asInstanceOf[js.Dictionary[js.Any]]\n   global(\"runScalaJSBenchmarks\") = runBenchmarks _\n   global(\"initScalaJSBenchmarkApps\") = initBenchmarkApps _\n\n   def add(benchmark: Benchmark) {\n     benchmarks.push(benchmark)\n     if (benchmark.isInstanceOf[BenchmarkApp]) {\n[diff] Changes to 'common/src/main/scala/org/scalajs/benchmark/Benchmark.sca 94%\nEOF\n\nfor i in expected/*.screen; do\n\tdiff_file=\"$(basename -- \"$i\" | sed 's/[.]screen/-from-main.screen/')\"\n\tassert_equals \"$diff_file\" <<EOF\n$(cat < \"$i\")\nEOF\ndone\n"
  },
  {
    "path": "test/diff/diff-highlight-color-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\ntest_require diff-highlight\n\nexport PATH=\"$(dirname -- \"$diff_highlight_path\"):$PATH\"\n\ngitconfig <<EOF\n[color.diff-highlight]\n  oldnormal=red bold\n  oldhighlight=red bold 52\n  newnormal=green bold\n  newhighlight=green bold 22\nEOF\n\ntigrc <<EOF\nset diff-highlight = true\nEOF\n\nsteps '\n\t:save-display diff-highlight-with-custom-colors.screen\n'\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\ntest_tig show master^\n\nassert_equals 'diff-highlight-with-custom-colors.screen' <<EOF\ncommit a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff\nAuthor:     Jonas Fonseca <jonas.fonseca@gmail.com>\nAuthorDate: Sat Mar 1 15:59:02 2014 -0500\nCommit:     Jonas Fonseca <jonas.fonseca@gmail.com>\nCommitDate: Sat Mar 1 15:59:02 2014 -0500\n\n    Add type parameter for js.Dynamic\n---\n common/src/main/scala/org/scalajs/benchmark/Benchmark.scala | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala b/commo\nindex 65f914a..3aa4320 100644\n--- a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala\n+++ b/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala\n@@ -15,7 +15,7 @@ object Benchmark {\n   val benchmarks = js.Array[Benchmark]()\n   val benchmarkApps = js.Array[BenchmarkApp]()\n\n-  val global = js.Dynamic.global.asInstanceOf[js.Dictionary]\n+  val global = js.Dynamic.global.asInstanceOf[js.Dictionary[js.Any]]\n   global(\"runScalaJSBenchmarks\") = runBenchmarks _\n   global(\"initScalaJSBenchmarkApps\") = initBenchmarkApps _\n\n\n\n\n\n[diff] a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff - line 1 of 24              100%\nEOF\n"
  },
  {
    "path": "test/diff/diff-highlight-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\nfile bin/diff-highlight <<EOF\n#!/bin/sh\nexec sed 's/Add type parameter for js.Dynamic/Changed by diff-highlight/'\nEOF\n\nchmod +x bin/diff-highlight\n\ntest_case diff-highlight-true \\\n\t--tigrc='set diff-highlight = true' \\\n\t--args='show master^' \\\n\t--subshell='export PATH=\"./bin:$PATH\"' \\\n\t<<EOF\ncommit a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff\nAuthor:     Jonas Fonseca <jonas.fonseca@gmail.com>\nAuthorDate: Sat Mar 1 15:59:02 2014 -0500\nCommit:     Jonas Fonseca <jonas.fonseca@gmail.com>\nCommitDate: Sat Mar 1 15:59:02 2014 -0500\n\n    Changed by diff-highlight\n---\n common/src/main/scala/org/scalajs/benchmark/Benchmark.scala | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala b/commo\nindex 65f914a..3aa4320 100644\n--- a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala\n+++ b/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala\n@@ -15,7 +15,7 @@ object Benchmark {\n   val benchmarks = js.Array[Benchmark]()\n   val benchmarkApps = js.Array[BenchmarkApp]()\n\n-  val global = js.Dynamic.global.asInstanceOf[js.Dictionary]\n+  val global = js.Dynamic.global.asInstanceOf[js.Dictionary[js.Any]]\n   global(\"runScalaJSBenchmarks\") = runBenchmarks _\n   global(\"initScalaJSBenchmarkApps\") = initBenchmarkApps _\n\n\n\n\n\n[diff] a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff - line 1 of 24              100%\nEOF\n\ntest_case diff-highlight-custom \\\n\t--tigrc='set diff-highlight = wc' \\\n\t--args='show master^' \\\n\t<<EOF\n24      85    1067\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[diff] HEAD - line 1 of 1                                                   100%\nEOF\n\ntest_case diff-highlight-misconfigured \\\n\t--tigrc='set diff-highlight = program-that-does-not-exist' \\\n\t--args='show master^' \\\n\t<<EOF\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[diff]                                                                        0%\nEOF\n\nrun_test_cases\n"
  },
  {
    "path": "test/diff/diff-stat-split-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport COLUMNS=181\n\nsteps '\n\t:enter\n\t:save-display diff-stat.screen\n'\n\ntigrc <<EOF\nset line-graphics = utf-8\nset main-view-date-use-author = yes\nEOF\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\ntest_tig\n\nassert_equals 'diff-stat.screen' <<EOF\n2014-03-01 17:26 -0500 Jonas Fonseca      ∙ [master] WIP: Upgrade to 0.4-SNAPSHOT and DCE  |commit ee912870202200a0b9cf4fd86ba57243212d341e\n2014-03-01 15:59 -0500 Jonas Fonseca      ∙ Add type parameter for js.Dynamic              |Refs: [master]\n2014-01-16 22:51 -0500 Jonas Fonseca      ∙ Move classes under org.scalajs.benchmark packag|Author:     Jonas Fonseca <jonas.fonseca@gmail.com>\n2014-01-16 17:43 -0500 Jonas Fonseca      ∙ Bump Scala.js version to 0.3-SNAPSHOT          |AuthorDate: Sat Mar 1 17:26:01 2014 -0500\n2014-01-16 17:39 -0500 Jonas Fonseca      ∙ Integrate app code into the benchmark infrastru|Commit:     Jonas Fonseca <jonas.fonseca@gmail.com>\n2014-01-16 07:47 -0800 Jonas Fonseca      ●─╮ Merge pull request #4 from phaller/patch-1   |CommitDate: Sat Mar 1 17:26:01 2014 -0500\n2014-01-16 15:32 +0100 Philipp Haller     │ ∙ Fix link to Dart benchmark harness           |\n2013-12-17 00:02 +0100 Jonas Fonseca      ∙─╯ Update links to reflect project name change  |    WIP: Upgrade to 0.4-SNAPSHOT and DCE\n2013-12-03 23:35 -0500 Jonas Fonseca      ∙ Use Scala.js 0.2-SNAPSHOT                      |---\n2013-11-26 23:39 -0500 Jonas Fonseca      ∙ Extract the benchmark list variable name; fix p| common/benchmark-runner.sh                                           |  5 +++--\n2013-11-26 23:31 -0500 Jonas Fonseca      ∙ Solve the easiest sudoku grid                  | common/src/main/scala/org/scalajs/benchmark/Benchmark.scala          | 11 +++++------\n2013-11-26 23:22 -0500 Jonas Fonseca      ∙ Disable phantomjs by default                   | common/src/main/scala/org/scalajs/benchmark/BenchmarkApp.scala       |  2 +-\n2013-11-26 22:55 -0500 Jonas Fonseca      ∙ Exclude Sudoku when running all benchmarks     | common/start-benchmark.js                                            |  9 +++++++--\n2013-11-26 22:52 -0500 Jonas Fonseca      ∙ Fix reference setup to work for node           | deltablue/exports.js                                                 | 13 -------------\n2013-11-26 22:03 -0500 Jonas Fonseca      ∙ Move benchmark registration to Scala           | .../src/main/scala/org/scalajs/benchmark/deltablue/DeltaBlue.scala   |  7 +++++++\n2013-11-26 20:13 -0500 Jonas Fonseca      ∙ Rename projects to be grouped together in Eclip| project/Build.scala                                                  | 13 ++++---------\n2013-11-19 21:56 -0500 Jonas Fonseca      ∙ sudoku: use iterator instead of Try()          | project/build.sbt                                                    |  5 ++++-\n2013-11-11 21:56 -0500 Jonas Fonseca      ∙ Add verification of sudoku solutions           | richards/exports.js                                                  | 13 -------------\n2013-11-11 21:50 -0500 Jonas Fonseca      ∙ Use stream to halt when first sudoku solution h| .../src/main/scala/org/scalajs/benchmark/richards/Richards.scala     |  3 +++\n2013-11-11 01:11 -0500 Jonas Fonseca      ∙ Add initial version of sudoku benchmark        | run.sh                                                               |  2 +-\n2013-11-05 23:20 -0500 Jonas Fonseca      ∙ Reformat code using Scala IDE                  | sudoku/exports.js                                                    | 13 -------------\n2013-11-05 20:41 -0500 Jonas Fonseca      ∙ Update exports.js files to use new Scala.js cla| sudoku/src/main/scala/org/scalajs/benchmark/sudoku/Sudoku.scala      |  2 ++\n2013-11-03 23:48 -0500 Jonas Fonseca      ∙ Add support for PhantomJS                      | tracer/exports.js                                                    | 13 -------------\n2013-11-03 23:11 -0500 Jonas Fonseca      ∙ Make the engine stubs file optional            | tracer/index-dev.html                                                |  2 +-\n2013-11-03 22:44 -0500 Jonas Fonseca      ∙ Refactor the benchmark shell code              | tracer/index.html                                                    |  2 +-\n2013-10-29 17:29 -0700 Jonas Fonseca      ●─╮ Merge pull request #2 from sjrd/patch-2      | tracer/src/main/scala/org/scalajs/benchmark/tracer/Tracer.scala      |  3 +++\n2013-10-29 18:48 +0100 Sébastien Doeraene │ ∙ Remove workaround to support Node.js.        | 17 files changed, 42 insertions(+), 76 deletions(-)\n2013-10-29 18:46 +0100 Sébastien Doeraene │ ∙ Update for new groupId and package structure |\n[main] ee912870202200a0b9cf4fd86ba57243212d341e - commit 1 of 48                        58%|[diff] ee912870202200a0b9cf4fd86ba57243212d341e - line 1 of 367                        7%\nEOF\n"
  },
  {
    "path": "test/diff/diff-stat-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport COLUMNS=181\n\nsteps '\n\t:save-view view.data\n'\n\ntigrc <<EOF\nset line-graphics = utf-8\nEOF\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\ntest_tig show <<EOF\ncommit 1b4c64b595aeb4de1d317d669faacd3c1d82f0b0\nAuthor: A. U. Thor <author@example.com>\nDate:   Sun Jul 2 15:01:24 2017 +0200\n\n    Diff stat examples\n---\n added                          |   40 +++++++++++\n remove                         |  124 --------------------------\n updated                        |   14 +----\n rename.from => rename.to       |    0\n dir/{rename.from => rename.to} |    0\n .../truncated file name        |   11 ++---\n binary add                     |  Bin 0 -> 1234 bytes\n binary update                  |  Bin 1234 -> 2345 bytes\n binary copy                    |  Bin\n binary del                     |  Bin 16787 -> 0 bytes\n unmerged                       | Unmerged\n 42 file changed, 5 insertions(+), 2 deletions(-)\n\ndiff --git a/src/file.c b/src/file.c\n...\nEOF\n\nassert_equals 'view.data' <<EOF\nView: diff\nRef: 1b4c64b595aeb4de1d317d669faacd3c1d82f0b0\nDimensions: height=28 width=181\nPosition: offset=0 column=0 lineno=0\nline[  0] type=commit selected=1\nline[  0] cells=1 text=[commit 1b4c64b595aeb4de1d317d669faacd3c1d82f0b0]\nline[  1] type= selected=0\nline[  1] cells=1 text=[Author: A. U. Thor <author@example.com>]\nline[  2] type= selected=0\nline[  2] cells=1 text=[Date:   Sun Jul 2 15:01:24 2017 +0200]\nline[  3] type=default selected=0\nline[  3] cells=1 text=[]\nline[  4] type=default selected=0\nline[  4] cells=1 text=[    Diff stat examples]\nline[  5] type=diff-start selected=0\nline[  5] cells=1 text=[---]\nline[  6] type=diff-stat selected=0\nline[  6] cells=3 text=[ added                          ][|   40 ][+++++++++++]\nline[  7] type=diff-stat selected=0\nline[  7] cells=3 text=[ remove                         ][|  124 ][--------------------------]\nline[  8] type=diff-stat selected=0\nline[  8] cells=4 text=[ updated                        ][|   14 ][+][----]\nline[  9] type=diff-stat selected=0\nline[  9] cells=2 text=[ rename.from => rename.to       ][|    0]\nline[ 10] type=diff-stat selected=0\nline[ 10] cells=2 text=[ dir/{rename.from => rename.to} ][|    0]\nline[ 11] type=diff-stat selected=0\nline[ 11] cells=4 text=[ .../truncated file name        ][|   11 ][++][---]\nline[ 12] type=diff-stat selected=0\nline[ 12] cells=7 text=[ binary add                     ][|  ][Bin][ 0 ][->][ 1234 ][bytes]\nline[ 13] type=diff-stat selected=0\nline[ 13] cells=7 text=[ binary update                  ][|  ][Bin][ 1234 ][->][ 2345 ][bytes]\nline[ 14] type=diff-stat selected=0\nline[ 14] cells=3 text=[ binary copy                    ][|  ][Bin]\nline[ 15] type=diff-stat selected=0\nline[ 15] cells=7 text=[ binary del                     ][|  ][Bin][ 16787 ][->][ 0 ][bytes]\nline[ 16] type=diff-stat selected=0\nline[ 16] cells=2 text=[ unmerged                       ][| Unmerged]\nline[ 17] type=default selected=0\nline[ 17] cells=1 text=[ 42 file changed, 5 insertions(+), 2 deletions(-)]\nline[ 18] type=default selected=0\nline[ 18] cells=1 text=[]\nline[ 19] type=diff-header selected=0\nline[ 19] cells=1 text=[diff --git a/src/file.c b/src/file.c]\nline[ 20] type=default selected=0\nline[ 20] cells=1 text=[...]\nEOF\n"
  },
  {
    "path": "test/diff/diff-stdin-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nsteps '\n\t:save-display diff.screen\n'\n\ngit_init\n\ntest_tig show <<EOF\ncommit 1b4c64b595aeb4de1d317d669faacd3c1d82f0b0\nAuthor: Sven Wegener <sven.wegener@example.net>\nDate:   Sun Jul 2 15:01:24 2017 +0200\n\n    graph: Optimize initial and merge calculation\n    \n    The initial and merge flags do not depend on any column-specific\n    information, so calculate them only once.\n    \n    Signed-off-by: Sven Wegener <sven.wegener@example.net>\n---\n src/graph-v2.c | 7 +++++--\n 1 file changed, 5 insertions(+), 2 deletions(-)\n\ndiff --git a/src/graph-v2.c b/src/graph-v2.c\nindex 4cf3d9e..ced6838 100644\n--- a/src/graph-v2.c\n+++ b/src/graph-v2.c\n@@ -683,6 +683,9 @@ graph_generate_symbols(struct graph_v2 *graph, struct graph_canvas *canvas)\n \tstruct graph_row *row = &graph->row;\n \tstruct graph_row *next_row = &graph->next_row;\n \tstruct graph_row *parents = &graph->parents;\n+\tint commits = commits_in_row(parents);\n+\tint initial = commits < 1;\n+\tint merge = commits > 1;\n \tint pos;\n \n \tfor (pos = 0; pos < row->size; pos++) {\n@@ -692,8 +695,8 @@ graph_generate_symbols(struct graph_v2 *graph, struct graph_canvas *canvas)\n \n \t\tsymbol->commit            = (pos == graph->position);\n \t\tsymbol->boundary          = (pos == graph->position && next_row->columns[pos].symbol.boundary);\n-\t\tsymbol->initial           = (commits_in_row(parents) < 1);\n-\t\tsymbol->merge             = (commits_in_row(parents) > 1);\n+\t\tsymbol->initial           = initial;\n+\t\tsymbol->merge             = merge;\n \n \t\tsymbol->continued_down    = continued_down(row, next_row, pos);\n \t\tsymbol->continued_up      = continued_down(prev_row, row, pos);\nEOF\n\nassert_equals 'diff.screen' <<EOF\ncommit 1b4c64b595aeb4de1d317d669faacd3c1d82f0b0\nAuthor: Sven Wegener <sven.wegener@example.net>\nDate:   Sun Jul 2 15:01:24 2017 +0200\n \n    graph: Optimize initial and merge calculation\n \n    The initial and merge flags do not depend on any column-specific\n    information, so calculate them only once.\n \n    Signed-off-by: Sven Wegener <sven.wegener@example.net>\n---\n src/graph-v2.c | 7 +++++--\n 1 file changed, 5 insertions(+), 2 deletions(-)\n \ndiff --git a/src/graph-v2.c b/src/graph-v2.c\nindex 4cf3d9e..ced6838 100644\n--- a/src/graph-v2.c\n+++ b/src/graph-v2.c\n@@ -683,6 +683,9 @@ graph_generate_symbols(struct graph_v2 *graph, struct graph_\n        struct graph_row *row = &graph->row;\n        struct graph_row *next_row = &graph->next_row;\n        struct graph_row *parents = &graph->parents;\n+       int commits = commits_in_row(parents);\n+       int initial = commits < 1;\n+       int merge = commits > 1;\n        int pos;\n \n        for (pos = 0; pos < row->size; pos++) {\n[diff] 1b4c64b595aeb4de1d317d669faacd3c1d82f0b0 - line 1 of 39               71%\nEOF\n"
  },
  {
    "path": "test/diff/diff-wdiff-context-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nsteps '\n\t:save-display diff-default.screen\n\n\t:21\n\t]\n\t:save-display diff-u4.screen\n\n\t]\n\t:save-display diff-u5.screen\n\n\t:toggle diff-context +5\n\t:save-display diff-u10.screen\n\n\t[\n\t[\n\t:save-display diff-u8.screen\n\n\t:0\n\t:set diff-context = 3\n\t:view-main\n\t:view-diff\n\t:save-display diff-default-from-main.screen\n\n\t:21\n\t]\n\t:save-display diff-u4-from-main.screen\n\n\t]\n\t:save-display diff-u5-from-main.screen\n\n\t:toggle diff-context +5\n\t:save-display diff-u10-from-main.screen\n\n\t[\n\t[\n\t:save-display diff-u8-from-main.screen\n'\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\ntest_tig show master^ --word-diff\n\nassert_equals 'diff-default.screen' <<EOF\ncommit a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff\nAuthor:     Jonas Fonseca <jonas.fonseca@gmail.com>\nAuthorDate: Sat Mar 1 15:59:02 2014 -0500\nCommit:     Jonas Fonseca <jonas.fonseca@gmail.com>\nCommitDate: Sat Mar 1 15:59:02 2014 -0500\n\n    Add type parameter for js.Dynamic\n---\n common/src/main/scala/org/scalajs/benchmark/Benchmark.scala | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala b/commo\nindex 65f914a..3aa4320 100644\n--- a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala\n+++ b/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala\n@@ -15,7 +15,7 @@ object Benchmark {\n  val benchmarks = js.Array[Benchmark]()\n  val benchmarkApps = js.Array[BenchmarkApp]()\n\n  val global = [-js.Dynamic.global.asInstanceOf[js.Dictionary]-]{+js.Dynamic.glo\n  global(\"runScalaJSBenchmarks\") = runBenchmarks _\n  global(\"initScalaJSBenchmarkApps\") = initBenchmarkApps _\n\n\n\n\n\n\n[diff] a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff - line 1 of 23              100%\nEOF\n\nassert_equals 'diff-u4.screen' <<EOF\nAuthor:     Jonas Fonseca <jonas.fonseca@gmail.com>\nAuthorDate: Sat Mar 1 15:59:02 2014 -0500\nCommit:     Jonas Fonseca <jonas.fonseca@gmail.com>\nCommitDate: Sat Mar 1 15:59:02 2014 -0500\n\n    Add type parameter for js.Dynamic\n---\n common/src/main/scala/org/scalajs/benchmark/Benchmark.scala | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala b/commo\nindex 65f914a..3aa4320 100644\n--- a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala\n+++ b/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala\n@@ -14,9 +14,9 @@ import scala.scalajs.js\nobject Benchmark {\n   val benchmarks = js.Array[Benchmark]()\n   val benchmarkApps = js.Array[BenchmarkApp]()\n\n   val global = [-js.Dynamic.global.asInstanceOf[js.Dictionary]-]{+js.Dynamic.glo\n   global(\"runScalaJSBenchmarks\") = runBenchmarks _\n   global(\"initScalaJSBenchmarkApps\") = initBenchmarkApps _\n\n   def add(benchmark: Benchmark) {\n\n\n\n\n[diff] Changes to 'common/src/main/scala/org/scalajs/benchmark/Benchmark.sc 100%\nEOF\n\nassert_equals 'diff-u5.screen' <<EOF\nAuthorDate: Sat Mar 1 15:59:02 2014 -0500\nCommit:     Jonas Fonseca <jonas.fonseca@gmail.com>\nCommitDate: Sat Mar 1 15:59:02 2014 -0500\n\n    Add type parameter for js.Dynamic\n---\n common/src/main/scala/org/scalajs/benchmark/Benchmark.scala | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala b/commo\nindex 65f914a..3aa4320 100644\n--- a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala\n+++ b/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala\n@@ -13,11 +13,11 @@ import scala.scalajs.js\n\nobject Benchmark {\n  val benchmarks = js.Array[Benchmark]()\n  val benchmarkApps = js.Array[BenchmarkApp]()\n\n  val global = [-js.Dynamic.global.asInstanceOf[js.Dictionary]-]{+js.Dynamic.glo\n  global(\"runScalaJSBenchmarks\") = runBenchmarks _\n  global(\"initScalaJSBenchmarkApps\") = initBenchmarkApps _\n\n  def add(benchmark: Benchmark) {\n    benchmarks.push(benchmark)\n\n\n\n[diff] Changes to 'common/src/main/scala/org/scalajs/benchmark/Benchmark.sc 100%\nEOF\n\nassert_equals 'diff-u10.screen' <<EOF\n---\n common/src/main/scala/org/scalajs/benchmark/Benchmark.scala | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala b/commo\nindex 65f914a..3aa4320 100644\n--- a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala\n+++ b/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala\n@@ -8,21 +8,21 @@\n\npackage org.scalajs.benchmark\n\nimport scala.compat.Platform\nimport scala.scalajs.js\n\nobject Benchmark {\n  val benchmarks = js.Array[Benchmark]()\n  val benchmarkApps = js.Array[BenchmarkApp]()\n\n  val global = [-js.Dynamic.global.asInstanceOf[js.Dictionary]-]{+js.Dynamic.glo\n  global(\"runScalaJSBenchmarks\") = runBenchmarks _\n  global(\"initScalaJSBenchmarkApps\") = initBenchmarkApps _\n\n  def add(benchmark: Benchmark) {\n    benchmarks.push(benchmark)\n    if (benchmark.isInstanceOf[BenchmarkApp]) {\n      benchmarkApps.push(benchmark.asInstanceOf[BenchmarkApp])\n    }\n[diff] Changes to 'common/src/main/scala/org/scalajs/benchmark/Benchmark.sca 94%\nEOF\n\nassert_equals 'diff-u8.screen' <<EOF\n\n    Add type parameter for js.Dynamic\n---\n common/src/main/scala/org/scalajs/benchmark/Benchmark.scala | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala b/commo\nindex 65f914a..3aa4320 100644\n--- a/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala\n+++ b/common/src/main/scala/org/scalajs/benchmark/Benchmark.scala\n@@ -10,17 +10,17 @@ package org.scalajs.benchmark\n\nimport scala.compat.Platform\nimport scala.scalajs.js\n\nobject Benchmark {\n  val benchmarks = js.Array[Benchmark]()\n  val benchmarkApps = js.Array[BenchmarkApp]()\n\n  val global = [-js.Dynamic.global.asInstanceOf[js.Dictionary]-]{+js.Dynamic.glo\n  global(\"runScalaJSBenchmarks\") = runBenchmarks _\n  global(\"initScalaJSBenchmarkApps\") = initBenchmarkApps _\n\n  def add(benchmark: Benchmark) {\n    benchmarks.push(benchmark)\n    if (benchmark.isInstanceOf[BenchmarkApp]) {\n      benchmarkApps.push(benchmark.asInstanceOf[BenchmarkApp])\n    }\n[diff] Changes to 'common/src/main/scala/org/scalajs/benchmark/Benchmark.sc 100%\nEOF\n\nfor i in expected/*.screen; do\n\tdiff_file=\"$(basename -- \"$i\" | sed 's/[.]screen/-from-main.screen/')\"\n\tassert_equals \"$diff_file\" <<EOF\n$(cat < \"$i\")\nEOF\ndone\n"
  },
  {
    "path": "test/diff/editor-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport GIT_EDITOR=\\$EDITOR\n\ntigrc <<EOF\nset show-untracked = no\nset line-graphics = ascii\nset diff-view-line-number = yes\nset stage-view-line-number = yes\nEOF\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\nscript='\n\t:210\n\t:scroll-line-down\n\t:edit\n\n\t:224\n\t:exec !vim +%(lineno) %(file)\n'\n\ntest_case default \\\n --args='show ee912870202200a0b9cf4fd86ba57243212d341e' \\\n --script=\"$script\" <<EOF\n   | -  )\n   | -\n   |    lazy val parent: Project = Project(\n200|        id = \"parent\",\n   |        base = file(\".\"),\n   | @@ -53,10 +48,10 @@ object ScalaJSBenchmarks extends Build {\n   |    )\n   |\n205|    lazy val common = project(\"Common\", defaultSettings)\n   | -  lazy val deltablue = project(\"DeltaBlue\", benchmarkSettings).dependsOn(c\n   | -  lazy val richards = project(\"Richards\", benchmarkSettings).dependsOn(com\n   | -  lazy val sudoku = project(\"Sudoku\", benchmarkSettings).dependsOn(common)\n   | -  lazy val tracer = project(\"Tracer\", benchmarkSettings).dependsOn(common)\n210| +  lazy val deltablue = project(\"DeltaBlue\", defaultSettings).dependsOn(com\n   | +  lazy val richards = project(\"Richards\", defaultSettings).dependsOn(commo\n   | +  lazy val sudoku = project(\"Sudoku\", defaultSettings).dependsOn(common)\n   | +  lazy val tracer = project(\"Tracer\", defaultSettings).dependsOn(common)\n   |\n215|    def project(id: String, settings: Seq[sbt.Def.Setting[_]]) = Project(\n   |        id = id.toLowerCase,\n   | diff --git a/project/build.sbt b/project/build.sbt\n   | index 87c2e66..122abd0 100644\n   | --- a/project/build.sbt\n220| +++ b/project/build.sbt\n   | @@ -1 +1,4 @@\n   | -addSbtPlugin(\"org.scala-lang.modules.scalajs\" % \"scalajs-sbt-plugin\" % \"0.\n   | +resolvers += Resolver.url(\"scala-js-snapshots\",\n   | +    url(\"http://repo.scala-js.org/repo/snapshots/\"))(Resolver.ivyStylePatt\n[diff] Changes to 'project/build.sbt' - line 224 of 367                    61%\nEOF\n\ntest_case sub-directory \\\n --args='show ee912870202200a0b9cf4fd86ba57243212d341e' \\\n --before='mkdir -p some/subdir && cd some/subdir' \\\n --script=\"$script\" <<EOF\n   | -  )\n   | -\n   |    lazy val parent: Project = Project(\n200|        id = \"parent\",\n   |        base = file(\".\"),\n   | @@ -53,10 +48,10 @@ object ScalaJSBenchmarks extends Build {\n   |    )\n   |\n205|    lazy val common = project(\"Common\", defaultSettings)\n   | -  lazy val deltablue = project(\"DeltaBlue\", benchmarkSettings).dependsOn(c\n   | -  lazy val richards = project(\"Richards\", benchmarkSettings).dependsOn(com\n   | -  lazy val sudoku = project(\"Sudoku\", benchmarkSettings).dependsOn(common)\n   | -  lazy val tracer = project(\"Tracer\", benchmarkSettings).dependsOn(common)\n210| +  lazy val deltablue = project(\"DeltaBlue\", defaultSettings).dependsOn(com\n   | +  lazy val richards = project(\"Richards\", defaultSettings).dependsOn(commo\n   | +  lazy val sudoku = project(\"Sudoku\", defaultSettings).dependsOn(common)\n   | +  lazy val tracer = project(\"Tracer\", defaultSettings).dependsOn(common)\n   |\n215|    def project(id: String, settings: Seq[sbt.Def.Setting[_]]) = Project(\n   |        id = id.toLowerCase,\n   | diff --git a/project/build.sbt b/project/build.sbt\n   | index 87c2e66..122abd0 100644\n   | --- a/project/build.sbt\n220| +++ b/project/build.sbt\n   | @@ -1 +1,4 @@\n   | -addSbtPlugin(\"org.scala-lang.modules.scalajs\" % \"scalajs-sbt-plugin\" % \"0.\n   | +resolvers += Resolver.url(\"scala-js-snapshots\",\n   | +    url(\"http://repo.scala-js.org/repo/snapshots/\"))(Resolver.ivyStylePatt\n[diff] Changes to 'project/build.sbt' - line 224 of 367                    61%\nEOF\n\ntest_case sub-directory-diffstat \\\n --args='show ee912870202200a0b9cf4fd86ba57243212d341e' \\\n --before='mkdir -p some/subdir && cd some/subdir' \\\n --script='\n\t:10\n\t:edit\n\t:26\n\t:exec !vim %(file)\n\t<C-p>\n' <<EOF\n  1| commit ee912870202200a0b9cf4fd86ba57243212d341e\n   | Refs: [master]\n   | Author:     Jonas Fonseca <jonas.fonseca@gmail.com>\n   | AuthorDate: Sat Mar 1 17:26:01 2014 -0500\n  5| Commit:     Jonas Fonseca <jonas.fonseca@gmail.com>\n   | CommitDate: Sat Mar 1 17:26:01 2014 -0500\n   |\n   |     WIP: Upgrade to 0.4-SNAPSHOT and DCE\n   | ---\n 10|  common/benchmark-runner.sh                                  |  5 +++--\n   |  common/src/main/scala/org/scalajs/benchmark/Benchmark.scala | 11 +++++----\n   |  .../src/main/scala/org/scalajs/benchmark/BenchmarkApp.scala |  2 +-\n   |  common/start-benchmark.js                                   |  9 +++++++--\n   |  deltablue/exports.js                                        | 13 ---------\n 15|  .../scala/org/scalajs/benchmark/deltablue/DeltaBlue.scala   |  7 +++++++\n   |  project/Build.scala                                         | 13 ++++-----\n   |  project/build.sbt                                           |  5 ++++-\n   |  richards/exports.js                                         | 13 ---------\n   |  .../scala/org/scalajs/benchmark/richards/Richards.scala     |  3 +++\n 20|  run.sh                                                      |  2 +-\n   |  sudoku/exports.js                                           | 13 ---------\n   |  .../main/scala/org/scalajs/benchmark/sudoku/Sudoku.scala    |  2 ++\n   |  tracer/exports.js                                           | 13 ---------\n   |  tracer/index-dev.html                                       |  2 +-\n 25|  tracer/index.html                                           |  2 +-\n   |  .../main/scala/org/scalajs/benchmark/tracer/Tracer.scala    |  3 +++\n   |  17 files changed, 42 insertions(+), 76 deletions(-)\n   |\n[diff] Press '<Enter>' to jump to file diff - line 25 of 367                  7%\nEOF\n\n# This settings doesn't seem to apply to `git-show`\ntest_case mnemonic \\\n --args='show ee912870202200a0b9cf4fd86ba57243212d341e' \\\n --before='git config diff.mnemonicPrefix true' \\\n --after='git config diff.mnemonicPrefix false' \\\n --script=\"$script\" << EOF\n   | -  )\n   | -\n   |    lazy val parent: Project = Project(\n200|        id = \"parent\",\n   |        base = file(\".\"),\n   | @@ -53,10 +48,10 @@ object ScalaJSBenchmarks extends Build {\n   |    )\n   |\n205|    lazy val common = project(\"Common\", defaultSettings)\n   | -  lazy val deltablue = project(\"DeltaBlue\", benchmarkSettings).dependsOn(c\n   | -  lazy val richards = project(\"Richards\", benchmarkSettings).dependsOn(com\n   | -  lazy val sudoku = project(\"Sudoku\", benchmarkSettings).dependsOn(common)\n   | -  lazy val tracer = project(\"Tracer\", benchmarkSettings).dependsOn(common)\n210| +  lazy val deltablue = project(\"DeltaBlue\", defaultSettings).dependsOn(com\n   | +  lazy val richards = project(\"Richards\", defaultSettings).dependsOn(commo\n   | +  lazy val sudoku = project(\"Sudoku\", defaultSettings).dependsOn(common)\n   | +  lazy val tracer = project(\"Tracer\", defaultSettings).dependsOn(common)\n   |\n215|    def project(id: String, settings: Seq[sbt.Def.Setting[_]]) = Project(\n   |        id = id.toLowerCase,\n   | diff --git a/project/build.sbt b/project/build.sbt\n   | index 87c2e66..122abd0 100644\n   | --- a/project/build.sbt\n220| +++ b/project/build.sbt\n   | @@ -1 +1,4 @@\n   | -addSbtPlugin(\"org.scala-lang.modules.scalajs\" % \"scalajs-sbt-plugin\" % \"0.\n   | +resolvers += Resolver.url(\"scala-js-snapshots\",\n   | +    url(\"http://repo.scala-js.org/repo/snapshots/\"))(Resolver.ivyStylePatt\n[diff] Changes to 'project/build.sbt' - line 224 of 367                    61%\nEOF\n\ntest_case noprefix \\\n --args='show ee912870202200a0b9cf4fd86ba57243212d341e' \\\n --before='git config diff.noprefix true' \\\n --after='git config diff.noprefix false' \\\n --script=\"$script\" << EOF\n   | -  )\n   | -\n   |    lazy val parent: Project = Project(\n200|        id = \"parent\",\n   |        base = file(\".\"),\n   | @@ -53,10 +48,10 @@ object ScalaJSBenchmarks extends Build {\n   |    )\n   |\n205|    lazy val common = project(\"Common\", defaultSettings)\n   | -  lazy val deltablue = project(\"DeltaBlue\", benchmarkSettings).dependsOn(c\n   | -  lazy val richards = project(\"Richards\", benchmarkSettings).dependsOn(com\n   | -  lazy val sudoku = project(\"Sudoku\", benchmarkSettings).dependsOn(common)\n   | -  lazy val tracer = project(\"Tracer\", benchmarkSettings).dependsOn(common)\n210| +  lazy val deltablue = project(\"DeltaBlue\", defaultSettings).dependsOn(com\n   | +  lazy val richards = project(\"Richards\", defaultSettings).dependsOn(commo\n   | +  lazy val sudoku = project(\"Sudoku\", defaultSettings).dependsOn(common)\n   | +  lazy val tracer = project(\"Tracer\", defaultSettings).dependsOn(common)\n   |\n215|    def project(id: String, settings: Seq[sbt.Def.Setting[_]]) = Project(\n   |        id = id.toLowerCase,\n   | diff --git project/build.sbt project/build.sbt\n   | index 87c2e66..122abd0 100644\n   | --- project/build.sbt\n220| +++ project/build.sbt\n   | @@ -1 +1,4 @@\n   | -addSbtPlugin(\"org.scala-lang.modules.scalajs\" % \"scalajs-sbt-plugin\" % \"0.\n   | +resolvers += Resolver.url(\"scala-js-snapshots\",\n   | +    url(\"http://repo.scala-js.org/repo/snapshots/\"))(Resolver.ivyStylePatt\n[diff] Changes to 'project/build.sbt' - line 224 of 367                    61%\nEOF\n\ntest_case default-conflict \\\n --before='setup-conflict.sh > config.setup' \\\n --script='\n \t:view-diff\n\t:7\n\t:edit\n\n\t:10\n\t:exec !vim +%(lineno) %(file)\n' << EOF\n  1| diff --cc conflict-file\n   | index 86c5a05,b4c3de6..0000000\n   | --- a/conflict-file\n   | +++ b/conflict-file\n  5| @@@ -1,1 -1,1 +1,5 @@@\n   | ++<<<<<<< HEAD\n   |  +c'\n   | ++=======\n   | + d'\n 10| ++>>>>>>> conflict-branch\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[stage] Unstaged changes to 'conflict-file' - line 10 of 10                 100%\nEOF\n\ntest_case noprefix-conflict \\\n --before='git config diff.noprefix true' \\\n --after='git config diff.noprefix false' \\\n --script='\n \t:view-diff\n\t:7\n\t:edit\n\n\t:10\n\t:exec !vim +%(lineno) %(file)\n' << EOF\n  1| diff --cc conflict-file\n   | index 86c5a05,b4c3de6..0000000\n   | --- conflict-file\n   | +++ conflict-file\n  5| @@@ -1,1 -1,1 +1,5 @@@\n   | ++<<<<<<< HEAD\n   |  +c'\n   | ++=======\n   | + d'\n 10| ++>>>>>>> conflict-branch\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[stage] Unstaged changes to 'conflict-file' - line 10 of 10                 100%\nEOF\n\nrun_test_cases\n\nassert_equals 'editor.log' <<EOF\n+52 project/Build.scala\n  lazy val richards = project(\"Richards\", defaultSettings).dependsOn(common)\n+2 project/build.sbt\n    url(\"http://repo.scala-js.org/repo/snapshots/\"))(Resolver.ivyStylePatterns)\n+52 project/Build.scala\n  lazy val richards = project(\"Richards\", defaultSettings).dependsOn(common)\n+2 project/build.sbt\n    url(\"http://repo.scala-js.org/repo/snapshots/\"))(Resolver.ivyStylePatterns)\ncommon/benchmark-runner.sh\n#!/bin/sh\n#                     __\n#     ________ ___   / /  ___      __ ____  Scala.js Benchmarks\n#    / __/ __// _ | / /  / _ | __ / // __/  (c) 2013, Jonas Fonseca\n#  __\\\\ \\\\/ /__/ __ |/ /__/ __ |/_// /_\\\\ \\\\\ntracer/src/main/scala/org/scalajs/benchmark/tracer/Tracer.scala\n/*                     __                                               *\\\\\n**     ________ ___   / /  ___      __ ____  Scala.js Benchmarks        **\n**    / __/ __// _ | / /  / _ | __ / // __/  Adam Burmister             **\n**  __\\\\ \\\\/ /__/ __ |/ /__/ __ |/_// /_\\\\ \\\\    2012, Google, Inc          **\n** /____/\\\\___/_/ |_/____/_/ | |__/ /____/    2013, Jonas Fonseca        **\n+52 project/Build.scala\n  lazy val richards = project(\"Richards\", defaultSettings).dependsOn(common)\n+2 project/build.sbt\n    url(\"http://repo.scala-js.org/repo/snapshots/\"))(Resolver.ivyStylePatterns)\n+52 project/Build.scala\n  lazy val richards = project(\"Richards\", defaultSettings).dependsOn(common)\n+2 project/build.sbt\n    url(\"http://repo.scala-js.org/repo/snapshots/\"))(Resolver.ivyStylePatterns)\n+2 conflict-file\nc'\n+5 conflict-file\n>>>>>>> conflict-branch\n+2 conflict-file\nc'\n+5 conflict-file\n>>>>>>> conflict-branch\nEOF\n"
  },
  {
    "path": "test/diff/line-number-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport COLUMNS=40\nexport LINES=3\n\nsteps '\n\t:view-diff\n\t:move-last-line\n\t:!echo %(lineno)\n\t:save-display added-line-number.screen\n'\n\n\ngit_init \"$work_dir\"\n\ntest_setup_work_dir()\n{\n\tgit_commit --allow-empty-message\n\tprintf 'new line 1\\n' > README.md\n\tgit add README.md\n}\n\ntest_tig\n\nassert_equals 'added-line-number.screen' <<EOF\n1\n[pager] echo 1 - line 1 of 1 100%\nEOF\n"
  },
  {
    "path": "test/diff/maximized-navigation-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=12\n\nsteps '\n\t<Enter>\n\t:save-display split.screen\n\t:maximize\n\t:save-display maximized.screen\n\t:next\n\t:save-display maximized-after-next.screen\n\t:view-diff\n\t:save-display diff.screen\n\t:next\n\t:save-display diff-after-next.screen\n'\n\ntigrc <<EOF\nset line-graphics = utf-8\nset vertical-split = horizontal\nEOF\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\ntest_tig -n 3\n\nassert_equals 'split.screen' <<EOF\n2014-03-01 17:26 -0500 Jonas Fonseca ∙ [master] WIP: Upgrade to 0.4-SNAPSHOT and\n2014-03-01 15:59 -0500 Jonas Fonseca ∙ Add type parameter for js.Dynamic\n2014-01-16 22:51 -0500 Jonas Fonseca ∙ Move classes under org.scalajs.benchmark\n[main] ee912870202200a0b9cf4fd86ba57243212d341e - commit 1 of 3             100%\ncommit ee912870202200a0b9cf4fd86ba57243212d341e\nRefs: [master]\nAuthor:     Jonas Fonseca <jonas.fonseca@gmail.com>\nAuthorDate: Sat Mar 1 17:26:01 2014 -0500\nCommit:     Jonas Fonseca <jonas.fonseca@gmail.com>\nCommitDate: Sat Mar 1 17:26:01 2014 -0500\n[diff] ee912870202200a0b9cf4fd86ba57243212d341e - line 1 of 367               1%\nEOF\n\nassert_equals 'maximized.screen' <<EOF\ncommit ee912870202200a0b9cf4fd86ba57243212d341e\nRefs: [master]\nAuthor:     Jonas Fonseca <jonas.fonseca@gmail.com>\nAuthorDate: Sat Mar 1 17:26:01 2014 -0500\nCommit:     Jonas Fonseca <jonas.fonseca@gmail.com>\nCommitDate: Sat Mar 1 17:26:01 2014 -0500\n \n    WIP: Upgrade to 0.4-SNAPSHOT and DCE\n---\n common/benchmark-runner.sh                                  |  5 +++--\n[diff] ee912870202200a0b9cf4fd86ba57243212d341e - line 1 of 367               2%\nEOF\n\nassert_equals 'maximized-after-next.screen' <<EOF\ncommit a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff\nAuthor:     Jonas Fonseca <jonas.fonseca@gmail.com>\nAuthorDate: Sat Mar 1 15:59:02 2014 -0500\nCommit:     Jonas Fonseca <jonas.fonseca@gmail.com>\nCommitDate: Sat Mar 1 15:59:02 2014 -0500\n \n    Add type parameter for js.Dynamic\n---\n common/src/main/scala/org/scalajs/benchmark/Benchmark.scala | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n[diff] a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff - line 1 of 24               41%\nEOF\n\nassert_equals 'diff.screen' <<EOF\ncommit a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff\nAuthor:     Jonas Fonseca <jonas.fonseca@gmail.com>\nAuthorDate: Sat Mar 1 15:59:02 2014 -0500\nCommit:     Jonas Fonseca <jonas.fonseca@gmail.com>\nCommitDate: Sat Mar 1 15:59:02 2014 -0500\n \n    Add type parameter for js.Dynamic\n---\n common/src/main/scala/org/scalajs/benchmark/Benchmark.scala | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n[diff] a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff - line 1 of 24               41%\nEOF\n\nassert_equals 'diff-after-next.screen' <<EOF\ncommit a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff\nAuthor:     Jonas Fonseca <jonas.fonseca@gmail.com>\nAuthorDate: Sat Mar 1 15:59:02 2014 -0500\nCommit:     Jonas Fonseca <jonas.fonseca@gmail.com>\nCommitDate: Sat Mar 1 15:59:02 2014 -0500\n \n    Add type parameter for js.Dynamic\n---\n common/src/main/scala/org/scalajs/benchmark/Benchmark.scala | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n[diff] a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff - line 2 of 24               41%\nEOF\n"
  },
  {
    "path": "test/diff/open-after-split-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=12\n\nsteps '\n\t<Enter>\n\t:save-display split.screen\n\t:next\n\t:save-display split-after-next.screen\n\t:view-diff\n\t:save-display diff.screen\n\t:next\n\t:save-display diff-after-next.screen\n'\n\ntigrc <<EOF\nset line-graphics = utf-8\nset vertical-split = horizontal\nEOF\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\ntest_tig -n 3\n\nassert_equals 'split.screen' <<EOF\n2014-03-01 17:26 -0500 Jonas Fonseca ∙ [master] WIP: Upgrade to 0.4-SNAPSHOT and\n2014-03-01 15:59 -0500 Jonas Fonseca ∙ Add type parameter for js.Dynamic\n2014-01-16 22:51 -0500 Jonas Fonseca ∙ Move classes under org.scalajs.benchmark\n[main] ee912870202200a0b9cf4fd86ba57243212d341e - commit 1 of 3             100%\ncommit ee912870202200a0b9cf4fd86ba57243212d341e\nRefs: [master]\nAuthor:     Jonas Fonseca <jonas.fonseca@gmail.com>\nAuthorDate: Sat Mar 1 17:26:01 2014 -0500\nCommit:     Jonas Fonseca <jonas.fonseca@gmail.com>\nCommitDate: Sat Mar 1 17:26:01 2014 -0500\n[diff] ee912870202200a0b9cf4fd86ba57243212d341e - line 1 of 367               1%\nEOF\n\nassert_equals 'split-after-next.screen' <<EOF\n2014-03-01 17:26 -0500 Jonas Fonseca ∙ [master] WIP: Upgrade to 0.4-SNAPSHOT and\n2014-03-01 15:59 -0500 Jonas Fonseca ∙ Add type parameter for js.Dynamic\n2014-01-16 22:51 -0500 Jonas Fonseca ∙ Move classes under org.scalajs.benchmark\n[main] a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff - commit 2 of 3             100%\ncommit a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff\nAuthor:     Jonas Fonseca <jonas.fonseca@gmail.com>\nAuthorDate: Sat Mar 1 15:59:02 2014 -0500\nCommit:     Jonas Fonseca <jonas.fonseca@gmail.com>\nCommitDate: Sat Mar 1 15:59:02 2014 -0500\n \n[diff] a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff - line 1 of 24               25%\nEOF\n\nassert_equals 'diff.screen' <<EOF\ncommit a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff\nAuthor:     Jonas Fonseca <jonas.fonseca@gmail.com>\nAuthorDate: Sat Mar 1 15:59:02 2014 -0500\nCommit:     Jonas Fonseca <jonas.fonseca@gmail.com>\nCommitDate: Sat Mar 1 15:59:02 2014 -0500\n \n    Add type parameter for js.Dynamic\n---\n common/src/main/scala/org/scalajs/benchmark/Benchmark.scala | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n[diff] a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff - line 1 of 24               41%\nEOF\n\nassert_equals 'diff-after-next.screen' <<EOF\ncommit a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff\nAuthor:     Jonas Fonseca <jonas.fonseca@gmail.com>\nAuthorDate: Sat Mar 1 15:59:02 2014 -0500\nCommit:     Jonas Fonseca <jonas.fonseca@gmail.com>\nCommitDate: Sat Mar 1 15:59:02 2014 -0500\n \n    Add type parameter for js.Dynamic\n---\n common/src/main/scala/org/scalajs/benchmark/Benchmark.scala | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n[diff] a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff - line 2 of 24               41%\nEOF\n"
  },
  {
    "path": "test/diff/start-on-line-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\nsteps '\n\t:save-display position.screen\n'\n\n#test_tig show master~18 +42\ntest_tig show d92a308941e6ccb79cb02f96417cab7b67b998c2 +42\n\nassert_equals 'position.screen' <<EOF\n       )\n@@ -47,12 +48,14 @@ object ScalaJSBuild extends Build {\n       common,\n       deltablue,\n       richards,\n+      sudoku,\n       tracer\n   )\n\n   lazy val common = project(\"Common\", defaultSettings)\n   lazy val deltablue = project(\"DeltaBlue\", benchmarkSettings).dependsOn(common\n   lazy val richards = project(\"Richards\", benchmarkSettings).dependsOn(common)\n+  lazy val sudoku = project(\"Sudoku\", benchmarkSettings).dependsOn(common)\n   lazy val tracer = project(\"Tracer\", benchmarkSettings).dependsOn(common)\n\n   def project(id: String, settings: Seq[sbt.Def.Setting[_]]) = Project(\ndiff --git a/sudoku/Sudoku.scala b/sudoku/Sudoku.scala\nnew file mode 100644\nindex 0000000..3109fb7\n--- /dev/null\n+++ b/sudoku/Sudoku.scala\n@@ -0,0 +1,182 @@\n+/*                     __                                               *\\\\\n+**     ________ ___   / /  ___      __ ____  Scala.js Benchmarks        **\n+**    / __/ __// _ | / /  / _ | __ / // __/  (c) 2013, Jonas Fonseca    **\n+**  __\\ \\/ /__/ __ |/ /__/ __ |/_// /_\\ \\                               **\n+** /____/\\___/_/ |_/____/_/ | |__/ /____/                               **\n+**                          |/____/                                     **\n[diff] Changes to 'project/Build.scala' - line 42 of 280                     19%\nEOF\n"
  },
  {
    "path": "test/diff/submodule-editor-diffstat-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=22\n\nexecutable exec-env <<EOF\n#!/bin/sh\n\n{\n\tprintf ' - pwd='; pwd\n\tfor arg in git-dir show-cdup is-inside-work-tree show-superproject-working-tree; do\n\t\techo \" - \\$arg=\\$(git rev-parse --\\$arg)\"\n\tdone\n} | sed \"s,$output_dir,ROOT,\" >> \"$output_dir/exec-env\"\nEOF\n\ntigrc <<EOF\nset line-graphics = ascii\nset diff-view-line-number = yes\nbind diff <C-p> !exec-env\nEOF\n\nsteps '\n\t:9\n\t:edit\n\t:save-display diff.screen\n\t<C-p>\n'\n\nsetup_submodule_project()\n{\n\tcreate_repo_from_tgz \"$base_dir/files/repo-two.tgz\"\n\tgit submodule update\n\tmkdir -p repo-two-a/src/subdir\n}\n\ntest_exec_work_dir setup_submodule_project\nwork_dir=\"$work_dir/repo-two-a/src/subdir\"\n\ntest_tig show 8cc26dd6e80e2fa7fa98d12f4670d8983bc83678\n\nassert_equals 'diff.screen' <<EOF\n  1| commit 8cc26dd6e80e2fa7fa98d12f4670d8983bc83678\n   | Author:     A. U. Thor <a.u.thor@example.com>\n   | AuthorDate: Thu Jun 4 16:19:40 2009 +0000\n   | Commit:     Committer <c.ommitter@example.net>\n  5| CommitDate: Thu Jun 4 16:19:40 2009 +0000\n   |\n   |     [repo-two-a] Commit 3\n   | ---\n   |  include/api.h | 1 +\n 10|  1 file changed, 1 insertion(+)\n   |\n   | diff --git a/include/api.h b/include/api.h\n   | index f2eb956..1da0f3f 100644\n   | --- a/include/api.h\n 15| +++ b/include/api.h\n   | @@ -1 +1,2 @@\n   |  include/api.h\n   | +include/api.h\n \n \n[diff] Press '<Enter>' to jump to file diff - line 9 of 18                  100%\nEOF\n\n# The file is called include/api.h and contains its name on two lines\nassert_equals 'editor.log' <<EOF\ninclude/api.h\ninclude/api.h\ninclude/api.h\nEOF\n\nassert_equals 'exec-env' <<EOF\n - pwd=ROOT/work-dir/repo-two-a\n - git-dir=ROOT/work-dir/.git/modules/repo-two-a\n - show-cdup=\n - is-inside-work-tree=true\n - show-superproject-working-tree=ROOT/work-dir\nEOF\n"
  },
  {
    "path": "test/diff/submodule-editor-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexecutable exec-env <<EOF\n#!/bin/sh\n\n{\n\techo \"\\$TEST_CASE\"\n\tprintf ' - pwd='; pwd\n\tfor arg in git-dir show-cdup is-inside-work-tree show-superproject-working-tree; do\n\t\techo \" - \\$arg=\\$(git rev-parse --\\$arg)\"\n\tdone\n} | sed \"s,$output_dir,ROOT,\" >> $output_dir/exec-env\nEOF\n\ntigrc <<EOF\nset show-untracked = no\nset line-graphics = ascii\nset diff-view-line-number = yes\nset stage-view-line-number = yes\nbind diff <C-p> !sh -c 'TEST_CASE=\\$TEST_CASE::exec exec-env'\nEOF\n\nscript='\n\t:210\n\t:scroll-line-down\n\t:edit\n\n\t:224\n\t:exec !vim +%(lineno) %(file)\n'\n\nsetup_submodule_project()\n{\n\tmkdir -p \"$output_dir/base\"\n\tcd \"$output_dir/base\"\n\tcreate_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\tcd \"$output_dir\"\n\tgit_init\n\tcd \"$output_dir/$work_dir\"\n\tgit -c protocol.file.allow=always submodule add \"$output_dir/base\" bench\n  git_commit -m \"Adding benchmark\"\n}\n\ntest_exec_work_dir setup_submodule_project\nwork_dir=\"$work_dir/bench\"\n\ntest_case default \\\n --args='show ee912870202200a0b9cf4fd86ba57243212d341e' \\\n --before='exec-env' \\\n --script=\"$script\" <<EOF\n   | -  )\n   | -\n   |    lazy val parent: Project = Project(\n200|        id = \"parent\",\n   |        base = file(\".\"),\n   | @@ -53,10 +48,10 @@ object ScalaJSBenchmarks extends Build {\n   |    )\n   |\n205|    lazy val common = project(\"Common\", defaultSettings)\n   | -  lazy val deltablue = project(\"DeltaBlue\", benchmarkSettings).dependsOn(c\n   | -  lazy val richards = project(\"Richards\", benchmarkSettings).dependsOn(com\n   | -  lazy val sudoku = project(\"Sudoku\", benchmarkSettings).dependsOn(common)\n   | -  lazy val tracer = project(\"Tracer\", benchmarkSettings).dependsOn(common)\n210| +  lazy val deltablue = project(\"DeltaBlue\", defaultSettings).dependsOn(com\n   | +  lazy val richards = project(\"Richards\", defaultSettings).dependsOn(commo\n   | +  lazy val sudoku = project(\"Sudoku\", defaultSettings).dependsOn(common)\n   | +  lazy val tracer = project(\"Tracer\", defaultSettings).dependsOn(common)\n   |\n215|    def project(id: String, settings: Seq[sbt.Def.Setting[_]]) = Project(\n   |        id = id.toLowerCase,\n   | diff --git a/project/build.sbt b/project/build.sbt\n   | index 87c2e66..122abd0 100644\n   | --- a/project/build.sbt\n220| +++ b/project/build.sbt\n   | @@ -1 +1,4 @@\n   | -addSbtPlugin(\"org.scala-lang.modules.scalajs\" % \"scalajs-sbt-plugin\" % \"0.\n   | +resolvers += Resolver.url(\"scala-js-snapshots\",\n   | +    url(\"http://repo.scala-js.org/repo/snapshots/\"))(Resolver.ivyStylePatt\n[diff] Changes to 'project/build.sbt' - line 224 of 367                    61%\nEOF\n\ntest_case sub-directory \\\n --args='show ee912870202200a0b9cf4fd86ba57243212d341e' \\\n --before='mkdir -p some/subdir && cd some/subdir && exec-env' \\\n --script=\"\n    $script\n    <C-p>\n\" <<EOF\n   | -  )\n   | -\n   |    lazy val parent: Project = Project(\n200|        id = \"parent\",\n   |        base = file(\".\"),\n   | @@ -53,10 +48,10 @@ object ScalaJSBenchmarks extends Build {\n   |    )\n   |\n205|    lazy val common = project(\"Common\", defaultSettings)\n   | -  lazy val deltablue = project(\"DeltaBlue\", benchmarkSettings).dependsOn(c\n   | -  lazy val richards = project(\"Richards\", benchmarkSettings).dependsOn(com\n   | -  lazy val sudoku = project(\"Sudoku\", benchmarkSettings).dependsOn(common)\n   | -  lazy val tracer = project(\"Tracer\", benchmarkSettings).dependsOn(common)\n210| +  lazy val deltablue = project(\"DeltaBlue\", defaultSettings).dependsOn(com\n   | +  lazy val richards = project(\"Richards\", defaultSettings).dependsOn(commo\n   | +  lazy val sudoku = project(\"Sudoku\", defaultSettings).dependsOn(common)\n   | +  lazy val tracer = project(\"Tracer\", defaultSettings).dependsOn(common)\n   |\n215|    def project(id: String, settings: Seq[sbt.Def.Setting[_]]) = Project(\n   |        id = id.toLowerCase,\n   | diff --git a/project/build.sbt b/project/build.sbt\n   | index 87c2e66..122abd0 100644\n   | --- a/project/build.sbt\n220| +++ b/project/build.sbt\n   | @@ -1 +1,4 @@\n   | -addSbtPlugin(\"org.scala-lang.modules.scalajs\" % \"scalajs-sbt-plugin\" % \"0.\n   | +resolvers += Resolver.url(\"scala-js-snapshots\",\n   | +    url(\"http://repo.scala-js.org/repo/snapshots/\"))(Resolver.ivyStylePatt\n[diff] Changes to 'project/build.sbt' - line 224 of 367                    61%\nEOF\n\ntest_case sub-directory-diffstat \\\n --args='show ee912870202200a0b9cf4fd86ba57243212d341e' \\\n --before='mkdir -p some/subdir && cd some/subdir && exec-env' \\\n --script='\n\t:10\n\t:edit\n\t:26\n\t:exec !vim %(file)\n\t<C-p>\n' <<EOF\n  1| commit ee912870202200a0b9cf4fd86ba57243212d341e\n   | Refs: [master], {origin/master}, {origin/HEAD}\n   | Author:     Jonas Fonseca <jonas.fonseca@gmail.com>\n   | AuthorDate: Sat Mar 1 17:26:01 2014 -0500\n  5| Commit:     Jonas Fonseca <jonas.fonseca@gmail.com>\n   | CommitDate: Sat Mar 1 17:26:01 2014 -0500\n   |\n   |     WIP: Upgrade to 0.4-SNAPSHOT and DCE\n   | ---\n 10|  common/benchmark-runner.sh                                  |  5 +++--\n   |  common/src/main/scala/org/scalajs/benchmark/Benchmark.scala | 11 +++++----\n   |  .../src/main/scala/org/scalajs/benchmark/BenchmarkApp.scala |  2 +-\n   |  common/start-benchmark.js                                   |  9 +++++++--\n   |  deltablue/exports.js                                        | 13 ---------\n 15|  .../scala/org/scalajs/benchmark/deltablue/DeltaBlue.scala   |  7 +++++++\n   |  project/Build.scala                                         | 13 ++++-----\n   |  project/build.sbt                                           |  5 ++++-\n   |  richards/exports.js                                         | 13 ---------\n   |  .../scala/org/scalajs/benchmark/richards/Richards.scala     |  3 +++\n 20|  run.sh                                                      |  2 +-\n   |  sudoku/exports.js                                           | 13 ---------\n   |  .../main/scala/org/scalajs/benchmark/sudoku/Sudoku.scala    |  2 ++\n   |  tracer/exports.js                                           | 13 ---------\n   |  tracer/index-dev.html                                       |  2 +-\n 25|  tracer/index.html                                           |  2 +-\n   |  .../main/scala/org/scalajs/benchmark/tracer/Tracer.scala    |  3 +++\n   |  17 files changed, 42 insertions(+), 76 deletions(-)\n   |\n[diff] Press '<Enter>' to jump to file diff - line 26 of 367                  7%\nEOF\n\n# This settings doesn't seem to apply to `git-show`\ntest_case mnemonic \\\n --args='show ee912870202200a0b9cf4fd86ba57243212d341e' \\\n --before='git config diff.mnemonicPrefix true' \\\n --after='git config diff.mnemonicPrefix false' \\\n --script=\"$script\" << EOF\n   | -  )\n   | -\n   |    lazy val parent: Project = Project(\n200|        id = \"parent\",\n   |        base = file(\".\"),\n   | @@ -53,10 +48,10 @@ object ScalaJSBenchmarks extends Build {\n   |    )\n   |\n205|    lazy val common = project(\"Common\", defaultSettings)\n   | -  lazy val deltablue = project(\"DeltaBlue\", benchmarkSettings).dependsOn(c\n   | -  lazy val richards = project(\"Richards\", benchmarkSettings).dependsOn(com\n   | -  lazy val sudoku = project(\"Sudoku\", benchmarkSettings).dependsOn(common)\n   | -  lazy val tracer = project(\"Tracer\", benchmarkSettings).dependsOn(common)\n210| +  lazy val deltablue = project(\"DeltaBlue\", defaultSettings).dependsOn(com\n   | +  lazy val richards = project(\"Richards\", defaultSettings).dependsOn(commo\n   | +  lazy val sudoku = project(\"Sudoku\", defaultSettings).dependsOn(common)\n   | +  lazy val tracer = project(\"Tracer\", defaultSettings).dependsOn(common)\n   |\n215|    def project(id: String, settings: Seq[sbt.Def.Setting[_]]) = Project(\n   |        id = id.toLowerCase,\n   | diff --git a/project/build.sbt b/project/build.sbt\n   | index 87c2e66..122abd0 100644\n   | --- a/project/build.sbt\n220| +++ b/project/build.sbt\n   | @@ -1 +1,4 @@\n   | -addSbtPlugin(\"org.scala-lang.modules.scalajs\" % \"scalajs-sbt-plugin\" % \"0.\n   | +resolvers += Resolver.url(\"scala-js-snapshots\",\n   | +    url(\"http://repo.scala-js.org/repo/snapshots/\"))(Resolver.ivyStylePatt\n[diff] Changes to 'project/build.sbt' - line 224 of 367                    61%\nEOF\n\ntest_case noprefix \\\n --args='show ee912870202200a0b9cf4fd86ba57243212d341e' \\\n --before='git config diff.noprefix true' \\\n --after='git config diff.noprefix false' \\\n --script=\"$script\" << EOF\n   | -  )\n   | -\n   |    lazy val parent: Project = Project(\n200|        id = \"parent\",\n   |        base = file(\".\"),\n   | @@ -53,10 +48,10 @@ object ScalaJSBenchmarks extends Build {\n   |    )\n   |\n205|    lazy val common = project(\"Common\", defaultSettings)\n   | -  lazy val deltablue = project(\"DeltaBlue\", benchmarkSettings).dependsOn(c\n   | -  lazy val richards = project(\"Richards\", benchmarkSettings).dependsOn(com\n   | -  lazy val sudoku = project(\"Sudoku\", benchmarkSettings).dependsOn(common)\n   | -  lazy val tracer = project(\"Tracer\", benchmarkSettings).dependsOn(common)\n210| +  lazy val deltablue = project(\"DeltaBlue\", defaultSettings).dependsOn(com\n   | +  lazy val richards = project(\"Richards\", defaultSettings).dependsOn(commo\n   | +  lazy val sudoku = project(\"Sudoku\", defaultSettings).dependsOn(common)\n   | +  lazy val tracer = project(\"Tracer\", defaultSettings).dependsOn(common)\n   |\n215|    def project(id: String, settings: Seq[sbt.Def.Setting[_]]) = Project(\n   |        id = id.toLowerCase,\n   | diff --git project/build.sbt project/build.sbt\n   | index 87c2e66..122abd0 100644\n   | --- project/build.sbt\n220| +++ project/build.sbt\n   | @@ -1 +1,4 @@\n   | -addSbtPlugin(\"org.scala-lang.modules.scalajs\" % \"scalajs-sbt-plugin\" % \"0.\n   | +resolvers += Resolver.url(\"scala-js-snapshots\",\n   | +    url(\"http://repo.scala-js.org/repo/snapshots/\"))(Resolver.ivyStylePatt\n[diff] Changes to 'project/build.sbt' - line 224 of 367                    61%\nEOF\n\ntest_case default-conflict \\\n --before='setup-conflict.sh > config.setup' \\\n --script='\n \t:view-diff\n\t:7\n\t:edit\n\n\t:10\n\t:exec !vim +%(lineno) %(file)\n' << EOF\n  1| diff --cc conflict-file\n   | index 86c5a05,b4c3de6..0000000\n   | --- a/conflict-file\n   | +++ b/conflict-file\n  5| @@@ -1,1 -1,1 +1,5 @@@\n   | ++<<<<<<< HEAD\n   |  +c'\n   | ++=======\n   | + d'\n 10| ++>>>>>>> conflict-branch\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[stage] Unstaged changes to 'conflict-file' - line 10 of 10                 100%\nEOF\n\ntest_case noprefix-conflict \\\n --before='git config diff.noprefix true' \\\n --after='git config diff.noprefix false' \\\n --script='\n \t:view-diff\n\t:7\n\t:edit\n\n\t:10\n\t:exec !vim +%(lineno) %(file)\n' << EOF\n  1| diff --cc conflict-file\n   | index 86c5a05,b4c3de6..0000000\n   | --- conflict-file\n   | +++ conflict-file\n  5| @@@ -1,1 -1,1 +1,5 @@@\n   | ++<<<<<<< HEAD\n   |  +c'\n   | ++=======\n   | + d'\n 10| ++>>>>>>> conflict-branch\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[stage] Unstaged changes to 'conflict-file' - line 10 of 10                 100%\nEOF\n\nrun_test_cases\n\nassert_equals 'editor.log' <<EOF\n+52 project/Build.scala\n  lazy val richards = project(\"Richards\", defaultSettings).dependsOn(common)\n+2 project/build.sbt\n    url(\"http://repo.scala-js.org/repo/snapshots/\"))(Resolver.ivyStylePatterns)\n+52 project/Build.scala\n  lazy val richards = project(\"Richards\", defaultSettings).dependsOn(common)\n+2 project/build.sbt\n    url(\"http://repo.scala-js.org/repo/snapshots/\"))(Resolver.ivyStylePatterns)\ncommon/benchmark-runner.sh\n#!/bin/sh\n#                     __\n#     ________ ___   / /  ___      __ ____  Scala.js Benchmarks\n#    / __/ __// _ | / /  / _ | __ / // __/  (c) 2013, Jonas Fonseca\n#  __\\\\ \\\\/ /__/ __ |/ /__/ __ |/_// /_\\\\ \\\\\ntracer/src/main/scala/org/scalajs/benchmark/tracer/Tracer.scala\n/*                     __                                               *\\\\\n**     ________ ___   / /  ___      __ ____  Scala.js Benchmarks        **\n**    / __/ __// _ | / /  / _ | __ / // __/  Adam Burmister             **\n**  __\\\\ \\\\/ /__/ __ |/ /__/ __ |/_// /_\\\\ \\\\    2012, Google, Inc          **\n** /____/\\\\___/_/ |_/____/_/ | |__/ /____/    2013, Jonas Fonseca        **\n+52 project/Build.scala\n  lazy val richards = project(\"Richards\", defaultSettings).dependsOn(common)\n+2 project/build.sbt\n    url(\"http://repo.scala-js.org/repo/snapshots/\"))(Resolver.ivyStylePatterns)\n+52 project/Build.scala\n  lazy val richards = project(\"Richards\", defaultSettings).dependsOn(common)\n+2 project/build.sbt\n    url(\"http://repo.scala-js.org/repo/snapshots/\"))(Resolver.ivyStylePatterns)\n+2 conflict-file\nc'\n+5 conflict-file\n>>>>>>> conflict-branch\n+2 conflict-file\nc'\n+5 conflict-file\n>>>>>>> conflict-branch\nEOF\n\nassert_equals 'exec-env' <<EOF\ndefault\n - pwd=ROOT/work-dir/bench\n - git-dir=ROOT/work-dir/.git/modules/bench\n - show-cdup=\n - is-inside-work-tree=true\n - show-superproject-working-tree=ROOT/work-dir\nsub-directory\n - pwd=ROOT/work-dir/bench/some/subdir\n - git-dir=ROOT/work-dir/.git/modules/bench\n - show-cdup=../../\n - is-inside-work-tree=true\n - show-superproject-working-tree=ROOT/work-dir\nsub-directory::exec\n - pwd=ROOT/work-dir/bench\n - git-dir=ROOT/work-dir/.git/modules/bench\n - show-cdup=\n - is-inside-work-tree=true\n - show-superproject-working-tree=ROOT/work-dir\nsub-directory-diffstat\n - pwd=ROOT/work-dir/bench/some/subdir\n - git-dir=ROOT/work-dir/.git/modules/bench\n - show-cdup=../../\n - is-inside-work-tree=true\n - show-superproject-working-tree=ROOT/work-dir\nsub-directory-diffstat::exec\n - pwd=ROOT/work-dir/bench\n - git-dir=ROOT/work-dir/.git/modules/bench\n - show-cdup=\n - is-inside-work-tree=true\n - show-superproject-working-tree=ROOT/work-dir\nEOF\n"
  },
  {
    "path": "test/diff/worktree-editor-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexecutable exec-env <<EOF\n#!/bin/sh\n\n{\n\techo \"\\$TEST_CASE\"\n\tprintf ' - pwd='; pwd\n\tfor arg in git-dir show-cdup is-inside-work-tree show-superproject-working-tree; do\n\t\techo \" - \\$arg=\\$(git rev-parse --\\$arg)\"\n\tdone\n} | sed \"s,$output_dir,ROOT,\" >> $output_dir/exec-env\nEOF\n\ntigrc <<EOF\nset show-untracked = no\nset line-graphics = ascii\nset diff-view-line-number = yes\nset stage-view-line-number = yes\nbind diff <C-p> !sh -c 'TEST_CASE=\\$TEST_CASE::exec exec-env'\nEOF\n\ntest_setup_work_dir()\n{\n\tmkdir -p \"$output_dir/base\"\n\tcd \"$output_dir/base\"\n\tcreate_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\tgit branch work-branch ee912870202200a0b9cf4fd86ba57243212d341e\n\tgit worktree add \"$output_dir/$work_dir\" work-branch\n}\n\nscript='\n\t:210\n\t:scroll-line-down\n\t:edit\n\n\t:224\n\t:exec !vim +%(lineno) %(file)\n'\n\nexec_env_script='\n  <C-p>\n'\n\ntest_case default \\\n --args='show ee912870202200a0b9cf4fd86ba57243212d341e' \\\n --before='exec-env' \\\n --script=\"$script$exec_env_script\" <<EOF\n   | -  )\n   | -\n   |    lazy val parent: Project = Project(\n200|        id = \"parent\",\n   |        base = file(\".\"),\n   | @@ -53,10 +48,10 @@ object ScalaJSBenchmarks extends Build {\n   |    )\n   |\n205|    lazy val common = project(\"Common\", defaultSettings)\n   | -  lazy val deltablue = project(\"DeltaBlue\", benchmarkSettings).dependsOn(c\n   | -  lazy val richards = project(\"Richards\", benchmarkSettings).dependsOn(com\n   | -  lazy val sudoku = project(\"Sudoku\", benchmarkSettings).dependsOn(common)\n   | -  lazy val tracer = project(\"Tracer\", benchmarkSettings).dependsOn(common)\n210| +  lazy val deltablue = project(\"DeltaBlue\", defaultSettings).dependsOn(com\n   | +  lazy val richards = project(\"Richards\", defaultSettings).dependsOn(commo\n   | +  lazy val sudoku = project(\"Sudoku\", defaultSettings).dependsOn(common)\n   | +  lazy val tracer = project(\"Tracer\", defaultSettings).dependsOn(common)\n   |\n215|    def project(id: String, settings: Seq[sbt.Def.Setting[_]]) = Project(\n   |        id = id.toLowerCase,\n   | diff --git a/project/build.sbt b/project/build.sbt\n   | index 87c2e66..122abd0 100644\n   | --- a/project/build.sbt\n220| +++ b/project/build.sbt\n   | @@ -1 +1,4 @@\n   | -addSbtPlugin(\"org.scala-lang.modules.scalajs\" % \"scalajs-sbt-plugin\" % \"0.\n   | +resolvers += Resolver.url(\"scala-js-snapshots\",\n   | +    url(\"http://repo.scala-js.org/repo/snapshots/\"))(Resolver.ivyStylePatt\n[diff] Changes to 'project/build.sbt' - line 224 of 367                    61%\nEOF\n\ntest_case sub-directory \\\n --args='show ee912870202200a0b9cf4fd86ba57243212d341e' \\\n --before='mkdir -p some/subdir && cd some/subdir && exec-env' \\\n --script=\"$script$exec_env_script\" <<EOF\n   | -  )\n   | -\n   |    lazy val parent: Project = Project(\n200|        id = \"parent\",\n   |        base = file(\".\"),\n   | @@ -53,10 +48,10 @@ object ScalaJSBenchmarks extends Build {\n   |    )\n   |\n205|    lazy val common = project(\"Common\", defaultSettings)\n   | -  lazy val deltablue = project(\"DeltaBlue\", benchmarkSettings).dependsOn(c\n   | -  lazy val richards = project(\"Richards\", benchmarkSettings).dependsOn(com\n   | -  lazy val sudoku = project(\"Sudoku\", benchmarkSettings).dependsOn(common)\n   | -  lazy val tracer = project(\"Tracer\", benchmarkSettings).dependsOn(common)\n210| +  lazy val deltablue = project(\"DeltaBlue\", defaultSettings).dependsOn(com\n   | +  lazy val richards = project(\"Richards\", defaultSettings).dependsOn(commo\n   | +  lazy val sudoku = project(\"Sudoku\", defaultSettings).dependsOn(common)\n   | +  lazy val tracer = project(\"Tracer\", defaultSettings).dependsOn(common)\n   |\n215|    def project(id: String, settings: Seq[sbt.Def.Setting[_]]) = Project(\n   |        id = id.toLowerCase,\n   | diff --git a/project/build.sbt b/project/build.sbt\n   | index 87c2e66..122abd0 100644\n   | --- a/project/build.sbt\n220| +++ b/project/build.sbt\n   | @@ -1 +1,4 @@\n   | -addSbtPlugin(\"org.scala-lang.modules.scalajs\" % \"scalajs-sbt-plugin\" % \"0.\n   | +resolvers += Resolver.url(\"scala-js-snapshots\",\n   | +    url(\"http://repo.scala-js.org/repo/snapshots/\"))(Resolver.ivyStylePatt\n[diff] Changes to 'project/build.sbt' - line 224 of 367                    61%\nEOF\n\ntest_case sub-directory-diffstat \\\n --args='show ee912870202200a0b9cf4fd86ba57243212d341e' \\\n --before='mkdir -p some/subdir && cd some/subdir && exec-env' \\\n --script='\n\t:10\n\t:edit\n\t:26\n\t:exec !vim %(file)\n\t<C-p>\n' <<EOF\n  1| commit ee912870202200a0b9cf4fd86ba57243212d341e\n   | Refs: [work-branch], [master]\n   | Author:     Jonas Fonseca <jonas.fonseca@gmail.com>\n   | AuthorDate: Sat Mar 1 17:26:01 2014 -0500\n  5| Commit:     Jonas Fonseca <jonas.fonseca@gmail.com>\n   | CommitDate: Sat Mar 1 17:26:01 2014 -0500\n   |\n   |     WIP: Upgrade to 0.4-SNAPSHOT and DCE\n   | ---\n 10|  common/benchmark-runner.sh                                  |  5 +++--\n   |  common/src/main/scala/org/scalajs/benchmark/Benchmark.scala | 11 +++++----\n   |  .../src/main/scala/org/scalajs/benchmark/BenchmarkApp.scala |  2 +-\n   |  common/start-benchmark.js                                   |  9 +++++++--\n   |  deltablue/exports.js                                        | 13 ---------\n 15|  .../scala/org/scalajs/benchmark/deltablue/DeltaBlue.scala   |  7 +++++++\n   |  project/Build.scala                                         | 13 ++++-----\n   |  project/build.sbt                                           |  5 ++++-\n   |  richards/exports.js                                         | 13 ---------\n   |  .../scala/org/scalajs/benchmark/richards/Richards.scala     |  3 +++\n 20|  run.sh                                                      |  2 +-\n   |  sudoku/exports.js                                           | 13 ---------\n   |  .../main/scala/org/scalajs/benchmark/sudoku/Sudoku.scala    |  2 ++\n   |  tracer/exports.js                                           | 13 ---------\n   |  tracer/index-dev.html                                       |  2 +-\n 25|  tracer/index.html                                           |  2 +-\n   |  .../main/scala/org/scalajs/benchmark/tracer/Tracer.scala    |  3 +++\n   |  17 files changed, 42 insertions(+), 76 deletions(-)\n   |\n[diff] Press '<Enter>' to jump to file diff - line 26 of 367                  7%\nEOF\n\n# This settings doesn't seem to apply to `git-show`\ntest_case mnemonic \\\n --args='show ee912870202200a0b9cf4fd86ba57243212d341e' \\\n --before='git config diff.mnemonicPrefix true' \\\n --after='git config diff.mnemonicPrefix false' \\\n --script=\"$script\" << EOF\n   | -  )\n   | -\n   |    lazy val parent: Project = Project(\n200|        id = \"parent\",\n   |        base = file(\".\"),\n   | @@ -53,10 +48,10 @@ object ScalaJSBenchmarks extends Build {\n   |    )\n   |\n205|    lazy val common = project(\"Common\", defaultSettings)\n   | -  lazy val deltablue = project(\"DeltaBlue\", benchmarkSettings).dependsOn(c\n   | -  lazy val richards = project(\"Richards\", benchmarkSettings).dependsOn(com\n   | -  lazy val sudoku = project(\"Sudoku\", benchmarkSettings).dependsOn(common)\n   | -  lazy val tracer = project(\"Tracer\", benchmarkSettings).dependsOn(common)\n210| +  lazy val deltablue = project(\"DeltaBlue\", defaultSettings).dependsOn(com\n   | +  lazy val richards = project(\"Richards\", defaultSettings).dependsOn(commo\n   | +  lazy val sudoku = project(\"Sudoku\", defaultSettings).dependsOn(common)\n   | +  lazy val tracer = project(\"Tracer\", defaultSettings).dependsOn(common)\n   |\n215|    def project(id: String, settings: Seq[sbt.Def.Setting[_]]) = Project(\n   |        id = id.toLowerCase,\n   | diff --git a/project/build.sbt b/project/build.sbt\n   | index 87c2e66..122abd0 100644\n   | --- a/project/build.sbt\n220| +++ b/project/build.sbt\n   | @@ -1 +1,4 @@\n   | -addSbtPlugin(\"org.scala-lang.modules.scalajs\" % \"scalajs-sbt-plugin\" % \"0.\n   | +resolvers += Resolver.url(\"scala-js-snapshots\",\n   | +    url(\"http://repo.scala-js.org/repo/snapshots/\"))(Resolver.ivyStylePatt\n[diff] Changes to 'project/build.sbt' - line 224 of 367                    61%\nEOF\n\ntest_case noprefix \\\n --args='show ee912870202200a0b9cf4fd86ba57243212d341e' \\\n --before='git config diff.noprefix true' \\\n --after='git config diff.noprefix false' \\\n --script=\"$script\" << EOF\n   | -  )\n   | -\n   |    lazy val parent: Project = Project(\n200|        id = \"parent\",\n   |        base = file(\".\"),\n   | @@ -53,10 +48,10 @@ object ScalaJSBenchmarks extends Build {\n   |    )\n   |\n205|    lazy val common = project(\"Common\", defaultSettings)\n   | -  lazy val deltablue = project(\"DeltaBlue\", benchmarkSettings).dependsOn(c\n   | -  lazy val richards = project(\"Richards\", benchmarkSettings).dependsOn(com\n   | -  lazy val sudoku = project(\"Sudoku\", benchmarkSettings).dependsOn(common)\n   | -  lazy val tracer = project(\"Tracer\", benchmarkSettings).dependsOn(common)\n210| +  lazy val deltablue = project(\"DeltaBlue\", defaultSettings).dependsOn(com\n   | +  lazy val richards = project(\"Richards\", defaultSettings).dependsOn(commo\n   | +  lazy val sudoku = project(\"Sudoku\", defaultSettings).dependsOn(common)\n   | +  lazy val tracer = project(\"Tracer\", defaultSettings).dependsOn(common)\n   |\n215|    def project(id: String, settings: Seq[sbt.Def.Setting[_]]) = Project(\n   |        id = id.toLowerCase,\n   | diff --git project/build.sbt project/build.sbt\n   | index 87c2e66..122abd0 100644\n   | --- project/build.sbt\n220| +++ project/build.sbt\n   | @@ -1 +1,4 @@\n   | -addSbtPlugin(\"org.scala-lang.modules.scalajs\" % \"scalajs-sbt-plugin\" % \"0.\n   | +resolvers += Resolver.url(\"scala-js-snapshots\",\n   | +    url(\"http://repo.scala-js.org/repo/snapshots/\"))(Resolver.ivyStylePatt\n[diff] Changes to 'project/build.sbt' - line 224 of 367                    61%\nEOF\n\ntest_case default-conflict \\\n --before='setup-conflict.sh > config.setup' \\\n --script='\n \t:view-diff\n\t:7\n\t:edit\n\n\t:10\n\t:exec !vim +%(lineno) %(file)\n' << EOF\n  1| diff --cc conflict-file\n   | index 86c5a05,b4c3de6..0000000\n   | --- a/conflict-file\n   | +++ b/conflict-file\n  5| @@@ -1,1 -1,1 +1,5 @@@\n   | ++<<<<<<< HEAD\n   |  +c'\n   | ++=======\n   | + d'\n 10| ++>>>>>>> conflict-branch\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[stage] Unstaged changes to 'conflict-file' - line 10 of 10                 100%\nEOF\n\ntest_case noprefix-conflict \\\n --before='git config diff.noprefix true' \\\n --after='git config diff.noprefix false' \\\n --script='\n \t:view-diff\n\t:7\n\t:edit\n\n\t:10\n\t:exec !vim +%(lineno) %(file)\n' << EOF\n  1| diff --cc conflict-file\n   | index 86c5a05,b4c3de6..0000000\n   | --- conflict-file\n   | +++ conflict-file\n  5| @@@ -1,1 -1,1 +1,5 @@@\n   | ++<<<<<<< HEAD\n   |  +c'\n   | ++=======\n   | + d'\n 10| ++>>>>>>> conflict-branch\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[stage] Unstaged changes to 'conflict-file' - line 10 of 10                 100%\nEOF\n\nrun_test_cases\n\nassert_equals 'editor.log' <<EOF\n+52 project/Build.scala\n  lazy val richards = project(\"Richards\", defaultSettings).dependsOn(common)\n+2 project/build.sbt\n    url(\"http://repo.scala-js.org/repo/snapshots/\"))(Resolver.ivyStylePatterns)\n+52 project/Build.scala\n  lazy val richards = project(\"Richards\", defaultSettings).dependsOn(common)\n+2 project/build.sbt\n    url(\"http://repo.scala-js.org/repo/snapshots/\"))(Resolver.ivyStylePatterns)\ncommon/benchmark-runner.sh\n#!/bin/sh\n#                     __\n#     ________ ___   / /  ___      __ ____  Scala.js Benchmarks\n#    / __/ __// _ | / /  / _ | __ / // __/  (c) 2013, Jonas Fonseca\n#  __\\\\ \\\\/ /__/ __ |/ /__/ __ |/_// /_\\\\ \\\\\ntracer/src/main/scala/org/scalajs/benchmark/tracer/Tracer.scala\n/*                     __                                               *\\\\\n**     ________ ___   / /  ___      __ ____  Scala.js Benchmarks        **\n**    / __/ __// _ | / /  / _ | __ / // __/  Adam Burmister             **\n**  __\\\\ \\\\/ /__/ __ |/ /__/ __ |/_// /_\\\\ \\\\    2012, Google, Inc          **\n** /____/\\\\___/_/ |_/____/_/ | |__/ /____/    2013, Jonas Fonseca        **\n+52 project/Build.scala\n  lazy val richards = project(\"Richards\", defaultSettings).dependsOn(common)\n+2 project/build.sbt\n    url(\"http://repo.scala-js.org/repo/snapshots/\"))(Resolver.ivyStylePatterns)\n+52 project/Build.scala\n  lazy val richards = project(\"Richards\", defaultSettings).dependsOn(common)\n+2 project/build.sbt\n    url(\"http://repo.scala-js.org/repo/snapshots/\"))(Resolver.ivyStylePatterns)\n+2 conflict-file\nc'\n+5 conflict-file\n>>>>>>> conflict-branch\n+2 conflict-file\nc'\n+5 conflict-file\n>>>>>>> conflict-branch\nEOF\n\nassert_equals 'exec-env' <<EOF\ndefault\n - pwd=ROOT/work-dir\n - git-dir=ROOT/base/.git/worktrees/work-dir\n - show-cdup=\n - is-inside-work-tree=true\n - show-superproject-working-tree=\ndefault::exec\n - pwd=ROOT/work-dir\n - git-dir=ROOT/base/.git/worktrees/work-dir\n - show-cdup=\n - is-inside-work-tree=true\n - show-superproject-working-tree=\nsub-directory\n - pwd=ROOT/work-dir/some/subdir\n - git-dir=ROOT/base/.git/worktrees/work-dir\n - show-cdup=../../\n - is-inside-work-tree=true\n - show-superproject-working-tree=\nsub-directory::exec\n - pwd=ROOT/work-dir\n - git-dir=ROOT/base/.git/worktrees/work-dir\n - show-cdup=\n - is-inside-work-tree=true\n - show-superproject-working-tree=\nsub-directory-diffstat\n - pwd=ROOT/work-dir/some/subdir\n - git-dir=ROOT/base/.git/worktrees/work-dir\n - show-cdup=../../\n - is-inside-work-tree=true\n - show-superproject-working-tree=\nsub-directory-diffstat::exec\n - pwd=ROOT/work-dir\n - git-dir=ROOT/base/.git/worktrees/work-dir\n - show-cdup=\n - is-inside-work-tree=true\n - show-superproject-working-tree=\nEOF\n"
  },
  {
    "path": "test/diff/wrap-lines-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport COLUMNS=40\n\nsteps '\n\t:save-display wrapped.screen\n'\n\ntigrc <<EOF\nset line-graphics = utf-8\nset wrap-lines = true\nEOF\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\ntest_tig show\n\nassert_equals 'wrapped.screen' <<EOF\ncommit ee912870202200a0b9cf4fd86ba572432\n12d341e\nRefs: [master]\nAuthor:     Jonas Fonseca <jonas.fonseca\n+@gmail.com>\nAuthorDate: Sat Mar 1 17:26:01 2014 -050\n+0\nCommit:     Jonas Fonseca <jonas.fonseca\n+@gmail.com>\nCommitDate: Sat Mar 1 17:26:01 2014 -050\n+0\n\n    WIP: Upgrade to 0.4-SNAPSHOT and DCE\n---\n .../benchmark-runner.sh   |  5 ++-\n .../Benchmark.scala       | 11 +++---\n .../BenchmarkApp.scala    |  2 +-\n common/start-benchmark.js |  9 ++++-\n deltablue/exports.js      | 13 -------\n .../DeltaBlue.scala       |  7 ++++\n project/Build.scala       | 13 ++-----\n project/build.sbt         |  5 ++-\n richards/exports.js       | 13 -------\n .../Richards.scala        |  3 ++\n run.sh                    |  2 +-\n sudoku/exports.js         | 13 -------\n .../sudoku/Sudoku.scala   |  2 +\n tracer/exports.js         | 13 -------\n[diff] ee912870202200a0b9cf4fd86ba572 5%\nEOF\n"
  },
  {
    "path": "test/graph/00-simple-test",
    "content": "#!/bin/sh\n#\n# Graph test: simple\n\n. libtest.sh\n\ntest_graph <<EOF\ncommit f e d\n    Merge branch 'branch3'\ncommit e b c\n    Merge branch 'branch2'\ncommit d a\n    branch3\ncommit c a\n    branch2\ncommit b a\n    branch1\ncommit a\n    init\nEOF\n\nassert_equals stdout <<EOF\n●─╮ Merge branch 'branch3'\n●─│─╮ Merge branch 'branch2'\n│ ∙ │ branch3\n│ │ ∙ branch2\n∙ │ │ branch1\n◎─┴─╯ init\nEOF\n"
  },
  {
    "path": "test/graph/01-merge-from-left-test",
    "content": "#!/bin/sh\n#\n# Graph test: merge from left\n\n. libtest.sh\n\ntest_graph <<EOF\ncommit A B C\n    Commit A - Merge C into B\ncommit C B D\n    Commit C - Merge D into B\ncommit B E\n    Commit B after E\ncommit E D\n    Commit E after D\ncommit D\n    Commit D\nEOF\n\nassert_equals stdout <<EOF\n●─╮ Commit A - Merge C into B\n│ ●─╮ Commit C - Merge D into B\n∙─╯ │ Commit B after E\n∙ ╭─╯ Commit E after D\n◎─╯ Commit D\nEOF\n"
  },
  {
    "path": "test/graph/02-duplicate-parent-test",
    "content": "#!/bin/sh\n#\n# Graph test: duplicate parent\n\n. libtest.sh\n\ntest_graph <<EOF\ncommit A B C\n    Commit A - Merge C into B\ncommit B C E\n    Commit B - Merge E into C\ncommit C D\n    Commit C after D\ncommit E D\n    Commit E after D\ncommit D F\n    Commit D after F\ncommit F G H\n    Commit F - Merge H into G\ncommit G H I\n    Commit G - Merge I into H\ncommit I H\n    Commit I after H\ncommit H\n    Commit H\nEOF\n\nassert_equals stdout <<EOF\n●─╮ Commit A - Merge C into B\n●─│─╮ Commit B - Merge E into C\n∙─╯ │ Commit C after D\n│ ∙─╯ Commit E after D\n∙─╯ Commit D after F\n●─╮ Commit F - Merge H into G\n●─│─╮ Commit G - Merge I into H\n│ │ ∙ Commit I after H\n◎─┴─╯ Commit H\nEOF\n"
  },
  {
    "path": "test/graph/03-octo-merge-test",
    "content": "#!/bin/sh\n#\n# Graph test: octo merge\n\n. libtest.sh\n\ntest_graph <<EOF\ncommit A B C D\n    Commit A - Merges B, C, and D\ncommit C E\n    Commit C after E\ncommit E D B\n    Commit E - Merges D and B\ncommit B D\n    Commit B after D\ncommit D\n    Commit D\nEOF\n\nassert_equals stdout <<EOF\n●─┬─╮ Commit A - Merges B, C, and D\n│ ∙ │ Commit C after E\n│ ●─│─╮ Commit E - Merges D and B\n∙─│─│─╯ Commit B after D\n◎─┴─╯ Commit D\nEOF\n"
  },
  {
    "path": "test/graph/04-missing-bar-test",
    "content": "#!/bin/sh\n#\n# Graph test: missing bar\n\n. libtest.sh\n\ntest_graph <<EOF\ncommit A B C\n    Commit A - Merge B and C\ncommit B D E\n    Commit B - Merge D and E\ncommit C F\n    Commit C after F\ncommit F G D\n    Commit F - Merge G and D\ncommit D G\n    Commit D after G\ncommit G E\n    Commit G after E\ncommit E\n    Commit E\nEOF\n\nassert_equals stdout <<EOF\n●─╮ Commit A - Merge B and C\n●─│─╮ Commit B - Merge D and E\n│ ∙ │ Commit C after F\n│ ●─│─╮ Commit F - Merge G and D\n∙─│─│─╯ Commit D after G\n∙─╯ │ Commit G after E\n◎───╯ Commit E\nEOF\n"
  },
  {
    "path": "test/graph/05-extra-pipe-test",
    "content": "#!/bin/sh\n#\n# Graph test: extra pipe\n\n. libtest.sh\n\ntest_graph <<EOF\ncommit A B C\n    Commit A - merge B and C\ncommit C D\n    Commit C after D\ncommit B E D\n    Commit B - merge E and D\ncommit D F\n    Commit D after F\ncommit E\n    Commit E\ncommit F\n    Commit F\nEOF\n\nassert_equals stdout <<EOF\n●─╮ Commit A - merge B and C\n│ ∙ Commit C after D\n●─│─╮ Commit B - merge E and D\n│ ∙─╯ Commit D after F\n◎ │ Commit E\n◎─╯ Commit F\nEOF\n"
  },
  {
    "path": "test/graph/06-extra-bars-test",
    "content": "#!/bin/sh\n#\n# Graph test: extra bars\n\n. libtest.sh\n\ntest_graph <<EOF\ncommit A B C\n    Commit A - merge B and C\ncommit C B\n    Commit C - after B\ncommit D B\n    Commit D - after B\ncommit E F\n    Commit E - after F\ncommit F G\n    Commit F - after G\ncommit G H\n    Commit G - after H\ncommit H I\n    Commit H - after I\ncommit I J\n    Commit I - after J\ncommit J K\n    Commit J - after K\ncommit K L\n    Commit K - after L\ncommit L M\n    Commit L - after M\ncommit M N\n    Commit M - after N\ncommit N O\n    Commit N - after O\ncommit O P\n    Commit O - after P\ncommit B Q R\n    Commit B - merge Q and R\ncommit R Q\n    Commit R - after Q\ncommit Q S T\n    Commit Q - merge S and T\ncommit T S\n    Commit T - after S\ncommit P U\n    Commit P - after U\ncommit U V\n    Commit U - after V\ncommit V W\n    Commit V - after W\ncommit S X Y\n    Commit S - merge X and Y\ncommit Z 1\n    Commit Z - after 1\ncommit Y X\n    Commit Y - after X\ncommit X 2 3\n    Commit X - merge 2 and 3\ncommit 3 2\n    Commit 3 - after 2\ncommit 4 5\n    Commit 4 - after 5\ncommit 5 6\n    Commit 5 - after 6\ncommit W 7\n    Commit W - after 7\ncommit 6 8\n    Commit 6 - after 8\ncommit 7 9\n    Commit 7 - after 9\ncommit 2 0 a\n    Commit 2 - merge 0 and a\ncommit a b\n    Commit a - after b\ncommit b c\n    Commit b - after c\ncommit c d 0\n    Commit c - merge d and 0\ncommit 8 e\n    Commit 8 - after e\ncommit e f\n    Commit e - after f\ncommit f g\n    Commit f - after g\ncommit 0 h i\n    Commit 0 - merge h and i\ncommit g j\n    Commit g - after j\ncommit j k\n    Commit j - after k\ncommit k l\n    Commit k - after l\ncommit l m\n    Commit l - after m\ncommit m n\n    Commit m - after n\ncommit n o\n    Commit n - after o\ncommit o p\n    Commit o - after p\ncommit p 1\n    Commit p - after 1\ncommit 9 q\n    Commit 9 - after q\ncommit 1 r\n    Commit 1 - after r\ncommit i h\n    Commit i - after h\ncommit d h\n    Commit d - after h\ncommit r s\n    Commit r - after s\ncommit h t u\n    Commit h - merge t and u\ncommit s v\n    Commit s - after v\ncommit u t\n    Commit u - after t\ncommit w x\n    Commit w - after x\ncommit x y\n    Commit x - after y\nEOF\n\nassert_equals stdout <<EOF\n●─╮ Commit A - merge B and C\n│ ∙ Commit C - after B\n│ │ ∙ Commit D - after B\n│ │ │ ∙ Commit E - after F\n│ │ │ ∙ Commit F - after G\n│ │ │ ∙ Commit G - after H\n│ │ │ ∙ Commit H - after I\n│ │ │ ∙ Commit I - after J\n│ │ │ ∙ Commit J - after K\n│ │ │ ∙ Commit K - after L\n│ │ │ ∙ Commit L - after M\n│ │ │ ∙ Commit M - after N\n│ │ │ ∙ Commit N - after O\n│ │ │ ∙ Commit O - after P\n●─┼─╯ │ Commit B - merge Q and R\n│ ∙ ╭─╯ Commit R - after Q\n●─┤ │ Commit Q - merge S and T\n│ ∙ │ Commit T - after S\n│ │ ∙ Commit P - after U\n│ │ ∙ Commit U - after V\n│ │ ∙ Commit V - after W\n●─┤ │ Commit S - merge X and Y\n│ │ │ ∙ Commit Z - after 1\n│ ∙ │ │ Commit Y - after X\n●─┤ │ │ Commit X - merge 2 and 3\n│ ∙ │ │ Commit 3 - after 2\n│ │ │ │ ∙ Commit 4 - after 5\n│ │ │ │ ∙ Commit 5 - after 6\n│ │ ∙ │ │ Commit W - after 7\n│ │ │ │ ∙ Commit 6 - after 8\n│ │ ∙ │ │ Commit 7 - after 9\n●─┤ │ │ │ Commit 2 - merge 0 and a\n│ ∙ │ │ │ Commit a - after b\n│ ∙ │ │ │ Commit b - after c\n│ ●─│─│─│─╮ Commit c - merge d and 0\n│ │ │ │ ∙ │ Commit 8 - after e\n│ │ │ │ ∙ │ Commit e - after f\n│ │ │ │ ∙ │ Commit f - after g\n●─│─│─│─│─┤ Commit 0 - merge h and i\n│ │ │ │ ∙ │ Commit g - after j\n│ │ │ │ ∙ │ Commit j - after k\n│ │ │ │ ∙ │ Commit k - after l\n│ │ │ │ ∙ │ Commit l - after m\n│ │ │ │ ∙ │ Commit m - after n\n│ │ │ │ ∙ │ Commit n - after o\n│ │ │ │ ∙ │ Commit o - after p\n│ │ │ │ ∙ │ Commit p - after 1\n│ │ ∙ │ │ │ Commit 9 - after q\n│ │ │ ∙─╯ │ Commit 1 - after r\n│ │ │ │ ∙─╯ Commit i - after h\n│ ∙ │ │ │ Commit d - after h\n│ │ │ ∙ │ Commit r - after s\n●─┼─│─│─╯ Commit h - merge t and u\n│ │ │ ∙ Commit s - after v\n│ ∙ │ │ Commit u - after t\n│ │ │ │ ∙ Commit w - after x\n│ │ │ │ ∙ Commit x - after y\nEOF\n"
  },
  {
    "path": "test/graph/07-multi-collapse-test",
    "content": "#!/bin/sh\n#\n# Graph test: multi collapse\n\n. libtest.sh\n\ntest_graph <<EOF\ncommit A B C D E F\n    Commit A - merge B, C, D, E, and F\ncommit C B\n    Commit C - after B\ncommit B H\n    Commit B - after H\ncommit F G\n    Commit F - after G\ncommit H D\n    Commit H - after D\ncommit D E\n    Commit D - after E\ncommit E G\n    Commit E - after G\ncommit G\n    Commit G\nEOF\n\nassert_equals stdout <<EOF\n●─┬─┬─┬─╮ Commit A - merge B, C, D, E, and F\n│ ∙ │ │ │ Commit C - after B\n∙─╯ │ │ │ Commit B - after H\n│ ╭─╯ │ ∙ Commit F - after G\n∙ │ ╭─╯ │ Commit H - after D\n∙─╯ │ ╭─╯ Commit D - after E\n∙───╯ │ Commit E - after G\n◎─────╯ Commit G\nEOF\n"
  },
  {
    "path": "test/graph/08-multi-collapse-2-test",
    "content": "#!/bin/sh\n#\n# Graph test: multi collapse 2\n\n. libtest.sh\n\ntest_graph <<EOF\ncommit A Z B C D E F\n    Commit A - merge Z, B, C, D, E, and F\ncommit C B\n    Commit C - after B\ncommit B H\n    Commit B - after H\ncommit F G\n    Commit F - after G\ncommit H D\n    Commit H - after D\ncommit D E\n    Commit D - after E\ncommit E G\n    Commit E - after G\ncommit G Z\n    Commit G - after Z\ncommit Z\n    Commit Z\nEOF\n\nassert_equals stdout <<EOF\n●─┬─┬─┬─┬─╮ Commit A - merge Z, B, C, D, E, and F\n│ │ ∙ │ │ │ Commit C - after B\n│ ∙─╯ │ │ │ Commit B - after H\n│ │ ╭─╯ │ ∙ Commit F - after G\n│ ∙ │ ╭─╯ │ Commit H - after D\n│ ∙─╯ │ ╭─╯ Commit D - after E\n│ ∙───╯ │ Commit E - after G\n│ ∙─────╯ Commit G - after Z\n◎─╯ Commit Z\nEOF\n"
  },
  {
    "path": "test/graph/09-parallel-siblings-test",
    "content": "#!/bin/sh\n#\n# Graph test: parallel siblings\n\n. libtest.sh\n\ntest_graph <<EOF\ncommit A Z B C\n    Commit A - merge Z, B, and C\ncommit B D C\n    Commit B - merge D and C\ncommit D E C\n    Commit D - merge C and E\ncommit E Z\n    Commit E - after Z\ncommit Z Y\n    Commit Z - after Y\ncommit Y X\n    Commit Y - after X\ncommit X W\n    Commit X - after W\ncommit W C\n    Commit W - after C\ncommit C\n    Commit C\nEOF\n\nassert_equals stdout <<EOF\n●─┬─╮ Commit A - merge Z, B, and C\n│ ●─│─╮ Commit B - merge D and C\n│ ●─│─│─╮ Commit D - merge C and E\n│ ∙ │ │ │ Commit E - after Z\n∙─╯ │ │ │ Commit Z - after Y\n∙ ╭─╯ │ │ Commit Y - after X\n∙ │ ╭─╯ │ Commit X - after W\n∙ │ │ ╭─╯ Commit W - after C\n◎─┴─┴─╯ Commit C\nEOF\n"
  },
  {
    "path": "test/graph/10-shorter-merge-than-branch-test",
    "content": "#!/bin/sh\n#\n# Graph test: shorter merge than branch\n\n. libtest.sh\n\ntest_graph <<EOF\ncommit A H B C D J E\n    Commit A - merge H, B, C, D, and E\ncommit B K\n    Commit B - after K\ncommit C H\n    Commit C - after H\ncommit J I\n    Commit J - after I\ncommit D K\n    Commit D - after K\ncommit E F\n    Commit E - after F\ncommit K F\n    Commit K - after F\ncommit F G H\n    Commit F - merge G and H\ncommit G I\n    Commit G - after I\ncommit H I\n    Commit H - after I\ncommit I\n    Commit I\nEOF\n\nassert_equals stdout <<EOF\n●─┬─┬─┬─┬─╮ Commit A - merge H, B, C, D, and E\n│ ∙ │ │ │ │ Commit B - after K\n│ │ ∙ │ │ │ Commit C - after H\n│ │ │ │ ∙ │ Commit J - after I\n│ │ │ ∙ │ │ Commit D - after K\n│ │ │ │ │ ∙ Commit E - after F\n│ ∙─│─╯ │ │ Commit K - after F\n│ ●─│─╭─╯─┤ Commit F - merge G and H\n│ ∙ │ │ ╭─╯ Commit G - after I\n∙─│─┴─│─╯ Commit H - after I\n◎─┴───╯ Commit I\nEOF\n"
  },
  {
    "path": "test/graph/11-new-branch-in-middle-test",
    "content": "#!/bin/sh\n#\n# Graph test: new branch in middle\n\n. libtest.sh\n\ntest_graph <<EOF\ncommit A B C E\n    Commit A - merge B, C, and E\ncommit B F\n    Commit B - after F\ncommit C F\n    Commit C - after F\ncommit E Z\n    Commit E - after Z\ncommit F G I\n    Commit F - merge G and I\ncommit G H I\n    Commit G - merge H and I\ncommit H I\n    Commit H - after I\ncommit I Z\n    Commit I - after Z\ncommit Z\n    Commit Z\nEOF\n\nassert_equals stdout <<EOF\n●─┬─╮ Commit A - merge B, C, and E\n∙ │ │ Commit B - after F\n│ ∙ │ Commit C - after F\n│ │ ∙ Commit E - after Z\n●─┤ │ Commit F - merge G and I\n●─│─│─╮ Commit G - merge H and I\n∙ │ │ │ Commit H - after I\n∙─┴─│─╯ Commit I - after Z\n◎───╯ Commit Z\nEOF\n"
  },
  {
    "path": "test/graph/12-cross-over-collapse-test",
    "content": "#!/bin/sh\n#\n# Graph test: cross over collapse\n\n. libtest.sh\n\ntest_graph <<EOF\ncommit A B D E\n    Commit A - merge B, D, and E\ncommit B F\n    Commit B - after F\ncommit D F\n    Commit D - after F\ncommit E Z\n    Commit E - after Z\ncommit F G\n    Commit F - after I\ncommit G H I\n    Commit F - merge H and I\ncommit H I\n    Commit H - after I\ncommit I Z\n    Commit I - after Z\ncommit Z\n    Commit Z\nEOF\n\nassert_equals stdout <<EOF\n●─┬─╮ Commit A - merge B, D, and E\n∙ │ │ Commit B - after F\n│ ∙ │ Commit D - after F\n│ │ ∙ Commit E - after Z\n∙─╯ │ Commit F - after I\n●─╭─╯─╮ Commit F - merge H and I\n∙ │ ╭─╯ Commit H - after I\n∙─│─╯ Commit I - after Z\n◎─╯ Commit Z\nEOF\n"
  },
  {
    "path": "test/graph/13-collapse-parallel-branches-with-different-middle-branch-test",
    "content": "#!/bin/sh\n#\n# Graph test: collapse parallel branches with different middle branch\n\n. libtest.sh\n\ntest_graph <<EOF\ncommit A B C D E F\n    Commit A - merge B, C, D, E, and F\ncommit D I\n    Commit D - after I\ncommit E J\n    Commit E - after J\ncommit F I\n    Commit F - after I\ncommit B C\n    Commit B - after C\ncommit C G\n    Commit C - after G\ncommit G H\n    Commit G - after H\ncommit H I\n    Commit H - after I\ncommit I J\n    Commit I - after J\ncommit J\n    Commit J\nEOF\n\nassert_equals stdout <<EOF\n●─┬─┬─┬─╮ Commit A - merge B, C, D, E, and F\n│ │ ∙ │ │ Commit D - after I\n│ │ │ ∙ │ Commit E - after J\n│ │ │ │ ∙ Commit F - after I\n∙ │ │ │ │ Commit B - after C\n∙─╯ │ │ │ Commit C - after G\n∙ ╭─╯ │ │ Commit G - after H\n∙ │ ╭─╯ │ Commit H - after I\n∙─┴─│───╯ Commit I - after J\n◎───╯ Commit J\nEOF\n"
  },
  {
    "path": "test/graph/14-long-collapse-line-test",
    "content": "#!/bin/sh\n#\n# Graph test: long collapse line\n\n. libtest.sh\n\ntest_graph <<EOF\ncommit A B C D E F G\n    Commit A - merge B, C, D, E, F, and G\ncommit C B\n    Commit C - after B\ncommit D B\n    Commit D - after B\ncommit E B\n    Commit E - after B\ncommit F B\n    Commit F - after B\ncommit B H\n    Commit B - after H\ncommit H I G\n    Commit H - merge I and G\ncommit I J\n    Commit I - after J\ncommit G J\n    Commit G - after J\ncommit J K\n    Commit J - after K\ncommit K L M N O P Q\n    Commit K - merge L, M, N, O, P, and Q\ncommit M L\n    Commit M - after L\ncommit N L\n    Commit N - after L\ncommit O L\n    Commit O - after L\ncommit P L\n    Commit P - after L\ncommit L R\n    Commit L - after R\ncommit R S T\n    Commit R - merge S and T\ncommit S Q\n    Commit S - after Q\ncommit T Q\n    Commit T - after Q\ncommit Q\n    Commit Q\nEOF\n\nassert_equals stdout <<EOF\n●─┬─┬─┬─┬─╮ Commit A - merge B, C, D, E, F, and G\n│ ∙ │ │ │ │ Commit C - after B\n│ │ ∙ │ │ │ Commit D - after B\n│ │ │ ∙ │ │ Commit E - after B\n│ │ │ │ ∙ │ Commit F - after B\n∙─┴─┴─┴─╯ │ Commit B - after H\n●─╭───────╯─╮ Commit H - merge I and G\n∙ │ ╭───────╯ Commit I - after J\n│ ∙─╯ Commit G - after J\n∙─╯ Commit J - after K\n●─┬─┬─┬─┬─╮ Commit K - merge L, M, N, O, P, and Q\n│ ∙ │ │ │ │ Commit M - after L\n│ │ ∙ │ │ │ Commit N - after L\n│ │ │ ∙ │ │ Commit O - after L\n│ │ │ │ ∙ │ Commit P - after L\n∙─┴─┴─┴─╯ │ Commit L - after R\n●─╭───────╯─╮ Commit R - merge S and T\n∙ │ ╭───────╯ Commit S - after Q\n│ │ ∙ Commit T - after Q\n◎─┴─╯ Commit Q\nEOF\n"
  },
  {
    "path": "test/graph/15-many-merges-test",
    "content": "#!/bin/sh\n#\n# Graph test: many merges\n\n. libtest.sh\n\ntest_graph <<EOF\ncommit P N O\n    Commit P - Merge O into N\ncommit O M\n    Commit O after M\ncommit N L M\n    Commit N - Merge M into L\ncommit M K\n    Commit M after K\ncommit L J K\n    Commit L - Merge K into J\ncommit K E J\n    Commit K - Merge J into E\ncommit J I F\n    Commit J - Merge F into I\ncommit I C H\n    Commit I - Merge H into C\ncommit H G\n    Commit H after G\ncommit F C\n    Commit F after C\ncommit E D\n    Commit E after D\ncommit C A B\n    Commit C - Merge B into A\ncommit D Q\n    Commit D after Q\ncommit B R\n    Commit B after R\ncommit R A\n    Commit R after A\ncommit Q X\n    Commit Q after X\ncommit A S T\n    Commit A - Merge T into S\ncommit T U\n    Commit T after U\ncommit U V\n    Commit U after V\ncommit V W\n    Commit V after W\nEOF\n\nassert_equals stdout <<EOF\n●─╮ Commit P - Merge O into N\n│ ∙ Commit O after M\n●─│─╮ Commit N - Merge M into L\n│ ∙─╯ Commit M after K\n●─│─╮ Commit L - Merge K into J\n│ ●─┤ Commit K - Merge J into E\n●─│─╯ Commit J - Merge F into I\n●─│─│─╮ Commit I - Merge H into C\n│ │ │ ∙ Commit H after G\n│ │ ∙ │ Commit F after C\n│ ∙ │ │ Commit E after D\n●─│─┤ │ Commit C - Merge B into A\n│ ∙ │ │ Commit D after Q\n│ │ ∙ │ Commit B after R\n│ │ ∙ │ Commit R after A\n│ ∙ │ │ Commit Q after X\n●─│─┤ │ Commit A - Merge T into S\n│ │ ∙ │ Commit T after U\n│ │ ∙ │ Commit U after V\n│ │ ∙ │ Commit V after W\nEOF\n"
  },
  {
    "path": "test/graph/16-changes-test",
    "content": "#!/bin/sh\n#\n# Graph test: changes\n\n. libtest.sh\n\ntest_graph <<EOF\ncommit 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000\n    Staged changes\ncommit 0000000000000000000000000000000000000000 007ae1f1c611254aaf67b71d42d2326be7ab4047\n    Unstaged changes\ncommit 007ae1f1c611254aaf67b71d42d2326be7ab4047 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n    First commit\ncommit XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n    Last commit\nEOF\n\nassert_equals stdout <<EOF\n∙ Staged changes\n∙ Unstaged changes\n∙ First commit\n◎ Last commit\nEOF\n"
  },
  {
    "path": "test/graph/17-more-merges-test",
    "content": "#!/bin/sh\n#\n# Graph test: more\n\n. libtest.sh\n\ntest_graph <<EOF\ncommit A B C D E\n    Commit A - merge B, C, D, and E\ncommit D B\n    Commit D - after B\ncommit C F\n    Commit C - after F\ncommit E H\n    Commit E - after H\ncommit B H F\n    Commit B - merge H and F\ncommit F G\n    Commit F - after G\ncommit G H\n    Commit G - after H\ncommit H I\n    Commit H - after I\ncommit I J K L M P O\n    Commit I - merge J, K, L, M, P, and O\ncommit K J\n    Commit K - after J\ncommit J N\n    Commit J - after N\ncommit N O\n    Commit N - after O\ncommit O Q\n    Commit O - after Q\ncommit Q R S\n    Commit Q - merge R and S\ncommit R T U\n    Commit R - merge T and U\ncommit T V W\n    Commit T - merge V and W\ncommit V X W\n    Commit V - merge X and W\ncommit X Y Z\n    Commit X - merge Y and Z\ncommit W\n    Commit W\ncommit M Y 1 2\n    Commit M - merge Y, 1, and 2\ncommit P Y\n    Commit P - after Y\ncommit Z Y\n    Commit Z - after Y\ncommit Y 1\n    Commit Y - after 1\ncommit 1 2\n    Commit 1 - after 2\ncommit 2 S\n    Commit 2 - after S\ncommit S U\n    Commit S - after U\ncommit U 3\n    Commit U - after 3\ncommit 3 4 5 8\n    Commit 3 - merge 4, 5, and 8\ncommit 4 6 5\n    Commit 4 - merge 6 and 5\ncommit 5 7 9\n    Commit 5 - merge 7 and 9\ncommit 6 A 9\n    Commit 6 - merge A and 9\ncommit A\n    Commit A\ncommit L\n    Commit L\ncommit 7\n    Commit 7\ncommit 8\n    Commit 8\ncommit 9\n    Commit 9\nEOF\n\nassert_equals stdout <<EOF\n●─┬─┬─╮ Commit A - merge B, C, D, and E\n│ │ ∙ │ Commit D - after B\n│ ∙ │ │ Commit C - after F\n│ │ │ ∙ Commit E - after H\n●─│─┤ │ Commit B - merge H and F\n│ ∙─╯ │ Commit F - after G\n│ ∙ ╭─╯ Commit G - after H\n∙─┴─╯ Commit H - after I\n●─┬─┬─┬─┬─╮ Commit I - merge J, K, L, M, P, and O\n│ ∙ │ │ │ │ Commit K - after J\n∙─╯ │ │ │ │ Commit J - after N\n∙ ╭─╯ │ │ │ Commit N - after O\n∙─│─╭─╯─│─╯ Commit O - after Q\n●─│─│─╭─╯─╮ Commit Q - merge R and S\n●─│─│─│─╭─╯─╮ Commit R - merge T and U\n●─│─│─│─│─╭─╯─╮ Commit T - merge V and W\n●─│─│─│─│─│─╭─╯─╮ Commit V - merge X and W\n●─│─│─│─│─│─│─╭─╯─╮ Commit X - merge Y and Z\n│ │ │ │ │ │ ◎─╯ ╭─╯ Commit W\n│ │ ●─│─│─│─╭───╯─┬─╮ Commit M - merge Y, 1, and 2\n│ │ │ ∙ │ │ │ ╭───╯ │ Commit P - after Y\n│ │ │ │ │ │ ∙ │ ╭───╯ Commit Z - after Y\n∙─│─┴─┴─│─│─╯ │ │ Commit Y - after 1\n∙─│─╭───╯─│───╯ │ Commit 1 - after 2\n∙─│─│─╭───╯─────╯ Commit 2 - after S\n∙─│─╯ │ Commit S - after U\n∙─│───╯ Commit U - after 3\n●─│─┬─╮ Commit 3 - merge 4, 5, and 8\n●─│─│─│─╮ Commit 4 - merge 6 and 5\n│ │ ●─│─┤ Commit 5 - merge 7 and 9\n●─│─│─│─│─╮ Commit 6 - merge A and 9\n◎ │ │ │ │ │ Commit A\n◎─╯ │ │ │ │ Commit L\n◎───╯ │ │ │ Commit 7\n◎─────╯ │ │ Commit 8\n◎───────┴─╯ Commit 9\nEOF\n"
  },
  {
    "path": "test/graph/18-tig-test",
    "content": "#!/bin/sh\n#\n# Graph test: tig\n\n. libtest.sh\n\ntest_graph <<EOF\ncommit i h\n    Do not include merges in the announcement's change log\ncommit h g d\n    Merge pull request #81 from esc/fix/reading_git_colors_256\ncommit g f e\n    Merge pull request #80 from esc/fix/option_name_mismatch\ncommit f c\n    Reenable copy/rename detection in the status view\ncommit e c\n    fix: the manpage says 'read-git-colors'\ncommit d c\n    fix: reading git colors in rang 0 255\ncommit c b\n    Remove enforced diff move/copy detection\ncommit b a\n    Optionally show commit IDs for branches and tree entries\nEOF\n\nassert_equals stdout <<EOF\n∙ Do not include merges in the announcement's change log\n●─╮ Merge pull request #81 from esc/fix/reading_git_colors_256\n●─│─╮ Merge pull request #80 from esc/fix/option_name_mismatch\n∙ │ │ Reenable copy/rename detection in the status view\n│ │ ∙ fix: the manpage says 'read-git-colors'\n│ ∙ │ fix: reading git colors in rang 0 255\n∙─┴─╯ Remove enforced diff move/copy detection\n∙ Optionally show commit IDs for branches and tree entries\nEOF\n"
  },
  {
    "path": "test/graph/19-tig-all-test",
    "content": "#!/bin/sh\n#\n# Graph test: tig all\n\n. libtest.sh\n\ntest_graph <<EOF\ncommit 9ba5aa1e29924175e52b79e8b255f1903aa73833 85e82d060ce75a840f84cd53259413461633aaa5 210fe58ba8f4aeb35ddfdae052cf8f0fc4f54ff2\ntree fc9515a1d77204f13690e8a646ab56ec87466736\nparent 85e82d060ce75a840f84cd53259413461633aaa5\nparent 210fe58ba8f4aeb35ddfdae052cf8f0fc4f54ff2\nauthor Benjamin Bergman <bbergman@tenable.com> 1383861571 -0600\ncommitter Benjamin Bergman <bbergman@tenable.com> 1383861571 -0600\n\n    On fix-graph: debug printout stuff\n\ncommit 210fe58ba8f4aeb35ddfdae052cf8f0fc4f54ff2 85e82d060ce75a840f84cd53259413461633aaa5\ntree 0751a22a3cfde6d0c3fad0910c77664b0e9dfd1c\nparent 85e82d060ce75a840f84cd53259413461633aaa5\nauthor Benjamin Bergman <bbergman@tenable.com> 1383861571 -0600\ncommitter Benjamin Bergman <bbergman@tenable.com> 1383861571 -0600\n\n    index on fix-graph: 85e82d0 One more fix\n\ncommit 85e82d060ce75a840f84cd53259413461633aaa5 3c5321af10963dedb71361173e17fea5fddbcd09\ntree 0751a22a3cfde6d0c3fad0910c77664b0e9dfd1c\nparent 3c5321af10963dedb71361173e17fea5fddbcd09\nauthor Benjamin Bergman <bbergman@tenable.com> 1382970000 -0500\ncommitter Benjamin Bergman <bbergman@tenable.com> 1382970000 -0500\n\n    One more fix\n\ncommit 3c5321af10963dedb71361173e17fea5fddbcd09 fa53fb34d6bed0444dfc65254dfccf5ec27fb5a8\ntree 91c965c280d9b6faa89ce6fe648d8676e8233b2a\nparent fa53fb34d6bed0444dfc65254dfccf5ec27fb5a8\nauthor Benjamin Bergman <bbergman@tenable.com> 1382968508 -0500\ncommitter Benjamin Bergman <bbergman@tenable.com> 1382968508 -0500\n\n    Another fix\n\ncommit fa53fb34d6bed0444dfc65254dfccf5ec27fb5a8 48a6ca25bd8c018117f9cd752cd8acf962d90060\ntree badae0344d4e7e59357a2905442aa2ed04505dbf\nparent 48a6ca25bd8c018117f9cd752cd8acf962d90060\nauthor Benjamin Bergman <bbergman@tenable.com> 1382935317 -0500\ncommitter Benjamin Bergman <bbergman@tenable.com> 1382935317 -0500\n\n    Use pre-generated next row\n\ncommit 48a6ca25bd8c018117f9cd752cd8acf962d90060 5a0a8ed21bcf5be036fe66479f2be89d32e4c214\ntree 0579c24b661ed3863bbcc1c6cddafd0a13b9d7fd\nparent 5a0a8ed21bcf5be036fe66479f2be89d32e4c214\nauthor Benjamin Bergman <bbergman@tenable.com> 1382933509 -0500\ncommitter Benjamin Bergman <bbergman@tenable.com> 1382933509 -0500\n\n    Add function to pre-generate next row\n\ncommit 5a0a8ed21bcf5be036fe66479f2be89d32e4c214 2696d90c257f97226447bac12dfa9ec266b1221d\ntree 01d6e82f68c014dd7bf9f3539b7738531ee005cb\nparent 2696d90c257f97226447bac12dfa9ec266b1221d\nauthor Benjamin Bergman <bbergman@tenable.com> 1382906024 -0500\ncommitter Benjamin Bergman <bbergman@tenable.com> 1382906024 -0500\n\n    A little more broken to make it better\n\ncommit 2696d90c257f97226447bac12dfa9ec266b1221d c445378c6aef243a63c805bb1da7afba9821dd07\ntree 3e8dc50a65b9e3a95a128aa65b6a804e2b479e57\nparent c445378c6aef243a63c805bb1da7afba9821dd07\nauthor Benjamin Bergman <bbergman@tenable.com> 1382852608 -0500\ncommitter Benjamin Bergman <bbergman@tenable.com> 1382852608 -0500\n\n    Always insert extra columns at the end\n\ncommit c445378c6aef243a63c805bb1da7afba9821dd07 02cb3450c52aff5f9daafd479e97a52d01edaf2f\ntree ac394f2b65aee9be50ce61eab2c9db6865640777\nparent 02cb3450c52aff5f9daafd479e97a52d01edaf2f\nauthor Benjamin Bergman <bbergman@tenable.com> 1382772930 -0500\ncommitter Benjamin Bergman <bbergman@tenable.com> 1382772930 -0500\n\n    Works for first test case\n\ncommit 02cb3450c52aff5f9daafd479e97a52d01edaf2f 05927494e74b8ddcebfe9163338bf1e6ddb899d5\ntree 0f0513ed6df99f7db29b7b821660636af9f5410b\nparent 05927494e74b8ddcebfe9163338bf1e6ddb899d5\nauthor Benjamin Bergman <bbergman@tenable.com> 1382768031 -0500\ncommitter Benjamin Bergman <bbergman@tenable.com> 1382768031 -0500\n\n    Better, but missing some lines still\n\ncommit 05927494e74b8ddcebfe9163338bf1e6ddb899d5 bc911786d75680d0fa28ac81c846775f6a7c894f\ntree e83f2f19de9422f1a4ba24e406e7daf43b3781bd\nparent bc911786d75680d0fa28ac81c846775f6a7c894f\nauthor Benjamin Bergman <bbergman@tenable.com> 1382764756 -0500\ncommitter Benjamin Bergman <bbergman@tenable.com> 1382764756 -0500\n\n    A little better at the top, a little worse at the bottom\n\ncommit bc911786d75680d0fa28ac81c846775f6a7c894f 7088a1081ba353bd0bb8f3d38426d24861c694c2\ntree 10db6fa2507bd3fa59b3cb6f9701fa48a453d968\nparent 7088a1081ba353bd0bb8f3d38426d24861c694c2\nauthor Jonas Fonseca <fonseca@diku.dk> 1382580247 -0700\ncommitter Jonas Fonseca <fonseca@diku.dk> 1382580247 -0700\n\n    Fix reloading diffs of staged and unstaged changes\n\ncommit 7088a1081ba353bd0bb8f3d38426d24861c694c2 7c949baaf493b812702ec78b087d2540e8827bf3\ntree 19bbb16e4b01bcc7de1412563ca3bf3f5b1c819d\nparent 7c949baaf493b812702ec78b087d2540e8827bf3\nauthor Jonas Fonseca <fonseca@diku.dk> 1382578049 -0700\ncommitter Jonas Fonseca <fonseca@diku.dk> 1382578049 -0700\n\n    Fix map size assertion in parse_enum\n\ncommit fc602a04798a0f1fcb6aa71e9613b0c0acbb7e2f 2be80ae3bc7f056ad88ba71acc47ab99e9dd0166\ntree 82e24ccb2d2cc98fe9e6ebd3464a9ebc31af9863\nparent 2be80ae3bc7f056ad88ba71acc47ab99e9dd0166\nauthor Jonas Fonseca <fonseca@diku.dk> 1377865223 -0400\ncommitter Jonas Fonseca <fonseca@diku.dk> 1382248987 -0400\n\n    Move view draw methods to draw module\n\ncommit 2be80ae3bc7f056ad88ba71acc47ab99e9dd0166 2a45940e80b5326a5fc1b7bbb7d8e1719cf5634d\ntree f2a5888a534af6e521dfd1f9d4820d7a363b08ed\nparent 2a45940e80b5326a5fc1b7bbb7d8e1719cf5634d\nauthor Jonas Fonseca <fonseca@diku.dk> 1377825820 -0400\ncommitter Jonas Fonseca <fonseca@diku.dk> 1382248987 -0400\n\n    Move option handling code to options.c\n\ncommit 2a45940e80b5326a5fc1b7bbb7d8e1719cf5634d 5fc7c50410bcc61bc0dc89a8e2c354444e0e3fad\ntree deafe0b382f3cfb977dc659366648ab5fde465f4\nparent 5fc7c50410bcc61bc0dc89a8e2c354444e0e3fad\nauthor Jonas Fonseca <fonseca@diku.dk> 1377823028 -0400\ncommitter Jonas Fonseca <fonseca@diku.dk> 1382248987 -0400\n\n    Move option declarations to separate files\n\ncommit 5fc7c50410bcc61bc0dc89a8e2c354444e0e3fad 7ecc9fb460c833fa6f669ef2e81b804441b00b95\ntree 1e2eaf1d68d0663d9018c38b960f8b55fd7b6399\nparent 7ecc9fb460c833fa6f669ef2e81b804441b00b95\nauthor Jonas Fonseca <fonseca@diku.dk> 1377822278 -0400\ncommitter Jonas Fonseca <fonseca@diku.dk> 1382248987 -0400\n\n    Use symbols to track diff and log argument formatting\n\ncommit 7ecc9fb460c833fa6f669ef2e81b804441b00b95 aa2eabbb7879cabe87b2fa22d186848ebf51497d\ntree d83e96ffc715863c88b2906b1256040fcd74c206\nparent aa2eabbb7879cabe87b2fa22d186848ebf51497d\nauthor Jonas Fonseca <fonseca@diku.dk> 1377821969 -0400\ncommitter Jonas Fonseca <fonseca@diku.dk> 1382248986 -0400\n\n    Group environment-based options\n\ncommit aa2eabbb7879cabe87b2fa22d186848ebf51497d 951666702f8705388fc3b980ce09ad4be069fe30\ntree b9bae82e2fcacff2c65a6d8ca0ac18abf2d4b1b5\nparent 951666702f8705388fc3b980ce09ad4be069fe30\nauthor Jonas Fonseca <fonseca@diku.dk> 1378434482 -0400\ncommitter Jonas Fonseca <fonseca@diku.dk> 1382248986 -0400\n\n    Move refs helpers to refs module\n\ncommit 951666702f8705388fc3b980ce09ad4be069fe30 d9c8a7473f3c81957316998910305b8bc346ee89\ntree 2390627cd8caf71626ef73c602338479ad33db00\nparent d9c8a7473f3c81957316998910305b8bc346ee89\nauthor Jonas Fonseca <fonseca@diku.dk> 1377821898 -0400\ncommitter Jonas Fonseca <fonseca@diku.dk> 1382248986 -0400\n\n    Move repository information to repo.[ch]\n\ncommit d9c8a7473f3c81957316998910305b8bc346ee89 c531bcde787601952c018551f27f27a4d07afb24\ntree 5de054e17653f35c549d3d0f422c928f63a82264\nparent c531bcde787601952c018551f27f27a4d07afb24\nauthor Jonas Fonseca <fonseca@diku.dk> 1377735198 -0400\ncommitter Jonas Fonseca <fonseca@diku.dk> 1382248986 -0400\n\n    Add tool to generate doc from data structures\n\ncommit c531bcde787601952c018551f27f27a4d07afb24 f0161de385a0f3240d0a7d11c7ff582a83759942\ntree 92b1bbcf2eb25fd558d5cad43f22c2090e9d455a\nparent f0161de385a0f3240d0a7d11c7ff582a83759942\nauthor Jonas Fonseca <fonseca@diku.dk> 1377609285 -0400\ncommitter Jonas Fonseca <fonseca@diku.dk> 1382248986 -0400\n\n    Move view declarations to view.h\n\ncommit f0161de385a0f3240d0a7d11c7ff582a83759942 9abb2ac9aa375f0794ee84a5d258128f1258dd0b\ntree 5e0f47015f82a8f48db7c88dffd587c93b5fb239\nparent 9abb2ac9aa375f0794ee84a5d258128f1258dd0b\nauthor Jonas Fonseca <fonseca@diku.dk> 1377609022 -0400\ncommitter Jonas Fonseca <fonseca@diku.dk> 1382248986 -0400\n\n    Move keybinding and run requests to keys.[ch]\n\ncommit 9abb2ac9aa375f0794ee84a5d258128f1258dd0b 31331173eadd9efaba2f7044e4e141127ad98ee9\ntree e6c0d0f4b379efa1ffc8bc0aabcef7308ba4521c\nparent 31331173eadd9efaba2f7044e4e141127ad98ee9\nauthor Jonas Fonseca <fonseca@diku.dk> 1379026390 -0400\ncommitter Jonas Fonseca <fonseca@diku.dk> 1382248985 -0400\n\n    Move line and color code to line.c\n\ncommit 31331173eadd9efaba2f7044e4e141127ad98ee9 d1cc009c134f143befffcff148ff33e12f3fc06b\ntree a596ed1293fc493f8005f42e2a4db7ab13b69900\nparent d1cc009c134f143befffcff148ff33e12f3fc06b\nauthor Jonas Fonseca <fonseca@diku.dk> 1349143875 -0400\ncommitter Jonas Fonseca <fonseca@diku.dk> 1382248985 -0400\n\n    Move line definitions to line.h\n\ncommit d1cc009c134f143befffcff148ff33e12f3fc06b 1569d15bf38d0a15683b5a73c51763871225e9b9\ntree af32e5ba3a47a44893a8eb631cb033174e632089\nparent 1569d15bf38d0a15683b5a73c51763871225e9b9\nauthor Jonas Fonseca <fonseca@diku.dk> 1377607388 -0400\ncommitter Jonas Fonseca <fonseca@diku.dk> 1382248985 -0400\n\n    Move request handling code to request.c\n\ncommit 1569d15bf38d0a15683b5a73c51763871225e9b9 a48b0f5dd687202110498d1775edcc6a3bdf6c72\ntree 14afa84fea795fac6beec02db5b1953c8ea98269\nparent a48b0f5dd687202110498d1775edcc6a3bdf6c72\nauthor Jonas Fonseca <fonseca@diku.dk> 1377607333 -0400\ncommitter Jonas Fonseca <fonseca@diku.dk> 1382248985 -0400\n\n    Move request definitions to request.h\n\ncommit a48b0f5dd687202110498d1775edcc6a3bdf6c72 0db5d56c7a0c1e74a481387dd22e0da603be902f\ntree 929ddd7ba53bb299fe99ef9ce5ee43c9650ab42e\nparent 0db5d56c7a0c1e74a481387dd22e0da603be902f\nauthor Jonas Fonseca <fonseca@diku.dk> 1349143750 -0400\ncommitter Jonas Fonseca <fonseca@diku.dk> 1382248985 -0400\n\n    Move view macro to tig.h\n\ncommit 0db5d56c7a0c1e74a481387dd22e0da603be902f 7c949baaf493b812702ec78b087d2540e8827bf3\ntree 29917131dafd0d1041c80141b7396e28e28a648f\nparent 7c949baaf493b812702ec78b087d2540e8827bf3\nauthor Jonas Fonseca <fonseca@diku.dk> 1377864465 -0400\ncommitter Jonas Fonseca <fonseca@diku.dk> 1382248985 -0400\n\n    Move enums and various utility methods to util module\n\ncommit 7c949baaf493b812702ec78b087d2540e8827bf3 536d565fcd789a2ea9dda43b3ae989e9d651af55\ntree 93d3104b94f044a1c7772ca60a63ef4b5ee83b66\nparent 536d565fcd789a2ea9dda43b3ae989e9d651af55\nauthor Jonas Fonseca <fonseca@diku.dk> 1382226054 -0400\ncommitter Jonas Fonseca <fonseca@diku.dk> 1382248932 -0400\n\n    Refactor defined enum maps to contain size information\n\n    The existing struct enum_map is renamed to enum_map_entry.\n\ncommit 536d565fcd789a2ea9dda43b3ae989e9d651af55 57787a3668d28808764dd1525a1157e3564d9b46\ntree a679b29f2740f740b826d89f82c049b04bc99cb0\nparent 57787a3668d28808764dd1525a1157e3564d9b46\nauthor Jonas Fonseca <fonseca@diku.dk> 1382229219 -0400\ncommitter Jonas Fonseca <fonseca@diku.dk> 1382248932 -0400\n\n    Detect renames when generating the announcement\n\ncommit 57787a3668d28808764dd1525a1157e3564d9b46 0d68e41d80c642af766fe5adb320a9cc204f56dc\ntree be39dfa48d4c43f7a0667700b230d8fe312e0c96\nparent 0d68e41d80c642af766fe5adb320a9cc204f56dc\nauthor Jonas Fonseca <fonseca@diku.dk> 1382225913 -0400\ncommitter Jonas Fonseca <fonseca@diku.dk> 1382225929 -0400\n\n    Fix warning about uninitialized lineno variable\n\ncommit 0d68e41d80c642af766fe5adb320a9cc204f56dc c14792afc41efcb1126ca0ab896eac6d1a12e580\ntree 5879870a174f110d6ee8facae1e92ff032ccd048\nparent c14792afc41efcb1126ca0ab896eac6d1a12e580\nauthor Jonas Fonseca <fonseca@diku.dk> 1382133286 -0400\ncommitter Jonas Fonseca <fonseca@diku.dk> 1382133286 -0400\n\n    Set the commit reference when opening the blame view from the blob view\n\n    This is what tree_request does. Else the blame view is opened against an\n    unrelated version of %(ref) or HEAD.\n\ncommit c14792afc41efcb1126ca0ab896eac6d1a12e580 bf740aa9b7afc29a05f2bc6a8b44035e639fda0e\ntree 838f1135838567884b2c6c02a428542c6e3c1995\nparent bf740aa9b7afc29a05f2bc6a8b44035e639fda0e\nauthor Jonas Fonseca <fonseca@diku.dk> 1381192201 -0400\ncommitter Jonas Fonseca <fonseca@diku.dk> 1381192201 -0400\n\n    Fix clean rule to remove DocBook XML files in doc/\n\ncommit bf740aa9b7afc29a05f2bc6a8b44035e639fda0e f9399028a8ecdd7342bc977b7334fc76a902d3a7\ntree 7d2442e3ecdba05ef9746ded3d8e38ff299bb89e\nparent f9399028a8ecdd7342bc977b7334fc76a902d3a7\nauthor Jonas Fonseca <fonseca@diku.dk> 1381189194 -0400\ncommitter Jonas Fonseca <fonseca@diku.dk> 1381189194 -0400\n\n    Fix and improve inter-document linking\nEOF\n\nassert_equals stdout <<EOF\n●─╮ On fix-graph: debug printout stuff\n│ ∙ index on fix-graph: 85e82d0 One more fix\n∙─╯ One more fix\n∙ Another fix\n∙ Use pre-generated next row\n∙ Add function to pre-generate next row\n∙ A little more broken to make it better\n∙ Always insert extra columns at the end\n∙ Works for first test case\n∙ Better, but missing some lines still\n∙ A little better at the top, a little worse at the bottom\n∙ Fix reloading diffs of staged and unstaged changes\n∙ Fix map size assertion in parse_enum\n│ ∙ Move view draw methods to draw module\n│ ∙ Move option handling code to options.c\n│ ∙ Move option declarations to separate files\n│ ∙ Use symbols to track diff and log argument formatting\n│ ∙ Group environment-based options\n│ ∙ Move refs helpers to refs module\n│ ∙ Move repository information to repo.[ch]\n│ ∙ Add tool to generate doc from data structures\n│ ∙ Move view declarations to view.h\n│ ∙ Move keybinding and run requests to keys.[ch]\n│ ∙ Move line and color code to line.c\n│ ∙ Move line definitions to line.h\n│ ∙ Move request handling code to request.c\n│ ∙ Move request definitions to request.h\n│ ∙ Move view macro to tig.h\n│ ∙ Move enums and various utility methods to util module\n∙─╯ Refactor defined enum maps to contain size information\n∙ Detect renames when generating the announcement\n∙ Fix warning about uninitialized lineno variable\n∙ Set the commit reference when opening the blame view from the blob view\n∙ Fix clean rule to remove DocBook XML files in doc/\n∙ Fix and improve inter-document linking\nEOF\n"
  },
  {
    "path": "test/graph/20-tig-all-long-test",
    "content": "#!/bin/sh\n#\n# Graph test: tig all long\n\n. libtest.sh\n\ntest_graph < \"$source_dir/$test.in\"\n\nassert_equals stdout <<EOF\n∙ tig-2.0.2\n∙ Fix release script to work for patch versions\n∙ Fix documentation of author width option\n∙ Move cursor to the first line when :0 is entered\n│ ∙ Experimental support for key combos\n│ │ ∙ Preserve the cursor position when changing the diff context\n∙─┴─╯ Improve documentation of view settings in tigrc(5)\n∙ Improve warning for obsolete view UI options\n∙ Only use the delimiter character for trimmed and unscrollable text\n●─╮ Merge remote-tracking branch 'vivien/compat/strndup'\n│ ∙ argv: revert part of a3079e2\n∙ │ Ignore 'gui.encoding' and 'i18n.commitencoding' when set to 'UTF-8'\n∙ │ Use buffer for reading view data\n│ ∙ compat: add proper work-around for missing strndup\n∙ │ Use buffer when reading data using io_get()\n∙─╯ Fix infinite loop when parsing view columns\n∙ Never show any actions for a hidden keymap\n∙ Group option toggle bindings together in the help view\n∙ Rewrite index diffing to use git-status\n∙ Improve display of commas and spaces in the help view\n∙ Fix auto-abbreviation of author names\n│ ∙ Update for version tig-2.0.1\n│ ●─╮ Merge branch 'master' into release\n∙─│─╯ tig-2.0.1\n∙ │ Improve pretty printing of ',' in the help view\n∙ │ fix <LessThan> binding support\n∙ │ Prevent throwing errors if single '^'(circumflex) is used in config\n∙ │ Fix compilation error in watch.c\n│ ∙ Update for version tig-2.0\n│ ●─╮ Merge branch 'master' into release\n∙─│─╯ tig-2.0\n∙ │ Fix typo in refresh-mode: manuel -> manual\n∙ │ Update NEWS for release\n∙ │ Show key mappings in the help view using the new syntax\n∙ │ Change default keybindings\n∙ │ Don't complete any settings in the section column\n∙ │ Improve auto-refreshing of views to use various update info\n∙ │ Add refresh-mode to only update after returning from a command\n∙ │ Improve error message for unsupported key combos\n∙ │ Automatically close empty stage views after refreshing\n∙ │ Mark the help view as refreshable\n∙ │ Make file-backed blob views refreshable\n∙ │ Fix line number reporting for configuration errors\n∙ │ Auto-refresh views when changes are detected in the repository\n∙ │ Unify view refresh checking\n∙ │ Tidyup tigrc(5) option descriptions\n∙ │ Remove unused variable\n∙ │ Move index update and diff utilities to repo module\n∙ │ Change key mapping syntax to support key combos\n∙ │ Test the built-in config for syntax errors\n∙ │ Load built-in config when TIGRC_SYSTEM is defined but empty\n∙ │ Fix segfault when no system tigrc is loaded\n●─│─╮ Merge pull request #278 from swegener/for-upstream\n│ │ ∙ read built-in config with continuation support\n∙─│─╯ Move git color mappings to tigrc\n∙ │ Allow tigrc commands to span multiple lines\n∙ │ Update tigrc(5) to reflect new view header color\n∙ │ Fix refreshing of the stage view after updates\n∙ │ Add %(remote) and %(tag) variables\n∙ │ Remove dead initializations\n│ │ ∙ Change default keybindings\n│ │ ∙ Don't complete any settings in the section column\n∙─│─╯ Toggling of the column name will toggle the display setting\n∙ │ Rename the 'show' column setting to 'display'\n∙ │ Improve staged diffs to detect copying and not show unmerged files\n∙ │ Make diff stat line parsing more robust\n∙ │ Use stage view to show changes commits\n∙ │ Refactor refresh code between stage and status view\n∙ │ Move stage status information to the stage module\n∙ │ Add changes commits in main_open\n∙ │ Fix collapsing of unmerged entries in the status view\n∙ │ Fix backspace in the prompt\n∙ │ Add long status label type\n∙ │ Use blame commit filename instead of view vid buffer\n∙ │ Read git diff.context option\n∙ │ Do not set diff-context option by default\n∙ │ Unify jump-to-commit feature using the view ID column\n∙ │ Add reflog member to the column_data struct\n∙ │ Introduce common section color\n∙ │ Introduce common header color\n∙ │ Fix documentation for the file color\n∙ │ Parse color.grep.{filename,linenumber,separator} from git config\n∙ │ Use \"--\" as the separator in the grep view\n∙ │ Rewrite git color parsing to support multiple mappings per color\n∙ │ Align relative dates to the right\n∙ │ Use status messages in the prompt code\n∙ │ Fix column option parsing by prefixing option names with the column name\n∙ │ Expose toggle_prompt_name() as enum_name_prefixed()\n∙ │ Unify enum_name and enum_name_static\n∙ │ Fix parsing of show-notes option\n∙ │ Really parse --notes command line argument\n∙ │ Add support for toggling the mouse option\n∙ │ Remove bold formatting from view column section in tigrc(5)\n∙ │ Add mapping for --author-date-order to commit-order\n∙ │ Fix width calculation of the pager views' line number column\n∙ │ Fix compilation failure when readline is enabled\n∙ │ Switch status view to use column-based drawing backend\n∙ │ Move commit title drawing to draw_commit_title\n∙ │ Move ref column drawing to draw_ref\n∙ │ Pass column to draw_mode and honor the show and width settings\n∙ │ Make view columns configurable\n∙ │ Colorize Tagger and TaggerDate lines\n∙ │ Parse --no-notes and --notes arguments given on the command line\n∙ │ Use OPTION_INFO data for parsing options\n∙ │ Rename the variable used for the filename-width option\n∙ │ Classify title-overflow option as a view column option\n∙ │ Use column option when checking whether to redraw after reflog width change\n∙ │ Use column option when checking whether to grep commit refs\n∙ │ Use column option when checking whether to sort by ID\n∙ │ Fix option name for toggling of reference display in the option menu\n∙ │ Refactor toggling of commit title overflow\n∙ │ log: add '_' to the list of --graph characters\n∙ │ Fix all remaining mentions of branch keymap to refs keymap\n∙ │ Extend reference-format setting to support hiding refs based on type\n∙ │ Update %(branch) when a branch is selected\n∙ │ Add bindings for \\`!\\` to delete branch and drop stash\n∙ │ log: add support for --graph\n∙ │ Switch log, diff and stage views to use column-based draw backend\n∙ │ log: colour the diff stat\n∙ │ diff: move diff stat drawing to a common function\n∙ │ diff: move diff stat addition to a common function\n∙ │ view: replace line user_flags with no_commit_refs and commit_title flags\n∙ │ keys: rename key_input_to_unicode to key_to_unicode\n∙ │ display: correctly recognize Ctrl-y as a key\n∙ │ prompt: expose API to incrementally receive key events\n∙ │ prompt: introduce struct input to hold the context\n∙ │ keys: prepare to read multi key combos\n∙ │ prompt: extract default edit keybindings to separate method\n∙ │ keys: rename struct key_input to struct key\n∙ │ view: add common utility for generating column text\n∙ │ grep: allow to toggle whether to group by file name\n∙ │ grep: use column-based drawing\n∙ │ blame: switch to use view_column_draw\n∙ │ view: make options private to each view\n∙ │ Add config.h as a dependency for all object files\n∙ │ prefer the already linked curses lib for termcap\n∙ │ special case count_digits for zero\n∙ │ Fix clang format string warnings\n∙ │ Improve autoconf checking for readline on Mac OS X\n∙ │ tree: don't assume path to parent is the second view line\n∙ │ view: move all line number logic to view column\n∙ │ view: use columns for grep view\n∙ │ view: use columns for pager based views\n∙ │ Add missing tools/ax_lib_readline.m4 file\n∙ │ Fix warning about unused read_prompt_handler\n●─│─╮ Merge branch 'readline'\n│ │ ∙ Introduce the GNU Readline support\n∙ │ │ branch: use reference comparator from refdb module for sorting\n∙ │ │ view: fix number comparision\n∙ │ │ view: fix comparison of modes when sorting by file name\n∙ │ │ view: limit sorting to only the branch and tree view\n∙ │ │ tree: update line number when inserting tree entries\n∙ │ │ log: pass all filter arguments from command line to git-log\n∙ │ │ view: add auto-sizing logic for the ID column\n∙ │ │ Fix crash when tigrc is absent\n∙ │ │ main: use open_in_pager_mode()\n∙ │ │ io: show stderr for external commands run via the prompt\n∙ │ │ io: ad io_flags enum to better handle IO_RD modes\n∙ │ │ blame: move functionality to colorize ID to draw_id()\n∙ │ │ blame: improve handling of file name visibility\n∙ │ │ blame: detect file name display on the fly\n∙ │ │ view: rename toggle option variables\n∙ │ │ view: move prompt toggle lookup to separate method\n∙ │ │ view: move find_enum_map to enum module\n∙ │ │ Improve configuration error messages\n∙ │ │ view: use common infrastructure for remapping obsolete request names\n∙ │ │ view: ensure that width variable is always initialized\n∙ │ │ view: clean up mode handling in view_column_draw\n∙ │ │ view: make the date width adaptive\n∙ │ │ view: introduce column specific options\n∙ │ │ view: introduce struct view_column\n∙ │ │ view: rename view_columns_ method to have view_column_ prefix\n∙ │ │ view: rename enum view_column to view_column_type\n∙ │ │ view: rename struct view_columns to view_column_data\n│ │ ∙ display: expose status_win and opt_tty\n│ │ ∙ argv: introduce argv_format_arg()\n∙─│─╯ search: replace stage-next action with predefined search prompt command\n∙ │ search: show number of matches and the current match index\n∙ │ view: fix drawing of ID column\n∙ │ tigrc: revert unintended removal of stage-next\n∙ │ refs: update documentation to reflect branch view renaming\n∙ │ refs: show list of tags and use numeric sort order by default\n∙ │ refs: make reference formats configurable\n∙ │ refs: move ref format string lookup to separate method\n∙ │ refs: replace flags with reference enum type\n∙ │ draw: make methods only used internally static\n∙ │ draw: move view_columns_draw to draw module\n∙ │ view: remove refs and graphs from the view column enum\n∙ │ main: fix segfault introduced in last change\n∙ │ main: use --pretty=raw format if reflog output is requested\n∙ │ options: enable graph when --graph is passed\n∙ │ argv: separate git log parameters from diff parameters\n∙ │ repo: workaround empty --show-prefix output from certain git versions\n∙ │ refs: use refs_ prefix for internal methods and variables\n∙ │ refs: rename branch view to refs view\n∙ │ refs: rename refs module to refdb\n∙ │ tree: use directory and file line types\n∙ │ tree: add directory color type for use by draw_filename\n∙ │ options: reuse color name parser for obsolete color mappings\n∙ │ Check return value from signal()\n∙ │ Use email instead of name as the key in the author ident cache\n∙ │ blame: parse author email to support author toggling\n∙ │ prompt: fix cursor position for prompts longer than one character\n∙ │ help: support refreshing to show new bindings added via the prompt\n∙ │ Refactor loading of views that are not associated with any view state\n∙ │ Fix calculation of line number for first line in file\n∙ │ Skip confirmation step when editor reports no error\n∙ │ configure: only pass bug email to AC_INIT\n∙ │ view: clean up utf8_width() API\n∙ │ view: adjust file name width automatically\n∙ │ view: update branch view columns when commit data is loaded\n∙ │ view: fix regression when loading the help view\n∙ │ view: calculate column width using utf8_width()\n∙ │ view: adjust author width automatically\n∙ │ view: implement view columns for blame view and use for grepping\n∙ │ view: recalculate widths when options are toggled\n∙ │ tree: update columns width when commit data has been loaded\n∙ │ view: never reset the private state when changing between views\n∙ │ view: extract code for checking whether to refresh a view\n∙ │ main: use custom pretty format to speed up loading\n∙ │ view: add line-number column type to allow natural sorting order\n∙ │ view: use view columns infra for the main and stash views\n∙ │ view: rename view columns title to commit title\n∙ │ view: add draw infrastructure for column based views\n∙ │ view: rewrite branch_read to read commit info in one shot\n∙ │ view: move io_memchr() to the io module\n∙ │ view: add more view column types for the branch and tree view\n∙ │ view: add generic grep implementation based on view columns\n∙ │ view: rename sort_field enum to view_column\n∙ │ view: make columns method and sort fields part of view ops\n∙ │ view: move sort comparision to view module\n∙ │ stage: fix call to string_copy with string pointer\n∙ │ view: make views[] array private\n∙ │ view: move keymap definition out from view_ops\n∙ │ view: remove VIEW() macro\n∙ │ view: add custom open methods for each view\n∙ │ view: move view declarations to respective modules\n∙ │ Add compatibility mappings for obsolete color names\n∙ │ Fix segfaults for :toggle commands without arguments\n∙ │ prompt: print sort field and order information when toggled\n∙ │ prompt: convert sort actions to :toggle commands\n│ │ ∙ Restrict cursor navigation to actionable lines\n∙─│─╯ grep: fix detection of initial view in open_grep_view()\n∙ │ Fix toggle binding for show-filename\n∙ │ Restore prompt position behavior\n∙ │ status: fix staging of untracked directories\n∙ │ help: show external command flags before the command\n∙ │ help: display internal commands in a separate group\n∙ │ Allow prompt toggle commands to both reset display and reload\n∙ │ Support unicode characters for :<key>\n∙ │ Fix regression in handling of :<key>\n∙ │ Fix blame opening from (un)staged changes diff view (part II)\n∙ │ Remove redundant lines\n∙ │ Fix blame opening from (un)staged changes diff view\n∙ │ Set COLUMNS env variable after vertical split calculation\n∙ │ prompt: convert diff-context actions to :toggle commands\n∙ │ prompt: use :toggle binding for diff context manipulation\n∙ │ prompt: introduce :toggle command\n∙ │ prompt: add file-filter option\n∙ │ prompt: refactor enum name utilities\n∙ │ prompt: introduce a macro for listing all enums\n∙ │ prompt: allow search patterns with spaces in them\n∙ │ prompt: pass argv parameter to run_prompt_command\n∙ │ prompt: move code to new prompt module\n∙ │ prompt: refactor the jump-to-commit implementation\n∙ │ prompt: move report() call from argv_format() to call site\n∙ │ Remove input field from struct run_request\n∙ │ Move run request flags parsing to add_run_request\n∙ │ Rewrite the help view\n∙ │ Fix loading of git command output in the pager view\n∙ │ Resize and redraw the display after prompt :set commands\n∙ │ Remove field width digit from draw line number format string\n∙ │ Rewrite stage-update-line to include the diff context from the chunk\n∙ │ Fix install script to not print anything in verbose mode\n∙ │ Make iscommit take const string\n∙ │ help: fix display of external commands\n∙ │ grep: use --full-name so it works from sub-directories\n∙ │ Fix prompt-based searching to always use initial search request\n∙ │ Extend key bindings for prompt commands to support predefined searches\n∙ │ Check cmd argument upfront in run_prompt_command\n∙ │ Travis tests: compile with verbose flag using both clang and gcc\n∙ │ Travis tests: minor reorganization\n∙ │ Fix rendering in non-UTF8 terminals\n∙ │ Do not ignore characters that cannot be transliterated\n∙ │ Fallback to use file(1) to determine file encoding\n∙ │ Warn about conflicting keybindings using Ctrl\n∙ │ Add docbook-utils to the list of required packages for travis\n●─│─╮ Merge pull request #252 from dmalikov/travis-support\n∙ │ │ Add quiet make mode\n∙ │ │ Add multibyte support to struct key_input\n∙ │ │ Introduce struct key_input\n∙ │ │ Remove end parameter from utf8_char_length\n∙ │ │ Disable graph rendering for -G and --grep=\n│ │ ∙ Add travis support, remove failed test\n∙─│─╯ Always handle options linked to git arguments\n∙ │ Add method accessor for --show-notes argument\n∙ │ Introduce methods for accessing dynamic arguments\n∙ │ Fix include of \"config.h\"\n∙ │ tigrc(5): also document Ctrl-i conflicting with Tab\n∙ │ tigrc(5): document Ctrl and ESC key mappings\n∙ │ make-builtin-config.sh: trim trailing space before comments\n∙ │ Remove the RUN_REQUEST_FORCE flag\n∙ │ Switch to vertical split when the display width exceeds 160 columns\n∙ │ Move allocation helper and misc utils to util module\n∙ │ Remove string macros which are defined in the header file\n∙ │ Move string and utf8 utilities to new string module\n∙ │ Move header files to include/tig\n∙ │ Alphabetize and tidyup .gitignore\n∙ │ Remove debug io_trace calls\n∙ │ Improve opening of the blame view from the grep view\n∙ │ Add support for opening grep view from any view\n∙ │ Add grep view as a front-end to git-grep(1)\n∙ │ Add support for view specific colors\n∙ │ Update draw header\n∙ │ Macrotize argument env variables\n∙ │ Rename view_env to argv_env and format_argv to argv_format\n∙ │ Move format_argv to argv module\n∙ │ Move argument array helpers to new argv module\n∙ │ Fix memory corruption causing tree entry modes to be displayed incorrectly\n∙ │ Restore the die_callback so die messages are displayed properly\n∙ │ Improve support for -Ssearch in the main view\n●─│─╮ Merge pull request #247 from peff/no-diff-boundary\n│ │ ∙ remove \\`--boundary\\` from \\`%(cmdlineargs)\\`\n∙─│─╯ Add macro to check if initial views failed to load\n∙ │ Add io_trace method for debug printing to trace file\n∙ │ Move blame option handling to blame module\n∙ │ Fix pager mode error message\n∙ │ Get rid of the signal handler all together\n∙ │ Do not call endwin nor exit from signal handler\n∙ │ Remove view_ops define and #include view backend header files\n∙ │ Move stash view to new stash module\n∙ │ Move main view to new main module\n∙ │ Move stage view to new stage module\n∙ │ Move status view to new status module\n∙ │ Move branch view to new branch module\n∙ │ Move blame view to new blame module\n∙ │ Move blob view to new blob module\n∙ │ Move tree view to new tree module\n∙ │ Move help view to new help module\n∙ │ Move diff view to new diff module\n∙ │ Move log view to new log module\n∙ │ Move pager core to new pager module\n∙ │ Move view parsing code to new parse module\n∙ │ Move common view code to view module\n∙ │ Move display and status code to new display module\n∙ │ Move apply_step to tig header\n∙ │ Add title window field to struct view and move window declarations\n∙ │ Add struct view_env for storing shared state between views\n∙ │ Move view->id to view->ops->id\n∙ │ Remove opt_lineno in favour of opt_goto_line\n∙ │ Move drawing methods to new draw module\n●─│─╮ Merge pull request #244 from tullmann/patch-1\n∙ │ │ Move option loading to new options module\n│ │ ∙ Update INSTALL.adoc\n∙ │ │ Instanciate option variables using a macro\n∙ │ │ Rename option variables to match their option names\n∙ │ │ Fix title-overflow regression by special casing it inside toggle_option\n∙─│─╯ Parse git's combined diff format so edit works for unmerged files\n∙ │ Add missing return value to the doc-gen tool's main method\n∙ │ Move struct line to view header and fix includes\n∙ │ Fix vertical split regression by hardcoding the split parameter\n∙ │ Fix author and date annotation of renamed entries in the tree view\n∙ │ Update copyright and use jonas.fonseca@gmail.com as main contact email\n∙ │ Add tool to generate doc from data structures\n∙ │ Move refs helpers to refs module\n∙ │ Move repository information to new repo module\n∙ │ Move view declarations to new view header\n∙ │ Move keybinding and run requests to new keys module\n∙ │ Move line info and color code to new line module\n∙ │ Move request code to new request module\n∙ │ Move view macro to include/tig.h\n∙ │ Move Git data formatters and parsers to util module\n∙ │ Move enum definitions to new types module\n∙ │ Move source files to src and include folder\n∙ │ Delete contrib/tigrc now obsolete by tigrc\n∙ │ Move default settings to tigrc\n∙ │ Move default color settings to tigrc\n∙ │ Add tigrc copy as a fallback inside the binary\n∙ │ Move default keybindings including shell commands to external tigrc file\n∙ │ Move test-graph tool to the test folder\n∙ │ Fix graph rendering of staged and unstaged changes\n∙ │ Minor code tidyup\n∙ │ Add support for specifying custom prompt for %(prompt)\n∙ │ Abandon the %(prompt) when the user escapes it\n∙ │ Only refresh views that support it after running a shell command\n∙ │ Fix log view to handle repositories containing a file named HEAD\n∙ │ Update %(branch) to point to current branch in the main view\n∙ │ Improve opening of blame view from the stage view\n∙ │ Don't open blame view for untracked files in the status and stage view\n∙ │ Fix diff-options to only be considered for the diff view\n∙ │ Fix staged view when file called \"HEAD\" exists\n∙ │ Pass arguments in filter_options()\n∙ │ Parse -U argument and update internal diff context state\n∙ │ Disable graph drawing for reverse log order\n∙ │ Preprocess known toggleable options arguments in filter_options\n∙ │ Rewrite much of the graph code\n∙ │ Add ZSH autocomplete compatibility\n∙ │ Fix lookup of run requests\n∙ │ Fix off-by-one error for status code message lookup\n∙ │ Actually disable mouse support\n∙ │ Disable mouse support by default since it breaks copying text from the terminal\n∙ │ Fix diff stat highlighting of file with no changes\n∙ │ Add mouse support\n∙ │ Fix run request ID offset to never conflict with internal request IDs\n∙ │ Fix diff stat hightlighting for files with no changes\n∙ │ Add toggle=vertical=split action to dynamically change the split orientation\n∙ │ Align the view scroll percentage to the right\n∙ │ Fix issue with creation of .deps directory after upgrade to Mac OS 10.9\n∙ │ Add \"auto\" vertical-split\n∙ │ graph: uncomment is_boundary propagation\n∙ │ parse commit marks more leniently\n∙ │ Fix reloading diffs of staged and unstaged changes\n∙ │ Fix map size assertion in parse_enum\n∙ │ Refactor defined enum maps to contain size information\n∙ │ Detect renames when generating the announcement\n∙ │ Fix warning about uninitialized lineno variable\n∙ │ Set the commit reference when opening the blame view from the blob view\n∙ │ Fix clean rule to remove DocBook XML files in doc/\n∙ │ Fix and improve inter-document linking\n∙ │ Rename README, INSTALL, and NEWS to end in .adoc\n∙ │ Use .adoc as the extension for AsciiDoc files in doc/\n∙ │ Merge the content of BUGS into the README file\n∙ │ Fix regression in add_line_at making line numbers start atf 0 instead of 1\n∙ │ Fix regression in diff_get_lineno\n∙ │ Fix regression making diff parsing fail when opening the blame view\n∙ │ Make blame_draw check if the filename is NULL instead of empty\n∙ │ Handle diffs with no newline at end of file\n∙ │ Add support for splitting chunks in the stage view\n∙ │ Add common utility for parsing chunk headers\n∙ │ Introduce a path cache and use it for the blame view\n∙ │ Fix blame_go_back to copy the whole file path\n∙ │ Fix handling of combining characters in utf8_length() when reserve==TRUE.\n∙ │ Implement navigating back to previous view state in the blame view\n∙ │ Create a commit view history API based on the tree view stack\n∙ │ Free all cached list of reference when reloading the references\n∙ │ Move warn and die to the util module\n∙ │ Move error messages to new util module\n∙ │ Move get_temp_dir to io module\n∙ │ Move encoding utilities to the io module\n∙ │ Fix regression making the status view inaccessible for new repositories\n∙ │ Fix \\`make dist\\` to support versions with more than 2 digit groups\n∙ │ tig(1): document the Git commands supported by the pager mode\n∙ │ Load main view from any --pretty=raw output given on stdin\n∙ │ Refactor the pager mode handling\n∙ │ Simplify checking of --stdin argument\n∙ │ Generalize and move parsing of reflog info into main_read\n∙ │ Use memset to clear the format buffer\n∙ │ Add toggling for display of files in untracked directories\n∙ │ Improve option toggling to update all displayed view\n∙ │ Pass CFLAGS to linker\n∙ │ Move release scripts, test programs and maintainer files to new tools directory\n∙ │ Switch to automatically generate dependencies\n∙ │ Disabled colors last when passing user supplied arguments to Git\n∙ │ Optionally load HEAD when loading references\n∙ │ Load HEAD ID and symbolic name as part of the repo info\n∙ │ Add auto-configuration for Cygwin\n∙ │ Rewrite the toggle menu setup macro code to fix compile error\n∙ │ Fix stash diff display after deleting a stash\n∙ │ Make digit counting reusable\n∙ │ Make the prompt for user-defined commands tell when Tig will exit\n∙ │ User-defined commands no longer need to be prefixed with '!'\n∙ │ tigrc(5): rework the keybinding section\n│ ∙ Update for version tig-1.2.1\n│ ●─╮ Merge branch 'master' into release\n∙─│─╯ tig-1.2.1\n∙ │ Use capitalized Git and Tig when talking about the systems in general\n∙ │ Simplify the install goal and rename \\$(PROGS) to \\$(EXE)\n∙ │ Fix regression that skipped commits with no messages\n∙ │ Remove the dont_free line struct flag in favor of custom help_done\n∙ │ Free graph symbols when reloading the main view\n∙ │ Bypass all graph calls and memory allocations when the graph is disabled\n∙ │ Postpone ref list lookup to the draw phase\n∙ │ Dynamically allocate commit titles to reduce memory usage\n∙ │ Ignore generated HTML files in the whole tree\n∙ │ Show blob sizes in the tree view\n∙ │ Improve the installation instructions\n∙ │ Add work-around for building manpages with Homebrew-based xmlto\n∙ │ Ignore *.swp files and restrict to only ignore top-level config.make\n∙ │ Fix HTML doc installation\n∙ │ Fix path to sysconfdir-based gitconfig in tig(1)\n∙ │ Fix submodule-related setup to properly check setenv return value\n∙ │ Rework README to include the list of online resources\n∙ │ Fix man page install\n∙ │ Move documentation to doc directory\n│ ∙ Update for version tig-1.2\n│ ●─╮ Merge branch 'master' into release\n∙─│─╯ tig-1.2\n∙ │ Remove release-docs/ during distclean\n∙ │ Only warn about missing curses configuration once\n∙ │ remove useless call to strdup() in get_temp_dir()\n∙ │ Move all checks for the log view commit context to log_select\n∙ │ Fix %(prompt) variable formatting\n∙ │ Revert \"Scroll diff with arrow keys in log view\"\n∙ │ Display correct diff the context in split log view\n∙ │ Add log_select function to find commit from context in log view\n∙ │ Provide proper work-around for missing setenv()\n∙ │ Provide mkstemps() work-around for platforms lacking it\n∙ │ Add example showing how to show display submodule log in diffs\n∙ │ Fix %(commit) assignment in the diff view\n∙ │ Add utility method to help copy commit ID to revision buffer\n∙ │ stash: Highlight the diffstat of combined diffs\n∙ │ stash: Ensure that the whole stash@{_} text is shown\n∙ │ stash: Refactor ID drawing method\n∙ │ stash: Use main view infrastructure for the stash view\n∙ │ iconv: Consolidate convert methods into one single backend\n∙ │ iconv: Remove unnecessary length argument to encoding_iconv\n∙ │ iconv: Convert characters before trimming text before rendering\n∙ │ iconv: Move draw_chars encoding code to IO module\n∙ │ iconv: Ignore unrepresentable characters when transliterating\n∙ │ Only set LINES and COLUMNS environment variables for external commands\n∙ │ Crop text when title-overflow is enabled\n∙ │ Scroll diff with arrow keys in log view\n∙ │ Prepend the path to the repository root when editing a diff file\n∙ │ Introduce the stash view\n∙ │ Open editor at selected line also for multi-file diffs in the stage view\n∙ │ Fix regression when running tig with no arguments and custom encoding\n∙ │ Fix unicode_width for combining characters\n∙ │ Enable tilde expansion in ~/.tigrc \"source\" commands\n∙ │ Fix blame and status to work from within directories starting with a dot\n∙ │ Reenable the log view from the command line\n∙ │ Do not apply diff styling to untracked files in the stage view\n∙ │ Fix regexec() error checking in grep_text() and grep_refs()\n∙ │ Pass terminal dimensions to git by setting COLUMNS and LINES\n∙ │ Do not expand the graph for merges already aligned to the left\n∙ │ Use TMPDIR for temporary files\n∙ │ Create temporary file with name as suffix\n∙ │ Improve invalidation during reload of references\n∙ │ Set the reference list ID during creation\n∙ │ Fix rendering glitch for branch names\n∙ │ Fix display of all branches labels in repos with short branch names\n●─│─╮ Merge pull request #143 from bbolli/clang-warning\n│ │ ∙ Eliminate a constant expression\n∙ │ │ tigrc(5): document how to use Ctrl in key bindings\n∙─│─╯ Show line numbers in the branch view\n∙ │ Fix formatting of revargs\n∙ │ Fix half cooked patch tweaks\n∙ │ Cancel quitting after answering no to a prompt\n∙ │ Fix regression causing incorect coloring of the commit title\n∙ │ Show diff stats as wide as the terminal\n∙ │ Introduce format_context struct to simplify argument passing\n∙ │ Append the argument in format_expand_arg\n∙ │ Rename format_arg => format_expand_arg\n∙ │ Format diff and blame arguments\n∙ │ Move argument formatting to separate function\n∙ │ Add a \"..\" entry if tig is used on an empty path in tree view.\n∙ │ Build with curses.h when using the default Mac OS X make configuration\n∙ │ Update documentation as regards color specification using bare numbers\n∙ │ Fix diff title overflow rendering to use view specific flag\n∙ │ [#102] Revert 40868f7 which breaks blame and pickaxe support for follow\n∙ │ Add +ESC key binding\n∙ │ Highlight commit title overflow in the diff view\n∙ │ Rename the title-overflow color to overflow\n∙ │ Refactor commit title drawing to expand text and make it reusable\n∙ │ main: add toggle for commit title overflow\n∙ │ Link to stackoverflow.com/questions/tagged/tig for Q and A\n∙ │ Catch SIGQUIT and gracefully exit tig\n∙ │ Restore default signal handlers\n∙ │ Add toggle-files to disable file filtering for the diff and main views\n∙ │ Add example user-defined commands to the manual\n∙ │ tigrc(5): document show-line-numbers\n∙ │ Detect errors and allow editor line number to be disabled\n∙ │ Stage view: open untracked file at selected line\n∙ │ Blob view: open editor at selected line\n∙ │ Add a line number argument to open_editor\n∙ │ [#116] Add vim mode lines and machinery for updating C file headers\n∙ │ test-graph: show usage string when no input is given on stdin\n∙ │ [#115] Add toggles for showing author email or email user names\n∙ │ Fix manual keybinging for stage-single-line\n∙ │ Update NEWS\n∙ │ Document the ability to bind internal commands\n∙ │ Key bindings which execute tig prompt commands\n∙ │ Return a request from open_run_request()\n∙ │ After setting an option, refresh the view if possible\n∙ │ Support refreshing the diff view by reloading the data\n∙ │ Refactor the prompt command handling into a separate function\n∙ │ Allow overwriting of a previously set \"argv\" option\n∙ │ Add a diff-options config, similar to blame-options\n∙ │ Main view: fix diff view display for staged/unstaged changes\n∙ │ Added configure\n∙ │ Report toggled option *after* refreshing/reloading the view\n∙ │ Don't clear the status/report line when finishing a piped update\n∙ │ Reload current branch name when reloading the stage view.\n∙ │ Don't call string_copy_rev() on empty string\n∙ │ autogen.sh: Set WARNINGS in a more portable fashion\n∙ │ [GH #93] Fix compile errors reported on old Solaris systems\n∙ │ [GH #93] Reload the current branch name when reloading the status view\n∙ │ Fix diff display when using --follow by marking it as a rev flag\n∙ │ Remove unneeded git update-index call\n│ ∙ Update for version tig-1.1\n│ ●─╮ Merge branch 'master' into release\n∙─│─╯ tig-1.1\n∙ │ [GH #91] Allow to open blob related with added content in a diff\n│ │ ∙ [GH #72] Convert output to ASCII//TRANSLIT unless using ncursesw\n∙─│─╯ Fix status view to show section-level changes in non-lazy navigation mode\n∙ │ Fix lazy navigation mode to allow opening the parent tree\n∙ │ Do not show deleted branch when reloading the branch view\n∙ │ Enable lazy navigation mode for the status view\n∙ │ Refactor stage view title formatting\n∙ │ [GH #83] WIP: main view lazy navigation mode prototype\n∙ │ Read commit IDs from stdin when opened with --stdin\n∙ │ Try to automatically re-run configure script when appropriate\n∙ │ Work around a bug in autoreconf 2.61\n∙ │ Use the right Emacs mode for config.make.in\n∙ │ Add \"show-deps\" make target; rearrange existing dependencies to match output\n∙ │ When using autoconf, *all* of our .o files depend on config.h\n∙ │ Tweak Emacs' syntax highlighting of configure.ac\n∙ │ Make sure that our .m4 file gets included\n∙ │ Run autoupdate(1) on to get rid of autoconf warnings\n∙ │ Replace strndup(3) usage with malloc + strncpy\n∙ │ Handle wrapping of the first line of a view\n∙ │ Fix invalid memory access bug in pager line wrapping\n∙ │ Properly initialize variable in diff_get_pathname\n∙ │ [GH #62] Make the use of encoding arguments optional\n∙ │ Change diff-context setting to have a minimum value of 0\n∙ │ diff: get pathname of combined diff headers\n∙ │ [GH #65] Support binding more advanced external commands\n∙ │ Correctly report allocation failure in argv_append\n∙ │ tigrc(5): improve documentation of git configuration usage\n∙ │ Do not include merges in the announcement's change log\n●─│─╮ Merge pull request #81 from esc/fix/reading_git_colors_256\n●─│─│─╮ Merge pull request #80 from esc/fix/option_name_mismatch\n∙ │ │ │ Reenable copy/rename detection in the status view\n│ │ │ ∙ fix: the manpage says 'read-git-colors'\n│ │ ∙ │ fix: reading git colors in rang 0 255\n∙─│─┴─╯ Remove enforced diff move/copy detection\n∙ │ Optionally show commit IDs for branches and tree entries\n∙ │ [GH #77] Add options for displaying commit IDs in the main view\n∙ │ Sanitize the width argument to draw_field to not include padding\n∙ │ Rename all column variables to end with _width\n∙ │ [GH #78] tig.spec: add man7 directory to RPM package\n∙ │ [GH #76] Add option to split views vertically\n∙ │ Move horizontal split calculation to separate function\n∙ │ [GH #25] Allow to build on Mac OS 10.7 without the configure script\n∙ │ [GH #70] Fix parent blaming when tig is launched in subdirectory\n∙ │ [GH #66] Allow run requests to exit tig after execution\n∙ │ [GH #39] Add note for packagers to avoid building ncurses --with-shared\n∙ │ [DEB-682766] Improve tigrc(5) documentation\n∙ │ Documentation typo and grammar fixes\n∙ │ Allow people to still build without autotools\n∙ │ Update AX_WITH_CURSES to build under Cygwin\n∙ │ diff: support editing changed files\n∙ │ diff: fix and improve detection of filename\n∙ │ Fixing documentation for maximize keybinding\n∙ │ Get rid of printf format warnings with size_t arguments\n∙ │ Reload colors when typed in prompt\n∙ │ Support tig config options in prompt\n∙ │ Extend prompt functionalities\n∙ │ Remove trailing whitespace\n∙ │ [GH #54] Reorder chdir checks for submodules\n∙ │ Annotate printf-like methods and fix warnings reported by GCC\n∙ │ [GH #2] Add basic support for wrapping pager-based views\n∙ │ Only show changes commits for the current branch\n∙ │ Rework custom line tracking to allow custom lines at any place\n∙ │ Refactor line allocation to avoid memory leaks\n∙ │ Introduce struct to store state during reading of the main view\n∙ │ Allow case-insensitive searches - implement ignore-case option.\n∙ │ Add files generated by cscope and ctags to .gitignore\n∙ │ [GH #53] Revert 73bee5e which breaks the graph when path spec is specified\n∙ │ Fix opening the pager view from the command prompt\n∙ │ Show formatted run request argv when prompting\n∙ │ Add support to confirm the execution of a binding\n∙ │ Change run request to use flags for passing silent and force options\n∙ │ Introduce argv_to_string function in the IO library\n∙ │ Simplify add_pager_refs interface to expect the commit ID\n∙ │ Use const char pointers for common pager and diff read functions\n∙ │ Add script to prepare documentation for http://jonas.nitro.dk/tig\n│ ∙ Update for version tig-1.0\n│ ●─╮ Merge branch 'master' into release\n∙─│─╯ tig-1.0\n│ ∙ Update for version tig-0.18-138-g4bfaaa2\n│ ●─╮ Merge branch 'master' into release\n∙─│─╯ Rework the VERSION mangling in the make dist rule\n∙ │ [GH #49] Increase the author auto-abbreviation threshold to 10\n∙ │ [GH #50] Make relative dates show number of years ago for old commits\n∙ │ Update the index before showing staged/unstaged changes in the main view\n∙ │ Do not count the first line and parent accessor lines in the tree view\n∙ │ Do not count the All branches line in the branch view\n∙ │ Do not count the unstaged/staged commit lines in the main view\n∙ │ Fix diff stat for files where the path separator is not shown\n∙ │ Use git log format to simplify commit title parsing\n∙ │ Show the file name of the current position in the diff status\n∙ │ Show the title of the last commit in the branch view\n∙ │ Fix regression to not handle non-symbolic-ref during rebase action\n∙ │ Enable diff stat navigation for the staged changes views\n∙ │ Fix jumping when the diff stat contains a file with no changes\n∙ │ Add macro to check if a view line is in range\n∙ │ Do not show empty trees for staged and unstaged commit entries\n∙ │ Update copyright notices to include 2012\n∙ │ Define manpage:[] AsciiDoc macro to fix manpage links\n∙ │ Move fall-back version string to Makefile\n∙ │ Move TODO items to the github issue tracker\n∙ │ Fix diff stat navigation for unmodified renamed files\n●─│─╮ Merge pull request #43 from Oblomov/master\n│ │ ∙ prompt_menu: protect against programming error\n│ │ ∙ Suppress clang warning\n│ │ ∙ read_ref: use string_ncopy_do directly\n∙─│─╯ Fix compile warnings for an unused variable and return values\n∙ │ [GH #41] Clear newly allocated memory in allocators\n∙ │ Fix status view position restoration regression from recent refactorings\n∙ │ Move error logic to the respective view open handlers\n∙ │ Refactor view loading to allow open methods to abort\n∙ │ Move open view error reporting down into the view handlers\n∙ │ Simplify code in status_open\n∙ │ Move split_view and maximize_view to the open view section\n∙ │ Move refs code to separate file\n∙ │ Move keymap to view ops and change to use a struct\n∙ │ Rework the help view to not use line->other\n∙ │ Refactor setup of built-in run requests\n∙ │ Minor improvement of status view restoration\n∙ │ Store all restore information in view.prev_pos\n∙ │ Move navigation state to struct position\n∙ │ Fix refs reloading by not assuming that they are alphabetically sorted\n∙ │ Add small tracing utility for monitoring executed commands\n∙ │ Force load the branch view log data\n∙ │ Fix default commit order to be that of git-log(1)\n∙ │ Switch to use git-log(s) default commit ordering\n∙ │ [GH #23] Add %(prompt) variable\n∙ │ [GH #30] Enable notes by default\n∙ │ [GH #38] Do not pass navigation requests to the branch view when the main view is maximized\n∙ │ Fix build dependencies\n∙ │ Limit the number of allocated color pairs\n∙ │ Parse commit title correctly in presence of mergetag object\n∙ │ [GH #8] Read git's color settings\n∙ │ Show uncommitted changes in the main view as virtual staged and unstaged commits\n∙ │ Refactor main_add_commit from main_read\n∙ │ Add status staged and unstaged commands to git.h\n∙ │ Add blame diff commands to git.h\n∙ │ Move git diff command argv arrays to git.h\n∙ │ Allow the command status to be accessed after io_done\n∙ │ Fix diff command for staged files before initial commit\n∙ │ Only show the external group title once in the help view\n∙ │ User-defined commands prefixed with '@' are run with no console output\n∙ │ Fix mistake in tigrc: line-graphic expects utf8, not utf-8\n●─│─╮ Merge pull request #37 from v0n/abbrev_commit_hash\n│ │ ∙ string_copy_rev: chop rev on first space (if any)\n●─│─┤ Merge pull request #36 from tsibley/reload-diff-view-on-toggle\n│ │ ∙ Reload the view on a diff-like option change\n│ │ ∙ Doc typo\n●─│─┤ Merge pull request #34 from tsibley/combined-diff-coloring\n│ │ ∙ [GH #32] Only color +/- in the second column when in a combined diff\n∙─│─╯ Only reload the view after changing diff options for diff-like views\n∙ │ Document how to submit bugs\n∙ │ Move checking for line number display to draw_lineno\n∙ │ tigrc.5.txt: fix a typo (\"changes are ignore\")\n∙ │ Offload commit encoding entirely to git\n∙ │ Add support for using path encoding from git attributes\n∙ │ Extract encoding conversion to encoding_convert\n∙ │ Add interface for managing encodings\n∙ │ Refactor parsing of encoding options\n∙ │ Enable toggling of all diff ignore space options\n∙ │ Allow space to be ignored in the stage view and blame diffs\n∙ │ Use toggle_option infrastructure to change the ignore space option\n∙ │ Toggle to ignore all whitespace changes in diffs; bound to W\n∙ │ Add completion for the different .git/*_HEAD files\n∙ │ [GH #29] Change references section title to 'see also'\n∙ │ Minor simplification in add_keybinding\n∙ │ Rename get_key to get_view_key\n∙ │ Simplify view request declaration\n∙ │ Simplify view_ops pre-declaration\n∙ │ Simplify view declaration\n∙ │ Add draw_formatted\n∙ │ Change git_dir boolean to become a view flag\n∙ │ Replace view type enum with a view flag enum\n∙ │ Add source command for loading separate config file from ~/.tigrc\n∙ │ [GH #21] Bind single line staging to '1' by default\n∙ │ Move truncation logic to FORMAT_BUFFER\n│ │ ◎ Created gh-pages branch via GitHub\n∙ │ manual: Fix the references section title\n∙ │ Do not allow single line staging for new files (untracked or added)\n∙ │ Fix setup of the iconv input filter\n∙ │ Do not read configuration from stdin\n∙ │ Correct typos in documentation\n∙ │ \"make clean\" should remove \\$(TESTS) targets\n∙ │ Ensure \\0 terminated input for iconv()\n∙ │ Add \"//TRANSLIT\" for iconv encoding\n∙ │ Introduce define for the UTF-8 encoding string\n∙ │ [GH #21] Fix single line updating to support unstaging\n∙ │ [GH #21] Support staging of single lines\n∙ │ Refactor diff chunk header parsing\n∙ │ Introduce io_printf function\n∙ │ Introduce macro for wrapping calls to vsnprintf\n∙ │ [GH #22] Add +<lineno> improvement to NEWS\n∙ │ tig.c: compare_refs: fix comparing by ref->ltag\n∙ │ Make git://github.com/jonas/tig.git repo the master\n∙ │ fixed compile issue: NCURSES_OPAQUE on OSX 10.6.8\n∙ │ fixed isnumber error (OSX 10.6.8)\n●─│─╮ Merge pull request #22 from tsibley/open-at-line-number\n│ │ ∙ Support opening the initial view at an arbitrary line number\n│ │ ∙ Unify the parsing of blame options and other view options\n│ │ ∙ Simplify parse_options by offloading more to filter_options\n∙─│─╯ [GH #19] Show filename column when blaming with copy detection enabled\n∙ │ Move stage chunk to private data\n∙ │ Introduce private view data and use it for all reading state\n∙ │ [GH #15] Fix diff-header colorization by ensuring color IDs are >= 1\n∙ │ Fix off-by-one error introduced in off-by-one error fix\n∙ │ [GH #12] Support multi-arg editor strings\n∙ │ [GH #16] Support custom colorization of lines matching a string prefix\n∙ │ [GH #17] Properly color binary diffstat lines\n∙ │ Show branches/refs which names are a substring of the current branch\n∙ │ Update NEWS\n∙ │ Fix off-by-one error in the diff stat jump feature\n∙ │ Create and use dup() of STDIN_FILENO instead of STDIN_FILENO itself\n∙ │ Add show-notes tigrc option\n∙ │ Support jumping to commit in the branch view\n∙ │ Add internal JUMP_COMMIT request and view specific logic to main_request\n∙ │ Find TOC sections based on 4 tildes or hyphens\n∙ │ Support jumping to specific SHAs in the main view\n∙ │ tree_compare: handle author == NULL gracefully when sorting\n∙ │ Decorate replaced commits\n∙ │ Display line numbers in main view\n│ ∙ Update for version tig-0.18\n│ ●─╮ Merge branch 'master' into release\n∙─│─╯ tig-0.18\n∙ │ Update the view title status after jumping to file diff\n∙ │ [LP-694780][DEB-635546] Expand browsing state variables for prompt commands\n∙ │ Promote view_open to pager_open\n∙ │ rename graph-line to palette\n∙ │ Jump to a file's diff when enter is pressed on a diff stat file line\n∙ │ Use erasechar() to check for the correct backspace character\n∙ │ Minor cleanup in blame diff opening\n∙ │ Use view->parent to access status view from the stage view\n∙ │ Naïvely color blame IDs to distinguish lines\n∙ │ Sort references so that remotes comes last in the branch view\n∙ │ Restore the help view after collapsing/expanding a keybinding group\n∙ │ Improve the selection of the line blamed from a diff\n∙ │ Make it possible to change the diff context in the diff view\n∙ │ Add support for blaming diff lines\n∙ │ Move blame parsing code to backend utility area\n∙ │ Refactor blame output parsing\n∙ │ Rename stage_diff_find to find_prev_line_by_type_\n∙ │ Add option to control the diff context\n∙ │ Move stage open logic to stage_open\n∙ │ Regroup default keybindings\n∙ │ Show remotes in branch view\n∙ │ Split out function to get line type from ref\n∙ │ Sort \"All branches\" to the top and prevent segfault\n●─│─╮ Merge pull request #9 from tokkee/sh/next\n│ │ ∙ Use error codes when checking parse_int() return value\n│ │ ∙ Colorize merge commit diffs as well\n∙─│─╯ get_author_initials: various fixes\n∙ │ Use locale-unaware methods for case conversion\n∙ │ Revert change to put %(ref):%(file) in the blame view title\n∙ │ Simplify blame argv formatting\n∙ │ Reload the blame view when changing the ref and file variables\n∙ │ Use mkauthor in grep functions\n∙ │ Fix problem with empty space when the author field is disabled\n∙ │ Unify enum map declarations through a common utility\n∙ │ Accept 'utf-8' for the line-graphics option as indicated in the docs\n∙ │ Fix regression where new content in the stage view does not reset the position\n∙ │ Refactor mkmode from draw_mode\n∙ │ Refactor mkauthor from draw_author\n∙ │ Refactor draw_refs out from main_draw\n∙ │ Merge prepare_update into open_argv; make open_file call open_argv\n∙ │ Use begin_update to load data in the tree and branch views\n∙ │ Fix blame view regression\n∙ │ io_run: make it possible to open file\n∙ │ Simplify format_argv to always replace\n∙ │ Rename prepare_io to prepare_update and make it more specialized\n∙ │ Move view splitting code to separate split_view\n∙ │ open_view: Use maximize_view to prepare non-split displays\n∙ │ open_view: gather split view code in the same branch\n∙ │ Introduce refresh_view based on load_view\n∙ │ Refactor view loading from open_view into load_view\n∙ │ Add open_argv and open_file to wrap update preparation and open_view call\n∙ │ Enhance prepare_update_file to add support for refreshable file IO\n∙ │ Simplify draw_author and draw_date logic\n∙ │ Make the low-level drawing functions update the view column\n∙ │ Add specialized open methods for each view\n∙ │ Convert tree_prepare to tree_open\n∙ │ Convert begin_update to act as a view_ops open function\n∙ │ Extend open() view ops to accept the open flags as an argument\n∙ │ Add VIEW_MAX_LEN macro to aid when drawing\n∙ │ Remove support for the deprecated TIG_{MAIN,DIFF,LOG,TREE,BLOB}_CMD env vars\n∙ │ Do not install test-graph\n∙ │ Improve parsing of the set command and variable arguments options\n∙ │ [GH-6] Make blame configurable via options from ~/.tigrc and the command line\n∙ │ tigrc(5): sort options alphabetically\n∙ │ Update and fix a few NEWS entries\n∙ │ [GH-3] Expand %(directory) to . for the root directory\n│ ∙ Update for version tig-0.17\n│ ●─╮ Merge branch 'master' into release\n∙─│─╯ tig-0.17\n∙ │ Rewrite the revision graph renderer\n∙ │ Move IO API to src/io.[ch]\n∙ │ Move includes, macros and core utilities to tig.h\n∙ │ Initialise views and screens with nonzero size.\n∙ │ Remove draw_text()s trim parameter\n∙ │ Remove unnecessary braces\n∙ │ Reduce the number of windows to max two by sharing them between all views\n∙ │ Use AX_WITH_CURSES from GNU autoconf archive to detect ncurses\n∙ │ configure.ac: Set value-if-not-found, don't check for program 'false'\n∙ │ Unify option toggling\n∙ │ Refactor option parsing error handling to use error codes\n∙ │ Add possiblity to pass data to io_load property reader\n∙ │ Rename opt_*_args to opt_*_argv\n∙ │ Improve viewing of diffs when browsing branches\n│ ∙ Update for version tig-0.16.2\n│ ●─╮ Merge branch 'master' into release\n∙─│─╯ tig-0.16.2\n∙ │ Fix 'tig show <commit>' fix which causes empty tree views\n∙ │ Check the ncurses version before using set_tabsize\n│ ∙ Update for version tig-0.16.1\n│ ●─╮ Merge branch 'master' into release\n∙─│─╯ tig-0.16.1\n∙ │ Fix tig show by replacing %(commit) with %(revargs) on first display\n∙ │ Use function set_tabsize()\n∙ │ Don't show out-of-sight tildes\n∙ │ Add an option to ignore unknown directories contents in the status view\n∙ │ Remove remains from the obsoleted toggle-date-short action\n∙ │ Actually add the ^D binding to move-page-down\n∙ │ Add a scroll-first-col command\n∙ │ Add vi-like ^ bindings\n∙ │ Allow tig to parse control-modified chars in tigrc\n∙ │ Fix segfault when starting tig in pager mode\n∙ │ Fall back to retry if no diff will be shown\n∙ │ Refactor argv_size out from argv_append\n│ ∙ Update for version tig-0.16\n│ ●─╮ Merge branch 'master' into release\n∙─│─╯ tig-0.16\n∙ │ Fix missing ID reference\n∙ │ Rename {diff,file,rev}-args to {diff,file,rev}args\n∙ │ Load diff arguments from TIG_DIFF_OPTS if defined and no diff args was passed\n∙ │ Move application of string_expand to draw_text\n∙ │ Improve parent blame to handle line-jumping for renames better\n∙ │ Improve parent blame to detect renames by using the previous information\n∙ │ Free blame view data when reloading view\n∙ │ Fix clearing of the loading flag in the input select loop\n∙ │ Deprecate use of TIG_{MAIN,DIFF,LOG,TREE,BLOB}_CMD environment variables\n∙ │ Add support for splitting command line arguments\n∙ │ Make the branch view always prepare how the main view is loaded\n∙ │ Cleanup initialization of built-in run requests\n∙ │ Make view and run request argv members flexible and allocated\n∙ │ Further cleanup IO startup and initialization; fix io_run_append\n∙ │ Cleanup IO struct initialization\n∙ │ Make argv_copy always allocate its members\n∙ │ Move struct io's argv and dir members to struct view\n∙ │ Remove format_flags enum and its companion format_argv forward declaration\n∙ │ Move and rewrite io_format to become prepare_io\n∙ │ Make argv_copy support allocating argv members\n∙ │ Plug another memory leak and cleanup update start code while at it\n∙ │ Mark the argument array as freed in argv_free\n∙ │ Refactor io_complete into a single backend for {back,fore}ground and append IO\n∙ │ Introduce io_prepare as a fix to plug memory leaks related to argv formatting\n∙ │ Internalize format flags in the IO layer\n∙ │ Make the blame view format its own command arguments\n∙ │ Use view_request to unconditionally refresh views after run requests\n∙ │ Add view_request to call the view request method\n∙ │ Move and rename free_argv to argv_free\n∙ │ Make open_blob_editor use its own argv show and take blob ID as an argument\n∙ │ Use view_is_displayed when figuring setting up the open flags\n∙ │ Restructure option management code to separate section\n∙ │ Only update status view at EOF for displayed views\n∙ │ fix off-by-one on parent selection\n∙ │ Simplify handling of REQ_NEXT/REQ_PREVIOUS by using view->parent\n∙ │ Add view->prev to track history leaving view->parent for split views\n∙ │ Color 'Reviewed-by' and 'Tested-by' lines\n∙ │ When adding a keybinding check if the key is already bound\n∙ │ Allow built-in run requests to be unbound\n∙ │ Fix set_keymap to error when resolving an unknown keymap\n∙ │ Added support for displaying dates in localtime.\n∙ │ Fixed parse_timezone to correctly calculate the offset in seconds.\n∙ │ tigrc(5): fix typo\n∙ │ Fix unbind behavoir\n∙ │ Introduce view->type member\n∙ │ Use foreach_view for the stop loading action\n∙ │ Remove unused VIEW_REQ() macro\n∙ │ Add view flag with information about whether the view supports refreshing\n∙ │ argv: remove now unused FORMAT_DASH\n∙ │ argv: make prepare_update use FORMAT_NONE\n∙ │ Branch view: add %(branch) variable tracking currently selected branch\n∙ │ argv: move report call to format_arg method\n∙ │ argv: refactor argv_from_env to return an error state\n∙ │ utf8: move unicode related functions below the string helpers\n∙ │ utf8: make utf8_to_unicode return 0 when encountering invalid symbols\n∙ │ io: consolidate formatting into io_format\n∙ │ io: set io->error when syscalls fail and remove calls to report and die\n∙ │ io: rename IO methods to have io_ prefix\n∙ │ io: fix comment in io struct\n∙ │ Rename string_date to mkdate and add incorporate common checks\n∙ │ Move nodelay logic to the get_input read loop\n∙ │ Mark detached heads with [HEAD]; replace opt_head_rev with a struct ref\n∙ │ opt_codeset is only use in main, so make it local\n∙ │ Make utf8_length take opt_tab_size as a parameter\n∙ │ Remove line_graphic enum\n∙ │ Silence warning about unused computed value\n∙ │ Update copyrights\n∙ │ Only draw dates with non-zero seconds\n∙ │ Fix the display of relative date by storing the time zone information\n∙ │ Fix author abbreviation to handle multi-byte and multi-column characters\n∙ │ Use FALSE marco instead of C++ false value\n∙ │ prepare_update_file: assume file is relative to root directory\n∙ │ Status view: limit untracked file by the prefix/subdirectory\n∙ │ open_editor: always open path relative to the repository root directory\n∙ │ get_author_initials: improve and fix to not read outside of name string\n∙ │ Abbreviation of author names is now configurable and toggleable\n∙ │ Refactor format variable lookup and expansion\n∙ │ Oops, fix enum_equals\n∙ │ Make return value of string_date const\n∙ │ Simplify enum name comparison with enum_equals macro\n∙ │ Define date values in DATE_INFO macro\n∙ │ Refactor toggle_date_option into a generic enum_map based toggler\n∙ │ Introduce parse_enum and use it to parse the show-date option\n∙ │ Refactor help_name into enum_name\n∙ │ Fix parsing of boolean show-date values\n∙ │ toggle_date_option: use passed date argument instead of opt_date\n∙ │ Fix usage of the status view from a sub directory\n∙ │ Encode everything internally as UTF-8\n∙ │ Branch view: support browsing --all branches\n∙ │ Cleanup bluring of the previous view's title bar\n∙ │ foreach_ref: make ref argument const\n∙ │ Status view: update the file variable when a line is selected\n∙ │ TODO: line wrapping\n∙ │ Fix install-release-doc make rules to use origin/release\n∙ │ Add make rules to install documentation from the release branch\n│ ∙ Update for version tig-0.15\n│ ●─╮ Merge branch 'master' into release\n∙─│─╯ tig-0.15\n∙ │ Makefile: Fix typo in 157ebf54\n∙ │ Status view: special case revert of unmerged entries with no physical file\n∙ │ io_open: take path as a vararg format\n∙ │ run_io_rd_dir: obsolete by switching call sites to run_io_rd_dir\n∙ │ run_io_dir: take dir argument\n∙ │ begin_update: simplify control flow\n∙ │ Remove build dependency on git from the configure script\n∙ │ tigmanual(7): provide the manual as a man page\n∙ │ Update asciidoc table syntax to the one supported by version 8.4.4\n∙ │ NEWS: Improve bug fix description\n∙ │ Fix loading of blame data when opened from the tree view\n∙ │ Fix draw_date to not format anything when time arg is NULL\n∙ │ Fix whitespace\n∙ │ Add support for displaying relative dates\n∙ │ NEWS: Mention date-shorten feature\n●─│─╮ Merge remote branch 'samb/short-dates'\n∙ │ │ Show the active (instead of the default) keybindings in the help view\n│ │ ∙ Add an option (and toggle) for shortening the date column by skipping the time.\n∙─│─╯ Build with asciidoc-8.4.5\n∙ │ Fixed some uninitialized variable warnings\n∙ │ Allow multiple text attributes for color commands\n∙ │ Remove macros which are only used for default option values\n∙ │ Make height of split view configurable\n∙ │ Manual: document that :<number> jumps to the line number\n∙ │ Fix memory allocation check in open_commit_parent_menu\n∙ │ Use menus with the commit subject to present selectable commit parents\n∙ │ Add simple support for showing menues and use it for showing option menu\n∙ │ Restore the branch view position after refreshing\n∙ │ Fix reloading of references to not cause access to freed memory\n∙ │ Predefined external command: git commit\n∙ │ Fix previous/next with branch+main view\n∙ │ Add support for sorting branch entries by name, date and author\n∙ │ Add support for sorting tree entries by name, date or author\n∙ │ Branch view: fix loading to handle when two branches have same commit\n∙ │ Use temporary variable in refs loop in main_draw\n∙ │ Minor fix to always sort even if allocation fails in get_refs\n∙ │ Add primitive branch view\n∙ │ Add missing NULL in blame_grep\n∙ │ Fix a potential problem with reading tokens larger then BUFSIZ\n∙ │ Update the current branch information when reloading all references\n∙ │ Define an allocator for run requests\n∙ │ Remove the need for alloc variables\n∙ │ Make the granular allocators more customizable using macros\n∙ │ Define a tree_grep and fixing searching\n∙ │ Simplify searching in view lines by defining grep_text utility\n∙ │ Reduce memory and startup time by storing author times as time_t\n∙ │ Add small cache for author names to reduce memory foot-print\n│ ∙ Update for version tig-0.14.1\n│ ●─╮ Merge branch 'master' into release\n∙─│─╯ tig-0.14.1\n∙ │ Remove unneeded doupdate from view_driver\n∙ │ Keep the cursor fixed while initial stage progress is reported\n∙ │ Fix draw_lineno to always set the static format buffer\n∙ │ Fix bug in draw_space to not access memory outside the space buffer\n∙ │ Refactor draw_lineno to use draw_graphic\n∙ │ Fix horizontal scrolling\n∙ │ Remove limitation of horizontal scrolling\n∙ │ tigrc(5): suggest git aliases for external commands requiring shell ops\n∙ │ Fix the view clearing to only be effective for displayed views\n∙ │ Make behavior of horizontal scrolling configurable\n∙ │ Fix handling of quoted strings in the config file\n∙ │ tigrc(5): fix error in examples for the set command\n∙ │ Tree view: draw submodule entry modes as \"m---------\"\n∙ │ Status view: report failures to update a file\n∙ │ Ignore broken pipe signals\n∙ │ Use putenv instead of setenv\n∙ │ manual: Correct the keys to move the cursor one line up/down\n∙ │ Status view: upon failure to open a file show error message\n∙ │ Refactor and share view maximization code from view-close handling\n∙ │ Fix io_strerror return type\n∙ │ Add support for handling core.worktree\n∙ │ Optimize read_repo_config_option to reduce string comparisons\n∙ │ Move setting of remote branch from repo config to separate function\n∙ │ Mark enum_maps and other data tables as const\n∙ │ Use check_blame_commit when handling REQ_ENTER\n∙ │ NEWS: Mention Jeff's uninitialized variable bug fix\n∙ │ Handle blaming beyond the creation of file more gracefully\n∙ │ Blame view: add guesstimation of line number when blaming parent commit\n∙ │ Use file and line number information when loading blame for commit\n∙ │ Make the blame view expand tabs at drawing time\n∙ │ Introduce common view position update helper\n∙ │ Improve restoring of the view position to bound the offset\n∙ │ Jump to line when a number is entered in the prompt\n∙ │ Warn users about integers in ~/.tigrc being out of bound\n∙ │ Fix uninitialized variable in string_expand_length\n∙ │ Add support for 256 colors by allowing \"colorN\" names similar to Mutt\n∙ │ Improve on branch information in the status view\n∙ │ Simplify setting the default for the system configuration file\n∙ │ Refactor and unify timezone parsing\n∙ │ Remove the need for the OPEN_NOMAXIMIZE flag\n∙ │ Remove unused OPEN_BACKGROUNDED flag\n∙ │ Use enum_map for handling obsolete color names\n∙ │ Use enum_map for handling obsolete request names\n∙ │ Refactor the int_map interface into new enum_map interface\n∙ │ Cleanup and simplify option file parsing\n│ ∙ Update for version tig-0.14\n│ ●─╮ Merge branch 'master' into release\n∙─│─╯ tig-0.14\n∙ │ Read tigrc(5) options from git configuration files\n∙ │ tig(1): correct info on tree view related environment variables\n∙ │ Add release script documenting the release procedure\n∙ │ Spell check all text files and add dictionary to speed it up\n∙ │ tigrc(5): document the tree view colors\n∙ │ Refactor file mode drawing; rename tree-mode color to mode\n∙ │ Replace usage of the main-author color with the author color\n∙ │ Move usage string near parse_options\n∙ │ Tree view: improve handling of empty trees\n∙ │ Fix reverting of unmerged status entries\n∙ │ Add support for horizontal scrolling\n∙ │ Expand tabs in displayed lines to not rely on ncurses to expand them\n∙ │ Treat empty '/' as \"find next\"\n∙ │ TODO: elaborate and regroup into 'before tig-1.0' and 'long term goals'\n∙ │ Move initial view setup into parse_options\n∙ │ Move parse_option so it has access to view definitions\n∙ │ Remove parsing of deprecated option -S and subcommands log and diff\n∙ │ Rename & move read_properties and git_properties\n∙ │ Use warn() for warnings emitted during config file loading\n∙ │ Fix scrolling bugs in gnome-terminal and (u)xterm\n∙ │ BUGS: document problem with scrolling in (u)xterm\n∙ │ Tune the view clearing to wait until 2 seconds has passed\n∙ │ Handle all cursor positioning in get_input\n∙ │ Optimize drawing by updating the screen in one go\n∙ │ Abbreviate author names to initials when author-width < 6\n∙ │ Refactor author drawing into draw_author\n∙ │ Fix tokenizing when parsing ~/.tigrc\n∙ │ Workaround bug exposed by the redrawwin removal in do_scroll_view\n∙ │ Make cursor updating when resizing the display and loading a view\n∙ │ Change scrollok strategy to leave it off unless when calling wscrl\n∙ │ Initialize status_empty flag to FALSE\n∙ │ Eliminate unneeded calls to redrawwin\n∙ │ TODO: a small commit cache should be employed at some point\n∙ │ Help view: show the action name similar as in Mutt's help view\n∙ │ Remove preallocation of view lines in help_open\n∙ │ corrected doubly used ID view-manipulation in manual.txt\n∙ │ tigrc(5) & manual: move view specific actions out of the misc group\n∙ │ Add support for loading blame for parent commits\n∙ │ Refactor prompting for user input\n∙ │ Rename tree-parent action to parent\n∙ │ Minor cleanup of the tree view code; fix enter on the first line\n∙ │ TODO: remove resolved item\n∙ │ Tree view: improve to look less like plumbing\n∙ │ Refactor main_read to create parse_author_line\n∙ │ update_view: remove an unneeded goto\n∙ │ Fix floating point bug in the blame reporting\n∙ │ Also call end_update for views with custom open function\n∙ │ Add -O0 to the debug flags\n∙ │ Rectify arg indexes changes in blame --no-color fix\n∙ │ Fix status loading of unmerged entries to avoid access to freed memory\n∙ │ Fix kill_io() to only call kill(2) when pid is non-zero\n∙ │ Blame view: fix reloading of the diff view for changes not yet committed\n∙ │ Oops, always specify --no-color when using git diff\n∙ │ Blame view: fix diffing of lines marked as not yet committed\n∙ │ Add support for restoring the view position in reloadable views\n∙ │ Fix status_exists to be consistent with data displayed in the stage view\n∙ │ Make it possible to call select_view_line for non-displayed views\n∙ │ Refactor find_next_line into select_view_line\n∙ │ Refactor user input handling into separate function\n∙ │ Add support for opening any blob in an editor\n∙ │ Prefer werase to wclear when possible to reduce flickering\n∙ │ Cleanup and improve option toggling actions to include help message\n∙ │ Fix stage reloading to not close when staging chunks from group diff\n∙ │ Do not terminate the update when switching back to a loading view\n∙ │ Fix regression of main view drawing\n∙ │ Cleanup update_view's read loop\n∙ │ Fix regression in handling of data for non-UTF-8 locales\n∙ │ Fix another regression from the dirty flag changes causing flickering\n∙ │ Fix serious bug where a stack allocated variable was returned\n∙ │ Improve messages when preparing to load blame commits\n∙ │ Fix regressions introduced in the last few dirty flag changes\n∙ │ Tree view: make drawing more smooth by using the dirty flag\n∙ │ Cleanup redrawing of views when updating by using the dirty flag\n∙ │ Cleanup the tree_read sorting loop\n∙ │ Fix memory corruption bug in tree_read when sorting the entries\n∙ │ Cleanup and simplify the code by introducing add_line_format\n∙ │ Cleanup the code by calling realloc_lines in add_line_data\n│ ∙ Sync docs\n│ ●─╮ Merge branch 'master' into release\n∙─│─╯ tig-0.13\n∙ │ Launch mergetool from the project root directory\n∙ │ Clear the view after 1 second during updates where reading takes long\n∙ │ IO API: use select(2) to check if pipe is readable when updating a view\n∙ │ IO API: reindent status_run main loop after the rewrite\n∙ │ IO API: replace io_gets with helper for scanning buffers\n∙ │ IO API: use fork+exec\n∙ │ IO API: use argv internally\n∙ │ IO API: use file descriptor internally\n∙ │ IO API: replace init_io_fd with io_open which calls fopen(3)\n∙ │ IO API: use in the status view\n∙ │ IO API: use when loading repository properties\n∙ │ IO API: use in the stage view\n∙ │ IO API: obsolete opt_pipe\n∙ │ IO API: obsolete opt_cmd by using prepare_update in status_enter\n∙ │ IO API: use prepare_update when parsing command line arguments\n∙ │ IO API: use in add_describe_ref\n∙ │ IO API: use in the blame view\n∙ │ IO API: unify tree view and the default path in begin_update\n∙ │ IO API: use for the main, log, diff, tree and blob views\n∙ │ IO API: use when preparing to run commands from the prompt\n∙ │ IO API: convert status checkout/revert support\n∙ │ IO API: use when running external commands\n∙ │ IO API: refactor the run request command formatter\n∙ │ IO API: add small library for reading files and running programs\n∙ │ Blame: do to not reload the diff view for same commits\n∙ │ Blame: update blame to selected commit when pressing 'B'\n∙ │ Blame: remove unused member of struct blame\n∙ │ Add setup_update for initialize incremental view updates\n∙ │ Slightly reduce memory usage for keybindings\n∙ │ Move formatting of blame --incremental command to blame_read_file\n∙ │ Minor simplification of blame_open\n∙ │ Don't use view->cmd to share state in the blame view\n∙ │ Fix drawing loading views that are not displayed.\n∙ │ Add support for launching the editor from the tree view\n∙ │ Replace opt_no_head with opt_head_rev in order to save the HEAD rev\n∙ │ Use switch statement in tree_request\n∙ │ Refuse to open blame view for all non-file entries in the tree view\n∙ │ Refuse to open deleted files from the status and stage views\n∙ │ tigrc(5): minor fixes and improvements from wip/run-command\n∙ │ Refuse to open a directory in the status and stage view\n∙ │ Fix waiting for input after executing a run request in pager mode\n∙ │ update_view: Check the pipes and call end_update() before redrawing\n∙ │ Use \"--\" to separate file argument to git-checkout\n∙ │ Cleanup and fix the main loop to make view point to the current view\n│ ∙ Sync docs\n│ ●─╮ Merge branch 'master' into release\n∙─│─╯ Update and improve the manual\n∙ │ Remove documentation relicts from before the option parsing was changed\n∙ │ Introduce prefixcmp macro to reduce code verbosity\n∙ │ Separate blame revision and file argument by \"--\" to avoid problems\n∙ │ Add bash completion for the blame subcommand\n∙ │ Remove outdated comment\n∙ │ Make more strings const\n∙ │ Sort references in the order: tags, heads, tracked remotes, remotes\n│ ∙ Sync docs\n│ ●─╮ Merge branch 'master' into release\n∙─│─╯ tig-0.12.1\n∙ │ Rename checkout to revert and support individual diff chunks reverts\n∙ │ Avoid triggering assertion failure when reloading the status view\n∙ │ Consolidate and share view resetting via new reset_view()\n∙ │ Help view: move requests from the Misc group into separate groups\n∙ │ Help view: use \"(no key)\" instead of \"'?'\" to not confuse unbound actions\n∙ │ Clear the status line when closing a view\n∙ │ Fix bug introduced in commit for using --exclude-standard flag\n∙ │ Add support for refreshing the log view\n∙ │ Make OPEN_REFRESH imply OPEN_NOMAXIMIZE\n∙ │ Simplify view refreshing by adding new OPEN_REFRESH flag for open_view\n∙ │ Show complete shortlog for small releases\n∙ │ Improve checkout error reporting\n∙ │ Cleanup and make option argument strings const\n∙ │ Improve handling of unmatched quotes in ~/.tigrc\n∙ │ Make GIT_CONFIG only contain the config subcommand\n∙ │ Reload repository references when refreshing the main view\n∙ │ Avoid refreshing views when checkout is canceled by user\n∙ │ Also allow files to be checked out from stage view\n∙ │ Cleanup exclude rule setup by using ls-files --exclude-standard flag\n∙ │ Main: use --topo-order when arguments are given on the command line\n∙ │ main: automatically refresh after run requests\n∙ │ status: add support for checking out files with unstaged changes\n∙ │ TODO: support for jumping to parents' blame in the blame view\n∙ │ Add script for preparing release announcements\n│ ∙ Sync docs\n│ ●─╮ Merge branch 'master' into release\n∙─│─╯ tig-0.12\n∙ │ Do not show boundary commits by default\n∙ │ main: implement refreshing by just rerunning the original command\n∙ │ Continue updates when pipe read has errno \"Success\"\n│ ∙ Sync docs\n│ ●─╮ Merge branch 'master' into release\n∙─│─╯ Clean up incomplete commits from main view listed for --no-walk\n∙ │ Remove the global opt_request variable\n∙ │ TODO: Option for abbreviating author names using just the initials\n∙ │ Gracefully ignore negative values given to options in ~/.tigrc\n∙ │ Add option 'author-width' to consumize the width of the author column\n∙ │ INSTALL: Mention the release notes in the NEWS file\n∙ │ Update NEWS\n∙ │ Remove useless check in blame_read_file()\n∙ │ Rename the gitlink:[] AsciiDoc macro to manpage:[]\n∙ │ Fix reopening blame view when it is already loading\n∙ │ Fix the view notification of end of reading\n∙ │ Makefile: remove bashism from distclean rule\n∙ │ Add stage-next action to jump to next diff chunk that can be staged\n∙ │ Make configure check for ncurses header files\n∙ │ Drop use of \\$(...) for popen() and system() calls\n│ ∙ Sync docs\n│ ●─╮ Merge branch 'master' into release\n∙─│─╯ Add NEWS file\n∙ │ Fix warnings emitted with -pedantic\n∙ │ Refactor management of the current draw column and max draw width\n∙ │ Use draw_field() for the author field\n∙ │ Introduce draw_field() helper for drawing main and blame fields\n∙ │ Refactor revgraph drawing into draw_graphic()\n∙ │ blame: simplify handling of incomplete commit information\n∙ │ Simplify line attribute handling\n∙ │ Keep line graphics characters in a table initialized on startup\n∙ │ Add line-graphics option to disable graphics characters for line drawing\n∙ │ Search checks reference names too\n∙ │ Document the main-commit colour option\n∙ │ Let ncurses take care of expanding tabs by setting its TABSIZE variable\n∙ │ Refreshing the current view when F5 is pressed (like gitk)\n∙ │ Fix regression from \"Improve staging of diff chunks\"\n∙ │ Do not reload status and stage views on errors\n∙ │ Fix AsciiDoc replacing -- in --with-libiconv\n∙ │ Squelsh output of update-index when loading the status view (part II)\n∙ │ Rebind the maximize action to 'O' instead of 'M'\n│ ∙ Sync docs\n│ ●─╮ Merge branch 'master' into release\n∙─│─╯ tig-0.11\n∙ │ Use sans-serif font for the README page\n∙ │ Update copyright notice for the manual\n∙ │ Remove unused blame line attributes\n∙ │ Use tables for listing the UI colors\n∙ │ Minor cleanup in blame_draw\n∙ │ Setup colors for the selected line in draw_view_line()\n∙ │ Make the main and blame view share date drawing and date colors\n∙ │ Squelsh output of update-index when loading the status view\n∙ │ Avoid splitting the view when navigating stage view in full screen\n∙ │ Use 3 as the minimum width of formatted line numbers\n∙ │ Revert \"When toggling options redraw the view instead of the whole display\"\n∙ │ Fix compatibility for git rev-parse without --symbolic-full-name\n∙ │ Error out when starting up in empty main or blame view\n∙ │ Improve staging of diff chunks\n∙ │ Reload the status and stage views after a run request has been handled\n∙ │ Add support for refreshing of the stage view\n∙ │ When toggling options redraw the view instead of the whole display\n∙ │ Use werase() instead of wclear() when reloading a view\n∙ │ Share the line number colors between blame view and others\n∙ │ Rename load_repo_config() to load_git_config()\n∙ │ Do not load repository references when acting as a pager\n●─│─╮ Merge branch 'master' of remote-server:src/tig\n│ │ ∙ status: use draw_text completely\n∙ │ │ Make local tags and normal branches use normal font-weight\n∙ │ │ Show the tracked remote branch with bold text\n│ │ ∙ Add draw_lineno() and use when drawing the blame and pager view\n│ │ ∙ Add action to maximize the current view; bound to M by default\n∙─│─╯ Disable opening views that require a git directory when in pager mode\n∙ │ Fix pager mode by always doing the isatty()\n∙ │ stage: disable whitespace warnings from git apply when staging updates\n∙ │ Improve perfomance and usability when updating many files\n∙ │ Fix and improve status refreshing after updating\n∙ │ Fix uninitialized variable warning\n∙ │ Output extra \\n on tig -h\n∙ │ Avoid reloading the status view when nothing was updated\n∙ │ Oops, fix delimiter documentation\n∙ │ Add support for preparing the initial commit in the status view\n∙ │ Rename \"main-delim\" color to the more generic \"delimiter\"\n∙ │ Show the current branch in the status view\n∙ │ Save current branch from rev-parse output and highlight it\n∙ │ blame: Fix opening from subdirectory and consecutive invokations\n∙ │ Remove deprecated options and cleanup option parsing\n∙ │ More blame view fixes\n∙ │ Various fixes and improvements of the new blame view\n∙ │ Add blame view\n∙ │ Add hack to allow view loading to have multiple phases\n∙ │ Simplify subcommand option parsing by moving it out of the loop\n∙ │ draw_text: remove unused col argument\n∙ │ Use rewritten parent info from --parents to simplify the revgraph\n∙ │ Move unrelated UTF-8 setup code out of parse_options\n∙ │ tigrc(5): Improve documentation of new show-* options\n∙ │ configure: test for git binary and improve config subcommand test\n∙ │ Call realloc() less often because it is potentially slow.\n∙ │ New config options show-author, show-date, show-refs, show-line-numbers.\n∙ │ Fixed displaying local tags.\n∙ │ New actions toggle-date, toggle-author, and toggle-refs.\n∙ │ Fix index refreshing into separate call so diff-files is always run\n∙ │ draw_text: reduce indentation level\n∙ │ draw_text: minor cleanup to use fewer local variables\n∙ │ utf8_length: add reserve flag for reserving a trailing character\n∙ │ TODO: --boundary flag is already used\n∙ │ 0.11.git\n│ ∙ Sync docs\n│ ●─╮ Merge branch 'master' into release\n∙─│─╯ tig-0.10.1\n∙ │ More verbose diff headers (including dates and committer)\n∙ │ Fix drawing \"outside\" the screen in the status and pager views\n∙ │ Fixed handling of UTF8 tag names and commit messages.\n∙ │ Make configure search for the ncursesw library first\n∙ │ Fix compiler warnings: pointer of type ‘void *’ used in arithmetic\n∙ │ Fix signed char comparison where char is unsigned by default\n∙ │ Fixed spurious \"/bin/sh: --list: command not found\" error\n│ ∙ Sync docs\n│ ●─╮ Merge branch 'master' into release\n∙─│─╯ Refresh the index when opening the status view to avoid \"empty diffs\"\n∙ │ Add rename support to the status view\n∙ │ Make it more clear that use of configure (and autoreconf) is optional\n∙ │ Replace SYSCONFDIR value in distributed documentation distributed\n∙ │ tig-0.10.1.git\n│ ∙ Sync docs\n│ ●─╮ Merge branch 'master' into release\n│ │ ∙ Replace SYSCONFDIR value in distributed documentation distributed\n│ ∙ │ Sync docs\n│ ●─│─╮ Merge branch 'master' into release\n∙─│─┴─╯ tig-0.10\n∙ │ Make command line parsing more compatible with gitk\n∙ │ Add system-wide configuration file and new config file environment vars\n∙ │ Make it possible to overwrite the default (terminal) colors\n∙ │ Add support for showing boundary commits in the main view\n∙ │ Drop -B from diff options\n∙ │ Simplify documentation building and fix asciidoc.conf dependency\n∙ │ Replace the manpage XSL workarounds with AsciiDoc conf workarounds\n∙ │ INSTALL: Document the optional documentation tools\n∙ │ Update manpages to not contain contain so many formatting workarounds\n∙ │ Added examples to tig(1) manpage\n∙ │ TODO: Mention tig.c splitting and revgraph rewrite\n∙ │ Install manpages in \\$(prefix)/share/man\n∙ │ Updated .gitignore\n∙ │ Removed trailing whitespace.\n∙ │ Added action tree-parent and bound it to backspace by default.\n∙ │ Added color option main-revgraph to color the revision graph.\n∙ │ Add documentation for undocumented color options.\n∙ │ Minor formatting and spelling fixes.\n∙ │ Ignore HTML files in general\n∙ │ manual: remove section on porcelains\n∙ │ Makefile: add ASCIIDOC_FLAGS\n∙ │ Avoid using git-diff since it might run external diff drivers\n∙ │ Use --no-color option when calling git-log and git-diff\n∙ │ Rearrange the order of option parsing\n∙ │ Fix crash when opening mergetool for lines that are not unmerged\n∙ │ Use get_key_name() in get_key()\n∙ │ Add missing = for comparison in obsolete actions check\n∙ │ Collect remaining string in last entry when parsing config file lines\n∙ │ Improve sanity check error messages\n∙ │ Obsolete the cherry-pick action and define as builtin external command\n∙ │ Add support binding keys to running external commands\n∙ │ Unify REQ_NONE and REQ_UNKNOWN by moving REQ_NONE to be the last request\n∙ │ tig-0.10.git\n│ ∙ Sync docs\n│ ∙ Sync docs\n│ ●─╮ Merge branch 'master' into release\n∙─│─╯ tig-0.9.1\n∙ │ SITES: 'Tarballs' is a bit more telling than 'Releases'\n∙ │ Cleanup status_request to make it reload the status view by default\n∙ │ Add support for launching git-mergetool from the status view\n∙ │ Refactor code to open_external_viewer\n∙ │ Detect working trees and disable the status view when it is missing\n∙ │ Document the refresh request\n∙ │ Ignore REQ_NONE in the help view and improve unbound request handling\n∙ │ Never put the release number in the tarball name for tagged versions\n∙ │ Also ignore generated .md5 files for tarballs\n∙ │ Add support for refreshing/reloading the status view\n∙ │ Remove unused 'view' argument from open_editor\n∙ │ Include autoconf file for 'make dist'\n∙ │ Fix the clean rule to never remove generated doc files\n∙ │ Fix out-of-range lineno when reloading the status view\n∙ │ Fix open_editor to make the file path relative to the project root\n∙ │ Handle REQ_NONE upfront in view_driver\n∙ │ Support cherry-picking commits in main view to current branch\n∙ │ Oops, always ensure that ICONV_CONST is defined\n∙ │ Use the more advanced iconv.m4 script from ELinks\n∙ │ tig-0.9.1.git\n│ ∙ Sync docs\n│ ●─╮ Merge branch 'master' into release\n∙─│─╯ tig-0.9\n∙ │ Change the default styles for the status view\n∙ │ Update documentation\n│ ∙ Sync docs\n│ ●─╮ Merge branch 'master' into release\n∙─│─╯ Force adding of doc files in the release-doc rule\n∙ │ Fix INSTALL\n∙ │ Build intermediate tig.o file to fix tig dependency on config.h\n∙ │ Ensure ICONV_INBUF_TYPE is always defined; fix GIT_CONFIG define\n∙ │ Guard config.h include with HAVE_CONFIG_H\n∙ │ Define TIG_VERSION as intended when autoconf was introduced\n∙ │ Change last commit to make tig depend on config.h\n∙ │ Make tig.c depend on config.h when using configure\n∙ │ Add CC to the list of expanded symbols by configure\n∙ │ Allow LDLIBS to be overriden by configure\n∙ │ Fix warning from blob_read returning pointer instead of bool\n∙ │ stage: add request handler supporting file edits and chunk staging\n∙ │ Add stage view, which is used for showing status changes\n∙ │ autoconf: check for the AsciiDoc and XmlTo document tools\n∙ │ autoconf: check whether to use git-config or git-repo-config\n∙ │ Add autoconf-based build infrastructure for tig\n∙ │ tree: use simple stack to remember the previous subtree line numbers\n∙ │ Only show the command being loaded from for the pager view\n∙ │ TODO: tig now has a status view\n∙ │ Make it possible to browse all status changes once the diff view is open\n∙ │ Fix handling of REQ_NEXT/REQ_PREVIOUS\n∙ │ Fix updating of the view title to show the current position in the view\n∙ │ Warn about nothing to enter if REQ_ENTER reaches the view_driver switch\n∙ │ status: implement support for opening files in editor\n∙ │ status: cleanup status_request by resurrection status_enter\n∙ │ status: \"wire\" REQ_STATUS_UPDATE handling through status_request\n∙ │ Add view request operation for handling view specific requests\n∙ │ status: fix switching to the main view when starting in status view\n∙ │ status: improve title and report messages\n∙ │ status: make it possible to batch updates by pressing on the section line\n∙ │ status: assert that there are always view lines in the status view\n∙ │ status: make it possible to see all changes for a status section\n∙ │ status window: mention 'u' instead of Enter\n∙ │ Add support for showing staged/unstaged changes and untracked files\n∙ │ Introduce status-update action bound to 'u' by default\n∙ │ Avoid flickering when moving past the main view's first and last line\n∙ │ Ignore generated HTML pages\n∙ │ Ignore generated manpages.\n∙ │ Include the tig bash completion script as documentation\n∙ │ Rename contrib/tig-completion.sh to contrib/tig-completion.bash\n∙ │ Fix a few typos in the bash completion\n∙ │ Simplify naming (versioning) of non-release tig tarball and rpm file\n∙ │ Move tig.spec.in to the contrib area\n∙ │ Move tigrc to the contrib area\n∙ │ Add tig bash completion script\n∙ │ Delete the old VERSION file before appending the new one in make dist\n∙ │ Use \\$(MAKE) instead of 'make' and 'git *' instead of 'git-*'\n∙ │ tig-0.8.git\n│ ∙ Sync docs\n│ ●─╮ Merge branch 'master' into release\n∙─│─╯ tig-0.8\n∙ │ Fix pager mode regressions\n∙ │ Fix (another) integer type mismatch on 64-bit systems\n∙ │ Fix integer type mismatch on 64-bit systems\n∙ │ Add TODO about using non-blocking I/O for incremental view loading\n∙ │ Only emit one \"Not a git repository\" error message\n∙ │ Allow CFLAGS to be overridden while preserving VERSION\n∙ │ Grab path to the git directory; use it when listing untracked files\n∙ │ read_properties: use size_t instead of int for callback\n∙ │ Fix wrong uses of string_copy() with pointer instead of buffer\n∙ │ Fix use of the status view from subdirectories\n∙ │ Fix string_copy macro to use sizeof(src) for the source buffer\n●─│─╮ Merge branch 'jn/rpm-updates'\n│ │ ∙ Refresh VERSION file when building distribution tarball in \"make dist\"\n│ │ ∙ Include documentation sources for rpmbuild with '--without docs'\n│ │ ∙ Remove PDF version of manual from being build and installed\n∙ │ │ Make dist rule more robust using '&&'; create .tar.gz.md5 file\n∙─│─╯ Fix typo the INSTALL file\n∙ │ Supply explicit permission bits to 'install'\n∙ │ tig-0.7.git\n│ ∙ Sync docs\n│ ●─╮ Merge branch 'master' into release\n∙─│─╯ tig-0.7\n∙ │ Rename sync-docs to release-doc; add release-dist rule\n∙ │ Various random Makefile cleanups\n│ ●─╮ Merge branch 'master' into release\n∙─│─╯ Update sync-docs target to use git porcelain instead of cogito\n∙ │ Infrastructure for tig rpm builds\n∙ │ Move \"static\" version info to VERSION file\n∙ │ Add version information to man pages\n∙ │ Add manpage XSL from git and enhance with literallayout fixes\n∙ │ Add status view\n∙ │ main_read: cleanup and simplify\n∙ │ Refactor add_line_text parts into add_line_data; use it in main_read\n∙ │ Add open method to view_ops\n∙ │ Add notice about empty pager view\n∙ │ Add notice about empty pager view\n∙ │ Make keybinding reference more dynamic\n∙ │ Move space separator from get_key to formatting in open_help_view\n∙ │ Improve managment of view->ref and the title line\n∙ │ Be more paranoid about paths when updating the tree view\n∙ │ move_view: fix view->offset overflow bug\n∙ │ Introduce add_line_text to simplify pager based rendering\n∙ │ Fix revision graph visualization during incremental updating\n∙ │ Add TODO item about diff chunk staging/unstaging\n∙ │ Make it possible to install man pages and html files separately\n│ ∙ Fix synced docs ... stupid Mac OS X sed ;)\n│ ∙ Sync docs\n│ ●─╮ Merge with tig-0.6\n∙ │ │ tig-0.6.git\n∙─│─╯ Bump the version number to 0.6\n∙ │ Oops, remove -liconv from LDFLAGS\n∙ │ Disable show-rev-graph by default\n●─│─╮ Merge with master\n│ │ ∙ Improve handling of remotes\n│ │ ∙ TODO: use autoconf to detect newer git and git-config availability\n│ │ ∙ Make tig handle GIT_DIR better\n│ │ ∙ Drop --stat usage from the main command assembled during option parsing\n│ │ ∙ Add note about using autoconf to detect iconv(3) presence in libc\n│ │ ∙ Fix parameter warning for iconv(3)\n│ │ ∙ Fix SITES URLs; promote git://repo.or.cz/tig.git mirror more\n│ │ ∙ Discard error messages from git-describe\n│ │ ∙ Fix commit author line parsing for when the name is empty\n●─│─│─╮ Merge with master\n│ │ ∙─╯ Never split the tree view when opening another tree view\n│ │ ∙ Cast second arg to iconv to remove warning\n│ │ ∙ main_read: handle titles that start with whitespace\n│ │ ∙ Increase commit.title size from 75 to 128\n│ │ ∙ Hardwire ERR to mean REQ_NONE in the main loop\n│ │ ∙ add_keybinding: always allocate the new keybinding\n│ │ ∙ tig-0.5.git\n│ ∙ │ Sync docs\n│ ●─│─╮ Merge with master\n│ │ ∙─╯ SITES: Point to pasky's git proxy repo.or.cz\n│ │ ∙ INSTALL: mention possible iconv problems and workarounds\n│ │ ∙ manual: document the tree/blob environment variables\n│ ∙ │ Sync docs\n│ ●─│─╮ Merge with master\n│ │ ∙─╯ Always clear the status window after prompting\n│ │ ∙ Oops, check log, diff, and show before options\n│ │ ∙ Use wclrtoeol instead of werase\n│ │ ∙ Fix clearing of the status window after prompting\n│ │ ∙ parse_option: check for '-' first and break if it is not an option\n│ │ ∙ Improve the \"input mode\" so the cursor is correctly positioned\n│ │ ∙ add_keybinding: plug memory leak\n│ │ ∙ TODO: repository status view, better text-input support\n│ │ ∙ tigrc(5): mention tree/blob view actions; use dash in favour of underscore\n│ │ ∙ Run the documentation through aspell\n∙ │ │ push_rev_graph: iterate all graph revs when looking for duplicates\n│ │ ∙ BUGS: Merge locale support with utf8-only bug, add horizontal scrolling\n●─│─│─╮ Merge with master\n│ │ ∙─╯ Abbreviate the view reference in the view title for small widths\n│ │ ∙ update_view_title: format load seconds as part of the state string\n│ │ ∙ update_view_title: use string_format_from instead of wprintw\n│ │ ∙ A simple fix of the bad wrapping bugs\n│ │ ∙ update_display_cursor: take view as arg\n∙ │ │ Make the rev graph visualization have a one rev look-ahead\n∙ │ │ update_rev_graph: move code to prepare_rev_graph\n∙ │ │ Allow view readers to 'finalize' by calling with NULL line before closing\n∙ │ │ append_to_rev_graph: use local variable\n∙ │ │ Always draw the space between end of rev graph and start of commit title\n∙ │ │ Refactor (separator, line) chtype management to use 'fillers'\n∙ │ │ More graph_parent_is_merge usage\n∙ │ │ draw_rev_graph: refactor stuff to get_rev_graph_symbol\n∙ │ │ Improve comments\n∙ │ │ Use 'graph' instead of 'stack' in the rev graph code\n∙ │ │ Move rev graph code to own section\n∙ │ │ Move stuff to reset_rev_graph and rename it to done_rev_graph\n∙ │ │ Simplify the update_rev_graph end-game\n∙ │ │ Add graph_parent_is_merge\n∙ │ │ Now it actually starts looking like something\n∙ │ │ Refactor graph drawing\n∙ │ │ Remove fprintf stuff\n∙ │ │ More cleanups\n∙ │ │ Refector stuff into draw_rev_graph\n∙ │ │ Some more refactoring and cleanups\n∙ │ │ Cracking\n∙ │ │ Minor cleanups\n∙ │ │ Version 1\n∙─│─╯ SIZEOF_REV introduced: 41 bytes of pure madness!\n∙ │ Minor cleanups\n∙ │ Oops, always update the tree view ref\n∙ │ Fix updating of the blob ref and the blob view ref\n∙ │ Also color Acked-by lines\n∙ │ Fix redrawing of old current line\n∙ │ Only split the tree view when the tree view is visible\n∙ │ move_view: drop redraw arg and handle backgrounded moves\n∙ │ do_scroll_view: drop redraw arg\n∙ │ do_scroll_view: minor refactoring of the current line updating\n∙ │ search_view: use opt_search directly instead of through an argument\n∙ │ Remove some old cruft that was clearing hidden lines at the end\n∙ │ Introduce selected flag and use it for refacter wclrtoeol usage\n∙ │ Add selected arg to the view draw operation\n∙ │ Refactor current line activation to new select view operation\n∙ │ Fix tree viewing again; introduced by string safety patch\n∙ │ Make view->regex into a pointer\n∙ │ Fix git-describe reference adding when there are no tags and thus no output\n∙ │ Improve string buffer copy safety\n∙ │ Hrmpf, fix one more default keybinding clash, this time the blob view\n∙ │ Review all string_format users and use string_format instead of snprintf\n∙ │ Move the current line to the first entry in the tree view\n∙ │ Use ICONV_NONE instead of (iconv_t) -1\n∙ │ Remove redundant ending ';'\n∙ │ manual: mention the tree/blob views\n∙ │ Fix default keybinding clash for 'n' between find-next and toggle-lineno\n∙ │ Use size_t instead of int for string_* functions\n∙ │ Reintroduce foreach_view and use it to fix background loading\n∙ │ Rename foreach_view to foreach_displayed_view\n∙ │ Add support for tree and blob view\n∙ │ tig(1): Do not differentiate between git (show|log|diff) options\n∙ │ Reformat the state variable list (opt_*)\n∙ │ Add support for searching using regex\n∙ │ Replace screen-update action with noop action named \"none\"\n∙ │ read_prompt: return static allocated buffer; move out exec mode setup\n∙ │ read_prompt: take prompt 'name' as arg\n∙ │ SIZEOF_STR: introduced and use instead of 1024, also replaces SIZEOF_CMD\n∙ │ Add poor man's \"show most recent tag\" by using git-describe\n∙ │ add_pager_refs: rename local line data pointer to commit_id\n∙ │ Add .gitignore file\n│ ∙ Sync docs\n│ ●─╮ Merge with master\n∙─│─╯ prompt: make ':show <id>' use the diff view\n∙ │ Add support for converting from git encoding to locale encoding\n∙ │ Pass --root to git-show so the diff command will show the initial commit\n∙ │ Silence stderr for all view commands\n∙ │ Improve handling of 'bogus' author lines\n∙ │ Create directories during make install\n∙ │ Check the value returned by fopen() during display initialization\n∙ │ No need to use --stat for the default TIG_MAIN_CMD\n∙ │ tig-0.4.git\n●─│─╮ Merge with ssh://brok.diku.dk/~/tig\n│ │ ∙ tigrc(5): Fix keybinding headers\n∙ │ │ Use docbook to build manual.pdf; clean *.xml files\n│ ∙ │ Sync docs\n│ ●─│─╮ Merge with master\n∙─│─│─╯ Add sync-docs rule to update docs in the release branch\n∙ │ │ Manual: fix page up keys\n∙ │ │ Add manual link to SITES; improve/fix SEE ALSO sections\n│ ∙ │ Sync docs\n│ ●─│─╮ Merge with master\n∙─│─┴─╯ CSS fix: s/monospaced/monospace/\n∙ │ Use tables for the listing of default keybindings\n│ ∙ Sync docs\n│ ●─╮ Merge with master\n∙─│─╯ Documentation update\n∙ │ Add \"Hash\" key name mapped to \"#\"; Don't use \";\" as a comment character\n∙ │ Allow strings to be enclosed in either ' or \"\n∙ │ Make prompt use internal user input reader\n●─│─╮ Merge with ssh://diku/~/tig\n│ │ ∙ Config: improve error reporting and do a few cleanups and simplifications\n∙ │ │ Rename \"encoding\" option to \"commit-encoding\"\n∙ │ │ Install HTML files into \\$(prefix)/share/doc/tig\n∙ │ │ Add ToC to the tig manual\n∙ │ │ Misc doc improvements\n∙─│─╯ Add support for keybindings\n∙ │ Rename keymap to keybinding, get_request to get_keybinding\n∙ │ Add default configuration file\n∙ │ Add special string comparer for gracefully parsing ~/.tigrc identifiers\n∙ │ Establish \"Open view\" section\n∙ │ Rename load_help_page to open_help_view and move it up\n∙ │ Move keybinding stuff up after line stuff\n∙ │ Support set command in ~/.tigrc; allows a few options to be configured\n∙ │ Simplify the option value tokenization by doing it one place\n∙ │ Factor out set_option_color from set_option\n∙ │ Make declaration of die() specify the __NORETURN attribute\n│ ∙ Sync docs\n│ ●─╮ Merge with master\n∙─│─╯ Improve error reporting for unknown options\n∙ │ Add feature request for showing nearest branch heads or tags for a commit\n∙ │ Makefile: make customization of installation locations easier\n∙ │ Make the view title show percentage shown like less\n∙ │ Implement the basic controlling of revision graph visualization\n∙ │ Add strip rule\n∙ │ Don't begin any update for the built-in help page\n∙ │ More color and attribute maps closer to the users\n∙ │ Simplify detection of tag commits via ^{}\n∙ │ Minor tidyup\n∙ │ Generalize the option parsing\n∙ │ Move tig(1) material to tig.1.txt\n∙ │ Correct error checking\n∙ │ Remove prev arg to view->ops->read()\n∙ │ Wrap all snprintf usage to simplify error handling\n∙ │ Add support for showing tags and other repo refs in the diff and log view\n∙ │ Refactor view->line reallocation\n∙ │ Make 'h' and '?' show built-in key binding quick reference\n∙ │ Rename documentation build rules using s/docs/doc/; more like git\n∙ │ Add COPYING file\n∙ │ Fix segfault where current_view would become >= sizeof(display)\n│ ∙ Sync docs\n│ ●─╮ Merge with master\n∙─│─╯ Remove SITES title so it is more adaptive to where it is included\n∙ │ Split out manual material to separate file\n∙ │ List SITES in tig(1)\n∙ │ Move stuff to SITES and INSTALL files\n∙ │ Move stuff to BUGS and TODO files; only show BUGS in tig(1)\n∙ │ Move ~/.tigrc documentation into it's own man page, tigrc(5)\n∙ │ Use ~/.tigrc for user configuration rather than ~/.tig\n∙ │ Add TODO about keybinding cheat sheet\n∙ │ Emit more informative error messages when loading ~/.tig\n∙ │ Only touch the option strings if necessary\n∙ │ Improve color documentation\n∙ │ Add support for setting color options in the ~/.tig user configuration file\n∙ │ Make read_properties take several separator characters; chomp name & value\n∙ │ Oops, fix short help wrt tab size short option\n∙ │ Rename repo config loaders using s/config/repo_config/\n∙ │ Make read_properties() take FILE *pipe instead of command line\n∙ │ Document the loading time displayed in the title window after 3 seconds\n∙ │ Make the stop all loading request stop all loading\n∙ │ Notify that the prompt is unusable while loading\n∙ │ Tab size short option changes from -t to -b\n∙ │ Minor usability fix: when closing never switch to an already closed view\n∙ │ \"View commands\" section becomes \"History commands\".\n∙ │ License revisited: it's GPLv2 or later\n∙ │ Fix off by one error; makes tags visible again\n∙ │ When updating the title window, move the cursor to the end of line\n∙ │ Factor out cursor moving\n∙ │ Make window switching smother; fix blurring of previous view when switching\n∙ │ Never close backgrounded loads; only clear window when starting to update\n∙ │ Only pass on properies with non-zero length names\n∙ │ Refactor reading of properties from pipes\n∙ │ Load config before parsing command line options so they can override\n∙ │ Make UTF-8 handling optional but still default\n∙ │ Add support for loading repo config\n∙ │ Cleanup see also section\n∙ │ Move env handling up below option handling\n∙ │ Put license also in the program header\n∙ │ Rearrange pager_enter logic\n∙ │ Update README; set a less ugly font-family\n∙ │ Introduce struct line and use it for view->line\n∙ │ Improve title updating and remove flickering\n∙ │ Make update reporting less verbose\n∙ │ Fix spurious resizing of the display (take 2)\n∙ │ Add macro for getting number of displayed views\n∙ │ Only resize the display when actually required\n∙ │ Fix updating of the main view title when the screen isn't split\n∙ │ End the current update before begining a new one; fixes CPU hogging\n│ ∙ Sync docs\n│ ●─╮ Merge with master\n∙─│─╯ Bind 'j'/'k' to moving up/down; add next/previous requests bound to Down/Up\n∙ │ Move struct commit to appear just above the main view backend\n∙ │ Add -O2 to CFLAGS to get more warnings\n∙ │ Cache all queries for refs based on ID\n∙ │ Move git directory assertion to main; don't require .git repo in pager mode\n∙ │ In pager mode, fix entering commit lines from log and pager view\n∙ │ Remove old window cycling code from before enter request appeared\n∙ │ Add simple window stack, tracking view relation ship via parent member\n∙ │ Remove objsize member from struct commit\n∙ │ Make Enter in the pager view always scroll\n∙ │ Record builds with dirty working tree by appending -dirty to the version\n∙ │ Remove trailing space; make cursed global static\n∙ │ Make -h and --help options ouput a help message\n∙ │ Bind '-' to PageUp; raises Mutt compatibility\n∙ │ Streamline version displaying and show built date\n∙ │ Make Enter in the main view switch to the split diff view\n∙ │ Add preliminary support for UTF-8 handling in the main view\n∙ │ Add close view request; bound to 'q' by default\n∙ │ Bind quit to 'Q'\n∙ │ Add -Werror to the cc debug flags\n∙ │ Pressing Enter in the diff view will now scroll it one line down\n∙ │ Rearrange things in the start of the viewer\n∙ │ Bind 'b' to Page Up, and Space to Page Down\n∙ │ Make sense of the comment about view->win height\n∙ │ Group display functions at the bottom\n∙ │ Redraw the whole display after toggling line number\n∙ │ Minor documentation updates\n│ ∙ Sync docs\n│ ●─╮ Merge with master\n∙─│─╯ Fix warnings\n∙ │ Fix linking with --as-needed ld(1) option.\n∙ │ Minor doc and coding style fixes\n∙ │ Mark quit() and die() __noreturn\n∙ │ Make some strings \"const\"\n│ ●─╮ Merge with master\n∙─│─╯ tig version 0.3\n│ ∙ Sync docs\n│ ●─╮ Merge with master\n∙─│─╯ Minor documentation fixes; nothing from git-ls-remote means no git repo\n│ ∙ Sync docs\n│ ●─╮ Merge with master\n∙─│─╯ After seeing Linus' mail further improve revision specification section\n∙ │ Make the last variables static\n│ ∙ Fix File history section\n│ ●─╮ Merge with master\n∙─│─╯ Fix File history section number\n│ ∙ Update generated docs\n│ ●─╮ Merge with master\n∙─│─╯ Minor fixes\n│ ●─╮ Merge with master\n∙─│─╯ Only tig(1) is required by the help view\n│ ●─╮ Merge with master\n∙─│─╯ Only set VERSION to git-describe if .git is available\n│ ∙ Put documentation in a branch named release\n│ ●─╮ Merge with master\n∙─│─╯ Put documentation in a branch named release\n│ ∙ Add README.html\n│ ●─╮ Merge with master\n∙─│─╯ You gotta have a README file\n│ ∙ Create documentation branch\n∙─╯ Document file history rev limiting\n∙ ... and yet more doc ups\n∙ Check spelling\n∙ Further improve documentation\n∙ Lots of documentation improvements\n∙ Improve documentation; optional tab size; move up/down + enter req; fix wrapping\n∙ Only save commit tag refs; move line type info to view->ops; switch silently\n∙ Fix file mode diff header handling; fix repo refs\n∙ Add support for repository references\n∙ Oops, no need to #include <readline/readline>\n∙ Try to improve report(\"\")\n∙ Implement support for terminal resizing\n∙ Take commands from the environment\n∙ Use --topo-order; fclose(stdin); space cleanup\n∙ Fix title in split view; scroll/move reporting; ...\n∙ Fix scrolling when current line is outside of splitted view\n∙ Support for show\n∙ Improve documentation\n∙ Fix ref navigation bug; make internal command line work; cleanups\n∙ Add support for pager view\n∙ Add support for git log / git diff options\n∙ Lots of small improvements\n∙ Meep\n∙ Lots of cleanups and improvements; speed up attr access\n∙ Heavy renaming and code recomposition\n∙ Lots of minor UI improvements\n∙ Lot's of cleanups and fixes\n∙ TODO's and TODON'T's ...\n∙ Primitive option parsing; rendering generalizations\n∙ Cleanup line matching\n∙ Started on the main view\n∙ Sync. Home/End seems to finally work.\n∙ Possible simplification\n∙ The pager is begining to work. :)\n∙ Exploration\n∙ Misc cleanups\n∙ Misc cleanups and improvements\n∙ Show root; blast raw diff lines\n∙ No binaries\n∙ Half working prototype\n◎ Initial commit\nEOF\n"
  },
  {
    "path": "test/graph/gh-490-heap-buffer-overflow-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n\ntest_require address-sanitizer\ntest_setup\n\nsteps '\n\t:save-display screen\n\t:quit\n'\n\ngunzip --stdout -- \"$source_dir/$test.gz\" | tig --graph --pretty=raw 2>stderr >stdout\n\nassert_equals stderr <<EOF\nEOF\n"
  },
  {
    "path": "test/graph/regression/horizontal-artifact-test",
    "content": "#!/bin/sh\n#\n# Graph test: regression test for \"─╭\" instead of \" ╭\"\n\n. libtest.sh\n\ntest_graph <<EOF\ncommit A3 A1 A2\n    Commit A3 - merge A1 and A2\ncommit B2 A1 B1\n    Commit B2 - merge A1 and B1\ncommit C2 A1 C1\n    Commit C2 - merge A1 and C1\ncommit A1 R\n    Commit A1 - after R\ncommit D2 R D1\n    Commit D2 - merge R and D1\ncommit D1 R\n    Commit D1 - after R\ncommit A2 R\n    Commit A2 - after R\ncommit B1 R\n    Commit B1 - after R\ncommit C1 R\n    Commit C1 - after R\ncommit R\n    Commit R\nEOF\n\nassert_equals stdout <<EOF\n●─╮ Commit A3 - merge A1 and A2\n│ │ ●─╮ Commit B2 - merge A1 and B1\n│ │ │ │ ●─╮ Commit C2 - merge A1 and C1\n∙─│─┴─│─╯ │ Commit A1 - after R\n│ │ ╭─╯ ╭─╯ ●─╮ Commit D2 - merge R and D1\n│ │ │ ╭─╯ ╭─╯ ∙ Commit D1 - after R\n│ ∙ │ │ ╭─╯ ╭─╯ Commit A2 - after R\n│ │ ∙ │ │ ╭─╯ Commit B1 - after R\n│ │ │ ∙ │ │ Commit C1 - after R\n◎─┴─┴─┴─┴─╯ Commit R\nEOF\n"
  },
  {
    "path": "test/graph/regression/horizontal-bar-wrong-2-test",
    "content": "#!/bin/sh\n#\n# Graph test: regression test for \"─┬\" instead of \"──\"\n\n. libtest.sh\n\ntest_graph <<EOF\ncommit A4 A3\n    Commit A4 - after A3\ncommit B A3\n    Commit B - after A3\ncommit C A3\n    Commit C - after A3\ncommit D A2\n    Commit D - after A2\ncommit E A2\n    Commit E - after A2\ncommit A3 A2\n    Commit A3 - after A2\ncommit A2 A1 F\n    Commit A2 - merge A1 and F\ncommit F R\n    Commit F - after R\ncommit A1 R\n    Commit A1 - after R\ncommit R\n    Commit R\nEOF\n\nassert_equals stdout <<EOF\n∙ Commit A4 - after A3\n│ ∙ Commit B - after A3\n│ │ ∙ Commit C - after A3\n│ │ │ ∙ Commit D - after A2\n│ │ │ │ ∙ Commit E - after A2\n∙─┴─╯ │ │ Commit A3 - after A2\n●─┬───┴─╯ Commit A2 - merge A1 and F\n│ ∙ Commit F - after R\n∙ │ Commit A1 - after R\n◎─╯ Commit R\nEOF\n"
  },
  {
    "path": "test/grep/default-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=16\n\ntigrc <<EOF\nset vertical-split = no\nset line-graphics = ascii\nEOF\n\nsteps '\n\t:save-display grep-text.screen\n\n\t:enter\n\t:save-display grep-text-split-1.screen\n\n\t:next\n\t:save-display grep-text-split-2.screen\n\n\t:next\n\t:save-display grep-text-split-3.screen\n\n\t:next\n\t:save-display grep-text-split-4.screen\n\n\t:view-close\n\n\t:g\n\tmain(<Enter>\n\t:save-display grep-main.screen\n\n\t:g\n\ti<Enter>\n\t:save-display grep-i.screen\n\n\t:10\n\t:enter\n\t:save-display grep-i-split.screen\n\n\t:view-close\n\n\t:g\n\tnot-found<Enter>\n\t:save-display grep-none.screen\n'\n\ngit_init\n\ntest_setup_work_dir()\n{\n\tcat > README <<EOF\n= Title\n\nParagraph of text.\nWherein.\nDescription.\nHidden.\nIdling.\nIs inserted.\n\nThe exit paragraph.\n\nEOF\n\n\tcat > main.c <<EOF\n#include <stdin.h>\n\nint\nmain(int argc, const char *argv[])\n{\n\t/* Some text */\n\texit(0);\n}\nEOF\n\n\tprintf \"\\0\\0binary\\0file\\0with\\0text\\0\\0\" > binary.png\n\tgit add .\n\tgit_commit -m \"Initial import\"\n}\n\ntest_tig grep text\n\nassert_equals 'grep-text.screen' <<EOF\nREADME\n  3| Paragraph of text.\nmain.c\n  6|         /* Some text */\n\n\n\n\n\n\n\n\n\n\n[grep] README - line 1 of 4                                                 100%\nEOF\n\nassert_equals 'grep-text-split-1.screen' <<EOF\nREADME\n  3| Paragraph of text.\nmain.c\n  6|         /* Some text */\n[grep] README - line 1 of 4                                                 100%\n= Title\n\nParagraph of text.\nWherein.\nDescription.\nHidden.\nIdling.\nIs inserted.\n\n[blob] README - line 1 of 11                                                 81%\nEOF\n\nassert_equals 'grep-text-split-2.screen' <<EOF\nREADME\n  3| Paragraph of text.\nmain.c\n  6|         /* Some text */\n[grep] README - line 2 of 4                                                 100%\n= Title\n\nParagraph of text.\nWherein.\nDescription.\nHidden.\nIdling.\nIs inserted.\n\n[blob] README - line 3 of 11                                                 81%\nEOF\n\nassert_equals 'grep-text-split-3.screen' <<EOF\nREADME\n  3| Paragraph of text.\nmain.c\n  6|         /* Some text */\n[grep] main.c - line 3 of 4                                                 100%\n#include <stdin.h>\n\nint\nmain(int argc, const char *argv[])\n{\n        /* Some text */\n        exit(0);\n}\n\n[blob] main.c - line 1 of 8                                                 100%\nEOF\n\nassert_equals 'grep-text-split-4.screen' <<EOF\nREADME\n  3| Paragraph of text.\nmain.c\n  6|         /* Some text */\n[grep] main.c - line 4 of 4                                                 100%\n#include <stdin.h>\n\nint\nmain(int argc, const char *argv[])\n{\n        /* Some text */\n        exit(0);\n}\n\n[blob] main.c - line 6 of 8                                                 100%\nEOF\n\nassert_equals 'grep-main.screen' <<EOF\nmain.c\n  4| main(int argc, const char *argv[])\n\n\n\n\n\n\n\n\n\n\n\n\n[grep] main.c - line 1 of 2                                                 100%\nEOF\n\nassert_equals 'grep-i.screen' <<EOF\nREADME\n  1| = Title\n  4| Wherein.\n  5| Description.\n  6| Hidden.\n  7| Idling.\n  8| Is inserted.\n 10| The exit paragraph.\nmain.c\n  1| #include <stdin.h>\n  3| int\n  4| main(int argc, const char *argv[])\n  7|         exit(0);\n\n[grep] README - line 1 of 13                                                100%\nEOF\n\nassert_equals 'grep-i-split.screen' <<EOF\n  8| Is inserted.\n 10| The exit paragraph.\nmain.c\n  1| #include <stdin.h>\n[grep] main.c - line 10 of 13                                                76%\n#include <stdin.h>\n\nint\nmain(int argc, const char *argv[])\n{\n        /* Some text */\n        exit(0);\n}\n\n[blob] main.c - line 1 of 8                                                 100%\nEOF\n\nassert_equals 'grep-none.screen' <<EOF\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[grep]                                                                        0%\nEOF\n"
  },
  {
    "path": "test/grep/editor-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=16\n\ntigrc <<EOF\nset vertical-split = no\nset line-graphics = ascii\nEOF\n\nsteps '\n\t:save-display grep-scalajs.screen\n\n\t:3\n\t:edit\n\n\t:10\n\t:exec !vim +%(lineno) %(file)\n'\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\ntest_tig grep JSExport\n\nassert_equals 'grep-scalajs.screen' <<EOF\ncommon/src/main/scala/org/scalajs/benchmark/Benchmark.scala\n 13| import scala.scalajs.js.annotation.JSExport\n 15| @JSExport\n 27|   @JSExport\n 32|   @JSExport\n100|   @JSExport\ndeltablue/src/main/scala/org/scalajs/benchmark/deltablue/DeltaBlue.scala\n 49| import scala.scalajs.js.annotation.JSExport\n 51| @JSExport\n 56|   @JSExport\nrichards/src/main/scala/org/scalajs/benchmark/richards/Richards.scala\n 48| import scala.scalajs.js.annotation.JSExport\n 53| @JSExport\nsudoku/src/main/scala/org/scalajs/benchmark/sudoku/Sudoku.scala\n[grep] common/src/main/scala/org/scalajs/benchmark/Benchmark.scala - line 1  73%\nEOF\n\nassert_equals 'editor.log' <<EOF\n+15 common/src/main/scala/org/scalajs/benchmark/Benchmark.scala\n@JSExport\n+56 deltablue/src/main/scala/org/scalajs/benchmark/deltablue/DeltaBlue.scala\n   @JSExport\nEOF\n"
  },
  {
    "path": "test/grep/refspec-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=16\n\ntigrc <<EOF\nset vertical-split = no\nset line-graphics = ascii\nEOF\n\nsteps '\n\t:save-display grep-sudoku.screen\n\n\t:2\n\t:enter\n\t:save-display grep-split.screen\n'\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\ntest_tig grep sudoku d92a308941e6ccb79cb02f96417cab7b67b998c2\n\nassert_equals 'grep-sudoku.screen' <<EOF\nd92a308941e6ccb79cb02f96417cab7b67b998c2:project/Build.scala\n 43|              clean in sudoku,\n 51|       sudoku,\n 58|   lazy val sudoku = project(\"Sudoku\", benchmarkSettings).dependsOn(common)\nd92a308941e6ccb79cb02f96417cab7b67b998c2:sudoku/Sudoku.scala\n 11| package benchmarks.sudoku\nd92a308941e6ccb79cb02f96417cab7b67b998c2:sudoku/exports.js\n 22|     var benchmark = new ScalaJS.classes.benchmarks_sudoku_Sudoku();\n\n\n\n\n\n\n[grep] d92a308941e6ccb79cb02f96417cab7b67b998c2:project/Build.scala - line  100%\nEOF\n\nassert_equals 'grep-split.screen' <<EOF\nd92a308941e6ccb79cb02f96417cab7b67b998c2:project/Build.scala\n 43|              clean in sudoku,\n 51|       sudoku,\n 58|   lazy val sudoku = project(\"Sudoku\", benchmarkSettings).dependsOn(common)\n[grep] d92a308941e6ccb79cb02f96417cab7b67b998c2:project/Build.scala - line 2 50%\n          clean := clean.dependsOn(\n             clean in common,\n             clean in deltablue,\n             clean in richards,\n             clean in sudoku,\n             clean in tracer\n          ).value\n      )\n  ).aggregate(\n[blob] project/Build.scala - line 43 of 69                                   68%\nEOF\n"
  },
  {
    "path": "test/grep/start-on-line-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport COLUMNS=100\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\nsteps '\n\t:save-display position.screen\n'\n\ntigrc <<EOF\nset line-graphics = ascii\nEOF\n\ntest_tig grep class +42\n\nassert_equals 'position.screen' <<EOF\n527| class Planner {\n697| class Plan {\nrichards/src/main/scala/org/scalajs/benchmark/richards/Richards.scala\n124| class Scheduler {\n252| class TaskControlBlock(val link: TaskControlBlock, val id: Int, val priority: Int, var queue: P\n316| sealed abstract class Task(scheduler: Scheduler) {\n327| case class IdleTask(scheduler: Scheduler, var v1: Int, var count: Int) extends Task(scheduler)\n348| case class DeviceTask(scheduler: Scheduler) extends Task(scheduler) {\n371| case class WorkerTask(scheduler: Scheduler, var v1: Int, var v2: Int) extends Task(scheduler) {\n397| case class HandlerTask(scheduler: Scheduler) extends Task(scheduler) {\n444| case class Packet(var link: Packet, var id: Int, val kind: Int) {\ntracer/src/main/scala/org/scalajs/benchmark/tracer/Color.scala\n 19| class Color(val red: Double, val green: Double, val blue: Double) {\ntracer/src/main/scala/org/scalajs/benchmark/tracer/Engine.scala\n 22| case class EngineConfiguration(\n 37| class Engine(val config: EngineConfiguration) {\ntracer/src/main/scala/org/scalajs/benchmark/tracer/Material.scala\n 22| abstract class Material(val reflection: Double, val transparency: Double, val gloss: Double) {\n 28| class Chessboard(colorEven: Color, colorOdd: Color,\n 58| class Solid(color: Color, reflection: Double, refraction: Double, transparency: Double, gloss:\ntracer/src/main/scala/org/scalajs/benchmark/tracer/RenderScene.scala\n 22| class RenderScene extends Scene {\ntracer/src/main/scala/org/scalajs/benchmark/tracer/Scene.scala\n 19| class Ray(val position: Vector, val direction: Vector) {\n 23| class Camera(val position: Vector, val lookAt: Vector, val up: Vector) {\n 37| class Background(val color: Color, val ambience: Double)\n 39| class Light(val position: Vector, val color: Color, val intensity: Double = 10.0)\n 41| abstract class Scene {\n[grep] tracer/src/main/scala/org/scalajs/benchmark/tracer/Engine.scala - line 42 of 62           88%\nEOF\n"
  },
  {
    "path": "test/help/all-keybindings-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n\nexport COLUMNS=100\nexport LINES=160\n\nsteps '\n\t:view-help\n\t:2\n\t:enter\n\t:enter\n\t:save-display help-default.screen\n'\n\nstdin <<EOF\ntest\nEOF\n\nexpected=\"$source_dir/all-keybindings-test.expected\"\n\ntest_tig\n\nassert_equals \\\n\t'help-default.screen' \\\n\t'ignore' \\\n\t\"Test failures due to changes to 'tigrc' can be fixed by running:\" \\\n\t\"  > make test/help/all-keybindings-test && cp test/tmp/help/all-keybindings-test/help-default.screen test/help/all-keybindings-test.expected\" \\\n\t< \"$expected\"\n"
  },
  {
    "path": "test/help/all-keybindings-test.expected",
    "content": "Quick reference for tig keybindings:\n[-] Collapse all sections\n\n[-] generic bindings\nView switching\n                           m view-main           Show main view\n                           d view-diff           Show diff view\n                           l view-log            Show log view\n                           L view-reflog         Show reflog view\n                           t view-tree           Show tree view\n                           f view-blob           Show blob view\n                           b view-blame          Show blame view\n                           r view-refs           Show refs view\n                        s, S view-status         Show status view\n                           c view-stage          Show stage view\n                           y view-stash          Show stash view\n                           g view-grep           Show grep view\n                           p view-pager          Show pager view\n                           h view-help           Show help view\nView manipulation\n                     <Enter> enter               Enter and open selected line\n                           < back                Go back to the previous view state\n         <Down>, <Ctrl-N>, J next                Move to next\n           <Up>, <Ctrl-P>, K previous            Move to previous\n                         ',' parent              Move to parent\n                       <Tab> view-next           Move focus to the next view\n                     R, <F5> refresh             Reload and refresh view\n                           O maximize            Maximize the current view\n                           q view-close          Close the current view\n                 Q, <Ctrl-C> quit                Close all views and quit\nCursor navigation\n                           k move-up             Move cursor one line up\n                           j move-down           Move cursor one line down\n                 <PageUp>, - move-page-up        Move cursor one page up\n         <PageDown>, <Space> move-page-down      Move cursor one page down\n                    <Ctrl-U> move-half-page-up   Move cursor half a page up\n                    <Ctrl-D> move-half-page-down Move cursor half a page down\n                      <Home> move-first-line     Move cursor to first line\n                       <End> move-last-line      Move cursor to last line\nScrolling\n          <Insert>, <Ctrl-Y> scroll-line-up      Scroll one line up\n          <Delete>, <Ctrl-E> scroll-line-down    Scroll one line down\n                <ScrollBack> scroll-page-up      Scroll one page up\n                 <ScrollFwd> scroll-page-down    Scroll one page down\n                           | scroll-first-col    Scroll to the first line columns\n                      <Left> scroll-left         Scroll two columns left\n                     <Right> scroll-right        Scroll two columns right\nSearching\n                           / search              Search the view\n                           ? search-back         Search backwards in the view\n                           n find-next           Find next search match\n                           N find-prev           Find previous search match\nMisc\n                           e edit                Open in editor\n                           : prompt              Open the prompt\n                           o options             Open the options menu\n                    <Ctrl-L> screen-redraw       Redraw the screen\n                           z stop-loading        Stop all loading views\n                           v show-version        Show version information\nOption toggling:\n                           I :toggle sort-order\n                           i :toggle sort-field\n                           # :toggle line-number\n                           D :toggle date\n                           A :toggle author\n                           T :toggle committer\n                           ~ :toggle line-graphics\n                           F :toggle file-name\n                           W :toggle ignore-space\n                           X :toggle id\n                           $ :toggle commit-title-overflow\n                           % :toggle file-filter\n                           ^ :toggle rev-filter\n[-] search bindings\nView manipulation\n                    <Ctrl-C> view-close          Close the current view\nSearching\n  <Down>, <Ctrl-N>, <Ctrl-J> find-next           Find next search match\n    <Up>, <Ctrl-P>, <Ctrl-K> find-prev           Find previous search match\n[-] main bindings\nOption toggling:\n                           G :toggle commit-title-graph\n                           F :toggle commit-title-refs\nInternal commands:\n                           H :goto HEAD\nExternal commands:\n                           C ?git cherry-pick %(commit)\n[-] diff bindings\nOption toggling:\n                           [ :toggle diff-context -1\n                           ] :toggle diff-context +1\nInternal commands:\n                           @ :/^@@\n[-] reflog bindings\nOption toggling:\n                           F :toggle commit-title-refs\nExternal commands:\n                           C ?git checkout %(branch)\n                           ! ?git reset --hard %(commit)\n[-] refs bindings\nExternal commands:\n                           C ?git checkout %(branch)\n                           ! ?git branch -D %(branch)\n[-] status bindings\nView-specific actions\n                           u status-update       Stage/unstage chunk or file changes\n                           ! status-revert       Revert chunk or file changes\n                           M status-merge        Merge file using external tool\nExternal commands:\n                           C !git commit\n[-] stage bindings\nView-specific actions\n                           u status-update       Stage/unstage chunk or file changes\n                           ! status-revert       Revert chunk or file changes\n                           1 stage-update-line   Stage/unstage single line\n                           2 stage-update-part   Stage/unstage part of a chunk\n                           \\ stage-split-chunk   Split current diff chunk\nOption toggling:\n                           [ :toggle diff-context -1\n                           ] :toggle diff-context +1\nInternal commands:\n                           @ :/^@@\n[-] stash bindings\nExternal commands:\n                           A ?git stash apply %(stash)\n                           P ?git stash pop %(stash)\n                           ! ?git stash drop %(stash)\n[-] pager bindings\nInternal commands:\n                           @ :/^@@\n[-] toggle bindings\nToggle keys (enter: o <key>):\n                           . line-number                Toggle line numbers\n                           D date                       Toggle dates\n                           A author                     Toggle author\n                           T committer                  Toggle committer\n                           ~ line-graphics              Toggle graphics\n                           g commit-title-graph         Toggle revision graph\n                           # file-name                  Toggle file names\n                           * file-size                  Toggle file sizes\n                           W ignore-space               Toggle space changes\n                           l commit-order               Toggle commit order\n                           F commit-title-refs          Toggle reference display\n                           C show-changes               Toggle local change display\n                           X id                         Toggle commit ID display\n                           % file-filter                Toggle file filtering\n                           ^ rev-filter                 Toggle revision filtering\n                           $ commit-title-overflow      Toggle commit title overflow display\n                           d status-show-untracked-dirs Toggle untracked directory info\n                           | vertical-split             Toggle view split\n\n\n\n\n\n\n\n\n[help] - line 2 of 150                                                                          100%\n"
  },
  {
    "path": "test/help/default-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n\nexport COLUMNS=100\n\nsteps '\n\t:view-help\n\t:save-display help-default.screen\n\n\t:/View manipulation\n\t:save-display help-search.screen\n\n\t:4\n\t:enter\n\t:5\n\t:enter\n\t:save-display help-collapsed.screen\n'\n\nstdin <<EOF\ntest\nEOF\n\ntest_tig\n\nassert_equals 'help-default.screen' <<EOF\nQuick reference for tig keybindings:\n[-] Collapse all sections\n\n[-] generic bindings\nView switching\n                           m view-main           Show main view\n                           d view-diff           Show diff view\n                           l view-log            Show log view\n                           L view-reflog         Show reflog view\n                           t view-tree           Show tree view\n                           f view-blob           Show blob view\n                           b view-blame          Show blame view\n                           r view-refs           Show refs view\n                        s, S view-status         Show status view\n                           c view-stage          Show stage view\n                           y view-stash          Show stash view\n                           g view-grep           Show grep view\n                           p view-pager          Show pager view\n                           h view-help           Show help view\nView manipulation\n                     <Enter> enter               Enter and open selected line\n                           < back                Go back to the previous view state\n         <Down>, <Ctrl-N>, J next                Move to next\n           <Up>, <Ctrl-P>, K previous            Move to previous\n                         ',' parent              Move to parent\n                       <Tab> view-next           Move focus to the next view\n                     R, <F5> refresh             Reload and refresh view\n                           O maximize            Maximize the current view\n[help] - line 1 of 109                                                                           25%\nEOF\n\nassert_equals 'help-search.screen' <<EOF\nQuick reference for tig keybindings:\n[-] Collapse all sections\n\n[-] generic bindings\nView switching\n                           m view-main           Show main view\n                           d view-diff           Show diff view\n                           l view-log            Show log view\n                           L view-reflog         Show reflog view\n                           t view-tree           Show tree view\n                           f view-blob           Show blob view\n                           b view-blame          Show blame view\n                           r view-refs           Show refs view\n                        s, S view-status         Show status view\n                           c view-stage          Show stage view\n                           y view-stash          Show stash view\n                           g view-grep           Show grep view\n                           p view-pager          Show pager view\n                           h view-help           Show help view\nView manipulation\n                     <Enter> enter               Enter and open selected line\n                           < back                Go back to the previous view state\n         <Down>, <Ctrl-N>, J next                Move to next\n           <Up>, <Ctrl-P>, K previous            Move to previous\n                         ',' parent              Move to parent\n                       <Tab> view-next           Move focus to the next view\n                     R, <F5> refresh             Reload and refresh view\n                           O maximize            Maximize the current view\n[help] - line 20 of 109                                                                          25%\nEOF\n\nassert_equals 'help-collapsed.screen' <<EOF\nQuick reference for tig keybindings:\n[-] Collapse all sections\n\n[+] generic bindings\n[+] search bindings\n[+] main bindings\n[+] diff bindings\n[+] reflog bindings\n[+] refs bindings\n[+] status bindings\n[+] stage bindings\n[+] stash bindings\n[-] pager bindings\nInternal commands:\n  @ :/^@@\n[-] toggle bindings\nToggle keys (enter: o <key>):\n                          . line-number                Toggle line numbers\n                          D date                       Toggle dates\n                          A author                     Toggle author\n                          T committer                  Toggle committer\n                          ~ line-graphics              Toggle graphics\n                          g commit-title-graph         Toggle revision graph\n                          # file-name                  Toggle file names\n                          * file-size                  Toggle file sizes\n                          W ignore-space               Toggle space changes\n                          l commit-order               Toggle commit order\n                          F commit-title-refs          Toggle reference display\n[help] - line 5 of 35                                                                            80%\nEOF\n"
  },
  {
    "path": "test/help/user-command-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n\nexport COLUMNS=100\n\ntigrc <<EOF\nbind generic a !?@user-test-cmd\nbind generic b ?@user-test-cmd\nbind generic c !?user-test-cmd\nbind generic d !user-test-cmd\nbind generic ca !?@git commit --amend --no-edit\nsource $base_dir/../contrib/vim.tigrc\nEOF\n\nsteps '\n\t:view-help\n\t/user-test-cmd<Enter>\n\t?toggle author<Enter>\n\t:save-display default.screen\n'\n\nstdin <<EOF\ntest\nEOF\n\ntest_tig\n\nassert_equals 'default.screen' <<EOF\n                             oa :toggle author\n                             og :toggle line-graphics\n                             of :toggle file-name\n                             op :toggle ignore-space\n                             oi :toggle id\n                             ot :toggle commit-title-overflow\n                             oF :toggle file-filter\n                             or :toggle commit-title-refs\n                             @- :toggle diff-context -1\n                             @+ :toggle diff-context +1\nInternal commands:\n                             @j :/^@@\n                             @k :?^@@\nExternal commands:\n                              a @?user-test-cmd\n                              b @?user-test-cmd\n                              d !user-test-cmd\n                             cc !git commit\n                             ca @?git commit --amend --no-edit\n[-] search bindings\nView manipulation\n                       <Ctrl-C> view-close          Close the current view\nSearching\n     <Down>, <Ctrl-N>, <Ctrl-J> find-next           Find next search match\n       <Up>, <Ctrl-P>, <Ctrl-K> find-prev           Find previous search match\n[+] main bindings\n[+] diff bindings\n[+] reflog bindings\n[help] - line 83 of 134                                                                          82%\nEOF\n"
  },
  {
    "path": "test/log/diff-stat-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport COLUMNS=181\n\nsteps '\n\t:enter\n\t:save-display diff-stat.screen\n\t:view-next\n\t:refresh\n\t:save-display diff-stat-after-refresh.screen\n'\n\ntigrc <<EOF\nset line-graphics = utf-8\nEOF\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\ntest_tig log\n\nassert_equals 'diff-stat.screen' <<EOF\ncommit ee912870202200a0b9cf4fd86ba57243212d341e                                            |commit ee912870202200a0b9cf4fd86ba57243212d341e\nRefs: [master]                                                                             |Refs: [master]\nAuthor: Jonas Fonseca <jonas.fonseca@gmail.com>                                            |Author:     Jonas Fonseca <jonas.fonseca@gmail.com>\nDate:   Sat Mar 1 17:26:01 2014 -0500                                                      |AuthorDate: Sat Mar 1 17:26:01 2014 -0500\n                                                                                           |Commit:     Jonas Fonseca <jonas.fonseca@gmail.com>\n    WIP: Upgrade to 0.4-SNAPSHOT and DCE                                                   |CommitDate: Sat Mar 1 17:26:01 2014 -0500\n                                                                                           |\n common/benchmark-runner.sh                                             |  5 +++--         |    WIP: Upgrade to 0.4-SNAPSHOT and DCE\n common/src/main/scala/org/scalajs/benchmark/Benchmark.scala            | 11 +++++------   |---\n common/src/main/scala/org/scalajs/benchmark/BenchmarkApp.scala         |  2 +-            | common/benchmark-runner.sh                                           |  5 +++--\n common/start-benchmark.js                                              |  9 +++++++--     | common/src/main/scala/org/scalajs/benchmark/Benchmark.scala          | 11 +++++------\n deltablue/exports.js                                                   | 13 ------------- | common/src/main/scala/org/scalajs/benchmark/BenchmarkApp.scala       |  2 +-\n .../src/main/scala/org/scalajs/benchmark/deltablue/DeltaBlue.scala     |  7 +++++++       | common/start-benchmark.js                                            |  9 +++++++--\n project/Build.scala                                                    | 13 ++++--------- | deltablue/exports.js                                                 | 13 -------------\n project/build.sbt                                                      |  5 ++++-         | .../src/main/scala/org/scalajs/benchmark/deltablue/DeltaBlue.scala   |  7 +++++++\n richards/exports.js                                                    | 13 ------------- | project/Build.scala                                                  | 13 ++++---------\n richards/src/main/scala/org/scalajs/benchmark/richards/Richards.scala  |  3 +++           | project/build.sbt                                                    |  5 ++++-\n run.sh                                                                 |  2 +-            | richards/exports.js                                                  | 13 -------------\n sudoku/exports.js                                                      | 13 ------------- | .../src/main/scala/org/scalajs/benchmark/richards/Richards.scala     |  3 +++\n sudoku/src/main/scala/org/scalajs/benchmark/sudoku/Sudoku.scala        |  2 ++            | run.sh                                                               |  2 +-\n tracer/exports.js                                                      | 13 ------------- | sudoku/exports.js                                                    | 13 -------------\n tracer/index-dev.html                                                  |  2 +-            | sudoku/src/main/scala/org/scalajs/benchmark/sudoku/Sudoku.scala      |  2 ++\n tracer/index.html                                                      |  2 +-            | tracer/exports.js                                                    | 13 -------------\n tracer/src/main/scala/org/scalajs/benchmark/tracer/Tracer.scala        |  3 +++           | tracer/index-dev.html                                                |  2 +-\n 17 files changed, 42 insertions(+), 76 deletions(-)                                       | tracer/index.html                                                    |  2 +-\n                                                                                           | tracer/src/main/scala/org/scalajs/benchmark/tracer/Tracer.scala      |  3 +++\ncommit a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff                                            | 17 files changed, 42 insertions(+), 76 deletions(-)\nAuthor: Jonas Fonseca <jonas.fonseca@gmail.com>                                            |\n[log] ee912870202200a0b9cf4fd86ba57243212d341e - line 1 of 668                           4%|[diff] ee912870202200a0b9cf4fd86ba57243212d341e - line 1 of 367                        7%\nEOF\n\nassert_equals 'diff-stat-after-refresh.screen' <<EOF\ncommit ee912870202200a0b9cf4fd86ba57243212d341e                                            |commit ee912870202200a0b9cf4fd86ba57243212d341e\nRefs: [master]                                                                             |Refs: [master]\nAuthor: Jonas Fonseca <jonas.fonseca@gmail.com>                                            |Author:     Jonas Fonseca <jonas.fonseca@gmail.com>\nDate:   Sat Mar 1 17:26:01 2014 -0500                                                      |AuthorDate: Sat Mar 1 17:26:01 2014 -0500\n                                                                                           |Commit:     Jonas Fonseca <jonas.fonseca@gmail.com>\n    WIP: Upgrade to 0.4-SNAPSHOT and DCE                                                   |CommitDate: Sat Mar 1 17:26:01 2014 -0500\n                                                                                           |\n common/benchmark-runner.sh                                             |  5 +++--         |    WIP: Upgrade to 0.4-SNAPSHOT and DCE\n common/src/main/scala/org/scalajs/benchmark/Benchmark.scala            | 11 +++++------   |---\n common/src/main/scala/org/scalajs/benchmark/BenchmarkApp.scala         |  2 +-            | common/benchmark-runner.sh                                           |  5 +++--\n common/start-benchmark.js                                              |  9 +++++++--     | common/src/main/scala/org/scalajs/benchmark/Benchmark.scala          | 11 +++++------\n deltablue/exports.js                                                   | 13 ------------- | common/src/main/scala/org/scalajs/benchmark/BenchmarkApp.scala       |  2 +-\n .../src/main/scala/org/scalajs/benchmark/deltablue/DeltaBlue.scala     |  7 +++++++       | common/start-benchmark.js                                            |  9 +++++++--\n project/Build.scala                                                    | 13 ++++--------- | deltablue/exports.js                                                 | 13 -------------\n project/build.sbt                                                      |  5 ++++-         | .../src/main/scala/org/scalajs/benchmark/deltablue/DeltaBlue.scala   |  7 +++++++\n richards/exports.js                                                    | 13 ------------- | project/Build.scala                                                  | 13 ++++---------\n richards/src/main/scala/org/scalajs/benchmark/richards/Richards.scala  |  3 +++           | project/build.sbt                                                    |  5 ++++-\n run.sh                                                                 |  2 +-            | richards/exports.js                                                  | 13 -------------\n sudoku/exports.js                                                      | 13 ------------- | .../src/main/scala/org/scalajs/benchmark/richards/Richards.scala     |  3 +++\n sudoku/src/main/scala/org/scalajs/benchmark/sudoku/Sudoku.scala        |  2 ++            | run.sh                                                               |  2 +-\n tracer/exports.js                                                      | 13 ------------- | sudoku/exports.js                                                    | 13 -------------\n tracer/index-dev.html                                                  |  2 +-            | sudoku/src/main/scala/org/scalajs/benchmark/sudoku/Sudoku.scala      |  2 ++\n tracer/index.html                                                      |  2 +-            | tracer/exports.js                                                    | 13 -------------\n tracer/src/main/scala/org/scalajs/benchmark/tracer/Tracer.scala        |  3 +++           | tracer/index-dev.html                                                |  2 +-\n 17 files changed, 42 insertions(+), 76 deletions(-)                                       | tracer/index.html                                                    |  2 +-\n                                                                                           | tracer/src/main/scala/org/scalajs/benchmark/tracer/Tracer.scala      |  3 +++\ncommit a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff                                            | 17 files changed, 42 insertions(+), 76 deletions(-)\nAuthor: Jonas Fonseca <jonas.fonseca@gmail.com>                                            |\n[log] ee912870202200a0b9cf4fd86ba57243212d341e - line 1 of 668                           4%|[diff] ee912870202200a0b9cf4fd86ba57243212d341e - line 1 of 367                        7%\nEOF\n"
  },
  {
    "path": "test/log/log-graph-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nsteps '\n\t:save-display log-graph.screen\n'\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\ntest_tig log --graph e59a941\n\nassert_equals 'log-graph.screen' <<EOF\n*   commit e59a941c4e7d51cd172ee2767a031f5f3fd25d05\n|\\  Merge: 110e090 940efaf\n| | Author: Jonas Fonseca <jonas.fonseca@gmail.com>\n| | Date:   Thu Jan 16 07:47:58 2014 -0800\n| |\n| |     Merge pull request #4 from phaller/patch-1\n| |\n| |     Fix link to Dart benchmark harness\n| |\n| |  README.md | 2 +-\n| |  1 file changed, 1 insertion(+), 1 deletion(-)\n| |\n| * commit 940efafc379db7c6df99449d6c4da98c6a2b3d07\n|/  Author: Philipp Haller <hallerp@gmail.com>\n|   Date:   Thu Jan 16 15:32:52 2014 +0100\n|\n|       Fix link to Dart benchmark harness\n|\n|    README.md | 2 +-\n|    1 file changed, 1 insertion(+), 1 deletion(-)\n|\n* commit 110e090f815f40d649f5432172584057b550a160\n| Author: Jonas Fonseca <jonas.fonseca@gmail.com>\n| Date:   Tue Dec 17 00:02:15 2013 +0100\n|\n|     Update links to reflect project name change\n|\n|     scalajs-benchmarks -> scala-js-benchmarks\n[log] e59a941c4e7d51cd172ee2767a031f5f3fd25d05 - line 1 of 559                5%\nEOF\n"
  },
  {
    "path": "test/log/pretty-format-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=20\n\ntigrc <<EOF\n# Check compatibility with pretty format override\nset log-options = --date=short\nEOF\n\ngitconfig <<EOF\n[format]\n\tpretty = format:'%C(bold blue)%H%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)'\nEOF\n\nsteps '\n\t:save-display log-pretty-format-override.screen\n\n\t:toggle log-options --pretty=raw\n\t:save-display log-pretty-raw.screen\n\n\t:toggle log-options --pretty=full\n\t:save-display log-pretty-full.screen\n\n\t:toggle log-options --pretty=fuller\n\t:save-display log-pretty-fuller.screen\n'\n\ngit_clone 'repo-one'\n\ntest_tig log\n\nassert_equals 'log-pretty-format-override.screen' <<EOF\ncommit 5cb3412a5e06e506840495b91acc885037a48b72\nRefs: [master], {origin/master}, {origin/HEAD}\nAuthor: Max Power <power123@example.org>\nDate:   2010-04-07\n\n    Commit 10 E\n\ncommit 2843bfd58b98c7e23ab91e51ffa4db4f8e27c9a4\nAuthor: Jørgen Thygesen Brahe <brache@example.dk>\nDate:   2010-03-29\n\n    Commit 10 D\n\ncommit 8d53d6a41f8540749c0db5d0b53e48d2f178dce4\nAuthor: 作者 <zuozhea@example.ch>\nDate:   2010-03-21\n\n    Commit 10 C\n[log] 5cb3412a5e06e506840495b91acc885037a48b72 - line 1 of 301                5%\nEOF\n\nassert_equals 'log-pretty-raw.screen' <<EOF\ncommit 5cb3412a5e06e506840495b91acc885037a48b72\nRefs: [master], {origin/master}, {origin/HEAD}\ntree 4b825dc642cb6eb9a060e54bf8d69288fbee4904\nparent 2843bfd58b98c7e23ab91e51ffa4db4f8e27c9a4\nauthor Max Power <power123@example.org> 1270618660 +0000\ncommitter Committer <c.ommitter@example.net> 1270618660 +0000\n\n    Commit 10 E\n\ncommit 2843bfd58b98c7e23ab91e51ffa4db4f8e27c9a4\ntree 4b825dc642cb6eb9a060e54bf8d69288fbee4904\nparent 8d53d6a41f8540749c0db5d0b53e48d2f178dce4\nauthor Jørgen Thygesen Brahe <brache@example.dk> 1269882930 +0000\ncommitter Committer <c.ommitter@example.net> 1269882930 +0000\n\n    Commit 10 D\n\ncommit 8d53d6a41f8540749c0db5d0b53e48d2f178dce4\n[log] 5cb3412a5e06e506840495b91acc885037a48b72 - line 1 of 400                4%\nEOF\n\nassert_equals 'log-pretty-full.screen' <<EOF\ncommit 5cb3412a5e06e506840495b91acc885037a48b72\nRefs: [master], {origin/master}, {origin/HEAD}\nAuthor: Max Power <power123@example.org>\nCommit: Committer <c.ommitter@example.net>\n\n    Commit 10 E\n\ncommit 2843bfd58b98c7e23ab91e51ffa4db4f8e27c9a4\nAuthor: Jørgen Thygesen Brahe <brache@example.dk>\nCommit: Committer <c.ommitter@example.net>\n\n    Commit 10 D\n\ncommit 8d53d6a41f8540749c0db5d0b53e48d2f178dce4\nAuthor: 作者 <zuozhea@example.ch>\nCommit: Committer <c.ommitter@example.net>\n\n    Commit 10 C\n[log] 5cb3412a5e06e506840495b91acc885037a48b72 - line 1 of 301                5%\nEOF\n\nassert_equals 'log-pretty-fuller.screen' <<EOF\ncommit 5cb3412a5e06e506840495b91acc885037a48b72\nRefs: [master], {origin/master}, {origin/HEAD}\nAuthor:     Max Power <power123@example.org>\nAuthorDate: Wed Apr 7 05:37:40 2010 +0000\nCommit:     Committer <c.ommitter@example.net>\nCommitDate: Wed Apr 7 05:37:40 2010 +0000\n\n    Commit 10 E\n\ncommit 2843bfd58b98c7e23ab91e51ffa4db4f8e27c9a4\nAuthor:     Jørgen Thygesen Brahe <brache@example.dk>\nAuthorDate: Mon Mar 29 17:15:30 2010 +0000\nCommit:     Committer <c.ommitter@example.net>\nCommitDate: Mon Mar 29 17:15:30 2010 +0000\n\n    Commit 10 D\n\ncommit 8d53d6a41f8540749c0db5d0b53e48d2f178dce4\n[log] 5cb3412a5e06e506840495b91acc885037a48b72 - line 1 of 401                4%\nEOF\n"
  },
  {
    "path": "test/log/start-on-line-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\nsteps '\n\t:save-display position.screen\n'\n\ntest_tig log +42\n\nassert_equals 'position.screen' <<EOF\nAuthor: Jonas Fonseca <jonas.fonseca@gmail.com>\nDate:   Sat Mar 1 15:59:02 2014 -0500\n\n    Add type parameter for js.Dynamic\n\n common/src/main/scala/org/scalajs/benchmark/Benchmark.scala | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ncommit 296fc90ba2c47ba3d2b6ab8e984ea3a82bb4cd6e\nAuthor: Jonas Fonseca <jonas.fonseca@gmail.com>\nDate:   Thu Jan 16 22:51:27 2014 -0500\n\n    Move classes under org.scalajs.benchmark package scope\n\n common/Benchmark.scala                             | 110 ----\n common/BenchmarkApp.scala                          |  47 --\n common/DOMTypes.scala                              |  49 --\n .../scala/org/scalajs/benchmark/Benchmark.scala    | 110 ++++\n .../scala/org/scalajs/benchmark/BenchmarkApp.scala |  46 ++\n .../scala/org/scalajs/benchmark/dom/DOMTypes.scala |  49 ++\n deltablue/DeltaBlue.scala                          | 704 ---------------------\n deltablue/exports.js                               |   2 +-\n .../scalajs/benchmark/deltablue/DeltaBlue.scala    | 704 +++++++++++++++++++++\n richards/Richards.scala                            | 460 --------------\n richards/exports.js                                |   2 +-\n .../org/scalajs/benchmark/richards/Richards.scala  | 460 ++++++++++++++\n sudoku/Sudoku.scala                                | 197 ------\n sudoku/exports.js                                  |   2 +-\n[log] 296fc90ba2c47ba3d2b6ab8e984ea3a82bb4cd6e - line 42 of 668               8%\nEOF\n"
  },
  {
    "path": "test/log/submodule-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=47\n\ntigrc <<EOF\nset vertical-split = no\nEOF\n\nsteps '\n\t:save-display log-submodule.screen\n\n\t:toggle log-options --cc --stat --submodule -p\n\t:save-display log-submodule-diff.screen\n'\n\ntest_setup_work_dir()\n{\n\tgit_clone 'repo-two' .\n\tgit submodule init\n\tgit submodule update\n}\n\ntest_tig log\n\nassert_equals 'log-submodule.screen' <<EOF\ncommit feeb2dfd5e09e887e4b6c901e7d91a4c85a7831d\nRefs: [master], {origin/master}, {origin/HEAD}\nAuthor: A. U. Thor <a.u.thor@example.com>\nDate:   Sun Sep 6 08:23:30 2009 +0000\n\n    [repo-two] Integrate feature from repo-two-a, repo-two-b, repo-two-c\n\n repo-two-a | 2 +-\n repo-two-b | 2 +-\n repo-two-c | 2 +-\n 3 files changed, 3 insertions(+), 3 deletions(-)\n\ncommit 7f9d74d1b554e99059334799f56b1307f9c324d4\nAuthor: A. U. Thor <a.u.thor@example.com>\nDate:   Mon Aug 3 06:54:50 2009 +0000\n\n    [repo-two] Integrate feature from repo-two-b\n\n repo-two-b | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ncommit 2bbde7f66edbac9b45b86ad75e6b1e8e02970a67\nAuthor: A. U. Thor <a.u.thor@example.com>\nDate:   Wed Jul 8 17:48:20 2009 +0000\n\n    [repo-two] Integrate feature from repo-two-a, repo-two-c\n\n repo-two-a | 2 +-\n repo-two-c | 2 +-\n 2 files changed, 2 insertions(+), 2 deletions(-)\n\ncommit 3a2603a2ea55ef06860f8d8ec33ee10d95d08117\nAuthor: A. U. Thor <a.u.thor@example.com>\nDate:   Wed May 27 03:57:30 2009 +0000\n\n    [repo-two] Creating repository\n\n .gitmodules | 9 +++++++++\n repo-two-a  | 1 +\n repo-two-b  | 1 +\n repo-two-c  | 1 +\n 4 files changed, 12 insertions(+)\n\ncommit 9bb0f0da3dd2dec58efa5d8fa9d2b1f4768504e9\nAuthor: A. U. Thor <a.u.thor@example.com>\n[log] feeb2dfd5e09e887e4b6c901e7d91a4c85a7831d - line 1 of 69                65%\nEOF\n\nassert_equals 'log-submodule-diff.screen' <<EOF\ncommit feeb2dfd5e09e887e4b6c901e7d91a4c85a7831d\nRefs: [master], {origin/master}, {origin/HEAD}\nAuthor: A. U. Thor <a.u.thor@example.com>\nDate:   Sun Sep 6 08:23:30 2009 +0000\n\n    [repo-two] Integrate feature from repo-two-a, repo-two-b, repo-two-c\n---\n repo-two-a | 2 +-\n repo-two-b | 2 +-\n repo-two-c | 2 +-\n 3 files changed, 3 insertions(+), 3 deletions(-)\n\nSubmodule repo-two-a a1d2fa2..598d4e4:\n  > [repo-two-a] Commit 5\nSubmodule repo-two-b f3866fb..8ab92f1:\n  > [repo-two-b] Commit 5\nSubmodule repo-two-c cd41885..e4b7821:\n  > [repo-two-c] Commit 5\n\ncommit 7f9d74d1b554e99059334799f56b1307f9c324d4\nAuthor: A. U. Thor <a.u.thor@example.com>\nDate:   Mon Aug 3 06:54:50 2009 +0000\n\n    [repo-two] Integrate feature from repo-two-b\n---\n repo-two-b | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\nSubmodule repo-two-b e795b27..f3866fb:\n  > [repo-two-b] Commit 4\n  > [repo-two-b] Commit 3\n\ncommit 2bbde7f66edbac9b45b86ad75e6b1e8e02970a67\nAuthor: A. U. Thor <a.u.thor@example.com>\nDate:   Wed Jul 8 17:48:20 2009 +0000\n\n    [repo-two] Integrate feature from repo-two-a, repo-two-c\n---\n repo-two-a | 2 +-\n repo-two-c | 2 +-\n 2 files changed, 2 insertions(+), 2 deletions(-)\n\nSubmodule repo-two-a 7df88b0..a1d2fa2:\n  > [repo-two-a] Commit 4\n  > [repo-two-a] Commit 3\n[log] feeb2dfd5e09e887e4b6c901e7d91a4c85a7831d - line 1 of 130               34%\nEOF\n"
  },
  {
    "path": "test/main/all-arg-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n. \"$source_dir/util.sh\"\n\nexport LINES=16\n\nsteps '\n\t:set line-graphics = ascii\n\t:exec !assert-var \"%(revargs)\" == \"--all\"\n\t:exec !git branch -D mp/feature\n\t:save-display final.screen\n\n\t:exec !git checkout HEAD~2\n\t:refresh\n\t:save-display detached.screen\n'\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/refs-repo.tgz\"\n\ntest_tig --all\n\nassert_vars 1\n\nassert_equals stderr <<EOF\nEOF\n\nassert_equals 'final.screen' <<EOF\n2009-02-13 23:31 +0000 Max Power             * {max-power/mp/feature} WIP: featu\n2010-04-07 05:37 +0000 Max Power             * [master] {origin/master} {max-pow\n2010-03-29 17:15 +0000 Jørgen Thygesen Brahe * Commit 10 D\n2010-03-21 04:53 +0000 作者                  * Commit 10 C\n2010-03-12 16:31 +0000 René Lévesque         * <v2.0.1> Commit 10 B\n2010-03-04 04:09 +0000 A. U. Thor            * <v2.0> Commit 10 A\n2010-02-23 15:46 +0000 Max Power             * Commit 9 E\n2010-02-15 03:24 +0000 Jørgen Thygesen Brahe * Commit 9 D\n2010-02-06 15:02 +0000 作者                  * Commit 9 C\n2010-01-29 02:40 +0000 René Lévesque         * Commit 9 B\n2010-01-20 14:18 +0000 A. U. Thor            * <v1.1.1> Commit 9 A\n2010-01-12 01:56 +0000 Max Power             * <mp/good> Commit 8 E\n2010-01-03 13:33 +0000 Jørgen Thygesen Brahe * Commit 8 D\n2009-12-26 01:11 +0000 作者                  * [r1.1.2] [r1.1.x] <v1.1> Commit 8\n[main] 042f71a7592228ae84cbb3642c2666dcd35aa527 - commit 1 of 51             27%\nEOF\n\nassert_equals 'detached.screen' <<EOF\n2009-02-13 23:31 +0000 Max Power             * {max-power/mp/feature} WIP: featu\n2010-04-07 05:37 +0000 Max Power             * [master] {max-power/master} {orig\n2010-03-29 17:15 +0000 Jørgen Thygesen Brahe * Commit 10 D\n2010-03-21 04:53 +0000 作者                  * [HEAD] Commit 10 C\n2010-03-12 16:31 +0000 René Lévesque         * <v2.0.1> Commit 10 B\n2010-03-04 04:09 +0000 A. U. Thor            * <v2.0> Commit 10 A\n2010-02-23 15:46 +0000 Max Power             * Commit 9 E\n2010-02-15 03:24 +0000 Jørgen Thygesen Brahe * Commit 9 D\n2010-02-06 15:02 +0000 作者                  * Commit 9 C\n2010-01-29 02:40 +0000 René Lévesque         * Commit 9 B\n2010-01-20 14:18 +0000 A. U. Thor            * <v1.1.1> Commit 9 A\n2010-01-12 01:56 +0000 Max Power             * <mp/good> Commit 8 E\n2010-01-03 13:33 +0000 Jørgen Thygesen Brahe * Commit 8 D\n2009-12-26 01:11 +0000 作者                  * [r1.1.2] [r1.1.x] <v1.1> Commit 8\n[main] 042f71a7592228ae84cbb3642c2666dcd35aa527 - commit 1 of 51             27%\nEOF\n"
  },
  {
    "path": "test/main/author-name-change-test",
    "content": "#!/bin/sh\n#\n# Test display and options specific to the main view.\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=5\n\ntigrc <<EOF\nset vertical-split = no\nEOF\n\nsteps '\n\t:save-display main-default.screen\n'\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/repo-authornamechange.tgz\"\n\ntest_tig\n\nassert_equals 'main-default.screen' <<EOF\n2016-11-28 23:13 -0500 Mr. Hyde   o [master] Commit 2\n2016-11-28 23:13 -0500 Dr. Jekyll I Commit 1\n \n[main] 15c9cec4c9a64c560391c7e0bfb0913b908f9287 - commit 1 of 2             100%\nEOF\n"
  },
  {
    "path": "test/main/boundary-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n. \"$source_dir/util.sh\"\n\nexport LINES=16\n\nsteps '\n\t:set line-graphics = ascii\n\t:save-display merge-view.screen\n'\n\nin_work_dir create_dirty_workdir\nin_work_dir setup-conflict.sh >> prepare.log 2>> prepare.log\n\ntest_tig --boundary --all ^master\n\nassert_equals 'merge-view.screen' <<EOF\n2009-03-28 13:22 +0000 Committer         * [conflict-branch] Change: d'\n2009-03-20 01:00 +0000 Committer         * Change: d\n2014-05-25 19:42 +0000 Not Committed Yet | * Unstaged changes\n2009-03-11 12:38 +0000 Committer         | * [conflict-master] Change: c'\n2009-03-03 00:15 +0000 Committer         | * Change: c\n2009-02-22 11:53 +0000 Committer         o-' [master] Change: b\n \n \n \n \n \n \n \n \n[main] d62d8545d99da3de587bf2ef43703dde0ce68084 - commit 1 of 5             100%\nEOF\n"
  },
  {
    "path": "test/main/branch-var-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=18\n\ntigrc <<EOF\nset line-graphics = ascii\nset refresh-mode = manual\nEOF\n\nsteps '\n\t:/mp/feature\n\n\t:1\n\t:exec !assert-var \"%(branch)\" == \"mp/feature\"\n\n\t:2\n\t:exec !assert-var \"%(branch)\" == \"master\"\n\n\t:14\n\t:exec !assert-var \"%(branch)\" == \"r1.1.2\"\n\n\t:15\n\t:exec !assert-var \"%(branch)\" == \"r1.0\"\n\n\t:1\n\t:save-display main.screen\n'\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/refs-repo.tgz\"\n\ntest_tig --all\n\nassert_vars 4\n\nassert_equals 'main.screen' <<EOF\n2009-02-13 23:31 +0000 Max Power             * [mp/feature] {max-power/mp/featur\n2010-04-07 05:37 +0000 Max Power             * [master] {origin/master} {max-pow\n2010-03-29 17:15 +0000 Jørgen Thygesen Brahe * Commit 10 D\n2010-03-21 04:53 +0000 作者                  * Commit 10 C\n2010-03-12 16:31 +0000 René Lévesque         * <v2.0.1> Commit 10 B\n2010-03-04 04:09 +0000 A. U. Thor            * <v2.0> Commit 10 A\n2010-02-23 15:46 +0000 Max Power             * Commit 9 E\n2010-02-15 03:24 +0000 Jørgen Thygesen Brahe * Commit 9 D\n2010-02-06 15:02 +0000 作者                  * Commit 9 C\n2010-01-29 02:40 +0000 René Lévesque         * Commit 9 B\n2010-01-20 14:18 +0000 A. U. Thor            * <v1.1.1> Commit 9 A\n2010-01-12 01:56 +0000 Max Power             * <mp/good> Commit 8 E\n2010-01-03 13:33 +0000 Jørgen Thygesen Brahe * Commit 8 D\n2009-12-26 01:11 +0000 作者                  * [r1.1.2] [r1.1.x] <v1.1> Commit 8\n2009-12-17 12:49 +0000 René Lévesque         * [r1.0] <v1.0> Commit 8 B\n2009-12-09 00:27 +0000 A. U. Thor            * Commit 8 A\n[main] 042f71a7592228ae84cbb3642c2666dcd35aa527 - commit 1 of 51             31%\nEOF\n"
  },
  {
    "path": "test/main/commit-order-edge-case-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=10\n\ntigrc <<EOF\nset line-graphics = utf-8\nset main-view = date author commit-title:yes,graph\nEOF\n\nsteps '\n\t:save-display ensure-topo-order-with-graph.screen\n\n\t:set commit-order = date\n\t:save-display graph-supports-date-order.screen\n'\n\nin_work_dir create_repo_from_tgz \"$source_dir/$test.tgz\"\n\ntest_tig\n\nassert_equals 'ensure-topo-order-with-graph.screen' <<EOF\n2014-02-01 22:36 -0600 Benjamin Bergman ●─╮ Merge branch 'feature_branch'\n2014-02-01 22:35 -0600 Benjamin Bergman │ ∙ More featuresA\n2014-02-01 22:36 -0600 Benjamin Bergman ∙ │ More master\n2014-02-01 22:21 -0600 Benjamin Bergman ●─│─╮ Merge branch 'feature_branch'\n2014-02-01 23:00 -0600 Benjamin Bergman │ ∙─╯ Add feature\n2014-02-01 22:21 -0600 Benjamin Bergman ∙ │ Add to master\n2014-02-01 22:18 -0600 Benjamin Bergman ◎─╯ init\n \n[main] 324309341617186ec7f9bf2f9b504a956b9c382a - commit 1 of 7             100%\nEOF\n\nassert_equals 'graph-supports-date-order.screen' <<EOF\n2014-02-01 22:36 -0600 Benjamin Bergman ●─╮ Merge branch 'feature_branch'\n2014-02-01 22:36 -0600 Benjamin Bergman ∙ │ More master\n2014-02-01 22:35 -0600 Benjamin Bergman │ ∙ More featuresA\n2014-02-01 22:21 -0600 Benjamin Bergman ●─│─╮ Merge branch 'feature_branch'\n2014-02-01 23:00 -0600 Benjamin Bergman │ ∙─╯ Add feature\n2014-02-01 22:21 -0600 Benjamin Bergman ∙ │ Add to master\n2014-02-01 22:18 -0600 Benjamin Bergman ◎─╯ init\n \n[main] 324309341617186ec7f9bf2f9b504a956b9c382a - commit 1 of 7             100%\nEOF\n"
  },
  {
    "path": "test/main/commit-title-overflow-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=51\n\ntigrc <<EOF\nset vertical-split = no\nset main-view\t= line-number:no id:no date:no author:no commit-title:yes,graph=no,refs=no,overflow=5\nEOF\n\nsteps '\n\t:save-display main-commit-titles.screen\n'\n\ntest_setup_work_dir()\n{\n\toffset=0\n\tprefix0=\n\tprefix1=\n\tprefix2=\n\tprefix3=\n\tprefix4=\n\n\tfor i in $(seq 1 7); do\n\t\tgit_commit -m \"${prefix0}æøå\t\t: #1 - ASCII prefix\"\n\t\tgit_commit -m \"${prefix0}作者\t\t: #2 - ASCII prefix\"\n\t\toffset=\"$(expr \"$offset\" + 1)\"\n\t\tif [ \"$offset\" -eq 5 ]; then\n\t\t\tprefix0=\"${prefix0}|\"\n\t\t\toffset=0\n\t\telse\n\t\t\tprefix0=\"${prefix0}.\"\n\t\tfi\n\n\t\tgit_commit -m \"${prefix1}æøå\t\t: #3 - mixed prefix\"\n\t\tgit_commit -m \"${prefix2}作者\t\t: #4 - mixed prefix\"\n\t\tif [ -z \"$prefix1\" ]; then\n\t\t\tprefix1=\"${prefix1}>\"\n\t\t\tprefix2=\"${prefix2}>\"\n\t\telse\n\t\t\tprefix1=\"${prefix1}å\"\n\t\t\tprefix2=\"${prefix2}者\"\n\t\tfi\n\n\t\tgit_commit -m \"${prefix3}æøå\t\t: #5 - non-ASCII prefix\"\n\t\tprefix3=\"${prefix3}å\"\n\n\t\tgit_commit -m \"${prefix4}作者\t\t: #6 - non-ASCII prefix\"\n\t\tprefix4=\"${prefix4}者\"\n\n\t\tgit_commit -m \"__________________________________________[ Variation $i ]\"\n\tdone\n}\n\ngit_init\ntest_tig\n\nassert_equals 'main-commit-titles.screen' <<EOF\n__________________________________________[ Variation 7 ]\n者者者者者者作者  : #6 - non-ASCII prefix\nååååååæøå  : #5 - non-ASCII prefix\n>者者者者者作者  : #4 - mixed prefix\n>åååååæøå  : #3 - mixed prefix\n....|.作者  : #2 - ASCII prefix\n....|.æøå  : #1 - ASCII prefix\n__________________________________________[ Variation 6 ]\n者者者者者作者  : #6 - non-ASCII prefix\nåååååæøå  : #5 - non-ASCII prefix\n>者者者者作者  : #4 - mixed prefix\n>ååååæøå  : #3 - mixed prefix\n....|作者  : #2 - ASCII prefix\n....|æøå  : #1 - ASCII prefix\n__________________________________________[ Variation 5 ]\n者者者者作者  : #6 - non-ASCII prefix\nååååæøå  : #5 - non-ASCII prefix\n>者者者作者  : #4 - mixed prefix\n>åååæøå  : #3 - mixed prefix\n....作者  : #2 - ASCII prefix\n....æøå  : #1 - ASCII prefix\n__________________________________________[ Variation 4 ]\n者者者作者  : #6 - non-ASCII prefix\nåååæøå  : #5 - non-ASCII prefix\n>者者作者  : #4 - mixed prefix\n>ååæøå  : #3 - mixed prefix\n...作者  : #2 - ASCII prefix\n...æøå  : #1 - ASCII prefix\n__________________________________________[ Variation 3 ]\n者者作者  : #6 - non-ASCII prefix\nååæøå  : #5 - non-ASCII prefix\n>者作者  : #4 - mixed prefix\n>åæøå  : #3 - mixed prefix\n..作者  : #2 - ASCII prefix\n..æøå  : #1 - ASCII prefix\n__________________________________________[ Variation 2 ]\n者作者  : #6 - non-ASCII prefix\nåæøå  : #5 - non-ASCII prefix\n>作者  : #4 - mixed prefix\n>æøå  : #3 - mixed prefix\n.作者  : #2 - ASCII prefix\n.æøå  : #1 - ASCII prefix\n__________________________________________[ Variation 1 ]\n作者  : #6 - non-ASCII prefix\næøå  : #5 - non-ASCII prefix\n作者  : #4 - mixed prefix\næøå  : #3 - mixed prefix\n作者  : #2 - ASCII prefix\næøå  : #1 - ASCII prefix\n[main] 2c360aa85544dd96eb1c4be5234c06c192f9a895 - commit 1 of 49            100%\nEOF\n"
  },
  {
    "path": "test/main/date-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport TEST_TIME_NOW=1441051553\nexport LINES=27\n\ntigrc <<EOF\nset vertical-split = no\nset main-view-date-use-author = yes\nEOF\n\nsteps '\n\t:save-display default-date.screen\n\n\t:toggle date-local\n\t:save-display local-date.screen\n\t:toggle date-local\n\n\t:toggle date\n\t:save-display relative-date.screen\n\n\t:toggle date\n\t:save-display relative-compact-date.screen\n\n\t:toggle date\n\t:set main-view-date-format = \"%Y-%m-%d\"\n\t:save-display custom-short-date.screen\n\n\t:set main-view-date-format = \"%Y-%m-%d z=%z Z=%Z z=%z\"\n\t:save-display custom-tz-date.screen\n\n\t:toggle date\n\t:save-display no-date.screen\n\n\t:set main-view-date = custom\n\t:set main-view-date-local = true\n\t:set main-view-date-format = \"%F %R %Z\"\n\t:save-display custom-date.screen\n'\n\ntest_tig --pretty=raw < \"$source_dir/$test.in\"\n\nassert_equals 'default-date.screen' <<EOF\n2015-08-31 04:01 +0900 Kentaro Wada        Add zsh completion file for autoload\n2015-08-23 18:32 -0400 Jonas Fonseca       Refactor DEFINE_ALLOCATOR to use help\n2015-07-16 11:46 +0200 Sven Wegener        display: factor out separator functio\n2015-08-22 16:20 -0400 Jonas Fonseca       Merge pull request #429 from ideal/ma\n2015-08-18 15:24 +0800 ideal               check if mem is NULL in DEFINE_ALLOCA\n2015-06-07 23:44 -0400 Jonas Fonseca       Use git_init to initialize the test/s\n2015-04-06 20:34 -0400 Jonas Fonseca       Keep unstaged changes view open after\n2015-03-30 07:43 -0400 Jonas Fonseca       When redrawing the readline prompt al\n2015-02-02 21:53 -0500 Jonas Fonseca       Move script helper before usages in t\n2015-01-29 10:44 -0500 Jonas Fonseca       Merge branch 'hashed-refs'\n2014-12-04 11:22 -0500 Jonas Fonseca       hashed-refs: Use a hash table as the\n2014-11-08 09:55 -0500 Jonas Fonseca       Unify option_info lookup for normal o\n2014-10-06 21:22 -0400 Jonas Fonseca       Add option to turn off automatic enab\n2014-09-23 12:54 +0200 Tom Greuter         Add option to install Tig with Homebr\n2014-09-04 07:19 -0400 Jonas Fonseca       Fix diff context restoring for diff o\n2013-12-15 09:55 +1100 Michael Barlow      Add mouse support\n2012-09-30 22:43 -0400 Jonas Fonseca       Refactor stage view title formatting\n2012-08-30 10:47 -0400 Jonas Fonseca       [GH #83] WIP: main view lazy navigati\n2011-10-13 11:46 +0530 P. Sadik            Create and use dup() of STDIN_FILENO\n2010-09-15 21:01 -0400 Jonathan Neuschäfer Don't show out-of-sight tildes\n2010-06-28 10:26 +0200 Pierre Habouzit     Add an option to ignore unknown direc\n2009-01-17 23:10 +0100 Jonas Fonseca       Fix another regression from the dirty\n2007-09-29 23:23 +0200 Jonas Fonseca       tig-0.10.git\n2006-09-12 00:22 +0200 Jonas Fonseca       Only split the tree view when the tre\n2006-04-10 18:39 +0200 Jonas Fonseca       Initial commit\n[main] 91912eb97da4f6907015dab41ef9bba315730854 - commit 1 of 25            100%\nEOF\n\nassert_equals 'local-date.screen' <<EOF\n2015-08-30 19:01 Kentaro Wada        Add zsh completion file for autoload\n2015-08-23 22:32 Jonas Fonseca       Refactor DEFINE_ALLOCATOR to use helper met\n2015-07-16 09:46 Sven Wegener        display: factor out separator functions\n2015-08-22 20:20 Jonas Fonseca       Merge pull request #429 from ideal/master\n2015-08-18 07:24 ideal               check if mem is NULL in DEFINE_ALLOCATOR\n2015-06-08 03:44 Jonas Fonseca       Use git_init to initialize the test/stage/g\n2015-04-07 00:34 Jonas Fonseca       Keep unstaged changes view open after an st\n2015-03-30 11:43 Jonas Fonseca       When redrawing the readline prompt also upd\n2015-02-03 02:53 Jonas Fonseca       Move script helper before usages in the dis\n2015-01-29 15:44 Jonas Fonseca       Merge branch 'hashed-refs'\n2014-12-04 16:22 Jonas Fonseca       hashed-refs: Use a hash table as the main d\n2014-11-08 14:55 Jonas Fonseca       Unify option_info lookup for normal options\n2014-10-07 01:22 Jonas Fonseca       Add option to turn off automatic enabling o\n2014-09-23 10:54 Tom Greuter         Add option to install Tig with Homebrew\n2014-09-04 11:19 Jonas Fonseca       Fix diff context restoring for diff opened\n2013-12-14 22:55 Michael Barlow      Add mouse support\n2012-10-01 02:43 Jonas Fonseca       Refactor stage view title formatting\n2012-08-30 14:47 Jonas Fonseca       [GH #83] WIP: main view lazy navigation mod\n2011-10-13 06:16 P. Sadik            Create and use dup() of STDIN_FILENO instea\n2010-09-16 01:01 Jonathan Neuschäfer Don't show out-of-sight tildes\n2010-06-28 08:26 Pierre Habouzit     Add an option to ignore unknown directories\n2009-01-17 22:10 Jonas Fonseca       Fix another regression from the dirty flag\n2007-09-29 21:23 Jonas Fonseca       tig-0.10.git\n2006-09-11 22:22 Jonas Fonseca       Only split the tree view when the tree view\n2006-04-10 16:39 Jonas Fonseca       Initial commit\n[main] 91912eb97da4f6907015dab41ef9bba315730854 - commit 1 of 25            100%\nEOF\n\nassert_equals 'relative-date.screen' <<EOF\n 25 hours ago Kentaro Wada        Add zsh completion file for autoload\n   7 days ago Jonas Fonseca       Refactor DEFINE_ALLOCATOR to use helper method\n  1 month ago Sven Wegener        display: factor out separator functions\n   8 days ago Jonas Fonseca       Merge pull request #429 from ideal/master\n  13 days ago ideal               check if mem is NULL in DEFINE_ALLOCATOR\n 2 months ago Jonas Fonseca       Use git_init to initialize the test/stage/gh-4\n 4 months ago Jonas Fonseca       Keep unstaged changes view open after an stagi\n 5 months ago Jonas Fonseca       When redrawing the readline prompt also update\n 6 months ago Jonas Fonseca       Move script helper before usages in the displa\n 7 months ago Jonas Fonseca       Merge branch 'hashed-refs'\n 9 months ago Jonas Fonseca       hashed-refs: Use a hash table as the main data\n 9 months ago Jonas Fonseca       Unify option_info lookup for normal options an\n10 months ago Jonas Fonseca       Add option to turn off automatic enabling of t\n11 months ago Tom Greuter         Add option to install Tig with Homebrew\n12 months ago Jonas Fonseca       Fix diff context restoring for diff opened dir\n   1 year ago Michael Barlow      Add mouse support\n  2 years ago Jonas Fonseca       Refactor stage view title formatting\n  3 years ago Jonas Fonseca       [GH #83] WIP: main view lazy navigation mode p\n  3 years ago P. Sadik            Create and use dup() of STDIN_FILENO instead o\n  4 years ago Jonathan Neuschäfer Don't show out-of-sight tildes\n  5 years ago Pierre Habouzit     Add an option to ignore unknown directories co\n  6 years ago Jonas Fonseca       Fix another regression from the dirty flag cha\n  7 years ago Jonas Fonseca       tig-0.10.git\n  8 years ago Jonas Fonseca       Only split the tree view when the tree view is\n  9 years ago Jonas Fonseca       Initial commit\n[main] 91912eb97da4f6907015dab41ef9bba315730854 - commit 1 of 25            100%\nEOF\n\nassert_equals 'relative-compact-date.screen' <<EOF\n25h Kentaro Wada        Add zsh completion file for autoload\n7D  Jonas Fonseca       Refactor DEFINE_ALLOCATOR to use helper method and asser\n1M  Sven Wegener        display: factor out separator functions\n8D  Jonas Fonseca       Merge pull request #429 from ideal/master\n13D ideal               check if mem is NULL in DEFINE_ALLOCATOR\n2M  Jonas Fonseca       Use git_init to initialize the test/stage/gh-410-test re\n4M  Jonas Fonseca       Keep unstaged changes view open after an staging command\n5M  Jonas Fonseca       When redrawing the readline prompt also update the curso\n6M  Jonas Fonseca       Move script helper before usages in the display module\n7M  Jonas Fonseca       Merge branch 'hashed-refs'\n9M  Jonas Fonseca       hashed-refs: Use a hash table as the main data structure\n9M  Jonas Fonseca       Unify option_info lookup for normal options and view col\n10M Jonas Fonseca       Add option to turn off automatic enabling of topo-order\n11M Tom Greuter         Add option to install Tig with Homebrew\n12M Jonas Fonseca       Fix diff context restoring for diff opened directly via\n1Y  Michael Barlow      Add mouse support\n2Y  Jonas Fonseca       Refactor stage view title formatting\n3Y  Jonas Fonseca       [GH #83] WIP: main view lazy navigation mode prototype\n3Y  P. Sadik            Create and use dup() of STDIN_FILENO instead of STDIN_FI\n4Y  Jonathan Neuschäfer Don't show out-of-sight tildes\n5Y  Pierre Habouzit     Add an option to ignore unknown directories contents in\n6Y  Jonas Fonseca       Fix another regression from the dirty flag changes causi\n7Y  Jonas Fonseca       tig-0.10.git\n8Y  Jonas Fonseca       Only split the tree view when the tree view is visible\n9Y  Jonas Fonseca       Initial commit\n[main] 91912eb97da4f6907015dab41ef9bba315730854 - commit 1 of 25            100%\nEOF\n\nassert_equals 'custom-short-date.screen' <<EOF\n2015-08-31 Kentaro Wada        Add zsh completion file for autoload\n2015-08-23 Jonas Fonseca       Refactor DEFINE_ALLOCATOR to use helper method an\n2015-07-16 Sven Wegener        display: factor out separator functions\n2015-08-22 Jonas Fonseca       Merge pull request #429 from ideal/master\n2015-08-18 ideal               check if mem is NULL in DEFINE_ALLOCATOR\n2015-06-07 Jonas Fonseca       Use git_init to initialize the test/stage/gh-410-\n2015-04-06 Jonas Fonseca       Keep unstaged changes view open after an staging\n2015-03-30 Jonas Fonseca       When redrawing the readline prompt also update th\n2015-02-02 Jonas Fonseca       Move script helper before usages in the display m\n2015-01-29 Jonas Fonseca       Merge branch 'hashed-refs'\n2014-12-04 Jonas Fonseca       hashed-refs: Use a hash table as the main data st\n2014-11-08 Jonas Fonseca       Unify option_info lookup for normal options and v\n2014-10-06 Jonas Fonseca       Add option to turn off automatic enabling of topo\n2014-09-23 Tom Greuter         Add option to install Tig with Homebrew\n2014-09-04 Jonas Fonseca       Fix diff context restoring for diff opened direct\n2013-12-15 Michael Barlow      Add mouse support\n2012-09-30 Jonas Fonseca       Refactor stage view title formatting\n2012-08-30 Jonas Fonseca       [GH #83] WIP: main view lazy navigation mode prot\n2011-10-13 P. Sadik            Create and use dup() of STDIN_FILENO instead of S\n2010-09-15 Jonathan Neuschäfer Don't show out-of-sight tildes\n2010-06-28 Pierre Habouzit     Add an option to ignore unknown directories conte\n2009-01-17 Jonas Fonseca       Fix another regression from the dirty flag change\n2007-09-29 Jonas Fonseca       tig-0.10.git\n2006-09-12 Jonas Fonseca       Only split the tree view when the tree view is vi\n2006-04-10 Jonas Fonseca       Initial commit\n[main] 91912eb97da4f6907015dab41ef9bba315730854 - commit 1 of 25            100%\nEOF\n\nassert_equals 'custom-tz-date.screen' <<EOF\n2015-08-31 z=+0900 Z=+0900 z=+0900 Kentaro Wada        Add zsh completion file f\n2015-08-23 z=-0400 Z=-0400 z=-0400 Jonas Fonseca       Refactor DEFINE_ALLOCATOR\n2015-07-16 z=+0200 Z=+0200 z=+0200 Sven Wegener        display: factor out separ\n2015-08-22 z=-0400 Z=-0400 z=-0400 Jonas Fonseca       Merge pull request #429 f\n2015-08-18 z=+0800 Z=+0800 z=+0800 ideal               check if mem is NULL in D\n2015-06-07 z=-0400 Z=-0400 z=-0400 Jonas Fonseca       Use git_init to initializ\n2015-04-06 z=-0400 Z=-0400 z=-0400 Jonas Fonseca       Keep unstaged changes vie\n2015-03-30 z=-0400 Z=-0400 z=-0400 Jonas Fonseca       When redrawing the readli\n2015-02-02 z=-0500 Z=-0500 z=-0500 Jonas Fonseca       Move script helper before\n2015-01-29 z=-0500 Z=-0500 z=-0500 Jonas Fonseca       Merge branch 'hashed-refs\n2014-12-04 z=-0500 Z=-0500 z=-0500 Jonas Fonseca       hashed-refs: Use a hash t\n2014-11-08 z=-0500 Z=-0500 z=-0500 Jonas Fonseca       Unify option_info lookup\n2014-10-06 z=-0400 Z=-0400 z=-0400 Jonas Fonseca       Add option to turn off au\n2014-09-23 z=+0200 Z=+0200 z=+0200 Tom Greuter         Add option to install Tig\n2014-09-04 z=-0400 Z=-0400 z=-0400 Jonas Fonseca       Fix diff context restorin\n2013-12-15 z=+1100 Z=+1100 z=+1100 Michael Barlow      Add mouse support\n2012-09-30 z=-0400 Z=-0400 z=-0400 Jonas Fonseca       Refactor stage view title\n2012-08-30 z=-0400 Z=-0400 z=-0400 Jonas Fonseca       [GH #83] WIP: main view l\n2011-10-13 z=+0530 Z=+0530 z=+0530 P. Sadik            Create and use dup() of S\n2010-09-15 z=-0400 Z=-0400 z=-0400 Jonathan Neuschäfer Don't show out-of-sight t\n2010-06-28 z=+0200 Z=+0200 z=+0200 Pierre Habouzit     Add an option to ignore u\n2009-01-17 z=+0100 Z=+0100 z=+0100 Jonas Fonseca       Fix another regression fr\n2007-09-29 z=+0200 Z=+0200 z=+0200 Jonas Fonseca       tig-0.10.git\n2006-09-12 z=+0200 Z=+0200 z=+0200 Jonas Fonseca       Only split the tree view\n2006-04-10 z=+0200 Z=+0200 z=+0200 Jonas Fonseca       Initial commit\n[main] 91912eb97da4f6907015dab41ef9bba315730854 - commit 1 of 25            100%\nEOF\n\nassert_equals 'no-date.screen' <<EOF\nKentaro Wada        Add zsh completion file for autoload\nJonas Fonseca       Refactor DEFINE_ALLOCATOR to use helper method and asserts\nSven Wegener        display: factor out separator functions\nJonas Fonseca       Merge pull request #429 from ideal/master\nideal               check if mem is NULL in DEFINE_ALLOCATOR\nJonas Fonseca       Use git_init to initialize the test/stage/gh-410-test repo\nJonas Fonseca       Keep unstaged changes view open after an staging command\nJonas Fonseca       When redrawing the readline prompt also update the cursor po\nJonas Fonseca       Move script helper before usages in the display module\nJonas Fonseca       Merge branch 'hashed-refs'\nJonas Fonseca       hashed-refs: Use a hash table as the main data structure for\nJonas Fonseca       Unify option_info lookup for normal options and view column\nJonas Fonseca       Add option to turn off automatic enabling of topo-order\nTom Greuter         Add option to install Tig with Homebrew\nJonas Fonseca       Fix diff context restoring for diff opened directly via 'tig\nMichael Barlow      Add mouse support\nJonas Fonseca       Refactor stage view title formatting\nJonas Fonseca       [GH #83] WIP: main view lazy navigation mode prototype\nP. Sadik            Create and use dup() of STDIN_FILENO instead of STDIN_FILENO\nJonathan Neuschäfer Don't show out-of-sight tildes\nPierre Habouzit     Add an option to ignore unknown directories contents in the\nJonas Fonseca       Fix another regression from the dirty flag changes causing f\nJonas Fonseca       tig-0.10.git\nJonas Fonseca       Only split the tree view when the tree view is visible\nJonas Fonseca       Initial commit\n[main] 91912eb97da4f6907015dab41ef9bba315730854 - commit 1 of 25            100%\nEOF\n\nassert_equals 'custom-date.screen' <<EOF\n2015-08-30 19:01 UTC Kentaro Wada        Add zsh completion file for autoload\n2015-08-23 22:32 UTC Jonas Fonseca       Refactor DEFINE_ALLOCATOR to use helper\n2015-07-16 09:46 UTC Sven Wegener        display: factor out separator functions\n2015-08-22 20:20 UTC Jonas Fonseca       Merge pull request #429 from ideal/mast\n2015-08-18 07:24 UTC ideal               check if mem is NULL in DEFINE_ALLOCATO\n2015-06-08 03:44 UTC Jonas Fonseca       Use git_init to initialize the test/sta\n2015-04-07 00:34 UTC Jonas Fonseca       Keep unstaged changes view open after a\n2015-03-30 11:43 UTC Jonas Fonseca       When redrawing the readline prompt also\n2015-02-03 02:53 UTC Jonas Fonseca       Move script helper before usages in the\n2015-01-29 15:44 UTC Jonas Fonseca       Merge branch 'hashed-refs'\n2014-12-04 16:22 UTC Jonas Fonseca       hashed-refs: Use a hash table as the ma\n2014-11-08 14:55 UTC Jonas Fonseca       Unify option_info lookup for normal opt\n2014-10-07 01:22 UTC Jonas Fonseca       Add option to turn off automatic enabli\n2014-09-23 10:54 UTC Tom Greuter         Add option to install Tig with Homebrew\n2014-09-04 11:19 UTC Jonas Fonseca       Fix diff context restoring for diff ope\n2013-12-14 22:55 UTC Michael Barlow      Add mouse support\n2012-10-01 02:43 UTC Jonas Fonseca       Refactor stage view title formatting\n2012-08-30 14:47 UTC Jonas Fonseca       [GH #83] WIP: main view lazy navigation\n2011-10-13 06:16 UTC P. Sadik            Create and use dup() of STDIN_FILENO in\n2010-09-16 01:01 UTC Jonathan Neuschäfer Don't show out-of-sight tildes\n2010-06-28 08:26 UTC Pierre Habouzit     Add an option to ignore unknown directo\n2009-01-17 22:10 UTC Jonas Fonseca       Fix another regression from the dirty f\n2007-09-29 21:23 UTC Jonas Fonseca       tig-0.10.git\n2006-09-11 22:22 UTC Jonas Fonseca       Only split the tree view when the tree\n2006-04-10 16:39 UTC Jonas Fonseca       Initial commit\n[main] 91912eb97da4f6907015dab41ef9bba315730854 - commit 1 of 25            100%\nEOF\n"
  },
  {
    "path": "test/main/date-test.in",
    "content": "commit 91912eb97da4f6907015dab41ef9bba315730854\nauthor Kentaro Wada <www.kentaro.wada@example.com> 1440961292 +0900\ncommitter Kentaro Wada <www.kentaro.wada@example.com> 1440962158 +0900\n\n    Add zsh completion file for autoload\n\ncommit 517b7e0decb2ec30333f045f7605025c0195f895\nauthor Jonas Fonseca <jonas.fonseca@example.com> 1440369159 -0400\ncommitter Jonas Fonseca <jonas.fonseca@example.com> 1440925276 +0200\n\n    Refactor DEFINE_ALLOCATOR to use helper method and asserts\n    \n    Move main code to helper method and only keep assertion checks and code\n    that dereferences the passed pointer.\n\ncommit 0e6cbc428c16968abccb6cb298f95ddcf3969bc6\nauthor Sven Wegener <sven.wegener@example.com> 1437039987 +0200\ncommitter Sven Wegener <sven.wegener@example.com> 1440764705 +0200\n\n    display: factor out separator functions\n    \n    Signed-off-by: Sven Wegener <sven.wegener@example.com>\n\ncommit 07b1b4dcbf6a4aae5f842be73d444403e53d488a\nauthor Jonas Fonseca <jonas.fonseca@example.com> 1440274835 -0400\ncommitter Jonas Fonseca <jonas.fonseca@example.com> 1440274835 -0400\n\n    Merge pull request #429 from ideal/master\n    \n    Check if mem is NULL in DEFINE_ALLOCATOR\n\ncommit e2b39dcda6b1619c15414981d2ce17f32709faa5\nauthor ideal <idealities@example.com> 1439882656 +0800\ncommitter ideal <idealities@example.com> 1439882656 +0800\n\n    check if mem is NULL in DEFINE_ALLOCATOR\n\ncommit decce5e3ae9073dbd2f11a4bbeb1ecee2a11a42a\nauthor Jonas Fonseca <jonas.fonseca@example.com> 1433735084 -0400\ncommitter Jonas Fonseca <jonas.fonseca@example.com> 1433735442 -0400\n\n    Use git_init to initialize the test/stage/gh-410-test repo\n    \n    This should finish this game of whack-a-mole to get the tests passing on\n    Travis.\n\ncommit 8894095d3e4c2779d987303b666472a8ae48dc99\nauthor Jonas Fonseca <jonas.fonseca@example.com> 1428366879 -0400\ncommitter Jonas Fonseca <jonas.fonseca@example.com> 1428366879 -0400\n\n    Keep unstaged changes view open after an staging command\n    \n    Fix regression where the stage view was closed even if there were more\n    changes remaining after an update.\n    \n    Fixed #399\n\ncommit aed7113e075464b8baba41080c93cf89df7ebd6b\nauthor Jonas Fonseca <jonas.fonseca@example.com> 1427715817 -0400\ncommitter Jonas Fonseca <jonas.fonseca@example.com> 1427715817 -0400\n\n    When redrawing the readline prompt also update the cursor position\n    \n    In the prompt, moving the cursor back and forth will correctly set the\n    internal cursor position, allowing for editing the input, but the visual\n    cursor was permanently stuck to the end of the line. Fix this by moving\n    the cursor to readline's internal cursor position.\n    \n    Fixes #396\n\ncommit c2b2a8e5608e37d8115e4162d82ecc3cdf1041df\nauthor Jonas Fonseca <jonas.fonseca@example.com> 1422932012 -0500\ncommitter Jonas Fonseca <jonas.fonseca@example.com> 1422932136 -0500\n\n    Move script helper before usages in the display module\n\ncommit 5b701322fd3a3dfffc7cdabf7b66cdfcfaa8fe00\nauthor Jonas Fonseca <jonas.fonseca@example.com> 1422546269 -0500\ncommitter Jonas Fonseca <jonas.fonseca@example.com> 1422546269 -0500\n\n    Merge branch 'hashed-refs'\n\ncommit 6b143b1fe9679e44e2b79f78088bbddc17b039b6\nauthor Jonas Fonseca <jonas.fonseca@example.com> 1417710141 -0500\ncommitter Jonas Fonseca <jonas.fonseca@example.com> 1422546257 -0500\n\n    hashed-refs: Use a hash table as the main data structure for storing refs\n    \n    Fixes #350.\n\ncommit a8015ea40fe8d40d92317940b8bd9e06f6c0786c\nauthor Jonas Fonseca <jonas.fonseca@example.com> 1415458521 -0500\ncommitter Jonas Fonseca <jonas.fonseca@example.com> 1415458521 -0500\n\n    Unify option_info lookup for normal options and view column options\n\ncommit d4d11fae72afa4292a44cb5f159c3fc07912b4c5\nauthor Jonas Fonseca <jonas.fonseca@example.com> 1412644955 -0400\ncommitter Jonas Fonseca <jonas.fonseca@example.com> 1412644955 -0400\n\n    Add option to turn off automatic enabling of topo-order\n    \n    This permits to avoid any initial pause during startup due to git-log\n    buffering commits for reordering.\n    \n    References #310\n\ncommit bfd137be6ddd4a51604d7e9b4f0cb92674b087b5\nauthor Tom Greuter <tomgreuter@example.com> 1411469699 +0200\ncommitter Jonas Fonseca <jonas.fonseca@example.com> 1412165197 -0400\n\n    Add option to install Tig with Homebrew\n\ncommit 4028125bc58c727482a909f8275bd4fa4999a4f4\nauthor Jonas Fonseca <jonas.fonseca@example.com> 1409829591 -0400\ncommitter Jonas Fonseca <jonas.fonseca@example.com> 1409829591 -0400\n\n    Fix diff context restoring for diff opened directly via 'tig show'\n    \n    The code that allows to jump to a line when opening a view from the\n    command line (e.g. `tig +10`) conflicted with diff context restoring\n    since it always restored using `view->env->lineno` regardless of whether\n    it was the view's first rendering or not. Furthermore, since diff_select\n    sets `view->env->lineno` this lead to strange line jumps.\n    \n    The bug is fixed by using `view->prev_pos` for implementing `+<lineno>`\n    and ensuring that it only happens for the initial view rendering.\n\ncommit 7b503675721ef4070bccb6eb5129e3b6abfd49e0\nauthor Michael Barlow <michaelbarlow7@example.com> 1387061741 +1100\ncommitter Jonas Fonseca <fonseca@example.com> 1390706924 -0500\n\n    Add mouse support\n\ncommit 70c1014900d7f0e6ddaa4d8b4c588870f92bf130\nauthor Jonas Fonseca <fonseca@example.com> 1349059382 -0400\ncommitter Jonas Fonseca <fonseca@example.com> 1349059382 -0400\n\n    Refactor stage view title formatting\n\ncommit c0cb28f11a6be7d5bc5f6c440a07ceb6ca17e99f\nauthor Jonas Fonseca <fonseca@example.com> 1346338047 -0400\ncommitter Jonas Fonseca <fonseca@example.com> 1349054302 -0400\n\n    [GH #83] WIP: main view lazy navigation mode prototype\n\ncommit 1663d66a25ee1672d554e3080284444cc8e5a2de\nauthor P. Sadik <psadik@example.com> 1318486605 +0530\ncommitter Jonas Fonseca <jonas.fonseca@example.com> 1321728051 -0500\n\n    Create and use dup() of STDIN_FILENO instead of STDIN_FILENO itself\n    \n    Otheriwse, issues can pop up, since we close io->pipe in io_done(); and\n    in Pager mode io->pipe = STDIN_FILENO.\n    \n    Signed-off-by: Jonas Fonseca <fonseca@example.com>\n\ncommit 0e324883ecdfcaade6061d518541572c327ae33a\nauthor Jonathan Neuschäfer <j.neuschaefer@example.com> 1284598870 -0400\ncommitter Jonas Fonseca <fonseca@example.com> 1284598870 -0400\n\n    Don't show out-of-sight tildes\n    \n    Signed-off-by: Jonas Fonseca <fonseca@example.com>\n\ncommit 7630a8f859e723186a1e411edd304a90d7b7f439\nauthor Pierre Habouzit <madcoder@example.com> 1277713577 +0200\ncommitter Jonas Fonseca <fonseca@example.com> 1277777826 -0400\n\n    Add an option to ignore unknown directories contents in the status view\n    \n    Similar to git ls-files --directory\n    \n    Signed-off-by: Jonas Fonseca <fonseca@example.com>\n\ncommit 9cb30bba43afa408be71233978a98bd03b468877\nauthor Jonas Fonseca <fonseca@example.com> 1232230221 +0100\ncommitter Jonas Fonseca <fonseca@example.com> 1232230484 +0100\n\n    Fix another regression from the dirty flag changes causing flickering\n    \n    Use redraw_view_from() instead of redraw_view() to avoid excessive calls\n    to wclear().\n\ncommit b5a10859e8011fb0021f7d80f4565c6e587f57c6\nauthor Jonas Fonseca <fonseca@example.com> 1191101008 +0200\ncommitter Jonas Fonseca <fonseca@example.com> 1191101008 +0200\n\n    tig-0.10.git\n\ncommit 2b42e5d686833a9f45020dfeb8148832d0ad30f7\nauthor Jonas Fonseca <fonseca@example.com> 1158013362 +0200\ncommitter Jonas Fonseca <fonseca@example.com> 1158013362 +0200\n\n    Only split the tree view when the tree view is visible\n\ncommit 800a900c3eb2df114a30417537e7f3e9e47d5ad7\nauthor Jonas Fonseca <fonseca@example.com> 1144687141 +0200\ncommitter Jonas Fonseca <fonseca@example.com> 1144687141 +0200\n\n    Initial commit\n"
  },
  {
    "path": "test/main/default-test",
    "content": "#!/bin/sh\n#\n# Test display and options specific to the main view.\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=16\n\ntigrc <<EOF\nset vertical-split = no\nEOF\n\nsteps '\n\t:save-display main-default.screen\n\t:set reference-format = (branch) [tag] @remote\n\t:save-display main-ref-format.screen\n\t:set reference-format = (branch) [tag] hide:remote\n\t:save-display main-remotes-hidden.screen\n\n\t:toggle commit-title-refs\n\t:save-display main-no-refs.screen\n\t:toggle commit-title-graph\n\t:toggle commit-title-graph\n\t:save-display main-no-graph.screen\n\n\t:957f2b368e6fa5c0757f36b1441e32729ee5e9c7\n\t<Enter>\n\t:save-display main-with-diff.screen\n\t<Down>\n\t:save-display main-with-diff-next.screen\n'\n\ngit_clone 'repo-one'\n\ntest_tig\n\nassert_equals 'main-default.screen' <<EOF\n2010-04-07 05:37 +0000 Max Power             o [master] {origin/master} {origin/\n2010-03-29 17:15 +0000 Jørgen Thygesen Brahe o Commit 10 D\n2010-03-21 04:53 +0000 作者                  o Commit 10 C\n2010-03-12 16:31 +0000 René Lévesque         o Commit 10 B\n2010-03-04 04:09 +0000 A. U. Thor            o Commit 10 A\n2010-02-23 15:46 +0000 Max Power             o Commit 9 E\n2010-02-15 03:24 +0000 Jørgen Thygesen Brahe o Commit 9 D\n2010-02-06 15:02 +0000 作者                  o Commit 9 C\n2010-01-29 02:40 +0000 René Lévesque         o Commit 9 B\n2010-01-20 14:18 +0000 A. U. Thor            o Commit 9 A\n2010-01-12 01:56 +0000 Max Power             o Commit 8 E\n2010-01-03 13:33 +0000 Jørgen Thygesen Brahe o Commit 8 D\n2009-12-26 01:11 +0000 作者                  o Commit 8 C\n2009-12-17 12:49 +0000 René Lévesque         o <v1.0> Commit 8 B\n[main] 5cb3412a5e06e506840495b91acc885037a48b72 - commit 1 of 50             28%\nEOF\n\nassert_equals 'main-ref-format.screen' <<EOF\n2010-04-07 05:37 +0000 Max Power             o (master) @origin/master @origin/H\n2010-03-29 17:15 +0000 Jørgen Thygesen Brahe o Commit 10 D\n2010-03-21 04:53 +0000 作者                  o Commit 10 C\n2010-03-12 16:31 +0000 René Lévesque         o Commit 10 B\n2010-03-04 04:09 +0000 A. U. Thor            o Commit 10 A\n2010-02-23 15:46 +0000 Max Power             o Commit 9 E\n2010-02-15 03:24 +0000 Jørgen Thygesen Brahe o Commit 9 D\n2010-02-06 15:02 +0000 作者                  o Commit 9 C\n2010-01-29 02:40 +0000 René Lévesque         o Commit 9 B\n2010-01-20 14:18 +0000 A. U. Thor            o Commit 9 A\n2010-01-12 01:56 +0000 Max Power             o Commit 8 E\n2010-01-03 13:33 +0000 Jørgen Thygesen Brahe o Commit 8 D\n2009-12-26 01:11 +0000 作者                  o Commit 8 C\n2009-12-17 12:49 +0000 René Lévesque         o [v1.0] Commit 8 B\n[main] 5cb3412a5e06e506840495b91acc885037a48b72 - commit 1 of 50             28%\nEOF\n\nassert_equals 'main-remotes-hidden.screen' <<EOF\n2010-04-07 05:37 +0000 Max Power             o (master) Commit 10 E\n2010-03-29 17:15 +0000 Jørgen Thygesen Brahe o Commit 10 D\n2010-03-21 04:53 +0000 作者                  o Commit 10 C\n2010-03-12 16:31 +0000 René Lévesque         o Commit 10 B\n2010-03-04 04:09 +0000 A. U. Thor            o Commit 10 A\n2010-02-23 15:46 +0000 Max Power             o Commit 9 E\n2010-02-15 03:24 +0000 Jørgen Thygesen Brahe o Commit 9 D\n2010-02-06 15:02 +0000 作者                  o Commit 9 C\n2010-01-29 02:40 +0000 René Lévesque         o Commit 9 B\n2010-01-20 14:18 +0000 A. U. Thor            o Commit 9 A\n2010-01-12 01:56 +0000 Max Power             o Commit 8 E\n2010-01-03 13:33 +0000 Jørgen Thygesen Brahe o Commit 8 D\n2009-12-26 01:11 +0000 作者                  o Commit 8 C\n2009-12-17 12:49 +0000 René Lévesque         o [v1.0] Commit 8 B\n[main] 5cb3412a5e06e506840495b91acc885037a48b72 - commit 1 of 50             28%\nEOF\n\nassert_equals 'main-no-refs.screen' <<EOF\n2010-04-07 05:37 +0000 Max Power             o Commit 10 E\n2010-03-29 17:15 +0000 Jørgen Thygesen Brahe o Commit 10 D\n2010-03-21 04:53 +0000 作者                  o Commit 10 C\n2010-03-12 16:31 +0000 René Lévesque         o Commit 10 B\n2010-03-04 04:09 +0000 A. U. Thor            o Commit 10 A\n2010-02-23 15:46 +0000 Max Power             o Commit 9 E\n2010-02-15 03:24 +0000 Jørgen Thygesen Brahe o Commit 9 D\n2010-02-06 15:02 +0000 作者                  o Commit 9 C\n2010-01-29 02:40 +0000 René Lévesque         o Commit 9 B\n2010-01-20 14:18 +0000 A. U. Thor            o Commit 9 A\n2010-01-12 01:56 +0000 Max Power             o Commit 8 E\n2010-01-03 13:33 +0000 Jørgen Thygesen Brahe o Commit 8 D\n2009-12-26 01:11 +0000 作者                  o Commit 8 C\n2009-12-17 12:49 +0000 René Lévesque         o Commit 8 B\n[main] 5cb3412a5e06e506840495b91acc885037a48b72 - commit 1 of 50             28%\nEOF\n\nassert_equals 'main-no-graph.screen' <<EOF\n2010-04-07 05:37 +0000 Max Power             Commit 10 E\n2010-03-29 17:15 +0000 Jørgen Thygesen Brahe Commit 10 D\n2010-03-21 04:53 +0000 作者                  Commit 10 C\n2010-03-12 16:31 +0000 René Lévesque         Commit 10 B\n2010-03-04 04:09 +0000 A. U. Thor            Commit 10 A\n2010-02-23 15:46 +0000 Max Power             Commit 9 E\n2010-02-15 03:24 +0000 Jørgen Thygesen Brahe Commit 9 D\n2010-02-06 15:02 +0000 作者                  Commit 9 C\n2010-01-29 02:40 +0000 René Lévesque         Commit 9 B\n2010-01-20 14:18 +0000 A. U. Thor            Commit 9 A\n2010-01-12 01:56 +0000 Max Power             Commit 8 E\n2010-01-03 13:33 +0000 Jørgen Thygesen Brahe Commit 8 D\n2009-12-26 01:11 +0000 作者                  Commit 8 C\n2009-12-17 12:49 +0000 René Lévesque         Commit 8 B\n[main] 5cb3412a5e06e506840495b91acc885037a48b72 - commit 1 of 50             28%\nEOF\n\nassert_equals 'main-with-diff.screen' <<EOF\n2010-01-12 01:56 +0000 Max Power             Commit 8 E\n2010-01-03 13:33 +0000 Jørgen Thygesen Brahe Commit 8 D\n2009-12-26 01:11 +0000 作者                  Commit 8 C\n2009-12-17 12:49 +0000 René Lévesque         Commit 8 B\n[main] 957f2b368e6fa5c0757f36b1441e32729ee5e9c7 - commit 14 of 50            28%\ncommit 957f2b368e6fa5c0757f36b1441e32729ee5e9c7\nRefs: [v1.0]\nAuthor:     René Lévesque <rene.levesque@example.qc.ca>\nAuthorDate: Thu Dec 17 12:49:30 2009 +0000\nCommit:     Committer <c.ommitter@example.net>\nCommitDate: Thu Dec 17 12:49:30 2009 +0000\n \n    Commit 8 B\n \n[diff] 957f2b368e6fa5c0757f36b1441e32729ee5e9c7 - line 1 of 8               100%\nEOF\n"
  },
  {
    "path": "test/main/emoji-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\ncase \"$(uname -s)\" in CYGWIN*)\n\ttest_skip \"Emojis are not well supported on CYGWIN\"\nesac\n\nexport LINES=10\n\ntigrc <<EOF\nset vertical-split = no\nEOF\n\ntest_setup_work_dir()\n{\n\tgit_commit -m \"🚑 Fix bug\"\n\tgit_commit -m \"🐧 Fix Linux issue\"\n\tgit_commit -m \"✨ Add new feature\"\n\tgit_commit -m \"🎨 Reformat the code\"\n\tgit_commit -m \"📚 Document new feature\"\n\tgit_commit -m \"💄 Polish the UI\"\n\tgit_commit -m \"🌏💧✋🕋🗡🚀🏜☀🌡🌶💯🚱⏳🌅🌑😡💉😱😈💀💥🌛🌙🐭💥🚶🏻〰🐛⌛👳🙏💥😴🛌😳💥🐛💥👊⚔👑 \"\n}\n\ngit_init\n\ntest_case emoji-commit-titles-col-46 \\\n\t--subshell='export COLUMNS=46' \\\n\t<<EOF\n2009-04-06 01:44 +0000 Committer o [master] 🌏\n2009-03-28 13:22 +0000 Committer o 💄 Polish t\n2009-03-20 01:00 +0000 Committer o 📚 Document\n2009-03-11 12:38 +0000 Committer o 🎨 Reformat\n2009-03-03 00:15 +0000 Committer o ✨ Add new\n2009-02-22 11:53 +0000 Committer o 🐧 Fix Linu\n2009-02-13 23:31 +0000 Committer I 🚑 Fix bug\n\n[main] 237d747db3f85d2ae36127ecd0371feb4c 100%\nEOF\n\ntest_case emoji-commit-titles-col-unset \\\n\t--subshell='unset COLUMNS' \\\n\t<<EOF\n2009-04-06 01:44 +0000 Committer o [master] 🌏💧✋🕋🗡🚀🏜☀🌡🌶💯🚱⏳🌅🌑😡💉😱😈💀\n2009-03-28 13:22 +0000 Committer o 💄 Polish the UI\n2009-03-20 01:00 +0000 Committer o 📚 Document new feature\n2009-03-11 12:38 +0000 Committer o 🎨 Reformat the code\n2009-03-03 00:15 +0000 Committer o ✨ Add new feature\n2009-02-22 11:53 +0000 Committer o 🐧 Fix Linux issue\n2009-02-13 23:31 +0000 Committer I 🚑 Fix bug\n\n[main] 237d747db3f85d2ae36127ecd0371feb4ca986e3 - commit 1 of 7             100%\nEOF\n\ntest_case emoji-commit-titles-col-300 \\\n\t--subshell='export COLUMNS=300' \\\n\t<<EOF\n2009-04-06 01:44 +0000 Committer o [master] 🌏💧✋🕋🗡🚀🏜☀🌡🌶💯🚱⏳🌅🌑😡💉😱😈💀💥🌛🌙🐭💥🚶🏻〰🐛⌛👳🙏💥😴🛌😳💥🐛💥👊⚔👑\n2009-03-28 13:22 +0000 Committer o 💄 Polish the UI\n2009-03-20 01:00 +0000 Committer o 📚 Document new feature\n2009-03-11 12:38 +0000 Committer o 🎨 Reformat the code\n2009-03-03 00:15 +0000 Committer o ✨ Add new feature\n2009-02-22 11:53 +0000 Committer o 🐧 Fix Linux issue\n2009-02-13 23:31 +0000 Committer I 🚑 Fix bug\n\n[main] 237d747db3f85d2ae36127ecd0371feb4ca986e3 - commit 1 of 7                                                                                                                                                                                                                                         100%\nEOF\n\nrun_test_cases\n"
  },
  {
    "path": "test/main/escape-control-characters-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=20\nexport COLUMNS=100\n\nsteps ':save-display screen'\n\ntest_tig --pretty=raw < \"$source_dir/$test.in\"\n\nassert_equals 'screen' <<EOF\n2015-08-19 11:12 -0700 a Check GBM_BO_USE_LINEAR correctly v2\n2015-08-19 11:12 -0700 a extend conditional group GBM_BO_USE_LINEAR  over both usages\n2015-08-19 11:12 -0700 a glamor: Deal with glamor_glyphs_init being removed from xserver\n2015-08-19 11:12 -0700 a add some new tonga pci ids\n2015-08-19 11:12 -0700 a add new bonaire pci id\n2015-08-19 11:12 -0700 a Link against libgbm\n2015-08-19 11:12 -0700 a Disable tiling for PRIME shared pixmap\n2015-08-19 11:12 -0700 a Use gbm_bo_get_fd to get DMA_BUF fd\n2015-08-19 11:12 -0700 a ddx: use amdgpu_query_crtc_from_id\n2015-08-19 11:12 -0700 a ddx: remove AMDGPUIsAccelWorking\n2015-08-19 11:12 -0700 a ddx: enable acceleration by default on Hawaii\n2015-08-19 11:12 -0700 a Remove throttling from amdgpu_dri2_copy_region2\n2015-08-19 11:12 -0700 a fixup README\n2015-08-19 11:12 -0700 a Add 10-amdgpu.conf xorg.conf.d snippet\n2015-08-19 11:12 -0700 a Document Option \"AccelMethod\" in the manpage\n2015-08-19 11:12 -0700 a Fix build when gbm.h doesn't define GBM_BO_USE_LINEAR\n2015-08-19 11:12 -0700 a glamor: Handle GLAMOR_* flags removed from xserver\n2015-08-19 11:12 -0700 a Move #include \"radeon_glamor.h\" from amdgpu_drv.h to where it's needed\n[main] 7363156 - commit 1 of 19                                                                  94%\nEOF\n"
  },
  {
    "path": "test/main/filter-args-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\n# git log's --exclude flag was added in git commit e7b432c521b0177e86eaecd2bd16906b9fc53e10\n# and released in version 1.8.5\nrequire_git_version 1.9 \"Requires git log's --exclude flag\"\n\n# This test uses the trace output so do not show trace for this test.\ntrace=\nexport TIG_TRACE=\"$HOME/trace\"\n\ntest_setup_work_dir()\n{\n\tcreate_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\tgit checkout -b feature/x HEAD^\n\tprintf '// Feature X\\n' >> common/build.sbt\n\texport GIT_AUTHOR_DATE=\"1486403695\"\n\texport GIT_COMMITTER_DATE=\"$GIT_AUTHOR_DATE\"\n\tgit commit -a -m \"Feature X\"\n}\n\ntigrc <<EOF\nset main-view-date-use-author = yes\nEOF\n\nsteps '\n\t:save-display filtered.screen\n'\n\ntest_tig --exclude=refs/remotes/origin/* --exclude=refs/heads/master --all -- common tracer\n\ngrep 'git rev-parse' < \"$TIG_TRACE\" > rev-parse.trace\ngrep 'git log' < \"$TIG_TRACE\" > log.trace\n\nassert_equals 'rev-parse.trace' <<EOF\ngit rev-parse --no-revs --no-flags -- common tracer\ngit rev-parse --flags --no-revs -- common tracer\ngit rev-parse --symbolic --revs-only -- common tracer\ngit rev-parse --git-dir --is-inside-work-tree --show-cdup --show-prefix HEAD --symbolic-full-name HEAD\nEOF\n\nassert_equals 'log.trace' <<EOF\ngit log --encoding=UTF-8 --topo-order --exclude=refs/remotes/origin/* --exclude=refs/heads/master --all --date=raw --parents --no-color --show-notes --pretty=format:commit %m %H %P%x00%aN <%aE> %ad%x00%cN <%cE> %cd%x00%s%x00%N%x03 -- common tracer\nEOF\n\nassert_equals 'filtered.screen' <<EOF\n2017-02-06 17:54 +0000 Committer          o [feature/x] Feature X\n2014-03-01 15:59 -0500 Jonas Fonseca      o Add type parameter for js.Dynamic\n2014-01-16 22:51 -0500 Jonas Fonseca      o Move classes under org.scalajs.bench\n2014-01-16 17:39 -0500 Jonas Fonseca      o Integrate app code into the benchmar\n2013-11-26 23:39 -0500 Jonas Fonseca      o Extract the benchmark list variable\n2013-11-26 23:22 -0500 Jonas Fonseca      o Disable phantomjs by default\n2013-11-26 22:52 -0500 Jonas Fonseca      o Fix reference setup to work for node\n2013-11-26 22:03 -0500 Jonas Fonseca      o Move benchmark registration to Scala\n2013-11-05 23:20 -0500 Jonas Fonseca      o Reformat code using Scala IDE\n2013-11-05 20:41 -0500 Jonas Fonseca      o Update exports.js files to use new S\n2013-11-03 23:48 -0500 Jonas Fonseca      o Add support for PhantomJS\n2013-11-03 23:11 -0500 Jonas Fonseca      o Make the engine stubs file optional\n2013-11-03 22:44 -0500 Jonas Fonseca      o Refactor the benchmark shell code\n2013-10-29 18:48 +0100 Sébastien Doeraene o Remove workaround to support Node.js\n2013-10-29 18:46 +0100 Sébastien Doeraene o Update for new groupId and package s\n2013-10-27 23:05 -0400 Jonas Fonseca      o Add JavaScript benchmark reference c\n2013-10-27 18:12 -0400 Jonas Fonseca      o Add check sum calculation for verify\n2013-10-26 12:54 -0400 Jonas Fonseca      o Add Scala.js LICENSE file and a cool\n2013-10-25 20:29 -0400 Jonas Fonseca      o Support node as a JavaScript engine\n2013-10-25 00:34 -0400 Jonas Fonseca      o Run benchmarks for a fixed number of\n2013-10-24 23:44 -0400 Jonas Fonseca      o Rework the benchmark runner and add\n2013-10-18 11:39 +0200 Sébastien Doeraene o Fix the \"./run.sh opt\" invocation.\n2013-10-17 20:29 -0400 Jonas Fonseca      o Simplify render scene loop by using\n2013-10-17 20:27 -0400 Jonas Fonseca      o Make the run shell script infrastruc\n2013-10-14 13:15 -0400 Jonas Fonseca      I Initial import of Tracer benchmark\n \n \n \n[main] 48de84c3432145050fe77bd03555c13e7fdb87b4 - commit 1 of 25            100%\nEOF\n"
  },
  {
    "path": "test/main/git-alias-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=5\n\nbenchmarks_git=\"$output_dir/benchmarks.git\"\nbenchmarks_dir=\"$output_dir/$work_dir\"\n\ntigrc <<EOF\nset line-graphics = ascii\nEOF\n\nsteps '\n\t:save-display main.screen\n'\n\nexecutable alias-vars <<EOF\n{\n\techo \"PWD=\\$(pwd)\"\n\tenv | grep -e '^GIT_DIR=\\|^GIT_PREFIX=\\|^GIT_WORK_TREE='\n} | sed 's,$output_dir,ROOT,' >> \"$output_dir/alias-vars\"\nEOF\n\ntest_setup_work_dir()\n{\n\tmkdir -p \"$output_dir/base\"\n\tcd \"$output_dir/base\"\n\tcreate_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\tgit branch work-branch ee912870202200a0b9cf4fd86ba57243212d341e\n\tgit worktree add \"$output_dir/$work_dir\" work-branch\n\tgit config --global alias.tig !tig\n\tgit config --global alias.alias-vars !alias-vars\n}\n\ntest_exec_work_dir test_setup_work_dir\n\nrunner=git\n\nwork_dir=\"$work_dir/deltablue\"\ntest_tig -- src/main/scala\nin_work_dir git alias-vars\n\nassert_equals 'alias-vars' <<EOF\nPWD=ROOT/work-dir\nGIT_DIR=ROOT/base/.git/worktrees/work-dir\nGIT_PREFIX=deltablue/\nEOF\n\nassert_equals 'main.screen' <<EOF\n2014-03-01 17:26 -0500 Jonas Fonseca * [work-branch] [master] WIP: Upgrade to 0.\n2014-01-16 22:51 -0500 Jonas Fonseca I Move classes under org.scalajs.benchmark\n \n[main] ee912870202200a0b9cf4fd86ba57243212d341e - commit 1 of 2             100%\nEOF\n"
  },
  {
    "path": "test/main/goto-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n. \"$source_dir/util.sh\"\n\nexport LINES=10\n\nsteps '\n\t:3\n\t:save-display unstaged-changes.screen\n\t:parent\n\t:save-display commit-3.screen\n\t:goto conflict-branch\n\t:save-display commit-1.screen\n\t:parent\n\t:save-display commit-2.screen\n\t:back\n\t:save-display commit-1-back.screen\n\t:parent\n\t:save-display commit-2-again.screen\n\t:parent\n\t:save-display commit-5.screen\n\t:parent\n\t:save-display commit-5-still.screen\n'\n\ntigrc <<EOF\nset line-graphics = ascii\nEOF\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\nin_work_dir setup-conflict.sh > repo.log 2>&1\n\ntest_tig --merge\n\nassert_equals 'commit-1.screen' <<EOF\n2009-03-28 13:22 +0000 Committer         * [conflict-branch] Change: d'\n2009-03-20 01:00 +0000 Committer         * Change: d\n2014-05-25 19:42 +0000 Not Committed Yet | * Unstaged changes\n2009-03-11 12:38 +0000 Committer         | * [conflict-master] Change: c'\n2009-03-03 00:15 +0000 Committer         | * Change: c\n2009-02-22 11:53 +0000 Committer         o-' [master] Change: b\n \n \n[main] 9d2a1bbf0046ec6b5e7a6faebb9ba9374bdbdee7 - commit 1 of 5             100%\nEOF\n\nassert_equals 'commit-1-back.screen' <<EOF\n2009-03-28 13:22 +0000 Committer         * [conflict-branch] Change: d'\n2009-03-20 01:00 +0000 Committer         * Change: d\n2014-05-25 19:42 +0000 Not Committed Yet | * Unstaged changes\n2009-03-11 12:38 +0000 Committer         | * [conflict-master] Change: c'\n2009-03-03 00:15 +0000 Committer         | * Change: c\n2009-02-22 11:53 +0000 Committer         o-' [master] Change: b\n \n \n[main] 9d2a1bbf0046ec6b5e7a6faebb9ba9374bdbdee7 - commit 1 of 5             100%\nEOF\n\nassert_equals 'commit-2.screen' <<EOF\n2009-03-28 13:22 +0000 Committer         * [conflict-branch] Change: d'\n2009-03-20 01:00 +0000 Committer         * Change: d\n2014-05-25 19:42 +0000 Not Committed Yet | * Unstaged changes\n2009-03-11 12:38 +0000 Committer         | * [conflict-master] Change: c'\n2009-03-03 00:15 +0000 Committer         | * Change: c\n2009-02-22 11:53 +0000 Committer         o-' [master] Change: b\n \n \n[main] fa878e5e6d838243fa59025ef314395fbebc790f - commit 2 of 5             100%\nEOF\n\nassert_equals 'commit-2-again.screen' <<EOF\n2009-03-28 13:22 +0000 Committer         * [conflict-branch] Change: d'\n2009-03-20 01:00 +0000 Committer         * Change: d\n2014-05-25 19:42 +0000 Not Committed Yet | * Unstaged changes\n2009-03-11 12:38 +0000 Committer         | * [conflict-master] Change: c'\n2009-03-03 00:15 +0000 Committer         | * Change: c\n2009-02-22 11:53 +0000 Committer         o-' [master] Change: b\n \n \n[main] fa878e5e6d838243fa59025ef314395fbebc790f - commit 2 of 5             100%\nEOF\n\nassert_equals 'commit-5.screen' <<EOF\n2009-03-28 13:22 +0000 Committer         * [conflict-branch] Change: d'\n2009-03-20 01:00 +0000 Committer         * Change: d\n2014-05-25 19:42 +0000 Not Committed Yet | * Unstaged changes\n2009-03-11 12:38 +0000 Committer         | * [conflict-master] Change: c'\n2009-03-03 00:15 +0000 Committer         | * Change: c\n2009-02-22 11:53 +0000 Committer         o-' [master] Change: b\n \n \n[main] 74e56ba07b2ab229b9da9f87f586e880c1300854 - commit 5 of 5             100%\nEOF\n\nassert_equals 'commit-5-still.screen' <<EOF\n2009-03-28 13:22 +0000 Committer         * [conflict-branch] Change: d'\n2009-03-20 01:00 +0000 Committer         * Change: d\n2014-05-25 19:42 +0000 Not Committed Yet | * Unstaged changes\n2009-03-11 12:38 +0000 Committer         | * [conflict-master] Change: c'\n2009-03-03 00:15 +0000 Committer         | * Change: c\n2009-02-22 11:53 +0000 Committer         o-' [master] Change: b\n \n \n[main] 74e56ba07b2ab229b9da9f87f586e880c1300854 - commit 5 of 5             100%\nEOF\n\nassert_equals 'unstaged-changes.screen' <<EOF\n2009-03-28 13:22 +0000 Committer         * [conflict-branch] Change: d'\n2009-03-20 01:00 +0000 Committer         * Change: d\n2014-05-25 19:42 +0000 Not Committed Yet | * Unstaged changes\n2009-03-11 12:38 +0000 Committer         | * [conflict-master] Change: c'\n2009-03-03 00:15 +0000 Committer         | * Change: c\n2009-02-22 11:53 +0000 Committer         o-' [master] Change: b\n \n \n[main] Unstaged changes                                                     100%\nEOF\n\nassert_equals 'commit-3.screen' <<EOF\n2009-03-28 13:22 +0000 Committer         * [conflict-branch] Change: d'\n2009-03-20 01:00 +0000 Committer         * Change: d\n2014-05-25 19:42 +0000 Not Committed Yet | * Unstaged changes\n2009-03-11 12:38 +0000 Committer         | * [conflict-master] Change: c'\n2009-03-03 00:15 +0000 Committer         | * Change: c\n2009-02-22 11:53 +0000 Committer         o-' [master] Change: b\n \n \n[main] 42f17bb0393458bc27b5f512022aabb15d3935fd - commit 3 of 5             100%\nEOF\n"
  },
  {
    "path": "test/main/graph-argument-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=16\n\ntouch stderr\n\ntigrc <<EOF\nset line-graphics = utf-8\nset main-view\t= date:default,use-author=yes author:abbreviated commit-title:yes,graph,refs=no,overflow=no\nEOF\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\ntest_tig_script() {\n\tname=\"$1\"; shift\n\n\ttig_script \"$name\" \"\n\t\t:view-main\n\t\t:save-display $name.screen\n\t\"\n\n\tcat > \"$name.expected\"\n\n\ttest_tig \"$@\"\n\n\tassert_equals \"$name.screen\" < \"$name.expected\"\n\tassert_equals \"$name.stderr\" <<-EOF\n\tEOF\n}\n\ntest_tig_script 'follow' --follow project/Build.scala <<EOF\n2014-03-01 17:26 -0500 JFonseca  WIP: Upgrade to 0.4-SNAPSHOT and DCE\n2013-11-26 20:13 -0500 JFonseca  Rename projects to be grouped together in Eclip\n2013-11-11 01:11 -0500 JFonseca  Add initial version of sudoku benchmark\n2013-10-29 18:46 +0100 SDoeraene Update for new groupId and package structure of\n2013-10-18 18:00 -0400 JFonseca  Add DeltaBlue benchmark\n2013-10-17 20:34 -0400 JFonseca  Add Richards benchmark\n2013-10-17 20:25 -0400 JFonseca  Simplify creation of new benchmark projects\n2013-10-14 13:15 -0400 JFonseca  Initial import of Tracer benchmark\n \n \n \n \n \n \n[main] ee912870202200a0b9cf4fd86ba57243212d341e - commit 1 of 8             100%\nEOF\n\ntest_tig_script 'first-parent' --first-parent <<EOF\n2014-03-01 17:26 -0500 JFonseca ∙ WIP: Upgrade to 0.4-SNAPSHOT and DCE\n2014-03-01 15:59 -0500 JFonseca ∙ Add type parameter for js.Dynamic\n2014-01-16 22:51 -0500 JFonseca ∙ Move classes under org.scalajs.benchmark packa\n2014-01-16 17:43 -0500 JFonseca ∙ Bump Scala.js version to 0.3-SNAPSHOT\n2014-01-16 17:39 -0500 JFonseca ∙ Integrate app code into the benchmark infrastr\n2014-01-16 07:47 -0800 JFonseca ∙ Merge pull request #4 from phaller/patch-1\n2013-12-17 00:02 +0100 JFonseca ∙ Update links to reflect project name change\n2013-12-03 23:35 -0500 JFonseca ∙ Use Scala.js 0.2-SNAPSHOT\n2013-11-26 23:39 -0500 JFonseca ∙ Extract the benchmark list variable name; fix\n2013-11-26 23:31 -0500 JFonseca ∙ Solve the easiest sudoku grid\n2013-11-26 23:22 -0500 JFonseca ∙ Disable phantomjs by default\n2013-11-26 22:55 -0500 JFonseca ∙ Exclude Sudoku when running all benchmarks\n2013-11-26 22:52 -0500 JFonseca ∙ Fix reference setup to work for node\n2013-11-26 22:03 -0500 JFonseca ∙ Move benchmark registration to Scala\n[main] ee912870202200a0b9cf4fd86ba57243212d341e - commit 1 of 44             31%\nEOF\n"
  },
  {
    "path": "test/main/jump-ends-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=5\n\nfirst_line_content=\\\n'2014-03-01 17:26 -0500 Jonas Fonseca      o [master] WIP: Upgrade to 0.4-SNAPSHO\n2014-03-01 15:59 -0500 Jonas Fonseca      o Add type parameter for js.Dynamic\n2014-01-16 22:51 -0500 Jonas Fonseca      o Move classes under org.scalajs.bench\n[main] ee912870202200a0b9cf4fd86ba57243212d341e - commit 1 of 48              6%'\n\nlast_line_content=\\\n'2013-10-14 16:09 -0400 Jonas Fonseca      o Move description of the optimizeJS w\n2013-10-14 13:15 -0400 Jonas Fonseca      I Initial import of Tracer benchmark\n \n[main] 90286e0752016a6bca30dfa7ca236d1f99345eb8 - commit 48 of 48           100%'\n\ntigrc <<EOF\nset main-view-date-use-author = yes\nEOF\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\ntest_case main-goto-1 \\\n\t--script='\n\t\t:1\n\t' \\\n\t<<EOF\n$first_line_content\nEOF\n\ntest_case main-goto-max \\\n\t--script='\n\t\t:48\n\t' \\\n\t<<EOF\n$last_line_content\nEOF\n\ntest_case main-goto-max-plus-1 \\\n\t--script='\n\t\t:49\n\t' \\\n\t<<EOF\n$first_line_content\nEOF\n\ntest_case main-goto-max-plus-2 \\\n\t--script='\n\t\t:50\n\t' \\\n\t<<EOF\n$first_line_content\nEOF\n\nrun_test_cases\n"
  },
  {
    "path": "test/main/mailmap-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=15\n\ngit_clone 'repo-one'\n\ncat >\"$work_dir/.mailmap\" <<EOF\nThoreau <thoreau@example.com> A. U. Thor <a.u.thor@example.com>\"\nTi-Poil <t.poil@example.qc.ca> René Lévesque <rene.levesque@example.qc.ca>\"\n龙 <dragon@example.ch> 作者 <zuozhea@example.ch>\"\nStargazer <stargazer@example.dk> Jørgen Thygesen Brahe <brache@example.dk>\"\nFull Throttle <f.throttle@example.org> Max Power <power123@example.org>\"\n¯\\_(ツ)_/¯ <omitter@example.net> Committer <c.ommitter@example.net>\nEOF\n\ntigrc <<EOF\nset show-untracked = no\nset mailmap = yes\n# set diff-options = --use-mailmap\n# set main-options = --use-mailmap\nEOF\n\nsteps '\n\t:save-display mailmapped.screen\n\t:view-diff\n\t:save-display mailmapped-diff.screen\n'\n\ntest_tig\n\nassert_equals 'mailmapped.screen' <<EOF\n2010-04-07 05:37 +0000 Full Throttle o [master] {origin/master} {origin/HEAD} Co\n2010-03-29 17:15 +0000 Stargazer     o Commit 10 D\n2010-03-21 04:53 +0000 龙            o Commit 10 C\n2010-03-12 16:31 +0000 Ti-Poil       o Commit 10 B\n2010-03-04 04:09 +0000 Thoreau       o Commit 10 A\n2010-02-23 15:46 +0000 Full Throttle o Commit 9 E\n2010-02-15 03:24 +0000 Stargazer     o Commit 9 D\n2010-02-06 15:02 +0000 龙            o Commit 9 C\n2010-01-29 02:40 +0000 Ti-Poil       o Commit 9 B\n2010-01-20 14:18 +0000 Thoreau       o Commit 9 A\n2010-01-12 01:56 +0000 Full Throttle o Commit 8 E\n2010-01-03 13:33 +0000 Stargazer     o Commit 8 D\n2009-12-26 01:11 +0000 龙            o Commit 8 C\n[main] 5cb3412a5e06e506840495b91acc885037a48b72 - commit 1 of 50             26%\nEOF\n\nassert_equals 'mailmapped-diff.screen' <<EOF\ncommit 5cb3412a5e06e506840495b91acc885037a48b72\nRefs: [master], {origin/master}, {origin/HEAD}, v1.0-13-g5cb3412\nAuthor:     Full Throttle <f.throttle@example.org>\nAuthorDate: Wed Apr 7 05:37:40 2010 +0000\nCommit:     ¯\\_(ツ)_/¯ <omitter@example.net>\nCommitDate: Wed Apr 7 05:37:40 2010 +0000\n \n    Commit 10 E\n \n \n \n \n \n[diff] 5cb3412a5e06e506840495b91acc885037a48b72 - line 1 of 8               100%\nEOF\n"
  },
  {
    "path": "test/main/main-options-test",
    "content": "#!/bin/sh\n#\n# Test display and options specific to the main view.\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=16\n\ntigrc <<EOF\nset main-options = -n 10\nEOF\n\nsteps '\n\t:save-display with-10-lines.screen\n'\n\ngit_clone 'repo-one'\n\ntest_tig\n\nassert_equals 'with-10-lines.screen' <<EOF\n2010-04-07 05:37 +0000 Max Power             o [master] {origin/master} {origin/\n2010-03-29 17:15 +0000 Jørgen Thygesen Brahe o Commit 10 D\n2010-03-21 04:53 +0000 作者                  o Commit 10 C\n2010-03-12 16:31 +0000 René Lévesque         o Commit 10 B\n2010-03-04 04:09 +0000 A. U. Thor            o Commit 10 A\n2010-02-23 15:46 +0000 Max Power             o Commit 9 E\n2010-02-15 03:24 +0000 Jørgen Thygesen Brahe o Commit 9 D\n2010-02-06 15:02 +0000 作者                  o Commit 9 C\n2010-01-29 02:40 +0000 René Lévesque         o Commit 9 B\n2010-01-20 14:18 +0000 A. U. Thor            o Commit 9 A\n \n \n \n \n[main] 5cb3412a5e06e506840495b91acc885037a48b72 - commit 1 of 10            100%\nEOF\n"
  },
  {
    "path": "test/main/merge-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n. \"$source_dir/util.sh\"\n\nexport LINES=10\n\nsteps '\n\t:save-display main-with-conflict.screen\n'\n\ntigrc <<EOF\nset vertical-split = no\nset line-graphics = ascii\nEOF\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\nin_work_dir setup-conflict.sh > repo.log 2>&1\n\ntest_tig --merge\n\nassert_equals 'main-with-conflict.screen' <<EOF\n2009-03-28 13:22 +0000 Committer         * [conflict-branch] Change: d'\n2009-03-20 01:00 +0000 Committer         * Change: d\n$YYY_MM_DD_HH_MM +0000 Not Committed Yet | * Unstaged changes\n2009-03-11 12:38 +0000 Committer         | * [conflict-master] Change: c'\n2009-03-03 00:15 +0000 Committer         | * Change: c\n2009-02-22 11:53 +0000 Committer         o-' [master] Change: b\n \n \n[main] 9d2a1bbf0046ec6b5e7a6faebb9ba9374bdbdee7 - commit 1 of 5             100%\nEOF\n"
  },
  {
    "path": "test/main/no-matching-commmits-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=5\nexpected_status_code=1\n\nsteps '\n\t:save-display tig-did-not-exit-as-expected\n'\n\nin_work_dir create_dirty_workdir\n\nexport GIT_AUTHOR_DATE=\"$(expr \"$author_date\" + \"$author_date_delta\")\"\nexport GIT_COMMITTER_DATE=\"$GIT_AUTHOR_DATE\"\n\n\ntest_tig some-ref-that-does-not-exist\n\nassert_equals stderr <<EOF\ntig: No revisions match the given arguments.\nEOF\n\nassert_not_exists 'tig-did-not-exit-as-expected'\n"
  },
  {
    "path": "test/main/no-merges-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=16\n\ntigrc <<EOF\nset main-view-date-use-author = yes\nEOF\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\nsteps '\n\t:save-display no-merges.screen\n'\n\n\ntest_tig --no-merges\n\nassert_equals 'no-merges.screen' <<EOF\n2014-03-01 17:26 -0500 Jonas Fonseca      [master] WIP: Upgrade to 0.4-SNAPSHOT\n2014-03-01 15:59 -0500 Jonas Fonseca      Add type parameter for js.Dynamic\n2014-01-16 22:51 -0500 Jonas Fonseca      Move classes under org.scalajs.benchma\n2014-01-16 17:43 -0500 Jonas Fonseca      Bump Scala.js version to 0.3-SNAPSHOT\n2014-01-16 17:39 -0500 Jonas Fonseca      Integrate app code into the benchmark\n2014-01-16 15:32 +0100 Philipp Haller     Fix link to Dart benchmark harness\n2013-12-17 00:02 +0100 Jonas Fonseca      Update links to reflect project name c\n2013-12-03 23:35 -0500 Jonas Fonseca      Use Scala.js 0.2-SNAPSHOT\n2013-11-26 23:39 -0500 Jonas Fonseca      Extract the benchmark list variable na\n2013-11-26 23:31 -0500 Jonas Fonseca      Solve the easiest sudoku grid\n2013-11-26 23:22 -0500 Jonas Fonseca      Disable phantomjs by default\n2013-11-26 22:55 -0500 Jonas Fonseca      Exclude Sudoku when running all benchm\n2013-11-26 22:52 -0500 Jonas Fonseca      Fix reference setup to work for node\n2013-11-26 22:03 -0500 Jonas Fonseca      Move benchmark registration to Scala\n[main] ee912870202200a0b9cf4fd86ba57243212d341e - commit 1 of 45             31%\nEOF\n"
  },
  {
    "path": "test/main/pretty-raw-test",
    "content": "#!/bin/sh\n#\n# Read --pretty=raw output from stdin.\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=16\n\ngit_clone 'repo-one'\n\nsteps '\n\t:save-display main-pretty-raw.screen\n'\n\nstdin <<EOF\n$(in_work_dir git log --pretty=raw --author=brache)\nEOF\n\ntest_tig --pretty=raw\n\nassert_equals 'main-pretty-raw.screen' <<EOF\n2010-03-29 17:15 +0000 Jørgen Thygesen Brahe Commit 10 D\n2010-02-15 03:24 +0000 Jørgen Thygesen Brahe Commit 9 D\n2010-01-03 13:33 +0000 Jørgen Thygesen Brahe Commit 8 D\n2009-11-21 23:43 +0000 Jørgen Thygesen Brahe Commit 7 D\n2009-10-10 09:52 +0000 Jørgen Thygesen Brahe Commit 6 D\n2009-08-28 20:01 +0000 Jørgen Thygesen Brahe Commit 5 D\n2009-07-17 06:10 +0000 Jørgen Thygesen Brahe Commit 4 D\n2009-06-04 16:19 +0000 Jørgen Thygesen Brahe Commit 3 D\n2009-04-23 02:28 +0000 Jørgen Thygesen Brahe Commit 2 D\n2009-03-11 12:38 +0000 Jørgen Thygesen Brahe Commit 1 D\n \n \n \n \n[main] 2843bfd58b98c7e23ab91e51ffa4db4f8e27c9a4 - commit 1 of 10            100%\nEOF\n"
  },
  {
    "path": "test/main/refresh-periodic-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n. \"$source_dir/util.sh\"\n\nexport LINES=5\n\nsteps '\n\t:save-display main-with-unstaged.screen\n\n\t:exec @git add a\n\t:save-display main-after-add-a.screen\n\n\t:exec @git commit -m \"Commit changes\"\n\t:save-display main-after-commit.screen\n\n\t:exec @git add b.c\n\t:exec @git commit -m \"Another change: hello\"\n\t:exec @sleep 2\n\t:save-display main-after-commiting-change-and-sleeping-hello.screen\n\n\t:exec @git add i.o\n\t:exec @git commit -am \"Another change: world\"\n\t:exec @sleep 2\n\t:save-display main-after-commiting-change-and-sleeping-world.screen\n'\n\ntigrc <<EOF\nset refresh-mode = periodic\nset refresh-interval = 1\nEOF\n\nin_work_dir create_dirty_workdir\n\nexport GIT_AUTHOR_DATE=\"$(expr \"$author_date\" + \"$author_date_delta\")\"\nexport GIT_COMMITTER_DATE=\"$GIT_AUTHOR_DATE\"\n\ntest_timeout 30\n\ntest_tig\n\nassert_equals 'main-with-unstaged.screen' <<EOF\n$YYY_MM_DD_HH_MM +0000 Not Committed Yet o Unstaged changes\n2009-02-13 23:31 +0000 A. U. Thor        I [master] Initial commit\n \n[main] Unstaged changes                                                     100%\nEOF\n\nassert_equals 'main-after-add-a.screen' <<EOF\n$YYY_MM_DD_HH_MM +0000 Not Committed Yet o Unstaged changes\n$YYY_MM_DD_HH_MM +0000 Not Committed Yet o Staged changes\n2009-02-13 23:31 +0000 A. U. Thor        I [master] Initial commit\n[main] Unstaged changes                                                     100%\nEOF\n\nassert_equals 'main-after-commit.screen' <<EOF\n$YYY_MM_DD_HH_MM +0000 Not Committed Yet o Unstaged changes\n2009-02-22 11:53 +0000 Committer         o [master] Commit changes\n2009-02-13 23:31 +0000 A. U. Thor        I Initial commit\n[main] Unstaged changes                                                     100%\nEOF\n\nassert_equals 'main-after-commiting-change-and-sleeping-hello.screen' <<EOF\n$YYY_MM_DD_HH_MM +0000 Not Committed Yet o Unstaged changes\n2009-02-22 11:53 +0000 Committer         o [master] Another change: hello\n2009-02-22 11:53 +0000 Committer         o Commit changes\n[main] Unstaged changes                                                      75%\nEOF\n\nassert_equals 'main-after-commiting-change-and-sleeping-world.screen' <<EOF\n2009-02-22 11:53 +0000 Committer  o [master] Another change: world\n2009-02-22 11:53 +0000 Committer  o Another change: hello\n2009-02-22 11:53 +0000 Committer  o Commit changes\n[main] 70bab5b220d2fd9bf61c125d52d59e10e93ec341 - commit 1 of 4              75%\nEOF\n"
  },
  {
    "path": "test/main/refresh-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n. \"$source_dir/util.sh\"\n\nexport LINES=5\n\nsteps '\n\t:save-display main-with-unstaged.screen\n\n\t:exec @git add a\n\t:save-display main-after-add-a.screen\n\n\t:exec @git add -u\n\t:save-display main-after-add-all.screen\n\n\t:exec @git commit -m \"Commit changes\"\n\t:save-display main-after-commit.screen\n\n\t:exec @git reset --soft HEAD^\n\t:save-display main-after-reset-soft.screen\n\n\t:exec @git reset a b.c\n\t:save-display main-after-reset-a-and-bc.screen\n\n\t:exec @git reset --hard\n\t:save-display main-after-reset-hard.screen\n'\n\ntigrc <<EOF\nset refresh-mode = after-command\nEOF\n\nin_work_dir create_dirty_workdir\n\nexport GIT_AUTHOR_DATE=\"$(expr \"$author_date\" + \"$author_date_delta\")\"\nexport GIT_COMMITTER_DATE=\"$GIT_AUTHOR_DATE\"\n\ntest_tig\n\nassert_equals 'main-with-unstaged.screen' <<EOF\n$YYY_MM_DD_HH_MM +0000 Not Committed Yet o Unstaged changes\n2009-02-13 23:31 +0000 A. U. Thor I [master] Initial commit\n\n[main] Unstaged changes                                                     100%\nEOF\n\nassert_equals 'main-after-add-a.screen' <<EOF\n$YYY_MM_DD_HH_MM +0000 Not Committed Yet o Unstaged changes\n$YYY_MM_DD_HH_MM +0000 Not Committed Yet o Staged changes\n2009-02-13 23:31 +0000 A. U. Thor I [master] Initial commit\n[main] Unstaged changes                                                     100%\nEOF\n\nassert_equals 'main-after-add-all.screen' <<EOF\n$YYY_MM_DD_HH_MM +0000 Not Committed Yet o Staged changes\n2009-02-13 23:31 +0000 A. U. Thor I [master] Initial commit\n\n[main] Staged changes                                                       100%\nEOF\n\nassert_equals 'main-after-commit.screen' <<EOF\n2009-02-22 11:53 +0000 Committer  o [master] Commit changes\n2009-02-13 23:31 +0000 A. U. Thor I Initial commit\n\n[main] 559565d219fd061c3cec4f2071025374533bdfc6 - commit 1 of 2             100%\nEOF\n\nassert_equals 'main-after-reset-soft.screen' <<EOF\n$YYY_MM_DD_HH_MM +0000 Not Committed Yet o Staged changes\n2009-02-13 23:31 +0000 A. U. Thor I [master] Initial commit\n\n[main] Staged changes                                                       100%\nEOF\n\nassert_equals 'main-after-reset-a-and-bc.screen' <<EOF\n$YYY_MM_DD_HH_MM +0000 Not Committed Yet o Unstaged changes\n$YYY_MM_DD_HH_MM +0000 Not Committed Yet o Staged changes\n2009-02-13 23:31 +0000 A. U. Thor I [master] Initial commit\n[main] Unstaged changes                                                     100%\nEOF\n\nassert_equals 'main-after-reset-hard.screen' <<EOF\n2009-02-13 23:31 +0000 A. U. Thor I [master] Initial commit\n\n\n[main] ca34b8bb5a0034fc5b5ab9840f74cae1fab2c3a9 - commit 1 of 1             100%\nEOF\n"
  },
  {
    "path": "test/main/search-preload-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=3\nexport COLUMNS=80\n\ntest_require readline\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\ntigrc <<EOF\nset line-graphics = ascii\nEOF\n\n# Force .tig_history since the final entry isn't guaranteed under the test harness.\nfile .tig_history <<EOF\nMerge pull request #1 from sjrd/patch-1\nEOF\n\nsteps '\n\t:find-next\n\t:save-display main.screen\n'\n\ntest_tig\n\nassert_equals main.screen <<EOF\n2013-10-18 07:00 -0700 Jonas Fonseca      M-. Merge pull request #1 from sjrd/pa\n[main] 0b89f7997f696a7f6ae4c10e3b29817862e751d6 - commit 39 of 48            81%\nEOF\n\nassert_equals stderr <<EOF\nEOF\n"
  },
  {
    "path": "test/main/search-test",
    "content": "#!/bin/sh\n#\n# Test searching in the main view.\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=16\n\nsteps '\n\t/作者<Enter>\n\t:save-display main-search-author.screen\n\t/<Enter>\n\t:save-display main-search-author-empty.screen\n\t:find-next\n\t:save-display main-search-author-find-next.screen\n\t:0\n\t/9 B<Enter>\n\t:save-display main-search-title.screen\n\t:find-next\n\t:save-display main-search-title-no-match.screen\n\t:0\n\t/v1.0<Enter>\n\t:save-display main-search-refs.screen\n\t:0\n\t/13:33<Enter>\n\t:save-display main-search-time.screen\n\t:0\n\t:set ignore-case = smart-case\n\t/thor<Enter>\n\t:save-display main-search-smart-case.screen\n\t:0\n'\n\ngit_clone 'repo-one'\n\ntest_tig\n\nassert_equals 'main-search-author.screen' <<EOF\n2010-04-07 05:37 +0000 Max Power             o [master] {origin/master} {origin/\n2010-03-29 17:15 +0000 Jørgen Thygesen Brahe o Commit 10 D\n2010-03-21 04:53 +0000 作者                  o Commit 10 C\n2010-03-12 16:31 +0000 René Lévesque         o Commit 10 B\n2010-03-04 04:09 +0000 A. U. Thor            o Commit 10 A\n2010-02-23 15:46 +0000 Max Power             o Commit 9 E\n2010-02-15 03:24 +0000 Jørgen Thygesen Brahe o Commit 9 D\n2010-02-06 15:02 +0000 作者                  o Commit 9 C\n2010-01-29 02:40 +0000 René Lévesque         o Commit 9 B\n2010-01-20 14:18 +0000 A. U. Thor            o Commit 9 A\n2010-01-12 01:56 +0000 Max Power             o Commit 8 E\n2010-01-03 13:33 +0000 Jørgen Thygesen Brahe o Commit 8 D\n2009-12-26 01:11 +0000 作者                  o Commit 8 C\n2009-12-17 12:49 +0000 René Lévesque         o <v1.0> Commit 8 B\n[main] 8d53d6a41f8540749c0db5d0b53e48d2f178dce4 - commit 3 of 50             28%\nEOF\n\nassert_equals 'main-search-author-empty.screen' <<EOF\n2010-04-07 05:37 +0000 Max Power             o [master] {origin/master} {origin/\n2010-03-29 17:15 +0000 Jørgen Thygesen Brahe o Commit 10 D\n2010-03-21 04:53 +0000 作者                  o Commit 10 C\n2010-03-12 16:31 +0000 René Lévesque         o Commit 10 B\n2010-03-04 04:09 +0000 A. U. Thor            o Commit 10 A\n2010-02-23 15:46 +0000 Max Power             o Commit 9 E\n2010-02-15 03:24 +0000 Jørgen Thygesen Brahe o Commit 9 D\n2010-02-06 15:02 +0000 作者                  o Commit 9 C\n2010-01-29 02:40 +0000 René Lévesque         o Commit 9 B\n2010-01-20 14:18 +0000 A. U. Thor            o Commit 9 A\n2010-01-12 01:56 +0000 Max Power             o Commit 8 E\n2010-01-03 13:33 +0000 Jørgen Thygesen Brahe o Commit 8 D\n2009-12-26 01:11 +0000 作者                  o Commit 8 C\n2009-12-17 12:49 +0000 René Lévesque         o <v1.0> Commit 8 B\n[main] 711615619913109be8fd85f2c378839acaa6db11 - commit 8 of 50             28%\nEOF\n\nassert_equals 'main-search-author-find-next.screen' <<EOF\n2010-04-07 05:37 +0000 Max Power             o [master] {origin/master} {origin/\n2010-03-29 17:15 +0000 Jørgen Thygesen Brahe o Commit 10 D\n2010-03-21 04:53 +0000 作者                  o Commit 10 C\n2010-03-12 16:31 +0000 René Lévesque         o Commit 10 B\n2010-03-04 04:09 +0000 A. U. Thor            o Commit 10 A\n2010-02-23 15:46 +0000 Max Power             o Commit 9 E\n2010-02-15 03:24 +0000 Jørgen Thygesen Brahe o Commit 9 D\n2010-02-06 15:02 +0000 作者                  o Commit 9 C\n2010-01-29 02:40 +0000 René Lévesque         o Commit 9 B\n2010-01-20 14:18 +0000 A. U. Thor            o Commit 9 A\n2010-01-12 01:56 +0000 Max Power             o Commit 8 E\n2010-01-03 13:33 +0000 Jørgen Thygesen Brahe o Commit 8 D\n2009-12-26 01:11 +0000 作者                  o Commit 8 C\n2009-12-17 12:49 +0000 René Lévesque         o <v1.0> Commit 8 B\n[main] b45b5704c34dbd4c5fd89d58d45238ad136ae166 - commit 13 of 50            28%\nEOF\n\nassert_equals 'main-search-title.screen' <<EOF\n2010-04-07 05:37 +0000 Max Power             o [master] {origin/master} {origin/\n2010-03-29 17:15 +0000 Jørgen Thygesen Brahe o Commit 10 D\n2010-03-21 04:53 +0000 作者                  o Commit 10 C\n2010-03-12 16:31 +0000 René Lévesque         o Commit 10 B\n2010-03-04 04:09 +0000 A. U. Thor            o Commit 10 A\n2010-02-23 15:46 +0000 Max Power             o Commit 9 E\n2010-02-15 03:24 +0000 Jørgen Thygesen Brahe o Commit 9 D\n2010-02-06 15:02 +0000 作者                  o Commit 9 C\n2010-01-29 02:40 +0000 René Lévesque         o Commit 9 B\n2010-01-20 14:18 +0000 A. U. Thor            o Commit 9 A\n2010-01-12 01:56 +0000 Max Power             o Commit 8 E\n2010-01-03 13:33 +0000 Jørgen Thygesen Brahe o Commit 8 D\n2009-12-26 01:11 +0000 作者                  o Commit 8 C\n2009-12-17 12:49 +0000 René Lévesque         o <v1.0> Commit 8 B\n[main] 99278700109ac9fe4a80bbc1e5b26769e3614f1b - commit 9 of 50             28%\nEOF\n\nassert_equals 'main-search-title-no-match.screen' <<EOF\n2010-04-07 05:37 +0000 Max Power             o [master] {origin/master} {origin/\n2010-03-29 17:15 +0000 Jørgen Thygesen Brahe o Commit 10 D\n2010-03-21 04:53 +0000 作者                  o Commit 10 C\n2010-03-12 16:31 +0000 René Lévesque         o Commit 10 B\n2010-03-04 04:09 +0000 A. U. Thor            o Commit 10 A\n2010-02-23 15:46 +0000 Max Power             o Commit 9 E\n2010-02-15 03:24 +0000 Jørgen Thygesen Brahe o Commit 9 D\n2010-02-06 15:02 +0000 作者                  o Commit 9 C\n2010-01-29 02:40 +0000 René Lévesque         o Commit 9 B\n2010-01-20 14:18 +0000 A. U. Thor            o Commit 9 A\n2010-01-12 01:56 +0000 Max Power             o Commit 8 E\n2010-01-03 13:33 +0000 Jørgen Thygesen Brahe o Commit 8 D\n2009-12-26 01:11 +0000 作者                  o Commit 8 C\n2009-12-17 12:49 +0000 René Lévesque         o <v1.0> Commit 8 B\n[main] 99278700109ac9fe4a80bbc1e5b26769e3614f1b - commit 9 of 50             28%\nEOF\n\nassert_equals 'main-search-refs.screen' <<EOF\n2010-04-07 05:37 +0000 Max Power             o [master] {origin/master} {origin/\n2010-03-29 17:15 +0000 Jørgen Thygesen Brahe o Commit 10 D\n2010-03-21 04:53 +0000 作者                  o Commit 10 C\n2010-03-12 16:31 +0000 René Lévesque         o Commit 10 B\n2010-03-04 04:09 +0000 A. U. Thor            o Commit 10 A\n2010-02-23 15:46 +0000 Max Power             o Commit 9 E\n2010-02-15 03:24 +0000 Jørgen Thygesen Brahe o Commit 9 D\n2010-02-06 15:02 +0000 作者                  o Commit 9 C\n2010-01-29 02:40 +0000 René Lévesque         o Commit 9 B\n2010-01-20 14:18 +0000 A. U. Thor            o Commit 9 A\n2010-01-12 01:56 +0000 Max Power             o Commit 8 E\n2010-01-03 13:33 +0000 Jørgen Thygesen Brahe o Commit 8 D\n2009-12-26 01:11 +0000 作者                  o Commit 8 C\n2009-12-17 12:49 +0000 René Lévesque         o <v1.0> Commit 8 B\n[main] 957f2b368e6fa5c0757f36b1441e32729ee5e9c7 - commit 14 of 50            28%\nEOF\n\nassert_equals 'main-search-time.screen' <<EOF\n2010-04-07 05:37 +0000 Max Power             o [master] {origin/master} {origin/\n2010-03-29 17:15 +0000 Jørgen Thygesen Brahe o Commit 10 D\n2010-03-21 04:53 +0000 作者                  o Commit 10 C\n2010-03-12 16:31 +0000 René Lévesque         o Commit 10 B\n2010-03-04 04:09 +0000 A. U. Thor            o Commit 10 A\n2010-02-23 15:46 +0000 Max Power             o Commit 9 E\n2010-02-15 03:24 +0000 Jørgen Thygesen Brahe o Commit 9 D\n2010-02-06 15:02 +0000 作者                  o Commit 9 C\n2010-01-29 02:40 +0000 René Lévesque         o Commit 9 B\n2010-01-20 14:18 +0000 A. U. Thor            o Commit 9 A\n2010-01-12 01:56 +0000 Max Power             o Commit 8 E\n2010-01-03 13:33 +0000 Jørgen Thygesen Brahe o Commit 8 D\n2009-12-26 01:11 +0000 作者                  o Commit 8 C\n2009-12-17 12:49 +0000 René Lévesque         o <v1.0> Commit 8 B\n[main] 545eb1fa92b902b6799e2a1691419c3158254a0a - commit 12 of 50            28%\nEOF\n\nassert_equals 'main-search-smart-case.screen' <<EOF\n2010-04-07 05:37 +0000 Max Power             o [master] {origin/master} {origin/\n2010-03-29 17:15 +0000 Jørgen Thygesen Brahe o Commit 10 D\n2010-03-21 04:53 +0000 作者                  o Commit 10 C\n2010-03-12 16:31 +0000 René Lévesque         o Commit 10 B\n2010-03-04 04:09 +0000 A. U. Thor            o Commit 10 A\n2010-02-23 15:46 +0000 Max Power             o Commit 9 E\n2010-02-15 03:24 +0000 Jørgen Thygesen Brahe o Commit 9 D\n2010-02-06 15:02 +0000 作者                  o Commit 9 C\n2010-01-29 02:40 +0000 René Lévesque         o Commit 9 B\n2010-01-20 14:18 +0000 A. U. Thor            o Commit 9 A\n2010-01-12 01:56 +0000 Max Power             o Commit 8 E\n2010-01-03 13:33 +0000 Jørgen Thygesen Brahe o Commit 8 D\n2009-12-26 01:11 +0000 作者                  o Commit 8 C\n2009-12-17 12:49 +0000 René Lévesque         o <v1.0> Commit 8 B\n[main] 19455fa3642af6a6a7d527dd043caf5a70eaad2d - commit 5 of 50             28%\nEOF\n"
  },
  {
    "path": "test/main/show-changes-after-rename-test",
    "content": "#!/bin/sh\n#\n# Test case from https://github.com/jonas/tig/issues/472\n\n. libtest.sh\n. libgit.sh\n. \"$source_dir/util.sh\"\n\nexport LINES=4\n\nsteps '\n\t:save-display default.screen\n'\n\ngit_init\n\ntest_setup_work_dir() {\n\tprintf 'data\\n' >file1\n\tgit add file1\n\tgit_commit -m \"commit1\"\n\tprintf 'data\\n' >file2\n\tgit add file2\n\tgit rm file1\n}\n\ntest_tig\n\nassert_equals 'default.screen' <<EOF\n$YYY_MM_DD_HH_MM +0000 Not Committed Yet o Staged changes\n2009-02-13 23:31 +0000 Committer I [master] commit1\n[main] Staged changes                                                       100%\nEOF\n"
  },
  {
    "path": "test/main/show-changes-test",
    "content": "#!/bin/sh\n#\n# Test main view display of index changes and interaction with the stage view.\n\n. libtest.sh\n. libgit.sh\n. \"$source_dir/util.sh\"\n\nexport LINES=16\n\nsteps '\n\t:save-display main-with-unstaged.screen\n\t:enter\n\t:save-display main-with-unstaged-split.screen\n\n\t:/b.c CHANGED\n\t:status-update\n\t:status-update\n\t:0\n\t:save-display main-with-unstaged-and-staged-split.screen\n\n\t:status-update\n\t:save-display main-with-staged.screen\n\n\t:enter\n\t:save-display main-with-staged-split.screen\n\n\t:view-close\n\t:exec @git reset a b.c\n\t:refresh\n\t:save-display main-with-staged-and-unstaged.screen\n\n\t:exec @git reset --hard\n\t:exec @git mv b.c b1.c\n\t:refresh\n\t:save-display main-with-renamed.screen\n\n\t:exec @git mv b1.c b.c\n\t:exec @setup-conflict.sh\n\t:refresh\n\t:save-display main-with-conflict.screen\n\n\t:set line-graphics = ascii\n\t:view-refs\n\t:enter\n\t:maximize\n\t:save-display main-all-refs.screen\n'\n\ntigrc <<EOF\nset vertical-split = no\nEOF\n\nin_work_dir create_dirty_workdir\n\ntest_tig\n\nassert_equals 'main-with-unstaged.screen' <<EOF\n$YYY_MM_DD_HH_MM +0000 Not Committed Yet o Unstaged changes\n2009-02-13 23:31 +0000 A. U. Thor        I [master] Initial commit\n\n\n\n\n\n\n\n\n\n\n\n\n[main] Unstaged changes                                                     100%\nEOF\n\nassert_equals 'main-with-unstaged-split.screen' <<EOF\n$YYY_MM_DD_HH_MM +0000 Not Committed Yet o Unstaged changes\n2009-02-13 23:31 +0000 A. U. Thor        I [master] Initial commit\n\n\n[main] Unstaged changes                                                     100%\n .j  | 6 ++----\n a   | 6 ++----\n b.c | 6 ++----\n e/f | 6 ++----\n g h | 6 ++----\n 5 files changed, 10 insertions(+), 20 deletions(-)\n\ndiff --git a/.j b/.j\nindex e697dfd..9d8ef3d 100644\n[stage] Press '<Enter>' to jump to file diff - line 1 of 107                  8%\nEOF\n\nassert_equals 'main-with-unstaged-and-staged-split.screen' <<EOF\n$YYY_MM_DD_HH_MM +0000 Not Committed Yet o Unstaged changes\n$YYY_MM_DD_HH_MM +0000 Not Committed Yet o Staged changes\n2009-02-13 23:31 +0000 A. U. Thor        I [master] Initial commit\n\n[main] Unstaged changes                                                     100%\n .j  | 6 ++----\n a   | 6 ++----\n e/f | 6 ++----\n g h | 6 ++----\n 4 files changed, 8 insertions(+), 16 deletions(-)\n\ndiff --git a/.j b/.j\nindex e697dfd..9d8ef3d 100644\n--- a/.j\n[stage] Press '<Enter>' to jump to file diff - line 1 of 86                  10%\nEOF\n\nassert_equals 'main-with-staged.screen' <<EOF\n$YYY_MM_DD_HH_MM +0000 Not Committed Yet o Staged changes\n2009-02-13 23:31 +0000 A. U. Thor        I [master] Initial commit\n\n\n\n\n\n\n\n\n\n\n\n\n[main] Staged changes                                                       100%\nEOF\n\nassert_equals 'main-with-staged-split.screen' <<EOF\n$YYY_MM_DD_HH_MM +0000 Not Committed Yet o Staged changes\n2009-02-13 23:31 +0000 A. U. Thor        I [master] Initial commit\n\n\n[main] Staged changes                                                       100%\n .j  | 6 ++----\n a   | 6 ++----\n b.c | 6 ++----\n e/f | 6 ++----\n g h | 6 ++----\n 5 files changed, 10 insertions(+), 20 deletions(-)\n\ndiff --git a/.j b/.j\nindex e697dfd..9d8ef3d 100644\n[stage] Press '<Enter>' to jump to file diff - line 1 of 107                  8%\nEOF\n\nassert_equals 'main-with-staged-and-unstaged.screen' <<EOF\n$YYY_MM_DD_HH_MM +0000 Not Committed Yet o Unstaged changes\n$YYY_MM_DD_HH_MM +0000 Not Committed Yet o Staged changes\n2009-02-13 23:31 +0000 A. U. Thor        I [master] Initial commit\n\n\n\n\n\n\n\n\n\n\n\n[main] Unstaged changes                                                     100%\nEOF\n\nassert_equals 'main-with-renamed.screen' <<EOF\n$YYY_MM_DD_HH_MM +0000 Not Committed Yet o Staged changes\n2009-02-13 23:31 +0000 A. U. Thor        I [master] Initial commit\n\n\n\n\n\n\n\n\n\n\n\n\n[main] Staged changes                                                       100%\nEOF\n\nassert_equals 'main-with-conflict.screen' <<EOF\n$YYY_MM_DD_HH_MM +0000 Not Committed Yet o Unstaged changes\n2009-03-11 12:38 +0000 Committer         o [conflict-master] Change: c'\n2009-03-03 00:15 +0000 Committer         o Change: c\n2009-02-22 11:53 +0000 Committer         o [master] Change: b\n2009-02-13 23:31 +0000 Committer         o Change: a\n2009-02-13 23:31 +0000 A. U. Thor        I Initial commit\n\n\n\n\n\n\n\n\n[main] Unstaged changes                                                     100%\nEOF\n\nassert_equals 'main-all-refs.screen' <<EOF\n2009-03-28 13:22 +0000 Committer         * [conflict-branch] Change: d'\n2009-03-20 01:00 +0000 Committer         * Change: d\n$YYY_MM_DD_HH_MM +0000 Not Committed Yet | * Unstaged changes\n2009-03-11 12:38 +0000 Committer         | * [conflict-master] Change: c'\n2009-03-03 00:15 +0000 Committer         | * Change: c\n2009-02-22 11:53 +0000 Committer         *-' [master] Change: b\n2009-02-13 23:31 +0000 Committer         * Change: a\n2009-02-13 23:31 +0000 A. U. Thor        I Initial commit\n\n\n\n\n\n\n[main] d62d8545d99da3de587bf2ef43703dde0ce68084 - commit 1 of 7             100%\nEOF\n"
  },
  {
    "path": "test/main/start-on-line-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\nsteps '\n\t:save-display position.screen\n'\n\ntigrc <<EOF\nset line-graphics = utf-8\nEOF\n\ntest_tig +42\n\nassert_equals 'position.screen' <<EOF\n2013-10-29 18:46 +0100 Sébastien Doeraene │ ∙ Update for new groupId and package\n2013-10-27 23:05 -0400 Jonas Fonseca      ∙─╯ Add JavaScript benchmark reference\n2013-10-27 18:12 -0400 Jonas Fonseca      ∙ Add check sum calculation for verify\n2013-10-26 12:54 -0400 Jonas Fonseca      ∙ Add Scala.js LICENSE file and a cool\n2013-10-25 22:08 -0400 Jonas Fonseca      ∙ Add script to build and run all benc\n2013-10-25 20:29 -0400 Jonas Fonseca      ∙ Support node as a JavaScript engine\n2013-10-25 00:34 -0400 Jonas Fonseca      ∙ Run benchmarks for a fixed number of\n2013-10-24 23:50 -0400 Jonas Fonseca      ∙ Rework the benchmark runner and add\n2013-10-20 00:23 -0700 Jonas Fonseca      ∙ Add DeltaBlue benchmark\n2013-10-18 17:18 -0400 Jonas Fonseca      ∙ Tidyup indentation\n2013-10-18 17:18 -0400 Jonas Fonseca      ∙ Use case class apply constructor whe\n2013-10-18 07:00 -0700 Jonas Fonseca      ●─╮ Merge pull request #1 from sjrd/pa\n2013-10-18 11:39 +0200 Sébastien Doeraene │ ∙ Fix the \"./run.sh opt\" invocation.\n2013-10-17 20:34 -0400 Jonas Fonseca      ∙─╯ Add Richards benchmark\n2013-10-17 20:29 -0400 Jonas Fonseca      ∙ Simplify render scene loop by using\n2013-10-17 20:27 -0400 Jonas Fonseca      ∙ Make the run shell script infrastruc\n2013-10-17 20:25 -0400 Jonas Fonseca      ∙ Simplify creation of new benchmark p\n2013-10-14 16:37 -0400 Jonas Fonseca      ∙ Add link to the github pages\n2013-10-14 16:19 -0400 Jonas Fonseca      ∙ Add .gitignore file\n2013-10-14 16:09 -0400 Jonas Fonseca      ∙ Move description of the optimizeJS w\n2013-10-14 14:56 -0400 Jonas Fonseca      ◎ Initial import of Tracer benchmark\n \n \n \n \n \n \n \n[main] f02430d55d469abb9313734bacd2611f2384fe65 - commit 42 of 48           100%\nEOF\n"
  },
  {
    "path": "test/main/stdin-test",
    "content": "#!/bin/sh\n#\n# Test reading commit IDs from stdin with --stdin.\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=16\n\ngit_clone 'repo-one'\n\nsteps '\n\t:save-display main-stdin.screen\n'\n\nstdin <<EOF\n$(cd \"$work_dir\" && git rev-list --grep='Commit 8' HEAD)\nEOF\n\ntest_tig --no-walk --stdin\n\nassert_equals 'main-stdin.screen' <<EOF\n2010-01-12 01:56 +0000 Max Power             Commit 8 E\n2010-01-03 13:33 +0000 Jørgen Thygesen Brahe Commit 8 D\n2009-12-26 01:11 +0000 作者                  Commit 8 C\n2009-12-17 12:49 +0000 René Lévesque         <v1.0> Commit 8 B\n2009-12-09 00:27 +0000 A. U. Thor            Commit 8 A\n\n\n\n\n\n\n\n\n\n[main] d9a8c8b1e52ba7f1673cebb271f1fc0bdac3579b - commit 1 of 5             100%\nEOF\n"
  },
  {
    "path": "test/main/submodule-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=47\n\ntigrc <<EOF\nset split-view-height = 37\nset vertical-split = no\nset main-view = id commit-title:yes,graph=no,refs=no,overflow=no\nEOF\n\nsteps '\n\t:enter\n\t:save-display main-submodule.screen\n\n\t:set diff-options = --submodule\n\t:save-display main-submodule-diff.screen\n'\n\ntest_setup_work_dir()\n{\n\tgit_clone 'repo-two' .\n\tgit submodule init\n\tgit submodule update\n}\n\ntest_tig\n\nassert_equals 'main-submodule.screen' <<EOF\nfeeb2df [repo-two] Integrate feature from repo-two-a, repo-two-b, repo-two-c\n7f9d74d [repo-two] Integrate feature from repo-two-b\n2bbde7f [repo-two] Integrate feature from repo-two-a, repo-two-c\n3a2603a [repo-two] Creating repository\n9bb0f0d [repo-two] Commit 2\n4f3cb50 [repo-two] Commit 1\na9db5c5 [repo-two] Commit 0\n\n[main] feeb2dfd5e09e887e4b6c901e7d91a4c85a7831d - commit 1 of 7             100%\ncommit feeb2dfd5e09e887e4b6c901e7d91a4c85a7831d\nRefs: [master], {origin/master}, {origin/HEAD}\nAuthor:     A. U. Thor <a.u.thor@example.com>\nAuthorDate: Sun Sep 6 08:23:30 2009 +0000\nCommit:     Committer <c.ommitter@example.net>\nCommitDate: Sun Sep 6 08:23:30 2009 +0000\n\n    [repo-two] Integrate feature from repo-two-a, repo-two-b, repo-two-c\n---\n repo-two-a | 2 +-\n repo-two-b | 2 +-\n repo-two-c | 2 +-\n 3 files changed, 3 insertions(+), 3 deletions(-)\n\ndiff --git a/repo-two-a b/repo-two-a\nindex a1d2fa2..598d4e4 160000\n--- a/repo-two-a\n+++ b/repo-two-a\n@@ -1 +1 @@\n-Subproject commit a1d2fa223a5f983adaad9a22df5c518aefba1d07\n+Subproject commit 598d4e4d8b652f28e7b78fd4f95124fadb10efcf\ndiff --git a/repo-two-b b/repo-two-b\nindex f3866fb..8ab92f1 160000\n--- a/repo-two-b\n+++ b/repo-two-b\n@@ -1 +1 @@\n-Subproject commit f3866fb983d82c8fc2b01423dde37084f59385d5\n+Subproject commit 8ab92f1f22470039668eb12d405e4356dcae8305\ndiff --git a/repo-two-c b/repo-two-c\nindex cd41885..e4b7821 160000\n--- a/repo-two-c\n+++ b/repo-two-c\n@@ -1 +1 @@\n-Subproject commit cd41885fa2b86fa6aae5308bba55c76a97498dcc\n+Subproject commit e4b78219ea174bc0c7f97024cf18fc1e6c08013a\n\n[diff] feeb2dfd5e09e887e4b6c901e7d91a4c85a7831d - line 1 of 35              100%\nEOF\n\nassert_equals 'main-submodule-diff.screen' <<EOF\nfeeb2df [repo-two] Integrate feature from repo-two-a, repo-two-b, repo-two-c\n7f9d74d [repo-two] Integrate feature from repo-two-b\n2bbde7f [repo-two] Integrate feature from repo-two-a, repo-two-c\n3a2603a [repo-two] Creating repository\n9bb0f0d [repo-two] Commit 2\n4f3cb50 [repo-two] Commit 1\na9db5c5 [repo-two] Commit 0\n\n[main] feeb2dfd5e09e887e4b6c901e7d91a4c85a7831d - commit 1 of 7             100%\ncommit feeb2dfd5e09e887e4b6c901e7d91a4c85a7831d\nRefs: [master], {origin/master}, {origin/HEAD}\nAuthor:     A. U. Thor <a.u.thor@example.com>\nAuthorDate: Sun Sep 6 08:23:30 2009 +0000\nCommit:     Committer <c.ommitter@example.net>\nCommitDate: Sun Sep 6 08:23:30 2009 +0000\n\n    [repo-two] Integrate feature from repo-two-a, repo-two-b, repo-two-c\n---\n repo-two-a | 2 +-\n repo-two-b | 2 +-\n repo-two-c | 2 +-\n 3 files changed, 3 insertions(+), 3 deletions(-)\n\nSubmodule repo-two-a a1d2fa2..598d4e4:\n  > [repo-two-a] Commit 5\nSubmodule repo-two-b f3866fb..8ab92f1:\n  > [repo-two-b] Commit 5\nSubmodule repo-two-c cd41885..e4b7821:\n  > [repo-two-c] Commit 5\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[diff] feeb2dfd5e09e887e4b6c901e7d91a4c85a7831d - line 1 of 20              100%\nEOF\n"
  },
  {
    "path": "test/main/unbind-default-quit-key-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\ntigrc <<EOF\nset refresh-mode = manual\nbind main q none\nEOF\n\nsteps '\n\t:exec @touch gh-483-main-q-noquit\n\tq\n\t:exec @rm -f gh-483-main-q-noquit\n\n\t:bind generic qb :exec @rm -f gh-483-generic-qb-executed\n\t:exec @touch gh-483-generic-qb-executed\n\tqb\n\n\t:bind main qa :exec @rm -f gh-483-main-qa-executed\n\t:exec @touch gh-483-main-qa-executed\n\tqa\n'\n\ngit_clone 'repo-one'\n\ntest_tig\n\nassert_not_exists \"$work_dir/gh-483-main-q-noquit\"\nassert_not_exists \"$work_dir/gh-483-generic-qb-executed\"\nassert_not_exists \"$work_dir/gh-483-main-qa-executed\"\n"
  },
  {
    "path": "test/main/untracked-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n. \"$source_dir/util.sh\"\n\nexport LINES=20\n\nsteps '\n\t:save-display start.screen\n\t<Enter>\n\t:save-display result.screen\n'\n\ntigrc <<EOF\nset vertical-split = no\nEOF\n\nin_work_dir create_dirty_workdir\nin_work_dir git add .j\nin_work_dir touch z\n\ntest_tig\n\nassert_equals 'start.screen' <<EOF\n$YYY_MM_DD_HH_MM +0000 Not Committed Yet o Untracked changes\n$YYY_MM_DD_HH_MM +0000 Not Committed Yet o Unstaged changes\n$YYY_MM_DD_HH_MM +0000 Not Committed Yet o Staged changes\n2009-02-13 23:31 +0000 A. U. Thor        I [master] Initial commit\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[main] Untracked changes                                                    100%\nEOF\n\nassert_equals 'result.screen' <<EOF\n$YYY_MM_DD_HH_MM +0000 Not Committed Yet o Untracked changes\n$YYY_MM_DD_HH_MM +0000 Not Committed Yet o Unstaged changes\n$YYY_MM_DD_HH_MM +0000 Not Committed Yet o Staged changes\n2009-02-13 23:31 +0000 A. U. Thor        I [master] Initial commit\n\n\n[main] Untracked changes                                                    100%\nOn branch master\nUntracked files:\n? z\n\n\n\n\n\n\n\n\n[status] Nothing to update                                                  100%\nEOF\n"
  },
  {
    "path": "test/main/update-unstaged-changes-test",
    "content": "#!/bin/sh\n#\n# GitHub issue #376 regarding a segfault\n\n. libtest.sh\n. libgit.sh\n. \"$source_dir/util.sh\"\n\nexport LINES=5\n\nsteps '\n\t:save-display start.screen\n\td\n\t@\n\tj\n\tu\n\t:save-display result.screen\n'\n\ntigrc <<EOF\nset vertical-split = no\nEOF\n\nin_work_dir create_dirty_workdir\n\ntest_tig\n\nassert_equals 'start.screen' <<EOF\n$YYY_MM_DD_HH_MM +0000 Not Committed Yet o Unstaged changes\n2009-02-13 23:31 +0000 A. U. Thor        I [master] Initial commit\n\n[main] Unstaged changes                                                     100%\nEOF\n\nassert_equals 'result.screen' <<EOF\n+++ b/.j\n@@ -6,6 +6,4 @@\n 5\n[stage] Unstaged changes to '.j' - line 13 of 101                            12%\nEOF\n"
  },
  {
    "path": "test/main/util.sh",
    "content": "#!/bin/sh\n\n# Set timestamp to return from gettimeofday-like stub.\nexport TEST_TIME_NOW=1401046937\n\n# The default formatted date of the above timestamp.\nYYY_MM_DD_HH_MM=\"2014-05-25 19:42\"\n"
  },
  {
    "path": "test/main/vertical-lines-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport WIDTH=40\nexport LINES=18\n\ntigrc <<EOF\nset vertical-split = auto\nEOF\n\nsteps '\n\t:set main-view-line-number-display = yes\n\t:set diff-view-line-number-display = yes\n\t:enter\n\n\t:set line-graphics = ascii\n\t:save-display main-verticals-ascii.screen\n\n\t:set line-graphics = default\n\t:save-display main-verticals-default.screen\n\n\t:set line-graphics = utf-8\n\t:save-display main-verticals-utf8.screen\n'\n\ngit_clone 'repo-one'\n\ntest_tig\n\nassert_equals 'main-verticals-ascii.screen' <<EOF\n  1| 2010-04-07 05:37 +0000 Max Power   |  1| commit 5cb3412a5e06e506840495b91ac\n   | 2010-03-29 17:15 +0000 Jørgen Thy~ |   | Refs: [master], {origin/master}, {\n   | 2010-03-21 04:53 +0000 作者        |   | Author:     Max Power <power123@ex\n   | 2010-03-12 16:31 +0000 René Léves~ |   | AuthorDate: Wed Apr 7 05:37:40 201\n  5| 2010-03-04 04:09 +0000 A. U. Thor  |  5| Commit:     Committer <c.ommitter@\n   | 2010-02-23 15:46 +0000 Max Power   |   | CommitDate: Wed Apr 7 05:37:40 201\n   | 2010-02-15 03:24 +0000 Jørgen Thy~ |   |\n   | 2010-02-06 15:02 +0000 作者        |   |     Commit 10 E\n   | 2010-01-29 02:40 +0000 René Léves~ |\n 10| 2010-01-20 14:18 +0000 A. U. Thor  |\n   | 2010-01-12 01:56 +0000 Max Power   |\n   | 2010-01-03 13:33 +0000 Jørgen Thy~ |\n   | 2009-12-26 01:11 +0000 作者        |\n   | 2009-12-17 12:49 +0000 René Léves~ |\n 15| 2009-12-09 00:27 +0000 A. U. Thor  |\n   | 2009-11-30 12:05 +0000 Max Power   |\n[main] 5cb3412a5e06e506840495b91acc8 32%|[diff] 5cb3412a5e06e506840495b91ac 100%\nEOF\n\nassert_equals 'main-verticals-default.screen' <<EOF\n  1x 2010-04-07 05:37 +0000 Max Power   |  1x commit 5cb3412a5e06e506840495b91ac\n   x 2010-03-29 17:15 +0000 Jørgen Thy~ |   x Refs: [master], {origin/master}, {\n   x 2010-03-21 04:53 +0000 作者        |   x Author:     Max Power <power123@ex\n   x 2010-03-12 16:31 +0000 René Léves~ |   x AuthorDate: Wed Apr 7 05:37:40 201\n  5x 2010-03-04 04:09 +0000 A. U. Thor  |  5x Commit:     Committer <c.ommitter@\n   x 2010-02-23 15:46 +0000 Max Power   |   x CommitDate: Wed Apr 7 05:37:40 201\n   x 2010-02-15 03:24 +0000 Jørgen Thy~ |   x\n   x 2010-02-06 15:02 +0000 作者        |   x     Commit 10 E\n   x 2010-01-29 02:40 +0000 René Léves~ |\n 10x 2010-01-20 14:18 +0000 A. U. Thor  |\n   x 2010-01-12 01:56 +0000 Max Power   |\n   x 2010-01-03 13:33 +0000 Jørgen Thy~ |\n   x 2009-12-26 01:11 +0000 作者        |\n   x 2009-12-17 12:49 +0000 René Léves~ |\n 15x 2009-12-09 00:27 +0000 A. U. Thor  |\n   x 2009-11-30 12:05 +0000 Max Power   |\n[main] 5cb3412a5e06e506840495b91acc8 32%|[diff] 5cb3412a5e06e506840495b91ac 100%\nEOF\n\nassert_equals 'main-verticals-utf8.screen' <<EOF\n  1│ 2010-04-07 05:37 +0000 Max Power   |  1│ commit 5cb3412a5e06e506840495b91ac\n   │ 2010-03-29 17:15 +0000 Jørgen Thy~ |   │ Refs: [master], {origin/master}, {\n   │ 2010-03-21 04:53 +0000 作者        |   │ Author:     Max Power <power123@ex\n   │ 2010-03-12 16:31 +0000 René Léves~ |   │ AuthorDate: Wed Apr 7 05:37:40 201\n  5│ 2010-03-04 04:09 +0000 A. U. Thor  |  5│ Commit:     Committer <c.ommitter@\n   │ 2010-02-23 15:46 +0000 Max Power   |   │ CommitDate: Wed Apr 7 05:37:40 201\n   │ 2010-02-15 03:24 +0000 Jørgen Thy~ |   │\n   │ 2010-02-06 15:02 +0000 作者        |   │     Commit 10 E\n   │ 2010-01-29 02:40 +0000 René Léves~ |\n 10│ 2010-01-20 14:18 +0000 A. U. Thor  |\n   │ 2010-01-12 01:56 +0000 Max Power   |\n   │ 2010-01-03 13:33 +0000 Jørgen Thy~ |\n   │ 2009-12-26 01:11 +0000 作者        |\n   │ 2009-12-17 12:49 +0000 René Léves~ |\n 15│ 2009-12-09 00:27 +0000 A. U. Thor  |\n   │ 2009-11-30 12:05 +0000 Max Power   |\n[main] 5cb3412a5e06e506840495b91acc8 32%|[diff] 5cb3412a5e06e506840495b91ac 100%\nEOF\n"
  },
  {
    "path": "test/main/view-split-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport WIDTH=40\nexport LINES=18\n\ntigrc <<EOF\nset vertical-split = auto\nEOF\n\nsteps '\n\t:enter\n\t:save-display main-vsplit-default.screen\n\n\t:toggle split-view-width +25%\n\t:save-display main-vsplit-25-75.screen\n\n\t:set vertical-split = no\n\t:save-display main-hsplit-default.screen\n\n\t:toggle split-view-height -17%\n\t:save-display main-hsplit-50-50.screen\n'\n\ngit_clone 'repo-one'\n\ntest_tig\n\nassert_equals 'main-vsplit-default.screen' <<EOF\n2010-04-07 05:37 +0000 Max Power        |commit 5cb3412a5e06e506840495b91acc8850\n2010-03-29 17:15 +0000 Jørgen Thygesen B|Refs: [master], {origin/master}, {origi\n2010-03-21 04:53 +0000 作者             |Author:     Max Power <power123@example\n2010-03-12 16:31 +0000 René Lévesque    |AuthorDate: Wed Apr 7 05:37:40 2010 +00\n2010-03-04 04:09 +0000 A. U. Thor       |Commit:     Committer <c.ommitter@examp\n2010-02-23 15:46 +0000 Max Power        |CommitDate: Wed Apr 7 05:37:40 2010 +00\n2010-02-15 03:24 +0000 Jørgen Thygesen B|\n2010-02-06 15:02 +0000 作者             |    Commit 10 E\n2010-01-29 02:40 +0000 René Lévesque    |\n2010-01-20 14:18 +0000 A. U. Thor       |\n2010-01-12 01:56 +0000 Max Power        |\n2010-01-03 13:33 +0000 Jørgen Thygesen B|\n2009-12-26 01:11 +0000 作者             |\n2009-12-17 12:49 +0000 René Lévesque    |\n2009-12-09 00:27 +0000 A. U. Thor       |\n2009-11-30 12:05 +0000 Max Power        |\n[main] 5cb3412a5e06e506840495b91acc8 32%|[diff] 5cb3412a5e06e506840495b91ac 100%\nEOF\n\nassert_equals 'main-vsplit-25-75.screen' <<EOF\n2010-04-07 05:37 +0 |commit 5cb3412a5e06e506840495b91acc885037a48b72\n2010-03-29 17:15 +0 |Refs: [master], {origin/master}, {origin/HEAD}, v1.0-13-g5c\n2010-03-21 04:53 +0 |Author:     Max Power <power123@example.org>\n2010-03-12 16:31 +0 |AuthorDate: Wed Apr 7 05:37:40 2010 +0000\n2010-03-04 04:09 +0 |Commit:     Committer <c.ommitter@example.net>\n2010-02-23 15:46 +0 |CommitDate: Wed Apr 7 05:37:40 2010 +0000\n2010-02-15 03:24 +0 |\n2010-02-06 15:02 +0 |    Commit 10 E\n2010-01-29 02:40 +0 |\n2010-01-20 14:18 +0 |\n2010-01-12 01:56 +0 |\n2010-01-03 13:33 +0 |\n2009-12-26 01:11 +0 |\n2009-12-17 12:49 +0 |\n2009-12-09 00:27 +0 |\n2009-11-30 12:05 +0 |\n[main] 5cb3412a5 32%|[diff] 5cb3412a5e06e506840495b91acc885037a48b72 - line 100%\nEOF\n\nassert_equals 'main-hsplit-default.screen' <<EOF\n2010-04-07 05:37 +0000 Max Power             o [master] {origin/master} {origin/\n2010-03-29 17:15 +0000 Jørgen Thygesen Brahe o Commit 10 D\n2010-03-21 04:53 +0000 作者                  o Commit 10 C\n2010-03-12 16:31 +0000 René Lévesque         o Commit 10 B\n2010-03-04 04:09 +0000 A. U. Thor            o Commit 10 A\n[main] 5cb3412a5e06e506840495b91acc885037a48b72 - commit 1 of 50             10%\ncommit 5cb3412a5e06e506840495b91acc885037a48b72\nRefs: [master], {origin/master}, {origin/HEAD}, v1.0-13-g5cb3412\nAuthor:     Max Power <power123@example.org>\nAuthorDate: Wed Apr 7 05:37:40 2010 +0000\nCommit:     Committer <c.ommitter@example.net>\nCommitDate: Wed Apr 7 05:37:40 2010 +0000\n \n    Commit 10 E\n \n \n[diff] 5cb3412a5e06e506840495b91acc885037a48b72 - line 1 of 8               100%\nEOF\n\nassert_equals 'main-hsplit-50-50.screen' <<EOF\n2010-04-07 05:37 +0000 Max Power             o [master] {origin/master} {origin/\n2010-03-29 17:15 +0000 Jørgen Thygesen Brahe o Commit 10 D\n2010-03-21 04:53 +0000 作者                  o Commit 10 C\n2010-03-12 16:31 +0000 René Lévesque         o Commit 10 B\n2010-03-04 04:09 +0000 A. U. Thor            o Commit 10 A\n2010-02-23 15:46 +0000 Max Power             o Commit 9 E\n2010-02-15 03:24 +0000 Jørgen Thygesen Brahe o Commit 9 D\n2010-02-06 15:02 +0000 作者                  o Commit 9 C\n[main] 5cb3412a5e06e506840495b91acc885037a48b72 - commit 1 of 50             16%\ncommit 5cb3412a5e06e506840495b91acc885037a48b72\nRefs: [master], {origin/master}, {origin/HEAD}, v1.0-13-g5cb3412\nAuthor:     Max Power <power123@example.org>\nAuthorDate: Wed Apr 7 05:37:40 2010 +0000\nCommit:     Committer <c.ommitter@example.net>\nCommitDate: Wed Apr 7 05:37:40 2010 +0000\n \n[diff] 5cb3412a5e06e506840495b91acc885037a48b72 - line 1 of 8                87%\nEOF\n"
  },
  {
    "path": "test/prompt/exec-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nLINES=10\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\ntest_case exec-without-arg-doesnt-crash \\\n\t--args='status' \\\n\t--script='\n\t:exec\n\t' <<EOF\nOn branch master\nChanges to be committed:\n  (no files)\nChanges not staged for commit:\n  (no files)\nUntracked files:\n  (no files)\n\n[status] Nothing to update                                                  100%\nEOF\n\ntest_case exec-only-flags-doesnt-crash \\\n\t--args='status' \\\n\t--script='\n\t:exec !\n\t' <<EOF\nOn branch master\nChanges to be committed:\n  (no files)\nChanges not staged for commit:\n  (no files)\nUntracked files:\n  (no files)\n\n[status] Nothing to update                                                  100%\nEOF\n\nrun_test_cases\n"
  },
  {
    "path": "test/reflog/default-test",
    "content": "#!/bin/sh\n#\n# Test display and options specific to the reflog view.\n\n. libtest.sh\n. libgit.sh\n\ntigrc <<EOF\nset line-graphics = ascii\nEOF\n\nsteps '\n\t:exec @git checkout r1.0\n\t:exec @git checkout r1.1.2\n\t:enter\n\t:save-display reflog-default.screen\n'\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/refs-repo.tgz\"\n\ntest_tig reflog\n\nassert_equals 'reflog-default.screen' <<EOF\nb45b570 [r1.1.2] [r1.1.x] <v1.1> checkout: moving from r1.0 to r1.1.2\n957f2b3 [r1.0] <v1.0> checkout: moving from master to r1.0\n5cb3412 [master] {max-power/master} {origin/HEAD} {origin/master} reset: moving\n5cb3412 [master] {max-power/master} {origin/HEAD} {origin/master} clone: from /o\n\n\n\n\n\n[reflog] HEAD@{0} - reference 1 of 4                                        100%\n2009-12-26 01:11 +0000 作者                  * [r1.1.2] [r1.1.x] <v1.1> Commit 8\n2009-12-17 12:49 +0000 René Lévesque         * [r1.0] <v1.0> Commit 8 B\n2009-12-09 00:27 +0000 A. U. Thor            * Commit 8 A\n2009-11-30 12:05 +0000 Max Power             * {max-power/mp/gh-123} Commit 7 E\n2009-11-21 23:43 +0000 Jørgen Thygesen Brahe * Commit 7 D\n2009-11-13 11:20 +0000 作者                  * Commit 7 C\n2009-11-04 22:58 +0000 René Lévesque         * Commit 7 B\n2009-10-27 10:36 +0000 A. U. Thor            * Commit 7 A\n2009-10-18 22:14 +0000 Max Power             * Commit 6 E\n2009-10-10 09:52 +0000 Jørgen Thygesen Brahe * Commit 6 D\n2009-10-01 21:30 +0000 作者                  * Commit 6 C\n2009-09-23 09:07 +0000 René Lévesque         * Commit 6 B\n2009-09-14 20:45 +0000 A. U. Thor            * Commit 6 A\n2009-09-06 08:23 +0000 Max Power             * Commit 5 E\n2009-08-28 20:01 +0000 Jørgen Thygesen Brahe * Commit 5 D\n2009-08-20 07:39 +0000 作者                  * Commit 5 C\n2009-08-11 19:17 +0000 René Lévesque         * Commit 5 B\n2009-08-03 06:54 +0000 A. U. Thor            * Commit 5 A\n[main] b45b5704c34dbd4c5fd89d58d45238ad136ae166 - commit 1 of 38             47%\nEOF\n"
  },
  {
    "path": "test/refs/branch-checkout-test",
    "content": "#!/bin/sh\n#\n# Test branch checkout (GitHub issue #290)\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=9\nexport COLUMNS=100\n\nsteps '\n\t:save-display refs-init.screen\n\t:3\n\t:exec @sh -c '\\''printf \"refs=%s\\\\nbranch=%s\\\\ntag=%s\\\\n\" \"%(ref)\" \"%(branch)\" \"%(tag)\" > $HOME/%(commit).refinfo'\\''\n\t:exec @git checkout -q %(branch)\n\t:2\n\t:save-display refs-checked-out-branch.screen\n\t:exec @sh -c \"git rev-parse HEAD > $HOME/%(ref).head\"\n\t:6\n\t:exec @sh -c '\\''printf \"refs=%s\\\\nbranch=%s\\\\ntag=%s\\\\n\" \"%(ref)\" \"%(branch)\" \"%(tag)\" > $HOME/%(commit).refinfo'\\''\n\t:exec @git checkout -q %(tag)\n\t:save-display refs-checked-out-tag.screen\n\t:7\n\t:exec @sh -c \"git rev-parse HEAD > $HOME/%(ref).head\"\n'\n\nLONG_BRANCH_NAME_ID=19455fa3642af6a6a7d527dd043caf5a70eaad2d\nLONG_BRANCH_NAME=this_is_really_a_long_long_long_long_long_long_long_branch\n\nLONG_TAG_NAME_ID=a3f25ca556c1cef1ef3a0704f5deaec8687c84b9\nLONG_TAG_NAME=this_is_really_a_long_long_long_long_long_long_long_tag\n\ncreate_branches()\n{\n\tgit branch \"$LONG_BRANCH_NAME\" HEAD~4\n\tgit tag \"$LONG_TAG_NAME\" HEAD~9\n}\n\ngit_clone 'repo-one'\nin_work_dir create_branches\n\ntest_tig refs\n\nassert_equals \"$LONG_BRANCH_NAME_ID.refinfo\" <<EOF\nrefs=$LONG_BRANCH_NAME\nbranch=$LONG_BRANCH_NAME\ntag=\nEOF\n\nassert_equals \"$LONG_BRANCH_NAME.head\" <<EOF\n$LONG_BRANCH_NAME_ID\nEOF\n\nassert_equals \"$LONG_TAG_NAME_ID.refinfo\" <<EOF\nrefs=$LONG_TAG_NAME\nbranch=\ntag=$LONG_TAG_NAME\nEOF\n\nassert_equals \"$LONG_TAG_NAME.head\" <<EOF\n$LONG_TAG_NAME_ID\nEOF\n\nassert_equals 'refs-init.screen' <<EOF\n                                     All references\n2010-04-07 05:37 +0000 Max Power     master                                                     Comm\n2010-03-04 04:09 +0000 A. U. Thor    this_is_really_a_long_long_long_long_long_long_long_branch Comm\n2010-04-07 05:37 +0000 Max Power     origin/master                                              Comm\n2010-04-07 05:37 +0000 Max Power     origin/HEAD                                                Comm\n2010-01-20 14:18 +0000 A. U. Thor    this_is_really_a_long_long_long_long_long_long_long_tag    Comm\n2009-12-17 12:49 +0000 René Lévesque v1.0                                                       Comm\n[refs] All references                                                                           100%\nEOF\n\nassert_equals 'refs-checked-out-branch.screen' <<EOF\n                                     All references\n2010-03-04 04:09 +0000 A. U. Thor    this_is_really_a_long_long_long_long_long_long_long_branch Comm\n2010-04-07 05:37 +0000 Max Power     master                                                     Comm\n2010-04-07 05:37 +0000 Max Power     origin/HEAD                                                Comm\n2010-04-07 05:37 +0000 Max Power     origin/master                                              Comm\n2010-01-20 14:18 +0000 A. U. Thor    this_is_really_a_long_long_long_long_long_long_long_tag    Comm\n2009-12-17 12:49 +0000 René Lévesque v1.0                                                       Comm\n[refs] 19455fa3642af6a6a7d527dd043caf5a70eaad2d - reference 1 of 6                              100%\nEOF\n\nassert_equals 'refs-checked-out-tag.screen' <<EOF\n                                     All references\n2010-01-20 14:18 +0000 A. U. Thor    HEAD                                                       Comm\n2010-04-07 05:37 +0000 Max Power     master                                                     Comm\n2010-03-04 04:09 +0000 A. U. Thor    this_is_really_a_long_long_long_long_long_long_long_branch Comm\n2010-04-07 05:37 +0000 Max Power     origin/HEAD                                                Comm\n2010-04-07 05:37 +0000 Max Power     origin/master                                              Comm\n2010-01-20 14:18 +0000 A. U. Thor    this_is_really_a_long_long_long_long_long_long_long_tag    Comm\n[refs] 5cb3412a5e06e506840495b91acc885037a48b72 - reference 5 of 7                               87%\nEOF\n"
  },
  {
    "path": "test/refs/branch-tag-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=18\n\nsteps '\n\t:save-display refs-initial.screen\n'\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/refs-repo.tgz\"\nin_work_dir git branch v2.0 v2.0.1\n\ntest_tig refs\n\nassert_equals 'refs-initial.screen' <<EOF\n                                     All references\n2010-04-07 05:37 +0000 Max Power     master               Commit 10 E\n2009-02-13 23:31 +0000 Max Power     mp/feature           WIP: feature\n2009-12-26 01:11 +0000 作者          r1.1.2               Commit 8 C\n2009-12-26 01:11 +0000 作者          r1.1.x               Commit 8 C\n2009-12-17 12:49 +0000 René Lévesque r1.0                 Commit 8 B\n2010-03-12 16:31 +0000 René Lévesque v2.0                 Commit 10 B\n2010-04-07 05:37 +0000 Max Power     origin/master        Commit 10 E\n2010-04-07 05:37 +0000 Max Power     max-power/master     Commit 10 E\n2009-02-13 23:31 +0000 Max Power     max-power/mp/feature WIP: feature\n2009-11-30 12:05 +0000 Max Power     max-power/mp/gh-123  Commit 7 E\n2010-04-07 05:37 +0000 Max Power     origin/HEAD          Commit 10 E\n2010-01-12 01:56 +0000 Max Power     mp/good              Commit 8 E\n2010-03-04 04:09 +0000 A. U. Thor    refs/tags/v2.0       Commit 10 A\n2010-03-12 16:31 +0000 René Lévesque v2.0.1               Commit 10 B\n2010-01-20 14:18 +0000 A. U. Thor    v1.1.1               Commit 9 A\n[refs] All references                                                        88%\nEOF\n"
  },
  {
    "path": "test/refs/branch-var-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=18\n\ntigrc <<EOF\nset line-graphics = ascii\nset refresh-mode = manual\nEOF\n\nsteps '\n\t:1\n\t:exec !assert-var \"-%(branch)\" == \"-\"\n\n\t:2\n\t:exec !assert-var \"%(branch)\" == \"master\"\n\n\t:3\n\t:exec !assert-var \"%(branch)\" == \"mp/feature\"\n\n\t:4\n\t:exec !assert-var \"%(branch)\" == \"r1.1.2\"\n\n\t:5\n\t:exec !assert-var \"%(branch)\" == \"r1.1.x\"\n\n\t:6\n\t:exec !assert-var \"%(branch)\" == \"r1.0\"\n\n\t:1\n\t:save-display refs.screen\n'\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/refs-repo.tgz\"\n\ntest_tig refs\n\nassert_vars 6\n\nassert_equals 'refs.screen' <<EOF\n                                     All references\n2010-04-07 05:37 +0000 Max Power     master               Commit 10 E\n2009-02-13 23:31 +0000 Max Power     mp/feature           WIP: feature\n2009-12-26 01:11 +0000 作者          r1.1.2               Commit 8 C\n2009-12-26 01:11 +0000 作者          r1.1.x               Commit 8 C\n2009-12-17 12:49 +0000 René Lévesque r1.0                 Commit 8 B\n2010-04-07 05:37 +0000 Max Power     origin/master        Commit 10 E\n2010-04-07 05:37 +0000 Max Power     max-power/master     Commit 10 E\n2009-02-13 23:31 +0000 Max Power     max-power/mp/feature WIP: feature\n2009-11-30 12:05 +0000 Max Power     max-power/mp/gh-123  Commit 7 E\n2010-04-07 05:37 +0000 Max Power     origin/HEAD          Commit 10 E\n2010-01-12 01:56 +0000 Max Power     mp/good              Commit 8 E\n2010-03-12 16:31 +0000 René Lévesque v2.0.1               Commit 10 B\n2010-03-04 04:09 +0000 A. U. Thor    v2.0                 Commit 10 A\n2010-01-20 14:18 +0000 A. U. Thor    v1.1.1               Commit 9 A\n2009-12-26 01:11 +0000 作者          v1.1                 Commit 8 C\n[refs] All references                                                        94%\nEOF\n"
  },
  {
    "path": "test/refs/default-test",
    "content": "#!/bin/sh\n#\n# Test display and options specific to the refs view.\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=18\n\ntigrc <<EOF\nset line-graphics = ascii\nEOF\n\nsteps '\n\t:save-display refs-default.screen\n\n\t:toggle line-number\n\t:save-display refs-with-line-number.screen\n'\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/refs-repo.tgz\"\n\ntest_tig refs\n\nassert_equals 'refs-default.screen' <<EOF\n                                     All references\n2010-04-07 05:37 +0000 Max Power     master               Commit 10 E\n2009-02-13 23:31 +0000 Max Power     mp/feature           WIP: feature\n2009-12-26 01:11 +0000 作者          r1.1.2               Commit 8 C\n2009-12-26 01:11 +0000 作者          r1.1.x               Commit 8 C\n2009-12-17 12:49 +0000 René Lévesque r1.0                 Commit 8 B\n2010-04-07 05:37 +0000 Max Power     origin/master        Commit 10 E\n2010-04-07 05:37 +0000 Max Power     max-power/master     Commit 10 E\n2009-02-13 23:31 +0000 Max Power     max-power/mp/feature WIP: feature\n2009-11-30 12:05 +0000 Max Power     max-power/mp/gh-123  Commit 7 E\n2010-04-07 05:37 +0000 Max Power     origin/HEAD          Commit 10 E\n2010-01-12 01:56 +0000 Max Power     mp/good              Commit 8 E\n2010-03-12 16:31 +0000 René Lévesque v2.0.1               Commit 10 B\n2010-03-04 04:09 +0000 A. U. Thor    v2.0                 Commit 10 A\n2010-01-20 14:18 +0000 A. U. Thor    v1.1.1               Commit 9 A\n2009-12-26 01:11 +0000 作者          v1.1                 Commit 8 C\n[refs] All references                                                        94%\nEOF\n\nassert_equals 'refs-with-line-number.screen' <<EOF\n  1|                                      All references\n   | 2010-04-07 05:37 +0000 Max Power     master               Commit 10 E\n   | 2009-02-13 23:31 +0000 Max Power     mp/feature           WIP: feature\n   | 2009-12-26 01:11 +0000 作者          r1.1.2               Commit 8 C\n  5| 2009-12-26 01:11 +0000 作者          r1.1.x               Commit 8 C\n   | 2009-12-17 12:49 +0000 René Lévesque r1.0                 Commit 8 B\n   | 2010-04-07 05:37 +0000 Max Power     origin/master        Commit 10 E\n   | 2010-04-07 05:37 +0000 Max Power     max-power/master     Commit 10 E\n   | 2009-02-13 23:31 +0000 Max Power     max-power/mp/feature WIP: feature\n 10| 2009-11-30 12:05 +0000 Max Power     max-power/mp/gh-123  Commit 7 E\n   | 2010-04-07 05:37 +0000 Max Power     origin/HEAD          Commit 10 E\n   | 2010-01-12 01:56 +0000 Max Power     mp/good              Commit 8 E\n   | 2010-03-12 16:31 +0000 René Lévesque v2.0.1               Commit 10 B\n   | 2010-03-04 04:09 +0000 A. U. Thor    v2.0                 Commit 10 A\n 15| 2010-01-20 14:18 +0000 A. U. Thor    v1.1.1               Commit 9 A\n   | 2009-12-26 01:11 +0000 作者          v1.1                 Commit 8 C\n[refs] All references                                                        94%\nEOF\n"
  },
  {
    "path": "test/refs/filter-test",
    "content": "#!/bin/sh\n#\n# Test ref filtering (GitHub issue #1160)\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=9\nexport COLUMNS=120\n\ngit_init\n\ntest_setup_work_dir() {\n\tgit_commit --allow-empty -m Initial\\ commit\n\tgit branch my-branch1 HEAD\n\tgit branch my-branch2 HEAD\n\tgit update-ref refs/remotes/origin/my-branch1 HEAD\n\tgit update-ref refs/remotes/origin/my-branch2 HEAD\n\tgit tag my-tag1 HEAD\n\tgit tag my-tag2 HEAD\n\tgit update-ref refs/my-raw-ref1 HEAD\n\tgit update-ref refs/my-raw-ref2 HEAD\n}\n\nexport TIG_LS_REMOTE='sh -c \"git show-ref --head --dereference | grep -v refs/.\\\\*1\"'\n\nsteps '\n\t:save-display main.screen\n\t:view-refs\n\t:save-display refs.screen\n'\n\ntest_tig\n\nassert_equals 'main.screen' <<EOF\n2009-02-13 23:31 +0000 Committer I [master] [my-branch2] {origin/my-branch2} <my-tag2> [refs/my-raw-ref2] Initial commit\n\n\n\n\n\n\n[main] 174877369ea7af366da2ebcedd63d7a00d8046ea - commit 1 of 1  100%\nEOF\n\nassert_equals 'refs.screen' <<EOF\n  All references\n  master\n  my-branch2\n  origin/my-branch2\n  my-tag2\n  refs/my-raw-ref2\n\n[refs] All references  100%\nEOF\n"
  },
  {
    "path": "test/refs/refresh-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=18\n\nsteps '\n\t:save-display refs-initial.screen\n\n\t:exec @git branch -M feature-1 feature-one\n\t:exec @git branch feature-3 master\n\t:save-display refs-after-move-add.screen\n\n\t:exec @git branch -D feature-2\n\t:exec @git branch -f feature-one HEAD~5\n\t:save-display refs-after-delete-reset.screen\n'\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/refs-repo.tgz\"\nin_work_dir git branch feature-1 HEAD~10\nin_work_dir git branch feature-2 HEAD~20\n\ntest_tig refs\n\nassert_equals 'refs-initial.screen' <<EOF\n                                     All references\n2010-04-07 05:37 +0000 Max Power     master               Commit 10 E\n2009-10-18 22:14 +0000 Max Power     feature-2            Commit 6 E\n2010-01-12 01:56 +0000 Max Power     feature-1            Commit 8 E\n2009-02-13 23:31 +0000 Max Power     mp/feature           WIP: feature\n2009-12-26 01:11 +0000 作者          r1.1.2               Commit 8 C\n2009-12-26 01:11 +0000 作者          r1.1.x               Commit 8 C\n2009-12-17 12:49 +0000 René Lévesque r1.0                 Commit 8 B\n2010-04-07 05:37 +0000 Max Power     origin/master        Commit 10 E\n2010-04-07 05:37 +0000 Max Power     max-power/master     Commit 10 E\n2009-02-13 23:31 +0000 Max Power     max-power/mp/feature WIP: feature\n2009-11-30 12:05 +0000 Max Power     max-power/mp/gh-123  Commit 7 E\n2010-04-07 05:37 +0000 Max Power     origin/HEAD          Commit 10 E\n2010-01-12 01:56 +0000 Max Power     mp/good              Commit 8 E\n2010-03-12 16:31 +0000 René Lévesque v2.0.1               Commit 10 B\n2010-03-04 04:09 +0000 A. U. Thor    v2.0                 Commit 10 A\n[refs] All references                                                        84%\nEOF\n\nassert_equals 'refs-after-move-add.screen' <<EOF\n                                     All references\n2010-04-07 05:37 +0000 Max Power     master               Commit 10 E\n2010-04-07 05:37 +0000 Max Power     feature-3            Commit 10 E\n2009-10-18 22:14 +0000 Max Power     feature-2            Commit 6 E\n2010-01-12 01:56 +0000 Max Power     feature-one          Commit 8 E\n2009-02-13 23:31 +0000 Max Power     mp/feature           WIP: feature\n2009-12-26 01:11 +0000 作者          r1.1.2               Commit 8 C\n2009-12-26 01:11 +0000 作者          r1.1.x               Commit 8 C\n2009-12-17 12:49 +0000 René Lévesque r1.0                 Commit 8 B\n2010-04-07 05:37 +0000 Max Power     origin/master        Commit 10 E\n2010-04-07 05:37 +0000 Max Power     max-power/master     Commit 10 E\n2009-02-13 23:31 +0000 Max Power     max-power/mp/feature WIP: feature\n2009-11-30 12:05 +0000 Max Power     max-power/mp/gh-123  Commit 7 E\n2010-04-07 05:37 +0000 Max Power     origin/HEAD          Commit 10 E\n2010-01-12 01:56 +0000 Max Power     mp/good              Commit 8 E\n2010-03-12 16:31 +0000 René Lévesque v2.0.1               Commit 10 B\n[refs] All references                                                        80%\nEOF\n\nassert_equals 'refs-after-delete-reset.screen' <<EOF\n                                     All references\n2010-04-07 05:37 +0000 Max Power     master               Commit 10 E\n2010-04-07 05:37 +0000 Max Power     feature-3            Commit 10 E\n2010-02-23 15:46 +0000 Max Power     feature-one          Commit 9 E\n2009-02-13 23:31 +0000 Max Power     mp/feature           WIP: feature\n2009-12-26 01:11 +0000 作者          r1.1.2               Commit 8 C\n2009-12-26 01:11 +0000 作者          r1.1.x               Commit 8 C\n2009-12-17 12:49 +0000 René Lévesque r1.0                 Commit 8 B\n2010-04-07 05:37 +0000 Max Power     origin/master        Commit 10 E\n2010-04-07 05:37 +0000 Max Power     max-power/master     Commit 10 E\n2009-02-13 23:31 +0000 Max Power     max-power/mp/feature WIP: feature\n2009-11-30 12:05 +0000 Max Power     max-power/mp/gh-123  Commit 7 E\n2010-04-07 05:37 +0000 Max Power     origin/HEAD          Commit 10 E\n2010-01-12 01:56 +0000 Max Power     mp/good              Commit 8 E\n2010-03-12 16:31 +0000 René Lévesque v2.0.1               Commit 10 B\n2010-03-04 04:09 +0000 A. U. Thor    v2.0                 Commit 10 A\n[refs] All references                                                        84%\nEOF\n"
  },
  {
    "path": "test/refs/replace-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=18\n\ntigrc <<EOF\nset refs-view-id = yes\nset main-view-id = yes\nEOF\n\nsteps '\n\t:save-display refs.screen\n\n\t:view-main\n\t:save-display main.screen\n'\n\ngit_clone 'repo-one'\n\ntest_setup_work_dir()\n{\n\treplaced_id=\"$(git rev-parse HEAD~10)\"\n\treplacement_id=\"$(git rev-parse HEAD~20)\"\n\n\treplaced_no_branch_1_id=\"$(git rev-parse HEAD~22)\"\n\treplacement_no_branch_1_id=\"$(git rev-parse HEAD~23)\"\n\n\treplaced_no_branch_2_id=\"$(git rev-parse HEAD~25)\"\n\treplacement_no_branch_2_id=\"$(git rev-parse HEAD~30)\"\n\n\tgit branch not-replace \"$replaced_id\"\n\tgit replace \"$replaced_id\" \"$replacement_id\"\n\tgit replace \"$replaced_no_branch_1_id\" \"$replacement_no_branch_1_id\"\n\tgit replace \"$replaced_no_branch_2_id\" \"$replacement_no_branch_2_id\"\n}\n\ntest_tig refs\n\nassert_equals 'refs.screen' <<EOF\n                                             All references\n5cb3412 2010-04-07 05:37 +0000 Max Power     master         Commit 10 E\n5cb3412 2010-04-07 05:37 +0000 Max Power     origin/master  Commit 10 E\n5cb3412 2010-04-07 05:37 +0000 Max Power     origin/HEAD    Commit 10 E\n957f2b3 2009-12-17 12:49 +0000 René Lévesque v1.0           Commit 8 B\nd9a8c8b 2009-10-18 22:14 +0000 Max Power     not-replace    Commit 6 E\n \n \n \n \n \n \n \n \n \n \n[refs] All references                                                       100%\nEOF\n\nassert_equals 'main.screen' <<EOF\n5cb3412 2010-04-07 05:37 +0000 Max Power             o [master] {origin/master}\n2843bfd 2010-03-29 17:15 +0000 Jørgen Thygesen Brahe o Commit 10 D\n8d53d6a 2010-03-21 04:53 +0000 作者                  o Commit 10 C\n51b7580 2010-03-12 16:31 +0000 René Lévesque         o Commit 10 B\n19455fa 2010-03-04 04:09 +0000 A. U. Thor            o Commit 10 A\n276c3a4 2010-02-23 15:46 +0000 Max Power             o Commit 9 E\n5633519 2010-02-15 03:24 +0000 Jørgen Thygesen Brahe o Commit 9 D\n7116156 2010-02-06 15:02 +0000 作者                  o Commit 9 C\n9927870 2010-01-29 02:40 +0000 René Lévesque         o Commit 9 B\na3f25ca 2010-01-20 14:18 +0000 A. U. Thor            o Commit 9 A\nd9a8c8b 2009-10-18 22:14 +0000 Max Power             o ~not-replace~ Commit 6 E\n02e1e72 2009-10-10 09:52 +0000 Jørgen Thygesen Brahe o Commit 6 D\n5d9d565 2009-09-23 09:07 +0000 René Lévesque         o ~replaced~ Commit 6 B\n2ba9ed5 2009-09-14 20:45 +0000 A. U. Thor            o Commit 6 A\n2053940 2009-07-25 18:32 +0000 Max Power             o ~replaced~ Commit 4 E\nceac6c2 2009-07-17 06:10 +0000 Jørgen Thygesen Brahe o Commit 4 D\n[main] 5cb3412a5e06e506840495b91acc885037a48b72 - commit 1 of 34             47%\nEOF\n"
  },
  {
    "path": "test/refs/start-on-line-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\ntest_setup_work_dir()\n{\n\tcreate_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\tfor i in $(seq 1 40); do\n\t\tgit branch \"ref-$i\" \"master~$i\"\n\tdone\n}\n\nsteps '\n\t:save-display position.screen\n'\n\ntest_tig refs +42\n\nassert_equals 'position.screen' <<EOF\n2013-11-19 21:56 -0500 Jonas Fonseca ref-15         sudoku: use iterator instead\n2013-11-26 20:13 -0500 Jonas Fonseca ref-14         Rename projects to be groupe\n2013-11-26 22:24 -0500 Jonas Fonseca ref-13         Move benchmark registration\n2013-11-26 22:52 -0500 Jonas Fonseca ref-12         Fix reference setup to work\n2013-11-26 22:55 -0500 Jonas Fonseca ref-11         Exclude Sudoku when running\n2013-11-26 23:22 -0500 Jonas Fonseca ref-10         Disable phantomjs by default\n2013-11-26 23:33 -0500 Jonas Fonseca ref-9          Solve the easiest sudoku gri\n2013-11-26 23:39 -0500 Jonas Fonseca ref-8          Extract the benchmark list v\n2013-12-03 23:35 -0500 Jonas Fonseca ref-7          Use Scala.js 0.2-SNAPSHOT\n2013-12-17 00:10 +0100 Jonas Fonseca ref-6          Update links to reflect proj\n2014-01-16 07:47 -0800 Jonas Fonseca ref-5          Merge pull request #4 from p\n2014-01-16 17:39 -0500 Jonas Fonseca ref-4          Integrate app code into the\n2014-01-16 17:43 -0500 Jonas Fonseca ref-3          Bump Scala.js version to 0.3\n2014-01-16 22:51 -0500 Jonas Fonseca ref-2          Move classes under org.scala\n2014-03-01 15:59 -0500 Jonas Fonseca ref-1          Add type parameter for js.Dy\n \n \n \n \n \n \n \n \n \n \n \n \n \n[refs] a1dcf1aaa11470978db1d5d8bcf9e16201eb70ff - reference 41 of 41        100%\nEOF\n"
  },
  {
    "path": "test/refs/worktree-test",
    "content": "#!/bin/sh\n#\n# Test for GitHub issue #437\n# Mainly to document the behavior of the refs view in \"worktree\"s.\n\n. libtest.sh\n. libgit.sh\n\ntest_require git-worktree\n\nexport LINES=9\n\ntest_setup_work_dir()\n{\n\tcreate_worktree\n}\n\nsteps '\n\t:save-display worktree.screen\n'\n\ntest_tig refs\n\nassert_equals 'worktree.screen' <<EOF\n                                     All references\n2010-04-07 05:37 +0000 Max Power     dev            Commit 10 E\n2010-04-07 05:37 +0000 Max Power     master         Commit 10 E\n2010-04-07 05:37 +0000 Max Power     origin/HEAD    Commit 10 E\n2010-04-07 05:37 +0000 Max Power     origin/master  Commit 10 E\n2009-12-17 12:49 +0000 René Lévesque v1.0           Commit 8 B\n \n[refs] All references                                                       100%\nEOF\n"
  },
  {
    "path": "test/regressions/github-1136-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nLINES=10\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\n# This runs an empty command, hence the empty pager.\ntest_case bang-cmdlineargs-doesnt-crash \\\n\t--args='status' \\\n\t--script='\n\t:!%(cmdlineargs)\n\t' <<EOF\n\n\n\n\n\n\n\n\n[pager]                                                                       0%\nEOF\n\ntest_case echo-cmdlineargs-doesnt-crash \\\n\t--args='status' \\\n\t--script='\n\t:echo %(cmdlineargs)\n\t' <<EOF\nOn branch master\nChanges to be committed:\n  (no files)\nChanges not staged for commit:\n  (no files)\nUntracked files:\n  (no files)\n\n[status] Nothing to update                                                  100%\nEOF\n\n# This runs an empty command, hence the empty pager.\ntest_case bang-fileargs-doesnt-crash \\\n\t--args='status' \\\n\t--script='\n\t:!%(fileargs)\n\t' <<EOF\n\n\n\n\n\n\n\n\n[pager]                                                                       0%\nEOF\n\ntest_case echo-fileargs-doesnt-crash \\\n\t--args='status' \\\n\t--script='\n\t:echo %(fileargs)\n\t' <<EOF\nOn branch master\nChanges to be committed:\n  (no files)\nChanges not staged for commit:\n  (no files)\nUntracked files:\n  (no files)\n\n[status] Nothing to update                                                  100%\nEOF\n\nrun_test_cases\n"
  },
  {
    "path": "test/regressions/github-370-test",
    "content": "#!/bin/sh\n\n# Issue #370\n\n. libtest.sh\n. libgit.sh\n\nsteps '\n\ts\n\tR\n\tq\n'\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\ntest_tig\n\nassert_equals 'stderr' <<EOF\nEOF\n"
  },
  {
    "path": "test/regressions/github-390-test",
    "content": "#!/bin/sh\n\n# Issue #390\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=3\nexport COLUMNS=90\n\nsteps '\n\t:save-display initial.screen\n\t:exec @git tag Marke\n\t:save-display tagged.screen\n'\n\nREMOTE_REPO=\"$HOME/remote\"\n\ntest_setup_work_dir() {\n\tpwd=\"$(pwd)\"\n\tgit_init \"$REMOTE_REPO\"\n\tcd \"$REMOTE_REPO\" && {\n\t\tprintf '3.14\\n' > file\n\t\tgit add file\n\t\tgit_commit -m \"committed\"\n\t\tcd \"$pwd\"\n\t}\n\tgit clone \"$REMOTE_REPO\" .\n}\n\ntest_tig\n\nassert_equals 'initial.screen' <<EOF\n2009-02-13 23:31 +0000 Committer I [master] {origin/master} {origin/HEAD} committed\n[main] 6b55d08be93000f4bdf67f74177ab14f590910d4 - commit 1 of 1                       100%\nEOF\n\nassert_equals 'tagged.screen' <<EOF\n2009-02-13 23:31 +0000 Committer I [master] {origin/master} {origin/HEAD} <Marke> committe\n[main] 6b55d08be93000f4bdf67f74177ab14f590910d4 - commit 1 of 1                       100%\nEOF\n"
  },
  {
    "path": "test/regressions/github-434-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport COLUMNS=160\nexport LINES=30\n\ntigrc <<EOF\nset vertical-split = auto\nEOF\n\nsteps '\n\t:enter\n\t:save-display vsplit-auto.screen\n\n\t:toggle vertical-split\n\t:next\n\t:save-display hsplit.screen\n\n\t:toggle vertical-split\n\t:save-display vsplit.screen\n'\n\ngit_clone 'repo-one'\n\ntest_tig\n\nassert_equals 'vsplit-auto.screen' <<EOF\n2010-04-07 05:37 +0000 Max Power             o [master] {origin/master} {origin/|commit 5cb3412a5e06e506840495b91acc885037a48b72\n2010-03-29 17:15 +0000 Jørgen Thygesen Brahe o Commit 10 D                      |Refs: [master], {origin/master}, {origin/HEAD}, v1.0-13-g5cb3412\n2010-03-21 04:53 +0000 作者                  o Commit 10 C                      |Author:     Max Power <power123@example.org>\n2010-03-12 16:31 +0000 René Lévesque         o Commit 10 B                      |AuthorDate: Wed Apr 7 05:37:40 2010 +0000\n2010-03-04 04:09 +0000 A. U. Thor            o Commit 10 A                      |Commit:     Committer <c.ommitter@example.net>\n2010-02-23 15:46 +0000 Max Power             o Commit 9 E                       |CommitDate: Wed Apr 7 05:37:40 2010 +0000\n2010-02-15 03:24 +0000 Jørgen Thygesen Brahe o Commit 9 D                       |\n2010-02-06 15:02 +0000 作者                  o Commit 9 C                       |    Commit 10 E\n2010-01-29 02:40 +0000 René Lévesque         o Commit 9 B                       |\n2010-01-20 14:18 +0000 A. U. Thor            o Commit 9 A                       |\n2010-01-12 01:56 +0000 Max Power             o Commit 8 E                       |\n2010-01-03 13:33 +0000 Jørgen Thygesen Brahe o Commit 8 D                       |\n2009-12-26 01:11 +0000 作者                  o Commit 8 C                       |\n2009-12-17 12:49 +0000 René Lévesque         o <v1.0> Commit 8 B                |\n2009-12-09 00:27 +0000 A. U. Thor            o Commit 8 A                       |\n2009-11-30 12:05 +0000 Max Power             o Commit 7 E                       |\n2009-11-21 23:43 +0000 Jørgen Thygesen Brahe o Commit 7 D                       |\n2009-11-13 11:20 +0000 作者                  o Commit 7 C                       |\n2009-11-04 22:58 +0000 René Lévesque         o Commit 7 B                       |\n2009-10-27 10:36 +0000 A. U. Thor            o Commit 7 A                       |\n2009-10-18 22:14 +0000 Max Power             o Commit 6 E                       |\n2009-10-10 09:52 +0000 Jørgen Thygesen Brahe o Commit 6 D                       |\n2009-10-01 21:30 +0000 作者                  o Commit 6 C                       |\n2009-09-23 09:07 +0000 René Lévesque         o Commit 6 B                       |\n2009-09-14 20:45 +0000 A. U. Thor            o Commit 6 A                       |\n2009-09-06 08:23 +0000 Max Power             o Commit 5 E                       |\n2009-08-28 20:01 +0000 Jørgen Thygesen Brahe o Commit 5 D                       |\n2009-08-20 07:39 +0000 作者                  o Commit 5 C                       |\n[main] 5cb3412a5e06e506840495b91acc885037a48b72 - commit 1 of 50             56%|[diff] 5cb3412a5e06e506840495b91acc885037a48b72 - line 1 of 8              100%\nEOF\n\nassert_equals 'hsplit.screen' <<EOF\n2010-04-07 05:37 +0000 Max Power             o [master] {origin/master} {origin/HEAD} Commit 10 E\n2010-03-29 17:15 +0000 Jørgen Thygesen Brahe o Commit 10 D\n2010-03-21 04:53 +0000 作者                  o Commit 10 C\n2010-03-12 16:31 +0000 René Lévesque         o Commit 10 B\n2010-03-04 04:09 +0000 A. U. Thor            o Commit 10 A\n2010-02-23 15:46 +0000 Max Power             o Commit 9 E\n2010-02-15 03:24 +0000 Jørgen Thygesen Brahe o Commit 9 D\n2010-02-06 15:02 +0000 作者                  o Commit 9 C\n2010-01-29 02:40 +0000 René Lévesque         o Commit 9 B\n[main] 2843bfd58b98c7e23ab91e51ffa4db4f8e27c9a4 - commit 2 of 50                                                                                             18%\ncommit 2843bfd58b98c7e23ab91e51ffa4db4f8e27c9a4\nAuthor:     Jørgen Thygesen Brahe <brache@example.dk>\nAuthorDate: Mon Mar 29 17:15:30 2010 +0000\nCommit:     Committer <c.ommitter@example.net>\nCommitDate: Mon Mar 29 17:15:30 2010 +0000\n \n    Commit 10 D\n \n \n \n \n \n \n \n \n \n \n \n[diff] 2843bfd58b98c7e23ab91e51ffa4db4f8e27c9a4 - line 1 of 7                                                                                               100%\nEOF\n\nassert_equals 'vsplit.screen' <<EOF\n2010-04-07 05:37 +0000 Max Power             o [master] {origin/master} {origin/|commit 2843bfd58b98c7e23ab91e51ffa4db4f8e27c9a4\n2010-03-29 17:15 +0000 Jørgen Thygesen Brahe o Commit 10 D                      |Author:     Jørgen Thygesen Brahe <brache@example.dk>\n2010-03-21 04:53 +0000 作者                  o Commit 10 C                      |AuthorDate: Mon Mar 29 17:15:30 2010 +0000\n2010-03-12 16:31 +0000 René Lévesque         o Commit 10 B                      |Commit:     Committer <c.ommitter@example.net>\n2010-03-04 04:09 +0000 A. U. Thor            o Commit 10 A                      |CommitDate: Mon Mar 29 17:15:30 2010 +0000\n2010-02-23 15:46 +0000 Max Power             o Commit 9 E                       |\n2010-02-15 03:24 +0000 Jørgen Thygesen Brahe o Commit 9 D                       |    Commit 10 D\n2010-02-06 15:02 +0000 作者                  o Commit 9 C                       |\n2010-01-29 02:40 +0000 René Lévesque         o Commit 9 B                       |\n2010-01-20 14:18 +0000 A. U. Thor            o Commit 9 A                       |\n2010-01-12 01:56 +0000 Max Power             o Commit 8 E                       |\n2010-01-03 13:33 +0000 Jørgen Thygesen Brahe o Commit 8 D                       |\n2009-12-26 01:11 +0000 作者                  o Commit 8 C                       |\n2009-12-17 12:49 +0000 René Lévesque         o <v1.0> Commit 8 B                |\n2009-12-09 00:27 +0000 A. U. Thor            o Commit 8 A                       |\n2009-11-30 12:05 +0000 Max Power             o Commit 7 E                       |\n2009-11-21 23:43 +0000 Jørgen Thygesen Brahe o Commit 7 D                       |\n2009-11-13 11:20 +0000 作者                  o Commit 7 C                       |\n2009-11-04 22:58 +0000 René Lévesque         o Commit 7 B                       |\n2009-10-27 10:36 +0000 A. U. Thor            o Commit 7 A                       |\n2009-10-18 22:14 +0000 Max Power             o Commit 6 E                       |\n2009-10-10 09:52 +0000 Jørgen Thygesen Brahe o Commit 6 D                       |\n2009-10-01 21:30 +0000 作者                  o Commit 6 C                       |\n2009-09-23 09:07 +0000 René Lévesque         o Commit 6 B                       |\n2009-09-14 20:45 +0000 A. U. Thor            o Commit 6 A                       |\n2009-09-06 08:23 +0000 Max Power             o Commit 5 E                       |\n2009-08-28 20:01 +0000 Jørgen Thygesen Brahe o Commit 5 D                       |\n2009-08-20 07:39 +0000 作者                  o Commit 5 C                       |\n[main] 2843bfd58b98c7e23ab91e51ffa4db4f8e27c9a4 - commit 2 of 50             56%|[diff] 2843bfd58b98c7e23ab91e51ffa4db4f8e27c9a4 - line 1 of 7              100%\nEOF\n"
  },
  {
    "path": "test/script/comment-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=5\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\nsteps '\n\t:set line-graphics = ascii\n\t# comment\n\t:save-display main.screen\n'\n\ntest_tig\n\nassert_equals main.screen <<EOF\n2014-03-01 17:26 -0500 Jonas Fonseca      * [master] WIP: Upgrade to 0.4-SNAPSHO\n2014-03-01 15:59 -0500 Jonas Fonseca      * Add type parameter for js.Dynamic\n2014-01-16 22:51 -0500 Jonas Fonseca      * Move classes under org.scalajs.bench\n[main] ee912870202200a0b9cf4fd86ba57243212d341e - commit 1 of 48              6%\nEOF\n"
  },
  {
    "path": "test/script/default-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=16\n\ngit_clone 'repo-one'\n\ntest_tig_script() {\n\tname=\"$1\"; shift\n\n\ttig_script \"$name\" \"$@\"\n\ttest_tig\n\n\tassert_equals \"$name.stderr\" <<EOF\nEOF\n}\n\ntest_tig_script 'segfault-regression-for-bc4f8e83c590058641c9e1654db300798e9cd106' '\n\t:view-main\n'\n\nview_open_file=\"view-is-open\"\ntouch -- \"$view_open_file\"\n\ntigrc <<EOF\nbind generic <F1> @sh -c 'echo \"view not closed\" > \"$HOME/$view_open_file\"'\nEOF\n\ntest_tig_script 'view-close-no-quit-should-not-close-tig' '\n\t:view-close-no-quit\n\t<F1>\n'\n\nassert_equals \"$view_open_file\" <<EOF\nview not closed\nEOF\n\nview_closed_file=\"view-is-closed\"\ntouch -- \"$view_closed_file\"\n\ntigrc <<EOF\nbind generic <F1> @sh -c 'echo \"view not closed\" > \"$HOME/$view_closed_file\"'\nEOF\n\ntest_tig_script 'view-close-should-close-tig' '\n\t:view-close\n\t<F1>\n'\n\nassert_equals \"$view_closed_file\" <<EOF\nEOF\n\nfind . -name \"*.stderr\" -exec cat -- \"{}\" \\; > stderr\n"
  },
  {
    "path": "test/stage/default-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=20\n\nsteps '\n\t:save-display status.screen\n\n\t:2\n\t:view-stage\n\t:save-display staged-changes-shortcut.screen\n\t:view-close\n\n\t:5\n\t:view-stage\n\t:save-display unstaged-changes-shortcut.screen\n\t:view-close\n\n\t:view-main\n\n\t:1\n\t:view-stage\n\t:save-display unstaged-changes-shortcut-from-main.screen\n\t:view-close\n\n\t:2\n\t:view-stage\n\t:save-display staged-changes-shortcut-from-main.screen\n\t:view-close\n\n\t:view-close\n\n\t:4\n\t:view-stage\n\t:save-display staged-changes-for-a-shortcut.screen\n\t:view-close\n\n\t:2\n\t:enter\n\t:maximize\n\t:save-display staged-changes.screen\n\n\t:2\n\t:enter\n\t:save-display staged-changes-for-a.screen\n\t:view-close\n\n\t:5\n\t:enter\n\t:maximize\n\t:save-display unstaged-changes.screen\n\n\t:4\n\t:save-display unstaged-changes-default-title.screen\n\n\t:12\n\t:stage-update-line\n\t:save-display unstaged-changes-staged-bc-line.screen\n\n\t:status-update\n\t:save-display unstaged-changes-staged-bc-chunk.screen\n\n\t:status-update\n\t:save-display unstaged-changes-staged-bc-last-chunk.screen\n\n\t:4\n\t:status-update\n\t:save-display unstaged-changes-staged-all.screen\n'\n\nin_work_dir create_dirty_workdir\nin_work_dir git add .j a\n\ntest_tig status\n\nassert_equals 'status.screen' <<EOF\nOn branch master\nChanges to be committed:\nM .j\nM a\nChanges not staged for commit:\nM b.c\nM e/f\nM g h\nUntracked files:\n  (no files)\n\n\n\n\n\n\n\n\n[status] Nothing to update                                                  100%\nEOF\n\nassert_equals 'staged-changes.screen' < 'staged-changes-shortcut.screen'\nassert_equals 'unstaged-changes.screen' < 'unstaged-changes-shortcut.screen'\nassert_equals 'staged-changes.screen' < 'staged-changes-shortcut-from-main.screen'\nassert_equals 'unstaged-changes.screen' < 'unstaged-changes-shortcut-from-main.screen'\n\nassert_equals 'staged-changes-for-a-shortcut.screen' <<EOF\n a | 6 ++----\n 1 file changed, 2 insertions(+), 4 deletions(-)\n \ndiff --git a/a b/a\nindex 12d1d9e..0a4a332 100644\n--- a/a\n+++ b/a\n@@ -1,4 +1,4 @@\n-a\n+a CHANGED\n 1\n 2\n 3\n@@ -6,6 +6,4 @@ a\n 5\n 6\n 7\n-8\n[stage] Press '<Enter>' to jump to file diff - line 1 of 23                  78%\nEOF\n\nassert_equals 'staged-changes.screen' <<EOF\n .j | 6 ++----\n a  | 6 ++----\n 2 files changed, 4 insertions(+), 8 deletions(-)\n\ndiff --git a/.j b/.j\nindex e697dfd..9d8ef3d 100644\n--- a/.j\n+++ b/.j\n@@ -1,4 +1,4 @@\n-.j\n+.j CHANGED\n 1\n 2\n 3\n@@ -6,6 +6,4 @@\n 5\n 6\n 7\n[stage] Press '<Enter>' to jump to file diff - line 1 of 44                  40%\nEOF\n\nassert_equals 'staged-changes-for-a.screen' <<EOF\n 5\n 6\n 7\n-8\n-9\n-10\n\\ No newline at end of file\n+8\n\\ No newline at end of file\ndiff --git a/a b/a\nindex 12d1d9e..0a4a332 100644\n--- a/a\n+++ b/a\n@@ -1,4 +1,4 @@\n-a\n+a CHANGED\n 1\n 2\n[stage] Staged changes to 'a' - line 25 of 44                                75%\nEOF\n\nassert_equals 'unstaged-changes.screen' <<EOF\n b.c | 6 ++----\n e/f | 6 ++----\n g h | 6 ++----\n 3 files changed, 6 insertions(+), 12 deletions(-)\n\ndiff --git a/b.c b/b.c\nindex 0d8560f..81a0f74 100644\n--- a/b.c\n+++ b/b.c\n@@ -1,4 +1,4 @@\n-b.c\n+b.c CHANGED\n 1\n 2\n 3\n@@ -6,6 +6,4 @@ b.c\n 5\n 6\n[stage] Press '<Enter>' to jump to file diff - line 1 of 65                  27%\nEOF\n\nassert_equals 'unstaged-changes-default-title.screen' <<EOF\n b.c | 6 ++----\n e/f | 6 ++----\n g h | 6 ++----\n 3 files changed, 6 insertions(+), 12 deletions(-)\n\ndiff --git a/b.c b/b.c\nindex 0d8560f..81a0f74 100644\n--- a/b.c\n+++ b/b.c\n@@ -1,4 +1,4 @@\n-b.c\n+b.c CHANGED\n 1\n 2\n 3\n@@ -6,6 +6,4 @@ b.c\n 5\n 6\n[stage] Unstaged changes - line 4 of 65                                      27%\nEOF\n\nassert_equals 'unstaged-changes-staged-bc-line.screen' <<EOF\n b.c | 5 +----\n e/f | 6 ++----\n g h | 6 ++----\n 3 files changed, 5 insertions(+), 12 deletions(-)\n\ndiff --git a/b.c b/b.c\nindex 0262107..81a0f74 100644\n--- a/b.c\n+++ b/b.c\n@@ -1,4 +1,3 @@\n-b.c\n b.c CHANGED\n 1\n 2\n@@ -7,6 +6,4 @@ b.c CHANGED\n 5\n 6\n 7\n[stage] Unstaged changes to 'b.c' - line 12 of 64                            28%\nEOF\n\nassert_equals 'unstaged-changes-staged-bc-chunk.screen' <<EOF\n b.c | 4 +---\n e/f | 6 ++----\n g h | 6 ++----\n 3 files changed, 5 insertions(+), 11 deletions(-)\n\ndiff --git a/b.c b/b.c\nindex f16e197..81a0f74 100644\n--- a/b.c\n+++ b/b.c\n@@ -6,6 +6,4 @@ b.c CHANGED\n 5\n 6\n 7\n-8\n-9\n-10\n\\ No newline at end of file\n+8\n[stage] Unstaged changes to 'b.c' - line 12 of 59                            30%\nEOF\n\nassert_equals 'unstaged-changes-staged-bc-last-chunk.screen' <<EOF\n e/f | 6 ++----\n g h | 6 ++----\n 2 files changed, 4 insertions(+), 8 deletions(-)\n\ndiff --git a/e/f b/e/f\nindex 7a93606..8cee1bb 100644\n--- a/e/f\n+++ b/e/f\n@@ -1,4 +1,4 @@\n-e/f\n+e/f CHANGED\n 1\n 2\n 3\n@@ -6,6 +6,4 @@ e/f\n 5\n 6\n 7\n[stage] Unstaged changes to 'e/f' - line 12 of 44                            40%\nEOF\n\nassert_equals 'unstaged-changes-staged-all.screen' <<EOF\nOn branch master\nChanges to be committed:\nM .j\nM a\nM b.c\nM e/f\nM g h\nChanges not staged for commit:\n  (no files)\nUntracked files:\n  (no files)\n\n\n\n\n\n\n\n[status] Press u to unstage 'e/f' for commit                                100%\nEOF\n"
  },
  {
    "path": "test/stage/gh-410-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=12\n\nsteps '\n\t:save-display status-before.screen\n\n\t:5\n\t:enter\n\t:maximize\n\t:save-display unstaged-changes.screen\n\n\t:10\n\t:stage-update-line\n\t:save-display status-after.screen\n'\n\ngit_init\n\ntest_setup_work_dir()\n{\n\tprintf 'Hello\\n' > hello.txt\n\tgit add .\n\tgit_commit -m \"first commit\"\n\tprintf 'Hello2\\n' >> hello.txt\n}\n\ntest_tig status\n\nassert_equals 'status-before.screen' <<EOF\nOn branch master\nChanges to be committed:\n  (no files)\nChanges not staged for commit:\nM hello.txt\nUntracked files:\n  (no files)\n\n\n\n[status] Nothing to update                                                  100%\nEOF\n\nassert_equals 'unstaged-changes.screen' <<EOF\n hello.txt | 1 +\n 1 file changed, 1 insertion(+)\n\ndiff --git a/hello.txt b/hello.txt\nindex e965047..7197273 100644\n--- a/hello.txt\n+++ b/hello.txt\n@@ -1 +1,2 @@\n Hello\n+Hello2\n[stage] Press '<Enter>' to jump to file diff - line 1 of 10                 100%\nEOF\n\nassert_equals 'status-after.screen' <<EOF\nOn branch master\nChanges to be committed:\nM hello.txt\nChanges not staged for commit:\n  (no files)\nUntracked files:\n  (no files)\n\n\n\n[status] Press u to unstage 'hello.txt' for commit                          100%\nEOF\n"
  },
  {
    "path": "test/stage/maximized-unstaged-changes-test",
    "content": "#!/bin/sh\n#\n# Test main view display of index changes and interaction with the stage view.\n\n. libtest.sh\n. libgit.sh\n\n# Set timestamp to return from gettimeofday-like stub.\nexport TEST_TIME_NOW=1401046937\n\n# The default formatted date of the above timestamp.\nYYY_MM_DD_HH_MM=\"2014-05-25 19:42\"\n\nexport LINES=12\n\nsteps '\n\t:enter\n\t:save-display split.screen\n\t:view-diff\n\t:save-display maximized.screen\n'\n\ntigrc <<EOF\nset vertical-split = no\nset vertical-split = horizontal\nEOF\n\nin_work_dir create_dirty_workdir\n\ntest_tig\n\nassert_equals 'split.screen' <<EOF\n$YYY_MM_DD_HH_MM +0000 Not Committed Yet o Unstaged changes\n2009-02-13 23:31 +0000 A. U. Thor        I [master] Initial commit\n \n[main] Unstaged changes                                                     100%\n .j  | 6 ++----\n a   | 6 ++----\n b.c | 6 ++----\n e/f | 6 ++----\n g h | 6 ++----\n 5 files changed, 10 insertions(+), 20 deletions(-)\n[stage] Press '<Enter>' to jump to file diff - line 1 of 107                  5%\nEOF\n\nassert_equals 'maximized.screen' <<EOF\n .j  | 6 ++----\n a   | 6 ++----\n b.c | 6 ++----\n e/f | 6 ++----\n g h | 6 ++----\n 5 files changed, 10 insertions(+), 20 deletions(-)\n \ndiff --git a/.j b/.j\nindex e697dfd..9d8ef3d 100644\n--- a/.j\n[stage] Press '<Enter>' to jump to file diff - line 1 of 107                  9%\nEOF\n"
  },
  {
    "path": "test/stage/split-chunk-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=35\n\nsteps '\n\t:6\n\t:enter\n\t:maximize\n\t:save-display default-diff.screen\n\n\t:12\n\t:stage-split-chunk\n\t:save-display split-diff.screen\n'\n\nin_work_dir create_dirty_workdir\nin_work_dir sh -c 'printf \"a CHANGED\\n1\\n2\\nedited-too\\n4\\n5\\nedited-too\\n7\\n8\" > a'\n\ntest_tig status\n\nassert_equals 'default-diff.screen' <<EOF\n a | 10 ++++------\n 1 file changed, 4 insertions(+), 6 deletions(-)\n\ndiff --git a/a b/a\nindex 12d1d9e..931fee6 100644\n--- a/a\n+++ b/a\n@@ -1,11 +1,9 @@\n-a\n+a CHANGED\n 1\n 2\n-3\n+edited-too\n 4\n 5\n-6\n+edited-too\n 7\n-8\n-9\n-10\n\\ No newline at end of file\n+8\n\\ No newline at end of file\n\n\n\n\n\n\n\n\n[stage] Press '<Enter>' to jump to file diff - line 1 of 25                 100%\nEOF\n\nassert_equals 'split-diff.screen' <<EOF\n a | 10 ++++------\n 1 file changed, 4 insertions(+), 6 deletions(-)\n\ndiff --git a/a b/a\nindex 12d1d9e..931fee6 100644\n--- a/a\n+++ b/a\n@@ -1,3 +1,3 @@\n-a\n+a CHANGED\n 1\n 2\n@@ -2,5 +2,5 @@\n 1\n 2\n-3\n+edited-too\n 4\n 5\n@@ -5,4 +5,4 @@\n 4\n 5\n-6\n+edited-too\n 7\n@@ -8,4 +8,1 @@\n 7\n-8\n-9\n-10\n\\ No newline at end of file\n+8\n\\ No newline at end of file\n[stage] Unstaged changes to 'a' - line 12 of 33                             100%\nEOF\n"
  },
  {
    "path": "test/stage/update-part-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=35\n\nsteps '\n\t:6\n\t:enter\n\t:maximize\n\t:save-display default-diff.screen\n\n\t:13\n\t:stage-update-part\n\t:save-display update-part-any.screen\n\n\t:9\n\t:stage-update-part\n\t:save-display update-part-first.screen\n\n\t:15\n\t:stage-update-part\n\t:save-display update-part-last.screen\n\n\t:12\n\t:stage-update-part\n\t:save-display update-part-single.screen\n'\n\nin_work_dir create_dirty_workdir\nin_work_dir sh -c 'printf \"a CHANGED\\n1\\n2\\nedited-too\\n4\\n5\\nedited-too\\n7\\n8\" > a'\n\ntest_tig status\n\nassert_equals 'default-diff.screen' <<EOF\n a | 10 ++++------\n 1 file changed, 4 insertions(+), 6 deletions(-)\n\ndiff --git a/a b/a\nindex 12d1d9e..931fee6 100644\n--- a/a\n+++ b/a\n@@ -1,11 +1,9 @@\n-a\n+a CHANGED\n 1\n 2\n-3\n+edited-too\n 4\n 5\n-6\n+edited-too\n 7\n-8\n-9\n-10\n\\ No newline at end of file\n+8\n\\ No newline at end of file\n\n\n\n\n\n\n\n\n[stage] Press '<Enter>' to jump to file diff - line 1 of 25                 100%\nEOF\n\nassert_equals 'update-part-any.screen' <<EOF\n a | 8 +++-----\n 1 file changed, 3 insertions(+), 5 deletions(-)\n\ndiff --git a/a b/a\nindex 622c590..931fee6 100644\n--- a/a\n+++ b/a\n@@ -1,11 +1,9 @@\n-a\n+a CHANGED\n 1\n 2\n edited-too\n 4\n 5\n-6\n+edited-too\n 7\n-8\n-9\n-10\n\\ No newline at end of file\n+8\n\\ No newline at end of file\n\n\n\n\n\n\n\n\n\n[stage] Unstaged changes to 'a' - line 13 of 24                             100%\nEOF\n\nassert_equals 'update-part-first.screen' <<EOF\n a | 6 ++----\n 1 file changed, 2 insertions(+), 4 deletions(-)\n\ndiff --git a/a b/a\nindex e37b402..931fee6 100644\n--- a/a\n+++ b/a\n@@ -4,8 +4,6 @@ a CHANGED\n edited-too\n 4\n 5\n-6\n+edited-too\n 7\n-8\n-9\n-10\n\\ No newline at end of file\n+8\n\\ No newline at end of file\n\n\n\n\n\n\n\n\n\n\n\n\n\n[stage] Unstaged changes to 'a' - line 9 of 20                              100%\nEOF\n\nassert_equals 'update-part-last.screen' <<EOF\n a | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/a b/a\nindex 56081f5..931fee6 100644\n--- a/a\n+++ b/a\n@@ -4,6 +4,6 @@ a CHANGED\n edited-too\n 4\n 5\n-6\n+edited-too\n 7\n 8\n\\ No newline at end of file\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[stage] Unstaged changes to 'a' - line 15 of 16                             100%\nEOF\n\nassert_equals 'update-part-single.screen' <<EOF\nOn branch master\nChanges to be committed:\nM a\nChanges not staged for commit:\nM .j\nM b.c\nM e/f\nM g h\nUntracked files:\n  (no files)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[status] Press u to stage 'b.c' for commit                                  100%\nEOF\n"
  },
  {
    "path": "test/stash/start-on-line-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\ntest_setup_work_dir()\n{\n\tcreate_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\tfile .git/logs/refs/stash <<EOF\nEOF\n\tfor i in $(seq 1 10); do\n\t\tprintf '%s\\n' \"$i\" > \"stashed-file-$i\"\n\t\tgit stash save -q -u \"Stash #$i\"\n\tdone\n}\n\nsteps '\n\t:save-display position.screen\n'\n\ntigrc <<EOF\nset stash-view\t= line-number:no,interval=5 id:no author:full commit-title\nEOF\n\ntest_tig stash +42\n\nassert_equals 'position.screen' <<EOF\nCommitter On master: Stash #10\nCommitter On master: Stash #9\nCommitter On master: Stash #8\nCommitter On master: Stash #7\nCommitter On master: Stash #6\nCommitter On master: Stash #5\nCommitter On master: Stash #4\nCommitter On master: Stash #3\nCommitter On master: Stash #2\nCommitter On master: Stash #1\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[stash] stash@{9} - stash 10 of 10                                          100%\nEOF\n"
  },
  {
    "path": "test/status/file-name-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=15\nexport COLUMNS=120\n\nsteps '\n\t:save-display status-with-untracked.screen\n\n\t:7\n\t:enter\n\t:save-display status-with-file-0.screen\n\t:status-update\n\t:view-close\n\n\t:8\n\t:enter\n\t:save-display status-with-file-1.screen\n\t:status-update\n\t:save-display status-with-file-2.screen\n\t:view-close\n\n\t:7\n\t:status-update\n\n\t:9\n\t:enter\n\t:save-display status-with-file-3.screen\n'\n\ngit_init\n\ntouch -- \"$work_dir/0\"\n\nfile \"$work_dir/a\" <<EOF\nø\nå\n12\n\nå\nø\nEOF\n\nfile \"$work_dir/as测试asd\" <<EOF\n我\n树\n漢\nEOF\n\ntouch -- \"$work_dir/øå\"\ntouch -- \"$work_dir/可愛いコー特集\"\n\ntest_tig status\n\nassert_equals 'status-with-untracked.screen' <<EOF\nInitial commit\nChanges to be committed:\n  (no files)\nChanges not staged for commit:\n  (no files)\nUntracked files:\n? 0\n? a\n? as测试asd\n? øå\n? 可愛いコー特集\n\n\n[status] Nothing to update                                                                                          100%\nEOF\n\nassert_equals 'status-with-file-0.screen' <<EOF\nInitial commit                                              |\nChanges to be committed:                                    |\n  (no files)                                                |\nChanges not staged for commit:                              |\n  (no files)                                                |\nUntracked files:                                            |\n? 0                                                         |\n? a                                                         |\n? as测试asd                                                 |\n? øå                                                        |\n? 可愛いコー特集                                            |\n                                                            |\n                                                            |\n[status] Press u to stage '0' for addition              100%|[stage] Untracked file 0                                 0%\nEOF\n\nassert_equals 'status-with-file-1.screen' <<EOF\nInitial commit                                              |ø\nChanges to be committed:                                    |å\n  (no files)                                                |12\nChanges not staged for commit:                              |\n  (no files)                                                |å\nUntracked files:                                            |ø\n? 0                                                         |\n? a                                                         |\n? as测试asd                                                 |\n? øå                                                        |\n? 可愛いコー特集                                            |\n                                                            |\n                                                            |\n[status] Press u to stage 'a' for addition              100%|[stage] Untracked file a - line 1 of 6                 100%\nEOF\n\nassert_equals 'status-with-file-2.screen' <<EOF\nInitial commit                                              |我\nChanges to be committed:                                    |树\nA a                                                         |漢\nChanges not staged for commit:                              |\n  (no files)                                                |\nUntracked files:                                            |\n? 0                                                         |\n? as测试asd                                                 |\n? øå                                                        |\n? 可愛いコー特集                                            |\n                                                            |\n                                                            |\n                                                            |\n[status] Press u to stage 'as测试asd' for addition      100%|[stage] Untracked file as测试asd - line 1 of 3         100%\nEOF\n\nassert_equals 'status-with-file-3.screen' <<EOF\nInitial commit                                              |\nChanges to be committed:                                    |\nA 0                                                         |\nA a                                                         |\nChanges not staged for commit:                              |\n  (no files)                                                |\nUntracked files:                                            |\n? as测试asd                                                 |\n? øå                                                        |\n? 可愛いコー特集                                            |\n                                                            |\n                                                            |\n                                                            |\n[status] Press u to stage 'øå' for addition             100%|[stage] Untracked file øå                                0%\nEOF\n"
  },
  {
    "path": "test/status/file-var-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=16\n\nsteps '\n\t:save-display before-rm-file.screen\n\t:/e/f\n\t:exec @rm %(file)\n\t:0\n\t:save-display after-rm-file.screen\n'\n\ntigrc <<EOF\nset vertical-split = no\nEOF\n\nin_work_dir create_dirty_workdir\n\nwork_dir=\"$work_dir/e\"\ntest_tig status\n\nassert_equals 'before-rm-file.screen' <<EOF\nOn branch master\nChanges to be committed:\n  (no files)\nChanges not staged for commit:\nM .j\nM a\nM b.c\nM e/f\nM g h\nUntracked files:\n  (no files)\n\n\n\n[status] Nothing to update                                                  100%\nEOF\n\nassert_equals 'after-rm-file.screen' <<EOF\nOn branch master\nChanges to be committed:\n  (no files)\nChanges not staged for commit:\nM .j\nM a\nM b.c\nD e/f\nM g h\nUntracked files:\n  (no files)\n\n\n\n[status] Nothing to update                                                  100%\nEOF\n"
  },
  {
    "path": "test/status/on-branch-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nrequire_git_version 2.26 \"Requires merge backend for non-interactive rebase\"\n\nexport LINES=10\n\ntest_setup_work_dir()\n{\n\tcreate_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\tgit checkout -b topic-branch HEAD~4\n\tprintf 'Topic branch\\n' >> README.md\n\tgit add README.md\n\tgit_commit -m \"Topic branch\"\n\tgit checkout master\n\n\tgit checkout -b conflict-branch HEAD~4\n\tgit rm -f run.sh\n\tgit_commit -m \"Conflict branch\"\n\tgit checkout master\n\n\tgit tag v0.2 HEAD~20\n\tgit branch v0.2-branch v0.2\n\n\tgit format-patch -1 conflict-branch --stdout > \"$HOME/mailbox\"\n}\n\ntest_case on-branch-master \\\n\t--args='status' \\\n\t--before='git checkout master' <<EOF\nOn branch master\nChanges to be committed:\n  (no files)\nChanges not staged for commit:\n  (no files)\nUntracked files:\n  (no files)\n\n[status] Nothing to update                                                  100%\nEOF\n\ntest_case bisecting-master \\\n\t--args='status' \\\n\t--before=\"git bisect start master\" \\\n\t--after=\"git bisect reset\" <<EOF\nBisecting master\nChanges to be committed:\n  (no files)\nChanges not staged for commit:\n  (no files)\nUntracked files:\n  (no files)\n\n[status] Nothing to update                                                  100%\nEOF\n\ntest_case on-detached-head \\\n\t--args='status' \\\n\t--before=\"git checkout HEAD~10\" \\\n\t--after=\"git checkout master\" \\\n<<EOF\nHEAD detached at 988c77aad5798f1e087e5d7efe3b3319ee6de744\nChanges to be committed:\n  (no files)\nChanges not staged for commit:\n  (no files)\nUntracked files:\n  (no files)\n\n[status] Nothing to update                                                  100%\nEOF\n\ntest_case on-detached-tag \\\n\t--args='status' \\\n\t--before=\"git checkout v0.2\" \\\n\t--after=\"git checkout master\" \\\n<<EOF\nHEAD detached at v0.2\nChanges to be committed:\n  (no files)\nChanges not staged for commit:\n  (no files)\nUntracked files:\n  (no files)\n\n[status] Nothing to update                                                  100%\nEOF\n\ntest_case merging-master \\\n\t--args='status' \\\n\t--before=\"git merge conflict-branch\n\t\t  true\" \\\n\t--after=\"git reset --hard\" \\\n<<EOF\nMerging master\nChanges to be committed:\n  (no files)\nChanges not staged for commit:\nU run.sh\nUntracked files:\n  (no files)\n\n[status] Nothing to update                                                  100%\nEOF\n\ntest_case rebasing-master \\\n\t--args='status' \\\n\t--before=\"git checkout conflict-branch\n\t\t  git rebase master\n\t\t  true\" \\\n\t--after=\" git rebase --abort\n\t\t  git checkout master\" \\\n<<EOF\nInteractive rebase conflict-branch\nChanges to be committed:\n  (no files)\nChanges not staged for commit:\nU run.sh\nUntracked files:\n  (no files)\n\n[status] Nothing to update                                                  100%\nEOF\n\ntest_case applying-mailbox-to-master \\\n\t--args='status' \\\n\t--before=\"git am $HOME/mailbox\n\t\t  true\" \\\n\t--after=\"git am --abort\" \\\n<<EOF\nApplying mailbox to master\nChanges to be committed:\n  (no files)\nChanges not staged for commit:\n  (no files)\nUntracked files:\n  (no files)\n\n[status] Nothing to update                                                  100%\nEOF\n\ntest_case interactive-rebase-of-branch \\\n\t--args='status' \\\n\t--before=\"git checkout conflict-branch\n\t\t  git rebase -i master\n\t\t  true\" \\\n\t--after=\" git rebase --abort\n\t\t  git checkout master\" \\\n<<EOF\nInteractive rebase conflict-branch\nChanges to be committed:\n  (no files)\nChanges not staged for commit:\nU run.sh\nUntracked files:\n  (no files)\n\n[status] Nothing to update                                                  100%\nEOF\n\nrun_test_cases\n\nadd_exec_prefix()\n{\n\tcode=\"$(cat < \"$1\")\"\n\tif [ -n \"$code\" ]; then\n\t\tprintf '%s\\n' \"$code\" | sed -e 's/^[ \t]*//' -e '/^$/d' -e 's/^/:exec @/'\n\tfi\n}\n\ntig_script \"all\" \"\n\t$(while read -r name; do\n\t\tadd_exec_prefix \"$name-before\"\n\t\tprintf ':save-display all-%s.screen\\n' \"$name\"\n\t\tadd_exec_prefix \"$name-after\"\n\tdone < test-cases)\n\"\n\ntest_timeout 60\n\ntest_tig status\n\nwhile read -r name; do\n\tassert_equals \"all-$name.screen\" < \"$name.expected\"\ndone < test-cases\n"
  },
  {
    "path": "test/status/on-branch-tracking-info-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=10\n\ntest_setup_work_dir()\n{\n\tcreate_repo_from_tgz \"$base_dir/files/refs-repo.tgz\"\n\n\tgit checkout -b ahead\n\tprintf 'test\\n' > test.txt\n\tgit add test.txt\n\tgit_commit -m \"Ahead branch\"\n\tgit checkout master\n\n\tgit checkout -b diverged HEAD~2\n\tprintf 'test\\n' > test.txt\n\tgit add test.txt\n\tgit_commit -m \"Diverged branch\"\n\tgit checkout master\n}\n\ntest_case up-to-date-with-remote-master \\\n\t--args='status' <<EOF\nOn branch master. Your branch is up-to-date with 'origin/master'.\nChanges to be committed:\n  (no files)\nChanges not staged for commit:\n  (no files)\nUntracked files:\n  (no files)\n\n[status] Nothing to update                                                  100%\nEOF\n\ntest_case behind-remote-master \\\n\t--args='status' \\\n\t--before=\"git reset --hard HEAD~2\" \\\n\t--after=\"git reset --hard origin/master\" <<EOF\nOn branch master. Your branch is behind 'origin/master' by 2 commits.\nChanges to be committed:\n  (no files)\nChanges not staged for commit:\n  (no files)\nUntracked files:\n  (no files)\n\n[status] Nothing to update                                                  100%\nEOF\n\ntest_case ahead-of-remote-master \\\n\t--args='status' \\\n\t--before=\"git merge ahead\" \\\n\t--after=\"git reset --hard origin/master\" <<EOF\nOn branch master. Your branch is ahead of 'origin/master' by 1 commit.\nChanges to be committed:\n  (no files)\nChanges not staged for commit:\n  (no files)\nUntracked files:\n  (no files)\n\n[status] Nothing to update                                                  100%\nEOF\n\ntest_case diverged-from-remote-master \\\n\t--args='status' \\\n\t--before=\"git reset --hard diverged\" \\\n\t--after=\"git reset --hard origin/master\" <<EOF\nOn branch master. Your branch and 'origin/master' have diverged, and have 1 and\nChanges to be committed:\n  (no files)\nChanges not staged for commit:\n  (no files)\nUntracked files:\n  (no files)\n\n[status] Nothing to update                                                  100%\nEOF\n\nrun_test_cases\n\nadd_exec_prefix()\n{\n\tcode=\"$(cat < \"$1\")\"\n\tif [ -n \"$code\" ]; then\n\t\tprintf '%s\\n' \"$code\" | sed -e 's/^[ \t]*//' -e '/^$/d' -e 's/^/:exec @/'\n\tfi\n}\n\ntig_script \"all\" \"\n\t$(while read -r name; do\n\t\tadd_exec_prefix \"$name-before\"\n\t\tprintf ':save-display all-%s.screen\\n' \"$name\"\n\t\tadd_exec_prefix \"$name-after\"\n\tdone < test-cases)\n\"\n\ntest_timeout 60\n\ntest_tig status\n\nwhile read -r name; do\n\tassert_equals \"all-$name.screen\" < \"$name.expected\"\ndone < test-cases\n"
  },
  {
    "path": "test/status/refresh-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=15\n\nsteps '\n\t:view-status\n\t:save-display status-with-unstaged.screen\n\n\t:exec !git add a\n\t:save-display status-after-add-a.screen\n\n\t:exec @git add -u\n\t:save-display status-after-add-all.screen\n\n\t:exec !git commit -m \"Commit changes\"\n\t:save-display status-after-commit.screen\n\n\t:exec @git reset --soft HEAD^\n\t:save-display status-after-reset-soft.screen\n\n\t:exec !git reset a b.c\n\t:save-display status-after-reset-a-and-bc.screen\n\n\t:8\n\t:exec @git checkout -- %(file)\n\t:save-display status-after-checkout-bc.screen\n\n\t:exec !git reset --hard\n\t:save-display status-after-reset-hard.screen\n\n\t:exec !touch new-file\n\t:save-display status-after-touch-new-file.screen\n\n\t:exec @rm a\n\t:save-display status-after-rm-a.screen\n\n\t:5\n\t:exec @git checkout -- %(file)\n\t:save-display status-after-checkout-a.screen\n\n'\n\ntigrc <<EOF\nset refresh-mode = after-command\nEOF\n\nin_work_dir create_dirty_workdir\n\nexport GIT_AUTHOR_DATE=\"$(expr \"$author_date\" + \"$author_date_delta\")\"\nexport GIT_COMMITTER_DATE=\"$GIT_AUTHOR_DATE\"\n\ntest_tig\n\nassert_equals 'status-with-unstaged.screen' <<EOF\nOn branch master\nChanges to be committed:\n  (no files)\nChanges not staged for commit:\nM .j\nM a\nM b.c\nM e/f\nM g h\nUntracked files:\n  (no files)\n\n\n[status] Nothing to update                                                  100%\nEOF\n\nassert_equals 'status-after-add-a.screen' <<EOF\nOn branch master\nChanges to be committed:\nM a\nChanges not staged for commit:\nM .j\nM b.c\nM e/f\nM g h\nUntracked files:\n  (no files)\n\n\n\n[status] Nothing to update                                                  100%\nEOF\n\nassert_equals 'status-after-add-all.screen' <<EOF\nOn branch master\nChanges to be committed:\nM .j\nM a\nM b.c\nM e/f\nM g h\nChanges not staged for commit:\n  (no files)\nUntracked files:\n  (no files)\n\n\n[status] Nothing to update                                                  100%\nEOF\n\nassert_equals 'status-after-commit.screen' <<EOF\nOn branch master\nChanges to be committed:\n  (no files)\nChanges not staged for commit:\n  (no files)\nUntracked files:\n  (no files)\n\n\n\n\n\n\n[status] Nothing to update                                                  100%\nEOF\n\nassert_equals 'status-after-reset-soft.screen' <<EOF\nOn branch master\nChanges to be committed:\nM .j\nM a\nM b.c\nM e/f\nM g h\nChanges not staged for commit:\n  (no files)\nUntracked files:\n  (no files)\n\n\n[status] Nothing to update                                                  100%\nEOF\n\nassert_equals 'status-after-reset-a-and-bc.screen' <<EOF\nOn branch master\nChanges to be committed:\nM .j\nM e/f\nM g h\nChanges not staged for commit:\nM a\nM b.c\nUntracked files:\n  (no files)\n\n\n\n[status] Nothing to update                                                  100%\nEOF\n\nassert_equals 'status-after-checkout-bc.screen' <<EOF\nOn branch master\nChanges to be committed:\nM .j\nM e/f\nM g h\nChanges not staged for commit:\nM a\nUntracked files:\n  (no files)\n\n\n\n\n[status] Press u to stage 'a' for commit                                    100%\nEOF\n\nassert_equals 'status-after-reset-hard.screen' <<EOF\nOn branch master\nChanges to be committed:\n  (no files)\nChanges not staged for commit:\n  (no files)\nUntracked files:\n  (no files)\n\n\n\n\n\n\n[status] Nothing to update                                                  100%\nEOF\n\nassert_equals 'status-after-touch-new-file.screen' <<EOF\nOn branch master\nChanges to be committed:\n  (no files)\nChanges not staged for commit:\n  (no files)\nUntracked files:\n? new-file\n\n\n\n\n\n\n[status] Nothing to update                                                  100%\nEOF\n\nassert_equals 'status-after-rm-a.screen' <<EOF\nOn branch master\nChanges to be committed:\n  (no files)\nChanges not staged for commit:\nD a\nUntracked files:\n? new-file\n\n\n\n\n\n\n[status] Nothing to update                                                  100%\nEOF\n\nassert_equals 'status-after-checkout-a.screen' <<EOF\nOn branch master\nChanges to be committed:\n  (no files)\nChanges not staged for commit:\n  (no files)\nUntracked files:\n? new-file\n\n\n\n\n\n\n[status] Press u to stage 'new-file' for addition                           100%\nEOF\n"
  },
  {
    "path": "test/status/repo-var-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=10\n\nsteps \"\n\t:exec !assert-var '%(repo:head)' == master\n\t:exec !assert-var '%(repo:head-id)' == feeb2dfd5e09e887e4b6c901e7d91a4c85a7831d\n\t:exec !assert-var '%(repo:remote)' == origin\n\t:exec !assert-var '%(repo:upstream)' == origin/master\n\t:exec !assert-var '%(repo:cdup)' == ../\n\t:exec !assert-var '%(repo:prefix)' == repo-two-a/\n\t:exec !assert-var '%(repo:git-dir)' == '$HOME/$work_dir/.git'\n\t:exec !assert-var '%(repo:is-inside-work-tree)' == true\n\t:save-display status.screen\n\"\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/repo-two.tgz\"\n\nwork_dir=\"$work_dir/repo-two-a\"\ntest_tig status\n\nassert_equals status.screen <<EOF\nOn branch master. Your branch is up-to-date with 'origin/master'.\nChanges to be committed:\n  (no files)\nChanges not staged for commit:\n  (no files)\nUntracked files:\n  (no files)\n\n[status] Nothing to update                                                  100%\nEOF\n\nassert_vars 8\n"
  },
  {
    "path": "test/status/start-on-line-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\nin_work_dir rm .git/index\n\nsteps '\n\t:save-display position.screen\n'\n\ntest_tig status +42\n\nassert_equals 'position.screen' <<EOF\nD tracer/index.html\nD tracer/run.sh\nD tracer/src/main/scala/org/scalajs/benchmark/tracer/App.scala\nD tracer/src/main/scala/org/scalajs/benchmark/tracer/Color.scala\nD tracer/src/main/scala/org/scalajs/benchmark/tracer/Engine.scala\nD tracer/src/main/scala/org/scalajs/benchmark/tracer/Material.scala\nD tracer/src/main/scala/org/scalajs/benchmark/tracer/RenderScene.scala\nD tracer/src/main/scala/org/scalajs/benchmark/tracer/Scene.scala\nD tracer/src/main/scala/org/scalajs/benchmark/tracer/Shapes.scala\nD tracer/src/main/scala/org/scalajs/benchmark/tracer/Tracer.scala\nD tracer/src/main/scala/org/scalajs/benchmark/tracer/Vector.scala\nChanges not staged for commit:\n  (no files)\nUntracked files:\n? .gitignore\n? LICENSE\n? README.md\n? common/benchmark-runner.sh\n? common/build.sbt\n? common/d8-stubs.js\n? common/reference/bench.js\n? common/reference/deltablue.js\n? common/reference/richards.js\n? common/reference/tracer.js\n? common/src/main/scala/org/scalajs/benchmark/Benchmark.scala\n? common/src/main/scala/org/scalajs/benchmark/BenchmarkApp.scala\n? common/src/main/scala/org/scalajs/benchmark/dom/DOMTypes.scala\n? common/start-benchmark.js\n[status] Press u to stage '.gitignore' for addition                          70%\nEOF\n"
  },
  {
    "path": "test/status/submodule-editor-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=14\nexport COLUMNS=140\n\ntigrc <<EOF\nset line-graphics = ascii\nset stage-view-line-number = yes\nEOF\n\nsteps '\n\t:exec !assert-var [%(repo:worktree)] == [../../../bench]\n\t:/README.md\n\t:enter\n\t:12\n\t:save-display status.screen\n\t:edit\n'\n\nsetup_submodule_project()\n{\n\tmkdir -p \"$output_dir/base\"\n\tcd \"$output_dir/base\"\n\tcreate_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\tcd \"$output_dir\"\n\tgit_init\n\tcd \"$output_dir/$work_dir\"\n\tgit -c protocol.file.allow=always submodule add \"$output_dir/base\" bench\n\tgit_commit -m \"Adding benchmark\"\n\techo CHANGE >> bench/README.md\n}\n\ntest_exec_work_dir setup_submodule_project\nwork_dir=\"$work_dir/bench/common/src\"\n\ntest_tig status\n\nassert_vars 1\n\nassert_equals 'status.screen' <<EOF\nOn branch master. Your branch is up-to-date with 'origin/master'.     |  1|  README.md | 1 +\nChanges to be committed:                                              |   |  1 file changed, 1 insertion(+)\n  (no files)                                                          |   |\nChanges not staged for commit:                                        |   | diff --git a/README.md b/README.md\nM README.md                                                           |  5| index 0883330..86d6f04 100644\nUntracked files:                                                      |   | --- a/README.md\n  (no files)                                                          |   | +++ b/README.md\n                                                                      |   | @@ -60,3 +60,4 @@ script as an alternative to \\`window\\` to export\n                                                                      |   |  various startup code.  This allows the benchmarks to run both i\n                                                                      | 10|  browser and in the \\`d8\\` (the V8 shell), which does not define g\n                                                                      |   |  objects like \\`window\\`.\n                                                                      |   | +CHANGE\n[status] Press u to stage 'README.md' for commit                  100%|[stage] Unstaged changes to 'README.md' - line 12 of 12          100%\nEOF\n\nassert_equals 'editor.log' <<EOF\n+63 README.md\nCHANGE\nEOF"
  },
  {
    "path": "test/status/untracked-files-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=22\n\ntigrc <<EOF\nset vertical-split = no\nEOF\n\ntest_setup_work_dir() {\n\tcreate_dirty_workdir\n\tmkdir dir-a dir-b dir-c\n\tfor i in $(seq 1 5); do\n\t\ttouch \"root.$i\"\n\tdone\n\tfor i in $(seq 1 3); do\n\t\ttouch \"dir-a/aa.$i\"\n\tdone\n\tfor i in $(seq 1 1); do\n\t\ttouch \"dir-b/bb.$i\"\n\tdone\n}\n\ntest_case 'initial' \\\n\t--args='status' \\\n<<EXPECTED_SCREEN\nOn branch master\nChanges to be committed:\n  (no files)\nChanges not staged for commit:\nM .j\nM a\nM b.c\nM e/f\nM g h\nUntracked files:\n? dir-a/aa.1\n? dir-a/aa.2\n? dir-a/aa.3\n? dir-b/bb.1\n? root.1\n? root.2\n? root.3\n? root.4\n? root.5\n\n[status] Nothing to update                                                  100%\nEXPECTED_SCREEN\n\ntest_case 'inside-dir-a' \\\n\t--args='status' \\\n\t--cwd='dir-a' \\\n<<EXPECTED_SCREEN\nOn branch master\nChanges to be committed:\n  (no files)\nChanges not staged for commit:\nM .j\nM a\nM b.c\nM e/f\nM g h\nUntracked files:\n? dir-a/aa.1\n? dir-a/aa.2\n? dir-a/aa.3\n? dir-b/bb.1\n? root.1\n? root.2\n? root.3\n? root.4\n? root.5\n\n[status] Nothing to update                                                  100%\nEXPECTED_SCREEN\n\ntest_case 'status-show-untracked-files-option-off' \\\n\t--args='status' \\\n\t--script=':toggle status-show-untracked-files' \\\n<<EXPECTED_SCREEN\nOn branch master\nChanges to be committed:\n  (no files)\nChanges not staged for commit:\nM .j\nM a\nM b.c\nM e/f\nM g h\nUntracked files:\n  (not shown)\n\n\n\n\n\n\n\n\n\n[status] Nothing to update                                                  100%\nEXPECTED_SCREEN\n\nrun_test_cases\n"
  },
  {
    "path": "test/status/worktree-editor-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=14\nexport COLUMNS=140\n\ntigrc <<EOF\nset line-graphics = ascii\nset stage-view-line-number = yes\nEOF\n\nsteps '\n\t:exec !assert-var [%(repo:worktree)] == []\n\t:/README.md\n\t:enter\n\t:12\n\t:save-display status.screen\n\t:edit\n'\n\nsetup_worktree_project()\n{\n\tmkdir -p \"$output_dir/base\"\n\tcd \"$output_dir/base\"\n\tcreate_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\tgit branch work-branch ee912870202200a0b9cf4fd86ba57243212d341e\n\tgit worktree add \"$output_dir/$work_dir\" work-branch\n\techo CHANGE >> \"$output_dir/$work_dir/README.md\"\n}\n\ntest_exec_work_dir setup_worktree_project\nwork_dir=\"$work_dir/common/src\"\n\ntest_tig status\n\nassert_vars 1\n\nassert_equals 'status.screen' <<EOF\nOn branch work-branch                                                 |  1|  README.md | 1 +\nChanges to be committed:                                              |   |  1 file changed, 1 insertion(+)\n  (no files)                                                          |   |\nChanges not staged for commit:                                        |   | diff --git a/README.md b/README.md\nM README.md                                                           |  5| index 0883330..86d6f04 100644\nUntracked files:                                                      |   | --- a/README.md\n  (no files)                                                          |   | +++ b/README.md\n                                                                      |   | @@ -60,3 +60,4 @@ script as an alternative to \\`window\\` to export\n                                                                      |   |  various startup code.  This allows the benchmarks to run both i\n                                                                      | 10|  browser and in the \\`d8\\` (the V8 shell), which does not define g\n                                                                      |   |  objects like \\`window\\`.\n                                                                      |   | +CHANGE\n[status] Press u to stage 'README.md' for commit                  100%|[stage] Unstaged changes to 'README.md' - line 12 of 12          100%\nEOF\n\nassert_equals 'editor.log' <<EOF\n+63 README.md\nCHANGE\nEOF\n"
  },
  {
    "path": "test/status/worktree-test",
    "content": "#!/bin/sh\n#\n# Test for GitHub issue #437\n\n. libtest.sh\n. libgit.sh\n\ntest_require git-worktree\n\nexport LINES=9\n\ntest_setup_work_dir()\n{\n\tcreate_worktree\n}\n\nsteps '\n\t:save-display worktree.screen\n'\n\ntest_tig status\n\nassert_equals 'worktree.screen' <<EOF\nOn branch dev\nChanges to be committed:\n  (no files)\nChanges not staged for commit:\n  (no files)\nUntracked files:\n  (no files)\n[status] Nothing to update                                                  100%\nEOF\n"
  },
  {
    "path": "test/tigrc/builtin-error-test",
    "content": "#!/bin/sh\n#\n# Verify that the built-in config does not contain any errors.\n\n. libtest.sh\n\nsteps \":quit\"\n\ntest_tig status\n\nassert_equals stderr <<EOF\nEOF\n"
  },
  {
    "path": "test/tigrc/builtin-save-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n\nexport TIGRC_SYSTEM=/dev/null\n\ntigrc <<EOF\nbind generic : prompt\nEOF\n\nsteps ':save-options'\n\ntest_tig status\n\nassert_equals stderr <<EOF\nEOF\n"
  },
  {
    "path": "test/tigrc/command-value-long-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n\nexport COLUMNS=80\nexport LINES=20\n\ntigrc <<EOF\nbind generic _ :!sh -c '\\\necho 00000000000000000000000000000000000000000000000000000000000000000000000000000000; \\\necho 11111111111111111111111111111111111111111111111111111111111111111111111111111111; \\\necho 22222222222222222222222222222222222222222222222222222222222222222222222222222222; \\\necho 33333333333333333333333333333333333333333333333333333333333333333333333333333333; \\\necho 44444444444444444444444444444444444444444444444444444444444444444444444444444444; \\\necho 55555555555555555555555555555555555555555555555555555555555555555555555555555555; \\\necho 66666666666666666666666666666666666666666666666666666666666666666666666666666666; \\\necho 77777777777777777777777777777777777777777777777777777777777777777777777777777777; \\\necho 88888888888888888888888888888888888888888888888888888888888888888888888888888888; \\\necho 99999999999999999999999999999999999999999999999999999999999999999999999999999999; \\\necho AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA; \\\necho BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB; \\\necho CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC; \\\necho DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD; \\\necho EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE; \\\necho FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;'\nEOF\n\nsteps '\n\t_\n\t:save-display pager.screen\n'\n\ntest_tig status\n\nassert_equals stderr <<EOF\nEOF\n\nassert_equals 'pager.screen' <<EOF\n00000000000000000000000000000000000000000000000000000000000000000000000000000000\n11111111111111111111111111111111111111111111111111111111111111111111111111111111\n22222222222222222222222222222222222222222222222222222222222222222222222222222222\n33333333333333333333333333333333333333333333333333333333333333333333333333333333\n44444444444444444444444444444444444444444444444444444444444444444444444444444444\n55555555555555555555555555555555555555555555555555555555555555555555555555555555\n66666666666666666666666666666666666666666666666666666666666666666666666666666666\n77777777777777777777777777777777777777777777777777777777777777777777777777777777\n88888888888888888888888888888888888888888888888888888888888888888888888888888888\n99999999999999999999999999999999999999999999999999999999999999999999999999999999\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\nCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC\nDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD\nEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE\nFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\n\n\n[pager] sh -c echo 00000000000000000000000000000000000000000000000000000000 100%\nEOF\n"
  },
  {
    "path": "test/tigrc/compat-error-test",
    "content": "#!/bin/sh\n#\n# Check error messages for renamed settings, actions and colours in\n# tigrc.\n\n. libtest.sh\n\ntigrc <<EOF\nset show-date\t\t\t= default\nset show-author\t\t\t= full\nset author-width\t\t= 18\nset show-filename\t\t= auto\nset filename-width\t\t= 18\nset show-file-size\t\t= default\nset show-rev-graph\t\t= yes\nset show-line-numbers\t\t= no\nset line-number-interval\t= 5\nset show-refs\t\t\t= yes\nset show-id\t\t\t= no\nset title-overflow\t\t= no\nset read-git-colors\t\t= yes\n\n# Renamed to view-refs\nbind generic\tB\tview-blame\n\n# Keymap renamed to refs\nbind branch\t[\trefresh\n\n# Changes in key parsing\nbind generic\tEnter\tenter\nbind generic\t<\tback\nbind generic\t^N\tnext\nbind generic\t^[v\tmove-page-up\nbind generic\tF5\trefresh\n\n# Replaced by prompt commands - ':/' and ':toggle'\nbind stage\t@\tstage-next\nbind stage\t[\tdiff-context-down\nbind stage\t]\tdiff-context-up\nbind diff\t[\tdiff-context-down\nbind diff\t]\tdiff-context-up\nbind generic\t.\ttoggle-lineno\nbind generic\tD\ttoggle-date\nbind generic\tA\ttoggle-author\nbind generic\tg\ttoggle-rev-graph\nbind generic\t~\ttoggle-graphic\nbind generic\tH\ttoggle-filename\nbind generic\tF\ttoggle-refs\nbind generic\t?\ttoggle-show-changes\nbind generic\tI\ttoggle-sort-order\nbind generic\ti\ttoggle-sort-field\nbind generic\tW\ttoggle-ignore-space\nbind generic\t?\ttoggle-commit-order\nbind generic\tX\ttoggle-id\nbind generic\t%\ttoggle-files\nbind generic\t$\ttoggle-title-overflow\nbind generic\t?\ttoggle-file-size\nbind generic\t?\ttoggle-untracked-dirs\n\n# Removed\ncolor main-revgraph\t\tmagenta\tdefault\n\n# Consolidated\ncolor tree-head\t\t\tdefault\tdefault\tbold\ncolor tree-dir\t\t\tyellow\tdefault\tnormal\ncolor tree-file\t\t\tdefault\tdefault\tnormal\ncolor stat-head\t\t\tyellow\tdefault\ncolor stat-section\t\tcyan\tdefault\ncolor help-keymap\t\tcyan\tdefault\n\n# Replaced by '*-view-date-local' flag\nset main-view-date\t\t= local\nset main-view-date-local\t= true\n\n# Replaced by '*-view-date-custom' flag\nset main-view-date\t\t= short\nset main-view-date\t\t= custom\nset main-view-date-format\t= \"%Y-%m-%d %H:%M\"\n\nset cmdline-args = --all\n\nset status-untracked-dirs = true\nEOF\n\nsteps \":quit\"\n\ntest_tig status\n\nassert_equals stderr <<EOF\ntig warning: ~/.tigrc:1: show-date is obsolete; see tigrc(5) for how to set the date column option\ntig warning: ~/.tigrc:2: show-author is obsolete; see tigrc(5) for how to set the author column option\ntig warning: ~/.tigrc:3: author-width is obsolete; see tigrc(5) for how to set the author column option\ntig warning: ~/.tigrc:4: show-filename is obsolete; see tigrc(5) for how to set the file-name column option\ntig warning: ~/.tigrc:5: filename-width is obsolete; see tigrc(5) for how to set the file-name column option\ntig warning: ~/.tigrc:6: show-file-size is obsolete; see tigrc(5) for how to set the file-size column option\ntig warning: ~/.tigrc:7: show-rev-graph is obsolete; see tigrc(5) for how to set the commit-title column option\ntig warning: ~/.tigrc:8: show-line-numbers is obsolete; see tigrc(5) for how to set the line-number column option\ntig warning: ~/.tigrc:9: line-number-interval is obsolete; see tigrc(5) for how to set the line-number column option\ntig warning: ~/.tigrc:10: show-refs is obsolete; see tigrc(5) for how to set the commit-title column option\ntig warning: ~/.tigrc:11: show-id is obsolete; see tigrc(5) for how to set the id column option\ntig warning: ~/.tigrc:12: title-overflow is obsolete; see tigrc(5) for how to set the commit-title and text column option\ntig warning: ~/.tigrc:13: read-git-colors has been obsoleted by the git-colors option\ntig warning: ~/.tigrc:23: Missing '>' from key mapping: <\ntig warning: ~/.tigrc:24: Control key mapping must now use '<Ctrl-N>' instead of '^N'\ntig warning: ~/.tigrc:25: Escape key combo must now use '<Esc>v' instead of '^[v'\ntig warning: ~/.tigrc:29: stage-next has been replaced by \\`:/^@@'\ntig warning: ~/.tigrc:30: diff-context-down has been replaced by \\`:toggle diff-context -1'\ntig warning: ~/.tigrc:31: diff-context-up has been replaced by \\`:toggle diff-context +1'\ntig warning: ~/.tigrc:32: diff-context-down has been replaced by \\`:toggle diff-context -1'\ntig warning: ~/.tigrc:33: diff-context-up has been replaced by \\`:toggle diff-context +1'\ntig warning: ~/.tigrc:34: toggle-lineno has been replaced by \\`:toggle line-number'\ntig warning: ~/.tigrc:35: toggle-date has been replaced by \\`:toggle date'\ntig warning: ~/.tigrc:36: toggle-author has been replaced by \\`:toggle author'\ntig warning: ~/.tigrc:37: toggle-rev-graph has been replaced by \\`:toggle commit-title-graph'\ntig warning: ~/.tigrc:38: toggle-graphic has been replaced by \\`:toggle show-graphic'\ntig warning: ~/.tigrc:39: toggle-filename has been replaced by \\`:toggle filename'\ntig warning: ~/.tigrc:40: toggle-refs has been replaced by \\`:toggle commit-title-refs'\ntig warning: ~/.tigrc:41: toggle-show-changes has been replaced by \\`:toggle show-changes'\ntig warning: ~/.tigrc:42: toggle-sort-order has been replaced by \\`:toggle sort-order'\ntig warning: ~/.tigrc:43: toggle-sort-field has been replaced by \\`:toggle sort-field'\ntig warning: ~/.tigrc:44: toggle-ignore-space has been replaced by \\`:toggle show-ignore-space'\ntig warning: ~/.tigrc:45: toggle-commit-order has been replaced by \\`:toggle show-commit-order'\ntig warning: ~/.tigrc:46: toggle-id has been replaced by \\`:toggle id'\ntig warning: ~/.tigrc:47: toggle-files has been replaced by \\`:toggle file-filter'\ntig warning: ~/.tigrc:48: toggle-title-overflow has been replaced by \\`:toggle commit-title-overflow'\ntig warning: ~/.tigrc:49: toggle-file-size has been replaced by \\`:toggle file-size'\ntig warning: ~/.tigrc:50: toggle-untracked-dirs has been replaced by \\`:toggle status-show-untracked-dirs'\ntig warning: ~/.tigrc:53: main-revgraph is obsolete\ntig warning: ~/.tigrc:56: tree-head has been replaced by tree.header\ntig warning: ~/.tigrc:57: tree-dir has been replaced by tree.directory\ntig warning: ~/.tigrc:58: tree-file has been replaced by tree.file\ntig warning: ~/.tigrc:59: stat-head has been replaced by status.header\ntig warning: ~/.tigrc:60: stat-section has been replaced by status.section\ntig warning: ~/.tigrc:61: help-keymap has been replaced by help.section\ntig warning: ~/.tigrc:64: 'local' is no longer supported for date-display, use the 'date-local' column option\ntig warning: ~/.tigrc:68: 'short' is no longer supported for date-display, use the 'custom' display mode and set 'date-format'\ntig warning: ~/.tigrc:72: cmdline-args is obsolete; use view-specific options instead, e.g. main-options\ntig warning: ~/.tigrc:74: status-untracked-dirs has been renamed to status-show-untracked-dirs\ntig warning: Errors while loading HOME/.tigrc.\nEOF\n"
  },
  {
    "path": "test/tigrc/contrib-tigrc-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n\nCONTRIB_PATH=\"$base_dir/../contrib/\"\n\nsource_tigrc_files()\n{\n\tfind \"$CONTRIB_PATH\" -name \"*.tigrc\" -exec printf \"source %s\\n\" \"{}\" \\;\n}\n\ntigrc <<EOF\n$(source_tigrc_files)\nEOF\n\nsteps \":quit\"\n\ntest_tig status\n\nmv stderr stderr.orig\nsed \"s#$CONTRIB_PATH#TIGRC_REPO/contrib#\" < stderr.orig > stderr\n\nassert_equals stderr <<EOF\nEOF\n"
  },
  {
    "path": "test/tigrc/env-vars-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n\nexport LINES=8\n\n# Disable built-in configuration\nexport TIGRC_SYSTEM=does-not-exist\n\n# Use non-default user configuration\nexport TIGRC_USER=\"$HOME/.tigrc.safe\"\n\nfile \"$HOME/.tigrc.safe\" <<EOF\nbind generic : prompt\t\t# Must have prompt mapping to execute script\nEOF\n\ntigrc <<EOF\nThis will generate an error if Tig reads this file instead of $TIGRC_USER.\nAsserted with the empty stderr below.\nEOF\n\nsteps \"\n\t:view-help\n\t:save-display help.screen\n\"\n\ntest_tig status\n\nassert_equals stderr <<EOF\nEOF\n\nassert_equals help.screen <<EOF\nQuick reference for tig keybindings:\n[-] Collapse all sections\n\n[-] generic bindings\nMisc\n  : prompt Open the prompt\n[help] - line 1 of 26                                                        23%\nEOF\n"
  },
  {
    "path": "test/tigrc/escape-var-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\ntigrc <<EOF\nbind generic 1 @sh -c \"echo '%%(refname)=%(refname) %%%%%%(refname)=%%%(refname)' > $HOME/shell-command.txt\"\nEOF\n\nsteps '\n\t1\n'\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\ntest_tig\n\nassert_equals 'shell-command.txt' <<EOF\n%(refname)=master %%%(refname)=%master\nEOF\n"
  },
  {
    "path": "test/tigrc/parse-test",
    "content": "#!/bin/sh\n#\n# Test tigrc parsing errors.\n\n. libtest.sh\n\nexport LINES=20\n\ntigrc <<EOF\ns\t\t\t\t# Unknown command\nset\t\t\t\t# Missing name, equals and value\nset ignore-space\t\t# Missing equals and value\nset ignore-space =\t\t# Missing value\nset ignore-space=no\t\t# Missing space\nset something = jada\t\t# Unknown settings name\nset ignore-space = jada\t\t# Bad enum value\nset tab-size = long\t\t# Bad int value\nset split-view-height = half\t# Bad scale value\nset split-view-height = 110%\t# Bad scale value\nset split-view-height = -10%\t# Bad scale value\n\nbind\t\t\t\t# Missing map, key and action\nbind generic\t\t\t# Missing key and action\nbind generic B\t\t\t# Missing action\nbind generic # refresh\t\t# Must use Hash instead of '#'\n\ncolor\t\t\t\t# Missing area and colors\ncolor file\t\t\t# Missing colors\ncolor grep.file\t\t\t# Missing colors\ncolor file green\t\t# Missing fg color\ncolor file green bold\t\t# Attribute used as fg color\ncolor file dark green\t\t# Unknown color\ncolor file green dark\t\t# Unknown color\ncolor file green green normally # Unknown attribute\n\n# Test that lines continue correctly \\\\\nignored \\\\\n\nset main-view = \\\\\n\tline-number \\\\\n\tcommit-title\t\t# Multi-line option\n\nset main_view_line_number_visibility = yes\n\nbind generic \" edit\nbind generic ' options\nbind generic \" @sh -c \"echo %(commit) | pbcopy\"\nbind generic ' !sh -c 'git | tig'\n\nbind generic : prompt\t\t# Must have prompt mapping\nbind generic ø view-tree\t# Binding to UTF-8 keys\nbind main <Hash> :/s e a r c h\t# Toggle option\nbind main 1 !external command\nbind main 2 @silent command\nbind main 3 ?prompted command\nbind main 4 <quitting command\nbind main 5 +echoed command\nbind main 0 !@?<+all modifiers\n\n# Non-ending multi-line command\nc\\\\\no\\\\\nl\\\\\no\\\\\nr\\\\\nEOF\n\nsteps \"\n\t:view-help\n\t:9\n\t:enter\n\t:save-display help.screen\n\"\n\nTIGRC_SYSTEM=\"should-not-be-loaded\"\n\ntest_tig status\n\nassert_equals stderr <<EOF\ntig warning: ~/.tigrc:1: Unknown option command: s\ntig warning: ~/.tigrc:2: Invalid set command: set option = value\ntig warning: ~/.tigrc:3: Invalid set command: set option = value\ntig warning: ~/.tigrc:4: Invalid set command: set option = value\ntig warning: ~/.tigrc:5: Invalid set command: set option = value\ntig warning: ~/.tigrc:6: Unknown option name: something\ntig warning: ~/.tigrc:7: 'jada' is not a valid value for ignore-space; using no\ntig warning: ~/.tigrc:8: Value must be between 1 and 1024\ntig warning: ~/.tigrc:9: Invalid double or percentage\ntig warning: ~/.tigrc:10: Percentage is larger than 100%\ntig warning: ~/.tigrc:11: Percentage is less than 0%\ntig warning: ~/.tigrc:13: Invalid key binding: bind keymap key action\ntig warning: ~/.tigrc:14: Invalid key binding: bind keymap key action\ntig warning: ~/.tigrc:15: Invalid key binding: bind keymap key action\ntig warning: ~/.tigrc:16: Invalid key binding: bind keymap key action\ntig warning: ~/.tigrc:18: Invalid color mapping: color area fgcolor bgcolor [attrs]\ntig warning: ~/.tigrc:19: Invalid color mapping: color area fgcolor bgcolor [attrs]\ntig warning: ~/.tigrc:20: Invalid color mapping: color area fgcolor bgcolor [attrs]\ntig warning: ~/.tigrc:21: Invalid color mapping: color area fgcolor bgcolor [attrs]\ntig warning: ~/.tigrc:22: Unknown color: bold\ntig warning: ~/.tigrc:23: Unknown color: dark\ntig warning: ~/.tigrc:24: Unknown color: dark\ntig warning: ~/.tigrc:25: Unknown color attribute: normally\ntig warning: ~/.tigrc:34: Unknown option \\`visibility' for column line-number\ntig warning: ~/.tigrc:36: Invalid key binding: bind keymap key action\ntig warning: ~/.tigrc:37: Invalid key binding: bind keymap key action\ntig warning: ~/.tigrc:38: Unknown command flag '%'; expected one of :!?@<+>\ntig warning: ~/.tigrc:39: Unknown command flag '|'; expected one of :!?@<+>\ntig warning: ~/.tigrc:57: Unknown option command: c\ntig warning: Errors while loading HOME/.tigrc.\nEOF\n\nassert_equals help.screen <<EOF\nQuick reference for tig keybindings:\n[-] Collapse all sections\n\n[-] generic bindings\nView switching\n   ø view-tree Show tree view\nMisc\n   : prompt    Open the prompt\n[-] main bindings\nInternal commands:\n   # :/s e a r c h\nExternal commands:\n   1 !external command\n   2 @silent command\n   3 ?prompted command\n   4 <quitting command\n   5 +echoed command\n   0 @?<+all modifiers\n[help] - line 9 of 38                                                        47%\nEOF\n"
  },
  {
    "path": "test/tigrc/quote-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nLINES=3\n\ntigrc <<EOF\nbind generic 1 !@sh -c \"echo \\\"double \\$@\\\" 'quoted' \\\"shell command\\\" > $HOME/shell-command.txt\"\nbind generic 2 !@sh -c 'echo \\'single \\'\\$@ \"quoted\" \\'shell command\\' >> $HOME/shell-command.txt'\n\nbind generic 3 :!echo git log \"%(prompt Prompt: )\"\nbind generic 4 :!echo git log -G\"%(prompt Prompt: )\"\nbind generic 5 :!echo git log -G' \\' \"\\\" \\\\\\a\\b'\nbind generic 6 :!echo git log -G\"'\\'  \\\" \\\\\\a\\b\"\nEOF\n\nsteps \"\n\t1\n\t2\n\n\t3\n\t|Quoted 'prompt' input|<Enter>\n\t:save-display quoted-prompt-with-spaces.screen\n\t4\n\t|\\\"Mid-quoted\\\" prompt input|<Enter>\n\t:save-display mid-quoted-prompt-with-spaces.screen\n\t5\n\t:save-display single-quoted-arg-with-escaped-chars.screen\n\t6\n\t:save-display double-quoted-arg-with-escaped-chars.screen\n\"\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\ntest_tig\n\nassert_equals stderr <<EOF\nEOF\n\nassert_equals 'shell-command.txt' <<EOF\ndouble quoted shell command\nsingle quoted shell command\nEOF\n\nassert_equals 'quoted-prompt-with-spaces.screen' <<EOF\ngit log |Quoted 'prompt' input|\n[pager] echo git log |Quoted 'prompt' input| - line 1 of 1                  100%\nEOF\n\nassert_equals 'mid-quoted-prompt-with-spaces.screen' <<EOF\ngit log -G|\"Mid-quoted\" prompt input|\n[pager] echo git log -G|\"Mid-quoted\" prompt input| - line 1 of 1            100%\nEOF\n\nassert_equals 'single-quoted-arg-with-escaped-chars.screen' <<EOF\ngit log -G ' \"\" \\\\ab\n[pager] echo git log -G ' \"\" \\\\ab - line 1 of 1                              100%\nEOF\n\nassert_equals 'double-quoted-arg-with-escaped-chars.screen' <<EOF\ngit log -G''  \" \\\\ab\n[pager] echo git log -G''  \" \\\\ab - line 1 of 1                              100%\nEOF\n"
  },
  {
    "path": "test/tigrc/save-option-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n\nsteps \"\n\t:save-options saved-tigrc\n\"\n\ntest_tig status\ncp stderr stderr.1\n\nsteps \"\n\t:save-options check-tigrc\n\"\n\nTIGRC_USER=\"$HOME/saved-tigrc\" test_tig status\ncp stderr stderr.2\n\ncat stderr.* > stderr\n\nassert_equals stderr <<EOF\nEOF\n\nassert_equals \"saved-tigrc\" <<EOF\n$(cat check-tigrc)\nEOF\n"
  },
  {
    "path": "test/tigrc/source-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n\nexport LINES=10\n\n# Disable built-in configuration\nexport TIGRC_SYSTEM=does-not-exist\n\nfile \"$HOME/.tigrc.bind.q.for.help.screen\" <<EOF\nbind generic q quit\nEOF\n\ntest_case source-file-plain \\\n\t--args='status' \\\n\t--tigrc=\"\n\t\tbind generic : prompt\n\t\tsource $HOME/.tigrc.bind.q.for.help.screen\n\t\t\" \\\n\t--script=\"\n\t\t:view-help\n\t\t\" \\\n\t<<EOF\nQuick reference for tig keybindings:\n[-] Collapse all sections\n\n[-] generic bindings\nView manipulation\n  q quit   Close all views and quit\nMisc\n  : prompt Open the prompt\n[help] - line 1 of 28                                                        28%\nEOF\n\ntest_case source-file-quietly \\\n\t--args='status' \\\n\t--tigrc=\"\n\t\tbind generic : prompt\n\t\tsource -q $HOME/.tigrc.bind.q.for.help.screen\n\t\t\" \\\n\t--script=\"\n\t\t:view-help\n\t\t\" \\\n\t<<EOF\nQuick reference for tig keybindings:\n[-] Collapse all sections\n\n[-] generic bindings\nView manipulation\n  q quit   Close all views and quit\nMisc\n  : prompt Open the prompt\n[help] - line 1 of 28                                                        28%\nEOF\n\ntest_case source-nonexistent-file \\\n\t--args='status' \\\n\t--tigrc=\"\n\t\tbind generic : prompt\n\t\tsource $HOME/.tigrc.nonexistent.file\n\t\t\" \\\n\t--script=\"\n\t\t:view-help\n\t\t\" \\\n\t--assert-stderr=\"tig warning: ~/.tigrc:3: File does not exist: HOME/.tigrc.nonexistent.file\ntig warning: Errors while loading HOME/.tigrc.\" \\\n\t<<EOF\nQuick reference for tig keybindings:\n[-] Collapse all sections\n\n[-] generic bindings\nMisc\n  : prompt Open the prompt\n[-] toggle bindings\nToggle keys (enter: o <key>):\n[help] - line 1 of 26                                                        30%\nEOF\n\ntest_case source-nonexistent-file-quietly \\\n\t--args='status' \\\n\t--tigrc=\"\n\t\tbind generic : prompt\n\t\tsource -q $HOME/.tigrc.nonexistent.file\n\t\t\" \\\n\t--script=\"\n\t\t:view-help\n\t\t\" \\\n\t<<EOF\nQuick reference for tig keybindings:\n[-] Collapse all sections\n\n[-] generic bindings\nMisc\n  : prompt Open the prompt\n[-] toggle bindings\nToggle keys (enter: o <key>):\n[help] - line 1 of 26                                                        30%\nEOF\n\ntest_case source-tilde-path \\\n\t--args='status' \\\n\t--tigrc=\"\n\t\tbind generic : prompt\n\t\tsource ~/.tigrc.bind.q.for.help.screen\n\t\t\" \\\n\t--script=\"\n\t\t:view-help\n\t\t\" \\\n\t<<EOF\nQuick reference for tig keybindings:\n[-] Collapse all sections\n\n[-] generic bindings\nView manipulation\n  q quit   Close all views and quit\nMisc\n  : prompt Open the prompt\n[help] - line 1 of 28                                                        28%\nEOF\n\nrun_test_cases\n"
  },
  {
    "path": "test/tigrc/tigrc-manpage-examples-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n\nsteps \":quit\"\n\nmkdir -p snippets\n\nout_file=\n\nwhile read -r line; do\n\tcase \"$line\" in\n\t\t\"// TEST: tigrc\")\n\t\t\tout_file=\"$(mktemp snippets/tigrc.XXXXXX)\"\n\t\t\t;;\n\t\t\"// TEST: gitconfig\")\n\t\t\tout_file=\"$(mktemp snippets/gitconfig.XXXXXX)\"\n\t\t\t;;\n\t\t\"--------------\"*)\n\t\t\tif [ -s \"$out_file\" ]; then\n\t\t\t\tout_file=\n\t\t\telif [ -e \"$out_file\" ]; then\n\t\t\t\tprintf '\\n' >> \"$out_file\"\n\t\t\tfi\n\t\t\t;;\n\t\t*)\n\t\t\tif [ -e \"$out_file\" ]; then\n\t\t\t\tprintf '%s\\n' \"$line\" >> \"$out_file\"\n\t\t\tfi\n\t\t\t;;\n\tesac\ndone < \"$base_dir/../doc/tigrc.5.adoc\"\n\n# Create files used by the `source` example\nmkdir -p .tig\ntouch .tig/colorscheme.tigrc .tig/keybindings.tigrc\n\ntigrc <<EOF\n$(find snippets -name \"tigrc.*\" -exec cat -- \"{}\" \\;)\nEOF\n\ngitconfig <<EOF\n$(find snippets -name \"gitconfig.*\" -exec cat -- \"{}\" \\;)\nEOF\n\ntest_tig status\n\nassert_equals stderr <<EOF\nEOF\n"
  },
  {
    "path": "test/tigrc/truncation-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=16\nexport COLUMNS=100\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\ntest_case delimiter-default \\\n\t--tigrc='\n\tset line-graphics = ascii\n\tset grep-view = file-name:yes,width=5 line-number:yes,interval=1 text\n\t' \\\n\t--script='\n\t:g\n\tsource<Enter>\n\t:refresh\n\t' \\\n\t<<EOF\nLICE~   5| Redistribution and use in source and binary forms, with or without modification,\nLICE~   8|     * Redistributions of source code must retain the above copyright notice,\nREAD~  27| time you save a source file, a compilation of the project is triggered.\ncomm~ 633|  * Extract a plan for resatisfaction starting from the given source\ncomm~ 649|  * Assume: sources are all satisfied.\ncomm~ 651| Planner.prototype.makePlan = function (sources) {\ncomm~ 654|   var todo = sources;\ncomm~ 671|   var sources = new OrderedCollection();\ncomm~ 676|       sources.add(c);\ncomm~ 678|   return this.makePlan(sources);\ncomm~   2| // Redistribution and use in source and binary forms, with or without\ncomm~   6| //     * Redistributions of source code must retain the above copyright\ncomm~  45| Object.extend = function(destination, source) {\ncomm~  46|   for (var property in source) {\n[grep] LICENSE - line 1 of 24                                                                    58%\nEOF\n\ntest_case delimiter-literal \\\n\t--tigrc='\n\tset line-graphics = ascii\n\tset grep-view = file-name:yes,width=5 line-number:yes,interval=1 text\n\tset truncation-delimiter = _\n\t' \\\n\t--script='\n\t:g\n\tsource<Enter>\n\t:refresh\n\t' \\\n\t<<EOF\nLICE_   5| Redistribution and use in source and binary forms, with or without modification,\nLICE_   8|     * Redistributions of source code must retain the above copyright notice,\nREAD_  27| time you save a source file, a compilation of the project is triggered.\ncomm_ 633|  * Extract a plan for resatisfaction starting from the given source\ncomm_ 649|  * Assume: sources are all satisfied.\ncomm_ 651| Planner.prototype.makePlan = function (sources) {\ncomm_ 654|   var todo = sources;\ncomm_ 671|   var sources = new OrderedCollection();\ncomm_ 676|       sources.add(c);\ncomm_ 678|   return this.makePlan(sources);\ncomm_   2| // Redistribution and use in source and binary forms, with or without\ncomm_   6| //     * Redistributions of source code must retain the above copyright\ncomm_  45| Object.extend = function(destination, source) {\ncomm_  46|   for (var property in source) {\n[grep] LICENSE - line 1 of 24                                                                    58%\nEOF\n\ntest_case delimiter-quoted-literal \\\n\t--tigrc='\n\tset line-graphics = ascii\n\tset grep-view = file-name:yes,width=5 line-number:yes,interval=1 text\n\tset truncation-delimiter = \"_\"\n\t' \\\n\t--script='\n\t:g\n\tsource<Enter>\n\t:refresh\n\t' \\\n\t<<EOF\nLICE_   5| Redistribution and use in source and binary forms, with or without modification,\nLICE_   8|     * Redistributions of source code must retain the above copyright notice,\nREAD_  27| time you save a source file, a compilation of the project is triggered.\ncomm_ 633|  * Extract a plan for resatisfaction starting from the given source\ncomm_ 649|  * Assume: sources are all satisfied.\ncomm_ 651| Planner.prototype.makePlan = function (sources) {\ncomm_ 654|   var todo = sources;\ncomm_ 671|   var sources = new OrderedCollection();\ncomm_ 676|       sources.add(c);\ncomm_ 678|   return this.makePlan(sources);\ncomm_   2| // Redistribution and use in source and binary forms, with or without\ncomm_   6| //     * Redistributions of source code must retain the above copyright\ncomm_  45| Object.extend = function(destination, source) {\ncomm_  46|   for (var property in source) {\n[grep] LICENSE - line 1 of 24                                                                    58%\nEOF\n\ntest_case delimiter-empty-fallback \\\n\t--tigrc='\n\tset line-graphics = ascii\n\tset grep-view = file-name:yes,width=5 line-number:yes,interval=1 text\n\tset truncation-delimiter = \"\"\n\t' \\\n\t--script='\n\t:g\n\tsource<Enter>\n\t:refresh\n\t' \\\n\t<<EOF\nLICE~   5| Redistribution and use in source and binary forms, with or without modification,\nLICE~   8|     * Redistributions of source code must retain the above copyright notice,\nREAD~  27| time you save a source file, a compilation of the project is triggered.\ncomm~ 633|  * Extract a plan for resatisfaction starting from the given source\ncomm~ 649|  * Assume: sources are all satisfied.\ncomm~ 651| Planner.prototype.makePlan = function (sources) {\ncomm~ 654|   var todo = sources;\ncomm~ 671|   var sources = new OrderedCollection();\ncomm~ 676|       sources.add(c);\ncomm~ 678|   return this.makePlan(sources);\ncomm~   2| // Redistribution and use in source and binary forms, with or without\ncomm~   6| //     * Redistributions of source code must retain the above copyright\ncomm~  45| Object.extend = function(destination, source) {\ncomm~  46|   for (var property in source) {\n[grep] LICENSE - line 1 of 24                                                                    58%\nEOF\n\ntest_case delimiter-too-long-fallback \\\n\t--tigrc='\n\tset line-graphics = ascii\n\tset grep-view = file-name:yes,width=5 line-number:yes,interval=1 text\n\tset truncation-delimiter = multicharacter\n\t' \\\n\t--script='\n\t:g\n\tsource<Enter>\n\t:refresh\n\t' \\\n\t<<EOF\nLICE~   5| Redistribution and use in source and binary forms, with or without modification,\nLICE~   8|     * Redistributions of source code must retain the above copyright notice,\nREAD~  27| time you save a source file, a compilation of the project is triggered.\ncomm~ 633|  * Extract a plan for resatisfaction starting from the given source\ncomm~ 649|  * Assume: sources are all satisfied.\ncomm~ 651| Planner.prototype.makePlan = function (sources) {\ncomm~ 654|   var todo = sources;\ncomm~ 671|   var sources = new OrderedCollection();\ncomm~ 676|       sources.add(c);\ncomm~ 678|   return this.makePlan(sources);\ncomm~   2| // Redistribution and use in source and binary forms, with or without\ncomm~   6| //     * Redistributions of source code must retain the above copyright\ncomm~  45| Object.extend = function(destination, source) {\ncomm~  46|   for (var property in source) {\n[grep] LICENSE - line 1 of 24                                                                    58%\nEOF\n\ntest_case delimiter-special-value \\\n\t--tigrc='\n\tset line-graphics = ascii\n\tset grep-view = file-name:yes,width=5 line-number:yes,interval=1 text\n\tset truncation-delimiter = utf8\n\t' \\\n\t--script='\n\t:g\n\tsource<Enter>\n\t:refresh\n\t' \\\n\t<<EOF\nLICE⋯   5| Redistribution and use in source and binary forms, with or without modification,\nLICE⋯   8|     * Redistributions of source code must retain the above copyright notice,\nREAD⋯  27| time you save a source file, a compilation of the project is triggered.\ncomm⋯ 633|  * Extract a plan for resatisfaction starting from the given source\ncomm⋯ 649|  * Assume: sources are all satisfied.\ncomm⋯ 651| Planner.prototype.makePlan = function (sources) {\ncomm⋯ 654|   var todo = sources;\ncomm⋯ 671|   var sources = new OrderedCollection();\ncomm⋯ 676|       sources.add(c);\ncomm⋯ 678|   return this.makePlan(sources);\ncomm⋯   2| // Redistribution and use in source and binary forms, with or without\ncomm⋯   6| //     * Redistributions of source code must retain the above copyright\ncomm⋯  45| Object.extend = function(destination, source) {\ncomm⋯  46|   for (var property in source) {\n[grep] LICENSE - line 1 of 24                                                                    58%\nEOF\n\ntest_case delimiter-utf8-literal \\\n\t--tigrc='\n\tset line-graphics = ascii\n\tset grep-view = file-name:yes,width=5 line-number:yes,interval=1 text\n\tset truncation-delimiter = …\n\t' \\\n\t--script='\n\t:g\n\tsource<Enter>\n\t:refresh\n\t' \\\n\t<<EOF\nLICE…   5| Redistribution and use in source and binary forms, with or without modification,\nLICE…   8|     * Redistributions of source code must retain the above copyright notice,\nREAD…  27| time you save a source file, a compilation of the project is triggered.\ncomm… 633|  * Extract a plan for resatisfaction starting from the given source\ncomm… 649|  * Assume: sources are all satisfied.\ncomm… 651| Planner.prototype.makePlan = function (sources) {\ncomm… 654|   var todo = sources;\ncomm… 671|   var sources = new OrderedCollection();\ncomm… 676|       sources.add(c);\ncomm… 678|   return this.makePlan(sources);\ncomm…   2| // Redistribution and use in source and binary forms, with or without\ncomm…   6| //     * Redistributions of source code must retain the above copyright\ncomm…  45| Object.extend = function(destination, source) {\ncomm…  46|   for (var property in source) {\n[grep] LICENSE - line 1 of 24                                                                    58%\nEOF\n\nrun_test_cases\n"
  },
  {
    "path": "test/tigrc/view-column-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=16\n\ntigrc <<EOF\nset line-graphics = ascii\n\n# Default view setting without ID column\nset main-view = line-number:no,interval=5 date:default author:full committer:no commit-title:yes,graph,refs,overflow=no\n\n# Test change of view settings\nset main-view-date = custom\nset main-view-date-format = \"%Y-%m-%d\"\nset main-view-line-number = yes\nset main-view-commit-title = yes,graph,refs=no\n\n# Test change of of view column settings\nset main-view-line-number-interval = 3\nset main-view-author-display = abbreviated\nset main-view-committer-display = email-user\nset main-view-author-width = 12\nset main-view-commit-title-graph = no\n\n# Test set of unconfigured or unknown columns\nset main-view-id = yes\nset main-view-id-width = 12\nset main-view-unknown = short\nset main-view-unknown-display = short\nEOF\n\nsteps '\n\t:save-display main-view.screen\n'\n\ngit_clone 'repo-one'\n\ntest_tig\n\nassert_equals 'main-view.screen' <<EOF\n  1| 2010-04-07 MPower       c.ommitter Commit 10 E\n   | 2010-03-29 JTBrahe      c.ommitter Commit 10 D\n  3| 2010-03-21 作者         c.ommitter Commit 10 C\n   | 2010-03-12 RLévesque    c.ommitter Commit 10 B\n   | 2010-03-04 AUThor       c.ommitter Commit 10 A\n  6| 2010-02-23 MPower       c.ommitter Commit 9 E\n   | 2010-02-15 JTBrahe      c.ommitter Commit 9 D\n   | 2010-02-06 作者         c.ommitter Commit 9 C\n  9| 2010-01-29 RLévesque    c.ommitter Commit 9 B\n   | 2010-01-20 AUThor       c.ommitter Commit 9 A\n   | 2010-01-12 MPower       c.ommitter Commit 8 E\n 12| 2010-01-03 JTBrahe      c.ommitter Commit 8 D\n   | 2009-12-26 作者         c.ommitter Commit 8 C\n   | 2009-12-17 RLévesque    c.ommitter Commit 8 B\n[main] 5cb3412a5e06e506840495b91acc885037a48b72 - commit 1 of 50             28%\nEOF\n\nassert_equals 'stderr' <<EOF\ntig warning: ~/.tigrc:20: The main view does not have a id column configured\ntig warning: ~/.tigrc:21: The main view does not have a id column configured\ntig warning: ~/.tigrc:22: Failed to parse view column type: short\ntig warning: ~/.tigrc:23: Failed to parse view column type: short\ntig warning: Errors while loading HOME/.tigrc.\nEOF\n"
  },
  {
    "path": "test/tigrc/width-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=16\nexport COLUMNS=200\n\ntigrc <<EOF\nset line-graphics = ascii\nEOF\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\n### main-view\n\ntest_case main-widths-default \\\n\t--script='\n\t:set main-view = id:yes line-number:yes,interval=5 date:default,use-author=yes author:full commit-title:yes,graph,refs,overflow=no\n\t:refresh\n\t' \\\n\t<<EOF\nee91287   1| 2014-03-01 17:26 -0500 Jonas Fonseca      * [master] WIP: Upgrade to 0.4-SNAPSHOT and DCE\na1dcf1a    | 2014-03-01 15:59 -0500 Jonas Fonseca      * Add type parameter for js.Dynamic\n296fc90    | 2014-01-16 22:51 -0500 Jonas Fonseca      * Move classes under org.scalajs.benchmark package scope\nb4ad81f    | 2014-01-16 17:43 -0500 Jonas Fonseca      * Bump Scala.js version to 0.3-SNAPSHOT\n4a68cf3   5| 2014-01-16 17:39 -0500 Jonas Fonseca      * Integrate app code into the benchmark infrastructure\ne59a941    | 2014-01-16 07:47 -0800 Jonas Fonseca      M-. Merge pull request #4 from phaller/patch-1\n940efaf    | 2014-01-16 15:32 +0100 Philipp Haller     | * Fix link to Dart benchmark harness\n110e090    | 2013-12-17 00:02 +0100 Jonas Fonseca      *-' Update links to reflect project name change\n894a53e    | 2013-12-03 23:35 -0500 Jonas Fonseca      * Use Scala.js 0.2-SNAPSHOT\nc819b08  10| 2013-11-26 23:39 -0500 Jonas Fonseca      * Extract the benchmark list variable name; fix push to use scoped variable\n5bd6df6    | 2013-11-26 23:31 -0500 Jonas Fonseca      * Solve the easiest sudoku grid\n988c77a    | 2013-11-26 23:22 -0500 Jonas Fonseca      * Disable phantomjs by default\n5d84af0    | 2013-11-26 22:55 -0500 Jonas Fonseca      * Exclude Sudoku when running all benchmarks\n5d80606    | 2013-11-26 22:52 -0500 Jonas Fonseca      * Fix reference setup to work for node\n[main] ee912870202200a0b9cf4fd86ba57243212d341e - commit 1 of 48                                                                                                                                     29%\nEOF\n\ntest_case main-widths-1 \\\n\t--script='\n\t:set main-view = id:yes,width=1 line-number:yes,interval=5,width=1 date:default,width=1 author:full,width=1 commit-title:yes,graph,refs,overflow=no\n\t:refresh\n\t' \\\n\t<<EOF\ne   1| 2 J * [master] WIP: Upgrade to 0.4-SNAPSHOT and DCE\na    | 2 J * Add type parameter for js.Dynamic\n2    | 2 J * Move classes under org.scalajs.benchmark package scope\nb    | 2 J * Bump Scala.js version to 0.3-SNAPSHOT\n4   5| 2 J * Integrate app code into the benchmark infrastructure\ne    | 2 J M-. Merge pull request #4 from phaller/patch-1\n9    | 2 P | * Fix link to Dart benchmark harness\n1    | 2 J *-' Update links to reflect project name change\n8    | 2 J * Use Scala.js 0.2-SNAPSHOT\nc  10| 2 J * Extract the benchmark list variable name; fix push to use scoped variable\n5    | 2 J * Solve the easiest sudoku grid\n9    | 2 J * Disable phantomjs by default\n5    | 2 J * Exclude Sudoku when running all benchmarks\n5    | 2 J * Fix reference setup to work for node\n[main] ee912870202200a0b9cf4fd86ba57243212d341e - commit 1 of 48                                                                                                                                     29%\nEOF\n\ntest_case main-widths-2 \\\n\t--script='\n\t:set main-view = id:yes,width=2 line-number:yes,interval=5,width=2 date:default,width=2 author:full,width=2 commit-title:yes,graph,refs,overflow=no\n\t:refresh\n\t' \\\n\t<<EOF\nee   1| 20 JF * [master] WIP: Upgrade to 0.4-SNAPSHOT and DCE\na1    | 20 JF * Add type parameter for js.Dynamic\n29    | 20 JF * Move classes under org.scalajs.benchmark package scope\nb4    | 20 JF * Bump Scala.js version to 0.3-SNAPSHOT\n4a   5| 20 JF * Integrate app code into the benchmark infrastructure\ne5    | 20 JF M-. Merge pull request #4 from phaller/patch-1\n94    | 20 PH | * Fix link to Dart benchmark harness\n11    | 20 JF *-' Update links to reflect project name change\n89    | 20 JF * Use Scala.js 0.2-SNAPSHOT\nc8  10| 20 JF * Extract the benchmark list variable name; fix push to use scoped variable\n5b    | 20 JF * Solve the easiest sudoku grid\n98    | 20 JF * Disable phantomjs by default\n5d    | 20 JF * Exclude Sudoku when running all benchmarks\n5d    | 20 JF * Fix reference setup to work for node\n[main] ee912870202200a0b9cf4fd86ba57243212d341e - commit 1 of 48                                                                                                                                     29%\nEOF\n\ntest_case main-widths-5 \\\n\t--script='\n\t:set main-view = id:yes,width=5 line-number:yes,interval=5,width=5 date:default,width=5 author:full,width=5 commit-title:yes,graph,refs,overflow=no\n\t:refresh\n\t' \\\n\t<<EOF\nee912     1| 2014- JFons * [master] WIP: Upgrade to 0.4-SNAPSHOT and DCE\na1dcf      | 2014- JFons * Add type parameter for js.Dynamic\n296fc      | 2014- JFons * Move classes under org.scalajs.benchmark package scope\nb4ad8      | 2014- JFons * Bump Scala.js version to 0.3-SNAPSHOT\n4a68c     5| 2014- JFons * Integrate app code into the benchmark infrastructure\ne59a9      | 2014- JFons M-. Merge pull request #4 from phaller/patch-1\n940ef      | 2014- PHall | * Fix link to Dart benchmark harness\n110e0      | 2013- JFons *-' Update links to reflect project name change\n894a5      | 2013- JFons * Use Scala.js 0.2-SNAPSHOT\nc819b    10| 2013- JFons * Extract the benchmark list variable name; fix push to use scoped variable\n5bd6d      | 2013- JFons * Solve the easiest sudoku grid\n988c7      | 2013- JFons * Disable phantomjs by default\n5d84a      | 2013- JFons * Exclude Sudoku when running all benchmarks\n5d806      | 2013- JFons * Fix reference setup to work for node\n[main] ee912870202200a0b9cf4fd86ba57243212d341e - commit 1 of 48                                                                                                                                     29%\nEOF\n\ntest_case main-widths-20 \\\n\t--script='\n\t:set main-view = id:yes,width=20 line-number:yes,interval=5,width=20 date:default,use-author=yes,width=20 author:full,width=20 commit-title:yes,graph,refs,overflow=no\n\t:refresh\n\t' \\\n\t<<EOF\nee912870202200a0b9cf         1| 2014-03-01 17:26 -05 Jonas Fonseca      * [master] WIP: Upgrade to 0.4-SNAPSHOT and DCE\na1dcf1aaa11470978db1          | 2014-03-01 15:59 -05 Jonas Fonseca      * Add type parameter for js.Dynamic\n296fc90ba2c47ba3d2b6          | 2014-01-16 22:51 -05 Jonas Fonseca      * Move classes under org.scalajs.benchmark package scope\nb4ad81f17b4c3fc33ed5          | 2014-01-16 17:43 -05 Jonas Fonseca      * Bump Scala.js version to 0.3-SNAPSHOT\n4a68cf3c338f5724d838         5| 2014-01-16 17:39 -05 Jonas Fonseca      * Integrate app code into the benchmark infrastructure\ne59a941c4e7d51cd172e          | 2014-01-16 07:47 -08 Jonas Fonseca      M-. Merge pull request #4 from phaller/patch-1\n940efafc379db7c6df99          | 2014-01-16 15:32 +01 Philipp Haller     | * Fix link to Dart benchmark harness\n110e090f815f40d649f5          | 2013-12-17 00:02 +01 Jonas Fonseca      *-' Update links to reflect project name change\n894a53e03a017642abdc          | 2013-12-03 23:35 -05 Jonas Fonseca      * Use Scala.js 0.2-SNAPSHOT\nc819b08eb5b05dde4df5        10| 2013-11-26 23:39 -05 Jonas Fonseca      * Extract the benchmark list variable name; fix push to use scoped variable\n5bd6df6603f25ff035f1          | 2013-11-26 23:31 -05 Jonas Fonseca      * Solve the easiest sudoku grid\n988c77aad5798f1e087e          | 2013-11-26 23:22 -05 Jonas Fonseca      * Disable phantomjs by default\n5d84af022bc87ef13c29          | 2013-11-26 22:55 -05 Jonas Fonseca      * Exclude Sudoku when running all benchmarks\n5d80606b72b490e213a0          | 2013-11-26 22:52 -05 Jonas Fonseca      * Fix reference setup to work for node\n[main] ee912870202200a0b9cf4fd86ba57243212d341e - commit 1 of 48                                                                                                                                     29%\nEOF\n\ntest_case main-maxwidths-5 \\\n\t--script='\n\t:set main-view = id:yes,width=5 line-number:yes,interval=5,width=5 date:default,width=5 author:full,maxwidth=5 commit-title:yes,graph,refs,overflow=no\n\t:refresh\n\t' \\\n\t<<EOF\nee912     1| 2014- JFons * [master] WIP: Upgrade to 0.4-SNAPSHOT and DCE\na1dcf      | 2014- JFons * Add type parameter for js.Dynamic\n296fc      | 2014- JFons * Move classes under org.scalajs.benchmark package scope\nb4ad8      | 2014- JFons * Bump Scala.js version to 0.3-SNAPSHOT\n4a68c     5| 2014- JFons * Integrate app code into the benchmark infrastructure\ne59a9      | 2014- JFons M-. Merge pull request #4 from phaller/patch-1\n940ef      | 2014- PHall | * Fix link to Dart benchmark harness\n110e0      | 2013- JFons *-' Update links to reflect project name change\n894a5      | 2013- JFons * Use Scala.js 0.2-SNAPSHOT\nc819b    10| 2013- JFons * Extract the benchmark list variable name; fix push to use scoped variable\n5bd6d      | 2013- JFons * Solve the easiest sudoku grid\n988c7      | 2013- JFons * Disable phantomjs by default\n5d84a      | 2013- JFons * Exclude Sudoku when running all benchmarks\n5d806      | 2013- JFons * Fix reference setup to work for node\n[main] ee912870202200a0b9cf4fd86ba57243212d341e - commit 1 of 48                                                                                                                                     29%\nEOF\n\ntest_case main-maxwidths-20 \\\n\t--script='\n\t:set main-view = id:yes,width=20 line-number:yes,interval=5,width=20 date:default,use-author=yes,width=20 author:full,maxwidth=20 commit-title:yes,graph,refs,overflow=no\n\t:refresh\n\t' \\\n\t<<EOF\nee912870202200a0b9cf         1| 2014-03-01 17:26 -05 Jonas Fonseca      * [master] WIP: Upgrade to 0.4-SNAPSHOT and DCE\na1dcf1aaa11470978db1          | 2014-03-01 15:59 -05 Jonas Fonseca      * Add type parameter for js.Dynamic\n296fc90ba2c47ba3d2b6          | 2014-01-16 22:51 -05 Jonas Fonseca      * Move classes under org.scalajs.benchmark package scope\nb4ad81f17b4c3fc33ed5          | 2014-01-16 17:43 -05 Jonas Fonseca      * Bump Scala.js version to 0.3-SNAPSHOT\n4a68cf3c338f5724d838         5| 2014-01-16 17:39 -05 Jonas Fonseca      * Integrate app code into the benchmark infrastructure\ne59a941c4e7d51cd172e          | 2014-01-16 07:47 -08 Jonas Fonseca      M-. Merge pull request #4 from phaller/patch-1\n940efafc379db7c6df99          | 2014-01-16 15:32 +01 Philipp Haller     | * Fix link to Dart benchmark harness\n110e090f815f40d649f5          | 2013-12-17 00:02 +01 Jonas Fonseca      *-' Update links to reflect project name change\n894a53e03a017642abdc          | 2013-12-03 23:35 -05 Jonas Fonseca      * Use Scala.js 0.2-SNAPSHOT\nc819b08eb5b05dde4df5        10| 2013-11-26 23:39 -05 Jonas Fonseca      * Extract the benchmark list variable name; fix push to use scoped variable\n5bd6df6603f25ff035f1          | 2013-11-26 23:31 -05 Jonas Fonseca      * Solve the easiest sudoku grid\n988c77aad5798f1e087e          | 2013-11-26 23:22 -05 Jonas Fonseca      * Disable phantomjs by default\n5d84af022bc87ef13c29          | 2013-11-26 22:55 -05 Jonas Fonseca      * Exclude Sudoku when running all benchmarks\n5d80606b72b490e213a0          | 2013-11-26 22:52 -05 Jonas Fonseca      * Fix reference setup to work for node\n[main] ee912870202200a0b9cf4fd86ba57243212d341e - commit 1 of 48                                                                                                                                     29%\nEOF\n\ntest_case main-maxwidths-10% \\\n\t--script='\n\t:set main-view = id:yes,width=20 line-number:yes,interval=5,width=20 date:default,use-author=yes,width=20 author:full,maxwidth=10% commit-title:yes,graph,refs,overflow=no\n\t:refresh\n\t' \\\n\t<<EOF\nee912870202200a0b9cf         1| 2014-03-01 17:26 -05 Jonas Fonseca      * [master] WIP: Upgrade to 0.4-SNAPSHOT and DCE\na1dcf1aaa11470978db1          | 2014-03-01 15:59 -05 Jonas Fonseca      * Add type parameter for js.Dynamic\n296fc90ba2c47ba3d2b6          | 2014-01-16 22:51 -05 Jonas Fonseca      * Move classes under org.scalajs.benchmark package scope\nb4ad81f17b4c3fc33ed5          | 2014-01-16 17:43 -05 Jonas Fonseca      * Bump Scala.js version to 0.3-SNAPSHOT\n4a68cf3c338f5724d838         5| 2014-01-16 17:39 -05 Jonas Fonseca      * Integrate app code into the benchmark infrastructure\ne59a941c4e7d51cd172e          | 2014-01-16 07:47 -08 Jonas Fonseca      M-. Merge pull request #4 from phaller/patch-1\n940efafc379db7c6df99          | 2014-01-16 15:32 +01 Philipp Haller     | * Fix link to Dart benchmark harness\n110e090f815f40d649f5          | 2013-12-17 00:02 +01 Jonas Fonseca      *-' Update links to reflect project name change\n894a53e03a017642abdc          | 2013-12-03 23:35 -05 Jonas Fonseca      * Use Scala.js 0.2-SNAPSHOT\nc819b08eb5b05dde4df5        10| 2013-11-26 23:39 -05 Jonas Fonseca      * Extract the benchmark list variable name; fix push to use scoped variable\n5bd6df6603f25ff035f1          | 2013-11-26 23:31 -05 Jonas Fonseca      * Solve the easiest sudoku grid\n988c77aad5798f1e087e          | 2013-11-26 23:22 -05 Jonas Fonseca      * Disable phantomjs by default\n5d84af022bc87ef13c29          | 2013-11-26 22:55 -05 Jonas Fonseca      * Exclude Sudoku when running all benchmarks\n5d80606b72b490e213a0          | 2013-11-26 22:52 -05 Jonas Fonseca      * Fix reference setup to work for node\n[main] ee912870202200a0b9cf4fd86ba57243212d341e - commit 1 of 48                                                                                                                                     29%\nEOF\n\n### tree-view\n\ntest_case tree-widths-default \\\n\t--script='\n\t:set tree-view = id:yes line-number:yes,interval=5 mode:yes file-size:yes file-name:yes\n\t:view-tree\n\t:refresh\n\t' \\\n\t<<EOF\nDirectory path /\nee91287    | drwxr-xr-x      common\nee91287    | drwxr-xr-x      deltablue\nee91287    | drwxr-xr-x      project\nee91287   5| drwxr-xr-x      richards\nee91287    | drwxr-xr-x      sudoku\nee91287    | drwxr-xr-x      tracer\n887c5fe    | -rw-r--r--   53 .gitignore\n8076152    | -rw-r--r-- 1499 LICENSE\n940efaf  10| -rw-r--r-- 2609 README.md\nee91287    | -rwxr-xr-x  493 run.sh\n\n\n\n[tree] 1a4ced7066ada2b26dcb0044f763a8438cd375df - file 1 of 10                                                                                                                                      100%\nEOF\n\ntest_case tree-widths-1 \\\n\t--script='\n\t:set tree-view = id:yes,width=1 line-number:yes,interval=5,width=1 mode:yes,width=1 file-size:yes,width=1 file-name:yes,width=1\n\t:view-tree\n\t:refresh\n\t' \\\n\t<<EOF\nDirectory path /\ne    | d   ~\ne    | d   ~\ne    | d   ~\ne   5| d   ~\ne    | d   ~\ne    | d   ~\n8    | - 5 ~\n8    | - 1 ~\n9  10| - 2 ~\ne    | - 4 ~\n\n\n\n[tree] 1a4ced7066ada2b26dcb0044f763a8438cd375df - file 1 of 10                                                                                                                                      100%\nEOF\n\ntest_case tree-widths-2 \\\n\t--script='\n\t:set tree-view = id:yes,width=2 line-number:yes,interval=5,width=2 mode:yes,width=2 file-size:yes,width=2 file-name:yes,width=2\n\t:view-tree\n\t:refresh\n\t' \\\n\t<<EOF\nDirectory path /\nee    | dr    c~\nee    | dr    d~\nee    | dr    p~\nee   5| dr    r~\nee    | dr    s~\nee    | dr    t~\n88    | -r 53 .~\n80    | -r 14 L~\n94  10| -r 26 R~\nee    | -r 49 r~\n\n\n\n[tree] 1a4ced7066ada2b26dcb0044f763a8438cd375df - file 1 of 10                                                                                                                                      100%\nEOF\n\ntest_case tree-widths-5 \\\n\t--script='\n\t:set tree-view = id:yes,width=5 line-number:yes,interval=5,width=5 mode:yes,width=5 file-size:yes,width=5 file-name:yes,width=5\n\t:view-tree\n\t:refresh\n\t' \\\n\t<<EOF\nDirectory path /\nee912      | drwxr       comm~\nee912      | drwxr       delt~\nee912      | drwxr       proj~\nee912     5| drwxr       rich~\nee912      | drwxr       sudo~\nee912      | drwxr       trac~\n887c5      | -rw-r    53 .git~\n80761      | -rw-r  1499 LICE~\n940ef    10| -rw-r  2609 READ~\nee912      | -rwxr   493 run.~\n\n\n\n[tree] 1a4ced7066ada2b26dcb0044f763a8438cd375df - file 1 of 10                                                                                                                                      100%\nEOF\n\ntest_case tree-widths-20 \\\n\t--script='\n\t:set tree-view = id:yes,width=20 line-number:yes,interval=5,width=20 mode:yes,width=20 file-size:yes,width=20 file-name:yes,width=20\n\t:view-tree\n\t:refresh\n\t' \\\n\t<<EOF\nDirectory path /\nee912870202200a0b9cf          | drwxr-xr-x                                common\nee912870202200a0b9cf          | drwxr-xr-x                                deltablue\nee912870202200a0b9cf          | drwxr-xr-x                                project\nee912870202200a0b9cf         5| drwxr-xr-x                                richards\nee912870202200a0b9cf          | drwxr-xr-x                                sudoku\nee912870202200a0b9cf          | drwxr-xr-x                                tracer\n887c5fec9cab1952ce65          | -rw-r--r--                             53 .gitignore\n807615265c6e84fa4f06          | -rw-r--r--                           1499 LICENSE\n940efafc379db7c6df99        10| -rw-r--r--                           2609 README.md\nee912870202200a0b9cf          | -rwxr-xr-x                            493 run.sh\n\n\n\n[tree] 1a4ced7066ada2b26dcb0044f763a8438cd375df - file 1 of 10                                                                                                                                      100%\nEOF\n\n### refs-vew\n\ntest_case refs-widths-default \\\n\t--script='\n\t:set refs-view = id:yes ref:yes author:yes commit-title\n\t:view-refs\n\t:refresh\n\t' \\\n\t<<EOF\n        All references\nee91287 master         Jonas Fonseca WIP: Upgrade to 0.4-SNAPSHOT and DCE\n\n\n\n\n\n\n\n\n\n\n\n\n[refs] All references                                                                                                                                                                               100%\nEOF\n\ntest_case refs-widths-1 \\\n\t--script='\n\t:set refs-view = id:yes,width=1 ref:yes,width=1 author:yes,width=1 commit-title\n\t:view-refs\n\t:refresh\n\t' \\\n\t<<EOF\n  A\ne m J WIP: Upgrade to 0.4-SNAPSHOT and DCE\n\n\n\n\n\n\n\n\n\n\n\n\n[refs] All references                                                                                                                                                                               100%\nEOF\n\ntest_case refs-widths-2 \\\n\t--script='\n\t:set refs-view = id:yes,width=2 ref:yes,width=2 author:yes,width=2 commit-title\n\t:view-refs\n\t:refresh\n\t' \\\n\t<<EOF\n   Al\nee ma JF WIP: Upgrade to 0.4-SNAPSHOT and DCE\n\n\n\n\n\n\n\n\n\n\n\n\n[refs] All references                                                                                                                                                                               100%\nEOF\n\ntest_case refs-widths-5 \\\n\t--script='\n\t:set refs-view = id:yes,width=5 ref:yes,width=5 author:yes,width=5 commit-title\n\t:view-refs\n\t:refresh\n\t' \\\n\t<<EOF\n      All r\nee912 maste JFons WIP: Upgrade to 0.4-SNAPSHOT and DCE\n\n\n\n\n\n\n\n\n\n\n\n\n[refs] All references                                                                                                                                                                               100%\nEOF\n\ntest_case refs-widths-20 \\\n\t--script='\n\t:set refs-view = id:yes,width=20 ref:yes,width=20 author:yes,width=20 commit-title\n\t:view-refs\n\t:refresh\n\t' \\\n\t<<EOF\n                     All references\nee912870202200a0b9cf master               Jonas Fonseca        WIP: Upgrade to 0.4-SNAPSHOT and DCE\n\n\n\n\n\n\n\n\n\n\n\n\n[refs] All references                                                                                                                                                                               100%\nEOF\n\ntest_case refs-maxwidths-5 \\\n\t--script='\n\t:set refs-view = id:yes,width=5 ref:yes,maxwidth=5 author:yes,maxwidth=5 commit-title\n\t:view-refs\n\t:refresh\n\t' \\\n\t<<EOF\n      All r\nee912 maste JFons WIP: Upgrade to 0.4-SNAPSHOT and DCE\n\n\n\n\n\n\n\n\n\n\n\n\n[refs] All references                                                                                                                                                                               100%\nEOF\n\ntest_case refs-maxwidths-20 \\\n\t--script='\n\t:set refs-view = id:yes,width=20 ref:yes,maxwidth=20 author:yes,maxwidth=20 commit-title\n\t:view-refs\n\t:refresh\n\t' \\\n\t<<EOF\n                     All references\nee912870202200a0b9cf master Jonas Fonseca WIP: Upgrade to 0.4-SNAPSHOT and DCE\n\n\n\n\n\n\n\n\n\n\n\n\n[refs] All references                                                                                                                                                                               100%\nEOF\n\n### grep-view\n\ntest_case grep-widths-default \\\n\t--script='\n\t:set grep-view = file-name:yes,width=20 line-number:yes,interval=1 text\n\t:g\n\tsource<Enter>\n\t:refresh\n\t' \\\n\t<<EOF\nLICENSE                5| Redistribution and use in source and binary forms, with or without modification,\nLICENSE                8|     * Redistributions of source code must retain the above copyright notice,\nREADME.md             27| time you save a source file, a compilation of the project is triggered.\ncommon/reference/de~ 633|  * Extract a plan for resatisfaction starting from the given source\ncommon/reference/de~ 649|  * Assume: sources are all satisfied.\ncommon/reference/de~ 651| Planner.prototype.makePlan = function (sources) {\ncommon/reference/de~ 654|   var todo = sources;\ncommon/reference/de~ 671|   var sources = new OrderedCollection();\ncommon/reference/de~ 676|       sources.add(c);\ncommon/reference/de~ 678|   return this.makePlan(sources);\ncommon/reference/ri~   2| // Redistribution and use in source and binary forms, with or without\ncommon/reference/ri~   6| //     * Redistributions of source code must retain the above copyright\ncommon/reference/tr~  45| Object.extend = function(destination, source) {\ncommon/reference/tr~  46|   for (var property in source) {\n[grep] LICENSE - line 1 of 24                                                                                                                                                                        58%\nEOF\n\ntest_case grep-widths-1 \\\n\t--script='\n\t:set grep-view = file-name:yes,width=1 line-number:yes,interval=1,width=1 text\n\t:g\n\tsource<Enter>\n\t:refresh\n\t' \\\n\t<<EOF\n~    5| Redistribution and use in source and binary forms, with or without modification,\n~    8|     * Redistributions of source code must retain the above copyright notice,\n~   27| time you save a source file, a compilation of the project is triggered.\n~  633|  * Extract a plan for resatisfaction starting from the given source\n~  649|  * Assume: sources are all satisfied.\n~  651| Planner.prototype.makePlan = function (sources) {\n~  654|   var todo = sources;\n~  671|   var sources = new OrderedCollection();\n~  676|       sources.add(c);\n~  678|   return this.makePlan(sources);\n~    2| // Redistribution and use in source and binary forms, with or without\n~    6| //     * Redistributions of source code must retain the above copyright\n~   45| Object.extend = function(destination, source) {\n~   46|   for (var property in source) {\n[grep] LICENSE - line 1 of 24                                                                                                                                                                        58%\nEOF\n\ntest_case grep-widths-2 \\\n\t--script='\n\t:set grep-view = file-name:yes,width=2 line-number:yes,interval=1,width=2 text\n\t:g\n\tsource<Enter>\n\t:refresh\n\t' \\\n\t<<EOF\nL~     5| Redistribution and use in source and binary forms, with or without modification,\nL~     8|     * Redistributions of source code must retain the above copyright notice,\nR~    27| time you save a source file, a compilation of the project is triggered.\nc~   633|  * Extract a plan for resatisfaction starting from the given source\nc~   649|  * Assume: sources are all satisfied.\nc~   651| Planner.prototype.makePlan = function (sources) {\nc~   654|   var todo = sources;\nc~   671|   var sources = new OrderedCollection();\nc~   676|       sources.add(c);\nc~   678|   return this.makePlan(sources);\nc~     2| // Redistribution and use in source and binary forms, with or without\nc~     6| //     * Redistributions of source code must retain the above copyright\nc~    45| Object.extend = function(destination, source) {\nc~    46|   for (var property in source) {\n[grep] LICENSE - line 1 of 24                                                                                                                                                                        58%\nEOF\n\ntest_case grep-widths-5 \\\n\t--script='\n\t:set grep-view = file-name:yes,width=5 line-number:yes,interval=1,width=5 text\n\t:g\n\tsource<Enter>\n\t:refresh\n\t' \\\n\t<<EOF\nLICE~     5| Redistribution and use in source and binary forms, with or without modification,\nLICE~     8|     * Redistributions of source code must retain the above copyright notice,\nREAD~    27| time you save a source file, a compilation of the project is triggered.\ncomm~   633|  * Extract a plan for resatisfaction starting from the given source\ncomm~   649|  * Assume: sources are all satisfied.\ncomm~   651| Planner.prototype.makePlan = function (sources) {\ncomm~   654|   var todo = sources;\ncomm~   671|   var sources = new OrderedCollection();\ncomm~   676|       sources.add(c);\ncomm~   678|   return this.makePlan(sources);\ncomm~     2| // Redistribution and use in source and binary forms, with or without\ncomm~     6| //     * Redistributions of source code must retain the above copyright\ncomm~    45| Object.extend = function(destination, source) {\ncomm~    46|   for (var property in source) {\n[grep] LICENSE - line 1 of 24                                                                                                                                                                        58%\nEOF\n\ntest_case grep-widths-20 \\\n\t--script='\n\t:set grep-view = file-name:yes,width=20 line-number:yes,interval=1,width=20 text\n\t:g\n\tsource<Enter>\n\t:refresh\n\t' \\\n\t<<EOF\nLICENSE                      5| Redistribution and use in source and binary forms, with or without modification,\nLICENSE                      8|     * Redistributions of source code must retain the above copyright notice,\nREADME.md                   27| time you save a source file, a compilation of the project is triggered.\ncommon/reference/de~       633|  * Extract a plan for resatisfaction starting from the given source\ncommon/reference/de~       649|  * Assume: sources are all satisfied.\ncommon/reference/de~       651| Planner.prototype.makePlan = function (sources) {\ncommon/reference/de~       654|   var todo = sources;\ncommon/reference/de~       671|   var sources = new OrderedCollection();\ncommon/reference/de~       676|       sources.add(c);\ncommon/reference/de~       678|   return this.makePlan(sources);\ncommon/reference/ri~         2| // Redistribution and use in source and binary forms, with or without\ncommon/reference/ri~         6| //     * Redistributions of source code must retain the above copyright\ncommon/reference/tr~        45| Object.extend = function(destination, source) {\ncommon/reference/tr~        46|   for (var property in source) {\n[grep] LICENSE - line 1 of 24                                                                                                                                                                        58%\nEOF\n\ntest_case grep-maxwidths-5 \\\n\t--script='\n\t:set grep-view = file-name:yes,maxwidth=5 line-number:yes,interval=1,width=5 text\n\t:g\n\tsource<Enter>\n\t:refresh\n\t' \\\n\t<<EOF\nLICE~     5| Redistribution and use in source and binary forms, with or without modification,\nLICE~     8|     * Redistributions of source code must retain the above copyright notice,\nREAD~    27| time you save a source file, a compilation of the project is triggered.\ncomm~   633|  * Extract a plan for resatisfaction starting from the given source\ncomm~   649|  * Assume: sources are all satisfied.\ncomm~   651| Planner.prototype.makePlan = function (sources) {\ncomm~   654|   var todo = sources;\ncomm~   671|   var sources = new OrderedCollection();\ncomm~   676|       sources.add(c);\ncomm~   678|   return this.makePlan(sources);\ncomm~     2| // Redistribution and use in source and binary forms, with or without\ncomm~     6| //     * Redistributions of source code must retain the above copyright\ncomm~    45| Object.extend = function(destination, source) {\ncomm~    46|   for (var property in source) {\n[grep] LICENSE - line 1 of 24                                                                                                                                                                        58%\nEOF\n\ntest_case grep-maxwidths-20 \\\n\t--script='\n\t:set grep-view = file-name:yes,maxwidth=20 line-number:yes,interval=1,width=20 text\n\t:g\n\tsource<Enter>\n\t:refresh\n\t' \\\n\t<<EOF\nLICENSE                      5| Redistribution and use in source and binary forms, with or without modification,\nLICENSE                      8|     * Redistributions of source code must retain the above copyright notice,\nREADME.md                   27| time you save a source file, a compilation of the project is triggered.\ncommon/reference/de~       633|  * Extract a plan for resatisfaction starting from the given source\ncommon/reference/de~       649|  * Assume: sources are all satisfied.\ncommon/reference/de~       651| Planner.prototype.makePlan = function (sources) {\ncommon/reference/de~       654|   var todo = sources;\ncommon/reference/de~       671|   var sources = new OrderedCollection();\ncommon/reference/de~       676|       sources.add(c);\ncommon/reference/de~       678|   return this.makePlan(sources);\ncommon/reference/ri~         2| // Redistribution and use in source and binary forms, with or without\ncommon/reference/ri~         6| //     * Redistributions of source code must retain the above copyright\ncommon/reference/tr~        45| Object.extend = function(destination, source) {\ncommon/reference/tr~        46|   for (var property in source) {\n[grep] LICENSE - line 1 of 24                                                                                                                                                                        58%\nEOF\n\n\nrun_test_cases\n"
  },
  {
    "path": "test/tigrc/xdg-config-home-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n\nmkdir -p \"$HOME/etc/tig\" \"$HOME/.config/tig\"\n\ncheck()\n{\n\tname=\"$(printf '%s\\n' \"$1\" | tr / -)\"\n\tpath=\"$HOME/$1\"\n\tenv=\"${2:-undefined}\"\n\n\tcase \"$env\" in\n\t  undefined) unset XDG_CONFIG_HOME ;;\n\t  *) export \"$env\" ;;\n\tesac\n\n\tmkdir -p \"$(dirname -- \"$path\")\"\n\ttig_script \"case-$name\" '<Ctrl-t>'\n\techo \"bind generic <Ctrl-t> @sh -c 'echo $name >> $HOME/$TEST_NAME.out'\" > \"$path\"\n\ttest_tig status\n\tprintf '%s\\n' \"$name\" > \"$TEST_NAME.out.expected\"\n\tassert_equals \"$TEST_NAME.out\" < \"$TEST_NAME.out.expected\"\n\tassert_equals \"$TEST_NAME.stderr\" < /dev/null\n}\n\nunset XDG_CONFIG_HOME\n\ncheck .tigrc\ncheck .config/tig/config\ncheck .config/tig/config XDG_CONFIG_HOME=\"$HOME\"\ncheck etc/tig/config XDG_CONFIG_HOME=\"$HOME/etc\"\n"
  },
  {
    "path": "test/tools/libgit.sh",
    "content": "#!/bin/sh\n#\n# Git test helpers.\n#\n# Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n#\n# This program is free software; you can redistribute it and/or\n# modify it under the terms of the GNU General Public License as\n# published by the Free Software Foundation; either version 2 of\n# the License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n\nset -eu\nif [ -n \"${BASH_VERSION:-}\" ]; then\n\tset -o pipefail\n\tIFS=$'\\n\\t'\nfi\n\nauthor_date=1234567890\nauthor_date_delta=735730\n\nIDENT_A=\"A. U. Thor <a.u.thor@example.com>\"\nIDENT_B=\"René Lévesque <rene.levesque@example.qc.ca>\"\nIDENT_C=\"作者 <zuozhea@example.ch>\"\nIDENT_D=\"Jørgen Thygesen Brahe <brache@example.dk>\"\nIDENT_E=\"Max Power <power123@example.org>\"\n\ngit_config()\n{\n\tgit config --global user.name \"Committer\"\n\tgit config --global user.email \"c.ommitter@example.net\"\n\tgit config --global diff.renames false\n}\n\ngit_init()\n{\n\tdir=\"${1:-$work_dir}\"\n\n\tif [ ! -e \"$dir/.git\" ]; then\n\t\tgit init -q -- \"$dir\"\n\t\t(cd \"$dir\" && git_config)\n\tfi\n}\n\ngit_add()\n{\n\t[ -e .git ] || die \"git_add called outside of git repo\"\n\tpath=\"$1\"; shift\n\n\tmkdir -p -- \"$(dirname -- \"$path\")\"\n\tfile \"$path\" \"$@\"\n\tgit add -- \"$path\"\n}\n\ngit_commit()\n{\n\t[ -e .git ] || die \"git_commit called outside of git repo: $(pwd)\"\n\n\tGIT_COMMITTER_NAME=\"$0\"\n\tGIT_COMMITTER_EMAIL=\"$0\"\n\n\texport GIT_AUTHOR_DATE=\"$author_date\"\n\tauthor_date=\"$(expr \"$author_date\" + \"$author_date_delta\")\"\n\t[ -z \"${GIT_COMMITTER_DATE:-}\" ] &&\n\t\texport GIT_COMMITTER_DATE=\"$GIT_AUTHOR_DATE\"\n\n\tgit commit -q --allow-empty \"$@\"\n\tunset GIT_COMMITTER_DATE\n}\n\ncreate_dirty_workdir()\n{\n\tgit init -q .\n\tgit_config\n\n\tprintf '*.o\\n' > .gitignore\n\tprintf '*~\\n' > .git/info/exclude\n\n\tfor file in a b.c \"d~\" e/f \"g h\" i.o .j \"h~/k\"; do\n\t\tdir=\"$(dirname -- \"$file\")\"\n\t\t[ -n \"$dir\" ] && mkdir -p -- \"$dir\"\n\t\tprintf \"%s\\n%s\" \"$file\" \"$(seq 1 10)\" > \"$file\"\n\tdone\n\n\tgit add .\n\tgit_commit --author=\"$IDENT_A\" --message=\"Initial commit\"\n\n\tfor file in a b.c \"d~\" e/f \"g h\" i.o .j \"h~/k\"; do\n\t\tprintf \"%s\\n%s\" \"$file CHANGED\" \"$(seq 1 8)\" > \"$file\"\n\tdone\n}\n\ncreate_worktree()\n{\n\tworktree_base_dir=\"$HOME/worktree-base\"\n\twork_dir_abs=\"$(pwd)\"\n\n\tmkdir -p \"$worktree_base_dir\"\n\t(cd \"$worktree_base_dir\" && {\n\t\tcreate_repo_from_tgz \"$base_dir/files/repo-one.tgz\" &&\n\t\tgit branch dev\n\t\tgit worktree add -- \"$work_dir_abs\" dev\n\t})\n}\n\ncreate_repo_from_tgz()\n{\n\tgit_init .\n\ttar zxof \"$1\"\n\tgit reset -q --hard\n}\n\ngit_clone()\n{\n\trepo_tgz=\"$base_dir/files/$1.tgz\"\n\tif [ -e \"$repo_tgz\" ]; then\n\t\tclone_dir=\"${2:-$work_dir}\"\n\t\t(cd \"$clone_dir\" && {\n\t\t\tgit_init .\n\t\t\ttar zxof \"$repo_tgz\"\n\t\t\tgit reset -q --hard\n\t\t})\n\telse\n\t\tdie \"No generator for $(basename \"$1\")\"\n\tfi\n}\n"
  },
  {
    "path": "test/tools/libtest.sh",
    "content": "#!/bin/sh\n#\n# Setup test environment.\n#\n# Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n#\n# This program is free software; you can redistribute it and/or\n# modify it under the terms of the GNU General Public License as\n# published by the Free Software Foundation; either version 2 of\n# the License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n\nset -eu\nif [ -n \"${BASH_VERSION:-}\" ]; then\n\tset -o pipefail\n\t# Prevent bash from changing LINES and COLUMNS variables\n\tshopt -u checkwinsize || true\nfi\nIFS='\n\t'\n\ntest=\"$(basename -- \"$0\")\"\nsource_dir=\"$(cd \"$(dirname -- \"$0\")\" >/dev/null && pwd -P)\"\nbase_dir=\"$(printf '%s\\n' \"$source_dir\" | sed -n 's#\\(.*/test\\)\\([/].*\\)*#\\1#p')\"\nprefix_dir=\"$(printf '%s\\n' \"$source_dir\" | sed -n 's#\\(.*/test/\\)\\([/].*\\)*#\\2#p')\"\noutput_dir=\"$base_dir/tmp/$prefix_dir/$test\"\ntmp_dir=\"$base_dir/tmp\"\noutput_dir=\"$tmp_dir/$prefix_dir/$test\"\nwork_dir=\"work-dir\"\ntty_attrs=\"$(stty -g </dev/tty)\"\n\n# The locale must specify UTF-8 for Ncurses to output correctly. Since C.UTF-8\n# does not exist on Mac OS X, we end up with en_US as the only sane choice.\nexport LANG=en_US.UTF-8\nexport LC_ALL=en_US.UTF-8\n\nexport PAGER=cat\nexport TZ=UTC\nexport TERM=dumb\nexport HOME=\"$output_dir\"\nunset CDPATH\nunset VISUAL\nunset INPUTRC\n\n# Freedesktop env\nunset XDG_CONFIG_HOME XDG_CONFIG_DIRS XDG_DATA_HOME XDG_DATA_DIRS XDG_CACHE_HOME\n\n# Git env\nexport GIT_CONFIG_NOSYSTEM\nunset GIT_CONFIG GIT_DIR GIT_WORK_TREE GIT_INDEX_FILE\nunset GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL GIT_AUTHOR_DATE\nunset GIT_COMMITTER_NAME GIT_COMMITTER_EMAIL GIT_COMMITTER_DATE\nunset GIT_EDITOR GIT_SEQUENCE_EDITOR GIT_PAGER GIT_EXTERNAL_DIFF\nunset GIT_NOTES_REF GIT_NOTES_DISPLAY_REF\n\n# Tig env\nexport TIG_TRACE=\nexport TIGRC_SYSTEM=\nunset TIGRC_USER\n\n# Ncurses env\nexport ESCDELAY=200\nexport LINES=30\nexport COLUMNS=80\n\n# Disable memleak detection for AddressSanitizer.\nexport ASAN_OPTIONS=detect_leaks=false\n\n# Internal test env\n# A space-separated list of options. See docs in test/README.\nexport TEST_OPTS=\"${TEST_OPTS:-}\"\n# Used by tig_script to set the test \"scope\" used by test_tig.\nexport TEST_NAME=\n\n[ -e \"$output_dir\" ] && rm -rf -- \"$output_dir\"\nmkdir -p -- \"$output_dir/$work_dir\"\n\nif [ ! -d \"$tmp_dir/.git\" ]; then\n\t# Create a dummy repository to avoid reading .git/config\n\t# settings from the tig repository.\n\tgit init -q -- \"$tmp_dir\"\nfi\n\n# For any utilities used in Tig scripts\nBIN_DIR=\"$HOME/bin\"\nmkdir -p -- \"$BIN_DIR\"\nexport PATH=\"$BIN_DIR:$PATH\"\n\nexecutable() {\n\tpath=\"$BIN_DIR/$1\"; shift\n\n\tif [ \"$#\" = 0 ]; then\n\t\tcase \"$path\" in\n\t\t\tstdin|expected*) cat ;;\n\t\t\t*) sed 's/^[ ]//' ;;\n\t\tesac > \"$path\"\n\telse\n\t\tprintf '%s' \"$*\" > \"$path\"\n\tfi\n\tchmod -- +x \"$path\"\n}\n\n# Setup fake editor\nexport EDITOR=\"vim\"\nexecutable 'vim' <<EOF\n#!/bin/sh\n\nfile=\"\\$1\"\nlineno=\"\\$(expr \"\\$1\" : '+\\([0-9]*\\)')\"\nif [ -n \"\\$lineno\" ]; then\n\tfile=\"\\$2\"\nelse\n\tlineno=1,5\nfi\n\nprintf '%s\\\\n' \"\\$*\" >> \"$HOME/editor.log\"\nsed -n -e \"\\${lineno}p\" \"\\$file\" >> \"$HOME/editor.log\" 2>&1\nEOF\n\ncd \"$output_dir\"\n\n#\n# Utilities.\n#\n\ndie()\n{\n\tprintf '%s\\n' \"$*\" >&2\n\texit 1\n}\n\ntty_reset()\n{\n\tif [ -n \"$tty_attrs\" ]; then\n\t\t( trap '' TTOU; trap '' TTIN; stty \"$tty_attrs\" </dev/tty ) || true;\n\tfi\n}\n\n### Testing API AsciiDoc\n#|\n#| file(filename, [content, ...]) [< content]::\n#|\nfile() {\n\tpath=\"$1\"; shift\n\n\tmkdir -p -- \"$(dirname -- \"$path\")\"\n\tif [ \"$#\" = 0 ]; then\n\t\tcase \"$path\" in\n\t\t\tstdin|expected*) cat ;;\n\t\t\t*) sed 's/^[ ]//' ;;\n\t\tesac > \"${path}.tmp\"\n\t\tmv -f -- \"${path}.tmp\" \"$path\"\n\telse\n\t\tprintf '%s' \"$*\" > \"$path\"\n\tfi\n}\n\n### Testing API AsciiDoc\n#|\n#| tig_script(name, content, [content, ...])::\n#|\ntig_script() {\n\tname=\"$1\"; shift\n\tprefix=\"${name:+$name.}\"\n\n\texport TIG_SCRIPT=\"$HOME/${prefix}steps\"\n\texport TEST_NAME=\"$name\"\n\n\t# Ensure that the steps finish by quitting\n\tprintf '%s\\n:quit\\n' \"$*\" \\\n\t\t| sed -e 's/^[ \t]*//' \\\n\t\t| sed \"s|:save-display[ \t]\\{1,\\}\\([^ \t]\\{1,\\}\\)|:save-display $HOME/\\1|\" \\\n\t\t| sed \"s|:save-options[ \t]\\{1,\\}\\([^ \t]\\{1,\\}\\)|:save-options $HOME/\\1|\" \\\n\t\t| sed \"s|:save-view[ \t]\\{1,\\}\\([^ \t]\\{1,\\}\\)|:save-view $HOME/\\1|\" \\\n\t\t> \"$TIG_SCRIPT\"\n}\n\n### Testing API AsciiDoc\n#|\n#| steps(content, [content, ...])::\n#|\nsteps() {\n\ttig_script \"\" \"$@\"\n}\n\n### Testing API AsciiDoc\n#|\n#| stdin([content, ...]) [< content]::\n#|\nstdin() {\n\tfile \"stdin\" \"$@\"\n}\n\n### Testing API AsciiDoc\n#|\n#| tigrc([content, ...]) [< content]::\n#|\ntigrc() {\n\tfile \"$HOME/.tigrc\" \"$@\"\n}\n\n### Testing API AsciiDoc\n#|\n#| gitconfig(content, ...)::\n#|\ngitconfig() {\n\tfile \"$HOME/.gitconfig\" \"$@\"\n}\n\n### Testing API AsciiDoc\n#|\n#| in_work_dir(command, [args, ...])::\n#|\nin_work_dir()\n{\n\t(cd \"$work_dir\" && \"$@\")\n}\n\nauto_detect_debugger() {\n\tfor dbg in gdb lldb; do\n\t\tdbg=\"$(command -v \"$dbg\" 2>/dev/null || true)\"\n\t\tif [ -n \"$dbg\" ]; then\n\t\t\tprintf '%s\\n' \"$dbg\"\n\t\t\treturn\n\t\tfi\n\tdone\n\n\tdie \"Failed to detect a supported debugger\"\n}\n\nformat_filter()\n{\n\ttest -z \"$filter\" && return\n\n\tcase \"$filter\" in\n\t\t:*) filter=\"*$filter\";;\n\tesac\n\tcase \"$filter\" in\n\t\t*:) filter=\"$filter*\";;\n\tesac\n\tif [ \"$filter\" = \"*:*\" ]; then\n\t\tfilter=''\n\tfi\n}\n\nfilter_file_ok()\n{\n\ttest -z \"$filter\" && return 0\n\n\tmatcher=\"$0\"\n\t_filter_filename_part=\"${filter%:*}\"\n\tcase \"$matcher\" in\n\t\t$_filter_filename_part) return 0;;\n\t\t*) return 1;;\n\tesac\n}\n\n#\n# Parse TEST_OPTS\n#\n\nexpected_status_code=0\ndiff_color_arg=\n[ -t 1 ] && diff_color_arg=--color\n\nindent='            '\nverbose=\ndebugger=\nrunner=exec\ntrace=\ntodos=\nvalgrind=\nfilter=\ntimeout=10\nvlg_timeout_bonus=60\n\nORIG_IFS=\"$IFS\"\nIFS=\" \t\"\nfor arg in ${MAKE_TEST_OPTS:-} ${TEST_OPTS:-}; do\n\tif [ -z \"$arg\" ]; then\n\t\tcontinue;\n\tfi\n\tcase \"$arg\" in\n\t\tverbose) verbose=yes ;;\n\t\tno[-_]indent|noindent) indent= ;;\n\t\tdebugger=*) debugger=\"$(expr \"$arg\" : 'debugger=\\(.*\\)')\" ;;\n\t\tdebugger) debugger=\"$(auto_detect_debugger)\" ;;\n\t\ttimeout=*) timeout=\"$(expr \"$arg\" : 'timeout=\\(.*\\)')\" ;;\n\t\ttrace) trace=yes ;;\n\t\ttodo|todos) todos=yes ;;\n\t\tvalgrind) valgrind=\"$HOME/valgrind.log\" ;;\n\t\tfilter=*) filter=\"$(expr \"$arg\" : 'filter=\\(.*\\)')\" && format_filter;;\n\t\t*) die \"unknown TEST_OPTS element '$arg'\" ;;\n\tesac\ndone\nIFS=\"$ORIG_IFS\"\nORIG_IFS=\n\nfilter_file_ok || exit 0   # silently exit caller who sourced this file\n\n#\n# Test runners and assertion checking.\n#\n\n### Testing API AsciiDoc\n#|\n#| assert_equals(filename, [whitespace, note, ...]) < expected::\n#|\nassert_equals()\n{\n\tfile=\"$1\"; shift\n\twhitespace_arg='-w';\n\n\tif [ \"$#\" -ge 1 ]; then\n\t\twhitespace_arg=\"${1:-}\"\n\t\tshift\n\tfi\n\tif [ \"$whitespace_arg\" = strict ]; then\n\t\twhitespace_arg=''\n\telif [ \"$whitespace_arg\" = ignore ]; then\n\t\twhitespace_arg='-w'\n\tfi\n\n\tfile \"expected/$file\"\n\n\tif [ -e \"$file\" ]; then\n\t\t( IFS=' \t'; git diff --no-index $diff_color_arg $whitespace_arg -- \"expected/$file\" \"$file\" > \"$file.diff\" || true )\n\t\tif [ -s \"$file.diff\" ]; then\n\t\t\tprintf '[FAIL] %s != expected/%s\\n' \"$file\" \"$file\" >> .test-result\n\t\t\tif [ -n \"$*\" ]; then\n\t\t\t\tprintf '[NOTE] %s\\n' \"$*\" >> .test-result\n\t\t\tfi\n\t\t\tcat < \"$file.diff\" >> .test-result\n\t\telse\n\t\t\tprintf '  [OK] %s assertion\\n' \"$file\" >> .test-result\n\t\tfi\n\t\trm -f -- \"$file.diff\"\n\telse\n\t\tprintf '[FAIL] %s not found\\n' \"$file\" >> .test-result\n\tfi\n}\n\n### Testing API AsciiDoc\n#|\n#| assert_not_exists(filename)::\n#|\nassert_not_exists()\n{\n\tfile=\"$1\"; shift\n\n\tif [ -e \"$file\" ]; then\n\t\tprintf '[FAIL] %s should not exist\\n' \"$file\" >> .test-result\n\telse\n\t\tprintf '  [OK] %s does not exist\\n' \"$file\" >> .test-result\n\tfi\n}\n\nvars_file=\"vars\"\nvars_count_file=\"${vars_file}_assert_count\"\nexpected_vars_file=\"$HOME/expected/$vars_file\"\n\nexecutable 'assert-var' <<EOF\n#!/bin/sh\n\nmkdir -p \"$(dirname -- \"$expected_vars_file\")\"\nlhs=\"\\${1:-}\"\nif [ \"\\$#\" -gt 0 ]; then\n\tshift\nfi\nif [ \"\\${1:-}\" = \"==\" ]; then\n\tshift\nfi\nrhs=\"\\$*\"\n\nif [ -z \"\\$lhs\" ]; then\n\tlhs='\\\"\\\"'\nfi\nif [ -z \"\\$rhs\" ]; then\n\trhs='\\\"\\\"'\nfi\n\nprintf '%s\\\\n' \"\\$lhs\" >> \"$HOME/$vars_file\"\nprintf '%s\\\\n' \"\\$rhs\" >> \"$expected_vars_file\"\nEOF\n\n### Testing API AsciiDoc\n#|\n#| assert_vars(count)::\n#|\nassert_vars()\n{\n\tif [ -n \"${1:-}\" ]; then\n\t\tprintf '%s\\n' \"$1\" > \"$vars_count_file\"\n\t\tshift\n\telse\n\t\tdie \"Test must supply the expected count of assertions to assert_vars()\"\n\tfi\n\n\tgrep -c . < \"$vars_file\" | assert_equals \"$vars_count_file\" strict \"$*\"\n\n\tif [ -e \"$expected_vars_file\" ]; then\n\t\tassert_equals \"$vars_file\" strict \"$*\" < \"$expected_vars_file\"\n\telse\n\t\tprintf '[FAIL] %s not found\\n' \"$expected_vars_file\" >> .test-result\n\tfi\n}\n\nshow_test_results()\n{\n\tif [ -e .test-skipped ]; then\n\t\tsed \"s/^/$indent[skipped] /\" < .test-skipped\n\t\treturn\n\tfi\n\tif [ -n \"$trace\" ] && [ -n \"$TIG_TRACE\" ] && [ -e \"$TIG_TRACE\" ]; then\n\t\tsed \"s/^/$indent[trace] /\" < \"$TIG_TRACE\"\n\tfi\n\tif [ -n \"$valgrind\" ] && [ -s \"$valgrind\" ]; then\n\t\tgrep -v '^-\\+[0-9]\\+-\\+ \\+run:' < \"${valgrind}\" || true | sed \"s/^/$indent[valgrind] /\"\n\tfi\n\tif [ ! -d \"$HOME\" ] || [ ! -e .test-result ]; then\n\t\t[ -e stderr ] &&\n\t\t\tsed \"s/^/[stderr] /\" < stderr\n\t\t[ -e stderr.orig ] &&\n\t\t\tsed \"s/^/[stderr] /\" < stderr.orig\n\t\tprintf 'No test results found\\n'\n\telif grep -q '^ *\\[FAIL\\]' < .test-result; then\n\t\tfailed=\"$(grep -c '^ *\\[FAIL\\]' < .test-result || true)\"\n\t\tcount=\"$(grep -c '^ *\\[\\(FAIL\\|OK\\)\\]' < .test-result || true)\"\n\n\t\tprintf 'Failed %d out of %d test(s)\\n' \"$failed\" \"$count\"\n\n\t\t# Show output from stderr if no output is expected\n\t\tif [ -e stderr ]; then\n\t\t\t[ -e expected/stderr ] ||\n\t\t\t\tsed \"s/^/[stderr] /\" < stderr\n\t\tfi\n\n\t\t# Replace CR used by Git progress messages\n\t\ttr '\\r' '\\n' < .test-result\n\telif [ -n \"$verbose\" ]; then\n\t\tcount=\"$(grep -c '^ *\\[OK\\]' < .test-result || true)\"\n\t\tprintf 'Passed %d assertions\\n' \"$count\"\n\tfi | sed \"s/^/$indent| /\"\n}\n\ntrap \"tty_reset; show_test_results\" EXIT\n\ntest_skip()\n{\n\tprintf '%s\\n' \"$*\" >> .test-skipped\n}\n\ntest_todo_message()\n{\n\texplanation=\"$*\"\n\tif [ -n \"$explanation\" ]; then\n\t\texplanation=\": $explanation\"\n\tfi\n\n\tprintf '[TODO] Not yet expected to pass%s\\n' \"$explanation\"\n}\n\n### Testing API AsciiDoc\n#|\n#| test_todo([note, ...])::\n#|\ntest_todo()\n{\n\tif [ -n \"$todos\" ]; then\n\t\treturn\n\tfi\n\n\ttest_todo_message \"$*\" >> .test-skipped\n}\n\n### Testing API AsciiDoc\n#|\n#| test_timeout(seconds)::\n#|\ntest_timeout()\n{\n\tif [ -z \"${1:-}\" ]; then\n\t\tdie 'test_timeout requires an argument'\n\tfi\n\n\ttimeout=\"${1:-}\"\n}\n\n### Testing API AsciiDoc\n#|\n#| require_git_version(version, [note, ...])::\n#|\nrequire_git_version()\n{\n\tgit_version=\"$(git version | sed 's/git version \\([0-9\\.]*\\).*/\\1/')\"\n\tactual_major=\"$(expr \"$git_version\" : '\\([0-9]*\\).*')\"\n\tactual_minor=\"$(expr \"$git_version\" : '[0-9]*\\.\\([0-9]*\\).*')\"\n\n\trequired_version=\"$1\"; shift\n\trequired_major=\"$(expr \"$required_version\" : '\\([0-9]*\\).*')\"\n\trequired_minor=\"$(expr \"$required_version\" : '[0-9]*\\.\\([0-9]*\\).*')\"\n\n\tif [ \"$required_major\" -gt \"$actual_major\" ] ||\n\t   [ \"$required_major\" -eq \"$actual_major\" -a \"$required_minor\" -gt \"$actual_minor\" ]; then\n\t\ttest_skip \"$@\"\n\tfi\n}\n\nhas_readline()\n{\n\tif tig --version | grep readline >/dev/null 2>&1; then\n\t\treturn 0\n\telse\n\t\treturn 1\n\tfi\n}\n\n### Testing API AsciiDoc\n#|\n#| test_require(git-worktree, address-sanitizer, diff-highlight, readline)::\n#|\ntest_require()\n{\n\twhile [ $# -gt 0 ]; do\n\t\tfeature=\"$1\"; shift\n\n\t\tcase \"$feature\" in\n\t\tgit-worktree)\n\t\t\trequire_git_version 2.5 \\\n\t\t\t\t\"The test requires git-worktree, available in git version 2.5 or newer\"\n\t\t\t;;\n\t\taddress-sanitizer)\n\t\t\tif [ \"${TIG_ADDRESS_SANITIZER_ENABLED:-no}\" != yes ]; then\n\t\t\t\ttest_skip \"The test requires clang and is only run via \\`make test-address-sanitizer\\`\"\n\t\t\tfi\n\t\t\t;;\n\t\tdiff-highlight)\n\t\t\tdiff_highlight_path=\"$(git --exec-path)/../../share/git-core/contrib/diff-highlight/diff-highlight\"\n\t\t\tif [ ! -e \"$diff_highlight_path\" ]; then\n\t\t\t\t# alt path\n\t\t\t\tdiff_highlight_path=\"$(git --exec-path)/../../share/git/contrib/diff-highlight/diff-highlight\"\n\t\t\tfi\n\t\t\tif [ ! -e \"$diff_highlight_path\" ]; then\n\t\t\t\ttest_skip \"The test requires diff-highlight, usually found in share/git-core-contrib\"\n\t\t\tfi\n\t\t\t;;\n\t\treadline)\n\t\t\tif ! has_readline; then\n\t\t\t\ttest_skip \"The test requires a tig compiled with readline\"\n\t\t\tfi\n\t\t\t;;\n\n\t\t*)\n\t\t\ttest_skip \"Unknown feature requirement: $feature\"\n\t\tesac\n\tdone\n}\n\ntest_exec_work_dir()\n{\n\tcmd=\"$@\"\n\tprintf '=== %s ===\\n' \"$cmd\" >> \"$HOME/test-exec.log\"\n\ttest_exec_log=\"$HOME/test-exec.log.tmp\"\n\trm -f -- \"$test_exec_log\"\n\n\tset +e\n\tin_work_dir \"$@\" 1>>\"$test_exec_log\" 2>>\"$test_exec_log\"\n\ttest_exec_exit_code=$?\n\tset -e\n\n\tcat < \"$test_exec_log\" >> \"$HOME/test-exec.log\"\n\tif [ \"$test_exec_exit_code\" != 0 ]; then\n\t\tprintf \"[FAIL] unexpected exit code while executing '%s': %s\\n\" \"$cmd\" \"$test_exec_exit_code\" >> .test-result\n\t\tcat < \"$test_exec_log\" >> .test-result\n\t\t# Exit gracefully to allow additional tests to run\n\t\texit 0\n\tfi\n}\n\n### Testing API AsciiDoc\n#|\n#| test_setup()::\n#|\ntest_setup()\n{\n\tif [ -e .test-skipped ]; then\n\t\texit 0\n\tfi\n\n\trun_setup=\"$(type test_setup_work_dir 2>/dev/null | grep 'function' || true)\"\n\n\tif [ -n \"$run_setup\" ]; then\n\t\tif test ! -e \"$HOME/test-exec.log\" || ! grep -q test_setup_work_dir -- \"$HOME/test-exec.log\"; then\n\t\t\ttest_exec_work_dir test_setup_work_dir\n\t\tfi\n\tfi\n}\n\ninstall_pid_timeout() {\n\tpid=\"${1:-}\"\n\tsignal=\"${2:-ALRM}\"\n\ttest \"$timeout\" -gt 0 || return\n\ttest \"$pid\" -gt 0 || return\n\ttest \"$pid\" != \"$$\" || return\n\ttrap '' \"$signal\"\n\t(\n\ttrap '' \"$signal\"\n\tcount=0\n\tgranularity=1\n\twhile [ \"$count\" -lt \"$timeout\" ]; do\n\t\tcount=\"$((count + granularity))\"\n\t\tsleep \"$granularity\"\n\t\tkill -0 \"$pid\" || break\n\tdone\n\tkill -0 \"$pid\" && kill -\"$signal\" \"$pid\" || true\n\t) >/dev/null 2>&1 &\n}\n\nvalgrind_exec()\n{\n\tkernel=\"$(uname -s 2>/dev/null || printf 'unknown\\n')\"\n\tkernel_supp=\"$base_dir/tools/valgrind-$kernel.supp\"\n\n\tvalgrind_ops=\"\"\n\n\tvalgrind_supp=\"--suppressions=/dev/null\"\n\tif [ -e \"$kernel_supp\" ]; then\n\t\tvalgrind_supp=\"--suppressions=$kernel_supp\"\n\tfi\n\n\t(\n\t\tIFS=' \t'\n\t\tvalgrind -q --gen-suppressions=all --track-origins=yes --error-exitcode=1 \\\n\t\t\t--log-file=\"$valgrind.orig\" \"$valgrind_supp\" $valgrind_ops  \\\n\t\t\t\"$@\"\n\t)\n\tvalgrind_status_code=$?\n\n\tcase \"$kernel\" in\n\t\tDarwin)\tgrep -v \"mach_msg unhandled MACH_SEND_TRAILER option\" < \"$valgrind.orig\" > \"$valgrind\" ;;\n\t\t*)\tmv -- \"$valgrind.orig\" \"$valgrind\" ;;\n\tesac\n\n\trm -f -- \"$valgrind.orig\"\n\n\treturn \"$valgrind_status_code\"\n}\n\n### Testing API AsciiDoc\n#|\n#| test_tig()::\n#|\n#|\tSet up a controlled environment and report the test result.\n#|\tInput to be processed via stdin is passed and stderr is captured and\n#|\tcan be used for later assertions.\n#|\tExample\n#| --------------------------------------------------------------------------------\n#| test_tig show 1a2b3c4d5e6f\n#| --------------------------------------------------------------------------------\n#|\ntest_tig()\n{\n\tname=\"$TEST_NAME\"\n\tprefix=\"${name:+$name.}\"\n\n\ttest_setup\n\texport TIG_NO_DISPLAY=\n\tif [ -n \"$trace\" ]; then\n\t\texport TIG_TRACE=\"$HOME/${prefix}tig-trace\"\n\tfi\n\ttouch -- \"${prefix}stdin\" \"${prefix}stderr\"\n\t(\n\t\t# subshell handles cleanup of cwd, variables, redirections, set +e\n\t\tcd \"$work_dir\" || die \"chdir failed\"\n\t\ttty_reset\n\t\tif [ -n \"$debugger\" ]; then\n\t\t\tprintf \"*** Running tests in '%s/%s'\\n\" \"$HOME\" \"$work_dir\"\n\t\t\tif [ -s \"$HOME/${prefix}stdin\" ]; then\n\t\t\t\tprintf '*** - This test requires data to be injected via stdin.\\n'\n\t\t\t\tprintf \"***   The expected input file is: '%s'\\n\" \"../${prefix}stdin\"\n\t\t\tfi\n\t\t\tif [ \"$#\" -gt 0 ]; then\n\t\t\t\tprintf '*** - This test expects the following arguments: %s\\n' \"$*\"\n\t\t\tfi\n\t\t\t\"$debugger\" tig \"$@\"\n\t\telse\n\t\t\tset +e\n\t\t\tif [ \"$expected_status_code\" = 0 ] && [ -n \"$valgrind\" ]; then\n\t\t\t\trunner=valgrind_exec\n\t\t\t\tif [ \"$timeout\" -gt 0 ]; then\n\t\t\t\t\ttimeout=\"$((timeout + vlg_timeout_bonus))\"\n\t\t\t\tfi\n\t\t\tfi\n\t\t\tif [ -s \"$HOME/${prefix}stdin\" ]; then\n\t\t\t\texec 4<\"$HOME/${prefix}stdin\"\n\t\t\telse\n\t\t\t\texec 4<&0\n\t\t\tfi\n\t\t\t\"$runner\" tig \"$@\" <&4 > \"$HOME/${prefix}stdout\" 2> \"$HOME/${prefix}stderr.orig\" &\n\t\t\ttig_pid=\"$!\"\n\t\t\tsignal=14\n\t\t\tinstall_pid_timeout \"$tig_pid\" \"$signal\"\n\t\t\twait \"$tig_pid\"\n\t\tfi\n\t\tstatus_code=\"$?\"\n\t\ttty_reset\n\t\tif [ \"$status_code\" -eq \"$(( 256 + signal))\" ] || [ \"$status_code\" -eq \"$(( 128 + signal))\" ]; then\n\t\t\tprintf '[FAIL] Test timed out after %s seconds\\n' \"$timeout\" >> \"$HOME/.test-result\"\n\t\telif [ \"$status_code\" != \"$expected_status_code\" ]; then\n\t\t\tprintf '[FAIL] unexpected status code: %s (should be %s)\\n' \"$status_code\" \"$expected_status_code\" >> \"$HOME/.test-result\"\n\t\tfi\n\t)\n\t# Normalize paths in stderr output\n\tif [ -e \"${prefix}stderr.orig\" ]; then\n\t\tsed \"s#$output_dir#HOME#\" < \"${prefix}stderr.orig\" > \"${prefix}stderr\"\n\t\trm -f -- \"${prefix}stderr.orig\"\n\tfi\n\tif [ -n \"$trace\" ]; then\n\t\texport TIG_TRACE=\"$HOME/.tig-trace\"\n\t\tif [ -n \"$name\" ]; then\n\t\t\tsed \"s#^#[$name] #\" < \"$HOME/${prefix}tig-trace\" >> \"$HOME/.tig-trace\"\n\t\telse\n\t\t\tmv -- \"$HOME/${prefix}tig-trace\" \"$HOME/.tig-trace\"\n\t\tfi\n\tfi\n\tif [ -n \"$prefix\" ]; then\n\t\tsed \"s#^#[$name] #\" < \"${prefix}stderr\" >> \"stderr\"\n\tfi\n}\n\n### Testing API AsciiDoc\n#|\n#| test_graph() < expected::\n#|\ntest_graph()\n{\n\ttest-graph \"$@\" > stdout 2> stderr.orig\n}\n\n### Testing API AsciiDoc\n#|\n#| test_case([--before=<string>, --after=<string>, --script=<string>, --args=<string>, --cwd=<string>, --tigrc=<string>, --assert-stderr=<string>, --todo=<string>, --subshell=<string>, --timeout=<string>]) < expected::\n#|\ntest_case()\n{\n\tname=\"$1\"; shift\n\n\tprintf '%s\\n' \"$name\" >> test-cases\n\tcat > \"$name.expected\"\n\n\ttouch -- \"$name-before\" \"$name-after\" \"$name-script\" \"$name-args\" \"$name-tigrc\" \"$name-assert-stderr\" \"$name-todo\" \"$name-subshell\" \"$name-timeout\"\n\n\twhile [ \"$#\" -gt 0 ]; do\n\t\targ=\"$1\"; shift\n\t\tkey=\"$(expr \"X$arg\" : 'X--\\([^=]*\\).*')\"\n\t\tvalue=\"$(expr \"X$arg\" : 'X--[^=]*=\\(.*\\)')\"\n\n\t\tcase \"$key\" in\n\t\tbefore|after|script|args|cwd|tigrc|assert-stderr|todo|subshell|timeout)\n\t\t\tprintf '%s\\n' \"$value\" > \"$name-$key\" ;;\n\t\tassert-equals)\n\t\t\tfilename=\"$(expr \"X$value\" : 'X\\([^=]*\\)')\"\n\t\t\tcontent=\"$(expr \"X$value\" : 'X[^=]*=\\(.*\\)')\"\n\t\t\tprintf '%s\\n' \"$filename\" > \"$name-$key\"\n\t\t\tprintf '%s\\n' \"$content\" > \"$name-$key-content\" ;;\n\t\t*)\tdie \"Unknown test_case argument: $arg\"\n\t\tesac\n\tdone\n}\n\n### Testing API AsciiDoc\n#|\n#| run_test_cases()::\n#|\nrun_test_cases()\n{\n\tif [ ! -e test-cases ]; then\n\t\treturn\n\tfi\n\ttest_setup\n\twhile read -r name <&3; do\n\t\texport TEST_CASE=\"$name\"\n\t\tif [ -n \"$filter\" ]; then\n\t\t\tmatcher=\"$name\"\n\t\t\t_filter_case_part=\"${filter#*:}\"\n\t\t\tif [ \"$filter\" != \"$_filter_case_part\" ]; then\n\t\t\t\tcase \"$matcher\" in\n\t\t\t\t\t$_filter_case_part) true;;\n\t\t\t\t\t*) continue;;\n\t\t\t\tesac\n\t\t\tfi\n\t\tfi\n\t\tif [ \"${V:-}\" = '@' ]; then\n\t\t\t# align with output from make, based on $V which is inherited from make\n\t\t\tprintf '      CASE  %s\\n' \"$0:$name\"\n\t\tfi\n\t\tif [ -s \"$name-todo\" ] && [ -z \"$todos\" ]; then\n\t\t\tprintf '%s[skipped] ' \"$indent\"\n\t\t\ttest_todo_message \"$(cat < \"$name-todo\")\"\n\t\t\ttest_todo_message \"$(cat < \"$name-todo\")\" >> \".test-skipped-subtest-$name\"\n\t\t\tcontinue;\n\t\tfi\n\t\ttig_script \"$name\" \"\n\t\t\t$(if [ -e \"$name-script\" ]; then cat < \"$name-script\"; fi)\n\t\t\t:save-display $name.screen\n\t\t\"\n\t\tif [ -s \"$name-tigrc\" ]; then\n\t\t\ttigrc \"$(cat < \"$name-tigrc\")\"\n\t\tfi\n\t\tif [ -e \"$name-before\" ]; then\n\t\t\ttest_exec_work_dir \"${SHELL:-/bin/sh}\" \"$HOME/$name-before\"\n\t\tfi\n\t\t(\n\t\t\tif [ -e \"$name-cwd\" ]; then\n\t\t\t\twork_dir=\"$work_dir/$(cat < \"$name-cwd\")\"\n\t\t\tfi\n\t\t\tif [ -e ./\"$name-subshell\" ]; then\n\t\t\t\t. ./\"$name-subshell\"\n\t\t\tfi\n\t\t\tif [ -s \"$name-timeout\" ]; then\n\t\t\t\ttimeout=\"$(cat < \"$name-timeout\")\"\n\t\t\tfi\n\t\t\tIFS=' \t'\n\t\t\ttest_tig $(if [ -e \"$name-args\" ]; then cat < \"$name-args\"; fi)\n\t\t)\n\t\tif [ -e \"$name-after\" ]; then\n\t\t\ttest_exec_work_dir \"${SHELL:-/bin/sh}\" \"$HOME/$name-after\"\n\t\tfi\n\n\t\tassert_equals \"$name.screen\" < \"$name.expected\"\n\t\tif [ -s \"$name-assert-stderr\" ]; then\n\t\t\tassert_equals \"$name.stderr\" < \"$name-assert-stderr\"\n\t\telse\n\t\t\tassert_equals \"$name.stderr\" < /dev/null\n\t\tfi\n\t\tif [ -e \"$name-assert-equals\" ]; then\n\t\t\tassert_equals \"$(cat < \"$name-assert-equals\")\" < \"$name-assert-equals-content\"\n\t\tfi\n\tdone 3< test-cases\n}\n"
  },
  {
    "path": "test/tools/setup-conflict.sh",
    "content": "#!/bin/sh\n\n. libgit.sh\n\ngit reset --hard\n\nchange() {\n\tprintf '%s\\n' \"$*\" > conflict-file\n\tgit add conflict-file\n\tgit_commit --message=\"Change: $*\"\n}\n\nchange \"a\"\nchange \"b\"\n\ngit branch conflict-master\ngit branch conflict-branch\n\ngit checkout conflict-master\nchange \"c\"\nchange \"c'\"\n\ngit checkout conflict-branch\nchange \"d\"\nchange \"d'\"\n\ngit checkout conflict-master\ngit merge conflict-branch || true\n"
  },
  {
    "path": "test/tools/show-results.sh",
    "content": "#!/bin/sh\n#\n# Aggregate test results.\n# Usage: $0\n#\n# Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n#\n# This program is free software; you can redistribute it and/or\n# modify it under the terms of the GNU General Public License as\n# published by the Free Software Foundation; either version 2 of\n# the License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n\nset -eu\nif [ -n \"${BASH_VERSION:-}\" ]; then\n\tset -o pipefail\n\tIFS=$' \\n\\t'\nfi\n\ntests=\"$(find test/ -name \".test-result\" | grep -c . || true)\"\nasserts=\"$(find test/ -name \".test-result\" -exec cat -- \"{}\" \\; | grep -c '^ *\\[\\(OK\\|FAIL\\)\\]' || true)\"\nfailures=\"$(find test/ -name \".test-result\" -exec cat -- \"{}\" \\; | grep -c '^ *\\[FAIL\\]' || true)\"\nskipped=\"$(find test/ -name \".test-skipped\" | grep -c . || true)\"\ntodos=\"$(find test/ \\( -name \".test-skipped\" -or -name \".test-skipped-subtest-*\" \\) -exec cat -- \"{}\" + | grep -c '^\\[TODO\\]' || true)\"\n\nif [ \"$failures\" = 0 ]; then\n\tprintf \"Passed %d assertions in %d tests\" \"$asserts\" \"$tests\"\nelse\n\tprintf \"Failed %d of %d assertions in %d tests\" \"$failures\" \"$asserts\" \"$tests\"\nfi\n\nif [ \"$skipped\" != 0 ]; then\n\ttodo_text=\"\"\n\tif [ \"$todos\" != 0 ]; then\n\t\ttodo_text=\", $todos as todos\"\n\tfi\n\tprintf \" (%d skipped%s)\" \"$skipped\" \"$todo_text\"\nfi\n\nprintf '\\n'\nexit \"$failures\"\n"
  },
  {
    "path": "test/tools/test-graph.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/tig.h\"\n#include \"tig/util.h\"\n#include \"tig/io.h\"\n#include \"tig/graph.h\"\n\n#define USAGE \\\n\"test-graph [--ascii]\\n\" \\\n\"\\n\" \\\n\"Example usage:\\n\" \\\n\"\t# git log --pretty=raw --parents | ./test-graph\\n\" \\\n\"\t# git log --pretty=raw --parents | ./test-graph --ascii\"\n\nstruct commit {\n\tchar id[SIZEOF_REV];\n\tstruct graph_canvas canvas;\n};\n\nDEFINE_ALLOCATOR(realloc_commits, struct commit *, 8)\n\nstatic const char *(*graph_fn)(const struct graph_symbol *);\n\nstatic bool\nprint_symbol(void *__, const struct graph *graph, const struct graph_symbol *symbol, int color_id, bool first)\n{\n\tconst char *chars = graph_fn(symbol);\n\n\tprintf(\"%s\", chars + !!first);\n\treturn false;\n}\n\nstatic void\nprint_commit(struct graph *graph, struct commit *commit, const char *title)\n{\n\tgraph->foreach_symbol(graph, &commit->canvas, print_symbol, NULL);\n\tprintf(\" %s\\n\", title);\n}\n\nint\nmain(int argc, const char *argv[])\n{\n\tstruct graph *graph;\n\tstruct io io = {0};\n\tstruct buffer buf;\n\tstruct commit **commits = NULL;\n\tsize_t ncommits = 0;\n\tstruct commit *commit = NULL;\n\tbool is_boundary;\n\n\tif (isatty(STDIN_FILENO)) {\n\t\tdie(USAGE);\n\t}\n\n\tif (!(graph = init_graph(GRAPH_DISPLAY_V2)))\n\t\tdie(\"Failed to allocate graph\");\n\n\tif (argc > 1 && !strcmp(argv[1], \"--ascii\"))\n\t\tgraph_fn = graph->symbol_to_ascii;\n\telse\n\t\tgraph_fn = graph->symbol_to_utf8;\n\n\tif (!io_open(&io, \"%s\", \"\"))\n\t\tdie(\"IO\");\n\n\twhile (!io_eof(&io)) {\n\t\tfor (; io_get(&io, &buf, '\\n', true); ) {\n\t\t\tchar *line = buf.data;\n\n\t\t\tif (!prefixcmp(line, \"commit \")) {\n\t\t\t\tline += STRING_SIZE(\"commit \");\n\t\t\t\tis_boundary = *line == '-';\n\n\t\t\t\tif (is_boundary)\n\t\t\t\t\tline++;\n\n\t\t\t\tif (!realloc_commits(&commits, ncommits, 1))\n\t\t\t\t\tdie(\"Commits\");\n\n\t\t\t\tcommit = calloc(1, sizeof(*commit));\n\t\t\t\tif (!commit)\n\t\t\t\t\tdie(\"Commit\");\n\t\t\t\tcommits[ncommits++] = commit;\n\t\t\t\tstring_copy_rev(commit->id, line);\n\t\t\t\tgraph->add_commit(graph, &commit->canvas, commit->id, line, is_boundary);\n\t\t\t\tgraph->render_parents(graph, &commit->canvas);\n\n\t\t\t\tif ((line = io_memchr(&buf, line, 0))) {\n\t\t\t\t\tprint_commit(graph, commit, line);\n\t\t\t\t\tcommit = NULL;\n\t\t\t\t}\n\n\t\t\t} else if (!prefixcmp(line, \"    \")) {\n\n\t\t\t\tif (!commit)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tprint_commit(graph, commit, line + 4);\n\n\t\t\t\tcommit = NULL;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn 0;\n}\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "test/tools/valgrind-Darwin.supp",
    "content": "{\n\tdarwin_libsystem_wordexp\n\tMemcheck:Cond\n\tfun:strstr\n\tfun:wordexp\n\tfun:path_expand\n\t...\n\tfun:main\n}\n"
  },
  {
    "path": "test/tree/chdir-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=16\n\ntigrc <<EOF\nset vertical-split = no\nEOF\n\nsteps '\n\t:view-tree\n\t:save-display tree-top.screen\n\n\t:2\n\t:enter\n\t:save-display tree-cd-depth-one.screen\n\n\t:/src\n\t:enter\n\t:save-display tree-cd-depth-two.screen\n\n\t:3\n\t:enter\n\t:save-display tree-cd-depth-three.screen\n\n\t:/scala\n\t:enter\n\t:/org\n\t:enter\n\t:/scalajs\n\t:enter\n\t:/benchmark\n\t:enter\n\t:5\n\t:save-display tree-cd-depth-seven.screen\n\n\t:3\n\t:back\n\t:save-display tree-cdup-depth-six.screen\n\n\t:parent\n\t:save-display tree-cdup-depth-five.screen\n\n\t:2\n\t:enter\n\t:save-display tree-cdup-depth-four.screen\n'\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\ntest_tig\n\nassert_equals 'tree-top.screen' <<EOF\nDirectory path /\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 common\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 deltablue\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 project\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 richards\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 sudoku\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 tracer\n-rw-r--r-- Jonas Fonseca    53 2013-10-14 16:19 -0400 .gitignore\n-rw-r--r-- Jonas Fonseca  1499 2013-10-26 12:54 -0400 LICENSE\n-rw-r--r-- Philipp Haller 2609 2014-01-16 15:32 +0100 README.md\n-rwxr-xr-x Jonas Fonseca   493 2014-03-01 17:26 -0500 run.sh\n \n \n \n[tree] 1a4ced7066ada2b26dcb0044f763a8438cd375df - file 1 of 10              100%\nEOF\n\nassert_equals 'tree-cd-depth-one.screen' <<EOF\nDirectory path /common/\ndrwxr-xr-x                                           ..\ndrwxr-xr-x Jonas Fonseca      2014-01-16 17:39 -0500 reference\ndrwxr-xr-x Jonas Fonseca      2014-03-01 17:26 -0500 src\n-rwxr-xr-x Jonas Fonseca 2875 2014-03-01 17:26 -0500 benchmark-runner.sh\n-rw-r--r-- Jonas Fonseca    0 2013-10-14 14:56 -0400 build.sbt\n-rw-r--r-- Jonas Fonseca  702 2013-10-26 12:54 -0400 d8-stubs.js\n-rw-r--r-- Jonas Fonseca  811 2014-03-01 17:26 -0500 start-benchmark.js\n \n \n \n \n \n \n[tree] Open parent directory                                                100%\nEOF\n\nassert_equals 'tree-cd-depth-two.screen' <<EOF\nDirectory path /common/src/\ndrwxr-xr-x                                      ..\ndrwxr-xr-x Jonas Fonseca 2014-03-01 17:26 -0500 main\n \n \n \n \n \n \n \n \n \n \n \n[tree] Open parent directory                                                100%\nEOF\n\nassert_equals 'tree-cd-depth-three.screen' <<EOF\nDirectory path /common/src/main/\ndrwxr-xr-x                                      ..\ndrwxr-xr-x Jonas Fonseca 2014-03-01 17:26 -0500 scala\n \n \n \n \n \n \n \n \n \n \n \n[tree] Open parent directory                                                100%\nEOF\n\nassert_equals 'tree-cd-depth-seven.screen' <<EOF\nDirectory path /common/src/main/scala/org/scalajs/benchmark/\ndrwxr-xr-x                                           ..\ndrwxr-xr-x Jonas Fonseca      2014-01-16 22:51 -0500 dom\n-rw-r--r-- Jonas Fonseca 3121 2014-03-01 17:26 -0500 Benchmark.scala\n-rw-r--r-- Jonas Fonseca 1380 2014-03-01 17:26 -0500 BenchmarkApp.scala\n \n \n \n \n \n \n \n \n \n[tree] 7c60e317c3f0e644881f3d0017f3e6ecc676978c - file 3 of 3               100%\nEOF\n\nassert_equals 'tree-cdup-depth-six.screen' <<EOF\nDirectory path /common/src/main/scala/org/scalajs/\ndrwxr-xr-x                                      ..\ndrwxr-xr-x Jonas Fonseca 2014-03-01 17:26 -0500 benchmark\n \n \n \n \n \n \n \n \n \n \n \n[tree] 494e60e33bcd60b64bf30aed2c944d956a0f5534 - file 1 of 1               100%\nEOF\n\nassert_equals 'tree-cdup-depth-five.screen' <<EOF\nDirectory path /common/src/main/scala/org/\ndrwxr-xr-x                                      ..\ndrwxr-xr-x Jonas Fonseca 2014-03-01 17:26 -0500 scalajs\n \n \n \n \n \n \n \n \n \n \n \n[tree] 0f27e103342d8dcd47881dc16913cd0719f591c2 - file 1 of 1               100%\nEOF\n\nassert_equals 'tree-cdup-depth-four.screen' <<EOF\nDirectory path /common/src/main/scala/\ndrwxr-xr-x                                      ..\ndrwxr-xr-x Jonas Fonseca 2014-03-01 17:26 -0500 org\n \n \n \n \n \n \n \n \n \n \n \n[tree] 72f232293e3e33cffbca8c0e60c978e0354658a1 - file 1 of 1               100%\nEOF\n"
  },
  {
    "path": "test/tree/default-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=16\n\ntigrc <<EOF\nset vertical-split = no\nset tree-view-date-use-author = yes\nEOF\n\nsteps '\n\t:view-tree\n\t:save-display tree-default.screen\n\n\t:toggle sort-field\n\t:save-display tree-default-mode.screen\n\n\t:toggle sort-field\n\t:save-display tree-default-author.screen\n\n\t:toggle sort-field\n\n\t:toggle sort-field\n\t:save-display tree-default-file-size.screen\n\n\t:toggle sort-field\n\t:save-display tree-default-date.screen\n\n\t:toggle sort-field\n\t:enter\n\t:save-display tree-common.screen\n\n\t:/d8-stubs\n\t:enter\n\t:save-display tree-d8-stubs.screen\n'\n\nin_work_dir create_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\ntest_tig\n\nassert_equals 'tree-default.screen' <<EOF\nDirectory path /\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 common\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 deltablue\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 project\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 richards\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 sudoku\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 tracer\n-rw-r--r-- Jonas Fonseca    53 2013-10-14 16:19 -0400 .gitignore\n-rw-r--r-- Jonas Fonseca  1499 2013-10-26 12:54 -0400 LICENSE\n-rw-r--r-- Philipp Haller 2609 2014-01-16 15:32 +0100 README.md\n-rwxr-xr-x Jonas Fonseca   493 2014-03-01 17:26 -0500 run.sh\n \n \n \n[tree] 1a4ced7066ada2b26dcb0044f763a8438cd375df - file 1 of 10              100%\nEOF\n\nassert_equals 'tree-default-author.screen' <<EOF\nDirectory path /\n-rw-r--r-- Jonas Fonseca    53 2013-10-14 16:19 -0400 .gitignore\n-rw-r--r-- Jonas Fonseca  1499 2013-10-26 12:54 -0400 LICENSE\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 common\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 deltablue\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 project\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 richards\n-rwxr-xr-x Jonas Fonseca   493 2014-03-01 17:26 -0500 run.sh\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 sudoku\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 tracer\n-rw-r--r-- Philipp Haller 2609 2014-01-16 15:32 +0100 README.md\n \n \n \n[tree] be06d7d413c0b3f2d2f6f18061c8bfb65c510b64 - file 7 of 10              100%\nEOF\n\nassert_equals 'tree-default-date.screen' <<EOF\nDirectory path /\n-rw-r--r-- Jonas Fonseca    53 2013-10-14 16:19 -0400 .gitignore\n-rw-r--r-- Jonas Fonseca  1499 2013-10-26 12:54 -0400 LICENSE\n-rw-r--r-- Philipp Haller 2609 2014-01-16 15:32 +0100 README.md\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 common\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 deltablue\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 project\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 richards\n-rwxr-xr-x Jonas Fonseca   493 2014-03-01 17:26 -0500 run.sh\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 sudoku\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 tracer\n \n \n \n[tree] be06d7d413c0b3f2d2f6f18061c8bfb65c510b64 - file 7 of 10              100%\nEOF\n\nassert_equals 'tree-default-file-size.screen' <<EOF\nDirectory path /\n-rw-r--r-- Jonas Fonseca    53 2013-10-14 16:19 -0400 .gitignore\n-rwxr-xr-x Jonas Fonseca   493 2014-03-01 17:26 -0500 run.sh\n-rw-r--r-- Jonas Fonseca  1499 2013-10-26 12:54 -0400 LICENSE\n-rw-r--r-- Philipp Haller 2609 2014-01-16 15:32 +0100 README.md\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 common\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 deltablue\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 project\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 richards\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 sudoku\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 tracer\n \n \n \n[tree] be06d7d413c0b3f2d2f6f18061c8bfb65c510b64 - file 7 of 10              100%\nEOF\n\nassert_equals 'tree-default-mode.screen' <<EOF\nDirectory path /\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 common\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 deltablue\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 project\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 richards\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 sudoku\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 tracer\n-rw-r--r-- Jonas Fonseca    53 2013-10-14 16:19 -0400 .gitignore\n-rw-r--r-- Jonas Fonseca  1499 2013-10-26 12:54 -0400 LICENSE\n-rw-r--r-- Philipp Haller 2609 2014-01-16 15:32 +0100 README.md\n-rwxr-xr-x Jonas Fonseca   493 2014-03-01 17:26 -0500 run.sh\n \n \n \n[tree] 1a4ced7066ada2b26dcb0044f763a8438cd375df - file 1 of 10              100%\nEOF\n\nassert_equals 'tree-common.screen' <<EOF\nDirectory path /common/\ndrwxr-xr-x                                           ..\ndrwxr-xr-x Jonas Fonseca      2014-01-16 17:39 -0500 reference\ndrwxr-xr-x Jonas Fonseca      2014-03-01 17:26 -0500 src\n-rwxr-xr-x Jonas Fonseca 2875 2014-03-01 17:26 -0500 benchmark-runner.sh\n-rw-r--r-- Jonas Fonseca    0 2013-10-14 13:15 -0400 build.sbt\n-rw-r--r-- Jonas Fonseca  702 2013-10-26 12:54 -0400 d8-stubs.js\n-rw-r--r-- Jonas Fonseca  811 2014-03-01 17:26 -0500 start-benchmark.js\n \n \n \n \n \n \n[tree] Open parent directory                                                100%\nEOF\n\nassert_equals 'tree-d8-stubs.screen' <<EOF\ndrwxr-xr-x Jonas Fonseca      2014-03-01 17:26 -0500 src\n-rwxr-xr-x Jonas Fonseca 2875 2014-03-01 17:26 -0500 benchmark-runner.sh\n-rw-r--r-- Jonas Fonseca    0 2013-10-14 13:15 -0400 build.sbt\n-rw-r--r-- Jonas Fonseca  702 2013-10-26 12:54 -0400 d8-stubs.js\n[tree] f05286bfd477c28503b946e93925b3d32ce4178d - file 5 of 6                87%\n/*                     __                                               *\\\\\n**     ________ ___   / /  ___      __ ____  Scala.js Benchmarks        **\n**    / __/ __// _ | / /  / _ | __ / // __/  (c) 2013, Jonas Fonseca    **\n**  __\\ \\/ /__/ __ |/ /__/ __ |/_// /_\\ \\                               **\n** /____/\\___/_/ |_/____/_/ | |__/ /____/                               **\n**                          |/____/                                     **\n\\*                                                                      */\n \n/*\n[blob] common/d8-stubs.js - line 1 of 16                                     56%\nEOF\n"
  },
  {
    "path": "test/tree/file-name-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=15\nexport COLUMNS=80\n\nsteps '\n\t:set vertical-split = no\n\n\t:view-tree\n\t:save-display root-dir.screen\n\n\t:enter\n\t:save-display first-child-dir.screen\n\t:enter\n\n\t:3\n\t:enter\n\t:save-display second-child-dir.screen\n\n\t:3\n\t:enter\n\t:save-display second-child-dir-first-file.screen\n'\n\ntest_setup_work_dir()\n{\n\tmkdir -p -- \"-- foo bar\"\n\ttouch -- \"-- foo bar/-- boo far\"\n\ttouch -- \"-- foo bar/as测试asd\"\n\n\tmkdir -p -- \"-foo\"\n\tprintf 'OK\\n' > \"-foo/-bar\"\n\ttouch -- \"-foo/-bar\"\n\n\tgit add .\n\tgit_commit -m \"Initial\"\n}\n\ngit_init\ntest_tig\n\nassert_equals 'root-dir.screen' <<EOF\nDirectory path /\ndrwxr-xr-x Committer 2009-02-13 23:31 +0000 -- foo bar\ndrwxr-xr-x Committer 2009-02-13 23:31 +0000 -foo\n\n\n\n\n\n\n\n\n\n\n[tree] 9aedb94abc2d704ba5c2182f882c5743e9d1e386 - file 1 of 2               100%\nEOF\n\nassert_equals 'first-child-dir.screen' <<EOF\nDirectory path /-- foo bar/\ndrwxr-xr-x                                    ..\n-rw-r--r-- Committer 0 2009-02-13 23:31 +0000 -- boo far\n-rw-r--r--           0                        /as\\346\\265\\213\\350\\257\\225asd\"\n\n\n\n\n\n\n\n\n\n[tree] Open parent directory                                                100%\nEOF\n\nassert_equals 'second-child-dir.screen' <<EOF\nDirectory path /-foo/\ndrwxr-xr-x                                    ..\n-rw-r--r-- Committer 3 2009-02-13 23:31 +0000 -bar\n \n \n \n \n \n \n \n \n \n \n[tree] Open parent directory                                                100%\nEOF\n\nassert_equals 'second-child-dir-first-file.screen' <<EOF\nDirectory path /-foo/\ndrwxr-xr-x                                    ..\n-rw-r--r-- Committer 3 2009-02-13 23:31 +0000 -bar\n \n[tree] d86bac9de59abcc26bc7956c1e842237c7581859 - file 1 of 1               100%\nOK\n \n \n \n \n \n \n \n[blob] -foo/-bar - line 1 of 1                                              100%\nEOF\n"
  },
  {
    "path": "test/tree/submodule-editor-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=14\n\nexecutable exec-env <<EOF\n#!/bin/sh\n\n{\n\techo \"\\$1\"\n\tprintf ' - pwd='; pwd\n\tfor arg in git-dir show-cdup is-inside-work-tree show-superproject-working-tree; do\n\t\techo \" - \\$arg=\\$(git rev-parse --\\$arg)\"\n\tdone\n} | sed \"s,$output_dir,ROOT,\" >> \"$output_dir/exec-env\"\nEOF\n\ntigrc <<EOF\nset line-graphics = ascii\nset diff-view-line-number = yes\nbind tree <C-p> !exec-env end\nEOF\n\nsteps '\n\t:view-tree\n\t:exec !assert-var [%(repo:worktree)] == [../../../bench]\n\t:save-display bench-common-src.screen\n\t:parent\n\t:parent\n\t:/README.md\n\t:save-display bench.screen\n\t:edit\n\t<C-p>\n'\n\nsetup_submodule_project()\n{\n\tmkdir -p \"$output_dir/base\"\n\tcd \"$output_dir/base\"\n\tcreate_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\tcd \"$output_dir\"\n\tgit_init\n\tcd \"$output_dir/$work_dir\"\n\tgit -c protocol.file.allow=always submodule add \"$output_dir/base\" bench\n\tgit_commit -m \"Adding benchmark\"\n}\n\ntest_exec_work_dir setup_submodule_project\nwork_dir=\"$work_dir/bench/common/src\"\n\nin_work_dir exec-env start\ntest_tig\n\nassert_vars 1\n\nassert_equals 'bench-common-src.screen' <<EOF\nDirectory path /common/src/\ndrwxr-xr-x                                      ..\ndrwxr-xr-x Jonas Fonseca 2014-03-01 17:26 -0500 main\n \n \n \n \n \n \n \n \n \n[tree] Open parent directory                                                100%\nEOF\n\nassert_equals 'bench.screen' <<EOF\nDirectory path /\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 common\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 deltablue\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 project\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 richards\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 sudoku\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 tracer\n-rw-r--r-- Jonas Fonseca    53 2013-10-14 16:19 -0400 .gitignore\n-rw-r--r-- Jonas Fonseca  1499 2013-10-26 12:54 -0400 LICENSE\n-rw-r--r-- Philipp Haller 2609 2014-01-16 15:32 +0100 README.md\n-rwxr-xr-x Jonas Fonseca   493 2014-03-01 17:26 -0500 run.sh\n \n[tree] 08833305259e10b62c96bddf1def0487644885e3 - file 9 of 10              100%\nEOF\n\nassert_equals 'editor.log' <<EOF\nREADME.md\n# Scala.js Benchmarks\n\nThis is a port of the Dart\n[benchmark harness](https://github.com/dart-lang/benchmark_harness) to\n[Scala.js](https://github.com/scala-js/scala-js).\nEOF\n\nassert_equals 'exec-env' <<EOF\nstart\n - pwd=ROOT/work-dir/bench/common/src\n - git-dir=ROOT/work-dir/.git/modules/bench\n - show-cdup=../../\n - is-inside-work-tree=true\n - show-superproject-working-tree=ROOT/work-dir\nend\n - pwd=ROOT/work-dir/bench\n - git-dir=ROOT/work-dir/.git/modules/bench\n - show-cdup=\n - is-inside-work-tree=true\n - show-superproject-working-tree=ROOT/work-dir\nEOF\n"
  },
  {
    "path": "test/tree/worktree-editor-test",
    "content": "#!/bin/sh\n\n. libtest.sh\n. libgit.sh\n\nexport LINES=14\n\nexecutable exec-env <<EOF\n#!/bin/sh\n\n{\n\techo \"\\$1\"\n\tprintf ' - pwd='; pwd\n\tfor arg in git-dir show-cdup is-inside-work-tree show-superproject-working-tree; do\n\t\techo \" - \\$arg=\\$(git rev-parse --\\$arg)\"\n\tdone\n} | sed \"s,$output_dir,ROOT,\" >> \"$output_dir/exec-env\"\nEOF\n\ntigrc <<EOF\nset line-graphics = ascii\nset diff-view-line-number = yes\nbind tree <C-p> !exec-env end\nEOF\n\nsteps '\n\t:view-tree\n\t:exec !assert-var [%(repo:worktree)] == []\n\t:save-display bench-common-src.screen\n\t:parent\n\t:parent\n\t:/README.md\n\t:save-display bench.screen\n\t:edit\n\t<C-p>\n'\n\nsetup_worktree_project()\n{\n\tmkdir -p \"$output_dir/base\"\n\tcd \"$output_dir/base\"\n\tcreate_repo_from_tgz \"$base_dir/files/scala-js-benchmarks.tgz\"\n\tgit branch work-branch ee912870202200a0b9cf4fd86ba57243212d341e\n\tgit worktree add \"$output_dir/$work_dir\" work-branch\n}\n\ntest_exec_work_dir setup_worktree_project\nwork_dir=\"$work_dir/common/src\"\n\nin_work_dir exec-env start\ntest_tig\n\nassert_vars 1\n\nassert_equals 'bench-common-src.screen' <<EOF\nDirectory path /common/src/\ndrwxr-xr-x                                      ..\ndrwxr-xr-x Jonas Fonseca 2014-03-01 17:26 -0500 main\n \n \n \n \n \n \n \n \n \n[tree] Open parent directory                                                100%\nEOF\n\nassert_equals 'bench.screen' <<EOF\nDirectory path /\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 common\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 deltablue\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 project\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 richards\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 sudoku\ndrwxr-xr-x Jonas Fonseca       2014-03-01 17:26 -0500 tracer\n-rw-r--r-- Jonas Fonseca    53 2013-10-14 16:19 -0400 .gitignore\n-rw-r--r-- Jonas Fonseca  1499 2013-10-26 12:54 -0400 LICENSE\n-rw-r--r-- Philipp Haller 2609 2014-01-16 15:32 +0100 README.md\n-rwxr-xr-x Jonas Fonseca   493 2014-03-01 17:26 -0500 run.sh\n \n[tree] 08833305259e10b62c96bddf1def0487644885e3 - file 9 of 10              100%\nEOF\n\nassert_equals 'editor.log' <<EOF\nREADME.md\n# Scala.js Benchmarks\n\nThis is a port of the Dart\n[benchmark harness](https://github.com/dart-lang/benchmark_harness) to\n[Scala.js](https://github.com/scala-js/scala-js).\nEOF\n\nassert_equals 'exec-env' <<EOF\nstart\n - pwd=ROOT/work-dir/common/src\n - git-dir=ROOT/base/.git/worktrees/work-dir\n - show-cdup=../../\n - is-inside-work-tree=true\n - show-superproject-working-tree=\nend\n - pwd=ROOT/work-dir\n - git-dir=ROOT/base/.git/worktrees/work-dir\n - show-cdup=\n - is-inside-work-tree=true\n - show-superproject-working-tree=\nEOF\n"
  },
  {
    "path": "tigrc",
    "content": "# Tig default configuration\n#\n# Please see 'man tigrc' for a complete reference.\n\n# Settings\n# --------\n# Most of these settings can be toggleable, either via the toggle-*\n# actions or via the option menu (bound to `o` by default).\n\n# View settings\n#\n# Supported column types and their options:\n#\n#   author, committer\n#    - display (enum) [no|full|abbreviated|email|email-user]\n#\t\t\t\t\t: Show author/committer information?\n#    - width (int)\t\t\t: Fixed width when nonzero\n#    - maxwidth (int)\t\t\t: Autosize limit\n#\n#   commit-title\n#    - display (bool)\t\t\t: Show the commit title?\n#    - graph (enum) [no|v2|v1]\t\t: Show the commit graph? (main view only)\n#    - refs (bool)\t\t\t: Show branches, tags and remotes? (main view only)\n#    - overflow (boolint)\t\t: Highlight overflows? Defaults to 50 when enabled.\n#\n#   date\n#    - display (enum) [no|default|relative|relative-compact|custom]\n#\t\t\t\t\t: Show dates?\n#    - use-author (bool)\t\t: Show author date instead of committer date?\n#    - local (bool)\t\t\t: Show local dates?\n#    - format (string)\t\t\t: Custom strftime(3) format\n#\t\t\t\t\t  Note: %Z is formatted as %z\n#    - width (int)\t\t\t: Fixed width when nonzero\n#\n#   file-name\n#    - display (enum) [no|always|auto]\t: Show file names?\n#    - width (int)\t\t\t: Fixed width when nonzero\n#    - maxwidth (int)\t\t\t: Autosize limit\n#\n#   file-size\n#    - display (enum) [no|default|units]\n#\t\t\t\t\t: Show file sizes?\n#    - width (int)\t\t\t: Fixed width when nonzero\n#\n#   id\n#    - display (bool)\t\t\t: Show commit/tree ID?\n#    - width (int)\t\t\t: Fixed width when nonzero\n#\n#   line-number\n#    - display (bool)\t\t\t: Show line numbers?\n#    - interval (int)\t\t\t: Interval between line numbers; defaults to 5\n#    - width (int)\t\t\t: Fixed width when nonzero\n#\n#   mode\n#    - display (bool)\t\t\t: Show file modes?\n#    - width (int)\t\t\t: Fixed width when nonzero\n#\n#   ref\n#    - display (bool)\t\t\t: Show ref names?\n#    - width (int)\t\t\t: Fixed width when nonzero\n#    - maxwidth (int)\t\t\t: Autosize limit\n#\n#   status\n#    - display (enum) [no|short|long]\t: Show status label?\n#\n#   text\n#    - display (bool)\t\t\t: Show text?\n#    - commit-title-overflow (boolint)\t: Highlight overflow in log and diff view?\n#\n\nset blame-view\t= id:yes,color file-name:auto author:full committer:no date:default,format=\"%Y-%m-%d\" line-number:yes,interval=1 text\nset grep-view\t= file-name:no line-number:yes,interval=1 text\nset main-view\t= line-number:no,interval=5 id:no date:default,format=\"%Y-%m-%d\" author:full committer:no commit-title:yes,graph,refs,overflow=no\nset reflog-view\t= line-number:no,interval=5 id:yes date:no,format=\"%Y-%m-%d\" author:no committer:no commit-title:yes,refs,overflow=no\nset refs-view\t= line-number:no id:no date:default,format=\"%Y-%m-%d\" author:full committer:no ref commit-title\nset stash-view\t= line-number:no,interval=5 id:no date:default,format=\"%Y-%m-%d\" author:full commit-title\nset status-view\t= line-number:no,interval=5 status:short file-name\nset tree-view\t= line-number:no,interval=5 mode author:full committer:no file-size date:default,format=\"%Y-%m-%d\" id:no file-name\n\n# Pager based views\nset pager-view\t= line-number:no,interval=5 text\nset stage-view\t= line-number:no,interval=5 text\nset log-view\t= line-number:no,interval=5 text\nset blob-view\t= line-number:no,interval=5 text\nset diff-view\t= line-number:no,interval=5 text:yes,commit-title-overflow=no\n\n# UI display settings\nset show-changes\t\t= yes\t\t# Show changes commits in the main view?\nset show-untracked\t\t= yes\t\t# Show also untracked changes?\nset wrap-lines\t\t\t= no\t\t# Wrap long lines in pager views?\nset tab-size\t\t\t= 8\t\t# Number of spaces to use when expanding tabs\nset line-graphics\t\t= default\t# Enum: ascii, default, utf-8, auto\nset truncation-delimiter\t= ~\t\t# Character drawn for truncations, or \"utf-8\"\n\n# Format reference names based on type:\n#  - head\t\t: The current HEAD.\n#  - tag\t\t: An annotated tag.\n#  - local-tag\t\t: A lightweight tag.\n#  - remote\t\t: A remote.\n#  - tracked-remote\t: The remote tracked by current HEAD.\n#  - replace\t\t: A replaced reference.\n#  - branch\t\t: A branch.\n#  - stash\t\t: The stash.\n#  - note\t\t: Notes.\n#  - prefetch\t\t: Refs prefetched by `git maintenance`.\n#  - other\t\t: Any other reference.\n#\n# Expects a space-separated list of format strings.\n# If no format is specified for `local-tag`, the format for `tag` is used.\n# Similarly, if no format is specified for `tracked-remote`, the format for\n# `remote` is used, and if no format is specified for any other reference\n# type, the format for `branch` is used.\n# Prefix with `hide:` to not show that reference type, e.g. `hide:prefetch`.\nset reference-format\t\t= [branch] <tag> {remote} ~replace~\n\n# Settings controlling how content is read from Git\nset commit-order\t\t= auto\t\t# Enum: auto, default, topo, date, reverse (main)\nset status-show-untracked-dirs\t= yes\t\t# Show files in untracked directories? (status)\nset status-show-untracked-files\t= yes\t\t# Show untracked files?\nset ignore-space\t\t= no\t\t# Enum: no, all, some, at-eol (diff)\nset show-notes\t\t\t= yes\t\t# When non-bool passed as `--show-notes=...` (diff)\n#set diff-context\t\t= 3\t\t# Number of lines to show around diff changes (diff)\n#set word-diff\t\t\t= yes\t\t# Show a word diff? (diff)\n#set diff-options\t\t= -C\t\t# User-defined options for `tig show` (git-diff)\n#set diff-highlight\t\t= yes\t\t# String (or bool): Path to diff-highlight script,\n\t\t\t\t\t\t#                   defaults to `diff-highlight`.\nset diff-indicator\t\t= yes\t\t# Show diff +/- signs?\n#set blame-options\t\t= -C -C -C\t# User-defined options for `tig blame` (git-blame)\nset log-options\t\t\t= --cc --stat\t# User-defined options for `tig log` (git-log)\n#set main-options\t\t= -n 1000\t# User-defined options for `tig` (git-log)\nset mailmap\t\t\t= yes\t\t# Use .mailmap to show canonical name and email address?\n\n# Misc\nset start-on-head\t\t= no\t\t# Start with cursor on HEAD commit?\nset refresh-mode\t\t= auto\t\t# Enum: manual, auto, after-command, periodic\nset refresh-interval\t\t= 10\t\t# Interval in seconds between refreshes\nset ignore-case\t\t\t= no\t\t# Enum: no, yes, smart-case\n\t\t\t\t\t\t# Ignore case when searching?\nset wrap-search\t\t\t= yes\t\t# Wrap around to top/bottom of view when searching?\nset focus-child\t\t\t= yes\t\t# Move focus to child view when opened?\nset send-child-enter\t\t= yes\t\t# Propagate \"enter\" keypresses to child views?\nset horizontal-scroll\t\t= 50%\t\t# Number of columns to scroll as % of width\nset split-view-height\t\t= 67%\t\t# Height of the bottom view for horizontal splits\nset vertical-split\t\t= auto\t\t# Enum: horizontal, vertical, auto; Use auto to\n\t\t\t\t\t\t# switch to horizontal split when width allows it\nset split-view-width\t\t= 50%\t\t# Width of right-most view for vertical splits\nset editor-line-number\t\t= yes\t\t# Automatically pass line number to editor? Used\n\t\t\t\t\t\t# for opening file at specific line e.g. from a diff\nset history-size\t\t= 500\t\t# Size of persistent history, 0 to disable\nset mouse\t\t\t= no\t\t# Enable mouse support?\nset mouse-scroll\t\t= 3\t\t# Number of lines to scroll via the mouse\nset mouse-wheel-cursor\t\t= no\t\t# Prefer moving the cursor to scrolling the view?\nset pgrp\t\t\t= no\t\t# Make tig process-group leader?\nset pager-autoscroll\t\t= no\t\t# Scroll the pager view automatically while loading?\n\n# User-defined commands\n# ---------------------\n# These commands allow to run shell commands directly from within Tig.\n# Unless otherwise specified, commands are run in the foreground with\n# their console output shown (as if '!' was specified). When multiple\n# command options are specified their behavior are combined, e.g. \"?<git\n# commit\" will prompt the user whether to execute the command and will\n# exit Tig after completion.\n#\n#   !\tRun the command in the foreground with output shown.\n#   @\tRun the command in the background with no output.\n#   ?\tPrompt the user before executing the command.\n#   +\tRun the command synchronously, and echo the first line of output to the status bar.\n#   <\tExit Tig after executing the command.\n#   >\tRe-open Tig instantly in the last displayed view after executing the command.\n#\n# User-defined commands can optionally refer to Tig's internal state\n# using the following variable names, which are substituted before\n# commands are run (see 'man tigrc' for the full list):\n#\n#   %(head)\t\tThe current ref ID. Defaults to HEAD\n#   %(commit)\t\tThe current commit ID.\n#   %(blob)\t\tThe current blob ID.\n#   %(branch)\t\tThe current branch name.\n#   %(remote)\t\tThe current remote name.\n#   %(tag)\t\tThe current tag name.\n#   %(stash)\t\tThe current stash name.\n#   %(directory)\tThe current directory path in the tree view;\n#\t\t\tempty for the root directory.\n#   %(file)\t\tThe currently selected file.\n#   %(ref)\t\tThe reference given to blame or HEAD if undefined.\n#   %(revargs)\t\tThe revision arguments passed on the command line.\n#   %(fileargs)\t\tThe file arguments passed on the command line.\n#   %(cmdlineargs)\tAll other options passed on the command line.\n#   %(diffargs)\t\tThe diff options from `diff-options` or `TIG_DIFF_OPTS`\n#   %(prompt)\t\tPrompt for the argument value.\n#   %(repo:head)\tThe name of the checked out branch.\n#   %(repo:remote)\tThe remote name associated with the checked out branch.\n#   %(repo:upstream)\tThe upstream branch associated with the checked out branch.\n\nbind main\tC\t?git cherry-pick %(commit)\nbind status\tC\t!git commit\nbind stash\tA\t?git stash apply %(stash)\nbind stash\tP\t?git stash pop %(stash)\nbind stash\t!\t?git stash drop %(stash)\nbind refs\tC\t?git checkout %(branch)\nbind refs\t!\t?git branch -D %(branch)\nbind reflog\tC\t?git checkout %(branch)\nbind reflog\t!\t?git reset --hard %(commit)\n\n# Normal commands\n# ---------------\n\n# View switching\nbind generic\tm\tview-main\nbind generic\td\tview-diff\nbind generic\tl\tview-log\nbind generic\tL\tview-reflog\nbind generic\tt\tview-tree\nbind generic\tf\tview-blob\nbind generic\tb\tview-blame\nbind generic\tr\tview-refs\nbind generic\tp\tview-pager\nbind generic\th\tview-help\nbind generic\ts\tview-status\nbind generic\tS\tview-status\t\t# Compat binding to avoid going crazy!\nbind generic\tc\tview-stage\nbind generic\ty\tview-stash\nbind generic\tg\tview-grep\n\n# View manipulation\nbind generic\t<Enter>\tenter\t\t\t# Enter and open selected entry\nbind generic\t<Lt>\tback\t\t\t# Go back to the previous view state\nbind generic\t<Down>\tnext\t\t\t# Move to next\nbind generic\t<C-N>\tnext\nbind generic\tJ\tnext\nbind generic\t<Up>\tprevious\t\t# Move to previous\nbind generic\t<C-P>\tprevious\nbind generic\tK\tprevious\nbind generic\t,\tparent\t\t\t# Move to parent\nbind generic\t<Tab>\tview-next\t\t# Move focus to the next view\nbind generic\tR\trefresh\t\t\t# Reload and refresh view\nbind generic\t<F5>\trefresh\nbind generic\tO\tmaximize\t\t# Maximize the current view\nbind generic\tq\tview-close\t\t# Close the current view\nbind generic\tQ\tquit\t\t\t# Close all views and quit\nbind generic\t<C-C>\tquit\t\t\t# Close all views and quit\n\n# View specific\nbind status\tu\tstatus-update\t\t# Stage/unstage changes in file\nbind status\t!\tstatus-revert\t\t# Revert changes in file\nbind status\tM\tstatus-merge\t\t# Open git-mergetool(1)\n# bind status\t???\t:toggle status\t\t# Show short or long status labels\nbind stage\tu\tstatus-update\t\t# Stage/unstage current diff (c)hunk\nbind stage\t1\tstage-update-line\t# Stage/unstage current line\nbind stage\t2\tstage-update-part\t# Stage/unstage part of chunk\nbind stage\t!\tstatus-revert\t\t# Revert current diff (c)hunk\nbind stage\t\\\tstage-split-chunk\t# Split current diff (c)hunk\nbind stage\t@\t:/^@@\t\t\t# Jump to next (c)hunk\nbind stage\t[\t:toggle diff-context -1\t# Decrease the diff context\nbind stage\t]\t:toggle diff-context +1\t# Increase the diff context\nbind diff\t@\t:/^@@\t\t\t# Jump to next (c)hunk\nbind diff\t[\t:toggle diff-context -1\t# Decrease the diff context\nbind diff\t]\t:toggle diff-context +1\t# Increase the diff context\nbind pager\t@\t:/^@@\t\t\t# Jump to next (c)hunk\nbind main\tH\t:goto HEAD\t\t# Jump to HEAD commit\nbind main\tG\t:toggle commit-title-graph # Toggle revision graph visualization\nbind main\tF\t:toggle commit-title-refs  # Toggle reference display (tags/branches)\nbind reflog\tF\t:toggle commit-title-refs  # Toggle reference display (tags/branches)\n\n# Cursor navigation\nbind generic\tj\tmove-down\nbind generic\tk\tmove-up\nbind generic\t<C-D>\tmove-half-page-down\nbind generic\t<C-U>\tmove-half-page-up\nbind generic\t<PgDown> move-page-down\nbind generic\t<Space>\tmove-page-down\nbind generic\t<PgUp>\tmove-page-up\nbind generic\t-\tmove-page-up\nbind generic\t<Home>\tmove-first-line\nbind generic\t<End>\tmove-last-line\n\n# Scrolling\nbind generic\t|\tscroll-first-col\nbind generic\t<Left>\tscroll-left\nbind generic\t<Right>\tscroll-right\nbind generic\t<Ins>\tscroll-line-up\nbind generic\t<C-Y>\tscroll-line-up\nbind generic\t<Del>\tscroll-line-down\nbind generic\t<C-E>\tscroll-line-down\nbind generic\t<SBack>\tscroll-page-up\nbind generic\t<SFwd>\tscroll-page-down\n# bind generic\t???\tscroll-half-page-up\n# bind generic\t???\tscroll-half-page-down\n\n# Searching\nbind generic\t/\tsearch\nbind generic\t?\tsearch-back\nbind generic\tn\tfind-next\nbind generic\tN\tfind-prev\n# Navigation keys used while searching\nbind search\t<Down>\tfind-next\nbind search\t<C-N>\tfind-next\nbind search\t<C-J>\tfind-next\nbind search\t<Up>\tfind-prev\nbind search\t<C-P>\tfind-prev\nbind search\t<C-K>\tfind-prev\nbind search\t<C-C>\tview-close\n\n# Option manipulation\nbind generic\to\toptions\t\t\t# Open the options menu\n# Bindings for toggling settings\nbind generic\tI\t:toggle sort-order\t# Toggle ascending/descending sort order\nbind generic\ti\t:toggle sort-field\t# Toggle field to sort by\nbind generic\t<Hash>\t:toggle line-number\t# Toggle line numbers\nbind generic\tD\t:toggle date\t\t# Toggle date display\nbind generic\tA\t:toggle author\t\t# Toggle author display\nbind generic\tT\t:toggle committer\t# Toggle committer display\n# bind generic\t???\t:toggle commit-title-display\n\t\t\t\t\t\t# Toggle commit title display\nbind generic\t~\t:toggle line-graphics\t# Toggle (line) graphics mode\nbind generic\tF\t:toggle file-name\t# Toggle file name display\n# bind generic\t???\t:toggle show-changes\t# Toggle local changes display in the main view\nbind generic\tW\t:toggle ignore-space\t# Toggle ignoring whitespace in diffs\n# bind generic\t???\t:toggle ignore-case\t# Toggle ignoring case when searching\n# bind generic\t???\t:toggle commit-order\t# Toggle commit ordering\nbind generic\tX\t:toggle id\t\t# Toggle commit ID display\nbind generic\t$\t:toggle commit-title-overflow\n\t\t\t\t\t\t# Toggle highlighting of commit title overflow\n# bind generic\t???\t:toggle file-size\t# Toggle file size format\n# bind generic\t???\t:toggle status\t\t# Toggle status display\n# bind generic\t???\t:toggle status-show-untracked-dirs\n\t\t\t\t\t\t# Toggle display of file in untracked directories\n# bind generic\t???\t:toggle vertical-split\t# Toggle vertical split\n# bind generic\t???\t:toggle word-diff\t# Toggle word diff\n# bind generic\t???\t:toggle diff-indicator\t# Toggle display of diff +/- signs\nbind generic\t%\t:toggle file-filter\t# Toggle filtering by pathspecs in file-args\nbind generic\t^\t:toggle rev-filter\t# Toggle filtering by revisions in rev-args\n\n# Misc\nbind generic\te\tedit\t\t\t# Open in editor\nbind generic\t:\tprompt\t\t\t# Open the prompt\nbind generic\t<C-L>\tscreen-redraw\t\t# Redraw the screen\nbind generic\tz\tstop-loading\t\t# Stop all loading views\nbind generic\tv\tshow-version\t\t# Show Tig version\n\n# Colors\n# ------\n\n# The colors in the UI can be customized. In addition to the colors used\n# for the UI you can also define new colors to use in the pager, blob,\n# diff, and stage views by placing the text to match for in quotes.\n#\n# Prefix the name of a view to set a color only for that view, e.g.\n#\n#\tcolor grep.file\t\t\tblue\tdefault\n#\n# As an example, this setting will to color Signed-off-by lines with a\n# yellow foreground color and use the default background color.\n#\n#\tcolor \"    Signed-off-by\"\tyellow\tdefault\n#\n# Note the four leading spaces in the string to match. This is because\n# Git automatically indents commit messages by four spaces.\n\ncolor \"---\"\t\t\tblue\tdefault\ncolor \"diff --\"\t\t\tyellow\tdefault\ncolor \"--- \"\t\t\tyellow\tdefault\ncolor \"+++ \"\t\t\tyellow\tdefault\ncolor \"@@\"\t\t\tmagenta\tdefault\ncolor \"+\"\t\t\tgreen\tdefault\ncolor \" +\"\t\t\tgreen\tdefault\ncolor \"-\"\t\t\tred\tdefault\ncolor \" -\"\t\t\tred\tdefault\ncolor \"index \"\t\t\tblue\tdefault\ncolor \"old mode \"\t\tyellow\tdefault\ncolor \"new mode \"\t\tyellow\tdefault\ncolor \"new file mode \"\t\tyellow\tdefault\ncolor \"deleted file mode \"\tyellow\tdefault\ncolor \"copy from \"\t\tyellow\tdefault\ncolor \"copy to \"\t\tyellow\tdefault\ncolor \"rename from \"\t\tyellow\tdefault\ncolor \"rename to \"\t\tyellow\tdefault\ncolor \"similarity \"\t\tyellow\tdefault\ncolor \"dissimilarity \"\t\tyellow\tdefault\ncolor \"\\ No newline at end of file\"\tblue\tdefault\ncolor \"diff-tree \"\t\tblue\tdefault\ncolor \"Author: \"\t\tcyan\tdefault\ncolor \"Commit: \"\t\tmagenta\tdefault\ncolor \"Tagger: \"\t\tmagenta\tdefault\ncolor \"Merge: \"\t\t\tblue\tdefault\ncolor \"Date: \"\t\t\tyellow\tdefault\ncolor \"AuthorDate: \"\t\tyellow\tdefault\ncolor \"CommitDate: \"\t\tyellow\tdefault\ncolor \"TaggerDate: \"\t\tyellow\tdefault\ncolor \"Refs: \"\t\t\tred\tdefault\ncolor \"Reflog: \"\t\tred\tdefault\ncolor \"Reflog message: \"\tyellow\tdefault\ncolor \"stash@{\"\t\t\tmagenta\tdefault\ncolor \"commit \"\t\t\tgreen\tdefault\ncolor \"parent \"\t\t\tblue\tdefault\ncolor \"tree \"\t\t\tblue\tdefault\ncolor \"author \"\t\t\tgreen\tdefault\ncolor \"committer \"\t\tmagenta\tdefault\ncolor \"    Signed-off-by:\"\tyellow\tdefault\ncolor \"    Acked-by:\"\t\tyellow\tdefault\ncolor \"    Reviewed-by:\"\tyellow\tdefault\ncolor \"    Helped-by:\"\t\tyellow\tdefault\ncolor \"    Reported-by:\"\tyellow\tdefault\ncolor \"    Mentored-by:\"\tyellow\tdefault\ncolor \"    Suggested-by:\"\tyellow\tdefault\ncolor \"    Cc:\"\t\t\tyellow\tdefault\ncolor \"    Noticed-by:\"\t\tyellow\tdefault\ncolor \"    Tested-by:\"\t\tyellow\tdefault\ncolor \"    Improved-by:\"\tyellow\tdefault\ncolor \"    Thanks-to:\"\t\tyellow\tdefault\ncolor \"    Based-on-patch-by:\"\tyellow\tdefault\ncolor \"    Contributions-by:\"\tyellow\tdefault\ncolor \"    Co-authored-by:\"\tyellow\tdefault\ncolor \"    Requested-by:\"\tyellow\tdefault\ncolor \"    Original-patch-by:\"\tyellow\tdefault\ncolor \"    Inspired-by:\"\tyellow\tdefault\ncolor default\t\t\tdefault\tdefault\tnormal\ncolor cursor\t\t\twhite\tgreen\tbold\ncolor cursor-blur\t\twhite\tgreen\ncolor status\t\t\tgreen\tdefault\ncolor delimiter\t\t\tmagenta\tdefault\ncolor date\t\t\tblue\tdefault\ncolor mode\t\t\tcyan\tdefault\ncolor id\t\t\tmagenta\tdefault\ncolor overflow\t\t\tred\tdefault\ncolor header\t\t\tyellow\tdefault\ncolor section\t\t\tcyan\tdefault\ncolor directory\t\t\tyellow\tdefault\ncolor file\t\t\tdefault\tdefault\ncolor grep.file\t\t\tblue\tdefault\ncolor file-size\t\t\tdefault\tdefault\ncolor line-number\t\tcyan\tdefault\ncolor title-blur\t\twhite\tblue\ncolor title-focus\t\twhite\tblue\tbold\ncolor main-commit\t\tdefault\tdefault\ncolor main-annotated\t\tdefault\tdefault\tbold\ncolor main-tag\t\t\tmagenta\tdefault\tbold\ncolor main-local-tag\t\tmagenta\tdefault\ncolor main-remote\t\tyellow\tdefault\ncolor main-stash\t\tblue\tdefault\ncolor main-note\t\t\tblue\tdefault\ncolor main-prefetch\t\tblue\tdefault\ncolor main-other\t\tblue\tdefault\ncolor main-replace\t\tcyan\tdefault\ncolor main-tracked\t\tyellow\tdefault\tbold\ncolor main-ref\t\t\tcyan\tdefault\ncolor main-head\t\t\tcyan\tdefault\tbold\ncolor stat-none\t\t\tdefault\tdefault\ncolor stat-staged\t\tmagenta\tdefault\ncolor stat-unstaged\t\tmagenta\tdefault\ncolor stat-untracked\t\tmagenta\tdefault\ncolor help-group\t\tblue\tdefault\ncolor help-action\t\tyellow\tdefault\ncolor diff-stat\t\t\tblue\tdefault\ncolor diff-add-highlight\tgreen\tdefault\tstandout\ncolor diff-del-highlight\tred\tdefault\tstandout\ncolor palette-0\t\t\tmagenta\tdefault\ncolor palette-1\t\t\tyellow\tdefault\ncolor palette-2\t\t\tcyan\tdefault\ncolor palette-3\t\t\tgreen\tdefault\ncolor palette-4\t\t\tdefault\tdefault\ncolor palette-5\t\t\twhite\tdefault\ncolor palette-6\t\t\tred\tdefault\ncolor palette-7\t\t\tmagenta\tdefault\tbold\ncolor palette-8\t\t\tyellow\tdefault\tbold\ncolor palette-9\t\t\tcyan\tdefault\tbold\ncolor palette-10\t\tgreen\tdefault\tbold\ncolor palette-11\t\tdefault\tdefault\tbold\ncolor palette-12\t\twhite\tdefault\tbold\ncolor palette-13\t\tred\tdefault\tbold\ncolor graph-commit\t\tblue\tdefault\ncolor search-result\t\tblack\tyellow\n\n# Mappings for colors read from git configuration.\n# Set to \"no\" to disable.\nset git-colors = \\\n\tbranch.current=main-head \\\n\tbranch.local=main-ref \\\n\tbranch.plain=main-ref \\\n\tbranch.remote=main-remote \\\n\t\\\n\tdiff.meta=diff-header \\\n\tdiff.meta=diff-index \\\n\tdiff.meta=diff-oldmode \\\n\tdiff.meta=diff-newmode \\\n\tdiff.frag=diff-chunk \\\n\tdiff.old=diff-del \\\n\tdiff.new=diff-add \\\n\t\\\n\tdiff-highlight.oldHighlight=diff-del-highlight \\\n\tdiff-highlight.newHighlight=diff-add-highlight \\\n\t\\\n\tgrep.filename=grep.file \\\n\tgrep.linenumber=grep.line-number \\\n\tgrep.separator=grep.delimiter \\\n\t\\\n\tstatus.branch=status.header \\\n\tstatus.added=stat-staged \\\n\tstatus.updated=stat-staged \\\n\tstatus.changed=stat-unstaged \\\n\tstatus.untracked=stat-untracked\n"
  },
  {
    "path": "tools/announcement.sh",
    "content": "#!/bin/sh\n#\n# Prepare the content of the next tig release announcement.\n# Usage: $0 [revision]\n#\n# Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n#\n# This program is free software; you can redistribute it and/or\n# modify it under the terms of the GNU General Public License as\n# published by the Free Software Foundation; either version 2 of\n# the License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n\nroot=\"$(git rev-parse --show-cdup)\"\nNEWS=\"${root}NEWS.adoc\"\nREADME=\"${root}README.adoc\"\nfrom=\"$(sed -n '7,/^tig-/p' < \"$NEWS\" | tail -n 1 | cut -d' ' -f 1)\"\nto=\"${1-HEAD}\"\nshort=\n\ntest -n \"$(git rev-list --skip=50 $from..$to)\" && short=-s\n\ncat <<EOF\n$to\n$(echo \"$to\" | sed 's/[0-9a-zA-Z.-]/=/g')\n\n*** text for the announcement ***\n\n$(sed -n '/What is tig?/,/^$/p' < \"$README\")\n\n$(sed -n 's/\\( -.*\\)[[(].*/\\1/p' < \"$README\")\n\nRelease notes\n-------------\n$(sed -n '7,/^tig-/p' < \"$NEWS\" | sed '/^tig-/d')\n\nChange summary\n--------------\nThe diffstat and log summary for changes made in this release.\n\n$(git diff-tree -M --stat=72 $from..$to)\n\n$(git shortlog --no-merges $short $from..$to)\nEOF\n"
  },
  {
    "path": "tools/aspell.dict",
    "content": "personal_ws-1.1 en 320 \nACDMRTXB\nAIX\nAsciiDoc\nAuthorDate\nBUILTIN\nBackTab\nBaudis\nCFLAGS\nCJK\nCOLORTERM\nCPPFLAGS\nCogito\nCommitDate\nCtrl\nCygwin\nDSSL\nDebian\nDocBook\nDoubleQuote\nELinks\nEsc\nFIXME\nFonseca\nFullwidth\nGH\nGeany\nGedit\nGit's\nGitHub\nGitter\nGitweb\nHUP\nJamo\nLDFLAGS\nLDLIBS\nLessThan\nLinuxbrew\nMakefile\nMidline\nNUL\nNano\nNavely\nNixOS\nNn\nOSX\nOnline\nPDF\nPID\nPageDown\nPageUp\nPetr\nPgDown\nPgUp\nPre\nPreload\nREADME\nReenable\nSBack\nSFwd\nSHAs\nSIGHUP\nScrBack\nScrFwd\nScrollBack\nScrollFwd\nScrool\nShiftDel\nShiftDelete\nShiftEnd\nShiftHome\nShiftLeft\nShiftRight\nShiftTab\nShorthands\nSingleQuote\nSolaris\nSunStudio\nTMPDIR\nTODO\nUI\nVLINE\nXDG\nXSL\nXTerm's\nXXXXXX\nYi\nYy\nZSH\nZsh\nabspath\nacked\nadate\nadoc\nalloc\naltscreen\narg\nargs\nascii\nasciidoc\naterm\nautobuild\nautoconf\nautomake\nautoreconf\nautotools\nbackend\nbackgrounded\nbacktraces\nbg\nbgcolor\nbindir\nblameargs\nbool\nboolean\ncacheinfo\ncd\ncdate\ncdup\ncharset\nchdir\nchecksums\nchunked\ncmd\ncmdline\ncmdlineargs\ncolorN\ncombi\ncommit's\ncommitencoding\ncommitter\ncommitters\nconcat\nconfig\nconfigs\ncontrib\ncredentialCache\ncwd\ndel\ndelim\ndereferences\ndev\ndevel\ndiffargs\ndiffstat\ndir\ndirs\ndistclean\ndocbook\ndocext\ndoctype\ndrwxr\nencodings\nendif\nenum\nenv\neol\nerasechar\nerrno\nextdiff\nfg\nfgcolor\nfileargs\nfilename\nfilesystem\nfrontend\ngc\ngcc\ngetch\ngitattributes\ngitconfig\ngitk\ngitlink\ngoto\ngui\nhomebrew\nhtml\niTerm\niconv\nident\nifdef\nifndef\nignoreSIGHUP\ninputrc\njsh\nkeybinding\nkeybindings\nkeymap\nkeymaps\nld\nlds\nlibexecdir\nlibiconv\nlibncurses\nlineno\nlinenumber\nlncursesw\nlocaltime\nlogargs\nlookup\nlrwxrwxrwx\nmacOS\nmailmap\nmainargs\nmanpage\nmanpages\nmaxwidth\nmergetool\nmkstemps\nmulti\nmultibyte\nmv\nnamespace\nnav\nncurses\nncursesw\nnetbsd\nnewmode\nnewwin\nnitro\nnodelay\nnohup\nnoprefix\nnowarn\noldmode\noptimizations\npbcopy\npgrp\nprintf\nqgit\nreachability\nreadline\nreadline's\nrebase\nrebasing\nreflog\nreflogmsg\nrefname\nrefspec\nrenderer\nrepo\nrepos\nresize\nresizing\nrevargs\nrevgraph\nruntime\nrwxr\nsed\nsetenv\nsetsid\nsha\nshortlog\nshowUntrackedFiles\nsignoff\nsrc\nstartup\nstderr\nstdin\nstdout\nstrchr\nstrftime\nstrndup\nstruct\nsubcommand\nsubcommands\nsubdir\nsubdirectories\nsubdirectory\nsubmodule\nsubmodules\nsubshell\nsubshells\nsubstring\nsubtrees\nsudo\nsys\nsysconfdir\ntabsize\ntermcap\nterminfo\ntextconv\ntig\ntig's\ntigblob\ntigmanual\ntigrc\ntinfo\ntmp\ntoc\ntogglable\ntopo\ntty\ntxt\ntz\nunicode\nunidiff\nunmerged\nunrepresentable\nunstage\nunstaged\nunstanged\nuntracked\nusr\nutf\nutils\nwaddch\nwaddnstr\nwaitpid\nwclear\nwcwidth\nwgetch\nwhitespace\nworktree\nwrt\nxclip\nxhtml\nxmlto\nxpm\nxrvt\nzsh\n"
  },
  {
    "path": "tools/ax_lib_readline.m4",
    "content": "dnl Copyright (C) 1987-2014 Free Software Foundation, Inc.\ndnl\ndnl This program is free software: you can redistribute it and/or modify\ndnl it under the terms of the GNU General Public License as published by\ndnl the Free Software Foundation, either version 3 of the License, or\ndnl (at your option) any later version.\ndnl\ndnl This program is distributed in the hope that it will be useful,\ndnl but WITHOUT ANY WARRANTY; without even the implied warranty of\ndnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\ndnl GNU General Public License for more details.\ndnl\ndnl You should have received a copy of the GNU General Public License\ndnl along with this program.  If not, see <https://www.gnu.org/licenses/>.\ndnl\ndnl Taken from https://git.savannah.gnu.org/cgit/readline.git/tree/examples/autoconf/\ndnl commit 835a39225c6bd4784c0d7f775b0cd44dd7c57f35 (Readline 6.3, version 2.73)\ndnl\ndnl Configuration of --with-readline and result check at EOF.\n\nAC_DEFUN([BASH_CHECK_LIB_TERMCAP],\n[\n# save cpp and ld options\n_save_CFLAGS=\"$CFLAGS\"\n_save_LDFLAGS=\"$LDFLAGS\"\n_save_LIBS=\"$LIBS\"\n\nif test \"X$bash_cv_termcap_lib\" = \"X\"; then\n_bash_needmsg=yes\nelse\nAC_MSG_CHECKING(which library has the termcap functions)\n_bash_needmsg=\nfi\nAC_CACHE_VAL(bash_cv_termcap_lib,\n[AC_CHECK_FUNC(tgetent, bash_cv_termcap_lib=libc,\nif test \"$ax_cv_curses_which\" = \"ncursesw\"; then\n\t[AC_CHECK_LIB(ncursesw, tgetent, bash_cv_termcap_lib=libncursesw,\n\t\t[AC_CHECK_LIB(tinfow, tgetent, bash_cv_termcap_lib=libtinfow)]\n\t)]\nelif test \"$ax_cv_curses_which\" = \"ncurses\"; then\n\t[AC_CHECK_LIB(ncurses, tgetent, bash_cv_termcap_lib=libncurses,\n\t\t[AC_CHECK_LIB(tinfo, tgetent, bash_cv_termcap_lib=libtinfo)]\n\t)]\nelif test \"$ax_cv_curses_which\" = \"plaincurses\"; then\n\t[AC_CHECK_LIB(curses, tgetent, bash_cv_termcap_lib=libcurses)]\nelse\n\t[AC_CHECK_LIB(termcap, tgetent, bash_cv_termcap_lib=libtermcap,\n\t\tbash_cv_termcap_lib=gnutermcap\n\t)]\nfi\n)])\nif test \"X$_bash_needmsg\" = \"Xyes\"; then\nAC_MSG_CHECKING(which library has the termcap functions)\nfi\nAC_MSG_RESULT(using $bash_cv_termcap_lib)\nif test X$bash_cv_termcap_lib = Xgnutermcap && test -z \"$prefer_curses\"; then\nLDFLAGS=\"$LDFLAGS -L./lib/termcap\"\nTERMCAP_LIB=\"./lib/termcap/libtermcap.a\"\nTERMCAP_DEP=\"./lib/termcap/libtermcap.a\"\nelif test X$bash_cv_termcap_lib = Xlibtermcap && test -z \"$prefer_curses\"; then\nTERMCAP_LIB=-ltermcap\nTERMCAP_DEP=\nelif test X$bash_cv_termcap_lib = Xlibtinfow; then\nTERMCAP_LIB=-ltinfow\nTERMCAP_DEP=\nelif test X$bash_cv_termcap_lib = Xlibtinfo; then\nTERMCAP_LIB=-ltinfo\nTERMCAP_DEP=\nelif test X$bash_cv_termcap_lib = Xlibncursesw; then\nTERMCAP_LIB=-lncursesw\nTERMCAP_DEP=\nelif test X$bash_cv_termcap_lib = Xlibncurses; then\nTERMCAP_LIB=-lncurses\nTERMCAP_DEP=\nelif test X$bash_cv_termcap_lib = Xlibc; then\nTERMCAP_LIB=\nTERMCAP_DEP=\nelse\nTERMCAP_LIB=-lcurses\nTERMCAP_DEP=\nfi\n\nCFLAGS=\"$_save_CFLAGS\"\nLDFLAGS=\"$_save_LDFLAGS\"\nLIBS=\"$_save_LIBS\"\n])\n\nAC_DEFUN([RL_LIB_READLINE_VERSION],\n[\nAC_REQUIRE([BASH_CHECK_LIB_TERMCAP])\n\nAC_MSG_CHECKING([version of installed readline library])\n\n# What a pain in the ass this is.\n\n# save cpp and ld options\n_save_CFLAGS=\"$CFLAGS\"\n_save_LDFLAGS=\"$LDFLAGS\"\n_save_LIBS=\"$LIBS\"\n\n# Don't set ac_cv_rl_prefix if the caller has already assigned a value.  This\n# allows the caller to do something like $_rl_prefix=$withval if the user\n# specifies --with-installed-readline=PREFIX as an argument to configure\n\nif test -z \"$ac_cv_rl_prefix\"; then\ntest \"x$prefix\" = xNONE && ac_cv_rl_prefix=$ac_default_prefix || ac_cv_rl_prefix=${prefix}\nfi\n\neval ac_cv_rl_includedir=${ac_cv_rl_prefix}/include\neval ac_cv_rl_libdir=${ac_cv_rl_prefix}/lib\n\nLIBS=\"$LIBS -lreadline ${TERMCAP_LIB}\"\nCFLAGS=\"$CFLAGS -I${ac_cv_rl_includedir}\"\nLDFLAGS=\"$LDFLAGS -L${ac_cv_rl_libdir}\"\n\nAC_CACHE_VAL(ac_cv_rl_version,\n[AC_RUN_IFELSE([AC_LANG_SOURCE([[\n#include <stdio.h>\n#include <readline/readline.h>\n\nextern int rl_gnu_readline_p;\n\nint main(void)\n{\n\tFILE *fp;\n\tfp = fopen(\"conftest.rlv\", \"w\");\n\tif (fp == 0)\n\t\t${cf_cv_main_return:-return}(1);\n\tif (rl_gnu_readline_p != 1)\n\t\tfprintf(fp, \"0.0\\n\");\n\telse\n\t\tfprintf(fp, \"%s\\n\", rl_library_version ? rl_library_version : \"0.0\");\n\tfclose(fp);\n\t${cf_cv_main_return:-return}(0);\n}\n]])],\nac_cv_rl_version=`cat conftest.rlv`,\nac_cv_rl_version='0.0',\nac_cv_rl_version='4.2')])\n\nCFLAGS=\"$_save_CFLAGS\"\nLDFLAGS=\"$_save_LDFLAGS\"\nLIBS=\"$_save_LIBS\"\n\nRL_MAJOR=0\nRL_MINOR=0\n\n# (\ncase \"$ac_cv_rl_version\" in\n2*|3*|4*|5*|6*|7*|8*|9*)\n\tRL_MAJOR=`echo $ac_cv_rl_version | sed 's:\\..*$::'`\n\tRL_MINOR=`echo $ac_cv_rl_version | sed -e 's:^.*\\.::' -e 's:[[a-zA-Z]]*$::'`\n\t;;\nesac\n\n# (((\ncase $RL_MAJOR in\n[[0-9][0-9]])\t_RL_MAJOR=$RL_MAJOR ;;\n[[0-9]])\t_RL_MAJOR=0$RL_MAJOR ;;\n*)\t\t_RL_MAJOR=00 ;;\nesac\n\n# (((\ncase $RL_MINOR in\n[[0-9][0-9]])\t_RL_MINOR=$RL_MINOR ;;\n[[0-9]])\t_RL_MINOR=0$RL_MINOR ;;\n*)\t\t_RL_MINOR=00 ;;\nesac\n\nRL_VERSION=\"0x${_RL_MAJOR}${_RL_MINOR}\"\n\n# Readline versions greater than 4.2 have these defines in readline.h\n\nif test $ac_cv_rl_version = '0.0' ; then\n\tAC_MSG_RESULT([none])\n\tAC_MSG_WARN([Could not test version of installed readline library.])\nelif test $RL_MAJOR -gt 4 || { test $RL_MAJOR = 4 && test $RL_MINOR -gt 2 ; } ; then\n\t# set these for use by the caller\n\tRL_PREFIX=$ac_cv_rl_prefix\n\tRL_LIBDIR=$ac_cv_rl_libdir\n\tRL_INCLUDEDIR=$ac_cv_rl_includedir\n\tAC_MSG_RESULT($ac_cv_rl_version)\nelse\n\nAC_DEFINE_UNQUOTED(RL_READLINE_VERSION, $RL_VERSION, [encoded version of the installed readline library])\nAC_DEFINE_UNQUOTED(RL_VERSION_MAJOR, $RL_MAJOR, [major version of installed readline library])\nAC_DEFINE_UNQUOTED(RL_VERSION_MINOR, $RL_MINOR, [minor version of installed readline library])\n\nAC_SUBST(RL_VERSION)\nAC_SUBST(RL_MAJOR)\nAC_SUBST(RL_MINOR)\n\n# set these for use by the caller\nRL_PREFIX=$ac_cv_rl_prefix\nRL_LIBDIR=$ac_cv_rl_libdir\nRL_INCLUDEDIR=$ac_cv_rl_includedir\n\nAC_MSG_RESULT($ac_cv_rl_version)\n\nfi\n])\n\nAC_DEFUN([AX_LIB_READLINE], [\n  RL_VERSION_REQUIRED=\"$1\"\n  RL_MAJOR_REQUIRED=\"$(echo \"$1\" | sed -n 's/\\([[]0-9[]]*\\)[[].[]]\\([[]0-9[]]*\\)/\\1/p')\"\n  RL_MINOR_REQUIRED=\"$(echo \"$1\" | sed -n 's/\\([[]0-9[]]*\\)[[].[]]\\([[]0-9[]]*\\)/\\2/p')\"\n  RL_MAJOR=0\n  RL_MINOR=0\n\n  AC_ARG_WITH([readline], [AS_HELP_STRING([--with-readline=DIR],\n  \t[search for readline in DIR/include and DIR/lib])],\n\t[ac_cv_rl_prefix=$with_readline])\n\n  AS_IF([test \"x$with_readline\" != xno], [\n    AC_CHECK_HEADERS([readline/readline.h], [\n      AC_CHECK_HEADERS([readline/history.h], [\n        RL_LIB_READLINE_VERSION\n      ])\n    ])\n\n    if test $RL_MAJOR -gt $RL_MAJOR_REQUIRED || {\n       test $RL_MAJOR = $RL_MAJOR_REQUIRED && test $RL_MINOR -ge $RL_MINOR_REQUIRED ; } ; then\n      LIBS=\"$LIBS -lreadline ${TERMCAP_LIB}\"\n      CFLAGS=\"$CFLAGS -I${RL_INCLUDEDIR}\"\n      LDFLAGS=\"$LDFLAGS -L${RL_LIBDIR}\"\n\n      AC_DEFINE(HAVE_READLINE, 1, [Define if you have a GNU readline compatible library])\n\n    elif test -n \"$ac_cv_rl_prefix\"; then\n      AC_MSG_WARN([Minimum required version of readline is $RL_VERSION_REQUIRED])\n    fi\n  ])\n])\n"
  },
  {
    "path": "tools/ax_require_defined.m4",
    "content": "# ===========================================================================\n#    https://www.gnu.org/software/autoconf-archive/ax_require_defined.html\n# ===========================================================================\n#\n# SYNOPSIS\n#\n#   AX_REQUIRE_DEFINED(MACRO)\n#\n# DESCRIPTION\n#\n#   AX_REQUIRE_DEFINED is a simple helper for making sure other macros have\n#   been defined and thus are available for use.  This avoids random issues\n#   where a macro isn't expanded.  Instead the configure script emits a\n#   non-fatal:\n#\n#     ./configure: line 1673: AX_CFLAGS_WARN_ALL: command not found\n#\n#   It's like AC_REQUIRE except it doesn't expand the required macro.\n#\n#   Here's an example:\n#\n#     AX_REQUIRE_DEFINED([AX_CHECK_LINK_FLAG])\n#\n# LICENSE\n#\n#   Copyright (c) 2014 Mike Frysinger <vapier@gentoo.org>\n#\n#   Copying and distribution of this file, with or without modification, are\n#   permitted in any medium without royalty provided the copyright notice\n#   and this notice are preserved. This file is offered as-is, without any\n#   warranty.\n\n#serial 1\n\nAC_DEFUN([AX_REQUIRE_DEFINED], [dnl\n  m4_ifndef([$1], [m4_fatal([macro ]$1[ is not defined; is a m4 file missing?])])\n])dnl AX_REQUIRE_DEFINED\n"
  },
  {
    "path": "tools/ax_with_curses.m4",
    "content": "# ===========================================================================\n#      https://www.gnu.org/software/autoconf-archive/ax_with_curses.html\n# ===========================================================================\n#\n# SYNOPSIS\n#\n#   AX_WITH_CURSES\n#\n# DESCRIPTION\n#\n#   This macro checks whether a SysV or X/Open-compatible Curses library is\n#   present, along with the associated header file.  The NcursesW\n#   (wide-character) library is searched for first, followed by Ncurses,\n#   then the system-default plain Curses.  The first library found is the\n#   one returned. Finding libraries will first be attempted by using\n#   pkg-config, and should the pkg-config files not be available, will\n#   fallback to combinations of known flags itself.\n#\n#   The following options are understood: --with-ncursesw, --with-ncurses,\n#   --without-ncursesw, --without-ncurses.  The \"--with\" options force the\n#   macro to use that particular library, terminating with an error if not\n#   found.  The \"--without\" options simply skip the check for that library.\n#   The effect on the search pattern is:\n#\n#     (no options)                           - NcursesW, Ncurses, Curses\n#     --with-ncurses     --with-ncursesw     - NcursesW only [*]\n#     --without-ncurses  --with-ncursesw     - NcursesW only [*]\n#                        --with-ncursesw     - NcursesW only [*]\n#     --with-ncurses     --without-ncursesw  - Ncurses only [*]\n#     --with-ncurses                         - NcursesW, Ncurses [**]\n#     --without-ncurses  --without-ncursesw  - Curses only\n#                        --without-ncursesw  - Ncurses, Curses\n#     --without-ncurses                      - NcursesW, Curses\n#\n#   [*]  If the library is not found, abort the configure script.\n#\n#   [**] If the second library (Ncurses) is not found, abort configure.\n#\n#   The following preprocessor symbols may be defined by this macro if the\n#   appropriate conditions are met:\n#\n#     HAVE_CURSES             - if any SysV or X/Open Curses library found\n#     HAVE_CURSES_ENHANCED    - if library supports X/Open Enhanced functions\n#     HAVE_CURSES_COLOR       - if library supports color (enhanced functions)\n#     HAVE_CURSES_OBSOLETE    - if library supports certain obsolete features\n#     HAVE_NCURSESW           - if NcursesW (wide char) library is to be used\n#     HAVE_NCURSES            - if the Ncurses library is to be used\n#\n#     HAVE_CURSES_H           - if <curses.h> is present and should be used\n#     HAVE_NCURSESW_H         - if <ncursesw.h> should be used\n#     HAVE_NCURSES_H          - if <ncurses.h> should be used\n#     HAVE_NCURSESW_CURSES_H  - if <ncursesw/curses.h> should be used\n#     HAVE_NCURSES_CURSES_H   - if <ncurses/curses.h> should be used\n#\n#   (These preprocessor symbols are discussed later in this document.)\n#\n#   The following output variables are defined by this macro; they are\n#   precious and may be overridden on the ./configure command line:\n#\n#     CURSES_LIBS  - library to add to xxx_LDADD\n#     CURSES_CFLAGS  - include paths to add to xxx_CPPFLAGS\n#\n#   In previous versions of this macro, the flags CURSES_LIB and\n#   CURSES_CPPFLAGS were defined. These have been renamed, in keeping with\n#   AX_WITH_CURSES's close bigger brother, PKG_CHECK_MODULES, which should\n#   eventually supersede the use of AX_WITH_CURSES. Neither the library\n#   listed in CURSES_LIBS, nor the flags in CURSES_CFLAGS are added to LIBS,\n#   respectively CPPFLAGS, by default. You need to add both to the\n#   appropriate xxx_LDADD/xxx_CPPFLAGS line in your Makefile.am. For\n#   example:\n#\n#     prog_LDADD = @CURSES_LIBS@\n#     prog_CPPFLAGS = @CURSES_CFLAGS@\n#\n#   If CURSES_LIBS is set on the configure command line (such as by running\n#   \"./configure CURSES_LIBS=-lmycurses\"), then the only header searched for\n#   is <curses.h>. If the user needs to specify an alternative path for a\n#   library (such as for a non-standard NcurseW), the user should use the\n#   LDFLAGS variable.\n#\n#   The following shell variables may be defined by this macro:\n#\n#     ax_cv_curses           - set to \"yes\" if any Curses library found\n#     ax_cv_curses_enhanced  - set to \"yes\" if Enhanced functions present\n#     ax_cv_curses_color     - set to \"yes\" if color functions present\n#     ax_cv_curses_obsolete  - set to \"yes\" if obsolete features present\n#\n#     ax_cv_ncursesw      - set to \"yes\" if NcursesW library found\n#     ax_cv_ncurses       - set to \"yes\" if Ncurses library found\n#     ax_cv_plaincurses   - set to \"yes\" if plain Curses library found\n#     ax_cv_curses_which  - set to \"ncursesw\", \"ncurses\", \"plaincurses\" or \"no\"\n#\n#   These variables can be used in your configure.ac to determine the level\n#   of support you need from the Curses library.  For example, if you must\n#   have either Ncurses or NcursesW, you could include:\n#\n#     AX_WITH_CURSES\n#     if test \"x$ax_cv_ncursesw\" != xyes && test \"x$ax_cv_ncurses\" != xyes; then\n#         AC_MSG_ERROR([requires either NcursesW or Ncurses library])\n#     fi\n#\n#   If any Curses library will do (but one must be present and must support\n#   color), you could use:\n#\n#     AX_WITH_CURSES\n#     if test \"x$ax_cv_curses\" != xyes || test \"x$ax_cv_curses_color\" != xyes; then\n#         AC_MSG_ERROR([requires an X/Open-compatible Curses library with color])\n#     fi\n#\n#   Certain preprocessor symbols and shell variables defined by this macro\n#   can be used to determine various features of the Curses library.  In\n#   particular, HAVE_CURSES and ax_cv_curses are defined if the Curses\n#   library found conforms to the traditional SysV and/or X/Open Base Curses\n#   definition.  Any working Curses library conforms to this level.\n#\n#   HAVE_CURSES_ENHANCED and ax_cv_curses_enhanced are defined if the\n#   library supports the X/Open Enhanced Curses definition.  In particular,\n#   the wide-character types attr_t, cchar_t and wint_t, the functions\n#   wattr_set() and wget_wch() and the macros WA_NORMAL and _XOPEN_CURSES\n#   are checked.  The Ncurses library does NOT conform to this definition,\n#   although NcursesW does.\n#\n#   HAVE_CURSES_COLOR and ax_cv_curses_color are defined if the library\n#   supports color functions and macros such as COLOR_PAIR, A_COLOR,\n#   COLOR_WHITE, COLOR_RED and init_pair().  These are NOT part of the\n#   X/Open Base Curses definition, but are part of the Enhanced set of\n#   functions.  The Ncurses library DOES support these functions, as does\n#   NcursesW.\n#\n#   HAVE_CURSES_OBSOLETE and ax_cv_curses_obsolete are defined if the\n#   library supports certain features present in SysV and BSD Curses but not\n#   defined in the X/Open definition.  In particular, the functions\n#   getattrs(), getcurx() and getmaxx() are checked.\n#\n#   To use the HAVE_xxx_H preprocessor symbols, insert the following into\n#   your system.h (or equivalent) header file:\n#\n#     #if defined HAVE_NCURSESW_CURSES_H\n#     #  include <ncursesw/curses.h>\n#     #elif defined HAVE_NCURSESW_H\n#     #  include <ncursesw.h>\n#     #elif defined HAVE_NCURSES_CURSES_H\n#     #  include <ncurses/curses.h>\n#     #elif defined HAVE_NCURSES_H\n#     #  include <ncurses.h>\n#     #elif defined HAVE_CURSES_H\n#     #  include <curses.h>\n#     #else\n#     #  error \"SysV or X/Open-compatible Curses header file required\"\n#     #endif\n#\n#   For previous users of this macro: you should not need to change anything\n#   in your configure.ac or Makefile.am, as the previous (serial 10)\n#   semantics are still valid.  However, you should update your system.h (or\n#   equivalent) header file to the fragment shown above. You are encouraged\n#   also to make use of the extended functionality provided by this version\n#   of AX_WITH_CURSES, as well as in the additional macros\n#   AX_WITH_CURSES_PANEL, AX_WITH_CURSES_MENU and AX_WITH_CURSES_FORM.\n#\n# LICENSE\n#\n#   Copyright (c) 2009 Mark Pulford <mark@kyne.com.au>\n#   Copyright (c) 2009 Damian Pietras <daper@daper.net>\n#   Copyright (c) 2012 Reuben Thomas <rrt@sc3d.org>\n#   Copyright (c) 2011 John Zaitseff <J.Zaitseff@zap.org.au>\n#\n#   This program is free software: you can redistribute it and/or modify it\n#   under the terms of the GNU General Public License as published by the\n#   Free Software Foundation, either version 3 of the License, or (at your\n#   option) any later version.\n#\n#   This program is distributed in the hope that it will be useful, but\n#   WITHOUT ANY WARRANTY; without even the implied warranty of\n#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General\n#   Public License for more details.\n#\n#   You should have received a copy of the GNU General Public License along\n#   with this program. If not, see <https://www.gnu.org/licenses/>.\n#\n#   As a special exception, the respective Autoconf Macro's copyright owner\n#   gives unlimited permission to copy, distribute and modify the configure\n#   scripts that are the output of Autoconf when processing the Macro. You\n#   need not follow the terms of the GNU General Public License when using\n#   or distributing such scripts, even though portions of the text of the\n#   Macro appear in them. The GNU General Public License (GPL) does govern\n#   all other use of the material that constitutes the Autoconf Macro.\n#\n#   This special exception to the GPL applies to versions of the Autoconf\n#   Macro released by the Autoconf Archive. When you make and distribute a\n#   modified version of the Autoconf Macro, you may extend this special\n#   exception to the GPL to apply to your modified version as well.\n\n#serial 17\n\n# internal function to factorize common code that is used by both ncurses\n# and ncursesw\nAC_DEFUN([_FIND_CURSES_FLAGS], [\n    AC_MSG_CHECKING([for $1 via pkg-config])\n\n    AX_REQUIRE_DEFINED([PKG_CHECK_EXISTS])\n    _PKG_CONFIG([_ax_cv_$1_libs], [libs], [$1])\n    _PKG_CONFIG([_ax_cv_$1_cppflags], [cflags], [$1])\n\n    AS_IF([test \"x$pkg_failed\" = \"xyes\" || test \"x$pkg_failed\" = \"xuntried\"],[\n        AC_MSG_RESULT([no])\n        # No suitable .pc file found, have to find flags via fallback\n        AC_CACHE_CHECK([for $1 via fallback], [ax_cv_$1], [\n            AS_ECHO()\n            pkg_cv__ax_cv_$1_libs=\"-l$1\"\n            pkg_cv__ax_cv_$1_cppflags=\"-D_GNU_SOURCE $CURSES_CFLAGS\"\n            LIBS=\"$ax_saved_LIBS $pkg_cv__ax_cv_$1_libs\"\n            CPPFLAGS=\"$ax_saved_CPPFLAGS $pkg_cv__ax_cv_$1_cppflags\"\n\n            AC_MSG_CHECKING([for initscr() with $pkg_cv__ax_cv_$1_libs])\n            AC_LINK_IFELSE([AC_LANG_CALL([], [initscr])],\n                [\n                    AC_MSG_RESULT([yes])\n                    AC_MSG_CHECKING([for nodelay() with $pkg_cv__ax_cv_$1_libs])\n                    AC_LINK_IFELSE([AC_LANG_CALL([], [nodelay])],[\n                        ax_cv_$1=yes\n                        ],[\n                        AC_MSG_RESULT([no])\n                        m4_if(\n                            [$1],[ncursesw],[pkg_cv__ax_cv_$1_libs=\"$pkg_cv__ax_cv_$1_libs -ltinfow\"],\n                            [$1],[ncurses],[pkg_cv__ax_cv_$1_libs=\"$pkg_cv__ax_cv_$1_libs -ltinfo\"]\n                        )\n                        LIBS=\"$ax_saved_LIBS $pkg_cv__ax_cv_$1_libs\"\n\n                        AC_MSG_CHECKING([for nodelay() with $pkg_cv__ax_cv_$1_libs])\n                        AC_LINK_IFELSE([AC_LANG_CALL([], [nodelay])],[\n                            ax_cv_$1=yes\n                            ],[\n                            ax_cv_$1=no\n                        ])\n                    ])\n                ],[\n                    ax_cv_$1=no\n            ])\n        ])\n        ],[\n        AC_MSG_RESULT([yes])\n        # Found .pc file, using its information\n        LIBS=\"$ax_saved_LIBS $pkg_cv__ax_cv_$1_libs\"\n        CPPFLAGS=\"$ax_saved_CPPFLAGS $pkg_cv__ax_cv_$1_cppflags\"\n        ax_cv_$1=yes\n    ])\n])\n\nAU_ALIAS([MP_WITH_CURSES], [AX_WITH_CURSES])\nAC_DEFUN([AX_WITH_CURSES], [\n    AC_ARG_VAR([CURSES_LIBS], [linker library for Curses, e.g. -lcurses])\n    AC_ARG_VAR([CURSES_CFLAGS], [preprocessor flags for Curses, e.g. -I/usr/include/ncursesw])\n    AC_ARG_WITH([ncurses], [AS_HELP_STRING([--with-ncurses],\n        [force the use of Ncurses or NcursesW])],\n        [], [with_ncurses=check])\n    AC_ARG_WITH([ncursesw], [AS_HELP_STRING([--without-ncursesw],\n        [do not use NcursesW (wide character support)])],\n        [], [with_ncursesw=check])\n\n    ax_saved_LIBS=$LIBS\n    ax_saved_CPPFLAGS=$CPPFLAGS\n\n    AS_IF([test \"x$with_ncurses\" = xyes || test \"x$with_ncursesw\" = xyes],\n        [ax_with_plaincurses=no], [ax_with_plaincurses=check])\n\n    ax_cv_curses_which=no\n\n    # Test for NcursesW\n    AS_IF([test \"x$CURSES_LIBS\" = x && test \"x$with_ncursesw\" != xno], [\n        _FIND_CURSES_FLAGS([ncursesw])\n\n        AS_IF([test \"x$ax_cv_ncursesw\" = xno && test \"x$with_ncursesw\" = xyes], [\n            AC_MSG_ERROR([--with-ncursesw specified but could not find NcursesW library])\n        ])\n\n        AS_IF([test \"x$ax_cv_ncursesw\" = xyes], [\n            ax_cv_curses=yes\n            ax_cv_curses_which=ncursesw\n            CURSES_LIBS=\"$pkg_cv__ax_cv_ncursesw_libs\"\n            CURSES_CFLAGS=\"$pkg_cv__ax_cv_ncursesw_cppflags\"\n            AC_DEFINE([HAVE_NCURSESW], [1], [Define to 1 if the NcursesW library is present])\n            AC_DEFINE([HAVE_CURSES],   [1], [Define to 1 if a SysV or X/Open compatible Curses library is present])\n\n            AC_CACHE_CHECK([for working ncursesw/curses.h], [ax_cv_header_ncursesw_curses_h], [\n                AC_LINK_IFELSE([AC_LANG_PROGRAM([[\n                        @%:@define _XOPEN_SOURCE_EXTENDED 1\n                        @%:@include <ncursesw/curses.h>\n                    ]], [[\n                        chtype a = A_BOLD;\n                        int b = KEY_LEFT;\n                        chtype c = COLOR_PAIR(1) & A_COLOR;\n                        attr_t d = WA_NORMAL;\n                        cchar_t e;\n                        wint_t f;\n                        int g = getattrs(stdscr);\n                        int h = getcurx(stdscr) + getmaxx(stdscr);\n                        initscr();\n                        init_pair(1, COLOR_WHITE, COLOR_RED);\n                        wattr_set(stdscr, d, 0, NULL);\n                        wget_wch(stdscr, &f);\n                    ]])],\n                    [ax_cv_header_ncursesw_curses_h=yes],\n                    [ax_cv_header_ncursesw_curses_h=no])\n            ])\n            AS_IF([test \"x$ax_cv_header_ncursesw_curses_h\" = xyes], [\n                ax_cv_curses_enhanced=yes\n                ax_cv_curses_color=yes\n                ax_cv_curses_obsolete=yes\n                AC_DEFINE([HAVE_CURSES_ENHANCED],   [1], [Define to 1 if library supports X/Open Enhanced functions])\n                AC_DEFINE([HAVE_CURSES_COLOR],      [1], [Define to 1 if library supports color (enhanced functions)])\n                AC_DEFINE([HAVE_CURSES_OBSOLETE],   [1], [Define to 1 if library supports certain obsolete features])\n                AC_DEFINE([HAVE_NCURSESW_CURSES_H], [1], [Define to 1 if <ncursesw/curses.h> is present])\n            ])\n\n            AC_CACHE_CHECK([for working ncursesw.h], [ax_cv_header_ncursesw_h], [\n                AC_LINK_IFELSE([AC_LANG_PROGRAM([[\n                        @%:@define _XOPEN_SOURCE_EXTENDED 1\n                        @%:@include <ncursesw.h>\n                    ]], [[\n                        chtype a = A_BOLD;\n                        int b = KEY_LEFT;\n                        chtype c = COLOR_PAIR(1) & A_COLOR;\n                        attr_t d = WA_NORMAL;\n                        cchar_t e;\n                        wint_t f;\n                        int g = getattrs(stdscr);\n                        int h = getcurx(stdscr) + getmaxx(stdscr);\n                        initscr();\n                        init_pair(1, COLOR_WHITE, COLOR_RED);\n                        wattr_set(stdscr, d, 0, NULL);\n                        wget_wch(stdscr, &f);\n                    ]])],\n                    [ax_cv_header_ncursesw_h=yes],\n                    [ax_cv_header_ncursesw_h=no])\n            ])\n            AS_IF([test \"x$ax_cv_header_ncursesw_h\" = xyes], [\n                ax_cv_curses_enhanced=yes\n                ax_cv_curses_color=yes\n                ax_cv_curses_obsolete=yes\n                AC_DEFINE([HAVE_CURSES_ENHANCED], [1], [Define to 1 if library supports X/Open Enhanced functions])\n                AC_DEFINE([HAVE_CURSES_COLOR],    [1], [Define to 1 if library supports color (enhanced functions)])\n                AC_DEFINE([HAVE_CURSES_OBSOLETE], [1], [Define to 1 if library supports certain obsolete features])\n                AC_DEFINE([HAVE_NCURSESW_H],      [1], [Define to 1 if <ncursesw.h> is present])\n            ])\n\n            AC_CACHE_CHECK([for working ncurses.h], [ax_cv_header_ncurses_h_with_ncursesw], [\n                AC_LINK_IFELSE([AC_LANG_PROGRAM([[\n                        @%:@define _XOPEN_SOURCE_EXTENDED 1\n                        @%:@include <ncurses.h>\n                    ]], [[\n                        chtype a = A_BOLD;\n                        int b = KEY_LEFT;\n                        chtype c = COLOR_PAIR(1) & A_COLOR;\n                        attr_t d = WA_NORMAL;\n                        cchar_t e;\n                        wint_t f;\n                        int g = getattrs(stdscr);\n                        int h = getcurx(stdscr) + getmaxx(stdscr);\n                        initscr();\n                        init_pair(1, COLOR_WHITE, COLOR_RED);\n                        wattr_set(stdscr, d, 0, NULL);\n                        wget_wch(stdscr, &f);\n                    ]])],\n                    [ax_cv_header_ncurses_h_with_ncursesw=yes],\n                    [ax_cv_header_ncurses_h_with_ncursesw=no])\n            ])\n            AS_IF([test \"x$ax_cv_header_ncurses_h_with_ncursesw\" = xyes], [\n                ax_cv_curses_enhanced=yes\n                ax_cv_curses_color=yes\n                ax_cv_curses_obsolete=yes\n                AC_DEFINE([HAVE_CURSES_ENHANCED], [1], [Define to 1 if library supports X/Open Enhanced functions])\n                AC_DEFINE([HAVE_CURSES_COLOR],    [1], [Define to 1 if library supports color (enhanced functions)])\n                AC_DEFINE([HAVE_CURSES_OBSOLETE], [1], [Define to 1 if library supports certain obsolete features])\n                AC_DEFINE([HAVE_NCURSES_H],       [1], [Define to 1 if <ncurses.h> is present])\n            ])\n\n            AS_IF([test \"x$ax_cv_header_ncursesw_curses_h\" = xno && test \"x$ax_cv_header_ncursesw_h\" = xno && test \"x$ax_cv_header_ncurses_h_with_ncursesw\" = xno], [\n                AC_MSG_WARN([could not find a working ncursesw/curses.h, ncursesw.h or ncurses.h])\n            ])\n        ])\n    ])\n    unset pkg_cv__ax_cv_ncursesw_libs\n    unset pkg_cv__ax_cv_ncursesw_cppflags\n\n    # Test for Ncurses\n    AS_IF([test \"x$CURSES_LIBS\" = x && test \"x$with_ncurses\" != xno && test \"x$ax_cv_curses_which\" = xno], [\n        _FIND_CURSES_FLAGS([ncurses])\n\n        AS_IF([test \"x$ax_cv_ncurses\" = xno && test \"x$with_ncurses\" = xyes], [\n            AC_MSG_ERROR([--with-ncurses specified but could not find Ncurses library])\n        ])\n\n        AS_IF([test \"x$ax_cv_ncurses\" = xyes], [\n            ax_cv_curses=yes\n            ax_cv_curses_which=ncurses\n            CURSES_LIBS=\"$pkg_cv__ax_cv_ncurses_libs\"\n            CURSES_CFLAGS=\"$pkg_cv__ax_cv_ncurses_cppflags\"\n            AC_DEFINE([HAVE_NCURSES], [1], [Define to 1 if the Ncurses library is present])\n            AC_DEFINE([HAVE_CURSES],  [1], [Define to 1 if a SysV or X/Open compatible Curses library is present])\n\n            AC_CACHE_CHECK([for working ncurses/curses.h], [ax_cv_header_ncurses_curses_h], [\n                AC_LINK_IFELSE([AC_LANG_PROGRAM([[\n                        @%:@include <ncurses/curses.h>\n                    ]], [[\n                        chtype a = A_BOLD;\n                        int b = KEY_LEFT;\n                        chtype c = COLOR_PAIR(1) & A_COLOR;\n                        int g = getattrs(stdscr);\n                        int h = getcurx(stdscr) + getmaxx(stdscr);\n                        initscr();\n                        init_pair(1, COLOR_WHITE, COLOR_RED);\n                    ]])],\n                    [ax_cv_header_ncurses_curses_h=yes],\n                    [ax_cv_header_ncurses_curses_h=no])\n            ])\n            AS_IF([test \"x$ax_cv_header_ncurses_curses_h\" = xyes], [\n                ax_cv_curses_color=yes\n                ax_cv_curses_obsolete=yes\n                AC_DEFINE([HAVE_CURSES_COLOR],     [1], [Define to 1 if library supports color (enhanced functions)])\n                AC_DEFINE([HAVE_CURSES_OBSOLETE],  [1], [Define to 1 if library supports certain obsolete features])\n                AC_DEFINE([HAVE_NCURSES_CURSES_H], [1], [Define to 1 if <ncurses/curses.h> is present])\n            ])\n\n            AC_CACHE_CHECK([for working ncurses.h], [ax_cv_header_ncurses_h], [\n                AC_LINK_IFELSE([AC_LANG_PROGRAM([[\n                        @%:@include <ncurses.h>\n                    ]], [[\n                        chtype a = A_BOLD;\n                        int b = KEY_LEFT;\n                        chtype c = COLOR_PAIR(1) & A_COLOR;\n                        int g = getattrs(stdscr);\n                        int h = getcurx(stdscr) + getmaxx(stdscr);\n                        initscr();\n                        init_pair(1, COLOR_WHITE, COLOR_RED);\n                    ]])],\n                    [ax_cv_header_ncurses_h=yes],\n                    [ax_cv_header_ncurses_h=no])\n            ])\n            AS_IF([test \"x$ax_cv_header_ncurses_h\" = xyes], [\n                ax_cv_curses_color=yes\n                ax_cv_curses_obsolete=yes\n                AC_DEFINE([HAVE_CURSES_COLOR],    [1], [Define to 1 if library supports color (enhanced functions)])\n                AC_DEFINE([HAVE_CURSES_OBSOLETE], [1], [Define to 1 if library supports certain obsolete features])\n                AC_DEFINE([HAVE_NCURSES_H],       [1], [Define to 1 if <ncurses.h> is present])\n            ])\n\n            AS_IF([test \"x$ax_cv_header_ncurses_curses_h\" = xno && test \"x$ax_cv_header_ncurses_h\" = xno], [\n                AC_MSG_WARN([could not find a working ncurses/curses.h or ncurses.h])\n            ])\n        ])\n    ])\n    unset pkg_cv__ax_cv_ncurses_libs\n    unset pkg_cv__ax_cv_ncurses_cppflags\n\n    # Test for plain Curses (or if CURSES_LIBS was set by user)\n    AS_IF([test \"x$with_plaincurses\" != xno && test \"x$ax_cv_curses_which\" = xno], [\n        AS_IF([test \"x$CURSES_LIBS\" != x], [\n            LIBS=\"$ax_saved_LIBS $CURSES_LIBS\"\n        ], [\n            LIBS=\"$ax_saved_LIBS -lcurses\"\n        ])\n\n        AC_CACHE_CHECK([for Curses library], [ax_cv_plaincurses], [\n            AC_LINK_IFELSE([AC_LANG_CALL([], [initscr])],\n                [ax_cv_plaincurses=yes], [ax_cv_plaincurses=no])\n        ])\n\n        AS_IF([test \"x$ax_cv_plaincurses\" = xyes], [\n            ax_cv_curses=yes\n            ax_cv_curses_which=plaincurses\n            AS_IF([test \"x$CURSES_LIBS\" = x], [\n                CURSES_LIBS=\"-lcurses\"\n            ])\n            AC_DEFINE([HAVE_CURSES], [1], [Define to 1 if a SysV or X/Open compatible Curses library is present])\n\n            # Check for base conformance (and header file)\n\n            AC_CACHE_CHECK([for working curses.h], [ax_cv_header_curses_h], [\n                AC_LINK_IFELSE([AC_LANG_PROGRAM([[\n                        @%:@include <curses.h>\n                    ]], [[\n                        chtype a = A_BOLD;\n                        int b = KEY_LEFT;\n                        initscr();\n                    ]])],\n                    [ax_cv_header_curses_h=yes],\n                    [ax_cv_header_curses_h=no])\n            ])\n            AS_IF([test \"x$ax_cv_header_curses_h\" = xyes], [\n                AC_DEFINE([HAVE_CURSES_H], [1], [Define to 1 if <curses.h> is present])\n\n                # Check for X/Open Enhanced conformance\n\n                AC_CACHE_CHECK([for X/Open Enhanced Curses conformance], [ax_cv_plaincurses_enhanced], [\n                    AC_LINK_IFELSE([AC_LANG_PROGRAM([[\n                            @%:@define _XOPEN_SOURCE_EXTENDED 1\n                            @%:@include <curses.h>\n                            @%:@ifndef _XOPEN_CURSES\n                            @%:@error \"this Curses library is not enhanced\"\n                            \"this Curses library is not enhanced\"\n                            @%:@endif\n                        ]], [[\n                            chtype a = A_BOLD;\n                            int b = KEY_LEFT;\n                            chtype c = COLOR_PAIR(1) & A_COLOR;\n                            attr_t d = WA_NORMAL;\n                            cchar_t e;\n                            wint_t f;\n                            initscr();\n                            init_pair(1, COLOR_WHITE, COLOR_RED);\n                            wattr_set(stdscr, d, 0, NULL);\n                            wget_wch(stdscr, &f);\n                        ]])],\n                        [ax_cv_plaincurses_enhanced=yes],\n                        [ax_cv_plaincurses_enhanced=no])\n                ])\n                AS_IF([test \"x$ax_cv_plaincurses_enhanced\" = xyes], [\n                    ax_cv_curses_enhanced=yes\n                    ax_cv_curses_color=yes\n                    AC_DEFINE([HAVE_CURSES_ENHANCED], [1], [Define to 1 if library supports X/Open Enhanced functions])\n                    AC_DEFINE([HAVE_CURSES_COLOR],    [1], [Define to 1 if library supports color (enhanced functions)])\n                ])\n\n                # Check for color functions\n\n                AC_CACHE_CHECK([for Curses color functions], [ax_cv_plaincurses_color], [\n                    AC_LINK_IFELSE([AC_LANG_PROGRAM([[\n                        @%:@define _XOPEN_SOURCE_EXTENDED 1\n                        @%:@include <curses.h>\n                        ]], [[\n                            chtype a = A_BOLD;\n                            int b = KEY_LEFT;\n                            chtype c = COLOR_PAIR(1) & A_COLOR;\n                            initscr();\n                            init_pair(1, COLOR_WHITE, COLOR_RED);\n                        ]])],\n                        [ax_cv_plaincurses_color=yes],\n                        [ax_cv_plaincurses_color=no])\n                ])\n                AS_IF([test \"x$ax_cv_plaincurses_color\" = xyes], [\n                    ax_cv_curses_color=yes\n                    AC_DEFINE([HAVE_CURSES_COLOR], [1], [Define to 1 if library supports color (enhanced functions)])\n                ])\n\n                # Check for obsolete functions\n\n                AC_CACHE_CHECK([for obsolete Curses functions], [ax_cv_plaincurses_obsolete], [\n                AC_LINK_IFELSE([AC_LANG_PROGRAM([[\n                        @%:@include <curses.h>\n                    ]], [[\n                        chtype a = A_BOLD;\n                        int b = KEY_LEFT;\n                        int g = getattrs(stdscr);\n                        int h = getcurx(stdscr) + getmaxx(stdscr);\n                        initscr();\n                    ]])],\n                    [ax_cv_plaincurses_obsolete=yes],\n                    [ax_cv_plaincurses_obsolete=no])\n                ])\n                AS_IF([test \"x$ax_cv_plaincurses_obsolete\" = xyes], [\n                    ax_cv_curses_obsolete=yes\n                    AC_DEFINE([HAVE_CURSES_OBSOLETE], [1], [Define to 1 if library supports certain obsolete features])\n                ])\n            ])\n\n            AS_IF([test \"x$ax_cv_header_curses_h\" = xno], [\n                AC_MSG_WARN([could not find a working curses.h])\n            ])\n        ])\n    ])\n\n    AS_IF([test \"x$ax_cv_curses\"          != xyes], [ax_cv_curses=no])\n    AS_IF([test \"x$ax_cv_curses_enhanced\" != xyes], [ax_cv_curses_enhanced=no])\n    AS_IF([test \"x$ax_cv_curses_color\"    != xyes], [ax_cv_curses_color=no])\n    AS_IF([test \"x$ax_cv_curses_obsolete\" != xyes], [ax_cv_curses_obsolete=no])\n\n    LIBS=$ax_saved_LIBS\n    CPPFLAGS=$ax_saved_CPPFLAGS\n\n    unset ax_saved_LIBS\n    unset ax_saved_CPPFLAGS\n])dnl\n"
  },
  {
    "path": "tools/doc-gen.c",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n\n#include \"tig/tig.h\"\n#include \"tig/request.h\"\n#include \"tig/util.h\"\n\nstruct doc_action_iterator {\n\tbool end_group;\n\tconst char *group;\n};\n\nstatic void\ndoc_action_group_name_print(const char *group)\n{\n\tprintf(\"%s\\n\", group);\n\twhile (*group++)\n\t\tprintf(\"^\");\n\tprintf(\"\\n\\n\");\n}\n\nstatic void\ndoc_action_table_print(bool start)\n{\n\tif (start)\n\t\tprintf(\"[frame=\\\"none\\\",grid=\\\"none\\\",cols=\\\"25<m,75<\\\"]\\n\");\n\tprintf(\"|=============================================================================\\n\");\n}\n\nstatic bool\ndoc_action_print(void *data, const struct request_info *req_info, const char *group)\n{\n\tstruct doc_action_iterator *iterator = data;\n\n\tif (iterator->group != group) {\n\t\tif (iterator->end_group) {\n\t\t\tdoc_action_table_print(false);\n\t\t\tprintf(\"\\n\");\n\t\t}\n\n\t\tdoc_action_group_name_print(group);\n\t\tdoc_action_table_print(true);\n\n\t\titerator->group = group;\n\t\titerator->end_group = true;\n\t}\n\n\tprintf(\"|%-24s|%s\\n\", enum_name(req_info->name), req_info->help);\n\treturn true;\n}\n\nstatic void\ndoc_actions_print(void)\n{\n\tstruct doc_action_iterator iterator = { false };\n\n\tforeach_request(doc_action_print, &iterator);\n\tdoc_action_table_print(false);\n}\n\nint\nmain(int argc, const char *argv[])\n{\n\tint i;\n\n\tfor (i = 1; i < argc; i++) {\n\t\tif (!strcmp(argv[i], \"actions\"))\n\t\t\tdoc_actions_print();\n\t}\n\n\treturn EXIT_SUCCESS;\n}\n\n/* vim: set ts=8 sw=8 noexpandtab: */\n"
  },
  {
    "path": "tools/gcov.m4",
    "content": "# Copyright 2012 Canonical Ltd.\n#\n# This program is free software: you can redistribute it and/or modify it \n# under the terms of the GNU General Public License version 3, as published \n# by the Free Software Foundation.\n#\n# This program is distributed in the hope that it will be useful, but \n# WITHOUT ANY WARRANTY; without even the implied warranties of \n# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR \n# PURPOSE.  See the GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License along \n# with this program.  If not, see <https://www.gnu.org/licenses/>.\n\n# Checks for existence of coverage tools:\n#  * gcov\n#  * lcov\n#  * genhtml\n#  * gcovr\n# \n# Sets ac_cv_check_gcov to yes if tooling is present\n# and reports the executables to the variables LCOV, GCOVR and GENHTML.\nAC_DEFUN([AC_TDD_GCOV],\n[\n  AC_ARG_ENABLE(gcov,\n  AS_HELP_STRING([--enable-gcov],\n\t\t [enable coverage testing with gcov]),\n  [use_gcov=yes], [use_gcov=no])\n\n  AM_CONDITIONAL(HAVE_GCOV, test \"x$use_gcov\" = \"xyes\")\n\n  if test \"x$use_gcov\" = \"xyes\"; then\n  # we need gcc:\n  if test \"$GCC\" != \"yes\"; then\n    AC_MSG_ERROR([GCC is required for --enable-gcov])\n  fi\n\n  # Check if ccache is being used\n  AC_CHECK_PROG(SHTOOL, shtool, shtool)\n  if test \"$SHTOOL\"; then\n    AS_CASE([`$SHTOOL path $CC`],\n                [*ccache*], [gcc_ccache=yes],\n                [gcc_ccache=no])\n  fi\n\n  if test \"$gcc_ccache\" = \"yes\" && (test -z \"$CCACHE_DISABLE\" || test \"$CCACHE_DISABLE\" != \"1\"); then\n    AC_MSG_ERROR([ccache must be disabled when --enable-gcov option is used. You can disable ccache by setting environment variable CCACHE_DISABLE=1.])\n  fi\n\n  lcov_version_list=\"1.6 1.7 1.8 1.9 1.10 1.11\"\n  AC_CHECK_PROG(LCOV, lcov, lcov)\n  AC_CHECK_PROG(GENHTML, genhtml, genhtml)\n\n  if test \"$LCOV\"; then\n    AC_CACHE_CHECK([for lcov version], glib_cv_lcov_version, [\n      glib_cv_lcov_version=invalid\n      lcov_version=`$LCOV -v 2>/dev/null | $SED -e 's/^.* //'`\n      for lcov_check_version in $lcov_version_list; do\n        if test \"$lcov_version\" = \"$lcov_check_version\"; then\n          glib_cv_lcov_version=\"$lcov_check_version (ok)\"\n        fi\n      done\n    ])\n  else\n    lcov_msg=\"To enable code coverage reporting you must have one of the following lcov versions installed: $lcov_version_list\"\n    AC_MSG_ERROR([$lcov_msg])\n  fi\n\n  case $glib_cv_lcov_version in\n    \"\"|invalid[)]\n      lcov_msg=\"You must have one of the following versions of lcov: $lcov_version_list (found: $lcov_version).\"\n      AC_MSG_ERROR([$lcov_msg])\n      LCOV=\"exit 0;\"\n      ;;\n  esac\n\n  if test -z \"$GENHTML\"; then\n    AC_MSG_ERROR([Could not find genhtml from the lcov package])\n  fi\n\n  # Remove all optimization flags from CFLAGS\n  changequote({,})\n  CFLAGS=`echo \"$CFLAGS\" | $SED -e 's/-O[0-9]*//g'`\n  CPPFLAGS=`echo \"$CPPFLAGS\" | $SED -e 's/-O[0-9]*//g'`\n  changequote([,])\n\n  # Add the special gcc flags\n  COVERAGE_CFLAGS=\"--coverage -DDEBUG\"\n  COVERAGE_CXXFLAGS=\"--coverage -DDEBUG\"\n  COVERAGE_LDFLAGS=\"--coverage -lgcov\"\n\nfi\n]) # AC_TDD_GCOV\n\n"
  },
  {
    "path": "tools/header.h",
    "content": "/* Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n *\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License as\n * published by the Free Software Foundation; either version 2 of\n * the License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU General Public License for more details.\n */\n"
  },
  {
    "path": "tools/iconv.m4",
    "content": "dnl From Bruno Haible.\nAC_DEFUN([AM_ICONV],\n[\n  dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and\n  dnl those with the standalone portable GNU libiconv installed).\n\n  AC_ARG_WITH([libiconv],\n[  --with-libiconv=DIR     search for libiconv in DIR/include and DIR/lib], [\n    for dir in `echo \"$withval\" | tr : ' '`; do\n      if test -d $dir/include; then CPPFLAGS=\"$CPPFLAGS -I$dir/include\"; fi\n      if test -d $dir/lib; then LDFLAGS=\"$LDFLAGS -L$dir/lib\"; fi\n    done\n   ])\n\n  AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [\n    am_cv_func_iconv=\"no, consider installing GNU libiconv\"\n    am_cv_lib_iconv=no\n    AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>\n#include <iconv.h>]], [[iconv_t cd = iconv_open(\"\",\"\");\n       iconv(cd,NULL,NULL,NULL,NULL);\n       iconv_close(cd);]])],[am_cv_func_iconv=yes],[])\n    if test \"$am_cv_func_iconv\" != yes; then\n      am_save_LIBS=\"$LIBS\"\n      LIBS=\"$LIBS -liconv\"\n      AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>\n#include <iconv.h>]], [[iconv_t cd = iconv_open(\"\",\"\");\n         iconv(cd,NULL,NULL,NULL,NULL);\n         iconv_close(cd);]])],[am_cv_lib_iconv=yes\n        am_cv_func_iconv=yes],[])\n      LIBS=\"$am_save_LIBS\"\n    fi\n  ])\n  if test \"$am_cv_func_iconv\" = yes; then\n    AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])\n    AC_MSG_CHECKING([for iconv declaration])\n    AC_CACHE_VAL(am_cv_proto_iconv, [\n      AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[\n#include <stdlib.h>\n#include <iconv.h>\nextern\n#ifdef __cplusplus\n\"C\"\n#endif\n#if defined(__STDC__) || defined(__cplusplus)\nsize_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);\n#else\nsize_t iconv();\n#endif\n]], [[]])],[am_cv_proto_iconv_arg1=\"\"],[am_cv_proto_iconv_arg1=\"const\"])\n      am_cv_proto_iconv=\"extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);\"])\n    am_cv_proto_iconv=`echo \"[$]am_cv_proto_iconv\" | tr -s ' ' | sed -e 's/( /(/'`\n    AC_MSG_RESULT([$]{ac_t:-\n         }[$]am_cv_proto_iconv)\n    AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1,\n      [Define as const if the declaration of iconv() needs const.])\n  else\n    AC_MSG_FAILURE([iconv() not found. Please install libiconv and use --with-libiconv=/path/to/dir.],[1])\n  fi\n  if test \"$am_cv_lib_iconv\" = yes; then\n    LIBS=\"$LIBS -liconv\"\n  fi\n])\n"
  },
  {
    "path": "tools/install.sh",
    "content": "#!/bin/sh\n#\n# Install data or executable file.\n#\n# Usage: $0 {data|bin} src dest\n#\n# Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n#\n# This program is free software; you can redistribute it and/or\n# modify it under the terms of the GNU General Public License as\n# published by the Free Software Foundation; either version 2 of\n# the License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n\nset -e\n\ndata=\"$1\"\nsrc=\"$2\"\ndest=\"$3\"\nmode=0755\ntrash=\n\ncase \"$data\" in data)\n\tmode=0644\nesac\n\ninstall -d \"$dest\"\n\nif [ \"$V\" = \"@\" ]; then\n\techo \"$src -> $dest\"\nfi\n\n# Replace fake /etc-path\ncase \"$src\" in doc/*)\n\tdest=\"$dest/$(basename \"$src\")\"\n\tsed \"s#++SYSCONFDIR++#${sysconfdir}#\" < \"$src\" > \"$src+\"\n\ttrash=\"$src+\"\n\tsrc=\"$src+\"\nesac\n\ninstall -p -m \"$mode\" \"$src\" \"$dest\"\n\nif [ -n \"$trash\" ]; then\n\trm -f \"$trash\"\nfi\n"
  },
  {
    "path": "tools/make-builtin-config.sh",
    "content": "#!/bin/sh\n#\n# Generate code for including a copy of the default tigrc inside the\n# binary.\n#\n# Usage: $0 /path/to/tigrc\n#\n# Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n#\n# This program is free software; you can redistribute it and/or\n# modify it under the terms of the GNU General Public License as\n# published by the Free Software Foundation; either version 2 of\n# the License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n\nTIGRC=\"${1:-tigrc}\"\n\nread_tigrc() {\n\tif test -z \"$NO_BUILTIN_TIGRC\"; then\n\t\tsed 's/[[:space:]]*#.*//' \"$TIGRC\" | sed 's,\\\\,\\\\\\\\,g' | sed 's,\",\\\\\",g' | sed 's/\t\\+/\t/g'\n\telse\n\t\techo '#'\n\tfi\n}\n\necho \"/* Generated by $0 */\"\necho \"const char *builtin_config =\"\n\nread_tigrc | while read -r line; do\n\tcase \"$line\" in\n\t\"\")\t: ignore ;;\n\t*)\tprintf '\t\"%s\\\\n\"\\n' \"$line\"\n\tesac\ndone\n\necho \";\"\n"
  },
  {
    "path": "tools/release.sh",
    "content": "#!/bin/sh\n#\n# Script for preparing a release or updating the release branch.\n# Usage: $0 version\n#\n# Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n#\n# This program is free software; you can redistribute it and/or\n# modify it under the terms of the GNU General Public License as\n# published by the Free Software Foundation; either version 2 of\n# the License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n\nset -e\nset -x\n\nVERSION=\"$1\"\n\nif which gsed >/dev/null; then SED=gsed; else SED=sed; fi\n\nTAG=\"tig-$VERSION\"\nTITLE=\"$TAG\\n$(echo \"$TAG\" | $SED 's/./-/g')\"\nNEWS=\"NEWS.adoc\"\n\n# Require a clean repository.\ngit update-index --refresh\ngit diff-index --quiet HEAD\n\nif test -n \"$VERSION\"; then\n\t# Get a sane starting point.\n\ttest \"$(git symbolic-ref HEAD)\" = \"refs/heads/master\" ||\n\t\tgit checkout master\n\n\t# Update files which should reference the version.\n\t$SED -i \"s/VERSION\\s*=\\s*[0-9.]\\+/VERSION\t= $VERSION/\" Makefile\n\t$SED -i \"s#tig-[0-9.]\\+[0-9]\\+#tig-$VERSION#g\" INSTALL.adoc\n\tperl -pi -e 's/^master$/RELEASE_TITLE/ms' \"$NEWS\"\n\tperl -pi -e 's/^RELEASE_TITLE.*/RELEASE_TITLE/ms' \"$NEWS\"\n\tperl -pi -e \"s/^RELEASE_TITLE.*/$TITLE/\" \"$NEWS\"\n\n\t# Check for typos.\n\tmake spell-check\n\n\t# Last review.\n\t${EDITOR:-vi} \"$NEWS\"\n\n\t# Create release commit and tag.\n\tgit commit -a -m \"$TAG\"\n\tgit tag -s -m \"tig version $VERSION\" \"$TAG\"\n\n\t# Prepare release announcement file.\n\t./tools/announcement.sh \"$TAG\" > \"$TAG.txt\"\n\n\t# Set version for the Makefile\n\texport DIST_VERSION=\"$VERSION\"\nelse\n\t# Get meaningful version for the update message.\n\tTAG=\"$(git describe)\"\nfi\n\n# Update the release branch.\ngit checkout release\nHEAD=\"$(git rev-parse release)\"\ngit merge --ff master\nif test -n \"$(git rev-list -1 release ^$HEAD)\"; then\n\tmake veryclean doc-man doc-html sysconfdir=++SYSCONFDIR++\n\tgit commit -a -m \"Update for version $TAG\"\nfi\n\nif test -n \"$VERSION\"; then\n\t# Create the tarball.\n\tmake dist\nfi\n\n# Done.\ngit checkout master\n"
  },
  {
    "path": "tools/travis.sh",
    "content": "#!/bin/bash\n\nset -euo pipefail\nIFS=$'\\n\\t'\n\nbuild_config_make() {\n\tcp contrib/config.make .\n\tmake all-debug\n\tmake update-docs && git diff --exit-code\n\tmake test\n\n\tmake prefix=/tmp/bare-prefix install install-doc\n\t/tmp/bare-prefix/bin/tig --version\n\tmake prefix=/tmp/bare-prefix uninstall\n\ttest ! -d /tmp/bare-prefix\n\n \tmake distclean\n}\n\nbuild_autoconf() {\n\tmake dist\n\t./configure --prefix=/tmp/conf-prefix\n\tmake V=1 TEST_SHELL=bash all test\n\n\tmake install install-doc\n\t/tmp/conf-prefix/bin/tig --version\n\tmake uninstall\n\ttest ! -d /tmp/conf-prefix\n\n\tmake DESTDIR=/tmp/bare-destdir install install-doc\n\t/tmp/bare-destdir/tmp/conf-prefix/bin/tig --version\n\tmake DESTDIR=/tmp/bare-destdir uninstall\n\ttest ! -d /tmp/bare-destdir\n\n\tmake clean\n}\n\nbuild_address_sanitizer() {\n\tcp contrib/config.make .\n\tmake test-address-sanitizer\n}\n\nbuild_valgrind() {\n\tcp contrib/config.make .\n\tmake all-debug test TEST_OPTS=valgrind\n}\n\ncase \"$TIG_BUILD\" in\n\tconfig.make)\t\tbuild_config_make ;;\n\tautoconf)\t\tbuild_autoconf ;;\n\taddress-sanitizer)\tbuild_address_sanitizer ;;\n\tvalgrind)\t\tbuild_valgrind ;;\n\n\t*)\n\t\techo \"Unknown config: $TIG_BUILD\"\n\t\texit 1\nesac\n"
  },
  {
    "path": "tools/uninstall.sh",
    "content": "#!/bin/sh\n#\n# Uninstall data or executable file.\n#\n# Usage: $0 dest\n#\n# Copyright (c) 2006-2026 Jonas Fonseca <jonas.fonseca@gmail.com>\n#\n# This program is free software; you can redistribute it and/or\n# modify it under the terms of the GNU General Public License as\n# published by the Free Software Foundation; either version 2 of\n# the License, or (at your option) any later version.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n# GNU General Public License for more details.\n\nset -e\n\nfile=\"$1\"\ndir=\"$(dirname \"$file\")\"\n\nif [ -d \"$file\" -a \"$dir\" = \"tig\" ]; then\n\trm -rf \"$file\"\nelif [ -f \"$file\" ]; then\n\trm -f \"$file\"\nfi\n\nif [ -d \"$dir\" ]; then\n\tset +e\n\trmdir -p \"$dir\" 2>/dev/null\nfi\n\necho \"$file\"\n"
  }
]