Import perl-5.32.1
authorafresh1 <afresh1@openbsd.org>
Mon, 1 Mar 2021 23:14:32 +0000 (23:14 +0000)
committerafresh1 <afresh1@openbsd.org>
Mon, 1 Mar 2021 23:14:32 +0000 (23:14 +0000)
OK sthen@

752 files changed:
gnu/usr.bin/perl/.travis.yml
gnu/usr.bin/perl/Cross/README.new
gnu/usr.bin/perl/NetWare/nw5.c
gnu/usr.bin/perl/Porting/README.y2038
gnu/usr.bin/perl/Porting/exercise_makedef.pl
gnu/usr.bin/perl/Porting/manicheck
gnu/usr.bin/perl/Porting/security_template.pod [new file with mode: 0644]
gnu/usr.bin/perl/README.cn
gnu/usr.bin/perl/README.jp
gnu/usr.bin/perl/README.ko
gnu/usr.bin/perl/README.macos
gnu/usr.bin/perl/README.tw
gnu/usr.bin/perl/SECURITY.md [new file with mode: 0644]
gnu/usr.bin/perl/asan_ignore
gnu/usr.bin/perl/cpan/Archive-Tar/t/02_methods.t
gnu/usr.bin/perl/cpan/Archive-Tar/t/09_roundtrip.t
gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/Makefile.PL
gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/Makefile.PL
gnu/usr.bin/perl/cpan/DB_File/config.in
gnu/usr.bin/perl/cpan/DB_File/dbinfo
gnu/usr.bin/perl/cpan/DB_File/t/db-btree.t
gnu/usr.bin/perl/cpan/DB_File/t/db-hash.t
gnu/usr.bin/perl/cpan/DB_File/t/db-recno.t
gnu/usr.bin/perl/cpan/DB_File/typemap
gnu/usr.bin/perl/cpan/DB_File/version.c
gnu/usr.bin/perl/cpan/Encode/Encode/encode.h
gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/03-xsstatic.t
gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/MM_Cygwin.t
gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/fixin.t
gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Setup/BFD.pm
gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/pod2man.t
gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/testrules.yml [new file with mode: 0644]
gnu/usr.bin/perl/cpan/IO-Compress/bin/streamzip [new file with mode: 0644]
gnu/usr.bin/perl/cpan/IO-Compress/t/006zip.t
gnu/usr.bin/perl/cpan/IO-Compress/t/011-streamzip.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/IO-Compress/t/050interop-gzip.t
gnu/usr.bin/perl/cpan/IO-Compress/t/105oneshot-zip-only.t
gnu/usr.bin/perl/cpan/IO-Compress/t/107multi-zip-only.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/IO-Compress/t/112utf8-zip.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/IO-Compress/t/compress/multi.pl
gnu/usr.bin/perl/cpan/IO-Compress/t/cz-14gzopen.t
gnu/usr.bin/perl/cpan/IO-Compress/t/files/bad-efs.zip [new file with mode: 0644]
gnu/usr.bin/perl/cpan/IO-Compress/t/files/encrypt-aes.zip [new file with mode: 0644]
gnu/usr.bin/perl/cpan/IO-Compress/t/files/encrypt-standard.zip [new file with mode: 0644]
gnu/usr.bin/perl/cpan/IO-Compress/t/files/jar.zip [new file with mode: 0644]
gnu/usr.bin/perl/cpan/JSON-PP/lib/JSON/PP/Boolean.pm
gnu/usr.bin/perl/cpan/Math-BigInt/lib/Math/BigInt/Lib.pm
gnu/usr.bin/perl/cpan/Math-BigInt/t/Math/BigInt/Lib/Minimal.pm
gnu/usr.bin/perl/cpan/Math-BigInt/t/backermann-mbi.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/Math-BigInt/t/bdigitsum-mbi.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/Math-BigInt/t/buparrow-mbi.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/Math-BigInt/t/calling-class-methods.t
gnu/usr.bin/perl/cpan/Math-BigInt/t/calling-instance-methods.t
gnu/usr.bin/perl/cpan/Math-BigInt/t/from_ieee754-mbf.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/Math-BigInt/t/new-mbf.t
gnu/usr.bin/perl/cpan/Math-BigInt/t/to_ieee754-mbf.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/Memoize/t/expmod_t.t
gnu/usr.bin/perl/cpan/Memoize/t/speed.t
gnu/usr.bin/perl/cpan/Module-Load-Conditional/t/01_Module_Load_Conditional.t
gnu/usr.bin/perl/cpan/Module-Load-Conditional/t/to_load/HereDoc.pm [new file with mode: 0644]
gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/JustPod.pm [new file with mode: 0644]
gnu/usr.bin/perl/cpan/Pod-Simple/t/00about.t
gnu/usr.bin/perl/cpan/Pod-Simple/t/JustPod01.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/Pod-Simple/t/JustPod02.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/Pod-Simple/t/JustPod_corpus.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/Pod-Simple/t/content_seen.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/Pod-Simple/t/corpus/polish_utf8.txt
gnu/usr.bin/perl/cpan/Pod-Simple/t/corpus/polish_utf8.xml
gnu/usr.bin/perl/cpan/Pod-Simple/t/fcodes_s.t
gnu/usr.bin/perl/cpan/Pod-Simple/t/github_issue_79.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/Pod-Simple/t/perlcyg.pod
gnu/usr.bin/perl/cpan/Pod-Simple/t/rtf_utf8.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/Pod-Simple/t/search60.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/Pod-Simple/t/search60/A/x.pod [new file with mode: 0644]
gnu/usr.bin/perl/cpan/Pod-Simple/t/search60/B/X.pod [new file with mode: 0644]
gnu/usr.bin/perl/cpan/Pod-Simple/t/strpvbtm.t
gnu/usr.bin/perl/cpan/Pod-Simple/t/testlib2/pods/perlzoned.pod [new file with mode: 0644]
gnu/usr.bin/perl/cpan/Pod-Simple/t/x_nixer.t
gnu/usr.bin/perl/cpan/Scalar-List-Utils/Makefile.PL
gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/exotic_names.t
gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/reductions.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/sample.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/scalarutil-proto.t
gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/subname.t
gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/uniq.t
gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/uniqnum.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/Sys-Syslog/t/cpan-rt-21516.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/Sys-Syslog/t/cpan-rt-21866.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/Sys-Syslog/t/cpan-rt-25488.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/Sys-Syslog/t/cpan-rt-49877.pl [new file with mode: 0644]
gnu/usr.bin/perl/cpan/Sys-Syslog/t/cpan-rt-55151.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/Sys-Syslog/t/cpan-rt-64287.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/Sys-Syslog/t/syslog-inet-udp.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/Sys-Syslog/t/syslog.t
gnu/usr.bin/perl/cpan/Term-ANSIColor/t/module/aliases-func.t
gnu/usr.bin/perl/cpan/Term-ANSIColor/t/module/basic.t
gnu/usr.bin/perl/cpan/Term-ANSIColor/t/module/eval.t
gnu/usr.bin/perl/cpan/Term-ANSIColor/t/module/stringify.t
gnu/usr.bin/perl/cpan/Term-ANSIColor/t/module/true-color.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/Term-ANSIColor/t/taint/basic.t
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder/Formatter.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder/TodoDiag.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/API.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/API/Breakage.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/API/Context.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/API/Instance.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/API/Stack.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/Event.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/Event/Bail.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/Event/Diag.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/Event/Encoding.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/Event/Exception.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/Event/Fail.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/Event/Generic.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/Event/Note.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/Event/Ok.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/Event/Pass.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/Event/Plan.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/Event/Skip.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/Event/Subtest.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/Event/TAP/Version.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/Event/V2.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/Event/Waiting.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/EventFacet.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/EventFacet/About.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/EventFacet/Amnesty.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/EventFacet/Assert.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/EventFacet/Control.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/EventFacet/Error.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/EventFacet/Hub.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/EventFacet/Info.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/EventFacet/Info/Table.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/EventFacet/Meta.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/EventFacet/Parent.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/EventFacet/Plan.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/EventFacet/Render.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/EventFacet/Trace.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/Formatter.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/Formatter/TAP.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/Hub.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/Hub/Interceptor.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/Hub/Interceptor/Terminator.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/Hub/Subtest.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/IPC.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/IPC/Driver.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/IPC/Driver/Files.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/Tools/Tiny.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/Transition.pod
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/Util.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/Util/ExternalMeta.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/Util/Facets2Legacy.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/Util/HashBase.pm
gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/Util/Trace.pm
gnu/usr.bin/perl/cpan/Test-Simple/t/HashBase.t
gnu/usr.bin/perl/cpan/Test-Simple/t/Legacy/Tester/tbt_09do.t
gnu/usr.bin/perl/cpan/Test-Simple/t/Test2/modules/API.t
gnu/usr.bin/perl/cpan/Test-Simple/t/Test2/modules/API/Breakage.t
gnu/usr.bin/perl/cpan/Test-Simple/t/Test2/modules/API/Context.t
gnu/usr.bin/perl/cpan/Test-Simple/t/Test2/modules/Formatter/TAP.t
gnu/usr.bin/perl/cpan/Test-Simple/t/regression/812-todo.t
gnu/usr.bin/perl/cpan/Test-Simple/t/regression/errors_facet.t
gnu/usr.bin/perl/cpan/Time-Piece/t/06large.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/Time-Piece/t/08truncate.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/Time-Piece/t/09locales.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/Time-Piece/t/10overload.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/Time-Piece/t/99legacy.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/Win32/longpath.inc
gnu/usr.bin/perl/cpan/autodie/lib/autodie/Scope/Guard.pm
gnu/usr.bin/perl/cpan/autodie/lib/autodie/Scope/GuardStack.pm
gnu/usr.bin/perl/cpan/autodie/lib/autodie/Util.pm
gnu/usr.bin/perl/cpan/autodie/t/kill.t
gnu/usr.bin/perl/cpan/autodie/t/no-default.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/podlators/t/data/perl.conf
gnu/usr.bin/perl/cpan/podlators/t/data/snippets/overstrike/tag-width [new file with mode: 0644]
gnu/usr.bin/perl/cpan/podlators/t/data/snippets/overstrike/wrapping [new file with mode: 0644]
gnu/usr.bin/perl/cpan/podlators/t/data/snippets/termcap/term-unknown [new file with mode: 0644]
gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/alt [new file with mode: 0644]
gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/c-with-spaces [new file with mode: 0644]
gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/code [new file with mode: 0644]
gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/empty [new file with mode: 0644]
gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/error-die [new file with mode: 0644]
gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/error-none [new file with mode: 0644]
gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/error-normal [new file with mode: 0644]
gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/error-pod [new file with mode: 0644]
gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/error-stderr [new file with mode: 0644]
gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/error-stderr-opt [new file with mode: 0644]
gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/for [new file with mode: 0644]
gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/iso-8859-1 [new file with mode: 0644]
gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/late-encoding [new file with mode: 0644]
gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/link-rt [new file with mode: 0644]
gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/link-url [new file with mode: 0644]
gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/margin [new file with mode: 0644]
gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/nonbreaking-space [new file with mode: 0644]
gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/nourls [new file with mode: 0644]
gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/periods [new file with mode: 0644]
gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/quotes-opt [new file with mode: 0644]
gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/s-whitespace [new file with mode: 0644]
gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/sentence-spacing [new file with mode: 0644]
gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/utf8 [new file with mode: 0644]
gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/utf8-iso [new file with mode: 0644]
gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/verbatim [new file with mode: 0644]
gnu/usr.bin/perl/cpan/podlators/t/data/termcap
gnu/usr.bin/perl/cpan/podlators/t/docs/spdx-license.t
gnu/usr.bin/perl/cpan/podlators/t/man/iso-8859-1.t
gnu/usr.bin/perl/cpan/podlators/t/man/snippets.t
gnu/usr.bin/perl/cpan/podlators/t/style/obsolete-strings.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/podlators/t/text/invalid.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/podlators/t/text/iso-8859-1.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/podlators/t/text/snippets.t [new file with mode: 0644]
gnu/usr.bin/perl/cpan/podlators/t/text/utf8-io.t [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/Changes
gnu/usr.bin/perl/dist/Devel-PPPort/HACKERS
gnu/usr.bin/perl/dist/Devel-PPPort/MANIFEST.SKIP
gnu/usr.bin/perl/dist/Devel-PPPort/Makefile.PL
gnu/usr.bin/perl/dist/Devel-PPPort/PPPort.xs
gnu/usr.bin/perl/dist/Devel-PPPort/PPPort_pm.PL
gnu/usr.bin/perl/dist/Devel-PPPort/RealPPPort_xs.PL [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/TODO [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/apicheck_c.PL
gnu/usr.bin/perl/dist/Devel-PPPort/devel/buildperl.pl
gnu/usr.bin/perl/dist/Devel-PPPort/devel/devtools.pl
gnu/usr.bin/perl/dist/Devel-PPPort/devel/mkapidoc.pl [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/devel/mkppport_fnc.pl [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/devel/mktodo
gnu/usr.bin/perl/dist/Devel-PPPort/devel/mktodo.pl
gnu/usr.bin/perl/dist/Devel-PPPort/devel/regenerate
gnu/usr.bin/perl/dist/Devel-PPPort/devel/scanprov
gnu/usr.bin/perl/dist/Devel-PPPort/mktests.PL
gnu/usr.bin/perl/dist/Devel-PPPort/parts/apicheck.pl
gnu/usr.bin/perl/dist/Devel-PPPort/parts/apidoc.fnc
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5003007 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5004000
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5004001 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5004002 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5004003 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5004004 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5004005 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5005000
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5005001 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5005002 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5005003 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5005004 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5006000
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5006001
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5007001
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5007002
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5007003
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5008000
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5008001
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5008009
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5009000
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5009001
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5009002
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5009003
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5009004
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5009005
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5010000
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5010001
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5011000
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5011001
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5011002
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5011004
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5013000
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5013001
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5013002
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5013003
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5013004
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5013005
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5013006
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5013007
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5013008
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5013009
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5013010
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5013011
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5014000
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5015000
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5015001
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5015002
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5015003
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5015004
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5015005
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5015006
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5015007
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5015008
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5015009
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5016000
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5017000
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5017001
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5017002
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5017003
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5017004
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5017005
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5017006
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5017007
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5017008
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5017009
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5017010
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5017011
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5019001
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5019002
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5019003
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5019004
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5019005
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5019006
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5019007
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5019008
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5019009
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5019010
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5021001
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5021002
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5021003 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5021004
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5021005
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5021006
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5021007
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5021008
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5021009
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5021010
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5022002 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5022003 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5022004 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5023000
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5023002
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5023004
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5023006
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5023007
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5023008
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5023009
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5024000
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5024001 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5024002 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5024003 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5024004 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025000 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025001 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025002 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025003 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025004 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025005 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025006 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025007 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025008 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025009 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025010 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025011 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025012 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5026000 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5026001 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5026002 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5026003 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027000 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027001 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027002 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027003 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027004 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027005 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027006 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027007 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027008 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027009 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027010 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027011 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5028000 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5028001 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5029000 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5029001 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5029002 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5029003 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5029004 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5029005 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5029006 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5029007 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5029008 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5029009 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5029010 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5030000 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5031001 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5031002 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5031003 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5031004 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5031005 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5031006 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5031007 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5031008 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/embed.fnc
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/01_test [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/HvNAME
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/SvPV
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/Sv_set
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/call
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/cop
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/exception
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/format
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/grok
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/gv
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/inctools [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/locale [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/mPUSH
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/magic
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/memory
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/mess
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/misc
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/newCONSTSUB
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/newRV
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/newSV_type
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/newSVpv
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/podtest
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/ppphbin
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/ppphdoc
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/ppphtest
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/pv_tools
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/pvs
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/shared_pv
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/snprintf
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/sprintf
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/strlfuncs
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/subparse [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/sv_xpvf
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/threads
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/utf8 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/uv
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/variables
gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/warn
gnu/usr.bin/perl/dist/Devel-PPPort/parts/ppport.fnc
gnu/usr.bin/perl/dist/Devel-PPPort/parts/ppptools.pl
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5003007 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5004000
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5004001 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5004002 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5004003 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5004004 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5004005 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5005000
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5005001 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5005002 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5005003 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5005004 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5006000
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5006001
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5007001
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5007002
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5007003
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5008000
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5008001
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5008008
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5008009
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5009000
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5009002
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5009003
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5009004
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5009005
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5010000
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5010001
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5011000
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5011002
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5011004
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5013002
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5013004
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5013005
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5013006
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5013007
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5013008
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5013009
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5013010
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5015001
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5015002
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5015003
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5015004
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5015007
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5015009
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5016000
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5017001
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5017004
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5017005
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5017007
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5017008
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5017009
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5017011
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5019001
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5019002
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5019003
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5019004
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5019005
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5019009
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5021001
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5021002
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5021003 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5021004
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5021005
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5021006
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5021007
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5021008
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5021009
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5021010
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5022000
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5022002 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5022003 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5022004 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5023000
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5023002
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5023008
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5023009
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5024000
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5024001 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5024002 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5024003 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5024004 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025000 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025001 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025002 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025003 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025004 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025005 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025006 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025007 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025008 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025009 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025010 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025011 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025012 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5026000 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5026001 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5026002 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5026003 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027000 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027001 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027002 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027003 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027004 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027005 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027006 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027007 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027008 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027009 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027010 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027011 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5028000 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5028001 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5029000 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5029001 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5029002 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5029003 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5029004 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5029005 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5029006 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5029007 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5029008 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5029009 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5029010 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5030000 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5031001 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5031002 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5031003 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5031004 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5031005 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5031006 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5031007 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5031008 [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/t/01_test.t [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/t/HvNAME.t
gnu/usr.bin/perl/dist/Devel-PPPort/t/MY_CXT.t
gnu/usr.bin/perl/dist/Devel-PPPort/t/SvPV.t
gnu/usr.bin/perl/dist/Devel-PPPort/t/SvREFCNT.t
gnu/usr.bin/perl/dist/Devel-PPPort/t/Sv_set.t
gnu/usr.bin/perl/dist/Devel-PPPort/t/call.t
gnu/usr.bin/perl/dist/Devel-PPPort/t/cop.t
gnu/usr.bin/perl/dist/Devel-PPPort/t/exception.t
gnu/usr.bin/perl/dist/Devel-PPPort/t/format.t
gnu/usr.bin/perl/dist/Devel-PPPort/t/grok.t
gnu/usr.bin/perl/dist/Devel-PPPort/t/gv.t
gnu/usr.bin/perl/dist/Devel-PPPort/t/limits.t
gnu/usr.bin/perl/dist/Devel-PPPort/t/locale.t [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/t/mPUSH.t
gnu/usr.bin/perl/dist/Devel-PPPort/t/magic.t
gnu/usr.bin/perl/dist/Devel-PPPort/t/memory.t
gnu/usr.bin/perl/dist/Devel-PPPort/t/mess.t
gnu/usr.bin/perl/dist/Devel-PPPort/t/misc.t
gnu/usr.bin/perl/dist/Devel-PPPort/t/newCONSTSUB.t
gnu/usr.bin/perl/dist/Devel-PPPort/t/newRV.t
gnu/usr.bin/perl/dist/Devel-PPPort/t/newSV_type.t
gnu/usr.bin/perl/dist/Devel-PPPort/t/newSVpv.t
gnu/usr.bin/perl/dist/Devel-PPPort/t/podtest.t
gnu/usr.bin/perl/dist/Devel-PPPort/t/ppphtest.t
gnu/usr.bin/perl/dist/Devel-PPPort/t/pv_tools.t
gnu/usr.bin/perl/dist/Devel-PPPort/t/pvs.t
gnu/usr.bin/perl/dist/Devel-PPPort/t/shared_pv.t
gnu/usr.bin/perl/dist/Devel-PPPort/t/snprintf.t
gnu/usr.bin/perl/dist/Devel-PPPort/t/sprintf.t
gnu/usr.bin/perl/dist/Devel-PPPort/t/strlfuncs.t
gnu/usr.bin/perl/dist/Devel-PPPort/t/sv_xpvf.t
gnu/usr.bin/perl/dist/Devel-PPPort/t/testutil.pl
gnu/usr.bin/perl/dist/Devel-PPPort/t/threads.t
gnu/usr.bin/perl/dist/Devel-PPPort/t/utf8.t [new file with mode: 0644]
gnu/usr.bin/perl/dist/Devel-PPPort/t/uv.t
gnu/usr.bin/perl/dist/Devel-PPPort/t/variables.t
gnu/usr.bin/perl/dist/Devel-PPPort/t/warn.t
gnu/usr.bin/perl/dist/Dumpvalue/t/extend-coverage.t [new file with mode: 0644]
gnu/usr.bin/perl/dist/Dumpvalue/t/lib/TieOut.pm [new file with mode: 0644]
gnu/usr.bin/perl/dist/Dumpvalue/t/rt-134441-dumpvalue.t [new file with mode: 0644]
gnu/usr.bin/perl/dist/Exporter/lib/Exporter/Heavy.pm
gnu/usr.bin/perl/dist/Exporter/t/Exporter.t
gnu/usr.bin/perl/dist/Filter-Simple/t/filter_only.t
gnu/usr.bin/perl/dist/Filter-Simple/t/lib/Filter/Simple/ExeNoComments.pm [new file with mode: 0644]
gnu/usr.bin/perl/dist/FindBin/lib/FindBin.pm [new file with mode: 0644]
gnu/usr.bin/perl/dist/FindBin/t/FindBin.t [new file with mode: 0644]
gnu/usr.bin/perl/dist/IO/ChangeLog
gnu/usr.bin/perl/dist/IO/Makefile.PL
gnu/usr.bin/perl/dist/IO/README
gnu/usr.bin/perl/dist/IO/t/cachepropagate-tcp.t
gnu/usr.bin/perl/dist/IO/t/gh17447.t [new file with mode: 0644]
gnu/usr.bin/perl/dist/IO/t/io_getline.t [new file with mode: 0644]
gnu/usr.bin/perl/dist/IO/t/io_udp.t
gnu/usr.bin/perl/dist/IO/t/io_unix.t
gnu/usr.bin/perl/dist/Locale-Maketext/lib/Locale/Maketext.pod
gnu/usr.bin/perl/dist/Locale-Maketext/lib/Locale/Maketext/Cookbook.pod
gnu/usr.bin/perl/dist/Locale-Maketext/lib/Locale/Maketext/TPJ13.pod
gnu/usr.bin/perl/dist/Net-Ping/Changes
gnu/usr.bin/perl/dist/Net-Ping/t/001_new.t
gnu/usr.bin/perl/dist/Net-Ping/t/010_pingecho.t
gnu/usr.bin/perl/dist/Net-Ping/t/250_ping_hires.t
gnu/usr.bin/perl/dist/Net-Ping/t/300_ping_stream.t
gnu/usr.bin/perl/dist/Net-Ping/t/510_ping_udp.t
gnu/usr.bin/perl/dist/Storable/MANIFEST
gnu/usr.bin/perl/dist/Storable/t/huge.t
gnu/usr.bin/perl/dist/Storable/t/regexp.t
gnu/usr.bin/perl/dist/Storable/t/weak.t
gnu/usr.bin/perl/dist/Tie-File/ChangeLog [new file with mode: 0644]
gnu/usr.bin/perl/dist/Tie-File/t/01_gen.t
gnu/usr.bin/perl/dist/Tie-File/t/02_fetchsize.t
gnu/usr.bin/perl/dist/Tie-File/t/03_longfetch.t
gnu/usr.bin/perl/dist/Tie-File/t/04_splice.t
gnu/usr.bin/perl/dist/Tie-File/t/05_size.t
gnu/usr.bin/perl/dist/Tie-File/t/06_fixrec.t
gnu/usr.bin/perl/dist/Tie-File/t/07_rv_splice.t
gnu/usr.bin/perl/dist/Tie-File/t/08_ro.t
gnu/usr.bin/perl/dist/Tie-File/t/09_gen_rs.t
gnu/usr.bin/perl/dist/Tie-File/t/10_splice_rs.t
gnu/usr.bin/perl/dist/Tie-File/t/11_rv_splice_rs.t
gnu/usr.bin/perl/dist/Tie-File/t/12_longfetch_rs.t
gnu/usr.bin/perl/dist/Tie-File/t/13_size_rs.t
gnu/usr.bin/perl/dist/Tie-File/t/14_lock.t
gnu/usr.bin/perl/dist/Tie-File/t/15_pushpop.t
gnu/usr.bin/perl/dist/Tie-File/t/16_handle.t
gnu/usr.bin/perl/dist/Tie-File/t/17_misc_meth.t
gnu/usr.bin/perl/dist/Tie-File/t/18_rs_fixrec.t
gnu/usr.bin/perl/dist/Tie-File/t/19_cache.t
gnu/usr.bin/perl/dist/Tie-File/t/20_cache_full.t
gnu/usr.bin/perl/dist/Tie-File/t/21_win32.t
gnu/usr.bin/perl/dist/Tie-File/t/22_autochomp.t
gnu/usr.bin/perl/dist/Tie-File/t/23_rv_ac_splice.t
gnu/usr.bin/perl/dist/Tie-File/t/24_cache_loop.t
gnu/usr.bin/perl/dist/Tie-File/t/25_gen_nocache.t
gnu/usr.bin/perl/dist/Tie-File/t/26_twrite.t
gnu/usr.bin/perl/dist/Tie-File/t/27_iwrite.t
gnu/usr.bin/perl/dist/Tie-File/t/28_mtwrite.t
gnu/usr.bin/perl/dist/Tie-File/t/29_downcopy.t
gnu/usr.bin/perl/dist/Tie-File/t/29a_upcopy.t
gnu/usr.bin/perl/dist/Tie-File/t/30_defer.t
gnu/usr.bin/perl/dist/Tie-File/t/31_autodefer.t
gnu/usr.bin/perl/dist/Tie-File/t/32_defer_misc.t
gnu/usr.bin/perl/dist/Tie-File/t/33_defer_vs.t
gnu/usr.bin/perl/dist/Tie-File/t/40_abs_cache.t
gnu/usr.bin/perl/dist/Tie-File/t/41_heap.t
gnu/usr.bin/perl/dist/Tie-File/t/42_offset.t
gnu/usr.bin/perl/dist/Tie-File/t/43_synopsis.t [new file with mode: 0644]
gnu/usr.bin/perl/dist/Unicode-Normalize/Normalize.pm
gnu/usr.bin/perl/ext/B/t/optree_constants.t
gnu/usr.bin/perl/ext/B/t/perlstring.t [new file with mode: 0644]
gnu/usr.bin/perl/ext/B/t/walkoptree.t
gnu/usr.bin/perl/ext/File-Glob/t/basic.t
gnu/usr.bin/perl/ext/IPC-Open3/lib/IPC/Open2.pm
gnu/usr.bin/perl/ext/POSIX/t/mb.t
gnu/usr.bin/perl/ext/POSIX/t/sigset.t
gnu/usr.bin/perl/ext/Pod-Html/t/feature2.t
gnu/usr.bin/perl/ext/Sys-Hostname/t/Hostname.t
gnu/usr.bin/perl/ext/Tie-Hash-NamedCapture/NamedCapture.pm
gnu/usr.bin/perl/ext/Tie-Hash-NamedCapture/t/tiehash.t
gnu/usr.bin/perl/ext/VMS-Stdio/Stdio.pm
gnu/usr.bin/perl/ext/VMS-Stdio/Stdio.xs
gnu/usr.bin/perl/ext/XS-APItest/t/handy_base.pl
gnu/usr.bin/perl/ext/XS-APItest/t/hv_macro.t [new file with mode: 0644]
gnu/usr.bin/perl/ext/XS-APItest/t/subsignature.t [new file with mode: 0644]
gnu/usr.bin/perl/ext/XS-APItest/t/svpv.t
gnu/usr.bin/perl/ext/XS-APItest/t/utf16_to_utf8.t
gnu/usr.bin/perl/ext/XS-APItest/t/utf8_warn_base.pl
gnu/usr.bin/perl/hints/dragonfly.sh
gnu/usr.bin/perl/hv_macro.h
gnu/usr.bin/perl/lib/PerlIO.pm
gnu/usr.bin/perl/lib/Thread.pm
gnu/usr.bin/perl/lib/Tie/Handle/stdhandle.t
gnu/usr.bin/perl/lib/Tie/StdHandle.pm
gnu/usr.bin/perl/lib/open.pm
gnu/usr.bin/perl/lib/perl5db/t/gh-17660 [new file with mode: 0644]
gnu/usr.bin/perl/lib/perlbug.t
gnu/usr.bin/perl/lib/unicore/EquivalentUnifiedIdeograph.txt
gnu/usr.bin/perl/lib/unicore/IdStatus.txt [new file with mode: 0644]
gnu/usr.bin/perl/lib/unicore/IdType.txt [new file with mode: 0644]
gnu/usr.bin/perl/lib/unicore/VerticalOrientation.txt
gnu/usr.bin/perl/lib/unicore/emoji/emoji.txt [new file with mode: 0644]
gnu/usr.bin/perl/lib/unicore/uni_keywords.pl
gnu/usr.bin/perl/pod/perl5121delta.pod
gnu/usr.bin/perl/pod/perl5260delta.pod
gnu/usr.bin/perl/pod/perl5283delta.pod [new file with mode: 0644]
gnu/usr.bin/perl/pod/perl5303delta.pod [new file with mode: 0644]
gnu/usr.bin/perl/pod/perl5320delta.pod [new file with mode: 0644]
gnu/usr.bin/perl/pod/perldeprecation.pod
gnu/usr.bin/perl/pod/perlgov.pod [new file with mode: 0644]
gnu/usr.bin/perl/pod/perlopentut.pod
gnu/usr.bin/perl/pod/perlreguts.pod
gnu/usr.bin/perl/pod/perlsecpolicy.pod [new file with mode: 0644]
gnu/usr.bin/perl/reentr.h
gnu/usr.bin/perl/regen/mph.pl
gnu/usr.bin/perl/stadtx_hash.h
gnu/usr.bin/perl/t/benchmark/gh7094-speed-up-keys-on-empty-hash.t [new file with mode: 0644]
gnu/usr.bin/perl/t/comp/parser_run.t
gnu/usr.bin/perl/t/io/data.t
gnu/usr.bin/perl/t/io/eintr_print.t
gnu/usr.bin/perl/t/io/openpid.t
gnu/usr.bin/perl/t/io/perlio_open.t
gnu/usr.bin/perl/t/lib/CannotParse.pm [new file with mode: 0644]
gnu/usr.bin/perl/t/lib/croak/pp_ctl
gnu/usr.bin/perl/t/lib/croak/regcomp
gnu/usr.bin/perl/t/lib/feature/bits [new file with mode: 0644]
gnu/usr.bin/perl/t/lib/feature/indirect [new file with mode: 0644]
gnu/usr.bin/perl/t/lib/warnings/gv
gnu/usr.bin/perl/t/op/caller.pl
gnu/usr.bin/perl/t/op/cmpchain.t [new file with mode: 0644]
gnu/usr.bin/perl/t/op/isa.t [new file with mode: 0644]
gnu/usr.bin/perl/t/op/lfs.t
gnu/usr.bin/perl/t/op/signame_canonical.t [new file with mode: 0644]
gnu/usr.bin/perl/t/op/tr_latin1.t
gnu/usr.bin/perl/t/porting/authors.t
gnu/usr.bin/perl/t/porting/extrefs.t
gnu/usr.bin/perl/t/porting/test_bootstrap.t
gnu/usr.bin/perl/t/re/anyof.t
gnu/usr.bin/perl/t/re/begin-once.t [new file with mode: 0644]
gnu/usr.bin/perl/t/re/regexp_nonull.t
gnu/usr.bin/perl/t/re/uniprops01.t
gnu/usr.bin/perl/t/re/uniprops02.t
gnu/usr.bin/perl/t/re/uniprops03.t
gnu/usr.bin/perl/t/re/uniprops04.t
gnu/usr.bin/perl/t/re/uniprops05.t
gnu/usr.bin/perl/t/re/uniprops06.t
gnu/usr.bin/perl/t/re/uniprops07.t
gnu/usr.bin/perl/t/re/uniprops08.t
gnu/usr.bin/perl/t/re/uniprops09.t
gnu/usr.bin/perl/t/re/uniprops10.t
gnu/usr.bin/perl/uni_keywords.h
gnu/usr.bin/perl/utils/streamzip.PL [new file with mode: 0644]
gnu/usr.bin/perl/win32/include/sys/errno2.h
gnu/usr.bin/perl/zaphod32_hash.h

index 8aebd2b..9115d30 100644 (file)
@@ -3,11 +3,9 @@ cache: ccache
 
 os:
   - linux
-  - osx
 
 compiler:
   - gcc
-  - clang
 
 install:
   - git fetch --unshallow --tags # t/porting/cmp_version.t
@@ -19,20 +17,19 @@ env:
     global:
         - JOBS=4
     matrix:
+        # exercise a variety of build options
+        # threads often cause build issues
         - CONFIGURE_ARGS='-Uusethreads'
         - CONFIGURE_ARGS='-Dusethreads'
-        - CONFIGURE_ARGS='-DPERL_GLOBAL_STRUCT'
+        # it's easy to miss dVAR
         - CONFIGURE_ARGS='-DPERL_GLOBAL_STRUCT_PRIVATE'
-        - CONFIGURE_ARGS='-Duseshrplib -Dusesitecustomize'
-        - CONFIGURE_ARGS='-Duserelocatableinc'
+        # test scripts can be sensitive to PERL_UNICODE, and check long doubles
+        - CONFIGURE_ARGS='-Duseshrplib -Dusesitecustomize -Duselongdouble' PERL_UNICODE='' LANG='en_US.UTF-8'
+        # we've rarely had a problem with non-Englush locales, and exercise quadmath
+        - CONFIGURE_ARGS='-Duseshrplib -Dusequadmath -Dusecbacktrace -Dusethreads' PERL_UNICODE='' LANG='de_DE.UTF-8'
 
-# only use gcc on linux, and only use clang on osx for now
 matrix:
-  exclude:
-  - compiler: clang
-    os: linux
-  - compiler: gcc
-    os: osx
+  fast_finish: true
 
 script:
   - ./Configure -des -Dusedevel -Uversiononly -Dcc="ccache $CC" $CONFIGURE_ARGS -Dprefix=$HOME/perl-blead -DDEBUGGING
@@ -68,7 +65,7 @@ notifications:
       - "Report for %{repository} (%{commit}) from %{author} (%{elapsed_time})"
       - "Status: %{message}"
       - "Build URL: %{build_url}"
-      - "GitHub URL: https://github.com/p5h/perl5demo/commit/%{commit}" # adjust this url to use the production repo
+      - "GitHub URL: https://github.com/%{repository_slug}/commit/%{commit}"
     on_success: change # default: always
     on_failure: always # default: always
 #    use_notice: true
index bcfa3b3..b520001 100644 (file)
@@ -9,9 +9,7 @@ README.new - Cross-compilation for linux
 =head1 DESCRIPTION
 
 This is second approach to linux cross-compilation, which should allow
-building full perl and extensions for target platform. Cross-compilation
-for linux uses similar approach and shares the same files as
-cross-compilation for WinCE.
+building full perl and extensions for target platform.
 
 We refer to HOST as the platform where the build is performed, and to
 TARGET as where final executables will run.
@@ -20,7 +18,7 @@ TARGET as where final executables will run.
 
 =head3 common
 
-Unlike WinCE, output files from GCC cross-compiler are produced in the same
+Output files from GCC cross-compiler are produced in the same
 directory where C files are. All TARGET binaries have different extensions
 so to distinguish HOST and TARGET binaries. Namely, object files for C<arm>
 cross-compilation will have extension C<.armo>, executable files will have
index 531b308..46642a4 100644 (file)
@@ -57,7 +57,7 @@ In this code, wherever there is a  FILE *, the error condition is checked; and o
 then the corresponding operation is done. Otherwise the error value is returned.
 This is done because the file operations like "open" in the Perl code returns the FILE *,
 returning a valid value if the file is found or NULL when the particular file is not found.
-Now, if the return value is NULL, then an operation say "fgets", "fopen" etc. using this this NULL value
+Now, if the return value is NULL, then an operation say "fgets", "fopen" etc. using this NULL value
 for FILE * will abend the server. If the check is made then an operation on a non existing file
 does not abend the server.
 **/
index 0e83775..c29f336 100644 (file)
@@ -2,7 +2,7 @@ The y2038 implementation for perl
 ===========================================================================
 This is an implementation of POSIX time.h which solves the year 2038 bug on
 systems where time_t is only 32 bits.  It is implemented in bog-standard
-ANSI C.  The latest version can be found at http://y2038.googlecode.com/
+ANSI C.  The latest version can be found at https://github.com/evalEmpire/y2038
 
 It makes use of the system's native 32 bit functions to perform time zone
 and daylight savings time calculations and thus does *not* need to ship its
index 4003410..3b2d1b3 100644 (file)
@@ -48,11 +48,11 @@ $SIG{INT} = sub { die }; # Trigger END processing
     close $out or die "Can't close $mpm: $!";
 }
 
-my @args = (platform => [map {"PLATFORM=$_"} qw(aix win32 wince os2 netware vms test)],
+my @args = (platform => [map {"PLATFORM=$_"} qw(aix win32 os2 netware vms test)],
            cflags => ['', 'CCFLAGS=-Dperl=rules -Dzzz'],
            Deq => ['', '-Dbeer=foamy'],
            D => ['', '-DPERL_IMPLICIT_SYS'],
-           cctype => ['', map {"CCTYPE=$_"} qw (MSVC60 GCC)],
+           cctype => ['', 'CCTYPE=GCC'],
            filetype => ['', 'FILETYPE=def', 'FILETYPE=imp'],
            targ_dir => ['', 'TARG_DIR=t/../'],
           );
index b544a12..47bb2df 100644 (file)
@@ -19,8 +19,12 @@ find {
     wanted => sub {
         my $x = $File::Find::name; $x =~ s/^..//;
         return if -d;
+        return if $_ eq '.mailmap';
         return if $_ eq '.gitignore';
+        return if $_ eq '.gitattributes';
+        return if $_ eq '.git_patch';
         return if $x =~ /^\.git\b/;
+        return if $x =~ m{^\.github/};
         print "$x\t\tnot in MANIFEST\n" if !$files{$x};
     },
 }, ".";
diff --git a/gnu/usr.bin/perl/Porting/security_template.pod b/gnu/usr.bin/perl/Porting/security_template.pod
new file mode 100644 (file)
index 0000000..6233427
--- /dev/null
@@ -0,0 +1,83 @@
+=begin editor
+
+Delete this begin/end block before publication.
+
+Not every heading below is appropriate for every security issue, so
+some may be deleted.
+
+Look for FIXME to see what needs to be filled in.
+
+=end editor
+
+=encoding utf8
+
+=head1 NAME
+
+FIXME - short description of the security issue, with an identifier of the issue as the manpage name
+
+=head1 DESCRIPTION
+
+=for editor
+Ideally, FIXME here should be the CVE-ID as a link to cve.mitre.org
+
+This document describes the
+L<FIXME|http://cve.mitre.org/cgi-bin/cvename.cgi?name=FIXME>
+security vulnerability for perl 5.
+
+=head2 Are there any known exploits "in the wild" for this vulnerability
+
+FIXME or delete
+
+=head2 Who is particularly vulnerable because of this issue?
+
+FIXME or delete
+
+=head2 What is the nature of the vulnerability?
+
+FIXME
+
+=head2 What potential exploits are enabled by this vulnerability?
+
+FIXME or delete
+
+=head2 Which major versions of perl 5 are affected?
+
+FIXME with a list of versions that are affected, and which were updated.
+
+=head2 How can users protect themselves?
+
+FIXME or use the following:
+
+If you are vulnerable, upgrade to the latest maintenance release for the
+version of perl you are using.
+
+If your release of perl is no longer supported by the perl 5 committers you
+may need to upgrade to a new major release of perl. The versions currently
+supported by the perl 5 committers are
+FIXME 5.28.2 (until 2020-05-31)
+and
+FIXME 5.30.1 (until 2021-05-31).
+The current version of perl is available from https://www.perl.org/get.html .
+
+=head2 Who was given access to the information about the vulnerability?
+
+FIXME or use the following:
+
+Specifics about the vulnerability were first disclosed to
+C<perl-security>, a closed subscriber mailing list that has a
+subset of the perl committers subcribed to it.
+
+=head2 When was the vulnerability discovered?
+
+FIXME
+
+=head2 Who discovered the vulnerability?
+
+FIXME
+
+=head2 How was the vulnerability reported?
+
+FIXME: something like "So-and-so sent email to
+perl-security@perl.org"
+
+=cut
index 04eb4de..d14d406 100644 (file)
@@ -57,7 +57,7 @@ Perl 也内附了 "piconv", 一支完全以 Perl 写成的字符转换工具程
 
 =head2 额外的中文编码
 
-如果需要更多的中文编码, 可以从 CPAN (L<http://www.cpan.org/>) 下载
+如果需要更多的中文编码, 可以从 CPAN (L<https://www.cpan.org/>) 下载
 Encode::HanExtra 模块. 它目前提供下列编码方式:
 
     gb18030    扩充过的国标码, 包含繁体中文
@@ -83,15 +83,23 @@ Perl 的知识, 以及 Unicode 的使用方式. 不过, 外部的资源相当丰
 
 =over 4
 
-=item L<http://www.perl.com/>
+=item L<https://www.perl.org/>
 
-Perl 的首页 (由欧莱礼公司维护)
+=back
+
+Perl 的首页
+
+=over 4
+
+=item L<https://www.perl.com/>
+
+由 Perl 基金会所营运的文章辑录
 
-=item L<http://www.cpan.org/>
+=item L<https://www.cpan.org/>
 
 Perl 综合典藏网 (Comprehensive Perl Archive Network)
 
-=item L<http://lists.perl.org/>
+=item L<https://lists.perl.org/>
 
 Perl 邮递论坛一览
 
@@ -111,7 +119,7 @@ Perl 邮递论坛一览
 
 =over 4
 
-=item L<http://www.pm.org/groups/asia.html>
+=item L<https://www.pm.org/groups/asia.html>
 
 中国 Perl 推广组一览
 
@@ -121,11 +129,11 @@ Perl 邮递论坛一览
 
 =over 4
 
-=item L<http://www.unicode.org/>
+=item L<https://www.unicode.org/>
 
 Unicode 学术学会 (Unicode 标准的制定者)
 
-=item L<http://www.cl.cam.ac.uk/%7Emgk25/unicode.html>
+=item L<https://www.cl.cam.ac.uk/%7Emgk25/unicode.html>
 
 Unix/Linux 上的 UTF-8 及 Unicode 答客问
 
index ac79078..f2ac9a9 100644 (file)
@@ -55,21 +55,23 @@ Perl 自身は Unicode で動作します。Perl スクリプト内の文字列
    piconv -f FOO -t utf8 < file.FOO > file.utf8
    piconv -f utf8 -t FOO < file.utf8 > file.FOO
 
-=head2 About (jcode.pl|Jcode.pm|JPerl)
+=head2 (jcode.pl|Jcode.pm|JPerl) からの移行
 
 5.8以前の、スクリプトがEUC-JPであればリテラルだけは扱うことができました。また、入出力を扱うモジュールとしてはJcode.pmが( L<http://openlab.ring.gr.jp/Jcode/> )、perl4用のユーティリティとしてはjcode.plがそれぞれ存在し、日本語の扱えるCGIでよく利用されていることを御存じの方も少なくないかと思われます。ただし、日本語による正規表現をうまく扱うことは不可能でした。
 
-5.005以前のPerlには、日本語に特化したローカライズ版、Jperlが存在しました( L<http://homepage2.nifty.com/kipp/perl/jperl/index.html> )。また、Mac OS 9.x/Classic用のPerl、MacPerlの日本語版もMacJPerlとして存在してました。( L<http://habilis.net/macjperl/> ).これらでは文字コードとしてEUC-JPに加えShift_JISもそのまま扱うことができ、また日本語による正規表現を扱うことも可能でした。
+5.005以前のPerlには、日本語に特化したローカライズ版、Jperlが存在しました( L<http://homepage2.nifty.com/kipp/perl/jperl/index.html> ※1)。また、Mac OS 9.x/Classic用のPerl、MacPerlの日本語版もMacJPerlとして存在してました。( L<https://habilis.net/macjperl/> ).これらでは文字コードとしてEUC-JPに加えShift_JISもそのまま扱うことができ、また日本語による正規表現を扱うことも可能でした。
 
 Perl5.8では、これらの機能がすべてPerl本体だけで実現できる上に、日本語のみならず上記114の文字コードをすべて、しかも同時に扱うことができます。さらに、CPANなどから新しい文字コード用のモジュールを入手することも簡単にできるようになっています。
 
+※1: ホスティングサービスの終了により現在は閲覧できません。 Vector( L<https://www.vector.co.jp/soft/win95/util/se098198.html> )からWindow用のバイナリを、CPAN( L<https://www.cpan.org/src/unsupported/4.036/jperl/> )からperl4用のパッチを入手することができます。
+
 =over 4
 
 =item *
 
 入出力
 
-以ä¸\8bã\81®ä¾\8bã\81¯ã\81\84ã\81¥れもShift_JISの入力をEUC-JPに変換して出力します。
+以ä¸\8bã\81®ä¾\8bã\81¯ã\81\84ã\81\9aれもShift_JISの入力をEUC-JPに変換して出力します。
 
   # jcode.pl
   require "jcode.pl";
@@ -120,18 +122,30 @@ Perlには膨大な資料が付属しており、Perlの新機能やUnicodeサ
 
 =over 4
 
-=item L<http://www.perl.com/>
+=item L<https://www.perl.org/>
+
+Perl ホームページ
 
-Perl ホームページ (O'Reilly and Associates)
+=item L<https://www.perl.com/>
 
-=item L<http://www.cpan.org/>
+Perl 財団が営業する文章作品集
+
+=item L<https://www.cpan.org/>
 
 CPAN (Comprehensive Perl Archive Network)
 
-=item L<http://lists.perl.org/>
+=item L<https://metacpan.org/>
+
+MetaCPAN CPANの検索エンジン
+
+=item L<https://lists.perl.org/>
 
 Perl メーリングリスト集
 
+=item L<https://perldoc.jp/>
+
+perldoc.jp Perl の公式ドキュメント、モジュールドキュメントの日本語訳
+
 =back
 
 =head2 Perlの修得に役立つ URL
@@ -146,17 +160,23 @@ O'Reilly 社のPerl関連書籍(繁体字中国語)
 
 O'Reilly 社のPerl関連書籍(簡体字中国語)
 
-=item L<http://www.oreilly.co.jp/catalog/>
+=item L<https://www.oreilly.co.jp/catalog/>
 
 オライリー社のPerl関連書籍(日本語)
 
 =back
 
-=head2 Perl ã\83¦ã\83¼ã\82¶ã\83¼ã\82°ã\83«ã\83¼ã\83\97
+=head2 Perl ã\81«é\96¢ã\81\99ã\82\8bå\9b£ä½\93
 
 =over 4
 
-=item L<http://www.pm.org/groups/asia.html>
+=item L<https://www.pm.org/groups/asia.html>
+
+アジア地域の Perl Mongers (Perlのユーザーグループ) 一覧
+
+=item L<https://japan.perlassociation.org>
+
+一般社団法人Japan Perl Association (JPA) Perl技術及び文化の啓蒙・促進のための組織
 
 =back
 
@@ -164,15 +184,15 @@ O'Reilly 社のPerl関連書籍(簡体字中国語)
 
 =over 4
 
-=item L<http://www.unicode.org/>
+=item L<https://www.unicode.org/>
 
 Unicode コンソーシアム (Unicode規格の選定団体)
 
-=item L<http://www.cl.cam.ac.uk/%7Emgk25/unicode.html>
+=item L<https://www.cl.cam.ac.uk/%7Emgk25/unicode.html>
 
 UTF-8 and Unicode FAQ for Unix/Linux
 
-=item L<http://wiki.kldp.org/Translations/html/UTF8-Unicode-KLDP/UTF8-Unicode-KLDP.html>
+=item L<https://wiki.kldp.org/Translations/html/UTF8-Unicode-KLDP/UTF8-Unicode-KLDP.html>
 
 UTF-8 and Unicode FAQ for Unix/Linux (ハングル訳)
 
@@ -180,7 +200,14 @@ UTF-8 and Unicode FAQ for Unix/Linux (ハングル訳)
 
 =head1 AUTHORS
 
-Jarkko Hietaniemi E<lt>jhi@iki.fiE<gt>
-Dan Kogai (小飼 弾) E<lt>dankogai@dan.co.jpE<gt>
+=over
+
+=item * Jarkko Hietaniemi E<lt>jhi@iki.fiE<gt>
+
+=item * Dan Kogai (小飼 弾) E<lt>dankogai@dan.co.jpE<gt>
+
+=item * Shogo Ichinose (一野瀬 翔吾) E<lt>shogo82148@gmail.comE<gt>
+
+=back
 
 =cut
index daedf0f..123fc97 100644 (file)
@@ -218,16 +218,16 @@ Perl은 기본적으로 내부에서 UTF-8을 사용하며 Encode 모듈을 통
 
 =item * L<encoding>
 
-=item * L<http://www.unicode.org/>
+=item * L<https://www.unicode.org/>
 
 유니코드 컨소시엄
 
-=item * L<http://std.dkuug.dk/JTC1/SC2/WG2>
+=item * L<https://std.dkuug.dk/JTC1/SC2/WG2>
 
 기본적으로 Unicode와 같은 ISO 표준인  ISO/IEC 10646 UCS(Universal
 Character Set)을 만드는 ISO/IEC JTC1/SC2/WG2의 웹 페이지
 
-=item * L<http://www.cl.cam.ac.uk/~mgk25/unicode.html>
+=item * L<https://www.cl.cam.ac.uk/~mgk25/unicode.html>
 
 유닉스/리눅스 사용자를 위한 UTF-8 및 유니코드 관련 FAQ
 
@@ -244,35 +244,35 @@ Character Set)을 만드는 ISO/IEC JTC1/SC2/WG2의 웹 페이지
 
 =over 4
 
-=item * L<http://www.perl.org/>
+=item * L<https://www.perl.org/>
 
 Perl 공식 홈페이지
 
-=item * L<http://www.perl.com/>
+=item * L<https://www.perl.com/>
 
 O'Reilly의 Perl 웹 페이지
 
-=item * L<http://www.cpan.org/>
+=item * L<https://www.cpan.org/>
 
 CPAN - Comprehensive Perl Archive Network, 통합적 Perl 파일 보관 네트워크
 
-=item * L<http://metacpan.org>
+=item * L<https://metacpan.org>
 
 메타 CPAN
 
-=item * L<http://lists.perl.org/>
+=item * L<https://lists.perl.org/>
 
 Perl 메일링 리스트
 
-=item * L<http://blogs.perl.org/>
+=item * L<https://blogs.perl.org/>
 
 Perl 메타 블로그
 
-=item * L<http://www.perlmonks.org/>
+=item * L<https://www.perlmonks.org/>
 
 Perl 수도승들을 위한 수도원
 
-=item * L<http://www.pm.org/groups/asia.html>
+=item * L<https://www.pm.org/groups/asia.html>
 
 아시아 지역 Perl 몽거스 모임
 
@@ -287,15 +287,15 @@ Perl 크리스마스 달력
 
 =over 4
 
-=item * L<http://perl.kr/>
+=item * L<https://perl.kr/>
 
 한국 Perl 커뮤니티 공식 포털
 
-=item * L<http://doc.perl.kr/>
+=item * L<https://doc.perl.kr/>
 
 Perl 문서 한글화 프로젝트
 
-=item * L<http://cafe.naver.com/perlstudy.cafe>
+=item * L<https://cafe.naver.com/perlstudy.cafe>
 
 네이버 Perl 카페
 
@@ -303,7 +303,7 @@ Perl 문서 한글화 프로젝트
 
 한국 Perl 사용자 모임
 
-=item * L<http://advent.perl.kr>
+=item * L<https://advent.perl.kr>
 
 Seoul.pm Perl 크리스마스 달력 (2010 ~ 2012)
 
@@ -311,10 +311,6 @@ Seoul.pm Perl 크리스마스 달력 (2010 ~ 2012)
 
 GYPARK(Geunyoung Park)의 Perl 관련 한글 문서 저장소
 
-=item * L<http://seoul.pm.org>
-
-Seoul.pm - 서울 Perl 몽거스
-
 =back
 
 
index 3482800..fdafa90 100644 (file)
@@ -18,7 +18,7 @@ Mac OS X.
 
 =head1 DESCRIPTION
 
-The port of Perl to to Mac OS was officially removed as of Perl 5.12,
+The port of Perl to Mac OS was officially removed as of Perl 5.12,
 though the last official production release of MacPerl corresponded to 
 Perl 5.6. While Perl 5.10 included the port to Mac OS, ExtUtils::MakeMaker,
 a core part of Perl's module installation infrastructure officially dropped support for Mac OS in April 2004.
index f5588a8..05220aa 100644 (file)
@@ -50,7 +50,7 @@ Perl 也內附了 "piconv", 一支完全以 Perl 寫成的字符轉換工具程
 
 =head2 額外的中文編碼
 
-如果需要更多的中文編碼, 可以從 CPAN (L<http://www.cpan.org/>) 下載
+如果需要更多的中文編碼, 可以從 CPAN (L<https://www.cpan.org/>) 下載
 Encode::HanExtra 模組. 它目前提供下列編碼方式:
 
     cccii      1980 年文建會的中文資訊交換碼
@@ -79,15 +79,19 @@ Perl 的知識, 以及 Unicode 的使用方式. 不過, 外部的資源相當豐
 
 =over 4
 
-=item L<http://www.perl.com/>
+=item L<https://www.perl.org/>
 
-Perl 的首頁 (由歐萊禮公司維護)
+Perl 的首頁
 
-=item L<http://www.cpan.org/>
+=item L<https://www.perl.com/>
+
+由 Perl 基金會所營運的文章輯錄
+
+=item L<https://www.cpan.org/>
 
 Perl 綜合典藏網 (Comprehensive Perl Archive Network)
 
-=item L<http://lists.perl.org/>
+=item L<https://lists.perl.org/>
 
 Perl 郵遞論壇一覽
 
@@ -107,7 +111,7 @@ Perl 郵遞論壇一覽
 
 =over 4
 
-=item L<http://www.pm.org/groups/taiwan.html>
+=item L<https://www.pm.org/groups/taiwan.html>
 
 臺灣 Perl 推廣組一覽
 
@@ -121,7 +125,7 @@ Perl.tw 線上聊天室
 
 =over 4
 
-=item L<http://www.unicode.org/>
+=item L<https://www.unicode.org/>
 
 Unicode 學術學會 (Unicode 標準的制定者)
 
@@ -139,10 +143,6 @@ Unix/Linux 上的 UTF-8 及 Unicode 答客問
 
 L<http://www.cpatch.org/>
 
-=item Linux 軟體中文化計劃
-
-L<http://www.linux.org.tw/CLDP/>
-
 =back
 
 =head1 SEE ALSO
diff --git a/gnu/usr.bin/perl/SECURITY.md b/gnu/usr.bin/perl/SECURITY.md
new file mode 100644 (file)
index 0000000..6cf9587
--- /dev/null
@@ -0,0 +1,43 @@
+# Security Policy
+
+Perl's vulnerability handling policies are described fully in
+[perlsecpolicy]
+
+## Reporting a Vulnerability
+
+If you believe you have found a security vulnerability in the Perl
+interpreter or modules maintained in the core Perl codebase, email
+the details to perl-security@perl.org. This address is a closed
+membership mailing list monitored by the Perl security team.
+
+You should receive an initial response to your report within 72 hours.
+If you do not receive a response in that time, please contact
+the security team lead [John Lightsey](mailto:john@04755.net) and
+the Perl pumpking [SawyerX](mailto:xsawyerx@cpan.org).
+
+When members of the security team reply to your messages, they will
+generally include the perl-security@perl.org address in the "To" or "CC"
+fields of the response. This allows all of the security team to follow
+the discussion and chime in as needed. Use the "Reply-all" functionality
+of your email client when you send subsequent responses so that the
+entire security team receives the message.
+
+The security team will evaluate your report and make an initial
+determination of whether it is likely to fit the scope of issues the
+team handles. General guidelines about how this is determined are
+detailed in the ["WHAT ARE SECURITY ISSUES"] section of [perlsecpolicy].
+
+If your report meets the team's criteria, an issue will be opened in the
+team's private issue tracker and you will be provided the issue's ID number.
+Issue identifiers have the form perl-security#NNN. Include this identifier
+with any subsequent messages you send.
+
+The security team will send periodic updates about the status of your
+issue and guide you through any further action that is required to complete
+the vulnerability remediation process. The stages vulnerabilities typically
+go through are explained in the ["HOW WE DEAL WITH SECURITY ISSUES"]
+section of [perlsecpolicy].
+
+[perlsecpolicy]: pod/perlsecpolicy.pod
+["WHAT ARE SECURITY ISSUES"]: pod/perlsecpolicy.pod#what-are-security-issues
+["HOW WE DEAL WITH SECURITY ISSUES"]: pod/perlsecpolicy.pod#how-we-deal-with-security-issues
index e0f5685..8050f3c 100644 (file)
 # suffix with =foo for a "tool-specific category", but neither =undefined
 # nor =signed-integer-overflow worked.
 
-fun:Perl_pp_i_*
-
-# Perl's << is defined as using the underlying C's << operator, with the
-# same undefined behaviour for shifts greater than the word size.
-# (UVs normally, IVs with 'use integer')
-
-fun:Perl_pp_left_shift
+fun:Perl_pp_i_add
+fun:Perl_pp_i_divide
+fun:Perl_pp_i_negate
+fun:Perl_pp_i_multiply
+fun:Perl_pp_i_subtract
 
 # this function numifies the field width in eg printf "%10f".
 # It has its own overflow detection, so don't warn about it
index b740594..4006d4e 100755 (executable)
@@ -99,9 +99,11 @@ my $TARX        = $Class->new;
 my $TAR_FILE        = File::Spec->catfile( @ROOT, 'bar.tar' );
 my $TGZ_FILE        = File::Spec->catfile( @ROOT, 'foo.tgz' );
 my $TBZ_FILE        = File::Spec->catfile( @ROOT, 'foo.tbz' );
+my $TXZ_FILE        = File::Spec->catfile( @ROOT, 'foo.txz' );
 my $OUT_TAR_FILE    = File::Spec->catfile( @ROOT, 'out.tar' );
 my $OUT_TGZ_FILE    = File::Spec->catfile( @ROOT, 'out.tgz' );
 my $OUT_TBZ_FILE    = File::Spec->catfile( @ROOT, 'out.tbz' );
+my $OUT_TXZ_FILE    = File::Spec->catfile( @ROOT, 'out.txz' );
 
 my $COMPRESS_FILE = 'copy';
 $^O eq 'VMS' and $COMPRESS_FILE .= '.';
@@ -110,8 +112,8 @@ chmod 0644, $COMPRESS_FILE;
 
 ### done setting up environment ###
 
-### check for zlib/bzip2 support
-{   for my $meth ( qw[has_zlib_support has_bzip2_support] ) {
+### check for zlib/bzip2/xz support
+{   for my $meth ( qw[has_zlib_support has_bzip2_support has_xz_support] ) {
         can_ok( $Class, $meth );
     }
 }
@@ -167,6 +169,7 @@ chmod 0644, $COMPRESS_FILE;
 {   my @to_try = ($TAR_FILE);
     push @to_try, $TGZ_FILE if $Class->has_zlib_support;
     push @to_try, $TBZ_FILE if $Class->has_bzip2_support;
+    push @to_try, $TXZ_FILE if $Class->has_xz_support;
 
     for my $type( @to_try ) {
 
@@ -462,6 +465,7 @@ SKIP: {                             ### pesky warnings
         {   my @out;
             push @out, [ $OUT_TGZ_FILE => 1             ] if $Class->has_zlib_support;
             push @out, [ $OUT_TBZ_FILE => COMPRESS_BZIP ] if $Class->has_bzip2_support;
+            push @out, [ $OUT_TXZ_FILE => COMPRESS_XZ   ] if $Class->has_xz_support;
 
             for my $entry ( @out ) {
 
@@ -786,8 +790,14 @@ sub slurp_compressed_file {
     my $file = shift;
     my $fh;
 
+    ### xz
+    if( $file =~ /.txz$/ ) {
+        require IO::Uncompress::UnXz;
+        $fh = IO::Uncompress::UnXz->new( $file )
+            or warn( "Error opening '$file' with IO::Uncompress::UnXz" ), return
+
     ### bzip2
-    if( $file =~ /.tbz$/ ) {
+    } elsif( $file =~ /.tbz$/ ) {
         require IO::Uncompress::Bunzip2;
         $fh = IO::Uncompress::Bunzip2->new( $file )
             or warn( "Error opening '$file' with IO::Uncompress::Bunzip2" ), return
index 8fb72a8..3e612ef 100644 (file)
@@ -43,6 +43,8 @@ push @file_only_archives, [qw( src short foo.tgz )]
   if Archive::Tar->has_zlib_support;
 push @file_only_archives, [qw( src short foo.tbz )]
   if Archive::Tar->has_bzip2_support;
+push @file_only_archives, [qw( src short foo.txz )]
+  if Archive::Tar->has_xz_support;
 
 @file_only_archives = map File::Spec->catfile(@$_), @file_only_archives;
 
@@ -74,6 +76,7 @@ for my $archive_name (@file_only_archives) {
       my @compress =
           $ext =~ /t?gz$/       ? (COMPRESS_GZIP)
         : $ext =~ /(tbz|bz2?)$/ ? (COMPRESS_BZIP)
+        : $ext =~ /(t?xz)$/     ? (COMPRESS_XZ)
         : ();
 
       my ( $fh, $filename ) = tempfile( UNLINK => 1 );
index 246259d..d603454 100644 (file)
@@ -50,11 +50,33 @@ WriteMakefile(
 
     INSTALLDIRS => ($] > 5.010  && $] < 5.011 ? 'perl' : 'site'),
 
-    META_MERGE => {
-        no_index => {
-            directory => [ 't', 'private' ],
-        },
-    },    
+     ( eval { ExtUtils::MakeMaker->VERSION(6.46) }  
+        ? ( META_MERGE  => {
+    
+                "meta-spec" => { version => 2 },
+
+                no_index => {
+                    directory => [ 't', 'private' ],
+                },
+
+                resources   => {
+                
+                    bugtracker  => {
+                        web     => 'https://github.com/pmqs/Compress-Raw-Bzip2/issues'
+                    },
+
+                    homepage    => 'https://github.com/pmqs/Compress-Raw-Bzip2',
+
+                    repository  => {
+                        type    => 'git',
+                        url     => 'git://github.com/pmqs/Compress-Raw-Bzip2.git',
+                        web     => 'https://github.com/pmqs/Compress-Raw-Bzip2',
+                    },        
+                },
+              } 
+            ) 
+        : ()
+    ),  
 
     ((ExtUtils::MakeMaker->VERSION() gt '6.30') ?
         ('LICENSE'  => 'perl')         : ()),    
index 31f3197..67c28d6 100644 (file)
@@ -94,11 +94,33 @@ WriteMakefile(
 
     INSTALLDIRS => ($] >= 5.009 && $] < 5.011 ? 'perl' : 'site'),
 
-    META_MERGE => {
-        no_index => {
-            directory => [ 't', 'private' ],
-        },
-    },    
+     ( eval { ExtUtils::MakeMaker->VERSION(6.46) }  
+        ? ( META_MERGE  => {
+    
+                "meta-spec" => { version => 2 },
+
+                no_index => {
+                    directory => [ 't', 'private' ],
+                },
+
+                resources   => {
+                
+                    bugtracker  => {
+                        web     => 'https://github.com/pmqs/Compress-Raw-Zlib/issues'
+                    },
+
+                    homepage    => 'https://github.com/pmqs/Compress-Raw-Zlib',
+
+                    repository  => {
+                        type    => 'git',
+                        url     => 'git://github.com/pmqs/Compress-Raw-Zlib.git',
+                        web     => 'https://github.com/pmqs/Compress-Raw-Zlib',
+                    },        
+                },
+              } 
+            ) 
+        : ()
+    ),
 
     ((ExtUtils::MakeMaker->VERSION() gt '6.30') ?
         ('LICENSE'  => 'perl')         : ()),    
index 292b09a..d79a950 100644 (file)
@@ -1,6 +1,6 @@
 # Filename:    config.in
 #
-# written by Paul Marquess <Paul.Marquess@btinternet.com>
+# written by Paul Marquess <pmqs@cpan.org>
 # last modified 9th Sept 1997
 # version 1.55
 
index e8abc97..c2842f6 100644 (file)
@@ -1,13 +1,13 @@
-#!/usr/local/bin/perl
+#!/usr/bin/perl
 
-# Name:                dbinfo -- identify berkeley DB version used to create 
-#                        a database file
+# Name:         dbinfo -- identify berkeley DB version used to create 
+#                         a database file
 #
-# Author:      Paul Marquess  <Paul.Marquess@btinternet.com>
-# Version:     1.06 
-# Date         27th March 2008
+# Author:       Paul Marquess  <pmqs@cpan.org>
+# Version:      1.07 
+# Date          2nd April 2011
 #
-#     Copyright (c) 1998-2012 Paul Marquess. All rights reserved.
+#     Copyright (c) 1998-2020 Paul Marquess. All rights reserved.
 #     This program is free software; you can redistribute it and/or
 #     modify it under the same terms as Perl itself.
 
 use strict ;
 
 my %Data =
-       (
-       0x053162 =>     # DB_BTREEMAGIC
+        (
+        0x053162 =>     # DB_BTREEMAGIC
             {
-                         Type     => "Btree",
-                         Versions => # DB_BTREEVERSION
-                               {
-                                 1     => [0, "Unknown (older than 1.71)"],
-                                 2     => [0, "Unknown (older than 1.71)"],
-                                 3     => [0, "1.71 -> 1.85, 1.86"],
-                                 4     => [0, "Unknown"],
-                                 5     => [0, "2.0.0 -> 2.3.0"],
-                                 6     => [0, "2.3.1 -> 2.7.7"],
-                                 7     => [0, "3.0.x"],
-                                 8     => [0, "3.1.x -> 4.0.x"],
-                                 9     => [1, "4.1.x or greater"],
-                               }
-                       },
-       0x061561 =>     # DB_HASHMAGIC
+                          Type     => "Btree",
+                          Versions => # DB_BTREEVERSION
+                                {
+                                  1     => [0, "Unknown (older than 1.71)"],
+                                  2     => [0, "Unknown (older than 1.71)"],
+                                  3     => [0, "1.71 -> 1.85, 1.86"],
+                                  4     => [0, "Unknown"],
+                                  5     => [0, "2.0.0 -> 2.3.0"],
+                                  6     => [0, "2.3.1 -> 2.7.7"],
+                                  7     => [0, "3.0.x"],
+                                  8     => [0, "3.1.x -> 4.0.x"],
+                                  9     => [1, "4.1.x or greater"],
+                                }
+                        },
+        0x061561 =>     # DB_HASHMAGIC
             {
-                         Type     => "Hash",
-                         Versions => # DB_HASHVERSION
-                               {
-                                 1     => [0, "Unknown (older than 1.71)"],
-                                 2     => [0, "1.71 -> 1.85"],
-                                 3     => [0, "1.86"],
-                                 4     => [0, "2.0.0 -> 2.1.0"],
-                                 5     => [0, "2.2.6 -> 2.7.7"],
-                                 6     => [0, "3.0.x"],
-                                 7     => [0, "3.1.x -> 4.0.x"],
-                                 8     => [1, "4.1.x or greater"],
-                                 9     => [1, "4.6.x or greater"],
-                               }
-                       },
-       0x042253 =>     # DB_QAMMAGIC
+                          Type     => "Hash",
+                          Versions => # DB_HASHVERSION
+                                {
+                                  1     => [0, "Unknown (older than 1.71)"],
+                                  2     => [0, "1.71 -> 1.85"],
+                                  3     => [0, "1.86"],
+                                  4     => [0, "2.0.0 -> 2.1.0"],
+                                  5     => [0, "2.2.6 -> 2.7.7"],
+                                  6     => [0, "3.0.x"],
+                                  7     => [0, "3.1.x -> 4.0.x"],
+                                  8     => [1, "4.1.x or greater"],
+                                  9     => [1, "4.6.x or greater"],
+                                }
+                        },
+        0x042253 =>     # DB_QAMMAGIC
             {
-                         Type     => "Queue",
-                         Versions => # DB_QAMVERSION
-                               {
-                                 1     => [0, "3.0.x"],
-                                 2     => [0, "3.1.x"],
-                                 3     => [0, "3.2.x -> 4.0.x"],
-                                 4     => [1, "4.1.x or greater"],
-                               }
-                       },
-       ) ;
+                          Type     => "Queue",
+                          Versions => # DB_QAMVERSION
+                                {
+                                  1     => [0, "3.0.x"],
+                                  2     => [0, "3.1.x"],
+                                  3     => [0, "3.2.x -> 4.0.x"],
+                                  4     => [1, "4.1.x or greater"],
+                                }
+                        },
+        0x074582 =>      # DB_HEAPMAGIC
+            {
+                          Type     => "Heap",
+                          Versions => # DB_HEAPVERSION
+                                {
+                                  1        => [1, "5.2.x"],
+                                }
+                        },
+        ) ;
 
 die "Usage: dbinfo file\n" unless @ARGV == 1 ;
 
@@ -120,11 +128,11 @@ if ( defined $type->{Versions}{$version} )
 }
 
 print <<EOM ;
-File Type:             Berkeley DB $type->{Type} file.
-File Version ID:       $version
-Built with Berkeley DB:        $ver_string
-Byte Order:            $endian
-Magic:                 $magic
+File Type:              Berkeley DB $type->{Type} file.
+File Version ID:        $version
+Built with Berkeley DB: $ver_string
+Byte Order:             $endian
+Magic:                  $magic
 Encryption:             $encrypt
 EOM
 
index 4ff405e..86cfb0c 100755 (executable)
@@ -16,11 +16,11 @@ BEGIN {
 BEGIN
 {
     if ($^O eq 'darwin'
-       && (split(/\./, $Config{osvers}))[0] < 7 # Mac OS X 10.3 == Darwin 7
-       && $Config{db_version_major} == 1
-       && $Config{db_version_minor} == 0
-       && $Config{db_version_patch} == 0) {
-       warn <<EOM;
+        && (split(/\./, $Config{osvers}))[0] < 7 # Mac OS X 10.3 == Darwin 7
+        && $Config{db_version_major} == 1
+        && $Config{db_version_minor} == 0
+        && $Config{db_version_patch} == 0) {
+        warn <<EOM;
 #
 # This test is known to crash in Mac OS X versions 10.2 (or earlier)
 # because of the buggy Berkeley DB version included with the OS.
@@ -69,17 +69,17 @@ sub lexical
     {
         my $class = shift ;
         my $filename = shift ;
-       my $fh = gensym ;
-       open ($fh, ">$filename") || die "Cannot open $filename: $!" ;
-       my $real_stdout = select($fh) ;
-       return bless [$fh, $real_stdout ] ;
+        my $fh = gensym ;
+        open ($fh, ">$filename") || die "Cannot open $filename: $!" ;
+        my $real_stdout = select($fh) ;
+        return bless [$fh, $real_stdout ] ;
 
     }
     sub DESTROY
     {
         my $self = shift ;
-       close $self->[0] ;
-       select($self->[1]) ;
+        close $self->[0] ;
+        select($self->[1]) ;
     }
 }
 
@@ -124,7 +124,7 @@ sub safeUntie
 
 my $db185mode =  ($DB_File::db_version == 1 && ! $DB_File::db_185_compat) ;
 my $null_keys_allowed = ($DB_File::db_ver < 2.004010 
-                               || $DB_File::db_ver >= 3.1 );
+                                || $DB_File::db_ver >= 3.1 );
 
 my $TEMPDIR = tempdir( CLEANUP => 1 );
 chdir $TEMPDIR;
@@ -263,8 +263,8 @@ ok(25, $#keys == 29 && $#values == 29) ;
 $i = 0 ;
 while (($key,$value) = each(%h)) {
     if ($key eq $keys[$i] && $value eq $values[$i] && $key eq lc($value)) {
-       $key =~ y/a-z/A-Z/;
-       $i++ if $key eq $value;
+        $key =~ y/a-z/A-Z/;
+        $i++ if $key eq $value;
     }
 }
 
@@ -412,7 +412,7 @@ ok(61, $key eq 'replace key' );
 ok(62, $value eq 'replace value' );
 $status = $X->get('y', $value) ;
 ok(63, 1) ; # hard-wire to always pass. the previous test ($status == 1)
-           # only worked because of a bug in 1.85/6
+            # only worked because of a bug in 1.85/6
 
 # use seq to walk forwards through a file 
 
@@ -520,7 +520,7 @@ ok(82, keys %smith == 1 && $smith{'John'}) ;
 
 my %wall = $YY->get_dup('Wall', 1) ;
 ok(83, keys %wall == 3 && $wall{'Larry'} == 1 && $wall{'Stone'} == 1 
-               && $wall{'Brick'} == 2);
+                && $wall{'Brick'} == 2);
 
 undef $YY ;
 untie %hh ;
@@ -534,8 +534,8 @@ my $Dfile3 = "btree3" ;
  
 my $dbh1 = new DB_File::BTREEINFO ;
 $dbh1->{compare} = sub { 
-       no warnings 'numeric' ;
-       $_[0] <=> $_[1] } ; 
+        no warnings 'numeric' ;
+        $_[0] <=> $_[1] } ; 
  
 my $dbh2 = new DB_File::BTREEINFO ;
 $dbh2->{compare} = sub { $_[0] cmp $_[1] } ;
@@ -647,37 +647,37 @@ unlink $Dfile1 ;
    @EXPORT = @DB_File::EXPORT ;
 
    sub STORE { 
-       my $self = shift ;
+        my $self = shift ;
         my $key = shift ;
         my $value = shift ;
         $self->SUPER::STORE($key, $value * 2) ;
    }
 
    sub FETCH { 
-       my $self = shift ;
+        my $self = shift ;
         my $key = shift ;
         $self->SUPER::FETCH($key) - 1 ;
    }
 
    sub put { 
-       my $self = shift ;
+        my $self = shift ;
         my $key = shift ;
         my $value = shift ;
         $self->SUPER::put($key, $value * 3) ;
    }
 
    sub get { 
-       my $self = shift ;
+        my $self = shift ;
         $self->SUPER::get($_[0], $_[1]) ;
-       $_[1] -= 2 ;
+        $_[1] -= 2 ;
    }
 
    sub A_new_method
    {
-       my $self = shift ;
+        my $self = shift ;
         my $key = shift ;
         my $value = $self->FETCH($key) ;
-       return "[[$value]]" ;
+        return "[[$value]]" ;
    }
 
    1 ;
@@ -691,8 +691,8 @@ EOM
     my %h ;
     my $X ;
     eval '
-       $X = tie(%h, "SubDB","dbbtree.tmp", O_RDWR|O_CREAT, 0640, $DB_BTREE );
-       ' ;
+        $X = tie(%h, "SubDB","dbbtree.tmp", O_RDWR|O_CREAT, 0640, $DB_BTREE );
+        ' ;
 
     main::ok(92, $@ eq "") ;
 
@@ -732,8 +732,8 @@ EOM
        my($fk, $sk, $fv, $sv) = @_ ;
        return
            $fetch_key eq $fk && $store_key eq $sk && 
-          $fetch_value eq $fv && $store_value eq $sv &&
-          $_ eq 'original' ;
+           $fetch_value eq $fv && $store_value eq $sv &&
+           $_ eq 'original' ;
    }
    
    ok(101, $db = tie(%h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_BTREE ) );
@@ -761,13 +761,13 @@ EOM
 
    # replace the filters, but remember the previous set
    my ($old_fk) = $db->filter_fetch_key   
-                       (sub { $_ = uc $_ ; $fetch_key = $_ }) ;
+                        (sub { $_ = uc $_ ; $fetch_key = $_ }) ;
    my ($old_sk) = $db->filter_store_key   
-                       (sub { $_ = lc $_ ; $store_key = $_ }) ;
+                        (sub { $_ = lc $_ ; $store_key = $_ }) ;
    my ($old_fv) = $db->filter_fetch_value 
-                       (sub { $_ = "[$_]"; $fetch_value = $_ }) ;
+                        (sub { $_ = "[$_]"; $fetch_value = $_ }) ;
    my ($old_sv) = $db->filter_store_value 
-                       (sub { s/o/x/g; $store_value = $_ }) ;
+                        (sub { s/o/x/g; $store_value = $_ }) ;
    
    ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
    $h{"Fred"} = "Joe" ;
@@ -840,13 +840,13 @@ EOM
     sub Closure
     {
         my ($name) = @_ ;
-       my $count = 0 ;
-       my @kept = () ;
+        my $count = 0 ;
+        my @kept = () ;
 
-       return sub { ++$count ; 
-                    push @kept, $_ ; 
-                    $result{$name} = "$name - $count: [@kept]" ;
-                  }
+        return sub { ++$count ; 
+                     push @kept, $_ ; 
+                     $result{$name} = "$name - $count: [@kept]" ;
+                   }
     }
 
     $db->filter_store_key(Closure("store key")) ;
@@ -887,7 +887,7 @@ EOM
     undef $db ;
     untie %h;
     unlink $Dfile;
-}              
+}               
 
 {
    # DBM Filter recursion detection
@@ -986,7 +986,7 @@ EOM
     $DB_BTREE->{'flags'} = R_DUP ;
  
     tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0640, $DB_BTREE 
-       or die "Cannot open $filename: $!\n";
+        or die "Cannot open $filename: $!\n";
  
     # Add some key/value pairs to the file
     $h{'Wall'} = 'Larry' ;
@@ -998,7 +998,7 @@ EOM
     # iterate through the associative array
     # and print each key/value pair.
     foreach (keys %h)
-      { print "$_      -> $h{$_}\n" }
+      { print "$_ -> $h{$_}\n" }
 
     untie %h ;
 
@@ -1006,17 +1006,17 @@ EOM
   }  
 
   ok(148, docat_del($file) eq ($db185mode ? <<'EOM' : <<'EOM') ) ;
-Smith  -> John
-Wall   -> Brick
-Wall   -> Brick
-Wall   -> Brick
-mouse  -> mickey
+Smith -> John
+Wall -> Brick
+Wall -> Brick
+Wall -> Brick
+mouse -> mickey
 EOM
-Smith  -> John
-Wall   -> Larry
-Wall   -> Larry
-Wall   -> Larry
-mouse  -> mickey
+Smith -> John
+Wall -> Larry
+Wall -> Larry
+Wall -> Larry
+mouse -> mickey
 EOM
 
   {
@@ -1038,7 +1038,7 @@ EOM
     $DB_BTREE->{'flags'} = R_DUP ;
  
     $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0640, $DB_BTREE 
-       or die "Cannot open $filename: $!\n";
+        or die "Cannot open $filename: $!\n";
  
     # Add some key/value pairs to the file
     $h{'Wall'} = 'Larry' ;
@@ -1053,7 +1053,7 @@ EOM
     for ($status = $x->seq($key, $value, R_FIRST) ;
          $status == 0 ;
          $status = $x->seq($key, $value, R_NEXT) )
-      {  print "$key   -> $value\n" }
+      {  print "$key -> $value\n" }
  
  
     undef $x ;
@@ -1061,17 +1061,17 @@ EOM
   }
 
   ok(149, docat_del($file) eq ($db185mode == 1 ? <<'EOM' : <<'EOM') ) ;
-Smith  -> John
-Wall   -> Brick
-Wall   -> Brick
-Wall   -> Larry
-mouse  -> mickey
+Smith -> John
+Wall -> Brick
+Wall -> Brick
+Wall -> Larry
+mouse -> mickey
 EOM
-Smith  -> John
-Wall   -> Larry
-Wall   -> Brick
-Wall   -> Brick
-mouse  -> mickey
+Smith -> John
+Wall -> Larry
+Wall -> Brick
+Wall -> Brick
+mouse -> mickey
 EOM
 
 
@@ -1093,7 +1093,7 @@ EOM
     $DB_BTREE->{'flags'} = R_DUP ;
  
     $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0640, $DB_BTREE 
-       or die "Cannot open $filename: $!\n";
+        or die "Cannot open $filename: $!\n";
  
     my $cnt  = $x->get_dup("Wall") ;
     print "Wall occurred $cnt times\n" ;
@@ -1103,13 +1103,13 @@ EOM
     print "There are $hash{'Brick'} Brick Walls\n" ;
 
     my @list = sort $x->get_dup("Wall") ;
-    print "Wall =>     [@list]\n" ;
+    print "Wall => [@list]\n" ;
 
     @list = $x->get_dup("Smith") ;
-    print "Smith =>    [@list]\n" ;
+    print "Smith => [@list]\n" ;
  
     @list = $x->get_dup("Dog") ;
-    print "Dog =>      [@list]\n" ; 
+    print "Dog => [@list]\n" ; 
  
     undef $x ;
     untie %h ;
@@ -1119,9 +1119,9 @@ EOM
 Wall occurred 3 times
 Larry is there
 There are 2 Brick Walls
-Wall =>        [Brick Brick Larry]
-Smith =>       [John]
-Dog => []
+Wall => [Brick Brick Larry]
+Smith => [John]
+Dog => []
 EOM
 
   {
@@ -1142,7 +1142,7 @@ EOM
     $DB_BTREE->{'flags'} = R_DUP ;
  
     $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0640, $DB_BTREE 
-       or die "Cannot open $filename: $!\n";
+        or die "Cannot open $filename: $!\n";
 
     $found = ( $x->find_dup("Wall", "Larry") == 0 ? "" : "not") ; 
     print "Larry Wall is $found there\n" ;
@@ -1177,7 +1177,7 @@ EOM
     $DB_BTREE->{'flags'} = R_DUP ;
  
     $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0640, $DB_BTREE 
-       or die "Cannot open $filename: $!\n";
+        or die "Cannot open $filename: $!\n";
 
     $x->del_dup("Wall", "Larry") ;
 
@@ -1213,7 +1213,7 @@ EOM
         my $value = 0;
         my $orig_key = $key ;
         $x->seq($key, $value, R_CURSOR) ;
-        print "$orig_key\t-> $key\t-> $value\n" ;
+        print "$orig_key -> $key -> $value\n" ;
     }
 
     $filename = "tree" ;
@@ -1232,10 +1232,10 @@ EOM
     $key = $value = 0 ;
     print "IN ORDER\n" ;
     for ($st = $x->seq($key, $value, R_FIRST) ;
-        $st == 0 ;
+         $st == 0 ;
          $st = $x->seq($key, $value, R_NEXT) )
-       
-      {  print "$key   -> $value\n" }
+        
+      {  print "$key -> $value\n" }
  
     print "\nPARTIAL MATCH\n" ;
 
@@ -1252,15 +1252,15 @@ EOM
 
   ok(153, docat_del($file) eq <<'EOM') ;
 IN ORDER
-Smith  -> John
-Wall   -> Larry
-Walls  -> Brick
-mouse  -> mickey
+Smith -> John
+Wall -> Larry
+Walls -> Brick
+mouse -> mickey
 
 PARTIAL MATCH
-Wa     -> Wall -> Larry
-A      -> Smith        -> John
-a      -> mouse        -> mickey
+Wa -> Wall -> Larry
+A -> Smith -> John
+a -> mouse -> mickey
 EOM
 
 }
@@ -1280,7 +1280,7 @@ EOM
     local $SIG{__WARN__} = sub {$a = $_[0]} ;
     
     tie %h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0664, $DB_BTREE
-       or die "Can't open file: $!\n" ;
+        or die "Can't open file: $!\n" ;
     $h{ABC} = undef;
     ok(154, $a eq "") ;
     untie %h ;
@@ -1300,7 +1300,7 @@ EOM
     local $SIG{__WARN__} = sub {$a = $_[0]} ;
     
     tie %h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0664, $DB_BTREE
-       or die "Can't open file: $!\n" ;
+        or die "Can't open file: $!\n" ;
     %h = (); ;
     ok(155, $a eq "") ;
     untie %h ;
@@ -1373,9 +1373,9 @@ EOM
 #    my (%h);
 #    ok(164, tie(%hash, 'DB_File',$Dfile, O_RDWR|O_CREAT, 0640, $dbh ) );
 #
-#    eval {    $hash{1} = 2;
-#              $hash{4} = 5;
-#       };
+#    eval {     $hash{1} = 2;
+#               $hash{4} = 5;
+#        };
 #
 #    ok(165, $@ =~ /^DB_File btree_compare: recursion detected/);
 #    {
index 97b77fc..79ffe93 100755 (executable)
@@ -40,17 +40,17 @@ sub ok
     {
         my $class = shift ;
         my $filename = shift ;
-       my $fh = gensym ;
-       open ($fh, ">$filename") || die "Cannot open $filename: $!" ;
-       my $real_stdout = select($fh) ;
-       return bless [$fh, $real_stdout ] ;
+        my $fh = gensym ;
+        open ($fh, ">$filename") || die "Cannot open $filename: $!" ;
+        my $real_stdout = select($fh) ;
+        return bless [$fh, $real_stdout ] ;
 
     }
     sub DESTROY
     {
         my $self = shift ;
-       close $self->[0] ;
-       select($self->[1]) ;
+        close $self->[0] ;
+        select($self->[1]) ;
     }
 }
 
@@ -89,7 +89,7 @@ chdir $TEMPDIR;
 my $Dfile = "dbhash.tmp";
 my $Dfile2 = "dbhash2.tmp";
 my $null_keys_allowed = ($DB_File::db_ver < 2.004010 
-                               || $DB_File::db_ver >= 3.1 );
+                                || $DB_File::db_ver >= 3.1 );
 
 unlink $Dfile;
 
@@ -225,8 +225,8 @@ ok(23, $#keys == 29 && $#values == 29) ;
 $i = 0 ;
 while (($key,$value) = each(%h)) {
     if ($key eq $keys[$i] && $value eq $values[$i] && $key eq lc($value)) {
-       $key =~ y/a-z/A-Z/;
-       $i++ if $key eq $value;
+        $key =~ y/a-z/A-Z/;
+        $i++ if $key eq $value;
     }
 }
 
@@ -427,37 +427,37 @@ untie %h ;
    @EXPORT = @DB_File::EXPORT ;
 
    sub STORE { 
-       my $self = shift ;
+        my $self = shift ;
         my $key = shift ;
         my $value = shift ;
         $self->SUPER::STORE($key, $value * 2) ;
    }
 
    sub FETCH { 
-       my $self = shift ;
+        my $self = shift ;
         my $key = shift ;
         $self->SUPER::FETCH($key) - 1 ;
    }
 
    sub put { 
-       my $self = shift ;
+        my $self = shift ;
         my $key = shift ;
         my $value = shift ;
         $self->SUPER::put($key, $value * 3) ;
    }
 
    sub get { 
-       my $self = shift ;
+        my $self = shift ;
         $self->SUPER::get($_[0], $_[1]) ;
-       $_[1] -= 2 ;
+        $_[1] -= 2 ;
    }
 
    sub A_new_method
    {
-       my $self = shift ;
+        my $self = shift ;
         my $key = shift ;
         my $value = $self->FETCH($key) ;
-       return "[[$value]]" ;
+        return "[[$value]]" ;
    }
 
    1 ;
@@ -471,8 +471,8 @@ EOM
     my %h ;
     my $X ;
     eval '
-       $X = tie(%h, "SubDB","dbhash.tmp", O_RDWR|O_CREAT, 0640, $DB_HASH );
-       ' ;
+        $X = tie(%h, "SubDB","dbhash.tmp", O_RDWR|O_CREAT, 0640, $DB_HASH );
+        ' ;
 
     main::ok(54, $@ eq "") ;
 
@@ -525,8 +525,8 @@ EOM
 
        return
            $fetch_key   eq $fk && $store_key   eq $sk && 
-          $fetch_value eq $fv && $store_value eq $sv &&
-          $_ eq 'original' ;
+           $fetch_value eq $fv && $store_value eq $sv &&
+           $_ eq 'original' ;
    }
    
    ok(63, $db = tie(%h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_HASH ) );
@@ -558,13 +558,13 @@ EOM
 
    # replace the filters, but remember the previous set
    my ($old_fk) = $db->filter_fetch_key   
-                       (sub { $_ = uc $_ ; $fetch_key = $_ }) ;
+                        (sub { $_ = uc $_ ; $fetch_key = $_ }) ;
    my ($old_sk) = $db->filter_store_key   
-                       (sub { $_ = lc $_ ; $store_key = $_ }) ;
+                        (sub { $_ = lc $_ ; $store_key = $_ }) ;
    my ($old_fv) = $db->filter_fetch_value 
-                       (sub { $_ = "[$_]"; $fetch_value = $_ }) ;
+                        (sub { $_ = "[$_]"; $fetch_value = $_ }) ;
    my ($old_sv) = $db->filter_store_value 
-                       (sub { s/o/x/g; $store_value = $_ }) ;
+                        (sub { s/o/x/g; $store_value = $_ }) ;
    
    ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
    $h{"Fred"} = "Joe" ;
@@ -649,13 +649,13 @@ EOM
     sub Closure
     {
         my ($name) = @_ ;
-       my $count = 0 ;
-       my @kept = () ;
+        my $count = 0 ;
+        my @kept = () ;
 
-       return sub { ++$count ; 
-                    push @kept, $_ ; 
-                    $result{$name} = "$name - $count: [@kept]" ;
-                  }
+        return sub { ++$count ; 
+                     push @kept, $_ ; 
+                     $result{$name} = "$name - $count: [@kept]" ;
+                   }
     }
 
     $db->filter_store_key(Closure("store key")) ;
@@ -696,7 +696,7 @@ EOM
     undef $db ;
     untie %h;
     unlink $Dfile;
-}              
+}               
 
 {
    # DBM Filter recursion detection
@@ -868,9 +868,9 @@ EOM
 # 
 #    ok(127, tie(%hash, 'DB_File',$Dfile, O_RDWR|O_CREAT, 0640, $dbh ) );
 #
-#    eval {    $hash{1} = 2;
-#              $hash{4} = 5;
-#       };
+#    eval {     $hash{1} = 2;
+#               $hash{4} = 5;
+#        };
 #
 #    ok(128, $@ =~ /^DB_File hash callback: recursion detected/);
 #    {
index 18b7e9e..08a89ff 100755 (executable)
@@ -50,17 +50,17 @@ sub ok
     {
         my $class = shift ;
         my $filename = shift ;
-       my $fh = gensym ;
-       open ($fh, ">$filename") || die "Cannot open $filename: $!" ;
-       my $real_stdout = select($fh) ;
-       return bless [$fh, $real_stdout ] ;
+        my $fh = gensym ;
+        open ($fh, ">$filename") || die "Cannot open $filename: $!" ;
+        my $real_stdout = select($fh) ;
+        return bless [$fh, $real_stdout ] ;
 
     }
     sub DESTROY
     {
         my $self = shift ;
-       close $self->[0] ;
-       select($self->[1]) ;
+        close $self->[0] ;
+        select($self->[1]) ;
     }
 }
 
@@ -95,23 +95,23 @@ sub safeUntie
 sub bad_one
 {
     unless ($bad_ones++) {
-       print STDERR <<EOM ;
+        print STDERR <<EOM ;
 #
 # Some older versions of Berkeley DB version 1 will fail db-recno
 # tests 61, 63, 64 and 65.
 EOM
         if ($^O eq 'darwin'
-           && $Config{db_version_major} == 1
-           && $Config{db_version_minor} == 0
-           && $Config{db_version_patch} == 0) {
-           print STDERR <<EOM ;
+            && $Config{db_version_major} == 1
+            && $Config{db_version_minor} == 0
+            && $Config{db_version_patch} == 0) {
+            print STDERR <<EOM ;
 #
 # For example Mac OS X 10.2 (or earlier) has such an old
 # version of Berkeley DB.
 EOM
-       }
+        }
 
-       print STDERR <<EOM ;
+        print STDERR <<EOM ;
 #
 # You can safely ignore the errors if you're never going to use the
 # broken functionality (recno databases with a modified bval). 
@@ -205,7 +205,7 @@ ok(17, $X = tie @h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_RECNO ) ;
 my %noMode = map { $_, 1} qw( amigaos MSWin32 NetWare cygwin ) ;
 
 ok(18, ((stat($Dfile))[2] & 0777) == (($^O eq 'os2' || $^O eq 'MacOS') ? 0666 : 0640)
-       ||  $noMode{$^O} );
+        ||  $noMode{$^O} );
 
 #my $l = @h ;
 my $l = $X->length ;
@@ -429,37 +429,37 @@ unlink $Dfile;
    @EXPORT = @DB_File::EXPORT ;
 
    sub STORE { 
-       my $self = shift ;
+        my $self = shift ;
         my $key = shift ;
         my $value = shift ;
         $self->SUPER::STORE($key, $value * 2) ;
    }
 
    sub FETCH { 
-       my $self = shift ;
+        my $self = shift ;
         my $key = shift ;
         $self->SUPER::FETCH($key) - 1 ;
    }
 
    sub put { 
-       my $self = shift ;
+        my $self = shift ;
         my $key = shift ;
         my $value = shift ;
         $self->SUPER::put($key, $value * 3) ;
    }
 
    sub get { 
-       my $self = shift ;
+        my $self = shift ;
         $self->SUPER::get($_[0], $_[1]) ;
-       $_[1] -= 2 ;
+        $_[1] -= 2 ;
    }
 
    sub A_new_method
    {
-       my $self = shift ;
+        my $self = shift ;
         my $key = shift ;
         my $value = $self->FETCH($key) ;
-       return "[[$value]]" ;
+        return "[[$value]]" ;
    }
 
    1 ;
@@ -473,8 +473,8 @@ EOM
     my @h ;
     my $X ;
     eval '
-       $X = tie(@h, "SubDB","recno.tmp", O_RDWR|O_CREAT, 0640, $DB_RECNO );
-       ' ;
+        $X = tie(@h, "SubDB","recno.tmp", O_RDWR|O_CREAT, 0640, $DB_RECNO );
+        ' ;
     die "Could not tie: $!" unless $X;
 
     main::ok(73, $@ eq "") ;
@@ -586,8 +586,8 @@ EOM
 
        return
            $fetch_key   eq $fk && $store_key   eq $sk && 
-          $fetch_value eq $fv && $store_value eq $sv &&
-          $_ eq 'original' ;
+           $fetch_value eq $fv && $store_value eq $sv &&
+           $_ eq 'original' ;
    }
    
    ok(99, $db = tie(@h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_RECNO ) );
@@ -615,13 +615,13 @@ EOM
 
    # replace the filters, but remember the previous set
    my ($old_fk) = $db->filter_fetch_key   
-                       (sub { ++ $_ ; $fetch_key = $_ }) ;
+                        (sub { ++ $_ ; $fetch_key = $_ }) ;
    my ($old_sk) = $db->filter_store_key   
-                       (sub { $_ *= 2 ; $store_key = $_ }) ;
+                        (sub { $_ *= 2 ; $store_key = $_ }) ;
    my ($old_fv) = $db->filter_fetch_value 
-                       (sub { $_ = "[$_]"; $fetch_value = $_ }) ;
+                        (sub { $_ = "[$_]"; $fetch_value = $_ }) ;
    my ($old_sv) = $db->filter_store_value 
-                       (sub { s/o/x/g; $store_value = $_ }) ;
+                        (sub { s/o/x/g; $store_value = $_ }) ;
    
    ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
    $h[1] = "Joe" ;
@@ -694,13 +694,13 @@ EOM
     sub Closure
     {
         my ($name) = @_ ;
-       my $count = 0 ;
-       my @kept = () ;
+        my $count = 0 ;
+        my @kept = () ;
 
-       return sub { ++$count ; 
-                    push @kept, $_ ; 
-                    $result{$name} = "$name - $count: [@kept]" ;
-                  }
+        return sub { ++$count ; 
+                     push @kept, $_ ; 
+                     $result{$name} = "$name - $count: [@kept]" ;
+                   }
     }
 
     $db->filter_store_key(Closure("store key")) ;
@@ -741,7 +741,7 @@ EOM
     undef $db ;
     ok(144, safeUntie \@h);
     unlink $Dfile;
-}              
+}               
 
 {
    # DBM Filter recursion detection
@@ -944,7 +944,7 @@ EOM
     local $SIG{__WARN__} = sub {$a = $_[0]} ;
     
     tie @h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0664, $DB_RECNO 
-       or die "Can't open file: $!\n" ;
+        or die "Can't open file: $!\n" ;
     $h[0] = undef;
     ok(150, $a eq "") ;
     ok(151, safeUntie \@h);
@@ -964,7 +964,7 @@ EOM
     my @h ;
     
     tie @h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0664, $DB_RECNO 
-       or die "Can't open file: $!\n" ;
+        or die "Can't open file: $!\n" ;
     @h = (); ;
     ok(152, $a eq "") ;
     ok(153, safeUntie \@h);
@@ -1170,7 +1170,7 @@ EOM
     $value = '' ;
     $status = $db->get(undef, $value) ;
     ok 178, $status == 0
-       or print "# get failed - status $status\n" ;
+        or print "# get failed - status $status\n" ;
     ok(179, $db->get(undef, $value) == 0) or print "# get failed\n" ;
     ok 180, $value eq 'fred' or print "# got [$value]\n" ;
     ok 181, $warned eq '' 
@@ -1202,7 +1202,7 @@ exit unless $FA ;
     my @tied ;
     
     tie @tied, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0664, $DB_RECNO 
-       or die "Can't open file: $!\n" ;
+        or die "Can't open file: $!\n" ;
 
     # uninitialized offset
     use warnings;
@@ -1271,52 +1271,52 @@ exit unless $FA ;
 # Perl's built-in splice().
 # 
 my @tests = ([ [ 'falsely', 'dinosaur', 'remedy', 'commotion',
-                'rarely', 'paleness' ],
-              -4, -2,
-              [ 'redoubled', 'Taylorize', 'Zoe', 'halogen' ],
-              'void' ],
-
-            [ [ 'a' ], -2, 1, [ 'B' ], 'void' ],
-
-            [ [ 'Hartley', 'Islandia', 'assents', 'wishful' ],
-              0, -4,
-              [ 'maids' ],
-              'void' ],
-
-            [ [ 'visibility', 'pocketful', 'rectangles' ],
-              -10, 0,
-              [ 'garbages' ],
-              'void' ],
-
-            [ [ 'sleeplessly' ],
-              8, -4,
-              [ 'Margery', 'clearing', 'repercussion', 'clubs',
-                'arise' ],
-              'void' ],
-
-            [ [ 'chastises', 'recalculates' ],
-              0, 0,
-              [ 'momentariness', 'mediates', 'accents', 'toils',
-                'regaled' ],
-              'void' ],
-
-            [ [ 'b', '' ],
-              9, 8,
-              [ 'otrb', 'stje', 'ixrpw', 'vxfx', 'lhhf' ],
-              'scalar' ],
-
-            [ [ 'b', '' ],
-              undef, undef,
-              [ 'otrb', 'stje', 'ixrpw', 'vxfx', 'lhhf' ],
-              'scalar' ],
-            
-            [ [ 'riheb' ], -8, undef, [], 'void' ],
-
-            [ [ 'uft', 'qnxs', '' ],
-              6, -2,
-              [ 'znp', 'mhnkh', 'bn' ],
-              'void' ],
-           );
+                 'rarely', 'paleness' ],
+               -4, -2,
+               [ 'redoubled', 'Taylorize', 'Zoe', 'halogen' ],
+               'void' ],
+
+             [ [ 'a' ], -2, 1, [ 'B' ], 'void' ],
+
+             [ [ 'Hartley', 'Islandia', 'assents', 'wishful' ],
+               0, -4,
+               [ 'maids' ],
+               'void' ],
+
+             [ [ 'visibility', 'pocketful', 'rectangles' ],
+               -10, 0,
+               [ 'garbages' ],
+               'void' ],
+
+             [ [ 'sleeplessly' ],
+               8, -4,
+               [ 'Margery', 'clearing', 'repercussion', 'clubs',
+                 'arise' ],
+               'void' ],
+
+             [ [ 'chastises', 'recalculates' ],
+               0, 0,
+               [ 'momentariness', 'mediates', 'accents', 'toils',
+                 'regaled' ],
+               'void' ],
+
+             [ [ 'b', '' ],
+               9, 8,
+               [ 'otrb', 'stje', 'ixrpw', 'vxfx', 'lhhf' ],
+               'scalar' ],
+
+             [ [ 'b', '' ],
+               undef, undef,
+               [ 'otrb', 'stje', 'ixrpw', 'vxfx', 'lhhf' ],
+               'scalar' ],
+             
+             [ [ 'riheb' ], -8, undef, [], 'void' ],
+
+             [ [ 'uft', 'qnxs', '' ],
+               6, -2,
+               [ 'znp', 'mhnkh', 'bn' ],
+               'void' ],
+            );
 
 my $testnum = 194;
 my $failed = 0;
@@ -1324,10 +1324,10 @@ my $tmp = "dbr$$";
 foreach my $test (@tests) {
     my $err = test_splice(@$test);
     if (defined $err) {
-       print STDERR "# failed: ", Dumper($test);
-       print STDERR "# error: $err\n";
-       $failed = 1;
-       ok($testnum++, 0);
+        print STDERR "# failed: ", Dumper($test);
+        print STDERR "# error: $err\n";
+        $failed = 1;
+        ok($testnum++, 0);
     }
     else { ok($testnum++, 1) }
 }
@@ -1341,15 +1341,15 @@ else {
     $failed = 0;
     srand(0);
     foreach (0 .. 1000 - 1) {
-       my $test = rand_test();
-       my $err = test_splice(@$test);
-       if (defined $err) {
-           print STDERR "# failed: ", Dumper($test);
-           print STDERR "# error: $err\n";
-           $failed = 1;
-           print STDERR "# skipping any remaining random tests\n";
-           last;
-       }
+        my $test = rand_test();
+        my $err = test_splice(@$test);
+        if (defined $err) {
+            print STDERR "# failed: ", Dumper($test);
+            print STDERR "# error: $err\n";
+            $failed = 1;
+            print STDERR "# skipping any remaining random tests\n";
+            last;
+        }
     }
 
     ok($testnum++, not $failed);
@@ -1403,77 +1403,77 @@ sub test_splice {
 
     my $gather_warning = sub { push @s_warnings, $_[0] };
     if ($context eq 'list') {
-       my @r;
-       eval {
-           local $SIG{__WARN__} = $gather_warning;
-           @r = splice @array, $offset, $length, @list;
-       };
-       $s_error = $@;
-       $s_r = \@r;
+        my @r;
+        eval {
+            local $SIG{__WARN__} = $gather_warning;
+            @r = splice @array, $offset, $length, @list;
+        };
+        $s_error = $@;
+        $s_r = \@r;
     }
     elsif ($context eq 'scalar') {
-       my $r;
-       eval {
-           local $SIG{__WARN__} = $gather_warning;
-           $r = splice @array, $offset, $length, @list;
-       };
-       $s_error = $@;
-       $s_r = [ $r ];
+        my $r;
+        eval {
+            local $SIG{__WARN__} = $gather_warning;
+            $r = splice @array, $offset, $length, @list;
+        };
+        $s_error = $@;
+        $s_r = [ $r ];
     }
     elsif ($context eq 'void') {
-       eval {
-           local $SIG{__WARN__} = $gather_warning;
-           splice @array, $offset, $length, @list;
-       };
-       $s_error = $@;
-       $s_r = [];
+        eval {
+            local $SIG{__WARN__} = $gather_warning;
+            splice @array, $offset, $length, @list;
+        };
+        $s_error = $@;
+        $s_r = [];
     }
     else {
-       die "bad context $context";
+        die "bad context $context";
     }
 
     foreach ($s_error, @s_warnings) {
-       chomp;
-       s/ at \S+ line \d+\.$//;
-       # only built-in splice identifies name of uninit value
-       s/(uninitialized value) \$\w+/$1/;
+        chomp;
+        s/ at \S+ line \d+\.$//;
+        # only built-in splice identifies name of uninit value
+        s/(uninitialized value) \$\w+/$1/;
     }
 
     # Now do the same for DB_File's version of splice
     my ($ms_r, $ms_error, @ms_warnings);
     $gather_warning = sub { push @ms_warnings, $_[0] };
     if ($context eq 'list') {
-       my @r;
-       eval {
-           local $SIG{__WARN__} = $gather_warning;
-           @r = splice @h, $offset, $length, @list;
-       };
-       $ms_error = $@;
-       $ms_r = \@r;
+        my @r;
+        eval {
+            local $SIG{__WARN__} = $gather_warning;
+            @r = splice @h, $offset, $length, @list;
+        };
+        $ms_error = $@;
+        $ms_r = \@r;
     }
     elsif ($context eq 'scalar') {
-       my $r;
-       eval {
-           local $SIG{__WARN__} = $gather_warning;
-           $r = splice @h, $offset, $length, @list;
-       };
-       $ms_error = $@;
-       $ms_r = [ $r ];
+        my $r;
+        eval {
+            local $SIG{__WARN__} = $gather_warning;
+            $r = splice @h, $offset, $length, @list;
+        };
+        $ms_error = $@;
+        $ms_r = [ $r ];
     }
     elsif ($context eq 'void') {
-       eval {
-           local $SIG{__WARN__} = $gather_warning;
-           splice @h, $offset, $length, @list;
-       };
-       $ms_error = $@;
-       $ms_r = [];
+        eval {
+            local $SIG{__WARN__} = $gather_warning;
+            splice @h, $offset, $length, @list;
+        };
+        $ms_error = $@;
+        $ms_r = [];
     }
     else {
-       die "bad context $context";
+        die "bad context $context";
     }
 
     foreach ($ms_error, @ms_warnings) {
-       chomp;
+        chomp;
     s/ at \S+(\s+\S+)*? line \d+\.?.*//s;
     }
 
@@ -1485,26 +1485,26 @@ sub test_splice {
       if list_diff(\@array, \@h);
 
     if ((scalar @s_warnings) != (scalar @ms_warnings)) {
-       return 'different number of warnings';
+        return 'different number of warnings';
     }
 
     while (@s_warnings) {
-       my $sw  = shift @s_warnings;
-       my $msw = shift @ms_warnings;
-       
-       if (defined $sw and defined $msw) {
-           $msw =~ s/ \(.+\)$//;
-           $msw =~ s/ in splice$// if $] < 5.006;
-           if ($sw ne $msw) {
-               return "different warning: '$sw' vs '$msw'";
-           }
-       }
-       elsif (not defined $sw and not defined $msw) {
-           # Okay.
-       }
-       else {
-           return "one warning defined, another undef";
-       }
+        my $sw  = shift @s_warnings;
+        my $msw = shift @ms_warnings;
+        
+        if (defined $sw and defined $msw) {
+            $msw =~ s/ \(.+\)$//;
+            $msw =~ s/ in splice$// if $] < 5.006;
+            if ($sw ne $msw) {
+                return "different warning: '$sw' vs '$msw'";
+            }
+        }
+        elsif (not defined $sw and not defined $msw) {
+            # Okay.
+        }
+        else {
+            return "one warning defined, another undef";
+        }
     }
     
     undef $H;
@@ -1514,7 +1514,7 @@ sub test_splice {
     @h = <TEXT>; normalise @h; chomp @h;
     close TEXT or die "cannot close $tmp: $!";
     return('list is different when re-read from disk: '
-          . Dumper(\@array) . ' vs ' . Dumper(\@h))
+           . Dumper(\@array) . ' vs ' . Dumper(\@h))
       if list_diff(\@array, \@h);
 
     unlink $tmp;
@@ -1543,16 +1543,16 @@ sub list_diff {
     my @a = @$a; my @b = @$b;
     return 1 if (scalar @a) != (scalar @b);
     for (my $i = 0; $i < @a; $i++) {
-       my ($ae, $be) = ($a[$i], $b[$i]);
-       if (defined $ae and defined $be) {
-           return 1 if $ae ne $be;
-       }
-       elsif (not defined $ae and not defined $be) {
-           # Two undefined values are 'equal'
-       }
-       else {
-           return 1;
-       }
+        my ($ae, $be) = ($a[$i], $b[$i]);
+        if (defined $ae and defined $be) {
+            return 1 if $ae ne $be;
+        }
+        elsif (not defined $ae and not defined $be) {
+            # Two undefined values are 'equal'
+        }
+        else {
+            return 1;
+        }
     }
     return 0;
 } 
@@ -1569,10 +1569,10 @@ sub rand_test {
     my @contexts = qw<list scalar void>;
     my $context = $contexts[int(rand @contexts)];
     return [ rand_list(),
-            (rand() < 0.5) ? (int(rand(20)) - 10) : undef,
-            (rand() < 0.5) ? (int(rand(20)) - 10) : undef,
-            rand_list(),
-            $context ];
+             (rand() < 0.5) ? (int(rand(20)) - 10) : undef,
+             (rand() < 0.5) ? (int(rand(20)) - 10) : undef,
+             rand_list(),
+             $context ];
 }
 
 
@@ -1581,7 +1581,7 @@ sub rand_list {
     my @r;
 
     while (rand() > 0.1 * (scalar @r + 1)) {
-       push @r, rand_word();
+        push @r, rand_word();
     }
     return \@r;
 }
@@ -1592,7 +1592,7 @@ sub rand_word {
     my $r = '';
     my @chars = qw<a b c d e f g h i j k l m n o p q r s t u v w x y z>;
     while (rand() > 0.1 * (length($r) + 1)) {
-       $r .= $chars[int(rand(scalar @chars))];
+        $r .= $chars[int(rand(scalar @chars))];
     }
     return $r;
 }
index c46b685..2cfed97 100644 (file)
@@ -1,6 +1,6 @@
 # typemap for Perl 5 interface to Berkeley 
 #
-# written by Paul Marquess <Paul.Marquess@btinternet.com>
+# written by Paul Marquess <pmqs@cpan.org>
 # last modified 20th June 2004
 # version 1.809
 #
@@ -8,50 +8,50 @@
 #
 # 
 
-u_int                  T_U_INT
-DB_File                        T_PTROBJ
-DBT                    T_dbtdatum
-DBTKEY                 T_dbtkeydatum
+u_int                   T_U_INT
+DB_File                 T_PTROBJ
+DBT                     T_dbtdatum
+DBTKEY                  T_dbtkeydatum
 
 INPUT
 T_dbtkeydatum
     {
-       SV * my_sv = $arg;
-       DBM_ckFilter(my_sv, filter_store_key, \"filter_store_key\");
-       DBT_clear($var) ;
-       SvGETMAGIC(my_sv) ;
+        SV * my_sv = $arg;
+        DBM_ckFilter(my_sv, filter_store_key, \"filter_store_key\");
+        DBT_clear($var) ;
+        SvGETMAGIC(my_sv) ;
         if (db->type == DB_RECNO) {
-           if (SvOK(my_sv))
-               Value = GetRecnoKey(aTHX_ db, SvIV(my_sv)) ; 
+            if (SvOK(my_sv))
+                Value = GetRecnoKey(aTHX_ db, SvIV(my_sv)) ; 
             else
-               Value = 1 ;
-           $var.data = & Value; 
-           $var.size = (int)sizeof(recno_t);
+                Value = 1 ;
+            $var.data = & Value; 
+            $var.size = (int)sizeof(recno_t);
         }
         else if (SvOK(my_sv)) {
-           STRLEN len;
-           $var.data = SvPVbyte(my_sv, len);
-           $var.size = (int)len;
-       }
+            STRLEN len;
+            $var.data = SvPVbyte(my_sv, len);
+            $var.size = (int)len;
+        }
     }
 T_dbtdatum
     {
-       SV * my_sv = $arg;
-       DBM_ckFilter(my_sv, filter_store_value, \"filter_store_value\");
-       DBT_clear($var) ;
-       SvGETMAGIC(my_sv) ;
-       if (SvOK(my_sv)) {
-           STRLEN len;
-           $var.data = SvPVbyte(my_sv, len);
-           $var.size = (int)len;
-       }
+        SV * my_sv = $arg;
+        DBM_ckFilter(my_sv, filter_store_value, \"filter_store_value\");
+        DBT_clear($var) ;
+        SvGETMAGIC(my_sv) ;
+        if (SvOK(my_sv)) {
+            STRLEN len;
+            $var.data = SvPVbyte(my_sv, len);
+            $var.size = (int)len;
+        }
     }
 
 OUTPUT
 
 T_dbtkeydatum
-       OutputKey($arg, $var)
+        OutputKey($arg, $var)
 T_dbtdatum
-       OutputValue($arg, $var)
+        OutputValue($arg, $var)
 T_PTROBJ
         sv_setref_pv($arg, dbtype, (void*)$var);
index e01f6f6..ecf73de 100644 (file)
@@ -2,7 +2,7 @@
 
  version.c -- Perl 5 interface to Berkeley DB 
 
- written by Paul Marquess <Paul.Marquess@btinternet.com>
+ written by Paul Marquess <pmqs@cpan.org>
  last modified 2nd Jan 2002
  version 1.802
 
@@ -14,7 +14,7 @@
 
  Changes:
         1.71 -  Support for Berkeley DB version 3.
-               Support for Berkeley DB 2/3's backward compatibility mode.
+                Support for Berkeley DB 2/3's backward compatibility mode.
         1.72 -  No change.
         1.73 -  Added support for threading
         1.74 -  Added Perl core patch 7801.
@@ -36,7 +36,7 @@ __getBerkeleyDBInfo(void)
 __getBerkeleyDBInfo()
 #endif
 {
-#ifdef dTHX    
+#ifdef dTHX     
     dTHX;
 #endif    
     SV * version_sv = perl_get_sv("DB_File::db_version", GV_ADD|GV_ADDMULTI) ;
@@ -50,16 +50,16 @@ __getBerkeleyDBInfo()
 
     /* Check that the versions of db.h and libdb.a are the same */
     if (Major != DB_VERSION_MAJOR || Minor != DB_VERSION_MINOR )
-               /* || Patch != DB_VERSION_PATCH) */
+                /* || Patch != DB_VERSION_PATCH) */
 
-       croak("\nDB_File was build with libdb version %d.%d.%d,\nbut you are attempting to run it with libdb version %d.%d.%d\n",
-               DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH, 
-               Major, Minor, Patch) ;
+        croak("\nDB_File was build with libdb version %d.%d.%d,\nbut you are attempting to run it with libdb version %d.%d.%d\n",
+                DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH, 
+                Major, Minor, Patch) ;
     
     /* check that libdb is recent enough  -- we need 2.3.4 or greater */
     if (Major == 2 && (Minor < 3 || (Minor ==  3 && Patch < 4)))
-       croak("DB_File needs Berkeley DB 2.3.4 or greater, you have %d.%d.%d\n",
-                Major, Minor, Patch) ;
+        croak("DB_File needs Berkeley DB 2.3.4 or greater, you have %d.%d.%d\n",
+                 Major, Minor, Patch) ;
  
     {
         char buffer[40] ;
index 5d7663d..ba884d4 100644 (file)
@@ -280,6 +280,14 @@ S_new_msg_hv(const char * const message, /* The message text */
 #    define PERL_UNUSED_ARG(x) ((void)x)
 #  endif
 
+#  ifndef memGT
+#    define memGT(s1,s2,l) (memcmp(s1,s2,l) > 0)
+#  endif
+
+#  ifndef MIN
+#    define MIN(a,b) ((a) < (b) ? (a) : (b))
+#  endif
+
 static const char malformed_text[] = "Malformed UTF-8 character";
 
 static char *
index bfe3dc9..faf56e3 100644 (file)
@@ -20,7 +20,7 @@ plan skip_all => "ExtUtils::CBuilder not installed or couldn't find a compiler"
   unless have_compiler();
 plan skip_all => 'Shared perl library' if $Config{useshrplib} eq 'true';
 plan skip_all => $^O if $^O =~ m!^(MSWin32|cygwin|haiku|darwin)$!;
-plan skip_all => 'Skipped when not PERL_CORE or in git repo' unless $ENV{PERL_CORE} or $release;
+plan skip_all => 'Skipped when not PERL_CORE nor in git repo' unless $ENV{PERL_CORE} or $release;
 my @tests = list_static();
 plan skip_all => "No tests" unless @tests;
 plan tests => 6 * @tests;
index 4e7336c..a37cb62 100755 (executable)
@@ -80,7 +80,7 @@ like( $res, qr/manifypods.*foo.*foo.1/s, '... should add MAN3PODS targets' );
 # init_linker
 {
     my $libperl = $Config{libperl} || 'libperl.a';
-    $libperl =~ s/\.a/.dll.a/ if $] >= 5.006002;
+    $libperl =~ s/\.a/.dll.a/ if "$]" >= 5.006002;
     $libperl = "\$(PERL_INC)/$libperl";
 
     my $export  = '';
index 061e456..1357a2d 100755 (executable)
@@ -9,7 +9,7 @@ BEGIN {
 
 use File::Spec;
 
-use Test::More tests => 22;
+use Test::More tests => 30;
 
 use Config;
 use TieOut;
@@ -123,3 +123,35 @@ END
         }
     );
 }
+
+SKIP: {
+    eval { chmod(0755, "usrbin/interp") }
+        or skip "no chmod", 8;
+    skip "Not relevant on VMS or MSWin32", 8 if $^O eq 'VMS' || $^O eq 'MSWin32' || $^O eq 'cygwin';
+
+    my $dir = getcwd();
+    local $ENV{PATH} = join $Config{path_sep}, map "$dir/$_", qw(usrbin bin);
+
+    test_fixin(<<END,
+#!$dir/bin/interp
+
+blah blah blah
+END
+         sub {
+             is $_[0], "#!$dir/usrbin/interp\n", 'interpreter updated to one found in PATH';
+         }
+     );
+
+    eval { symlink("../usrbin/interp", "bin/interp") }
+        or skip "no symlinks", 4;
+
+    test_fixin(<<END,
+#!$dir/bin/interp
+
+blah blah blah
+END
+         sub {
+             is $_[0], "#!$dir/bin/interp\n", 'symlinked interpreter later in PATH not mangled';
+         }
+     );
+}
index 3d093fc..cfe49e5 100644 (file)
@@ -53,6 +53,9 @@ program - this is a program
 =cut
 
 1;
+END
+             'Big-Dummy/usrbin/interp'       => <<'END',
+This is a dummy interpreter
 END
 
              'Big-Dummy/test.pl'          => <<'END',
index d206e0b..e3bc00d 100755 (executable)
@@ -19,7 +19,7 @@ use Test::More tests => 3;
 
     pod2man("--perm_rw");
 
-    like $warnings, qr/^Option perm_rw requires an argument/;
+    like $warnings, qr/Option perm_rw requires an argument/;
 };
 
 
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/testrules.yml b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/testrules.yml
new file mode 100644 (file)
index 0000000..97fad8c
--- /dev/null
@@ -0,0 +1,11 @@
+---
+# TAP::Harness test rules
+# "t\02-xsdynamic.t" (and possibly "t\03-xsstatic.t") should *not* be run in parallel
+# ... allowing overlap of these tests causes race conditions which lead to intermittent failures
+seq:
+  - seq:
+    # serialize all tests in files matching "t/0*.t"
+    - t{\\,/}0*.t
+  - par:
+    # run all other tests in parallel
+    - **
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/bin/streamzip b/gnu/usr.bin/perl/cpan/IO-Compress/bin/streamzip
new file mode 100644 (file)
index 0000000..1a34fef
--- /dev/null
@@ -0,0 +1,212 @@
+#!/usr/bin/perl
+
+# Streaming zip
+
+use strict;
+use warnings;
+
+use IO::Compress::Zip qw(zip
+                         ZIP_CM_STORE
+                         ZIP_CM_DEFLATE
+                         ZIP_CM_BZIP2
+                         ZIP_CM_LZMA );
+use Getopt::Long;
+
+my $VERSION = '1.0';
+
+my $compression_method = ZIP_CM_DEFLATE;
+my $stream = 0;
+my $zipfile = '-';
+my $memberName = '-' ;
+my $zip64 = 0 ;
+
+GetOptions("zip64"          => \$zip64,
+           "method=s"       => \&lookupMethod,
+           "stream"         => \$stream,
+           "zipfile=s"      => \$zipfile,
+           "member-name=s"  => \$memberName,
+           'version'        => sub { print "$VERSION\n"; exit 0 },
+           'help'           => \&Usage,
+          )
+    or Usage();
+
+Usage()
+    if @ARGV;
+
+
+zip '-' => $zipfile,
+           Name   => $memberName,
+           Zip64  => $zip64,
+           Method => $compression_method,
+           Stream => $stream
+    or die "Error creating zip file '$zipfile': $\n" ;
+
+exit 0;
+
+sub lookupMethod
+{
+    my $name  = shift;
+    my $value = shift ;
+
+    my %valid = ( store   => ZIP_CM_STORE,
+                  deflate => ZIP_CM_DEFLATE,
+                  bzip2   => ZIP_CM_BZIP2,
+                  lzma    => ZIP_CM_LZMA,
+                );
+
+    my $method = $valid{ lc $value };
+
+    Usage("Unknown method '$value'")
+        if ! defined $method;
+
+    # If LZMA was rquested, check that it is available
+    if ($method == ZIP_CM_LZMA)
+    {
+        eval ' use IO::Compress::Adapter::Lzma';
+        die "Method =. LZMA needs IO::Compress::Adapter::Lzma\n"
+            if ! defined $IO::Compress::Lzma::VERSION;
+    }
+
+    $compression_method =  $method;
+}
+
+sub Usage
+{
+    die <<EOM;
+streamzip [OPTIONS]
+
+Stream data from stdin, compress into a Zip container, and stream to stdout.
+
+OPTIONS
+
+  -zipfile=F      Write zip container to the filename F
+  -member-name=M  member name [Default '-']
+  -zip64          Create a Zip64-compliant zip file [Default: No]
+                  Use Zip64 if input is greater than 4Gig.
+  -stream         Write a streamed zip file
+                  Only applies when 'zipfile' option is used. [Default: No]
+                  Always enabled when writing to stdout.
+  -method=M       Compress using method "M".
+                  Valid methods are
+                    store    Store without compression
+                    deflate  Use Deflate compression [Deflault]
+                    bzip2    Use Bzip2 compression
+                    lzma     Use LZMA compression [needs IO::Compress::Lzma]
+                  Lzma needs IO::Compress::Lzma to be installed.
+  -version        Display version number [$VERSION]
+
+Copyright (c) 2019 Paul Marquess. All rights reserved.
+
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+EOM
+}
+
+
+__END__
+=head1 NAME
+
+streamzip - create a zip file from stdin
+
+=head1 SYNOPSIS
+
+    producer | streamzip [opts] | consumer
+    producer | streamzip [opts] -zipfile=output.zip
+
+=head1 DESCRIPTION
+
+This program will read data from stdin, compress it into a zip container and,
+by default, write a I<streamed> zip file to stdout. No temporary files are created.
+
+The zip container written to stdout is, by necessity, written in streaming
+format.  Most programs that read Zip files can cope with a streamed zip file,
+but if interoperability is important, and your workflow allows you to write the 
+zip file directly to disk you can create a non-streamed zip file using the C<zipfile> option.
+
+=head2 OPTIONS
+
+=over 5
+
+=item -zip64
+
+Create a Zip64-compliant zip container.
+Use this option if the input is greater than 4Gig.
+
+Default is disabled.
+
+=item  -zipfile=F     
+
+Write zip container to the filename F.
+
+Use the C<Stream> option to enable the creation of a  streamed zip file.
+
+=item  -member-name=M  
+
+This option is used to name the "file" in the zip container.
+
+Default is '-'.
+
+=item  -stream         
+
+Ignored when writing to stdout.
+
+If the C<zipfile> option is specified, including this option
+will trigger the creation of a streamed zip file.
+
+Default: Always enabled when writing to stdout, otherwise disabled.
+
+=item  -method=M       
+
+Compress using method "M".
+
+Valid method names are
+
+    * store    Store without compression
+    * deflate  Use Deflate compression [Deflault]
+    * bzip2    Use Bzip2 compression
+    * lzma     Use LZMA compression 
+
+Note that Lzma compress needs IO::Compress::Lzma to be installed.
+
+Default is deflate.
+
+=item  -version        
+
+Display version number [$VERSION]
+
+=item -help
+
+Display help
+
+=back
+
+=head2 When to use a Streamed Zip File
+
+A Zip file created with streaming mode enabled allows you to create a zip file 
+in situations where you cannot seek backwards/forwards in the file. 
+
+A good examples is when you are
+serving dynamic content from a Web Server straight into a socket 
+without needing to create a temporary zip file in the filesystsm.
+
+Similarly if your workfow uses a Linux pipelined commands.
+
+=head1 SUPPORT
+
+General feedback/questions/bug reports should be sent to
+L<https://github.com/pmqs/IO-Compress/issues> (preferred) or
+L<https://rt.cpan.org/Public/Dist/Display.html?Name=IO-Compress>.
+
+
+=head1 AUTHOR
+
+Paul Marquess F<pmqs@cpan.org>.
+
+=head1 COPYRIGHT 
+
+Copyright (c) 2019 Paul Marquess. All rights reserved.
+
+This program is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself. 
+
index 33afa8e..cfc53d7 100755 (executable)
@@ -19,7 +19,7 @@ BEGIN {
     $extra = 1
         if eval { require Test::NoWarnings ;  import Test::NoWarnings; 1 };
 
-    plan tests => 101 + $extra ;
+    plan tests => 108 + $extra ;
 
     use_ok('IO::Compress::Zip', qw(:all)) ;
     use_ok('IO::Uncompress::Unzip', qw(unzip $UnzipError)) ;
@@ -360,3 +360,45 @@ for my $method (ZIP_CM_DEFLATE, ZIP_CM_STORE, ZIP_CM_BZIP2)
     is $u->getHeaderInfo()->{Name}, "0", "Name is '0'";
 }
 
+
+{
+    title "nexStream regression";
+    # https://github.com/pmqs/IO-Compress/issues/3
+
+    my $lex = new LexFile my $file1;
+
+    my $content1 = qq["organisation_path","collection_occasion_key","episode_key"\n] ;
+                 
+    my $zip = new IO::Compress::Zip $file1,
+                    Name => "one";
+    isa_ok $zip, "IO::Compress::Zip";
+
+    print $zip $content1;
+
+    $zip->newStream(Name=> "two");
+
+    my $content2 = <<EOM;
+"key","value"
+"version","2"
+"type","PMHC"
+EOM
+    print $zip $content2;
+
+    ok $zip->close(), "closed";                    
+
+
+    my $u = new IO::Uncompress::Unzip $file1, Append => 1, @_
+        or die "Cannot open $file1: $UnzipError";
+
+    isa_ok $u, "IO::Uncompress::Unzip";
+
+    my $name = $u->getHeaderInfo()->{Name};
+    
+    is $u->getHeaderInfo()->{Name}, "one", "Name is 'one'";
+
+    ok $u->nextStream(), "nextStream OK";
+
+    my $line = <$u>;
+
+    is $line, qq["key","value"\n], "got line 1 from second member";
+}
\ No newline at end of file
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/t/011-streamzip.t b/gnu/usr.bin/perl/cpan/IO-Compress/t/011-streamzip.t
new file mode 100644 (file)
index 0000000..df3fbfb
--- /dev/null
@@ -0,0 +1,118 @@
+BEGIN {
+    if ($ENV{PERL_CORE}) {
+       chdir 't' if -d 't';
+       @INC = ("../lib", "lib/compress");
+    }
+}
+
+use lib qw(t t/compress);
+
+use strict;
+use warnings;
+use bytes;
+
+use Test::More ;
+use CompTestUtils;
+use IO::Uncompress::Unzip 'unzip' ;
+
+BEGIN 
+{ 
+    plan(skip_all => "Needs Perl 5.005 or better - you have Perl $]" )
+        if $] < 5.005 ;
+    
+    # use Test::NoWarnings, if available
+    my $extra = 0 ;
+    $extra = 1
+        if eval { require Test::NoWarnings ;  import Test::NoWarnings; 1 };
+
+    plan tests => 8 + $extra ;
+}
+
+
+my $Inc = join " ", map qq["-I$_"] => @INC;
+$Inc = '"-MExtUtils::testlib"'
+    if ! $ENV{PERL_CORE} && eval " require ExtUtils::testlib; " ;
+
+my $Perl = ($ENV{'FULLPERL'} or $^X or 'perl') ;
+$Perl = qq["$Perl"] if $^O eq 'MSWin32' ;
+$Perl = "$Perl $Inc -w" ;
+#$Perl .= " -Mblib " ;
+my $binDir = $ENV{PERL_CORE} ? "../ext/IO-Compress/bin/"
+                             : "./bin/";
+
+my $hello1 = <<EOM ;
+hello
+this is 
+a test
+message
+x ttttt
+xuuuuuu
+the end
+EOM
+
+
+
+
+my $lex = new LexFile my $stderr ;
+
+
+sub check
+{
+    my $command = shift ;
+    my $expected = shift ;
+
+    my $lex = new LexFile my $stderr ;
+
+    my $cmd = "$command 2>$stderr";
+    my $stdout = `$cmd` ;
+
+    my $aok = 1 ;
+
+    $aok &= is $?, 0, "  exit status is 0" ;
+
+    $aok &= is readFile($stderr), '', "  no stderr" ;
+
+    $aok &= is $stdout, $expected, "  expected content is ok"
+        if defined $expected ;
+
+    if (! $aok) {
+        diag "Command line: $cmd";
+        my ($file, $line) = (caller)[1,2];
+        diag "Test called from $file, line $line";
+    }
+
+    1 while unlink $stderr;
+}
+
+
+# streamzip
+# ########
+
+{
+    title "streamzip" ;
+
+    my ($infile, $outfile);
+    my $lex = new LexFile $infile, $outfile ;
+
+    writeFile($infile, $hello1) ;
+    check "$Perl ${binDir}/streamzip <$infile >$outfile";
+
+    my $uncompressed ;
+    unzip $outfile => \$uncompressed;
+    is $uncompressed, $hello1;
+}
+
+{
+    title "streamzip" ;
+
+    my ($infile, $outfile);
+    my $lex = new LexFile $infile, $outfile ;
+
+    writeFile($infile, $hello1) ;
+    check "$Perl ${binDir}/streamzip -zipfile=$outfile <$infile";
+
+    my $uncompressed ;
+    unzip $outfile => \$uncompressed;
+    is $uncompressed, $hello1;
+}
index f3cb1a3..ae019c8 100755 (executable)
@@ -56,7 +56,7 @@ sub readWithGzip
         return 1 
     }
 
-    diag "'$comp' failed: $?";
+    diag "'$comp' failed: \$?=$? \$!=$!";
     return 0 ;
 }
 
@@ -80,7 +80,7 @@ sub writeWithGzip
     return 1 
         if system($comp) == 0 ;
 
-    diag "'$comp' failed: $?";
+    diag "'$comp' failed: \$?=$? \$!=$!";
     return 0 ;
 }
 
index 94676eb..7611da3 100755 (executable)
@@ -24,7 +24,7 @@ BEGIN {
     $extra = 1
         if eval { require Test::NoWarnings ;  import Test::NoWarnings; 1 };
 
-    plan tests => 219 + $extra ;
+    plan tests => 227 + $extra ;
 
     #use_ok('IO::Compress::Zip', qw(zip $ZipError :zip_method)) ;
     use_ok('IO::Compress::Zip', qw(:all)) ;
@@ -162,6 +162,55 @@ sub zipGetHeader
     is $hdr->{Name}, File::Spec->catfile("", "fred", "jim"), "  Name is '/fred/jim'" ;
 }
 
+{
+    title "Detect encrypted zip file";
+
+    my $files = "./t/" ;
+    $files = "./" if $ENV{PERL_CORE} ;
+    $files .= "files/";
+
+    my $zipfile = "$files/encrypt-standard.zip" ;
+    my $output;
+
+    ok ! unzip "$files/encrypt-standard.zip" => \$output ;
+    like $UnzipError, qr/Encrypted content not supported/ ;
+
+    ok ! unzip "$files/encrypt-aes.zip" => \$output ;
+    like $UnzipError, qr/Encrypted content not supported/ ;
+}
+
+{
+    title "jar file with deflated directory";
+
+    # Create Jar as follow
+    #   echo test > file && jar c file > jar.zip
+
+    # Note the deflated directory META-INF with length 0 & size 2
+    #
+    # $ unzip -vl t/files/jar.zip
+    # Archive:  t/files/jar.zip
+    #  Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
+    # --------  ------  ------- ---- ---------- ----- --------  ----
+    #        0  Defl:N        2   0% 2019-09-07 22:35 00000000  META-INF/
+    #       54  Defl:N       53   2% 2019-09-07 22:35 934e49ff  META-INF/MANIFEST.MF
+    #        5  Defl:N        7 -40% 2019-09-07 22:35 3bb935c6  file
+    # --------          -------  ---                            -------
+    #       59               62  -5%                            3 files
+
+
+    my $files = "./t/" ;
+    $files = "./" if $ENV{PERL_CORE} ;
+    $files .= "files/";
+
+    my $zipfile = "$files/jar.zip" ;
+    my $output;
+
+    ok unzip $zipfile => \$output ;
+
+    is $output, "" ;
+
+}
+
 for my $stream (0, 1)
 {
     for my $zip64 (0, 1)
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/t/107multi-zip-only.t b/gnu/usr.bin/perl/cpan/IO-Compress/t/107multi-zip-only.t
new file mode 100644 (file)
index 0000000..40c7fef
--- /dev/null
@@ -0,0 +1,102 @@
+
+use strict;
+use warnings;
+
+BEGIN {
+    if ($ENV{PERL_CORE}) {
+        chdir 't' if -d 't';
+        @INC = ("../lib", "lib/compress");
+    }
+}
+
+use lib qw(t t/compress);
+
+
+use Test::More ;
+use CompTestUtils;
+
+BEGIN {
+    # use Test::NoWarnings, if available
+    my $extra = 0 ;
+    $extra = 1
+        if eval { require Test::NoWarnings ;  import Test::NoWarnings; 1 };
+
+    plan tests => 21 + $extra ;
+
+    use_ok('IO::Compress::Zip', qw(zip $ZipError)) ;
+
+    use_ok('IO::Uncompress::Unzip', qw($UnzipError)) ;
+    use_ok('IO::Uncompress::AnyUncompress', qw($AnyUncompressError)) ;
+
+}
+
+    my @buffers ;
+    push @buffers, <<EOM ;
+hello world
+this is a test
+some more stuff on this line
+ad finally...
+EOM
+
+    push @buffers, <<EOM ;
+some more stuff
+line 2
+EOM
+
+    push @buffers, <<EOM ;
+even more stuff
+EOM
+
+
+my $name = "n1";
+my $lex = new LexFile my $zipfile ;
+
+my $x = new IO::Compress::Zip($zipfile, Name => $name++, AutoClose => 1);
+isa_ok $x, 'IO::Compress::Zip', '  $x' ;
+
+
+foreach my $buffer (@buffers) {
+    ok $x->write($buffer), "    Write OK" ;
+    # this will add an extra "empty" stream
+    ok $x->newStream(Name => $name ++), "    newStream OK" ;
+}
+ok $x->close, "  Close ok" ;
+
+push @buffers, undef;
+
+{
+    open F, ">>$zipfile";
+    print F "trailing";
+    close F;                    
+}
+
+my $u = new IO::Uncompress::Unzip $zipfile, Transparent => 1, MultiStream => 0
+    or die "Cannot open $zipfile: $UnzipError";
+
+my @names ;
+my $status;
+my $expname = "n1";
+my $ix = 0;
+
+for my $ix (1 .. 4)
+{
+    local $/ ;
+
+    my $n = $u->getHeaderInfo()->{Name};
+    is $n, $expname , "name is $expname";
+    is <$u>, $buffers[$ix-1], "payload ok";
+    ++ $expname;
+
+    $status = $u->nextStream()
+}
+
+{
+    local $/ ;
+
+    my $n = $u->getHeaderInfo()->{Name};
+    is $n, undef , "name is undef";
+    is <$u>, "trailing", "payload ok";
+}
+
+die "Error processing $zipfile: $!\n"
+    if $status < 0 ;
\ No newline at end of file
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/t/112utf8-zip.t b/gnu/usr.bin/perl/cpan/IO-Compress/t/112utf8-zip.t
new file mode 100644 (file)
index 0000000..f90a3cb
--- /dev/null
@@ -0,0 +1,220 @@
+BEGIN {
+    if ($ENV{PERL_CORE}) {
+        chdir 't' if -d 't';
+        @INC = ("../lib", "lib/compress");
+    }
+}
+
+use lib qw(t t/compress);
+use strict;
+use warnings;
+use bytes;
+
+use Test::More ;
+use CompTestUtils;
+use Data::Dumper;
+
+use IO::Compress::Zip     qw($ZipError);
+use IO::Uncompress::Unzip qw($UnzipError);
+
+BEGIN {
+    plan skip_all => "Encode is not available"
+        if $] < 5.006 ;
+
+    eval { require Encode; Encode->import(); };
+
+    plan skip_all => "Encode is not available"
+        if $@ ;
+
+    plan skip_all => "Encode not woking in perl $]"
+        if $] >= 5.008 && $] < 5.008004 ;
+
+    # use Test::NoWarnings, if available
+    my $extra = 0 ;
+    $extra = 1
+        if eval { require Test::NoWarnings ;  import Test::NoWarnings; 1 };
+
+    plan tests => 28 + $extra;
+}
+
+{
+    title "EFS set in zip: Create a simple zip - language encoding flag set";
+
+    my $lex = new LexFile my $file1;
+
+    my @names = ( 'alpha \N{GREEK SMALL LETTER ALPHA}',
+                  'beta \N{GREEK SMALL LETTER BETA}',
+                  'gamma \N{GREEK SMALL LETTER GAMMA}',
+                  'delta \N{GREEK SMALL LETTER DELTA}'
+                ) ;
+
+    my @encoded = map { Encode::encode_utf8($_) } @names; 
+
+    my @n = @names;
+
+    my $zip = new IO::Compress::Zip $file1,
+                    Name =>  $names[0], Efs => 1;
+
+    my $content = 'Hello, world!';
+    ok $zip->print($content), "print";
+    $zip->newStream(Name => $names[1], Efs => 1);
+    ok $zip->print($content), "print";
+    $zip->newStream(Name => $names[2], Efs => 1);
+    ok $zip->print($content), "print";
+    $zip->newStream(Name => $names[3], Efs => 1);
+    ok $zip->print($content), "print";
+    ok $zip->close(), "closed";
+
+    {
+        my $u = new IO::Uncompress::Unzip $file1, Efs => 1
+            or die "Cannot open $file1: $UnzipError";
+
+        my $status;
+        my @efs;
+        my @unzip_names;
+        for ($status = 1; $status > 0; $status = $u->nextStream(Efs => 1))
+        {
+            push @efs, $u->getHeaderInfo()->{efs};
+            push @unzip_names, $u->getHeaderInfo()->{Name};
+        }
+
+        die "Error processing $file1: $status $!\n"
+            if $status < 0;
+
+        is_deeply \@efs, [1, 1, 1, 1], "language encoding flag set"
+            or diag "Got " . Dumper(\@efs);
+        is_deeply \@unzip_names, [@names], "Names round tripped"
+            or diag "Got " . Dumper(\@unzip_names);
+    }
+
+    {
+        my $u = new IO::Uncompress::Unzip $file1, Efs => 0
+            or die "Cannot open $file1: $UnzipError";
+
+        my $status;
+        my @efs;
+        my @unzip_names;
+        for ($status = 1; $status > 0; $status = $u->nextStream(Efs => 0))
+        {
+            push @efs, $u->getHeaderInfo()->{efs};
+            push @unzip_names, $u->getHeaderInfo()->{Name};
+        }
+
+        die "Error processing $file1: $status $!\n"
+            if $status < 0;
+
+        is_deeply \@efs, [1, 1, 1, 1], "language encoding flag set"
+            or diag "Got " . Dumper(\@efs);
+        is_deeply \@unzip_names, [@names], "Names round tripped"
+            or diag "Got " . Dumper(\@unzip_names);
+    }    
+}
+
+
+{
+    title "Create a simple zip - language encoding flag not set";
+
+    my $lex = new LexFile my $file1;
+
+    my @names = ( 'alpha \N{GREEK SMALL LETTER ALPHA}',
+                  'beta \N{GREEK SMALL LETTER BETA}',
+                  'gamma \N{GREEK SMALL LETTER GAMMA}',
+                  'delta \N{GREEK SMALL LETTER DELTA}'
+                ) ;
+
+    my @n = @names;
+
+    my $zip = new IO::Compress::Zip $file1,
+                    Name =>  $names[0], Efs => 0;
+
+    my $content = 'Hello, world!';
+    ok $zip->print($content), "print";
+    $zip->newStream(Name => $names[1], Efs => 0);
+    ok $zip->print($content), "print";
+    $zip->newStream(Name => $names[2], Efs => 0);
+    ok $zip->print($content), "print";
+    $zip->newStream(Name => $names[3]);
+    ok $zip->print($content), "print";
+    ok $zip->close(), "closed";
+
+    my $u = new IO::Uncompress::Unzip $file1, Efs => 0
+        or die "Cannot open $file1: $UnzipError";
+
+    my $status;
+    my @efs;
+    my @unzip_names;
+    for ($status = 1; $status > 0; $status = $u->nextStream())
+    {
+        push @efs, $u->getHeaderInfo()->{efs};
+        push @unzip_names, $u->getHeaderInfo()->{Name};
+    }
+
+    die "Error processing $file1: $status $!\n"
+        if $status < 0;
+
+    is_deeply \@efs, [0, 0, 0, 0], "language encoding flag set"
+        or diag "Got " . Dumper(\@efs);
+    is_deeply \@unzip_names, [@names], "Names round tripped"
+        or diag "Got " . Dumper(\@unzip_names);
+}
+
+{
+    title "zip: EFS => 0 filename not valid utf8 - language encoding flag not set";
+
+    my $lex = new LexFile my $file1;
+
+    # Invalid UTF8
+    my $name = "a\xFF\x{100}";
+    
+    my $zip = new IO::Compress::Zip $file1,
+                    Name =>  $name, Efs => 0  ;
+
+    ok $zip->print("abcd"), "print";
+    ok $zip->close(), "closed";
+
+    my $u = new IO::Uncompress::Unzip $file1
+        or die "Cannot open $file1: $UnzipError";  
+
+    ok $u->getHeaderInfo()->{Name} eq $name, "got bad filename";
+}
+
+{
+    title "unzip: EFS => 0 filename not valid utf8 - language encoding flag set";
+
+    my $filename = "t/files/bad-efs.zip" ;
+    my $name = "\xF0\xA4\xAD";
+
+    my $u = new IO::Uncompress::Unzip $filename, efs => 0
+        or die "Cannot open $filename: $UnzipError";  
+
+    ok $u->getHeaderInfo()->{Name} eq $name, "got bad filename";
+}
+
+{
+    title "unzip: EFS => 1 filename not valid utf8 - language encoding flag set";
+
+    my $filename = "t/files/bad-efs.zip" ;
+    my $name = "\xF0\xA4\xAD";
+   
+    eval { my $u = new IO::Uncompress::Unzip $filename, efs => 1
+        or die "Cannot open $filename: $UnzipError" };
+
+    like $@, qr/Zip Filename not UTF-8/,
+            "  Zip Filename not UTF-8" ;
+
+}
+
+{
+    title "EFS => 1 - filename not valid utf8 - catch bad content writing to zip";
+
+    my $lex = new LexFile my $file1;
+
+    # Invalid UTF8
+    my $name = "a\xFF\x{100}";
+    
+    eval { my $zip = new IO::Compress::Zip $file1,
+                    Name =>  $name, Efs => 1 } ;
+
+    like $@,  qr/Wide character in zip filename/, 
+                 "  wide characters in zip filename";
+}
\ No newline at end of file
index 4d587fb..48129a7 100644 (file)
@@ -216,7 +216,8 @@ EOM
                         ok $gz->eof(), "      eof()";
                         is $gz->streamCount(), $stream, "    streamCount is $stream"
                             or diag "Stream count is " . $gz->streamCount();
-                        ok $un eq $buff, "    expected output" ;
+                        is $un, $buff, "    expected output" 
+                            or diag "Stream count is " . $gz->streamCount();                        ;
                         #is $gz->tell(), length $buff, "    tell is ok";
                         is $gz->nextStream(), 1, "    nextStream ok";
                         is $gz->tell(), 0, "    tell is 0";
index 01d2d65..3d6a062 100755 (executable)
@@ -439,7 +439,7 @@ foreach my $stdio ( ['-', '-'], [*STDIN, *STDOUT])
 
     # missing parameters
     eval ' $fil = gzopen()  ' ;
-    like $@, mkEvalErr('Not enough arguments for Compress::Zlib::gzopen'),
+    like $@, mkEvalErr('Not enough arguments .*? Compress::Zlib::gzopen'),
         '  gzopen with missing mode fails' ;
 
     # unknown parameters
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/t/files/bad-efs.zip b/gnu/usr.bin/perl/cpan/IO-Compress/t/files/bad-efs.zip
new file mode 100644 (file)
index 0000000..642830e
Binary files /dev/null and b/gnu/usr.bin/perl/cpan/IO-Compress/t/files/bad-efs.zip differ
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/t/files/encrypt-aes.zip b/gnu/usr.bin/perl/cpan/IO-Compress/t/files/encrypt-aes.zip
new file mode 100644 (file)
index 0000000..7a303da
Binary files /dev/null and b/gnu/usr.bin/perl/cpan/IO-Compress/t/files/encrypt-aes.zip differ
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/t/files/encrypt-standard.zip b/gnu/usr.bin/perl/cpan/IO-Compress/t/files/encrypt-standard.zip
new file mode 100644 (file)
index 0000000..ba07a08
Binary files /dev/null and b/gnu/usr.bin/perl/cpan/IO-Compress/t/files/encrypt-standard.zip differ
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/t/files/jar.zip b/gnu/usr.bin/perl/cpan/IO-Compress/t/files/jar.zip
new file mode 100644 (file)
index 0000000..e471d42
Binary files /dev/null and b/gnu/usr.bin/perl/cpan/IO-Compress/t/files/jar.zip differ
index 8b98c95..8ef6949 100644 (file)
@@ -10,7 +10,7 @@ overload::import('overload',
     fallback => 1,
 );
 
-$JSON::PP::Boolean::VERSION = '4.02';
+$JSON::PP::Boolean::VERSION = '4.04';
 
 1;
 
index 883f31f..fde2812 100644 (file)
@@ -4,7 +4,7 @@ use 5.006001;
 use strict;
 use warnings;
 
-our $VERSION = '1.999816';
+our $VERSION = '1.999818';
 
 use Carp;
 
@@ -251,13 +251,6 @@ use overload
 
   ;
 
-# Do we need api_version() at all, now that we have a virtual parent class that
-# will provide any missing methods? Fixme!
-
-sub api_version () {
-    croak "@{[(caller 0)[3]]} method not implemented";
-}
-
 sub _new {
     croak "@{[(caller 0)[3]]} method not implemented";
 }
@@ -386,6 +379,20 @@ sub _digit {
     substr($class ->_str($x), -($n+1), 1);
 }
 
+sub _digitsum {
+    my ($class, $x) = @_;
+
+    my $len = $class -> _len($x);
+    my $sum = $class -> _zero();
+    for (my $i = 0 ; $i < $len ; ++$i) {
+        my $digit = $class -> _digit($x, $i);
+        $digit = $class -> _new($digit);
+        $sum = $class -> _add($sum, $digit);
+    }
+
+    return $sum;
+}
+
 sub _zeros {
     my ($class, $x) = @_;
     my $str = $class -> _str($x);
@@ -1428,16 +1435,20 @@ sub _to_base {
     if (@_) {
         $collseq = shift();
     } else {
-        if ($class -> _acmp($base, $class -> _new("62")) <= 0) {
-            $collseq = '0123456789' . 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-                                    . 'abcdefghijklmnopqrstuvwxyz';
+        if ($class -> _acmp($base, $class -> _new("94")) <= 0) {
+            $collseq = '0123456789'                     #  48 ..  57
+                     . 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'     #  65 ..  90
+                     . 'abcdefghijklmnopqrstuvwxyz'     #  97 .. 122
+                     . '!"#$%&\'()*+,-./'               #  33 ..  47
+                     . ':;<=>?@'                        #  58 ..  64
+                     . '[\\]^_`'                        #  91 ..  96
+                     . '{|}~';                          # 123 .. 126
         } else {
-            croak "When base > 62, a collation sequence must be given";
+            croak "When base > 94, a collation sequence must be given";
         }
     }
 
     my @collseq = split '', $collseq;
-    my %collseq = map { $_ => $collseq[$_] } 0 .. $#collseq;
 
     my $str   = '';
     my $tmp   = $class -> _copy($x);
@@ -1573,11 +1584,16 @@ sub _from_base {
         if ($class -> _acmp($base, $class -> _new("36")) <= 0) {
             $str = uc $str;
             $collseq = '0123456789' . 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
-        } elsif ($class -> _acmp($base, $class -> _new("62")) <= 0) {
-            $collseq = '0123456789' . 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-                                    . 'abcdefghijklmnopqrstuvwxyz';
+        } elsif ($class -> _acmp($base, $class -> _new("94")) <= 0) {
+            $collseq = '0123456789'                     #  48 ..  57
+                     . 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'     #  65 ..  90
+                     . 'abcdefghijklmnopqrstuvwxyz'     #  97 .. 122
+                     . '!"#$%&\'()*+,-./'               #  33 ..  47
+                     . ':;<=>?@'                        #  58 ..  64
+                     . '[\\]^_`'                        #  91 ..  96
+                     . '{|}~';                          # 123 .. 126
         } else {
-            croak "When base > 62, a collation sequence must be given";
+            croak "When base > 94, a collation sequence must be given";
         }
         $collseq = substr $collseq, 0, $class -> _num($base);
     }
@@ -1920,11 +1936,8 @@ comparison routines.
 
 =item CLASS-E<gt>api_version()
 
-Return API version as a Perl scalar, 1 for Math::BigInt v1.70, 2 for
-Math::BigInt v1.83.
-
-This method is no longer used. Methods that are not implemented by a subclass
-will be inherited from this class.
+This method is no longer used and can be omitted. Methods that are not
+implemented by a subclass will be inherited from this class.
 
 =back
 
@@ -1986,10 +1999,20 @@ COLLSEQ. Each character in STR represents a numerical value identical to the
 character's position in COLLSEQ. All characters in STR must be present in
 COLLSEQ.
 
-If BASE is less than or equal to 62, and a collation sequence is not specified,
-a default collation sequence consisting of the 62 characters 0..9, A..Z, and
-a..z is used. If the default collation sequence is used, and the BASE is less
-than or equal to 36, the letter case in STR is ignored.
+If BASE is less than or equal to 94, and a collation sequence is not specified,
+the following default collation sequence is used. It contains of all the 94
+printable ASCII characters except space/blank:
+
+    0123456789                  # ASCII  48 to  57
+    ABCDEFGHIJKLMNOPQRSTUVWXYZ  # ASCII  65 to  90
+    abcdefghijklmnopqrstuvwxyz  # ASCII  97 to 122
+    !"#$%&'()*+,-./             # ASCII  33 to  47
+    :;<=>?@                     # ASCII  58 to  64
+    [\]^_`                      # ASCII  91 to  96
+    {|}~                        # ASCII 123 to 126
+
+If the default collation sequence is used, and the BASE is less than or equal
+to 36, the letter case in STR is ignored.
 
 For instance, with base 3 and collation sequence "-/|", the character "-"
 represents 0, "/" represents 1, and "|" represents 2. So if STR is "/|-", the
@@ -2005,10 +2028,12 @@ conversion. All examples return 250.
 
 Some more examples, all returning 250:
 
-    $x = $class -> _from_base("100021", 3, "012")
-    $x = $class -> _from_base("3322", 4, "0123")
-    $x = $class -> _from_base("2000", 5, "01234")
+    $x = $class -> _from_base("100021", 3)
+    $x = $class -> _from_base("3322", 4)
+    $x = $class -> _from_base("2000", 5)
     $x = $class -> _from_base("caaa", 5, "abcde")
+    $x = $class -> _from_base("42", 62)
+    $x = $class -> _from_base("2!", 94)
 
 =back
 
@@ -2301,6 +2326,10 @@ from the left (most significant digit). If $obj represents the number 123, then
     CLASS->_digit($obj,  2)     # returns 1
     CLASS->_digit($obj, -1)     # returns 1
 
+=item CLASS-E<gt>_digitsum(OBJ)
+
+Returns the sum of the base 10 digits.
+
 =item CLASS-E<gt>_check(OBJ)
 
 Returns true if the object is invalid and false otherwise. Preferably, the true
@@ -2394,11 +2423,11 @@ L<http://annocpan.org/dist/Math-BigInt>
 
 =item * CPAN Ratings
 
-L<http://cpanratings.perl.org/dist/Math-BigInt>
+L<https://cpanratings.perl.org/dist/Math-BigInt>
 
-=item * Search CPAN
+=item * MetaCPAN
 
-L<http://search.cpan.org/dist/Math-BigInt/>
+L<https://metacpan.org/release/Math-BigInt>
 
 =item * CPAN Testers Matrix
 
index 73b79d9..f521e52 100644 (file)
@@ -17,11 +17,6 @@ my $BASE_LEN = 9;
 my $BASE     = 0 + ("1" . ("0" x $BASE_LEN));
 my $MAX_VAL  = $BASE - 1;
 
-# Do we need api_version() at all, now that we have a virtual parent class that
-# will provide any missing methods? Fixme!
-
-sub api_version () { 2; }
-
 sub _new {
     my ($class, $str) = @_;
     croak "Invalid input string '$str'" unless $str =~ /^([1-9]\d*|0)\z/;
@@ -490,529 +485,4 @@ sub _check {
     return 0;
 }
 
-##############################################################################
-##############################################################################
-
 1;
-
-__END__
-
-=pod
-
-=head1 NAME
-
-Math::BigInt::Calc - Pure Perl module to support Math::BigInt
-
-=head1 SYNOPSIS
-
-This library provides support for big integer calculations. It is not
-intended to be used by other modules. Other modules which support the same
-API (see below) can also be used to support Math::BigInt, like
-Math::BigInt::GMP and Math::BigInt::Pari.
-
-=head1 DESCRIPTION
-
-In this library, the numbers are represented in base B = 10**N, where N is
-the largest possible value that does not cause overflow in the intermediate
-computations. The base B elements are stored in an array, with the least
-significant element stored in array element zero. There are no leading zero
-elements, except a single zero element when the number is zero.
-
-For instance, if B = 10000, the number 1234567890 is represented internally
-as [3456, 7890, 12].
-
-=head1 THE Math::BigInt API
-
-In order to allow for multiple big integer libraries, Math::BigInt was
-rewritten to use a plug-in library for core math routines. Any module which
-conforms to the API can be used by Math::BigInt by using this in your program:
-
-        use Math::BigInt lib => 'libname';
-
-'libname' is either the long name, like 'Math::BigInt::Pari', or only the short
-version, like 'Pari'.
-
-=head2 General Notes
-
-A library only needs to deal with unsigned big integers. Testing of input
-parameter validity is done by the caller, so there is no need to worry about
-underflow (e.g., in C<_sub()> and C<_dec()>) nor about division by zero (e.g.,
-in C<_div()>) or similar cases.
-
-For some methods, the first parameter can be modified. That includes the
-possibility that you return a reference to a completely different object
-instead. Although keeping the reference and just changing its contents is
-preferred over creating and returning a different reference.
-
-Return values are always objects, strings, Perl scalars, or true/false for
-comparison routines.
-
-=head2 API version 1
-
-The following methods must be defined in order to support the use by
-Math::BigInt v1.70 or later.
-
-=head3 API version
-
-=over 4
-
-=item I<api_version()>
-
-Return API version as a Perl scalar, 1 for Math::BigInt v1.70, 2 for
-Math::BigInt v1.83.
-
-=back
-
-=head3 Constructors
-
-=over 4
-
-=item I<_new(STR)>
-
-Convert a string representing an unsigned decimal number to an object
-representing the same number. The input is normalize, i.e., it matches
-C<^(0|[1-9]\d*)$>.
-
-=item I<_zero()>
-
-Return an object representing the number zero.
-
-=item I<_one()>
-
-Return an object representing the number one.
-
-=item I<_two()>
-
-Return an object representing the number two.
-
-=item I<_ten()>
-
-Return an object representing the number ten.
-
-=item I<_from_bin(STR)>
-
-Return an object given a string representing a binary number. The input has a
-'0b' prefix and matches the regular expression C<^0[bB](0|1[01]*)$>.
-
-=item I<_from_oct(STR)>
-
-Return an object given a string representing an octal number. The input has a
-'0' prefix and matches the regular expression C<^0[1-7]*$>.
-
-=item I<_from_hex(STR)>
-
-Return an object given a string representing a hexadecimal number. The input
-has a '0x' prefix and matches the regular expression
-C<^0x(0|[1-9a-fA-F][\da-fA-F]*)$>.
-
-=back
-
-=head3 Mathematical functions
-
-Each of these methods may modify the first input argument, except I<_bgcd()>,
-which shall not modify any input argument, and I<_sub()> which may modify the
-second input argument.
-
-=over 4
-
-=item I<_add(OBJ1, OBJ2)>
-
-Returns the result of adding OBJ2 to OBJ1.
-
-=item I<_mul(OBJ1, OBJ2)>
-
-Returns the result of multiplying OBJ2 and OBJ1.
-
-=item I<_div(OBJ1, OBJ2)>
-
-Returns the result of dividing OBJ1 by OBJ2 and truncating the result to an
-integer.
-
-=item I<_sub(OBJ1, OBJ2, FLAG)>
-
-=item I<_sub(OBJ1, OBJ2)>
-
-Returns the result of subtracting OBJ2 by OBJ1. If C<flag> is false or omitted,
-OBJ1 might be modified. If C<flag> is true, OBJ2 might be modified.
-
-=item I<_dec(OBJ)>
-
-Decrement OBJ by one.
-
-=item I<_inc(OBJ)>
-
-Increment OBJ by one.
-
-=item I<_mod(OBJ1, OBJ2)>
-
-Return OBJ1 modulo OBJ2, i.e., the remainder after dividing OBJ1 by OBJ2.
-
-=item I<_sqrt(OBJ)>
-
-Return the square root of the object, truncated to integer.
-
-=item I<_root(OBJ, N)>
-
-Return Nth root of the object, truncated to int. N is E<gt>= 3.
-
-=item I<_fac(OBJ)>
-
-Return factorial of object (1*2*3*4*...).
-
-=item I<_pow(OBJ1, OBJ2)>
-
-Return OBJ1 to the power of OBJ2. By convention, 0**0 = 1.
-
-=item I<_modinv(OBJ1, OBJ2)>
-
-Return modular multiplicative inverse, i.e., return OBJ3 so that
-
-    (OBJ3 * OBJ1) % OBJ2 = 1 % OBJ2
-
-The result is returned as two arguments. If the modular multiplicative
-inverse does not exist, both arguments are undefined. Otherwise, the
-arguments are a number (object) and its sign ("+" or "-").
-
-The output value, with its sign, must either be a positive value in the
-range 1,2,...,OBJ2-1 or the same value subtracted OBJ2. For instance, if the
-input arguments are objects representing the numbers 7 and 5, the method
-must either return an object representing the number 3 and a "+" sign, since
-(3*7) % 5 = 1 % 5, or an object representing the number 2 and "-" sign,
-since (-2*7) % 5 = 1 % 5.
-
-=item I<_modpow(OBJ1, OBJ2, OBJ3)>
-
-Return modular exponentiation, (OBJ1 ** OBJ2) % OBJ3.
-
-=item I<_rsft(OBJ, N, B)>
-
-Shift object N digits right in base B and return the resulting object. This is
-equivalent to performing integer division by B**N and discarding the remainder,
-except that it might be much faster, depending on how the number is represented
-internally.
-
-For instance, if the object $obj represents the hexadecimal number 0xabcde,
-then C<< $obj->_rsft(2, 16) >> returns an object representing the number 0xabc.
-The "remainer", 0xde, is discarded and not returned.
-
-=item I<_lsft(OBJ, N, B)>
-
-Shift the object N digits left in base B. This is equivalent to multiplying by
-B**N, except that it might be much faster, depending on how the number is
-represented internally.
-
-=item I<_log_int(OBJ, B)>
-
-Return integer log of OBJ to base BASE. This method has two output arguments,
-the OBJECT and a STATUS. The STATUS is Perl scalar; it is 1 if OBJ is the exact
-result, 0 if the result was truncted to give OBJ, and undef if it is unknown
-whether OBJ is the exact result.
-
-=item I<_gcd(OBJ1, OBJ2)>
-
-Return the greatest common divisor of OBJ1 and OBJ2.
-
-=back
-
-=head3 Bitwise operators
-
-Each of these methods may modify the first input argument.
-
-=over 4
-
-=item I<_and(OBJ1, OBJ2)>
-
-Return bitwise and. If necessary, the smallest number is padded with leading
-zeros.
-
-=item I<_or(OBJ1, OBJ2)>
-
-Return bitwise or. If necessary, the smallest number is padded with leading
-zeros.
-
-=item I<_xor(OBJ1, OBJ2)>
-
-Return bitwise exclusive or. If necessary, the smallest number is padded
-with leading zeros.
-
-=back
-
-=head3 Boolean operators
-
-=over 4
-
-=item I<_is_zero(OBJ)>
-
-Returns a true value if OBJ is zero, and false value otherwise.
-
-=item I<_is_one(OBJ)>
-
-Returns a true value if OBJ is one, and false value otherwise.
-
-=item I<_is_two(OBJ)>
-
-Returns a true value if OBJ is two, and false value otherwise.
-
-=item I<_is_ten(OBJ)>
-
-Returns a true value if OBJ is ten, and false value otherwise.
-
-=item I<_is_even(OBJ)>
-
-Return a true value if OBJ is an even integer, and a false value otherwise.
-
-=item I<_is_odd(OBJ)>
-
-Return a true value if OBJ is an even integer, and a false value otherwise.
-
-=item I<_acmp(OBJ1, OBJ2)>
-
-Compare OBJ1 and OBJ2 and return -1, 0, or 1, if OBJ1 is less than, equal
-to, or larger than OBJ2, respectively.
-
-=back
-
-=head3 String conversion
-
-=over 4
-
-=item I<_str(OBJ)>
-
-Return a string representing the object. The returned string should have no
-leading zeros, i.e., it should match C<^(0|[1-9]\d*)$>.
-
-=item I<_as_bin(OBJ)>
-
-Return the binary string representation of the number. The string must have a
-'0b' prefix.
-
-=item I<_as_oct(OBJ)>
-
-Return the octal string representation of the number. The string must have
-a '0x' prefix.
-
-Note: This method was required from Math::BigInt version 1.78, but the required
-API version number was not incremented, so there are older libraries that
-support API version 1, but do not support C<_as_oct()>.
-
-=item I<_as_hex(OBJ)>
-
-Return the hexadecimal string representation of the number. The string must
-have a '0x' prefix.
-
-=back
-
-=head3 Numeric conversion
-
-=over 4
-
-=item I<_num(OBJ)>
-
-Given an object, return a Perl scalar number (int/float) representing this
-number.
-
-=back
-
-=head3 Miscellaneous
-
-=over 4
-
-=item I<_copy(OBJ)>
-
-Return a true copy of the object.
-
-=item I<_len(OBJ)>
-
-Returns the number of the decimal digits in the number. The output is a
-Perl scalar.
-
-=item I<_zeros(OBJ)>
-
-Return the number of trailing decimal zeros. The output is a Perl scalar.
-
-=item I<_digit(OBJ, N)>
-
-Return the Nth digit as a Perl scalar. N is a Perl scalar, where zero refers to
-the rightmost (least significant) digit, and negative values count from the
-left (most significant digit). If $obj represents the number 123, then
-I<$obj->_digit(0)> is 3 and I<_digit(123, -1)> is 1.
-
-=item I<_check(OBJ)>
-
-Return a true value if the object is OK, and a false value otherwise. This is a
-check routine to test the internal state of the object for corruption.
-
-=back
-
-=head2 API version 2
-
-The following methods are required for an API version of 2 or greater.
-
-=head3 Constructors
-
-=over 4
-
-=item I<_1ex(N)>
-
-Return an object representing the number 10**N where N E<gt>= 0 is a Perl
-scalar.
-
-=back
-
-=head3 Mathematical functions
-
-=over 4
-
-=item I<_nok(OBJ1, OBJ2)>
-
-Return the binomial coefficient OBJ1 over OBJ1.
-
-=back
-
-=head3 Miscellaneous
-
-=over 4
-
-=item I<_alen(OBJ)>
-
-Return the approximate number of decimal digits of the object. The output is
-one Perl scalar.
-
-=back
-
-=head2 API optional methods
-
-The following methods are optional, and can be defined if the underlying lib
-has a fast way to do them. If undefined, Math::BigInt will use pure Perl (hence
-slow) fallback routines to emulate these:
-
-=head3 Signed bitwise operators.
-
-Each of these methods may modify the first input argument.
-
-=over 4
-
-=item I<_signed_or(OBJ1, OBJ2, SIGN1, SIGN2)>
-
-Return the signed bitwise or.
-
-=item I<_signed_and(OBJ1, OBJ2, SIGN1, SIGN2)>
-
-Return the signed bitwise and.
-
-=item I<_signed_xor(OBJ1, OBJ2, SIGN1, SIGN2)>
-
-Return the signed bitwise exclusive or.
-
-=back
-
-=head1 WRAP YOUR OWN
-
-If you want to port your own favourite c-lib for big numbers to the
-Math::BigInt interface, you can take any of the already existing modules as a
-rough guideline. You should really wrap up the latest Math::BigInt and
-Math::BigFloat testsuites with your module, and replace in them any of the
-following:
-
-        use Math::BigInt;
-
-by this:
-
-        use Math::BigInt lib => 'yourlib';
-
-This way you ensure that your library really works 100% within Math::BigInt.
-
-=head1 BUGS
-
-Please report any bugs or feature requests to
-C<bug-math-bigint at rt.cpan.org>, or through the web interface at
-L<https://rt.cpan.org/Ticket/Create.html?Queue=Math-BigInt>
-(requires login).
-We will be notified, and then you'll automatically be notified of progress on
-your bug as I make changes.
-
-=head1 SUPPORT
-
-You can find documentation for this module with the perldoc command.
-
-    perldoc Math::BigInt::Calc
-
-You can also look for information at:
-
-=over 4
-
-=item * RT: CPAN's request tracker
-
-L<https://rt.cpan.org/Public/Dist/Display.html?Name=Math-BigInt>
-
-=item * AnnoCPAN: Annotated CPAN documentation
-
-L<http://annocpan.org/dist/Math-BigInt>
-
-=item * CPAN Ratings
-
-L<http://cpanratings.perl.org/dist/Math-BigInt>
-
-=item * Search CPAN
-
-L<http://search.cpan.org/dist/Math-BigInt/>
-
-=item * CPAN Testers Matrix
-
-L<http://matrix.cpantesters.org/?dist=Math-BigInt>
-
-=item * The Bignum mailing list
-
-=over 4
-
-=item * Post to mailing list
-
-C<bignum at lists.scsys.co.uk>
-
-=item * View mailing list
-
-L<http://lists.scsys.co.uk/pipermail/bignum/>
-
-=item * Subscribe/Unsubscribe
-
-L<http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/bignum>
-
-=back
-
-=back
-
-=head1 LICENSE
-
-This program is free software; you may redistribute it and/or modify it under
-the same terms as Perl itself.
-
-=head1 AUTHORS
-
-=over 4
-
-=item *
-
-Original math code by Mark Biggar, rewritten by Tels L<http://bloodgate.com/>
-in late 2000.
-
-=item *
-
-Separated from BigInt and shaped API with the help of John Peacock.
-
-=item *
-
-Fixed, speed-up, streamlined and enhanced by Tels 2001 - 2007.
-
-=item *
-
-API documentation corrected and extended by Peter John Acklam,
-E<lt>pjacklam@online.noE<gt>
-
-=back
-
-=head1 SEE ALSO
-
-L<Math::BigInt>, L<Math::BigFloat>, L<Math::BigInt::GMP>,
-L<Math::BigInt::FastCalc> and L<Math::BigInt::Pari>.
-
-=cut
diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/backermann-mbi.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/backermann-mbi.t
new file mode 100644 (file)
index 0000000..45fcac6
--- /dev/null
@@ -0,0 +1,507 @@
+#!perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 858;
+
+my $class;
+
+BEGIN {
+    $class = 'Math::BigInt';
+    use_ok($class);
+}
+
+can_ok($class, 'backermann', 'ackermann');
+
+while (<DATA>) {
+    s/#.*$//;                   # remove comments
+    s/\s+$//;                   # remove trailing whitespace
+    next unless length;         # skip empty lines
+
+    my ($m, $n, $expected) = split /:/;
+
+    # backermann() modifies the invocand.
+
+    {
+        my ($x, $y);
+        my $test = qq|\$x = $class->new("$m"); \$y = \$x->backermann("$n");|;
+
+        subtest $test,
+          sub {
+              plan tests => 4;
+
+              eval $test;
+              is($@, "", "'$test' gives emtpy \$\@");
+
+              is(ref($y), $class,
+                 "'$test' output arg is a $class");
+
+              is($y -> bstr(), $expected,
+                 "'$test' output arg has the right value");
+
+              is($x -> bstr(), $expected,
+                 "'$test' invocand has the right value");
+          };
+    }
+
+    # ackermann() does not modify the invocand.
+
+    {
+        my ($x, $y);
+        my $test = qq|\$x = $class->new("$m"); \$y = \$x->ackermann("$n");|;
+
+        subtest $test,
+          sub {
+              plan tests => 4;
+
+              eval $test;
+              is($@, "", "'$test' gives emtpy \$\@");
+
+              is(ref($y), $class,
+                 "'$test' output arg is a $class");
+
+              is($y -> bstr(), $expected,
+                 "'$test' output arg has the right value");
+
+              is($x -> bstr(), $m,
+                 "'$test' invocand has the right value");
+          };
+    }
+}
+
+__DATA__
+
+0:0:1
+0:1:2
+0:2:3
+0:3:4
+0:4:5
+0:5:6
+0:6:7
+0:7:8
+0:8:9
+0:9:10
+0:10:11
+0:11:12
+0:12:13
+0:13:14
+0:14:15
+0:15:16
+0:16:17
+0:17:18
+0:18:19
+0:19:20
+0:20:21
+0:21:22
+0:22:23
+0:23:24
+0:24:25
+0:25:26
+0:26:27
+0:27:28
+0:28:29
+0:29:30
+0:30:31
+0:31:32
+0:32:33
+0:33:34
+0:34:35
+0:35:36
+0:36:37
+0:37:38
+0:38:39
+0:39:40
+0:40:41
+0:41:42
+0:42:43
+0:43:44
+0:44:45
+0:45:46
+0:46:47
+0:47:48
+0:48:49
+0:49:50
+0:50:51
+0:51:52
+0:52:53
+0:53:54
+0:54:55
+0:55:56
+0:56:57
+0:57:58
+0:58:59
+0:59:60
+0:60:61
+0:61:62
+0:62:63
+0:63:64
+0:64:65
+0:65:66
+0:66:67
+0:67:68
+0:68:69
+0:69:70
+0:70:71
+0:71:72
+0:72:73
+0:73:74
+0:74:75
+0:75:76
+0:76:77
+0:77:78
+0:78:79
+0:79:80
+0:80:81
+0:81:82
+0:82:83
+0:83:84
+0:84:85
+0:85:86
+0:86:87
+0:87:88
+0:88:89
+0:89:90
+0:90:91
+0:91:92
+0:92:93
+0:93:94
+0:94:95
+0:95:96
+0:96:97
+0:97:98
+0:98:99
+0:99:100
+0:100:101
+0:1000:1001
+0:100000:100001
+0:10000000:10000001
+0:10000000000:10000000001
+0:10000000000000:10000000000001
+0:10000000000000000000000000000000000:10000000000000000000000000000000001
+0:12345678987654321012345678987654321:12345678987654321012345678987654322
+
+1:0:2
+1:1:3
+1:2:4
+1:3:5
+1:4:6
+1:5:7
+1:6:8
+1:7:9
+1:8:10
+1:9:11
+1:10:12
+1:11:13
+1:12:14
+1:13:15
+1:14:16
+1:15:17
+1:16:18
+1:17:19
+1:18:20
+1:19:21
+1:20:22
+1:21:23
+1:22:24
+1:23:25
+1:24:26
+1:25:27
+1:26:28
+1:27:29
+1:28:30
+1:29:31
+1:30:32
+1:31:33
+1:32:34
+1:33:35
+1:34:36
+1:35:37
+1:36:38
+1:37:39
+1:38:40
+1:39:41
+1:40:42
+1:41:43
+1:42:44
+1:43:45
+1:44:46
+1:45:47
+1:46:48
+1:47:49
+1:48:50
+1:49:51
+1:50:52
+1:51:53
+1:52:54
+1:53:55
+1:54:56
+1:55:57
+1:56:58
+1:57:59
+1:58:60
+1:59:61
+1:60:62
+1:61:63
+1:62:64
+1:63:65
+1:64:66
+1:65:67
+1:66:68
+1:67:69
+1:68:70
+1:69:71
+1:70:72
+1:71:73
+1:72:74
+1:73:75
+1:74:76
+1:75:77
+1:76:78
+1:77:79
+1:78:80
+1:79:81
+1:80:82
+1:81:83
+1:82:84
+1:83:85
+1:84:86
+1:85:87
+1:86:88
+1:87:89
+1:88:90
+1:89:91
+1:90:92
+1:91:93
+1:92:94
+1:93:95
+1:94:96
+1:95:97
+1:96:98
+1:97:99
+1:98:100
+1:99:101
+1:100:102
+1:1000:1002
+1:100000:100002
+1:10000000:10000002
+1:10000000000:10000000002
+1:10000000000000:10000000000002
+1:10000000000000000000000000000000000:10000000000000000000000000000000002
+1:12345678987654321012345678987654321:12345678987654321012345678987654323
+
+2:0:3
+2:1:5
+2:2:7
+2:3:9
+2:4:11
+2:5:13
+2:6:15
+2:7:17
+2:8:19
+2:9:21
+2:10:23
+2:11:25
+2:12:27
+2:13:29
+2:14:31
+2:15:33
+2:16:35
+2:17:37
+2:18:39
+2:19:41
+2:20:43
+2:21:45
+2:22:47
+2:23:49
+2:24:51
+2:25:53
+2:26:55
+2:27:57
+2:28:59
+2:29:61
+2:30:63
+2:31:65
+2:32:67
+2:33:69
+2:34:71
+2:35:73
+2:36:75
+2:37:77
+2:38:79
+2:39:81
+2:40:83
+2:41:85
+2:42:87
+2:43:89
+2:44:91
+2:45:93
+2:46:95
+2:47:97
+2:48:99
+2:49:101
+2:50:103
+2:51:105
+2:52:107
+2:53:109
+2:54:111
+2:55:113
+2:56:115
+2:57:117
+2:58:119
+2:59:121
+2:60:123
+2:61:125
+2:62:127
+2:63:129
+2:64:131
+2:65:133
+2:66:135
+2:67:137
+2:68:139
+2:69:141
+2:70:143
+2:71:145
+2:72:147
+2:73:149
+2:74:151
+2:75:153
+2:76:155
+2:77:157
+2:78:159
+2:79:161
+2:80:163
+2:81:165
+2:82:167
+2:83:169
+2:84:171
+2:85:173
+2:86:175
+2:87:177
+2:88:179
+2:89:181
+2:90:183
+2:91:185
+2:92:187
+2:93:189
+2:94:191
+2:95:193
+2:96:195
+2:97:197
+2:98:199
+2:99:201
+2:100:203
+2:1000:2003
+2:100000:200003
+2:10000000:20000003
+2:10000000000:20000000003
+2:10000000000000:20000000000003
+2:10000000000000000000000000000000000:20000000000000000000000000000000003
+2:12345678987654321012345678987654321:24691357975308642024691357975308645
+
+3:0:5
+3:1:13
+3:2:29
+3:3:61
+3:4:125
+3:5:253
+3:6:509
+3:7:1021
+3:8:2045
+3:9:4093
+3:10:8189
+3:11:16381
+3:12:32765
+3:13:65533
+3:14:131069
+3:15:262141
+3:16:524285
+3:17:1048573
+3:18:2097149
+3:19:4194301
+3:20:8388605
+3:21:16777213
+3:22:33554429
+3:23:67108861
+3:24:134217725
+3:25:268435453
+3:26:536870909
+3:27:1073741821
+3:28:2147483645
+3:29:4294967293
+3:30:8589934589
+3:31:17179869181
+3:32:34359738365
+3:33:68719476733
+3:34:137438953469
+3:35:274877906941
+3:36:549755813885
+3:37:1099511627773
+3:38:2199023255549
+3:39:4398046511101
+3:40:8796093022205
+3:41:17592186044413
+3:42:35184372088829
+3:43:70368744177661
+3:44:140737488355325
+3:45:281474976710653
+3:46:562949953421309
+3:47:1125899906842621
+3:48:2251799813685245
+3:49:4503599627370493
+3:50:9007199254740989
+3:51:18014398509481981
+3:52:36028797018963965
+3:53:72057594037927933
+3:54:144115188075855869
+3:55:288230376151711741
+3:56:576460752303423485
+3:57:1152921504606846973
+3:58:2305843009213693949
+3:59:4611686018427387901
+3:60:9223372036854775805
+3:61:18446744073709551613
+3:62:36893488147419103229
+3:63:73786976294838206461
+3:64:147573952589676412925
+3:65:295147905179352825853
+3:66:590295810358705651709
+3:67:1180591620717411303421
+3:68:2361183241434822606845
+3:69:4722366482869645213693
+3:70:9444732965739290427389
+3:71:18889465931478580854781
+3:72:37778931862957161709565
+3:73:75557863725914323419133
+3:74:151115727451828646838269
+3:75:302231454903657293676541
+3:76:604462909807314587353085
+3:77:1208925819614629174706173
+3:78:2417851639229258349412349
+3:79:4835703278458516698824701
+3:80:9671406556917033397649405
+3:81:19342813113834066795298813
+3:82:38685626227668133590597629
+3:83:77371252455336267181195261
+3:84:154742504910672534362390525
+3:85:309485009821345068724781053
+3:86:618970019642690137449562109
+3:87:1237940039285380274899124221
+3:88:2475880078570760549798248445
+3:89:4951760157141521099596496893
+3:90:9903520314283042199192993789
+3:91:19807040628566084398385987581
+3:92:39614081257132168796771975165
+3:93:79228162514264337593543950333
+3:94:158456325028528675187087900669
+3:95:316912650057057350374175801341
+3:96:633825300114114700748351602685
+3:97:1267650600228229401496703205373
+3:98:2535301200456458802993406410749
+3:99:5070602400912917605986812821501
+3:100:10141204801825835211973625643005
+
+4:0:13
+4:1:65533
+
+5:0:65533
diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bdigitsum-mbi.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bdigitsum-mbi.t
new file mode 100644 (file)
index 0000000..45c9bd7
--- /dev/null
@@ -0,0 +1,113 @@
+#!perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 48;
+
+use Math::BigInt;
+
+my $x;
+my $y;
+
+###############################################################################
+# bdigitsum()
+
+# Finite numbers.
+
+$x = Math::BigInt -> new("123");
+isa_ok($x, 'Math::BigInt');
+$y = $x -> bdigitsum();
+isa_ok($y, 'Math::BigInt');
+is($x, "6");
+is($y, "6");
+
+$x = Math::BigInt -> new("0");
+isa_ok($x, 'Math::BigInt');
+$y = $x -> bdigitsum();
+isa_ok($y, 'Math::BigInt');
+is($x, "0");
+is($y, "0");
+
+$x = Math::BigInt -> new("-123");
+isa_ok($x, 'Math::BigInt');
+$y = $x -> bdigitsum();
+isa_ok($y, 'Math::BigInt');
+is($x, "6");
+is($y, "6");
+
+# Infinity
+
+$x = Math::BigInt -> binf("+");
+isa_ok($x, 'Math::BigInt');
+$y = $x -> bdigitsum();
+isa_ok($y, 'Math::BigInt');
+is($x, "NaN");
+is($y, "NaN");
+
+$x = Math::BigInt -> binf("-");
+isa_ok($x, 'Math::BigInt');
+$y = $x -> bdigitsum();
+isa_ok($y, 'Math::BigInt');
+is($x, "NaN");
+is($y, "NaN");
+
+# NaN
+
+$x = Math::BigInt -> bnan();
+isa_ok($x, 'Math::BigInt');
+$y = $x -> bdigitsum();
+isa_ok($y, 'Math::BigInt');
+is($x, "NaN");
+is($y, "NaN");
+
+###############################################################################
+# digitsum()
+
+# Finite numbers.
+
+$x = Math::BigInt -> new("123");
+isa_ok($x, 'Math::BigInt');
+$y = $x -> digitsum();
+isa_ok($y, 'Math::BigInt');
+is($x, "123");
+is($y, "6");
+
+$x = Math::BigInt -> new("0");
+isa_ok($x, 'Math::BigInt');
+$y = $x -> digitsum();
+isa_ok($y, 'Math::BigInt');
+is($x, "0");
+is($y, "0");
+
+$x = Math::BigInt -> new("-123");
+isa_ok($x, 'Math::BigInt');
+$y = $x -> digitsum();
+isa_ok($y, 'Math::BigInt');
+is($x, "-123");
+is($y, "6");
+
+# Infinity
+
+$x = Math::BigInt -> binf("+");
+isa_ok($x, 'Math::BigInt');
+$y = $x -> digitsum();
+isa_ok($y, 'Math::BigInt');
+is($x, "inf");
+is($y, "NaN");
+
+$x = Math::BigInt -> binf("-");
+isa_ok($x, 'Math::BigInt');
+$y = $x -> digitsum();
+isa_ok($y, 'Math::BigInt');
+is($x, "-inf");
+is($y, "NaN");
+
+# NaN
+
+$x = Math::BigInt -> bnan();
+isa_ok($x, 'Math::BigInt');
+$y = $x -> digitsum();
+isa_ok($y, 'Math::BigInt');
+is($x, "NaN");
+is($y, "NaN");
diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/buparrow-mbi.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/buparrow-mbi.t
new file mode 100644 (file)
index 0000000..c2eb2ee
--- /dev/null
@@ -0,0 +1,581 @@
+#!perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 1021;
+
+my $class;
+
+BEGIN {
+    $class = 'Math::BigInt';
+    use_ok($class);
+}
+
+while (<DATA>) {
+    s/#.*$//;                   # remove comments
+    s/\s+$//;                   # remove trailing whitespace
+    next unless length;         # skip empty lines
+
+    my ($a, $n, $b, $expected) = split /:/;
+
+    # buparrow() modifies the invocand.
+
+    {
+        my ($x, $y);
+        my $test = qq|\$x = $class->new("$a"); \$y = \$x->buparrow($n, $b);|;
+
+        subtest $test,
+          sub {
+              plan tests => 4;
+
+              eval $test;
+              is($@, "", "'$test' gives emtpy \$\@");
+
+              is(ref($y), $class,
+                 "'$test' output arg is a $class");
+
+              is($y -> bstr(), $expected,
+                 "'$test' output arg has the right value");
+
+              is($x -> bstr(), $expected,
+                 "'$test' invocand has the right value");
+          };
+    }
+
+    # uparrow() does not modify the invocand.
+
+    {
+        my ($x, $y);
+        my $test = qq|\$x = $class->new("$a"); \$y = \$x->uparrow($n, $b);|;
+
+        subtest $test,
+          sub {
+              plan tests => 4;
+
+              eval $test;
+              is($@, "", "'$test' gives emtpy \$\@");
+
+              is(ref($y), $class,
+                 "'$test' output arg is a $class");
+
+              is($y -> bstr(), $expected,
+                 "'$test' output arg has the right value");
+
+              is($x -> bstr(), $a,
+                 "'$test' invocand has the right value");
+          };
+    }
+}
+
+__DATA__
+0:0:0:0
+0:0:1:0
+0:0:2:0
+0:0:3:0
+0:0:4:0
+0:0:5:0
+0:0:6:0
+0:0:7:0
+0:0:8:0
+0:0:9:0
+0:1:0:1
+0:1:1:0
+0:1:2:0
+0:1:3:0
+0:1:4:0
+0:1:5:0
+0:1:6:0
+0:1:7:0
+0:1:8:0
+0:1:9:0
+0:2:0:1
+0:2:1:0
+0:2:2:1
+0:2:3:0
+0:2:4:1
+0:2:5:0
+0:2:6:1
+0:2:7:0
+0:2:8:1
+0:2:9:0
+0:3:0:1
+0:3:1:0
+0:3:2:1
+0:3:3:0
+0:3:4:1
+0:3:5:0
+0:3:6:1
+0:3:7:0
+0:3:8:1
+0:3:9:0
+0:4:0:1
+0:4:1:0
+0:4:2:1
+0:4:3:0
+0:4:4:1
+0:4:5:0
+0:4:6:1
+0:4:7:0
+0:4:8:1
+0:4:9:0
+0:5:0:1
+0:5:1:0
+0:5:2:1
+0:5:3:0
+0:5:4:1
+0:5:5:0
+0:5:6:1
+0:5:7:0
+0:5:8:1
+0:5:9:0
+0:6:0:1
+0:6:1:0
+0:6:2:1
+0:6:3:0
+0:6:4:1
+0:6:5:0
+0:6:6:1
+0:6:7:0
+0:6:8:1
+0:6:9:0
+0:7:0:1
+0:7:1:0
+0:7:2:1
+0:7:3:0
+0:7:4:1
+0:7:5:0
+0:7:6:1
+0:7:7:0
+0:7:8:1
+0:7:9:0
+0:8:0:1
+0:8:1:0
+0:8:2:1
+0:8:3:0
+0:8:4:1
+0:8:5:0
+0:8:6:1
+0:8:7:0
+0:8:8:1
+0:8:9:0
+0:9:0:1
+0:9:1:0
+0:9:2:1
+0:9:3:0
+0:9:4:1
+0:9:5:0
+0:9:6:1
+0:9:7:0
+0:9:8:1
+0:9:9:0
+1:0:0:0
+1:0:1:1
+1:0:2:2
+1:0:3:3
+1:0:4:4
+1:0:5:5
+1:0:6:6
+1:0:7:7
+1:0:8:8
+1:0:9:9
+1:1:0:1
+1:1:1:1
+1:1:2:1
+1:1:3:1
+1:1:4:1
+1:1:5:1
+1:1:6:1
+1:1:7:1
+1:1:8:1
+1:1:9:1
+1:2:0:1
+1:2:1:1
+1:2:2:1
+1:2:3:1
+1:2:4:1
+1:2:5:1
+1:2:6:1
+1:2:7:1
+1:2:8:1
+1:2:9:1
+1:3:0:1
+1:3:1:1
+1:3:2:1
+1:3:3:1
+1:3:4:1
+1:3:5:1
+1:3:6:1
+1:3:7:1
+1:3:8:1
+1:3:9:1
+1:4:0:1
+1:4:1:1
+1:4:2:1
+1:4:3:1
+1:4:4:1
+1:4:5:1
+1:4:6:1
+1:4:7:1
+1:4:8:1
+1:4:9:1
+1:5:0:1
+1:5:1:1
+1:5:2:1
+1:5:3:1
+1:5:4:1
+1:5:5:1
+1:5:6:1
+1:5:7:1
+1:5:8:1
+1:5:9:1
+1:6:0:1
+1:6:1:1
+1:6:2:1
+1:6:3:1
+1:6:4:1
+1:6:5:1
+1:6:6:1
+1:6:7:1
+1:6:8:1
+1:6:9:1
+1:7:0:1
+1:7:1:1
+1:7:2:1
+1:7:3:1
+1:7:4:1
+1:7:5:1
+1:7:6:1
+1:7:7:1
+1:7:8:1
+1:7:9:1
+1:8:0:1
+1:8:1:1
+1:8:2:1
+1:8:3:1
+1:8:4:1
+1:8:5:1
+1:8:6:1
+1:8:7:1
+1:8:8:1
+1:8:9:1
+1:9:0:1
+1:9:1:1
+1:9:2:1
+1:9:3:1
+1:9:4:1
+1:9:5:1
+1:9:6:1
+1:9:7:1
+1:9:8:1
+1:9:9:1
+2:0:0:0
+2:0:1:2
+2:0:2:4
+2:0:3:6
+2:0:4:8
+2:0:5:10
+2:0:6:12
+2:0:7:14
+2:0:8:16
+2:0:9:18
+2:1:0:1
+2:1:1:2
+2:1:2:4
+2:1:3:8
+2:1:4:16
+2:1:5:32
+2:1:6:64
+2:1:7:128
+2:1:8:256
+2:1:9:512
+2:2:0:1
+2:2:1:2
+2:2:2:4
+2:2:3:16
+2:2:4:65536
+2:3:0:1
+2:3:1:2
+2:3:2:4
+2:3:3:65536
+2:4:0:1
+2:4:1:2
+2:4:2:4
+2:5:0:1
+2:5:1:2
+2:5:2:4
+2:6:0:1
+2:6:1:2
+2:6:2:4
+2:7:0:1
+2:7:1:2
+2:7:2:4
+2:8:0:1
+2:8:1:2
+2:8:2:4
+2:9:0:1
+2:9:1:2
+2:9:2:4
+3:0:0:0
+3:0:1:3
+3:0:2:6
+3:0:3:9
+3:0:4:12
+3:0:5:15
+3:0:6:18
+3:0:7:21
+3:0:8:24
+3:0:9:27
+3:1:0:1
+3:1:1:3
+3:1:2:9
+3:1:3:27
+3:1:4:81
+3:1:5:243
+3:1:6:729
+3:1:7:2187
+3:1:8:6561
+3:1:9:19683
+3:2:0:1
+3:2:1:3
+3:2:2:27
+3:2:3:7625597484987
+3:3:0:1
+3:3:1:3
+3:3:2:7625597484987
+3:4:0:1
+3:4:1:3
+3:5:0:1
+3:5:1:3
+3:6:0:1
+3:6:1:3
+3:7:0:1
+3:7:1:3
+3:8:0:1
+3:8:1:3
+3:9:0:1
+3:9:1:3
+4:0:0:0
+4:0:1:4
+4:0:2:8
+4:0:3:12
+4:0:4:16
+4:0:5:20
+4:0:6:24
+4:0:7:28
+4:0:8:32
+4:0:9:36
+4:1:0:1
+4:1:1:4
+4:1:2:16
+4:1:3:64
+4:1:4:256
+4:1:5:1024
+4:1:6:4096
+4:1:7:16384
+4:1:8:65536
+4:1:9:262144
+4:2:0:1
+4:2:1:4
+4:2:2:256
+4:2:3:13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096
+4:3:0:1
+4:3:1:4
+4:4:0:1
+4:4:1:4
+4:5:0:1
+4:5:1:4
+4:6:0:1
+4:6:1:4
+4:7:0:1
+4:7:1:4
+4:8:0:1
+4:8:1:4
+4:9:0:1
+4:9:1:4
+5:0:0:0
+5:0:1:5
+5:0:2:10
+5:0:3:15
+5:0:4:20
+5:0:5:25
+5:0:6:30
+5:0:7:35
+5:0:8:40
+5:0:9:45
+5:1:0:1
+5:1:1:5
+5:1:2:25
+5:1:3:125
+5:1:4:625
+5:1:5:3125
+5:1:6:15625
+5:1:7:78125
+5:1:8:390625
+5:1:9:1953125
+5:2:0:1
+5:2:1:5
+5:2:2:3125
+5:2:3:1911012597945477520356404559703964599198081048990094337139512789246520530242615803012059386519739850265586440155794462235359212788673806972288410146915986602087961896757195701839281660338047611225975533626101001482651123413147768252411493094447176965282756285196737514395357542479093219206641883011787169122552421070050709064674382870851449950256586194461543183511379849133691779928127433840431549236855526783596374102105331546031353725325748636909159778690328266459182983815230286936572873691422648131291743762136325730321645282979486862576245362218017673224940567642819360078720713837072355305446356153946401185348493792719514594505508232749221605848912910945189959948686199543147666938013037176163592594479746164220050885079469804487133205133160739134230540198872570038329801246050197013467397175909027389493923817315786996845899794781068042822436093783946335265422815704302832442385515082316490967285712171708123232790481817268327510112746782317410985888683708522000711733492253913322300756147180429007527677793352306200618286012455254243061006894805446584704820650982664319360960388736258510747074340636286976576702699258649953557976318173902550891331223294743930343956161328334072831663498258145226862004307799084688103804187368324800903873596212919633602583120781673673742533322879296907205490595621406888825991244581842379597863476484315673760923625090371511798941424262270220066286486867868710182980872802560693101949280830825044198424796792058908817112327192301455582916746795197430548026404646854002733993860798594465961501752586965811447568510041568687730903712482535343839285397598749458497050038225012489284001826590056251286187629938044407340142347062055785305325034918189589707199305662188512963187501743535960282201038211616048545121039313312256332260766436236688296850208839496142830484739113991669622649948563685234712873294796680884509405893951104650944137909502276545653133018670633521323028460519434381399810561400652595300731790772711065783494174642684720956134647327748584238274899668755052504394218232191357223054066715373374248543645663782045701654593218154053548393614250664498585403307466468541890148134347714650315037954175778622811776585876941680908203125
+5:3:0:1
+5:3:1:5
+5:4:0:1
+5:4:1:5
+5:5:0:1
+5:5:1:5
+5:6:0:1
+5:6:1:5
+5:7:0:1
+5:7:1:5
+5:8:0:1
+5:8:1:5
+5:9:0:1
+5:9:1:5
+6:0:0:0
+6:0:1:6
+6:0:2:12
+6:0:3:18
+6:0:4:24
+6:0:5:30
+6:0:6:36
+6:0:7:42
+6:0:8:48
+6:0:9:54
+6:1:0:1
+6:1:1:6
+6:1:2:36
+6:1:3:216
+6:1:4:1296
+6:1:5:7776
+6:1:6:46656
+6:1:7:279936
+6:1:8:1679616
+6:1:9:10077696
+6:2:0:1
+6:2:1:6
+6:2:2:46656
+6:3:0:1
+6:3:1:6
+6:4:0:1
+6:4:1:6
+6:5:0:1
+6:5:1:6
+6:6:0:1
+6:6:1:6
+6:7:0:1
+6:7:1:6
+6:8:0:1
+6:8:1:6
+6:9:0:1
+6:9:1:6
+7:0:0:0
+7:0:1:7
+7:0:2:14
+7:0:3:21
+7:0:4:28
+7:0:5:35
+7:0:6:42
+7:0:7:49
+7:0:8:56
+7:0:9:63
+7:1:0:1
+7:1:1:7
+7:1:2:49
+7:1:3:343
+7:1:4:2401
+7:1:5:16807
+7:1:6:117649
+7:1:7:823543
+7:1:8:5764801
+7:1:9:40353607
+7:2:0:1
+7:2:1:7
+7:2:2:823543
+7:3:0:1
+7:3:1:7
+7:4:0:1
+7:4:1:7
+7:5:0:1
+7:5:1:7
+7:6:0:1
+7:6:1:7
+7:7:0:1
+7:7:1:7
+7:8:0:1
+7:8:1:7
+7:9:0:1
+7:9:1:7
+8:0:0:0
+8:0:1:8
+8:0:2:16
+8:0:3:24
+8:0:4:32
+8:0:5:40
+8:0:6:48
+8:0:7:56
+8:0:8:64
+8:0:9:72
+8:1:0:1
+8:1:1:8
+8:1:2:64
+8:1:3:512
+8:1:4:4096
+8:1:5:32768
+8:1:6:262144
+8:1:7:2097152
+8:1:8:16777216
+8:1:9:134217728
+8:2:0:1
+8:2:1:8
+8:2:2:16777216
+8:3:0:1
+8:3:1:8
+8:4:0:1
+8:4:1:8
+8:5:0:1
+8:5:1:8
+8:6:0:1
+8:6:1:8
+8:7:0:1
+8:7:1:8
+8:8:0:1
+8:8:1:8
+8:9:0:1
+8:9:1:8
+9:0:0:0
+9:0:1:9
+9:0:2:18
+9:0:3:27
+9:0:4:36
+9:0:5:45
+9:0:6:54
+9:0:7:63
+9:0:8:72
+9:0:9:81
+9:1:0:1
+9:1:1:9
+9:1:2:81
+9:1:3:729
+9:1:4:6561
+9:1:5:59049
+9:1:6:531441
+9:1:7:4782969
+9:1:8:43046721
+9:1:9:387420489
+9:2:0:1
+9:2:1:9
+9:2:2:387420489
+9:3:0:1
+9:3:1:9
+9:4:0:1
+9:4:1:9
+9:5:0:1
+9:5:1:9
+9:6:0:1
+9:6:1:9
+9:7:0:1
+9:7:1:9
+9:8:0:1
+9:8:1:9
+9:9:0:1
+9:9:1:9
index 1bc0f6a..27ada2e 100644 (file)
@@ -5,7 +5,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 148;
+use Test::More tests => 164;
 
 ##############################################################################
 
@@ -76,6 +76,12 @@ __END__
 &is_negative
 1:0
 -1:1
+&is_non_positive
+1:0
+-1:1
+&is_non_negative
+1:1
+-1:0
 &is_nan
 abc:1
 1:0
index 8b0945e..30421da 100644 (file)
@@ -5,7 +5,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 140;
+use Test::More tests => 156;
 
 ##############################################################################
 
@@ -76,6 +76,12 @@ __END__
 &is_negative
 1:0
 -1:1
+&is_non_positive
+1:0
+-1:1
+&is_non_negative
+1:1
+-1:0
 &is_nan
 abc:1
 1:0
diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/from_ieee754-mbf.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/from_ieee754-mbf.t
new file mode 100644 (file)
index 0000000..99dd6e1
--- /dev/null
@@ -0,0 +1,257 @@
+#!perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 230;
+
+use Math::BigFloat;
+
+my @k = (16, 32, 64, 128);
+
+sub stringify {
+    my $x = shift;
+    return "$x" unless $x -> is_finite();
+    my $nstr = $x -> bnstr();
+    my $sstr = $x -> bsstr();
+    return length($nstr) < length($sstr) ? $nstr : $sstr;
+}
+
+for my $k (@k) {
+
+    # Parameters specific to this format:
+
+    my $b = 2;
+    my $p = $k == 16 ? 11
+          : $k == 32 ? 24
+          : $k == 64 ? 53
+          : $k - sprintf("%.0f", 4 * log($k)/log(2)) + 13;
+
+    $b = Math::BigFloat -> new($b);
+    $k = Math::BigFloat -> new($k);
+    $p = Math::BigFloat -> new($p);
+    my $w = $k - $p;
+
+    my $emax = 2 ** ($w - 1) - 1;
+    my $emin = 1 - $emax;
+
+    my $format = sprintf 'binary%u', $k;
+
+    my $binv = Math::BigFloat -> new("0.5");
+
+    my $data =
+      [
+
+       {
+        dsc => "smallest positive subnormal number",
+        bin => "0"
+             . ("0" x $w)
+             . ("0" x ($p - 2)) . "1",
+        asc => "$b ** ($emin) * $b ** (" . (1 - $p) . ") "
+             . "= $b ** (" . ($emin + 1 - $p) . ")",
+        mbf => $binv ** ($p - 1 - $emin),
+       },
+
+       {
+        dsc => "largest subnormal number",
+        bin => "0"
+             . ("0" x $w)
+             . ("1" x ($p - 1)),
+        asc => "$b ** ($emin) * (1 - $b ** (" . (1 - $p) . "))",
+        mbf => $binv ** (-$emin) * (1 - $binv ** ($p - 1)),
+       },
+
+       {
+        dsc => "smallest positive normal number",
+        bin => "0"
+             . ("0" x ($w - 1)) . "1"
+             . ("0" x ($p - 1)),
+        asc => "$b ** ($emin)",
+        mbf => $binv ** (-$emin),
+       },
+
+       {
+        dsc => "largest normal number",
+        bin => "0"
+             . ("1" x ($w - 1)) . "0"
+             . "1" x ($p - 1),
+        asc => "$b ** $emax * ($b - $b ** (" . (1 - $p) . "))",
+        mbf => $b ** $emax * ($b - $binv ** ($p - 1)),
+       },
+
+       {
+        dsc => "largest number less than one",
+        bin => "0"
+             . "0" . ("1" x ($w - 2)) . "0"
+             . "1" x ($p - 1),
+        asc => "1 - $b ** (-$p)",
+        mbf => 1 - $binv ** $p,
+       },
+
+       {
+        dsc => "smallest number larger than one",
+        bin => "0"
+             . "0" . ("1" x ($w - 1))
+             . ("0" x ($p - 2)) . "1",
+        asc => "1 + $b ** (" . (1 - $p) . ")",
+        mbf => 1 + $binv ** ($p - 1),
+       },
+
+       {
+        dsc => "second smallest number larger than one",
+        bin => "0"
+             . "0" . ("1" x ($w - 1))
+             . ("0" x ($p - 3)) . "10",
+        asc => "1 + $b ** (" . (2 - $p) . ")",
+        mbf => 1 + $binv ** ($p - 2),
+       },
+
+       {
+        dsc => "one",
+        bin => "0"
+             . "0" . ("1" x ($w - 1))
+             . "0" x ($p - 1),
+        asc => "1",
+        mbf => Math::BigFloat -> new("1"),
+       },
+
+       {
+        dsc => "minus one",
+        bin => "1"
+             . "0" . ("1" x ($w - 1))
+             . "0" x ($p - 1),
+        asc => "-1",
+        mbf => Math::BigFloat -> new("-1"),
+       },
+
+       {
+        dsc => "two",
+        bin => "0"
+             . "1" . ("0" x ($w - 1))
+             . ("0" x ($p - 1)),
+        asc => "2",
+        mbf => Math::BigFloat -> new("2"),
+       },
+
+       {
+        dsc => "minus two",
+        bin => "1"
+             . "1" . ("0" x ($w - 1))
+             . ("0" x ($p - 1)),
+        asc => "-2",
+        mbf => Math::BigFloat -> new("-2"),
+       },
+
+       {
+        dsc => "positive zero",
+        bin => "0"
+             . ("0" x $w)
+             . ("0" x ($p - 1)),
+        asc => "+0",
+        mbf => Math::BigFloat -> new("0"),
+       },
+
+       {
+        dsc => "negative zero",
+        bin => "1"
+             . ("0" x $w)
+             . ("0" x ($p - 1)),
+        asc => "-0",
+        mbf => Math::BigFloat -> new("0"),
+       },
+
+       {
+        dsc => "positive infinity",
+        bin => "0"
+             . ("1" x $w)
+             . ("0" x ($p - 1)),
+        asc => "+inf",
+        mbf => Math::BigFloat -> new("inf"),
+       },
+
+       {
+        dsc => "negative infinity",
+        bin =>  "1"
+             . ("1" x $w)
+             . ("0" x ($p - 1)),
+        asc => "-inf",
+        mbf => Math::BigFloat -> new("-inf"),
+       },
+
+       {
+        dsc => "NaN (sNaN on most processors, such as x86 and ARM)",
+        bin => "0"
+             . ("1" x $w)
+             . ("0" x ($p - 2)) . "1",
+        asc => "sNaN",
+        mbf => Math::BigFloat -> new("NaN"),
+       },
+
+       {
+        dsc => "NaN (qNaN on most processors, such as x86 and ARM)",
+        bin => "0"
+             . ("1" x $w)
+             . "1" . ("0" x ($p - 3)) . "1",
+        asc => "qNaN",
+        mbf => Math::BigFloat -> new("NaN"),
+       },
+
+       {
+        dsc => "NaN (an alternative encoding)",
+        bin => "0"
+             . ("1" x $w)
+             . ("1" x ($p - 1)),
+        asc => "NaN",
+        mbf => Math::BigFloat -> new("NaN"),
+       },
+
+       {
+        dsc => "NaN (encoding used by Perl on Cygwin)",
+        bin => "1"
+             . ("1" x $w)
+             . ("1" . ("0" x ($p - 2))),
+        asc => "NaN",
+        mbf => Math::BigFloat -> new("NaN"),
+       },
+
+      ];
+
+    for my $entry (@$data) {
+        my $bin   = $entry -> {bin};
+        my $bytes = pack "B*", $bin;
+        my $hex   = unpack "H*", $bytes;
+
+        note("\n", $entry -> {dsc }, " (k = $k)\n\n");
+
+        my $expected = stringify($entry -> {mbf});
+        my ($got, $test);
+
+        $got = Math::BigFloat -> from_ieee754($bin, $format);
+        $got = stringify($got);
+        $test = qq|Math::BigFloat->from_ieee754("$bin")|;
+        is($got, $expected, $test);
+
+        $got = Math::BigFloat -> from_ieee754($hex, $format);
+        $got = stringify($got);
+        $test = qq|Math::BigFloat->from_ieee754("$hex")|;
+        is($got, $expected, $test);
+
+        $got = Math::BigFloat -> from_ieee754($bytes, $format);
+        $got = stringify($got);
+        (my $str = $hex) =~ s/(..)/\\x$1/g;
+        $test = qq|Math::BigFloat->from_ieee754("$str")|;
+        is($got, $expected, $test);
+    }
+}
+
+note("\nTest as class method vs. instance method.\n\n");
+
+# As class method.
+
+my $x = Math::BigFloat -> from_ieee754("4000000000000000", "binary64");
+is($x, 2, "class method");
+
+# As instance method, the invocand should be modified.
+
+$x -> from_ieee754("4008000000000000", "binary64");
+is($x, 3, "instance method modifies invocand");
index d1edfd4..547a69c 100644 (file)
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 50;
+use Test::More tests => 69;
 
 my $class;
 
@@ -81,6 +81,43 @@ infinity:inf
 #-inf:NaN
 0x.p+0:NaN
 
+# This is more or less the same data as in from_oct-mbf.t, except that some of
+# them are commented out, since new() only treats input as octal if it has a
+# "0" prefix and a binary exponent, and possibly a leading "+" or "-" sign.
+# Duplicates from above are also commented out.
+
+01p+0:1
+00.4p+1:1
+00.2p+2:1
+00.1p+3:1
+00.04p+4:1
+02p-1:1
+04p-2:1
+010p-3:1
+
+-01p+0:-1
+
+00p+0:0
+00p+7:0
+00p-7:0
+00.p+0:0
+00.0p+0:0
+#00.0p+0:0
+
+#145376:51966
+#0145376:51966
+#00145376:51966
+
+03.1p+2:12.5
+022.15p-1:9.1015625
+-00.361152746757p+32:-2023406814.9375
+044.3212636115p+30:39093746765
+
+#NaN:NaN
+#+inf:NaN
+#-inf:NaN
+0.p+0:NaN
+
 # This is the same data as in from_bin-mbf.t, except that some of them are
 # commented out, since new() only treats input as binary if it has a "0b" or
 # "0B" prefix, possibly with a leading "+" or "-" sign. Duplicates from above
diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/to_ieee754-mbf.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/to_ieee754-mbf.t
new file mode 100644 (file)
index 0000000..1f043f9
--- /dev/null
@@ -0,0 +1,206 @@
+#!perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 60;
+
+use Math::BigFloat;
+
+my @k = (16, 32, 64, 128);
+
+sub stringify {
+    my $x = shift;
+    return "$x" unless $x -> is_finite();
+    my $nstr = $x -> bnstr();
+    my $sstr = $x -> bsstr();
+    return length($nstr) < length($sstr) ? $nstr : $sstr;
+}
+
+for my $k (@k) {
+
+    # Parameters specific to this format:
+
+    my $b = 2;
+    my $p = $k == 16 ? 11
+          : $k == 32 ? 24
+          : $k == 64 ? 53
+          : $k - sprintf("%.0f", 4 * log($k)/log(2)) + 13;
+
+    $b = Math::BigFloat -> new($b);
+    $k = Math::BigFloat -> new($k);
+    $p = Math::BigFloat -> new($p);
+    my $w = $k - $p;
+
+    my $emax = 2 ** ($w - 1) - 1;
+    my $emin = 1 - $emax;
+
+    my $format = 'binary' . $k;
+
+    note("\nComputing test data for k = $k ...\n\n");
+
+    my $binv = Math::BigFloat -> new("0.5");
+
+    my $data =
+      [
+
+       {
+        dsc => "smallest positive subnormal number",
+        bin => "0"
+             . ("0" x $w)
+             . ("0" x ($p - 2)) . "1",
+        asc => "$b ** ($emin) * $b ** (" . (1 - $p) . ") "
+             . "= $b ** (" . ($emin + 1 - $p) . ")",
+        mbf => $binv ** ($p - 1 - $emin),
+       },
+
+       {
+        dsc => "largest subnormal number",
+        bin => "0"
+             . ("0" x $w)
+             . ("1" x ($p - 1)),
+        asc => "$b ** ($emin) * (1 - $b ** (" . (1 - $p) . "))",
+        mbf => $binv ** (-$emin) * (1 - $binv ** ($p - 1)),
+       },
+
+       {
+        dsc => "smallest positive normal number",
+        bin => "0"
+             . ("0" x ($w - 1)) . "1"
+             . ("0" x ($p - 1)),
+        asc => "$b ** ($emin)",
+        mbf => $binv ** (-$emin),
+       },
+
+       {
+        dsc => "largest normal number",
+        bin => "0"
+             . ("1" x ($w - 1)) . "0"
+             . "1" x ($p - 1),
+        asc => "$b ** $emax * ($b - $b ** (" . (1 - $p) . "))",
+        mbf => $b ** $emax * ($b - $binv ** ($p - 1)),
+       },
+
+       {
+        dsc => "largest number less than one",
+        bin => "0"
+             . "0" . ("1" x ($w - 2)) . "0"
+             . "1" x ($p - 1),
+        asc => "1 - $b ** (-$p)",
+        mbf => 1 - $binv ** $p,
+       },
+
+       {
+        dsc => "smallest number larger than one",
+        bin => "0"
+             . "0" . ("1" x ($w - 1))
+             . ("0" x ($p - 2)) . "1",
+        asc => "1 + $b ** (" . (1 - $p) . ")",
+        mbf => 1 + $binv ** ($p - 1),
+       },
+
+       {
+        dsc => "second smallest number larger than one",
+        bin => "0"
+             . "0" . ("1" x ($w - 1))
+             . ("0" x ($p - 3)) . "10",
+        asc => "1 + $b ** (" . (2 - $p) . ")",
+        mbf => 1 + $binv ** ($p - 2),
+       },
+
+       {
+        dsc => "one",
+        bin => "0"
+             . "0" . ("1" x ($w - 1))
+             . "0" x ($p - 1),
+        asc => "1",
+        mbf => Math::BigFloat -> new("1"),
+       },
+
+       {
+        dsc => "minus one",
+        bin => "1"
+             . "0" . ("1" x ($w - 1))
+             . "0" x ($p - 1),
+        asc => "-1",
+        mbf => Math::BigFloat -> new("-1"),
+       },
+
+       {
+        dsc => "two",
+        bin => "0"
+             . "1" . ("0" x ($w - 1))
+             . ("0" x ($p - 1)),
+        asc => "2",
+        mbf => Math::BigFloat -> new("2"),
+       },
+
+       {
+        dsc => "minus two",
+        bin => "1"
+             . "1" . ("0" x ($w - 1))
+             . ("0" x ($p - 1)),
+        asc => "-2",
+        mbf => Math::BigFloat -> new("-2"),
+       },
+
+       {
+        dsc => "positive zero",
+        bin => "0"
+             . ("0" x $w)
+             . ("0" x ($p - 1)),
+        asc => "+0",
+        mbf => Math::BigFloat -> new("0"),
+       },
+
+       {
+        dsc => "positive infinity",
+        bin => "0"
+             . ("1" x $w)
+             . ("0" x ($p - 1)),
+        asc => "+inf",
+        mbf => Math::BigFloat -> new("inf"),
+       },
+
+       {
+        dsc => "negative infinity",
+        bin =>  "1"
+             . ("1" x $w)
+             . ("0" x ($p - 1)),
+        asc => "-inf",
+        mbf => Math::BigFloat -> new("-inf"),
+       },
+
+       {
+        dsc => "NaN (encoding used by Perl on Cygwin)",
+        bin => "1"
+             . ("1" x $w)
+             . ("1" . ("0" x ($p - 2))),
+        asc => "NaN",
+        mbf => Math::BigFloat -> new("NaN"),
+       },
+
+      ];
+
+    for my $entry (@$data) {
+        my $bin   = $entry -> {bin};
+        my $bytes = pack "B*", $bin;
+        my $hex   = unpack "H*", $bytes;
+
+        note("\n", $entry -> {dsc}, " (k = $k): ", $entry -> {asc}, "\n\n");
+
+        my $x = Math::BigFloat -> new($entry -> {mbf});
+
+        my $test = qq|Math::BigFloat -> new("| . stringify($x)
+                 . qq|") -> to_ieee754("$format")|;
+
+        my $got_bytes = $x -> to_ieee754($format);
+        my $got_hex = unpack "H*", $got_bytes;
+        $got_hex =~ s/(..)/\\x$1/g;
+
+        my $expected_hex = $hex;
+        $expected_hex =~ s/(..)/\\x$1/g;
+
+        is($got_hex, $expected_hex);
+    }
+}
index a1ffa01..3573c21 100755 (executable)
@@ -1,19 +1,14 @@
 #!/usr/bin/perl
 
+# test caching timeout
+
 use lib '..';
 use Memoize;
-BEGIN {
-  eval {require Time::HiRes};
-  if ($@ || $ENV{SLOW}) {
-#    $SLOW_TESTS = 1;
-  } else {
-    'Time::HiRes'->import('time');
-  }
-}
 
 my $DEBUG = 0;
+my $LIFETIME = 15;
 
-my $n = 0;
+my $test = 0;
 $| = 1;
 
 if (-e '.fast') {
@@ -21,116 +16,93 @@ if (-e '.fast') {
   exit 0;
 }
 
-# Perhaps nobody will notice if we don't say anything
-# print "# Warning: I'm testing the timed expiration policy.\n# This will take about thirty seconds.\n";
-
-print "1..15\n";
-$| = 1;
+print "# Testing the timed expiration policy.\n";
+print "# This will take about thirty seconds.\n";
 
-# (1)
-++$n; print "ok $n\n";
+print "1..26\n";
 
-# (2)
 require Memoize::Expire;
-++$n; print "ok $n\n";
-
-sub close_enough {
-#  print "Close enough? @_[0,1]\n";
-  abs($_[0] - $_[1]) <= 2;
-}
-
-sub very_close {
-#  print "Close enough? @_[0,1]\n";
-  abs($_[0] - $_[1]) <= 0.01;
-}
-
-my $t0;
-sub start_timer {
-  $t0 = time;
-  $DEBUG and print "# $t0\n";
-}
-
-sub wait_until {
-  my $until = shift();
-  my $diff = $until - (time() - $t0);
-  $DEBUG and print "# until $until; diff = $diff\n";
-  return if $diff <= 0;
-  select undef, undef, undef, $diff;
-}
+++$test; print "ok $test - Expire loaded\n";
 
 sub now {
 #  print "NOW: @_ ", time(), "\n";
   time;
 }
 
-tie my %cache => 'Memoize::Expire', LIFETIME => 15;
+tie my %cache => 'Memoize::Expire', LIFETIME => $LIFETIME;
+
 memoize 'now',
     SCALAR_CACHE => [HASH => \%cache ],
     LIST_CACHE => 'FAULT'
     ;
 
-# (3)
-++$n; print "ok $n\n";
-
-
-# (4-6)
-# T
-start_timer();
-for (1,2,3) {
-  $when{$_} = now($_);
-  ++$n;
-  print "not " unless close_enough($when{$_}, time());
-  print "ok $n\n";
-  sleep 6 if $_ < 3;
-  $DEBUG and print "# ", time()-$t0, "\n";
-}
-# values will now expire at T=15, 21, 27
-# it is now T=12
-
-# T+12
-for (1,2,3) {
-  $again{$_} = now($_); # Should be the same as before, because of memoization
-}
-
-# (7-9)
-# T+12
-foreach (1,2,3) {
-  ++$n;
-  if (very_close($when{$_}, $again{$_})) {
-    print "ok $n\n";
-  } else {
-    print "not ok $n # expected $when{$_}, got $again{$_}\n";
-  }
-}
-
-# (10)
-wait_until(18);  # now(1) expires
-print "not " unless close_enough(time, $again{1} = now(1));
-++$n; print "ok $n\n";
-
-# (11-12)
-# T+18
-foreach (2,3) {                        # Should not have expired yet.
-  ++$n;
-  print "not " unless now($_) == $again{$_};
-  print "ok $n\n";
+++$test; print "ok $test - function memoized\n";
+
+my (@before, @after, @now);
+
+# Once a second call now(), with three varying indices. Record when
+# (within a range) it was called last, and depending on the value returned
+# on the next call with the same index, decide whether it correctly
+# returned the old value or expired the cache entry.
+
+for my $iteration (0..($LIFETIME/2)) {
+    for my $i (0..2) {
+        my $before = time;
+        my $now = now($i);
+        my $after = time;
+
+        # the time returned by now() should either straddle the
+        # current time range, or if it returns a cached value, the
+        # time range of the previous time it was called.
+        # $before..$after represents the time range within which now() must have
+        # been called. On very slow platforms, $after - $before may be > 1.
+
+        my $in_range0 = !$iteration || ($before[$i] <= $now && $now <= $after[$i]);
+        my $in_range1 = ($before <= $now && $now <= $after);
+
+        my $ok;
+        if ($iteration) {
+            if ($in_range0) {
+                if ($in_range1) {
+                    $ok = 0; # this should never happen
+                }
+                else {
+                    # cached value, so cache shouldn't have expired
+                    $ok = $after[$i] + $LIFETIME >= $before && $now[$i] == $now;
+                }
+            }
+            else {
+                if ($in_range1) {
+                    # not cached value, so any cache should have have expired
+                    $ok = $before[$i] + $LIFETIME <= $after && $now[$i] != $now;
+                }
+                else {
+                    # not in any range; caching broken
+                    $ok = 0;
+                }
+            }
+        }
+        else {
+            $ok = $in_range1;
+        }
+
+        $test++;
+        print "not " unless $ok;
+        print "ok $test - $iteration:$i\n";
+        if (!$ok || $DEBUG) {
+            print STDERR sprintf
+                "expmod_t.t: %d:%d: r0=%d r1=%d prev=(%s..%s) cur=(%s..%s) now=(%s,%s)\n",
+                $iteration, $i, $in_range0, $in_range1,
+                $before[$i]||-1, $after[$i]||-1, $before, $after, $now[$i]||-1, $now;
+        }
+
+        if (!defined($now[$i]) || $now[$i] != $now) {
+            # cache expired; record value of new cache
+            $before[$i] = $before;
+            $after[$i]  = $after;
+            $now[$i]    = $now;
+        }
+
+        sleep 1;
+    }
 }
-
-wait_until(24);  # now(2) expires
-
-# (13)
-# T+24
-print "not " unless close_enough(time, $again{2} = now(2));
-++$n; print "ok $n\n";
-
-# (14-15)
-# T+24
-foreach (1,3) {  # 1 is good again because it was recomputed after it expired
-  ++$n;
-  if (very_close(scalar(now($_)), $again{$_})) {
-    print "ok $n\n";
-  } else {
-    print "not ok $n # expected $when{$_}, got $again{$_}\n";
-  }
-}
-
index 6d21906..c4b8381 100755 (executable)
@@ -56,7 +56,7 @@ $N = 1;
 
 $ELAPSED = 0;
 
-my $LONG_RUN = 10;
+my $LONG_RUN = 11;
 
 while (1) {
   my $start = time;
@@ -88,10 +88,11 @@ $COUNT=0;
 $start = time;
 $RESULT2 = fib($N);
 $ELAPSED2 = time - $start + .001; # prevent division by 0 errors
-
 print (($RESULT == $RESULT2) ? "ok 1\n" : "not ok 1\n");
 # If it's not ten times as fast, something is seriously wrong.
+print "# ELAPSED2=$ELAPSED2 seconds.\n";
 print (($ELAPSED/$ELAPSED2 > 10) ? "ok 2\n" : "not ok 2\n");
+
 # If it called the function more than $N times, it wasn't memoized properly
 print (($COUNT > $N) ? "ok 3\n" : "not ok 3\n");
 
@@ -100,8 +101,8 @@ $COUNT = 0;
 $start = time;
 $RESULT2 = fib($N);
 $ELAPSED2 = time - $start + .001; # prevent division by 0 errors
-
 print (($RESULT == $RESULT2) ? "ok 4\n" : "not ok 4\n");
+print "# ELAPSED2=$ELAPSED2 seconds.\n";
 print (($ELAPSED/$ELAPSED2 > 10) ? "ok 5\n" : "not ok 5\n");
 # This time it shouldn't have called the function at all.
 print ($COUNT == 0 ? "ok 6\n" : "not ok 6\n");
index 1bfa1a1..2f463d5 100755 (executable)
@@ -132,6 +132,13 @@ use_ok( 'Module::Load::Conditional' );
     is( $rv->{version}, 2,          "   Version is correct" );
 }
 
+### test finding a version of a module that has a VERSION error in a HereDoc
+{   my $rv = check_install( module => 'HereDoc' );
+    ok( $rv,                        'Testing $VERSION in HEREDOC' );
+    ok( !$rv->{version},            "   No Version found" );
+    is( $rv->{version}, undef,      "   Version is correct" );
+}
+
 ### test that no package statement means $VERSION is $main::VERSION
 {
     my $rv = check_install( module => 'NotMain' );
diff --git a/gnu/usr.bin/perl/cpan/Module-Load-Conditional/t/to_load/HereDoc.pm b/gnu/usr.bin/perl/cpan/Module-Load-Conditional/t/to_load/HereDoc.pm
new file mode 100644 (file)
index 0000000..06332ac
--- /dev/null
@@ -0,0 +1,14 @@
+package HereDoc;
+$HereDoc::VERSION = 1;
+
+sub magic {
+  print <<'END';
+package Errno;
+-use vars qw($VERSION);
+-
+-$VERSION = "1.111";
++our $VERSION = "1.111";
+END
+}
+
+1;
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/JustPod.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/JustPod.pm
new file mode 100644 (file)
index 0000000..c7ad3d6
--- /dev/null
@@ -0,0 +1,362 @@
+use 5;
+package Pod::Simple::JustPod;
+# ABSTRACT: Pod::Simple formatter that extracts POD from a file containing
+#           other things as well
+use strict;
+use warnings;
+
+use Pod::Simple::Methody ();
+our @ISA = ('Pod::Simple::Methody');
+
+sub new {
+  my $self = shift;
+  my $new  = $self->SUPER::new(@_);
+
+  $new->accept_targets('*');
+  $new->keep_encoding_directive(1);
+  $new->preserve_whitespace(1);
+  $new->complain_stderr(1);
+  $new->_output_is_for_JustPod(1);
+
+  return $new;
+}
+
+#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+sub check_that_all_is_closed {
+
+  # Actually checks that the things we depend on being balanced in fact are,
+  # so that we can continue in spit of pod errors
+
+  my $self = shift;
+  while ($self->{inL}) {
+    $self->end_L(@_);
+  }
+  while ($self->{fcode_end} && @{$self->{fcode_end}}) {
+    $self->_end_fcode(@_);
+  }
+}
+
+sub handle_text {
+
+  # Add text to the output buffer.  This is skipped if within a L<>, as we use
+  # the 'raw' attribute of that tag instead.
+
+  $_[0]{buffer} .= $_[1] unless $_[0]{inL} ;
+}
+
+sub spacer {
+
+  # Prints the white space following things like =head1.  This is normally a
+  # blank, unless BlackBox has told us otherwise.
+
+  my ($self, $arg) = @_;
+  return unless $arg;
+
+  my $spacer = ($arg->{'~orig_spacer'})
+                ? $arg->{'~orig_spacer'}
+                : " ";
+  $self->handle_text($spacer);
+}
+
+sub _generic_start {
+
+  # Called from tags like =head1, etc.
+
+  my ($self, $text, $arg) = @_;
+  $self->check_that_all_is_closed();
+  $self->handle_text($text);
+  $self->spacer($arg);
+}
+
+sub start_Document    { shift->_generic_start("=pod\n\n"); }
+sub start_head1       { shift->_generic_start('=head1', @_); }
+sub start_head2       { shift->_generic_start('=head2', @_); }
+sub start_head3       { shift->_generic_start('=head3', @_); }
+sub start_head4       { shift->_generic_start('=head4', @_); }
+sub start_encoding    { shift->_generic_start('=encoding', @_); }
+# sub start_Para
+# sub start_Verbatim
+
+sub start_item_bullet { # Handle =item *
+  my ($self, $arg) = @_;
+  $self->check_that_all_is_closed();
+  $self->handle_text('=item');
+
+  # It can be that they said simply '=item', and it is inferred that it is to
+  # be a bullet.
+  if (! $arg->{'~orig_content'}) {
+    $self->handle_text("\n\n");
+  }
+  else {
+    $self->spacer($arg);
+    if ($arg->{'~_freaky_para_hack'}) {
+
+        # See Message Id <87y3gtcwa2.fsf@hope.eyrie.org>
+        my $item_text = $arg->{'~orig_content'};
+        my $trailing = quotemeta $arg->{'~_freaky_para_hack'};
+        $item_text =~ s/$trailing$//;
+        $self->handle_text($item_text);
+    }
+    else {
+        $self->handle_text("*\n\n");
+    }
+  }
+}
+
+sub start_item_number {     # Handle '=item 2'
+  my ($self, $arg) = @_;
+  $self->check_that_all_is_closed();
+  $self->handle_text("=item");
+  $self->spacer($arg);
+  $self->handle_text("$arg->{'~orig_content'}\n\n");
+}
+
+sub start_item_text {   # Handle '=item foo bar baz'
+  my ($self, $arg) = @_;
+  $self->check_that_all_is_closed();
+  $self->handle_text('=item');
+  $self->spacer($arg);
+}
+
+sub _end_item {
+  my $self = shift;
+  $self->check_that_all_is_closed();
+  $self->emit;
+}
+
+*end_item_bullet = *_end_item;
+*end_item_number = *_end_item;
+*end_item_text   = *_end_item;
+
+sub _start_over  {  # Handle =over
+  my ($self, $arg) = @_;
+  $self->check_that_all_is_closed();
+  $self->handle_text("=over");
+
+  # The =over amount is optional
+  if ($arg->{'~orig_content'}) {
+    $self->spacer($arg);
+    $self->handle_text("$arg->{'~orig_content'}");
+  }
+  $self->handle_text("\n\n");
+}
+
+*start_over_bullet = *_start_over;
+*start_over_number = *_start_over;
+*start_over_text   = *_start_over;
+*start_over_block  = *_start_over;
+
+sub _end_over  {
+  my $self = shift;
+  $self->check_that_all_is_closed();
+  $self->handle_text('=back');
+  $self->emit;
+}
+
+*end_over_bullet = *_end_over;
+*end_over_number = *_end_over;
+*end_over_text   = *_end_over;
+*end_over_block  = *_end_over;
+
+sub end_Document    {
+  my $self = shift;
+  $self->emit;        # Make sure buffer gets flushed
+  print {$self->{'output_fh'} } "=cut\n"
+}
+
+sub _end_generic  {
+  my $self = shift;
+  $self->check_that_all_is_closed();
+  $self->emit;
+}
+
+*end_head1    = *_end_generic;
+*end_head2    = *_end_generic;
+*end_head3    = *_end_generic;
+*end_head4    = *_end_generic;
+*end_encoding = *_end_generic;
+*end_Para     = *_end_generic;
+*end_Verbatim = *_end_generic;
+
+sub _start_fcode {
+  my ($type, $self, $flags) = @_;
+
+  # How many brackets is set by BlackBox unless the count is 1
+  my $bracket_count = (exists $flags->{'~bracket_count'})
+                       ? $flags->{'~bracket_count'}
+                       : 1;
+  $self->handle_text($type . ( "<" x $bracket_count));
+
+  my $rspacer = "";
+  if ($bracket_count > 1) {
+    my $lspacer = (exists $flags->{'~lspacer'})
+                  ? $flags->{'~lspacer'}
+                  : " ";
+    $self->handle_text($lspacer);
+
+    $rspacer = (exists $flags->{'~rspacer'})
+                  ? $flags->{'~rspacer'}
+                  : " ";
+  }
+
+  # BlackBox doesn't output things for for the ending code callbacks, so save
+  # what we need.
+  push @{$self->{'fcode_end'}}, [ $bracket_count, $rspacer ];
+}
+
+sub start_B { _start_fcode('B', @_); }
+sub start_C { _start_fcode('C', @_); }
+sub start_E { _start_fcode('E', @_); }
+sub start_F { _start_fcode('F', @_); }
+sub start_I { _start_fcode('I', @_); }
+sub start_S { _start_fcode('S', @_); }
+sub start_X { _start_fcode('X', @_); }
+sub start_Z { _start_fcode('Z', @_); }
+
+sub _end_fcode {
+    my $self = shift;
+    my $fcode_end = pop @{$self->{'fcode_end'}};
+    my $bracket_count = 1;
+    my $rspacer = "";
+
+    if (! defined $fcode_end) { # If BlackBox is working, this shouldn't
+                                # happen, but verify
+      $self->whine($self->{line_count}, "Extra '>'");
+    }
+    else {
+      $bracket_count = $fcode_end->[0];
+      $rspacer = $fcode_end->[1];
+    }
+
+    $self->handle_text($rspacer) if $bracket_count > 1;
+    $self->handle_text(">" x $bracket_count);
+}
+
+*end_B   = *_end_fcode;
+*end_C   = *_end_fcode;
+*end_E   = *_end_fcode;
+*end_F   = *_end_fcode;
+*end_I   = *_end_fcode;
+*end_S   = *_end_fcode;
+*end_X   = *_end_fcode;
+*end_Z   = *_end_fcode;
+
+sub start_L {
+    _start_fcode('L', @_);
+    $_[0]->handle_text($_[1]->{raw});
+    $_[0]->{inL}++
+}
+
+sub end_L {
+  my $self = shift;
+  $self->{inL}--;
+  if ($self->{inL} < 0) {   # If BlackBox is working, this shouldn't
+                            # happen, but verify
+    $self->whine($self->{line_count}, "Extra '>' ending L<>");
+    $self->{inL} = 0;
+  }
+
+  $self->_end_fcode(@_);
+}
+
+sub emit {
+  my $self = shift;
+
+  if ($self->{buffer} ne "") {
+    print { $self->{'output_fh'} } "",$self->{buffer} ,"\n\n";
+
+    $self->{buffer} = "";
+  }
+
+  return;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Pod::Simple::JustPod -- just the Pod, the whole Pod, and nothing but the Pod
+
+=head1 SYNOPSIS
+
+ my $infile  = "mixed_code_and_pod.pm";
+ my $outfile = "just_the_pod.pod";
+ open my $fh, ">$outfile" or die "Can't write to $outfile: $!";
+
+ my $parser = Pod::Simple::JustPod->new();
+ $parser->output_fh($fh);
+ $parser->parse_file($infile);
+ close $fh or die "Can't close $outfile: $!";
+
+=head1 DESCRIPTION
+
+This class returns a copy of its input, translated into Perl's internal
+encoding (UTF-8), and with all the non-Pod lines removed.
+
+This is a subclass of L<Pod::Simple::Methody> and inherits all its methods.
+And since, that in turn is a subclass of L<Pod::Simple>, you can use any of
+its methods.  This means you can output to a string instead of a file, or
+you can parse from an array.
+
+This class strives to return the Pod lines of the input completely unchanged,
+except for any necessary translation into Perl's internal encoding, and it makes
+no effort to return trailing spaces on lines; these likely will be stripped.
+If the input pod is well-formed with no warnings nor errors generated, the
+extracted pod should generate the same documentation when formatted by a Pod
+formatter as the original file does.
+
+By default, warnings are output to STDERR
+
+=head1 SEE ALSO
+
+L<Pod::Simple>, L<Pod::Simple::Methody>
+
+=head1 SUPPORT
+
+Questions or discussion about POD and Pod::Simple should be sent to the
+L<mailto:pod-people@perl.org> mail list. Send an empty email to
+L<mailto:pod-people-subscribe@perl.org> to subscribe.
+
+This module is managed in an open GitHub repository,
+L<https://github.com/theory/pod-simple/>. Feel free to fork and contribute, or
+to clone L<git://github.com/theory/pod-simple.git> and send patches!
+
+Patches against Pod::Simple are welcome. Please send bug reports to
+L<mailto:<bug-pod-simple@rt.cpan.org>.
+
+=head1 COPYRIGHT AND DISCLAIMERS
+
+Copyright (c) 2002 Sean M. Burke.
+
+This library is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+This program is distributed in the hope that it will be useful, but
+without any warranty; without even the implied warranty of
+merchantability or fitness for a particular purpose.
+
+=head1 AUTHOR
+
+Pod::Simple was created by Sean M. Burke <sburke@cpan.org>.
+But don't bother him, he's retired.
+
+Pod::Simple is maintained by:
+
+=over
+
+=item * Allison Randal C<allison@perl.org>
+
+=item * Hans Dieter Pearcey C<hdp@cpan.org>
+
+=item * David E. Wheeler C<dwheeler@cpan.org>
+
+=back
+
+Pod::Simple::JustPod was developed by John SJ Anderson
+C<genehack@genehack.org>, with contributions from Karl Williamson
+C<khw@cpan.org>.
+
+=cut
index e5e7038..70fcffe 100755 (executable)
@@ -23,7 +23,7 @@ Pod::Simple
 Pod::Simple::BlackBox  Pod::Simple::Checker    Pod::Simple::DumpAsText
 Pod::Simple::DumpAsXML Pod::Simple::HTML       Pod::Simple::HTMLBatch
 Pod::Simple::HTMLLegacy        Pod::Simple::LinkSection        Pod::Simple::Methody
-Pod::Simple::Progress  Pod::Simple::PullParser
+Pod::Simple::JustPod   Pod::Simple::Progress   Pod::Simple::PullParser
 Pod::Simple::PullParserEndToken        Pod::Simple::PullParserStartToken
 Pod::Simple::PullParserTextToken       Pod::Simple::PullParserToken
 Pod::Simple::RTF       Pod::Simple::Search     Pod::Simple::SimpleTree
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/t/JustPod01.t b/gnu/usr.bin/perl/cpan/Pod-Simple/t/JustPod01.t
new file mode 100644 (file)
index 0000000..c74b337
--- /dev/null
@@ -0,0 +1,219 @@
+#! user/bin/perl -w
+
+# t/JustPod01.t - check basics of Pod::Simple::JustPod
+
+BEGIN {
+  chdir 't' if -d 't';
+}
+
+use strict;
+use lib '../lib';
+use Test::More tests => 2;
+
+use warnings;
+use utf8;
+
+use_ok('Pod::Simple::JustPod') or exit;
+
+my $parser = Pod::Simple::JustPod->new();
+
+my $input;
+while ( <DATA> ) { $input .= $_ }
+
+my $output;
+$parser->output_string( \$output );
+$parser->parse_string_document( $input );
+
+# Strip off text before =pod in the input
+$input =~ s/^.*(=pod.*)$/$1/mgs;
+
+my $msg = "got expected output";
+if ($output eq $input) {
+    pass($msg);
+}
+elsif ($ENV{PERL_TEST_DIFF}) {
+    fail($msg);
+    require File::Temp;
+    my $orig_file = File::Temp->new();
+    local $/ = "\n";
+    chomp $input;
+    print $orig_file $input, "\n";
+    close $orig_file || die "Can't close orig_file: $!";
+
+    chomp $output;
+    my $parsed_file = File::Temp->new();
+    print $parsed_file $output, "\n";
+    close $parsed_file || die "Can't close parsed_file";
+
+    my $diff = File::Temp->new();
+    system("$ENV{PERL_TEST_DIFF} $orig_file $parsed_file > $diff");
+
+    open my $fh, "<", $diff || die "Can't open $diff";
+    my @diffs = <$fh>;
+    diag(@diffs);
+}
+else {
+    eval { require Text::Diff; };
+    if ($@) {
+        is($output, $input, $msg);
+        diag("Set environment variable PERL_TEST_DIFF=diff_tool or install"
+           . " Text::Diff to see just the differences.");
+    }
+    else {
+        fail($msg);
+        diag Text::Diff::diff(\$input, \$output, { STYLE => 'Unified' });
+    }
+}
+
+
+__DATA__
+package utf8::all;
+use strict;
+use warnings;
+use 5.010; # state
+# ABSTRACT: turn on Unicode - all of it
+our $VERSION = '0.010'; # VERSION
+
+
+use Import::Into;
+use parent qw(Encode charnames utf8 open warnings feature);
+
+sub import {
+    my $target = caller;
+    'utf8'->import::into($target);
+    'open'->import::into($target, qw{:encoding(UTF-8) :std});
+    'charnames'->import::into($target, qw{:full :short});
+    'warnings'->import::into($target, qw{FATAL utf8});
+    'feature'->import::into($target, qw{unicode_strings}) if $^V >= v5.11.0;
+    'feature'->import::into($target, qw{unicode_eval fc}) if $^V >= v5.16.0;
+
+    {
+        no strict qw(refs); ## no critic (TestingAndDebugging::ProhibitNoStrict)
+        *{$target . '::readdir'} = \&_utf8_readdir;
+    }
+
+    # utf8 in @ARGV
+    state $have_encoded_argv = 0;
+    _encode_argv() unless $have_encoded_argv++;
+
+    $^H{'utf8::all'} = 1;
+
+    return;
+}
+
+sub _encode_argv {
+    $_ = Encode::decode('UTF-8', $_) for @ARGV;
+    return;
+}
+
+sub _utf8_readdir(*) { ## no critic (Subroutines::ProhibitSubroutinePrototypes)
+    my $handle = shift;
+    if (wantarray) {
+        my @all_files  = CORE::readdir($handle);
+        $_ = Encode::decode('UTF-8', $_) for @all_files;
+        return @all_files;
+    }
+    else {
+        my $next_file = CORE::readdir($handle);
+        $next_file = Encode::decode('UTF-8', $next_file);
+        return $next_file;
+    }
+}
+
+
+1;
+
+__END__
+
+=pod
+
+=encoding utf-8
+
+=head1 NAME
+
+utf8::all - turn on Unicode - all of it
+
+=head1 VERSION
+
+version 0.010
+
+=head1 SYNOPSIS
+
+    use utf8::all; # Turn on UTF-8. All of it.
+
+    open my $in, '<', 'contains-utf8';  # UTF-8 already turned on here
+    print length 'føø bār';             # 7 UTF-8 characters
+    my $utf8_arg = shift @ARGV;         # @ARGV is UTF-8 too!
+
+=head1 DESCRIPTION
+
+L<utf8> allows you to write your Perl encoded in UTF-8. That means UTF-8
+strings, variable names, and regular expressions. C<utf8::all> goes further, and
+makes C<@ARGV> encoded in UTF-8, and filehandles are opened with UTF-8 encoding
+turned on by default (including STDIN, STDOUT, STDERR), and charnames are
+imported so C<\N{...}> sequences can be used to compile Unicode characters based
+on names. If you I<don't> want UTF-8 for a particular filehandle, you'll have to
+set C<binmode $filehandle>.
+
+The pragma is lexically-scoped, so you can do the following if you had some
+reason to:
+
+    {
+        use utf8::all;
+        open my $out, '>', 'outfile';
+        my $utf8_str = 'føø bār';
+        print length $utf8_str, "\n"; # 7
+        print $out $utf8_str;         # out as utf8
+    }
+    open my $in, '<', 'outfile';      # in as raw
+    my $text = do { local $/; <$in>};
+    print length $text, "\n";         # 10, not 7!
+
+=head1 INTERACTION WITH AUTODIE
+
+If you use L<autodie>, which is a great idea, you need to use at least version
+B<2.12>, released on L<June 26, 2012|https://metacpan.org/source/PJF/autodie-2.12/Changes#L3>.
+Otherwise, autodie obliterates the IO layers set by the L<open> pragma. See
+L<RT #54777|https://rt.cpan.org/Ticket/Display.html?id=54777> and
+L<GH #7|https://github.com/doherty/utf8-all/issues/7>.
+
+=head1 AVAILABILITY
+
+The project homepage is L<http://metacpan.org/release/utf8-all/>.
+
+The latest version of this module is available from the Comprehensive Perl
+Archive Network (CPAN). Visit L<http://www.perl.com/CPAN/> to find a CPAN
+site near you, or see L<https://metacpan.org/module/utf8::all/>.
+
+=head1 SOURCE
+
+The development version is on github at L<http://github.com/doherty/utf8-all>
+and may be cloned from L<git://github.com/doherty/utf8-all.git>
+
+=head1 BUGS AND LIMITATIONS
+
+You can make new bug reports, and view existing ones, through the
+web interface at L<https://github.com/doherty/utf8-all/issues>.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+Michael Schwern <mschwern@cpan.org>
+
+=item *
+
+Mike Doherty <doherty@cpan.org>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2009 by Michael Schwern <mschwern@cpan.org>.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/t/JustPod02.t b/gnu/usr.bin/perl/cpan/Pod-Simple/t/JustPod02.t
new file mode 100644 (file)
index 0000000..8205aec
--- /dev/null
@@ -0,0 +1,445 @@
+use strict;
+use warnings;
+
+use Test::More;
+
+BEGIN { plan tests => 1 }
+
+use Pod::Simple::JustPod;
+
+my @orig = <DATA>;
+my $parsed;
+
+my $parser = Pod::Simple::JustPod->new();
+$parser->output_string(\$parsed);
+$parser->parse_lines(@orig, undef);
+
+my $orig = join "", @orig;
+
+my $msg = "Verify parsed pod sufficiently matches original";
+if ($parsed eq $orig) {
+    pass($msg);
+}
+elsif ($ENV{PERL_TEST_DIFF}) {
+    fail($msg);
+    require File::Temp;
+    my $orig_file = File::Temp->new();
+    local $/ = "\n";
+    chomp $orig;
+    print $orig_file $orig, "\n";
+    close $orig_file || die "Can't close orig_file: $!";
+  
+    chomp $parsed;
+    my $parsed_file = File::Temp->new();
+    print $parsed_file $parsed, "\n";
+    close $parsed_file || die "Can't close parsed_file";
+  
+    my $diff = File::Temp->new();
+    system("$ENV{PERL_TEST_DIFF} $orig_file $parsed_file > $diff");
+  
+    open my $fh, "<", $diff || die "Can't open $diff";
+    my @diffs = <$fh>;
+    diag(@diffs);
+}
+else {
+    eval { require Text::Diff; };
+    if ($@) {
+        is($parsed, $orig, $msg);
+        diag("Set environment variable PERL_TEST_DIFF=diff_tool or install"
+           . " Text::Diff to see just the differences.");
+    }
+    else {
+        fail($msg);
+        diag Text::Diff::diff(\$orig, \$parsed, { STYLE => 'Unified' });
+    }
+}
+
+# The data is adapted from a test file from pod2lators.  Extra spaces are
+# added in places to make sure they get retained, and some extra tests
+__DATA__
+=pod
+
+=encoding  ASCII
+
+=head1 NAME
+
+basic.pod - Test of various basic POD features in translators.
+
+=head1 HEADINGS
+
+Try a few different levels of headings, with embedded formatting codes and
+other interesting bits.
+
+=head1 This C<is> a "level 1" heading
+
+=head2  ``Level'' "2 I<heading>
+
+=head3  Level 3 B<heading I<with C<weird F<stuff "" (double quote)>>>>
+
+=head4  Level "4 C<heading>
+
+Now try again with B<intermixed> F<text>.
+
+=head1 This C<is> a "level 1" heading
+
+Text.
+
+=head2 ``Level'' 2 I<heading>
+
+Text.
+
+=head3 Level 3 B<heading I<with C<weird F<stuff>>>>
+
+Text.
+
+=head4 Level "4 C<heading>
+
+Text.
+
+=head1 LINKS
+
+These are all taken from the Pod::Parser tests.
+
+Try out I<LOTS> of different ways of specifying references:
+
+Reference the L<manpage/section>
+
+Reference the L<"manpage"/section>
+
+Reference the L<manpage/"section">
+
+Now try it using the new "|" stuff ...
+
+Reference the L<thistext|manpage/section>|
+
+Reference the L<thistext | manpage / section>|
+
+Reference the L<thistext| manpage/ section>|
+
+Reference the L<thistext |manpage /section>|
+
+Reference the L<thistext|manpage/"section">|
+
+Reference the L<thistext|
+manpage/
+section>|
+
+And then throw in a few new ones of my own.
+
+L<foo>
+
+L<foo|bar>
+
+L<foo/bar>
+
+L<foo/"baz boo">
+
+L</bar>
+
+L</"baz boo">
+
+L</baz boo>
+
+L<foo bar/baz boo>
+
+L<"boo var baz">
+
+L<bar baz>
+
+L</boo>, L</bar>, and L</baz>
+
+L<fooZ<>bar>
+
+L<Testing I<italics>|foo/bar>
+
+L<foo/I<Italic> text>
+
+L<fooE<verbar>barZ<>/Section C<with> I<B<other> markup>>
+
+=head1 OVER AND ITEMS
+
+Taken from Pod::Parser tests, this is a test to ensure that multiline
+=item paragraphs get indented appropriately.
+
+=over 4
+
+=item This 
+is
+a
+test.
+
+=back
+
+There should be whitespace now before this line.
+
+Taken from Pod::Parser tests, this is a test to ensure the nested =item
+paragraphs get indented appropriately.
+
+=over  2
+
+=item  1
+
+First section.
+
+=over 2
+
+=item a
+
+this is item a
+
+=item b
+
+this is item b
+
+=back
+
+=item 2
+
+Second section.
+
+=over 2
+
+=item  a
+
+this is item a
+
+=item b
+
+this is item b
+
+=item c
+
+=item d
+
+This is item c & d.
+
+=back
+
+=back
+
+Now some additional weirdness of our own.  Make sure that multiple tags
+for one paragraph are properly compacted.
+
+=over 4
+
+=item  "foo"
+
+=item B<bar>
+
+=item C<baz>
+
+There shouldn't be any spaces between any of these item tags; this idiom
+is used in perlfunc.
+
+=item   Some longer item text
+
+Just to make sure that we test paragraphs where the item text doesn't fit
+in the margin of the paragraph (and make sure that this paragraph fills a
+few lines).
+
+Let's also make it multiple paragraphs to be sure that works.
+
+=back
+
+Test use of =over without =item as a block "quote" or block paragraph.
+
+=over 4
+
+This should be indented four spaces but otherwise formatted the same as
+any other regular text paragraph.  Make sure it's long enough to see the
+results of the formatting.....
+
+=back
+
+Now try the same thing nested, and make sure that the indentation is reset
+back properly.
+
+=over 4
+
+=over 4
+
+This paragraph should be doubly indented.
+
+=back
+
+This paragraph should only be singly indented.
+
+=over 4
+
+=item
+
+This is an item in the middle of a block-quote, which should be allowed.
+
+=item
+
+We're also testing tagless item commands.
+
+=back
+
+Should be back to the single level of indentation.
+
+=back
+
+Should be back to regular indentation.
+
+Now also check the transformation of * into real bullets for man pages.
+
+=over
+
+=item *
+
+An item.  We're also testing using =over without a number, and making sure
+that item text wraps properly.
+
+=item  *
+
+Another item.
+
+=back
+
+and now test the numbering of item blocks.
+
+=over 4
+
+=item  1.
+
+First item.
+
+=item 2.
+
+Second item.
+
+=back
+
+=head1   FORMATTING    CODES
+
+Another test taken from Pod::Parser.
+
+This is a test to see if I can do not only C<$self> and C<method()>, but
+also C<< $self->method() >> and C<< $self->{FIELDNAME} >> and
+C<< $Foo <=> $Bar >> without resorting to escape sequences. If 
+I want to refer to the right-shift operator I can do something
+like C<<< $x >> 3 >>> or even C<<<< $y >> 5 >>>>.
+
+Now for the grand finale of C<< $self->method()->{FIELDNAME} = {FOO=>BAR} >>.
+And I also want to make sure that newlines work like this
+C<<<
+$self->{FOOBAR} >> 3 and [$b => $a]->[$a <=> $b]
+>>>
+
+Of course I should still be able to do all this I<with> escape sequences
+too: C<$self-E<gt>method()> and C<$self-E<gt>{FIELDNAME}> and
+C<{FOO=E<gt>BAR}>.
+
+Dont forget C<$self-E<gt>method()-E<gt>{FIELDNAME} = {FOO=E<gt>BAR}>.
+
+And make sure that C<0> works too!
+
+Now, if I use << or >> as my delimiters, then I have to use whitespace.
+So things like C<<$self->method()>> and C<<$self->{FIELDNAME}>> wont end
+up doing what you might expect since the first > will still terminate
+the first < seen.
+
+Lets make sure these work for empty ones too, like C<<<  >>>,
+C<<<< 
+>>>>, and C<< >> >> (just to be obnoxious)
+
+The statement: C<This is dog kind's I<finest> hour!> is a parody of a
+quotation from Winston Churchill.
+
+The following tests are added to those:
+
+Make sure that a few othZ<>er odd I<Z<>things> still work.  This should be
+a vertical bar:  E<verbar>.  Here's a test of a few more special escapes
+that have to be supported:
+
+=over 3
+
+=item  E<amp>
+
+An ampersand.
+
+=item E<apos>
+
+An apostrophe.
+
+=item E<lt>
+
+A less-than sign.
+
+=item E<gt>
+
+A greater-than sign.
+
+=item E<quot>
+
+A double quotation mark.
+
+=item E<sol>
+
+A forward slash.
+
+=back
+
+Try to get this bit of text over towards the edge so S<|that all of this
+text inside SE<lt>E<gt> won't|> be wrapped.  Also test the
+|sameE<nbsp>thingE<nbsp>withE<nbsp>non-breakingS< spaces>.|
+
+There is a soft hyE<shy>phen in hyphen at hy-phen.
+
+This is a test of an X<index entry>index entry.
+
+=head1 VERBATIM
+
+Throw in a few verbatim paragraphs.
+
+    use Term::ANSIColor;
+    print color 'bold blue';
+    print "This text is bold blue.\n";
+    print color 'reset';
+    print "This text is normal.\n";
+    print colored ("Yellow on magenta.\n", 'yellow on_magenta');
+    print "This text is normal.\n";
+    print colored ['yellow on_magenta'], "Yellow on magenta.\n";
+
+    use Term::ANSIColor qw(uncolor);
+    print uncolor '01;31', "\n";
+
+But this isn't verbatim (make sure it wraps properly), and the next
+paragraph is again:
+
+    use Term::ANSIColor qw(:constants);
+    print BOLD, BLUE, "This text is in bold blue.\n", RESET;
+
+    use Term::ANSIColor qw(:constants); $Term::ANSIColor::AUTORESET = 1; print BOLD BLUE "This text is in bold blue.\n"; print "This text is normal.\n";
+
+(Ugh, that's obnoxiously long.)  Try different spacing:
+
+       Starting with a tab.
+Not
+starting
+with
+a
+tab.  But this should still be verbatim.
+ As should this.
+
+This isn't.
+
+ This is.  And this:   is an internal tab.  It should be:
+                    |--| <= lined up with that.
+
+(Tricky, but tabs should be expanded before the translator starts in on
+the text since otherwise text with mixed tabs and spaces will get messed
+up.)
+
+    And now we test verbatim paragraphs right before a heading.  Older
+    versions of Pod::Man generated two spaces between paragraphs like this
+    and the heading.  (In order to properly test this, one may have to
+    visually inspect the nroff output when run on the generated *roff
+    text, unfortunately.)
+
+=head1 CONCLUSION
+
+That's all, folks!
+
+=cut
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/t/JustPod_corpus.t b/gnu/usr.bin/perl/cpan/Pod-Simple/t/JustPod_corpus.t
new file mode 100644 (file)
index 0000000..e0bb878
--- /dev/null
@@ -0,0 +1,156 @@
+# Testing Pod::Simple::JustPod against *.pod in /t
+use strict;
+
+BEGIN {
+  if($ENV{PERL_CORE}) {
+    chdir 't';
+    @INC = '../lib';
+  }
+
+  use Config;
+  if ($Config::Config{'extensions'} !~ /\bEncode\b/) {
+    print "1..0 # Skip: Encode was not built\n";
+    exit 0;
+  }
+}
+
+use File::Find;
+use File::Spec;
+use Test::More;
+
+use Pod::Simple::JustPod;
+
+my @test_files;
+
+BEGIN {
+  sub source_path {
+    my $file = shift;
+    if ($ENV{PERL_CORE}) {
+      require File::Spec;
+      my $updir = File::Spec->updir;
+      my $dir   = File::Spec->catdir($updir, 'lib', 'Pod', 'Simple', 't');
+      return File::Spec->catdir($dir, $file);
+    }
+    else {
+      return $file;
+    }
+  }
+
+  my @test_dirs = (
+    File::Spec->catdir( source_path('t') ) ,
+    File::Spec->catdir( File::Spec->updir, 't') ,
+  );
+
+  my $test_dir;
+  foreach( @test_dirs ) {
+    $test_dir = $_ and last if -e;
+  }
+
+  die "Can't find the test dir" unless $test_dir;
+  print "# TESTDIR: $test_dir\n";
+
+  sub wanted {
+    push @test_files, $File::Find::name
+      if $File::Find::name =~ /\.pod$/;
+  }
+  find(\&wanted , $test_dir );
+
+  plan tests => scalar @test_files;
+}
+
+foreach my $file (@test_files) {
+  my $parser = Pod::Simple::JustPod->new();
+  $parser->complain_stderr(0);
+
+  my $input;
+  open( IN , '<:raw' , $file ) or die "$file: $!";
+  $input .= $_ while (<IN>);
+  close( IN );
+
+  my $output;
+  $parser->output_string( \$output );
+  $parser->parse_string_document( $input );
+
+  if ($parser->any_errata_seen()) {
+    pass("Skip '$file' because of pod errors");
+    next if "$]" lt '5.010.001';     # note() not found in earlier versions
+    my $errata = $parser->errata_seen();
+    foreach my $line_number (sort { $a <=> $b } keys %$errata) {
+        foreach my $err_msg (sort @{$errata->{$line_number}}) {
+            note("$file: $line_number: $err_msg");
+        }
+    }
+    next;
+  }
+
+  my $encoding = $parser->encoding();
+  if (defined $encoding) {
+    eval { require Encode; };
+    $input = Encode::decode($parser->encoding(), $input);
+  }
+
+  my @input = split "\n", $input;
+  my $stripped_input = "";
+  while (defined ($_ = shift @input)) {
+    if (/ ^ = [a-z]+ /x) {
+      my $line = "$_\n";
+
+      if ($stripped_input eq "" || $_ !~ /^=pod/) {
+        $stripped_input .= $line;
+      }
+      while (defined ($_ = shift @input)) {
+        $stripped_input .= "$_\n";
+        last if / ^ =cut /x;
+      }
+    }
+  }
+  $stripped_input =~ s/ ^ =cut \n (.) /$1/mgx;
+
+  $input = $stripped_input if $stripped_input ne "";
+  if ($input !~ / ^ =pod /x) {
+    $input =~ s/ ^ \s+ //x;
+    $input = "=pod\n\n$input";
+  }
+  if ($input !~ / =cut $ /x) {
+    $input =~ s/ \s+ $ //x;
+    $input .= "\n\n=cut\n";
+  }
+
+  my $msg = "got expected output for $file";
+  if ($output eq $input) {
+      pass($msg);
+  }
+  elsif ($ENV{PERL_TEST_DIFF}) {
+    fail($msg);
+    require File::Temp;
+    my $orig_file = File::Temp->new();
+    local $/ = "\n";
+    chomp $input;
+    print $orig_file $input, "\n";
+    close $orig_file || die "Can't close orig_file: $!";
+
+    chomp $output;
+    my $parsed_file = File::Temp->new();
+    print $parsed_file $output, "\n";
+    close $parsed_file || die "Can't close parsed_file";
+
+    my $diff = File::Temp->new();
+    system("$ENV{PERL_TEST_DIFF} $orig_file $parsed_file > $diff");
+
+    open my $fh, "<", $diff || die "Can't open $diff";
+    my @diffs = <$fh>;
+    diag(@diffs);
+  }
+  else {
+      eval { require Text::Diff; };
+      if ($@) {
+          is($output, $input, $msg);
+          diag("Set environment variable PERL_TEST_DIFF=diff_tool or install"
+             . " Text::Diff to see just the differences.");
+      }
+      else {
+          fail($msg);
+          diag Text::Diff::diff(\$input, \$output, { STYLE => 'Unified' });
+      }
+  }
+}
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/t/content_seen.t b/gnu/usr.bin/perl/cpan/Pod-Simple/t/content_seen.t
new file mode 100644 (file)
index 0000000..82095ba
--- /dev/null
@@ -0,0 +1,34 @@
+BEGIN {
+    if($ENV{PERL_CORE}) {
+        chdir 't';
+        @INC = '../lib';
+    }
+}
+
+use strict;
+use Test;
+BEGIN { plan tests => 2 };
+
+use Pod::Simple::Text;
+
+my $p = Pod::Simple::Text->new();
+$p->parse_string_document('dm+aSxLl7V3VUJFIe6CFDU13zhZ3yvjIuVkp6l//ZHcDcX014vnnh3FoElI92kFB
+JGFU23Vga5Tfz0Epybwio9dq1gzrZ/PIcil2MnEcUWSrIStriv4hAbf0MXcNRHOM
+oOV7xKU=
+=y6KV
+-----END PGP PUBLIC KEY BLOCK-----};
+
+print $key;
+exit;
+');
+
+# The =y6KV should not make this appear to be pod
+ok ! $p->content_seen;
+
+my $q = Pod::Simple::Text->new();
+$q->parse_string_document('=head1 yes this is pod
+
+And this fills it in
+');
+
+ok $q->content_seen;
index 32c763e..95b1224 100644 (file)
@@ -8,7 +8,16 @@ WŚRÓD NOCNEJ CISZY -- explicitly utf8 test document in Polish
 =head1 DESCRIPTION
 
 This is a test Pod document in UTF8.  Its content is the lyrics to
-the Polish Christmas carol "Wśród nocnej ciszy".
+the Polish Christmas carol "Wśród nocnej ciszy", except it includes
+a few lines to test RTF specially.
+
+ff  is a character in the upper half of Plane 0, so should be negative in RTF
+𝔸 is a character in Plane 1, so should be expressed as a surrogate pair in RTF
+
+All the ASCII printables
+ !"#$%&\'()*+,-./0123456789:;<=>?@
+ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`
+abcdefghijklmnopqrstuvwxyz{|}~
 
 Wśród nocnej ciszy głos się rozchodzi: /
 Wstańcie, pasterze, Bóg się nam rodzi! /
@@ -38,6 +47,14 @@ Chleba i wina.
 
 And now as verbatim text:
 
+  ff  upper half, Plane 0
+  𝔸 Plane 1
+
+  All the ASCII printables
+   !"#$%&\'()*+,-./0123456789:;<=>?@
+  ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`
+  abcdefghijklmnopqrstuvwxyz{|}~
+
   Wśród nocnej ciszy głos się rozchodzi:
   Wstańcie, pasterze, Bóg się nam rodzi!
   Czym prędzej się wybierajcie,
index 2778571..2eccfe7 100644 (file)
   </head1>
   <Para start_line="10">
     This is a test Pod document in UTF8. Its content is the lyrics to the
-    Polish Christmas carol &#34;W&#347;r&#243;d nocnej ciszy&#34;.
+    Polish Christmas carol &#34;W&#347;r&#243;d nocnej ciszy&#34;, except
+    it includes a few lines to test RTF specially.
   </Para>
-  <Para start_line="13">
+  <Para start_line="14">
+    &#64256; is a character in the upper half of Plane 0, so should be negative
+    in RTF &#120120; is a character in Plane 1, so should be expressed as a
+    surrogate pair in RTF
+  </Para>
+  <Para start_line="17">
+    All the ASCII printables
+    !&#34;#$%&#38;\&#39;()*+,-./0123456789:;&#60;=&#62;?@
+    ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_` abcdefghijklmnopqrstuvwxyz{|}~
+  </Para>
+  <Para start_line="22">
     W&#347;r&#243;d nocnej ciszy g&#322;os si&#281; rozchodzi: / Wsta&#324;cie,
     pasterze, B&#243;g si&#281; nam rodzi! / Czym pr&#281;dzej si&#281;
     wybierajcie, / Do Betlejem pospieszajcie / Przywita&#263; Pana.
   </Para>
-  <Para start_line="19">
+  <Para start_line="28">
     Poszli, znale&#378;li Dzieci&#261;tko w &#380;&#322;obie / Z wszystkimi
     znaki danymi sobie. / Jako Bogu cze&#347;&#263; Mu dali, / A
     witaj&#261;c zawo&#322;ali / Z wielkiej rado&#347;ci:
   </Para>
-  <Para start_line="25">
+  <Para start_line="34">
     Ach, witaj Zbawco z dawno &#380;&#261;dany, / Wiele tysi&#281;cy lat
     wygl&#261;dany / Na Ciebie kr&#243;le, prorocy / Czekali, a Ty&#347;
     tej nocy / Nam si&#281; objawi&#322;.
   </Para>
-  <Para start_line="31">
+  <Para start_line="40">
     I my czekamy na Ciebie, Pana, / A skoro przyjdziesz na g&#322;os
     kap&#322;ana, / Padniemy na twarz przed Tob&#261;, / Wierz&#261;c,
     &#380;e&#347; jest pod os&#322;on&#261; / Chleba i wina.
   </Para>
-  <head2 start_line="37">
+  <head2 start_line="46">
     As Verbatim
   </head2>
-  <Para start_line="39">
+  <Para start_line="48">
     And now as verbatim text:
   </Para>
-  <VerbatimFormatted start_line="41" xml:space="preserve">
+  <VerbatimFormatted start_line="50" xml:space="preserve">
+      &#64256;  upper half, Plane 0
+      &#120120; Plane 1
+    
+      All the ASCII printables
+       !&#34;#$%&#38;\&#39;()*+,-./0123456789:;&#60;=&#62;?@
+      ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`
+      abcdefghijklmnopqrstuvwxyz{|}~
+    
       W&#347;r&#243;d nocnej ciszy g&#322;os si&#281; rozchodzi:
       Wsta&#324;cie, pasterze, B&#243;g si&#281; nam rodzi!
       Czym pr&#281;dzej si&#281; wybierajcie,
@@ -66,7 +85,7 @@
       Wierz&#261;c, &#380;e&#347; jest pod os&#322;on&#261;
       Chleba i wina.
   </VerbatimFormatted>
-  <Para start_line="65">
+  <Para start_line="82">
     [end]
   </Para>
 </Document>
index 9777565..fd48ec0 100755 (executable)
@@ -43,17 +43,17 @@ skip( $unless_ascii,
 skip( $unless_ascii,
     $x->_out( sub { $_[0]->nbsp_for_S(1) },
     qq{=pod\n\nI like S<L</"bric-a-brac a gogo">>.\n}),
-'<Document><Para>I like <L content-implicit="yes" section="bric-a-brac a gogo" type="pod">&#34;bric-a-brac&#160;a&#160;gogo&#34;</L>.</Para></Document>'
+'<Document><Para>I like <L content-implicit="yes" raw="/&#34;bric-a-brac a gogo&#34;" section="bric-a-brac a gogo" type="pod">&#34;bric-a-brac&#160;a&#160;gogo&#34;</L>.</Para></Document>'
 );
 skip( $unless_ascii,
     $x->_out( sub { $_[0]->nbsp_for_S(1) },
     qq{=pod\n\nI like S<L<Stuff like that|/"bric-a-brac a gogo">>.\n}),
-'<Document><Para>I like <L section="bric-a-brac a gogo" type="pod">Stuff&#160;like&#160;that</L>.</Para></Document>'
+'<Document><Para>I like <L raw="Stuff like that|/&#34;bric-a-brac a gogo&#34;" section="bric-a-brac a gogo" type="pod">Stuff&#160;like&#160;that</L>.</Para></Document>'
 );
 skip( $unless_ascii,
     $x->_out( sub { $_[0]->nbsp_for_S(1) },
     qq{=pod\n\nI like S<L<Stuff I<like that>|/"bric-a-brac a gogo">>.\n}),
-'<Document><Para>I like <L section="bric-a-brac a gogo" type="pod">Stuff&#160;<I>like&#160;that</I></L>.</Para></Document>'
+'<Document><Para>I like <L raw="Stuff I&#60;like that&#62;|/&#34;bric-a-brac a gogo&#34;" section="bric-a-brac a gogo" type="pod">Stuff&#160;<I>like&#160;that</I></L>.</Para></Document>'
 );
 
 &ok( $x->_duo( sub { $_[0]->nbsp_for_S(1) },
@@ -219,7 +219,7 @@ ok(
 
 # Test HTML output of links.
 use Pod::Simple::HTML;
-my $PERLDOC = "http://search.cpan.org/perldoc";
+my $PERLDOC = "https://metacpan.org/pod";
 my $MANURL = "http://man.he.net/man";
 sub x ($) {
     Pod::Simple::HTML->_out(
@@ -230,12 +230,12 @@ sub x ($) {
 
 ok(
     x(qq{L<Net::Ping>\n}),
-    qq{\n<p><a href="$PERLDOC?Net%3A%3APing" class="podlinkpod"\n>Net::Ping</a></p>\n}
+    qq{\n<p><a href="$PERLDOC/Net%3A%3APing" class="podlinkpod"\n>Net::Ping</a></p>\n}
 );
 
 ok(
     x(qq{Be sure to read the L<Net::Ping> docs\n}),
-    qq{\n<p>Be sure to read the <a href="$PERLDOC?Net%3A%3APing" class="podlinkpod"\n>Net::Ping</a> docs</p>\n}
+    qq{\n<p>Be sure to read the <a href="$PERLDOC/Net%3A%3APing" class="podlinkpod"\n>Net::Ping</a> docs</p>\n}
 );
 
 ok(
@@ -250,7 +250,7 @@ ok(
 
 ok(
     x(qq{L<Net::Ping/Ping-pong>\n}),
-    qq{\n<p><a href="$PERLDOC?Net%3A%3APing#Ping-pong" class="podlinkpod"\n>&#34;Ping-pong&#34; in Net::Ping</a></p>\n}
+    qq{\n<p><a href="$PERLDOC/Net%3A%3APing#Ping-pong" class="podlinkpod"\n>&#34;Ping-pong&#34; in Net::Ping</a></p>\n}
 );
 
 ok(
@@ -270,7 +270,7 @@ ok(
 
 ok(
     x(qq{L<Net::Ping/Ping-E<112>ong>\n}),
-    qq{\n<p><a href="$PERLDOC?Net%3A%3APing#Ping-pong" class="podlinkpod"\n>&#34;Ping-pong&#34; in Net::Ping</a></p>\n}
+    qq{\n<p><a href="$PERLDOC/Net%3A%3APing#Ping-pong" class="podlinkpod"\n>&#34;Ping-pong&#34; in Net::Ping</a></p>\n}
 );
 
 ok(
@@ -315,17 +315,17 @@ ok(
 
 ok(
     x(qq{L<Perl Error Messages|perldiag>\n}),
-    qq{\n<p><a href="$PERLDOC?perldiag" class="podlinkpod"\n>Perl Error Messages</a></p>\n}
+    qq{\n<p><a href="$PERLDOC/perldiag" class="podlinkpod"\n>Perl Error Messages</a></p>\n}
 );
 
 ok(
     x(qq{L<Perl\nError\nMessages|perldiag>\n}),
-    qq{\n<p><a href="$PERLDOC?perldiag" class="podlinkpod"\n>Perl Error Messages</a></p>\n}
+    qq{\n<p><a href="$PERLDOC/perldiag" class="podlinkpod"\n>Perl Error Messages</a></p>\n}
 );
 
 ok(
     x(qq{L<Perl\nError\t  Messages|perldiag>\n}),
-    qq{\n<p><a href="$PERLDOC?perldiag" class="podlinkpod"\n>Perl Error Messages</a></p>\n}
+    qq{\n<p><a href="$PERLDOC/perldiag" class="podlinkpod"\n>Perl Error Messages</a></p>\n}
 );
 
 ok(
@@ -352,12 +352,12 @@ sub o ($) {
 
 ok(
     o(qq{L<Net::Ping>}),
-    qq{<p><a href="$PERLDOC?Net::Ping">Net::Ping</a></p>\n\n}
+    qq{<p><a href="$PERLDOC/Net::Ping">Net::Ping</a></p>\n\n}
 );
 
 ok(
     o(qq{Be sure to read the L<Net::Ping> docs}),
-    qq{<p>Be sure to read the <a href="$PERLDOC?Net::Ping">Net::Ping</a> docs</p>\n\n}
+    qq{<p>Be sure to read the <a href="$PERLDOC/Net::Ping">Net::Ping</a> docs</p>\n\n}
 );
 
 ok(
@@ -372,7 +372,7 @@ ok(
 
 ok(
     o(qq{L<Net::Ping/Ping-pong>}),
-    qq{<p><a href="$PERLDOC?Net::Ping#Ping-pong">&quot;Ping-pong&quot; in Net::Ping</a></p>\n\n}
+    qq{<p><a href="$PERLDOC/Net::Ping#Ping-pong">&quot;Ping-pong&quot; in Net::Ping</a></p>\n\n}
 );
 
 ok(
@@ -392,7 +392,7 @@ ok(
 
 ok(
     o(qq{L<Net::Ping/Ping-E<112>ong>}),
-    qq{<p><a href="$PERLDOC?Net::Ping#Ping-pong">&quot;Ping-pong&quot; in Net::Ping</a></p>\n\n}
+    qq{<p><a href="$PERLDOC/Net::Ping#Ping-pong">&quot;Ping-pong&quot; in Net::Ping</a></p>\n\n}
 );
 
 ok(
@@ -437,17 +437,17 @@ ok(
 
 ok(
     o(qq{L<Perl Error Messages|perldiag>}),
-    qq{<p><a href="$PERLDOC?perldiag">Perl Error Messages</a></p>\n\n}
+    qq{<p><a href="$PERLDOC/perldiag">Perl Error Messages</a></p>\n\n}
 );
 
 ok(
     o(qq{L<Perl\nError\nMessages|perldiag>}),
-    qq{<p><a href="$PERLDOC?perldiag">Perl Error Messages</a></p>\n\n}
+    qq{<p><a href="$PERLDOC/perldiag">Perl Error Messages</a></p>\n\n}
 );
 
 ok(
     o(qq{L<Perl\nError\t  Messages|perldiag>}),
-    qq{<p><a href="$PERLDOC?perldiag">Perl Error Messages</a></p>\n\n}
+    qq{<p><a href="$PERLDOC/perldiag">Perl Error Messages</a></p>\n\n}
 );
 
 ok(
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/t/github_issue_79.t b/gnu/usr.bin/perl/cpan/Pod-Simple/t/github_issue_79.t
new file mode 100644 (file)
index 0000000..a56b428
--- /dev/null
@@ -0,0 +1,73 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More;
+
+BEGIN {
+    eval { require Test::Deep; };
+    plan skip_all => 'Fails with Can\'t locate object method "print" via package "IO::File" at t/github_issue_79.t line 33' if $] le 5.012005;
+    plan skip_all => 'Need Test::Deep to test' if $@;
+    Test::Deep->import('cmp_deeply');
+}
+
+{
+package DumpAsXML::Enh;
+
+use parent 'Pod::Simple::DumpAsXML';
+
+sub new {
+    my ( $class ) = @_;
+    my $self = $class->SUPER::new();
+    $self->code_handler( sub { pop( @_ )->_handle_line( 'code', @_ ); } );
+    $self->cut_handler( sub { pop( @_ )->_handle_line( 'cut', @_ ); } );
+    $self->pod_handler( sub { pop( @_ )->_handle_line( 'pod', @_ ); } );
+    $self->whiteline_handler( sub { pop( @_ )->_handle_line( 'white', @_ ); } );
+    return $self;
+};
+
+sub _handle_line {
+    my ( $self, $elem, $text, $line ) = @_;
+    my $fh = $self->{ output_fh };
+    $fh->print( '  ' x $self->{ indent }, "<$elem start_line=\"$line\"/>\n" );
+};
+
+}
+
+my $output = '';
+my $parser = DumpAsXML::Enh->new();
+$parser->output_string( \$output );
+
+my $input = [
+    '=head1 DESCRIPTION',
+    '',
+    '    Verbatim paragraph.',
+    '',
+    '=cut',
+];
+my $expected_output = [
+    '<Document start_line="1">',
+    '  <head1 start_line="1">',
+    '    DESCRIPTION',
+    '  </head1>',
+    '  <VerbatimFormatted start_line="3" xml:space="preserve">',
+    '        Verbatim paragraph.',
+    '  </VerbatimFormatted>',
+    '  <cut start_line="5"/>',
+    '</Document>',
+];
+
+$parser->parse_lines( @$input, undef );
+
+my $actual_output = [ split( "\n", $output ) ];
+cmp_deeply( $actual_output, $expected_output ) or do {
+    diag( 'actual output:' );
+    diag( "|$_" ) for @$actual_output;
+    diag( 'expected output:' );
+    diag( "|$_" ) for @$expected_output;
+};
+
+done_testing;
+exit( 0 );
+
index 6264a15..2da4b28 100644 (file)
@@ -56,7 +56,7 @@ runtime behavior (see L</"TEST">).
 
 =over 4
 
-=item * C<PATH>
+=item *               C<PATH>
 
 Set the C<PATH> environment variable so that Configure finds the Cygwin
 versions of programs.  Any Windows directories should be removed or
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/t/rtf_utf8.t b/gnu/usr.bin/perl/cpan/Pod-Simple/t/rtf_utf8.t
new file mode 100644 (file)
index 0000000..0d2d8ec
--- /dev/null
@@ -0,0 +1,220 @@
+#!/usr/bin/perl -w
+
+# t/rtf_utf8.t - Check that RTF works with UTF-8 input
+
+BEGIN {
+    chdir 't' if -d 't';
+}
+
+my $expected = join "", <DATA>;
+
+use strict;
+use lib '../lib';
+use Test::More;
+use File::Spec;
+
+if ($] < 5.008) {
+    plan skip_all => "Doesn't work before 5.8";
+}
+else {
+    plan tests => 5;
+}
+
+for my $format (qw(RTF)) {
+    my $class = "Pod::Simple::RTF";
+    use_ok $class or next;
+    ok my $parser = $class->new, "Construct RTF parser";
+
+    my $output = '';
+    ok $parser->output_string(\$output), "Set RTF output string";
+    ok $parser->parse_file(File::Spec->catfile(qw(corpus polish_utf8.txt))),
+        "Parse to RTF via parse_file()";
+    $output =~ s/\\info.*?author \[see doc\]\}/VARIANT TEXT DELETED/s;
+    $output =~ s/$/\n/;
+
+    my $msg = "got expected output";
+    if ($output eq $expected) {
+        pass($msg);
+    }
+    elsif ($ENV{PERL_TEST_DIFF}) {
+        fail($msg);
+        require File::Temp;
+        my $orig_file = File::Temp->new();
+        local $/ = "\n";
+        chomp $expected;
+        print $orig_file $expected, "\n";
+        close $orig_file || die "Can't close orig_file: $!";
+
+        chomp $output;
+        my $parsed_file = File::Temp->new();
+        print $parsed_file $output, "\n";
+        close $parsed_file || die "Can't close parsed_file";
+
+        my $diff = File::Temp->new();
+        system("$ENV{PERL_TEST_DIFF} $orig_file $parsed_file > $diff");
+
+        open my $fh, "<", $diff || die "Can't open $diff";
+        my @diffs = <$fh>;
+        diag(@diffs);
+    }
+    else {
+        eval { require Text::Diff; };
+        if ($@) {
+            is($output, $expected, $msg);
+            diag("Set environment variable PERL_TEST_DIFF=diff_tool or install"
+            . " Text::Diff to see just the differences.");
+        }
+        else {
+            fail($msg);
+            diag Text::Diff::diff(\$expected, \$output, { STYLE => 'Unified' });
+        }
+    }
+}
+
+__DATA__
+{\rtf1\ansi\deff0
+
+{\fonttbl
+{\f0\froman Times New Roman;}
+{\f1\fmodern Courier New;}
+{\f2\fswiss Arial;}
+}
+
+{\stylesheet
+{\snext0 Normal;}
+{\*\cs10 \additive Default Paragraph Font;}
+{\*\cs16 \additive \i \sbasedon10 pod-I;}
+{\*\cs17 \additive \i\lang1024\noproof \sbasedon10 pod-F;}
+{\*\cs18 \additive \b \sbasedon10 pod-B;}
+{\*\cs19 \additive \f1\lang1024\noproof\sbasedon10 pod-C;}
+{\s20\ql \li0\ri0\sa180\widctlpar\f1\fs18\lang1024\noproof\sbasedon0 \snext0 pod-codeblock;}
+{\*\cs21 \additive \lang1024\noproof \sbasedon10 pod-computerese;}
+{\*\cs22 \additive \i\lang1024\noproof\sbasedon10 pod-L-pod;}
+{\*\cs23 \additive \i\lang1024\noproof\sbasedon10 pod-L-url;}
+{\*\cs24 \additive \i\lang1024\noproof\sbasedon10 pod-L-man;}
+
+{\*\cs25 \additive \f1\lang1024\noproof\sbasedon0 pod-codelbock-plain;}
+{\*\cs26 \additive \f1\lang1024\noproof\sbasedon25 pod-codelbock-ital;}
+{\*\cs27 \additive \f1\lang1024\noproof\sbasedon25 pod-codelbock-bold;}
+{\*\cs28 \additive \f1\lang1024\noproof\sbasedon25 pod-codelbock-bold-ital;}
+
+{\s31\ql \keepn\sb90\sa180\f2\fs32\ul\sbasedon0 \snext0 pod-head1;}
+{\s32\ql \keepn\sb90\sa180\f2\fs28\ul\sbasedon0 \snext0 pod-head2;}
+{\s33\ql \keepn\sb90\sa180\f2\fs25\ul\sbasedon0 \snext0 pod-head3;}
+{\s34\ql \keepn\sb90\sa180\f2\fs22\ul\sbasedon0 \snext0 pod-head4;}
+}
+
+{\colortbl;\red255\green0\blue0;\red0\green0\blue255;}
+{VARIANT TEXT DELETED{\company [see doc]}{\operator [see doc]}
+}
+
+\deflang1033\plain\lang1033\widowctrl
+{\header\pard\qr\plain\f2\fs17
+W\uc1\u346?R\'d3D NOCNEJ CISZY \_\_ explicitly utf8 test document in Polish, 
+p.\chpgn\par}
+\fs25
+
+
+
+{\pard\li0\s31\keepn\sb90\sa180\f2\fs32\ul{
+NAME
+}\par}
+
+{\pard\li0\sa180
+W\uc1\u346?R\'d3D NOCNEJ CISZY \_\_ explicitly utf8 test document 
+in Polish
+\par}
+
+{\pard\li0\s31\keepn\sb90\sa180\f2\fs32\ul{
+DESCRIPTION
+}\par}
+
+{\pard\li0\sa180
+This is a test Pod document in UT\'468. Its content is the lyrics 
+to the Polish Christmas carol "W\uc1\u347?r\'f3d nocnej ciszy", except 
+it includes a few lines to test RT\'46 specially.
+\par}
+
+{\pard\li0\sa180
+\uc1\u-1280? is a character in the upper half of Plane 0, so should 
+be negative in RT\'46 \uc1\u-10187\u-8904? is a character in Plane 
+1, so should be expressed as a surrogate pair in RT\'46
+\par}
+
+{\pard\li0\sa180
+All the ASCII printables !"#$%&\'5c'()*+,\_./0123456789:;<=>?@ ABCDE\'46GHIJKLMNOPQRSTUVWXYZ[{
+\cs21\lang1024\noproof \'5c]^\'5f`} abcdefghijklmnopqrstuvwxyz\'7b|\'7d~
+\par}
+
+{\pard\li0\sa180
+W\uc1\u347?r\'f3d nocnej ciszy g\uc1\u322?os si\uc1\u281? rozchodzi: 
+/ Wsta\uc1\u324?cie, pasterze, B\'f3g si\uc1\u281? nam rodzi! / Czym 
+pr\uc1\u281?dzej si\uc1\u281? wybierajcie, / Do Betlejem pospieszajcie 
+/ Przywita\uc1\u263? Pana.
+\par}
+
+{\pard\li0\sa180
+Poszli, znale\uc1\u378?li Dzieci\uc1\u261?tko w \uc1\u380?\uc1\u322?obie 
+/ Z wszystkimi znaki danymi sobie. / Jako Bogu cze\uc1\u347?\uc1\u263? 
+Mu dali, / A witaj\uc1\u261?c zawo\uc1\u322?ali / Z wielkiej rado\uc1\u347?ci:
+\par}
+
+{\pard\li0\sa180
+Ach, witaj Zbawco z dawno \uc1\u380?\uc1\u261?dany, / Wiele tysi\uc1\u281?cy 
+lat wygl\uc1\u261?dany / Na Ciebie kr\'f3le, prorocy / Czekali, a 
+Ty\uc1\u347? tej nocy / Nam si\uc1\u281? objawi\uc1\u322?.
+\par}
+
+{\pard\li0\sa180
+I my czekamy na Ciebie, Pana, / A skoro przyjdziesz na g\uc1\u322?os 
+kap\uc1\u322?ana, / Padniemy na twarz przed Tob\uc1\u261?, / Wierz\uc1\u261?c, 
+\uc1\u380?e\uc1\u347? jest pod os\uc1\u322?on\uc1\u261? / Chleba i 
+wina.
+\par}
+
+{\pard\li0\s32\keepn\sb90\sa180\f2\fs28\ul{
+As Verbatim
+}\par}
+
+{\pard\li0\sa180
+And now as verbatim text:
+\par}
+
+{\pard\li0\plain\s20\sa180\f1\fs18\lang1024\noproof
+  \uc1\u-1280?  upper half, Plane 0\line
+  \uc1\u-10187\u-8904? Plane 1\line
+\line
+  All the ASCII printables\line
+   !"#$%&\'5c'()*+,-./0123456789:;<=>?@\line
+  ABCDE\'46GHIJKLMNOPQRSTUVWXYZ[\'5c]^\'5f`\line
+  abcdefghijklmnopqrstuvwxyz\'7b|\'7d~\line
+\line
+  W\uc1\u347?r\'f3d nocnej ciszy g\uc1\u322?os si\uc1\u281? rozchodzi:\line
+  Wsta\uc1\u324?cie, pasterze, B\'f3g si\uc1\u281? nam rodzi!\line
+  Czym pr\uc1\u281?dzej si\uc1\u281? wybierajcie,\line
+  Do Betlejem pospieszajcie\line
+  Przywita\uc1\u263? Pana.\line
+\line
+  Poszli, znale\uc1\u378?li Dzieci\uc1\u261?tko w \uc1\u380?\uc1\u322?obie\line
+  Z wszystkimi znaki danymi sobie.\line
+  Jako Bogu cze\uc1\u347?\uc1\u263? Mu dali,\line
+  A witaj\uc1\u261?c zawo\uc1\u322?ali\line
+  Z wielkiej rado\uc1\u347?ci:\line
+\line
+  Ach, witaj Zbawco z dawno \uc1\u380?\uc1\u261?dany,\line
+  Wiele tysi\uc1\u281?cy lat wygl\uc1\u261?dany\line
+  Na Ciebie kr\'f3le, prorocy\line
+  Czekali, a Ty\uc1\u347? tej nocy\line
+  Nam si\uc1\u281? objawi\uc1\u322?.\line
+\line
+  I my czekamy na Ciebie, Pana,\line
+  A skoro przyjdziesz na g\uc1\u322?os kap\uc1\u322?ana,\line
+  Padniemy na twarz przed Tob\uc1\u261?,\line
+  Wierz\uc1\u261?c, \uc1\u380?e\uc1\u347? jest pod os\uc1\u322?on\uc1\u261?\line
+  Chleba i wina.
+\par}
+
+{\pard\li0\sa180
+[end]
+\par}
+}
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/t/search60.t b/gnu/usr.bin/perl/cpan/Pod-Simple/t/search60.t
new file mode 100644 (file)
index 0000000..4ffbbb1
--- /dev/null
@@ -0,0 +1,56 @@
+BEGIN {\r
+    if($ENV{PERL_CORE}) {\r
+        chdir 't';\r
+        @INC = '../lib';\r
+    }\r
+}\r
+\r
+use strict;\r
+use Pod::Simple::Search;\r
+use Test;\r
+BEGIN { plan tests => 4 }\r
+\r
+print "# ", __FILE__,\r
+ ": Testing forced case sensitivity ...\n";\r
+\r
+my $x = Pod::Simple::Search->new;\r
+die "Couldn't make an object!?" unless ok defined $x;\r
+\r
+$x->inc(0);\r
+$x->is_case_insensitive(0);\r
+\r
+use File::Spec;\r
+use Cwd;\r
+my $cwd = cwd();\r
+print "# CWD: $cwd\n";\r
+\r
+sub source_path {\r
+    my $file = shift;\r
+    if ($ENV{PERL_CORE}) {\r
+        my $updir = File::Spec->updir;\r
+        my $dir = File::Spec->catdir($updir, 'lib', 'Pod', 'Simple', 't');\r
+        return File::Spec->catdir ($dir, $file);\r
+    } else {\r
+        return $file;\r
+    }\r
+}\r
+\r
+my($A, $B);\r
+\r
+if(        -e ($A = source_path(  'search60/A'      ))) {\r
+  die "But where's $B?"\r
+    unless -e ($B = source_path(  'search60/B'));\r
+} elsif(   -e ($A = File::Spec->catdir($cwd, 't', 'search60', 'A'      ))) {\r
+  die "But where's $B?"\r
+    unless -e ($B = File::Spec->catdir($cwd, 't', 'search60', 'B'));\r
+} else {\r
+  die "Can't find the test corpora";\r
+}\r
+print "# OK, found the test corpora\n#  as $A\n# and $B\n#\n";\r
+ok 1;\r
+\r
+my($name2where, $where2name) = $x->survey($A, $B);\r
+\r
+ok ($name2where->{x} =~ m{^\Q$A\E[\\/]x\.pod$});\r
+\r
+ok ($name2where->{X} =~ m{^\Q$B\E[\\/]X\.pod$});\r
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/t/search60/A/x.pod b/gnu/usr.bin/perl/cpan/Pod-Simple/t/search60/A/x.pod
new file mode 100644 (file)
index 0000000..3932004
--- /dev/null
@@ -0,0 +1 @@
+=head1 x\r
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/t/search60/B/X.pod b/gnu/usr.bin/perl/cpan/Pod-Simple/t/search60/B/X.pod
new file mode 100644 (file)
index 0000000..654c580
--- /dev/null
@@ -0,0 +1 @@
+=head1 X\r
index 8650fb8..25c41cc 100755 (executable)
@@ -8,7 +8,7 @@ BEGIN {
 
 use strict;
 use lib '../lib';
-use Test::More tests => 87;
+use Test::More tests => 103;
 #use Test::More 'no_plan';
 
 use_ok('Pod::Simple::XHTML') or exit;
@@ -116,3 +116,42 @@ for my $spec (
     ok $p->parse_string_document( $pod ), "Parse POD to XHTML for $desc";
     is $output, $xhtml, "Should have expected XHTML output for $desc";
 }
+
+for my $spec (
+    [
+        "\n=pod\n\n\t\tfoo bar baz\n",
+        0,
+        "<pre><code>\t\tfoo bar baz</code></pre>\n\n",
+        'preserve tabs'
+    ],
+    [
+        "\n=pod\n\n\t\tfoo bar baz\n",
+        undef,
+        "<pre><code>                foo bar baz</code></pre>\n\n",
+        'preserve tabs'
+    ],
+    [
+        "\n=pod\n\n\t\tfoo bar baz\n",
+        -1,
+        "<pre><code>                foo bar baz</code></pre>\n\n",
+        'preserve tabs'
+    ],
+    [
+        "\n=pod\n\n\t\tfoo bar baz\n",
+        1,
+        "<pre><code>  foo bar baz</code></pre>\n\n",
+        'tabs are xlate to one space each'
+    ],
+) {
+    my ($pod, $tabs, $xhtml, $desc) = @$spec;
+    # Test XHTML output.
+    ok my $p = Pod::Simple::XHTML->new, "Construct XHMTL parser to test $desc";
+    $p->html_header('');
+    $p->html_footer('');
+    my $output = '';
+    $p->output_string( \$output );
+    is $tabs, $p->expand_verbatim_tabs($tabs),
+        'Set tab  for XHTML to ' . (defined $tabs ? qq{"$tabs"} : 'undef');
+    ok $p->parse_string_document( $pod ), "Parse POD to XHTML for $desc";
+    is $output, $xhtml, "Should have expected XHTML output for $desc";
+}
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/t/testlib2/pods/perlzoned.pod b/gnu/usr.bin/perl/cpan/Pod-Simple/t/testlib2/pods/perlzoned.pod
new file mode 100644 (file)
index 0000000..66dcbf4
--- /dev/null
@@ -0,0 +1,5 @@
+=head1 NAME
+
+perlzoned - This is just some test file
+
+=cut
index 3401810..3787006 100755 (executable)
@@ -184,7 +184,7 @@ ok( Pod::Simple::DumpAsXML->_out( \&nixy_mergy, "=pod\n\nZ<>F<C<Z<>fE<111>L<E<78
   '    <F>',
   '      <C>',
   '        fo',
-  '        <L content-implicit="yes" section="Ping-pong" to="Net::Ping" type="pod">',
+  '        <L content-implicit="yes" raw="E&#60;78&#62;et::Ping/Ping-E&#60;112&#62;ong" section="Ping-pong" to="Net::Ping" type="pod">',
   '          &#34;Ping-pong&#34; in Net::Ping',
   '        </L>',
   '        o',
index 37bd104..3dc13d7 100644 (file)
@@ -6,12 +6,13 @@ use Config;
 use File::Spec;
 use ExtUtils::MakeMaker;
 my $PERL_CORE = grep { $_ eq 'PERL_CORE=1' } @ARGV;
+my $defines = $ENV{PERL_CORE} ? q[-DPERL_EXT] : q[-DPERL_EXT -DUSE_PPPORT_H];
 
-WriteMakefile(
+my %params = (
   NAME         => q[List::Util],
   ABSTRACT     => q[Common Scalar and List utility subroutines],
   AUTHOR       => q[Graham Barr <gbarr@cpan.org>],
-  DEFINE       => ($ENV{PERL_CORE} ? q[-DPERL_EXT] : q[-DPERL_EXT -DUSE_PPPORT_H]),
+  DEFINE       => $defines,
   DISTNAME     => q[Scalar-List-Utils],
   VERSION_FROM => 'lib/List/Util.pm',
 
@@ -29,7 +30,9 @@ WriteMakefile(
     ? ()
     : (
       INSTALLDIRS      => ($] < 5.011 ? q[perl] : q[site]),
-      PREREQ_PM        => {'Test::More' => 0,},
+      TEST_REQUIRES => {
+        'Test::More' => 0,
+      },
       (eval { ExtUtils::MakeMaker->VERSION(6.31) } ? (LICENSE => 'perl') : ()),
       (eval { ExtUtils::MakeMaker->VERSION(6.48) } ? (MIN_PERL_VERSION => '5.006') : ()),
       ( eval { ExtUtils::MakeMaker->VERSION(6.46) } ? (
@@ -54,3 +57,18 @@ WriteMakefile(
     )
   ),
 );
+
+if ($params{TEST_REQUIRES} and !eval { ExtUtils::MakeMaker->VERSION(6.64) }) {
+    $params{BUILD_REQUIRES} = {
+        %{$params{BUILD_REQUIRES} || {}},
+        %{delete $params{TEST_REQUIRES}},
+    };
+}
+if ($params{BUILD_REQUIRES} and !eval { ExtUtils::MakeMaker->VERSION(6.5503) }) {
+    $params{PREREQ_PM} = {
+        %{$params{PREREQ_PM} || {}},
+        %{delete $params{BUILD_REQUIRES}},
+    };
+}
+
+WriteMakefile(%params);
index cb5d2cc..3c5f212 100644 (file)
@@ -13,10 +13,10 @@ BEGIN { $^P |= 0x210 }
 use if $] >= 5.016, feature => 'unicode_eval';
 
 if ($] >= 5.008) {
-       my $builder = Test::More->builder;
-       binmode $builder->output,         ":encoding(utf8)";
-       binmode $builder->failure_output, ":encoding(utf8)";
-       binmode $builder->todo_output,    ":encoding(utf8)";
+    my $builder = Test::More->builder;
+    binmode $builder->output,         ":encoding(utf8)";
+    binmode $builder->failure_output, ":encoding(utf8)";
+    binmode $builder->todo_output,    ":encoding(utf8)";
 }
 
 sub compile_named_sub {
diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/reductions.t b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/reductions.t
new file mode 100644 (file)
index 0000000..fd669f1
--- /dev/null
@@ -0,0 +1,51 @@
+#!./perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 7;
+
+use List::Util qw( reductions );
+
+is_deeply( [ reductions { } ], [],
+  'emmpty list'
+);
+
+is_deeply(
+  [ reductions { $a + $b } 1 .. 5 ],
+  [ 1, 3, 6, 10, 15 ],
+  'sum 1..5'
+);
+
+# We don't guarantee what this will return but it definitely shouldn't crash
+{
+  my $ret = reductions { $a + $b } 1 .. 3;
+  pass( 'reductions in scalar context does not crash' );
+}
+
+my $destroyed_count;
+sub Guardian::DESTROY { $destroyed_count++ }
+
+{
+  undef $destroyed_count;
+
+  my @ret = reductions { $b } map { bless [], "Guardian" } 1 .. 5;
+
+  ok( !$destroyed_count, 'nothing destroyed yet' );
+
+  @ret = ();
+
+  is( $destroyed_count, 5, 'all the items were destroyed' );
+}
+
+{
+  undef $destroyed_count;
+
+  ok( !defined eval {
+      reductions { die "stop" if $b == 4; bless [], "Guardian" } 1 .. 4;
+      1
+    }, 'die in BLOCK is propagated'
+  );
+
+  is( $destroyed_count, 2, 'intermediate temporaries are destroyed after exception' );
+}
diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/sample.t b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/sample.t
new file mode 100644 (file)
index 0000000..0927571
--- /dev/null
@@ -0,0 +1,73 @@
+#!./perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 9;
+
+use List::Util qw(sample);
+
+{
+  my @items = sample 3, 1 .. 10;
+  is( scalar @items, 3, 'returns correct count when plentiful' );
+
+  @items = sample 10, 1 .. 10;
+  is( scalar @items, 10, 'returns correct count when exact' );
+
+  @items = sample 20, 1 .. 10;
+  is( scalar @items, 10, 'returns correct count when short' );
+}
+
+{
+  my @items = sample 5, 1 .. 5;
+  is_deeply( [ sort { $a <=> $b } @items ], [ 1 .. 5 ],
+    'returns a permutation of the input list when exact' );
+}
+
+{
+  # These two seeds happen to give different results for me, but there is the
+  # smallest 1-in-2**48 chance that they happen to agree on some platform. If
+  # so then pick a different seed value.
+
+  srand 1234;
+  my $x = join "", sample 3, 'a'..'z';
+
+  srand 5678;
+  my $y = join "", sample 3, 'a'..'z';
+
+  isnt( $x, $y, 'returns different result on different random seed' );
+
+  srand;
+}
+
+{
+  my @nums = ( 1..5 );
+  sample 5, @nums;
+
+  is_deeply( \@nums, [ 1..5 ],
+    'sample does not mutate passed array'
+  );
+}
+
+{
+  my $destroyed_count;
+  sub Guardian::DESTROY { $destroyed_count++ }
+
+  my @ret = sample 3, map { bless [], "Guardian" } 1 .. 10;
+
+  is( $destroyed_count, 7, 'the 7 unselected items were destroyed' );
+
+  @ret = ();
+
+  is( $destroyed_count, 10, 'all the items were destroyed' );
+}
+
+{
+  local $List::Util::RAND = sub { 4/10 };
+
+  is(
+    join( "", sample 5, 'A'..'Z' ),
+    join( "", sample 5, 'A'..'Z' ),
+    'rigged rand() yields predictable output'
+  );
+}
index e9b653a..8d70a77 100644 (file)
@@ -5,48 +5,48 @@ use warnings;
 
 use Scalar::Util ();
 use Test::More  (grep { /set_prototype/ } @Scalar::Util::EXPORT_FAIL)
-                       ? (skip_all => 'set_prototype requires XS version')
-                       : (tests => 14);
+    ? (skip_all => 'set_prototype requires XS version')
+    : (tests => 14);
 
 Scalar::Util->import('set_prototype');
 
 sub f { }
-is( prototype('f'),    undef,  'no prototype');
+is( prototype('f'), undef, 'no prototype');
 
 my $r = set_prototype(\&f,'$');
-is( prototype('f'),    '$',    'set prototype');
-is( $r,                        \&f,    'return value');
+is( prototype('f'), '$', 'set prototype');
+is( $r, \&f, 'return value');
 
 set_prototype(\&f,undef);
-is( prototype('f'),    undef,  'remove prototype');
+is( prototype('f'), undef, 'remove prototype');
 
 set_prototype(\&f,'');
-is( prototype('f'),    '',     'empty prototype');
+is( prototype('f'), '', 'empty prototype');
 
 sub g (@) { }
-is( prototype('g'),    '@',    '@ prototype');
+is( prototype('g'), '@', '@ prototype');
 
 set_prototype(\&g,undef);
-is( prototype('g'),    undef,  'remove prototype');
+is( prototype('g'), undef, 'remove prototype');
 
 sub stub;
-is( prototype('stub'), undef,  'non existing sub');
+is( prototype('stub'), undef, 'non existing sub');
 
 set_prototype(\&stub,'$$$');
-is( prototype('stub'), '$$$',  'change non existing sub');
+is( prototype('stub'), '$$$', 'change non existing sub');
 
 sub f_decl ($$$$);
-is( prototype('f_decl'),       '$$$$', 'forward declaration');
+is( prototype('f_decl'), '$$$$', 'forward declaration');
 
 set_prototype(\&f_decl,'\%');
-is( prototype('f_decl'),       '\%',   'change forward declaration');
+is( prototype('f_decl'), '\%', 'change forward declaration');
 
 eval { &set_prototype( 'f', '' ); };
 print "not " unless 
-ok($@ =~ /^set_prototype: not a reference/,    'not a reference');
+ok($@ =~ /^set_prototype: not a reference/, 'not a reference');
 
 eval { &set_prototype( \'f', '' ); };
-ok($@ =~ /^set_prototype: not a subroutine reference/, 'not a sub reference');
+ok($@ =~ /^set_prototype: not a subroutine reference/, 'not a sub reference');
 
 # RT 72080
 
index 1bf8a9f..c78a700 100644 (file)
@@ -3,10 +3,11 @@ use warnings;
 
 BEGIN { $^P |= 0x210 }
 
-use Test::More tests => 18;
+use Test::More tests => 21;
 
 use B::Deparse;
 use Sub::Util qw( subname set_subname );
+use Symbol qw( delete_package ) ;
 
 {
   sub localfunc {}
@@ -78,4 +79,18 @@ is($x->(), "main::foo");
     'subname of set_subname');
 }
 
+# this used to segfault
+
+{
+    sub ToDelete::foo {}
+
+    my $foo = \&ToDelete::foo;
+
+    delete_package 'ToDelete';
+
+    is( subname($foo), "$]" >= 5.010 ? '__ANON__::foo' : 'ToDelete::foo', 'subname in deleted package' );
+    ok( set_subname('NewPackage::foo', $foo), 'rename from deleted package' );
+    is( subname($foo), 'NewPackage::foo', 'subname after rename' );
+}
+
 # vim: ft=perl
index 8806b8e..c55f03a 100644 (file)
@@ -2,9 +2,9 @@
 
 use strict;
 use warnings;
-
-use Test::More tests => 30;
-use List::Util qw( uniqnum uniqstr uniq );
+use Config; # to determine ivsize
+use Test::More tests => 31;
+use List::Util qw( uniqstr uniqint uniq );
 
 use Tie::Array;
 
@@ -67,48 +67,52 @@ SKIP: {
     is( $warnings, "", 'No warnings are printed when handling Unicode strings' );
 }
 
-is_deeply( [ uniqnum qw( 1 1.0 1E0 2 3 ) ],
-           [ 1, 2, 3 ],
-           'uniqnum compares numbers' );
-
-is_deeply( [ uniqnum qw( 1 1.1 1.2 1.3 ) ],
-           [ 1, 1.1, 1.2, 1.3 ],
-           'uniqnum distinguishes floats' );
-
-# Hard to know for sure what an Inf is going to be. Lets make one
-my $Inf = 0 + 1E1000;
-my $NaN;
-$Inf **= 1000 while ( $NaN = $Inf - $Inf ) == $NaN;
-
-is_deeply( [ uniqnum 0, 1, 12345, $Inf, -$Inf, $NaN, 0, $Inf, $NaN ],
-           [ 0, 1, 12345, $Inf, -$Inf, $NaN ],
-           'uniqnum preserves the special values of +-Inf and Nan' );
+is_deeply( [ uniqint ],
+           [],
+           'uniqint of empty list' );
 
-{
-    my $maxuint = ~0;
-    my $maxint = ~0 >> 1;
-    my $minint = -(~0 >> 1) - 1;
+is_deeply( [ uniqint 5, 5 ],
+           [ 5 ],
+           'uniqint of repeated-element list' );
 
-    my @nums = ($maxuint, $maxuint-1, -1, $Inf, $NaN, $maxint, $minint, 1 );
+is_deeply( [ uniqint 1, 2, 1, 3 ],
+           [ 1, 2, 3 ],
+           'uniqint removes subsequent duplicates' );
 
-    is_deeply( [ uniqnum @nums, 1.0 ],
-               [ @nums ],
-               'uniqnum preserves uniqness of full integer range' );
-}
+is_deeply( [ uniqint 6.1, 6.2, 6.3 ],
+           [ 6 ],
+           'uniqint compares as and returns integers' );
 
 {
     my $warnings = "";
     local $SIG{__WARN__} = sub { $warnings .= join "", @_ };
 
-    is_deeply( [ uniqnum 0, undef ],
+    is_deeply( [ uniqint 0, undef ],
                [ 0 ],
-               'uniqnum considers undef and zero equivalent' );
+               'uniqint considers undef and zero equivalent' );
 
-    ok( length $warnings, 'uniqnum on undef yields a warning' );
+    ok( length $warnings, 'uniqint on undef yields a warning' );
 
-    is_deeply( [ uniqnum undef ],
+    is_deeply( [ uniqint undef ],
                [ 0 ],
-               'uniqnum on undef coerces to zero' );
+               'uniqint on undef coerces to zero' );
+}
+
+SKIP: {
+    skip('UVs are not reliable on this perl version', 2) unless $] ge "5.008000";
+
+    my $maxbits = $Config{ivsize} * 8 - 1;
+
+    # An integer guaranteed to be a UV
+    my $uv = 1 << $maxbits;
+    is_deeply( [ uniqint $uv, $uv + 1 ],
+               [ $uv, $uv + 1 ],
+               'uniqint copes with UVs' );
+
+    my $nvuv = 2 ** $maxbits;
+    is_deeply( [ uniqint $nvuv, 0 ],
+               [ int($nvuv), 0 ],
+               'uniqint copes with NVUV dualvars' );
 }
 
 is_deeply( [ uniq () ],
@@ -148,24 +152,21 @@ is( scalar( uniqstr qw( a b c d a b e ) ), 5, 'uniqstr() in scalar context' );
                'uniqstr respects stringify overload' );
 }
 
-{
-    package Numify;
+SKIP: {
+    skip('int overload requires perl version 5.8.0', 1) unless $] ge "5.008000";
 
-    use overload '0+' => sub { return $_[0]->{num} };
+    package Googol;
 
-    sub new { bless { num => $_[1] }, $_[0] }
+    use overload '""' => sub { "1" . ( "0"x100 ) },
+                 'int' => sub { $_[0] };
 
-    package main;
-    use Scalar::Util qw( refaddr );
+    sub new { bless {}, $_[0] }
 
-    my @nums = map { Numify->new( $_ ) } qw( 2 2 5 );
+    package main;
 
-    # is_deeply wants to use eq overloading
-    my @ret = uniqnum @nums;
-    ok( scalar @ret == 2 &&
-        refaddr $ret[0] == refaddr $nums[0] &&
-        refaddr $ret[1] == refaddr $nums[2],
-               'uniqnum respects numify overload' );
+    is_deeply( [ uniqint( Googol->new, Googol->new ) ],
+               [ "1" . ( "0"x100 ) ],
+               'uniqint respects int overload' );
 }
 
 {
@@ -198,11 +199,6 @@ is( scalar( uniqstr qw( a b c d a b e ) ), 5, 'uniqstr() in scalar context' );
     is_deeply( [ uniqstr $1, $2, $3 ],
                [qw( a b )],
                'uniqstr handles magic' );
-
-    "1 1 2" =~ m/(.) (.) (.)/;
-    is_deeply( [ uniqnum $1, $2, $3 ],
-               [ 1, 2 ],
-               'uniqnum handles magic' );
 }
 
 {
diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/uniqnum.t b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/uniqnum.t
new file mode 100644 (file)
index 0000000..d34d2c7
--- /dev/null
@@ -0,0 +1,329 @@
+#!./perl
+
+use strict;
+use warnings;
+use Config; # to determine nvsize
+use Test::More tests => 23;
+use List::Util qw( uniqnum );
+
+is_deeply( [ uniqnum qw( 1 1.0 1E0 2 3 ) ],
+           [ 1, 2, 3 ],
+           'uniqnum compares numbers' );
+
+is_deeply( [ uniqnum qw( 1 1.1 1.2 1.3 ) ],
+           [ 1, 1.1, 1.2, 1.3 ],
+           'uniqnum distinguishes floats' );
+
+{
+    my @nums = map $_+0.1, 1e7..1e7+5;
+    is_deeply( [ uniqnum @nums ],
+               [ @nums ],
+               'uniqnum distinguishes large floats' );
+
+    my @strings = map "$_", @nums;
+    is_deeply( [ uniqnum @strings ],
+               [ @strings ],
+               'uniqnum distinguishes large floats (stringified)' );
+}
+
+my ($uniq_count1, $uniq_count2, $equiv);
+
+if($Config{nvsize} == 8) {
+  # NV is either 'double' or 8-byte 'long double'
+
+  # The 2 values should be unequal - but just in case perl is buggy:
+  $equiv = 1 if 1.4142135623730951 == 1.4142135623730954;
+
+  $uniq_count1 = uniqnum (1.4142135623730951,
+                          1.4142135623730954 );
+
+  $uniq_count2 = uniqnum('1.4142135623730951',
+                         '1.4142135623730954' );
+}
+
+elsif(length(sqrt(2)) > 25) {
+  # NV is either IEEE 'long double' or '__float128' or doubledouble
+
+  if(1 + (2 ** -1074) != 1) {
+    # NV is doubledouble
+
+    # The 2 values should be unequal - but just in case perl is buggy:
+    $equiv = 1 if 1 + (2 ** -1074) == 1 + (2 ** - 1073);
+
+    $uniq_count1 = uniqnum (1 + (2 ** -1074),
+                            1 + (2 ** -1073) );
+    # The 2 values should be unequal - but just in case perl is buggy:
+    $equiv = 1 if 4.0564819207303340847894502572035e31 == 4.0564819207303340847894502572034e31;
+
+    $uniq_count2 = uniqnum('4.0564819207303340847894502572035e31',
+                           '4.0564819207303340847894502572034e31' );
+  }
+
+  else {
+    # NV is either IEEE 'long double' or '__float128'
+
+    # The 2 values should be unequal - but just in case perl is buggy:
+    $equiv = 1 if 1005.10228292019306452029161597769015 == 1005.1022829201930645202916159776901;
+
+    $uniq_count1 = uniqnum (1005.10228292019306452029161597769015,
+                            1005.1022829201930645202916159776901 );
+
+    $uniq_count2 = uniqnum('1005.10228292019306452029161597769015',
+                           '1005.1022829201930645202916159776901' );
+  }
+}
+
+else {
+  # NV is extended precision 'long double'
+
+  # The 2 values should be unequal - but just in case perl is buggy:
+  $equiv = 1 if 10.770329614269008063 == 10.7703296142690080625;
+
+  $uniq_count1 = uniqnum (10.770329614269008063,
+                          10.7703296142690080625 );
+
+  $uniq_count2 = uniqnum('10.770329614269008063',
+                         '10.7703296142690080625' );
+}
+
+if($equiv) {
+  is($uniq_count1, 1, 'uniqnum preserves uniqueness of high precision floats');
+  is($uniq_count2, 1, 'uniqnum preserves uniqueness of high precision floats (stringified)');
+}
+
+else {
+  is($uniq_count1, 2, 'uniqnum preserves uniqueness of high precision floats');
+  is($uniq_count2, 2, 'uniqnum preserves uniqueness of high precision floats (stringified)');
+}
+
+SKIP: {
+    skip ('test not relevant for this perl configuration', 1) unless $Config{nvsize} == 8
+                                                                  && $Config{ivsize} == 8;
+
+    my @in = (~0, ~0 - 1, 18446744073709551614.0, 18014398509481985, 1.8014398509481985e16);
+    my(@correct);
+
+    # On perl-5.6.2 (and perhaps other old versions), ~0 - 1 is assigned to an NV.
+    # This affects the outcome of the following test, so we need to first determine
+    # whether ~0 - 1 is an NV or a UV:
+
+    if("$in[1]" eq "1.84467440737096e+19") {
+
+      # It's an NV and $in[2] is a duplicate of $in[1]
+      @correct = (~0, ~0 - 1, 18014398509481985, 1.8014398509481985e16);
+    }
+    else {
+
+      # No duplicates in @in
+      @correct = @in;
+    }
+
+    is_deeply( [ uniqnum @in ],
+               [ @correct ],
+               'uniqnum correctly compares UV/IVs that overflow NVs' );
+}
+
+my $ls = 31;      # maximum left shift for 32-bit unity
+
+if( $Config{ivsize} == 8 ) {
+  $ls       = 63; # maximum left shift for 64-bit unity
+}
+
+# Populate @in with UV-NV pairs of equivalent values.
+# Each of these values is exactly representable as 
+# either a UV or an NV.
+
+my @in = (1 << $ls, 2 ** $ls,
+          1 << ($ls - 3), 2 ** ($ls - 3),
+          5 << ($ls - 3), 5 * (2 ** ($ls - 3)));
+
+my @correct = (1 << $ls, 1 << ($ls - 3), 5 << ($ls -3));
+
+if( $Config{ivsize} == 8 && $Config{nvsize} == 8 ) {
+
+     # Add some more UV-NV pairs of equivalent values.
+     # Each of these values is exactly representable
+     # as either a UV or an NV.
+
+     push @in, ( 9007199254740991,     9.007199254740991e+15,
+                 9007199254740992,     9.007199254740992e+15,
+                 9223372036854774784,  9.223372036854774784e+18,
+                 18446744073709549568, 1.8446744073709549568e+19,
+                 18446744073709139968, 1.8446744073709139968e+19,
+                 100000000000262144,   1.00000000000262144e+17,
+                 100000000001310720,   1.0000000000131072e+17,
+                 144115188075593728,   1.44115188075593728e+17,
+                 -9007199254740991,     -9.007199254740991e+15,
+                 -9007199254740992,     -9.007199254740992e+15,
+                 -9223372036854774784,  -9.223372036854774784e+18,
+                 -18446744073709549568, -1.8446744073709549568e+19,
+                 -18446744073709139968, -1.8446744073709139968e+19,
+                 -100000000000262144,   -1.00000000000262144e+17,
+                 -100000000001310720,   -1.0000000000131072e+17,
+                 -144115188075593728,   -1.44115188075593728e+17 );
+
+     push @correct, ( 9007199254740991,
+                      9007199254740992,
+                      9223372036854774784,
+                      18446744073709549568,
+                      18446744073709139968,
+                      100000000000262144,
+                      100000000001310720,
+                      144115188075593728,
+                      -9007199254740991,
+                      -9007199254740992,
+                      -9223372036854774784,
+                      -18446744073709549568,
+                      -18446744073709139968,
+                      -100000000000262144,
+                      -100000000001310720,
+                      -144115188075593728 );
+}
+
+# uniqnum should discard each of the NVs as being a
+# duplicate of the preceding UV. 
+
+is_deeply( [ uniqnum @in],
+           [ @correct],
+           'uniqnum correctly compares UV/IVs that don\'t overflow NVs' );
+
+# Hard to know for sure what an Inf is going to be. Lets make one
+my $Inf = 0 + 1E1000;
+my $NaN;
+$Inf **= 1000 while ( $NaN = $Inf - $Inf ) == $NaN;
+
+is_deeply( [ uniqnum 0, 1, 12345, $Inf, -$Inf, $NaN, 0, $Inf, $NaN ],
+           [ 0, 1, 12345, $Inf, -$Inf, $NaN ],
+           'uniqnum preserves the special values of +-Inf and Nan' );
+
+SKIP: {
+    my $maxuint = ~0;
+    my $maxint = ~0 >> 1;
+    my $minint = -(~0 >> 1) - 1;
+
+    my @nums = ($maxuint, $maxuint-1, -1, $maxint, $minint, 1 );
+
+    {
+        use warnings FATAL => 'numeric';
+        if (eval {
+            "$Inf" + 0 == $Inf
+        }) {
+            push @nums, $Inf;
+        }
+        if (eval {
+            my $nanish = "$NaN" + 0;
+            $nanish != 0 && !$nanish != $NaN;
+        }) {
+            push @nums, $NaN;
+        }
+    }
+
+    is_deeply( [ uniqnum @nums, 1.0 ],
+               [ @nums ],
+               'uniqnum preserves uniqueness of full integer range' );
+
+    my @strs = map "$_", @nums;
+
+    if($maxuint !~ /\A[0-9]+\z/) {
+      skip( "Perl $] doesn't stringify UV_MAX right ($maxuint)", 1 );
+    }
+
+    is_deeply( [ uniqnum @strs, "1.0" ],
+               [ @strs ],
+               'uniqnum preserves uniqueness of full integer range (stringified)' );
+}
+
+{
+    my @nums = (6.82132005170133e-38, 62345678);
+    is_deeply( [ uniqnum @nums ], [ @nums ],
+        'uniqnum keeps uniqueness of numbers that stringify to the same byte pattern as a float'
+    );
+}
+
+{
+    my $warnings = "";
+    local $SIG{__WARN__} = sub { $warnings .= join "", @_ };
+
+    is_deeply( [ uniqnum 0, undef ],
+               [ 0 ],
+               'uniqnum considers undef and zero equivalent' );
+
+    ok( length $warnings, 'uniqnum on undef yields a warning' );
+
+    is_deeply( [ uniqnum undef ],
+               [ 0 ],
+               'uniqnum on undef coerces to zero' );
+}
+
+is_deeply( [uniqnum 0, -0.0 ],
+           [0],
+           'uniqnum handles negative zero');
+
+SKIP: {
+    skip ('test not relevant for this perl configuration', 4) unless $Config{ivsize} == 8;
+
+  # 1e17 is the number beyond which "%.20g" formatting fails on some
+  # 64-bit int perls.
+  # The following 2 tests check that the nearest values (both above
+  # and below that tipping point) are being handled correctly.
+
+  # 99999999999999984 is the largest 64-bit integer less than 1e17
+  # that can be expressed exactly as a double
+
+  is_deeply( [ uniqnum (99999999999999984, 99999999999999984.0) ],
+             [ (99999999999999984) ],
+             'uniqnum recognizes 99999999999999984 and 99999999999999984.0 as the same' );
+
+  is_deeply( [ uniqnum (-99999999999999984, -99999999999999984.0) ],
+             [ (-99999999999999984) ],
+             'uniqnum recognizes -99999999999999984 and -99999999999999984.0 as the same' );
+
+  # 100000000000000016 is the smallest positive 64-bit integer greater than 1e17
+  # that can be expressed exactly as a double
+
+  is_deeply( [ uniqnum (100000000000000016, 100000000000000016.0) ],
+             [ (100000000000000016) ],
+             'uniqnum recognizes 100000000000000016 and 100000000000000016.0 as the same' );
+
+  is_deeply( [ uniqnum (-100000000000000016, -100000000000000016.0) ],
+             [ (-100000000000000016) ],
+             'uniqnum recognizes -100000000000000016 and -100000000000000016.0 as the same' );
+}
+
+# uniqnum not confused by IV'ified floats
+SKIP: {
+    # This fails on 5.6 and isn't fixable without breaking a lot of other tests
+    skip 'This perl version gets confused by IVNV dualvars', 1 if $] lt '5.008000';
+    my @nums = ( 2.1, 2.2, 2.3 );
+    my $dummy = sprintf "%d", $_ for @nums;
+
+    # All @nums now have both NOK and IOK but IV=2 in each case
+    is( scalar( uniqnum @nums ), 3, 'uniqnum not confused by dual IV+NV' );
+}
+
+{
+    package Numify;
+
+    use overload '0+' => sub { return $_[0]->{num} };
+
+    sub new { bless { num => $_[1] }, $_[0] }
+
+    package main;
+    use Scalar::Util qw( refaddr );
+
+    my @nums = map { Numify->new( $_ ) } qw( 2 2 5 );
+
+    # is_deeply wants to use eq overloading
+    my @ret = uniqnum @nums;
+    ok( scalar @ret == 2 &&
+        refaddr $ret[0] == refaddr $nums[0] &&
+        refaddr $ret[1] == refaddr $nums[2],
+               'uniqnum respects numify overload' );
+}
+
+{
+    "1 1 2" =~ m/(.) (.) (.)/;
+    is_deeply( [ uniqnum $1, $2, $3 ],
+               [ 1, 2 ],
+               'uniqnum handles magic' );
+}
diff --git a/gnu/usr.bin/perl/cpan/Sys-Syslog/t/cpan-rt-21516.t b/gnu/usr.bin/perl/cpan/Sys-Syslog/t/cpan-rt-21516.t
new file mode 100644 (file)
index 0000000..f895eda
--- /dev/null
@@ -0,0 +1,14 @@
+#!perl -wT
+use strict;
+use Test::More;
+
+plan tests => 1;
+
+# ----------
+# CPAN-RT#21516: closelog() wasn't correctly calling closelog_xs() when 
+# using the native mechanism.
+# 
+use Sys::Syslog;
+openlog("sys-syslog-test", 'pid,ndelay', 'user');
+closelog();
+is( $@, '', "was closelog_xs() correctly called?" );
diff --git a/gnu/usr.bin/perl/cpan/Sys-Syslog/t/cpan-rt-21866.t b/gnu/usr.bin/perl/cpan/Sys-Syslog/t/cpan-rt-21866.t
new file mode 100644 (file)
index 0000000..12cc34a
--- /dev/null
@@ -0,0 +1,16 @@
+#!perl -wT
+use strict;
+use Test::More;
+
+# any remaining warning should be severly punished
+eval "use Test::NoWarnings";
+my $tests = $@ ? 0 : 1;
+plan skip_all => "Test::NoWarnings not available" if !$tests;
+plan tests => $tests;
+
+# ----------
+# CPAN-RT#21866: openlog() produced a "use of uninitialized value in split" 
+# warning when given undefined arguments.
+# 
+use Sys::Syslog;
+openlog();
diff --git a/gnu/usr.bin/perl/cpan/Sys-Syslog/t/cpan-rt-25488.t b/gnu/usr.bin/perl/cpan/Sys-Syslog/t/cpan-rt-25488.t
new file mode 100644 (file)
index 0000000..a8a8ed4
--- /dev/null
@@ -0,0 +1,17 @@
+#!perl -wT
+use strict;
+use Test::More;
+
+# any remaining warning should be severly punished
+eval "use Test::NoWarnings";
+my $tests = $@ ? 0 : 1;
+plan skip_all => "Test::NoWarnings not available" if !$tests;
+plan tests => $tests;
+
+# ----------
+# CPAN-RT#25488: disconnect_log() produced a "uninitialized" warning
+# because $current_proto was used without being checked.
+# 
+use Sys::Syslog  qw(:standard :macros);
+openlog("sys-syslog-test", "", LOG_USER);
+closelog();
diff --git a/gnu/usr.bin/perl/cpan/Sys-Syslog/t/cpan-rt-49877.pl b/gnu/usr.bin/perl/cpan/Sys-Syslog/t/cpan-rt-49877.pl
new file mode 100644 (file)
index 0000000..0ec2660
--- /dev/null
@@ -0,0 +1,19 @@
+#!perl
+use strict;
+#use Test::More;
+
+#plan tests => 2;
+
+# --------------------
+# CPAN-RT #49877: Options not reset after closelog()
+#
+use Sys::Syslog qw< :standard :macros >;
+
+openlog("Sys::Syslog", "pid,ndelay,perror", "user");
+syslog(info => "Lorem ipsum dolor sit amet");
+closelog();
+
+openlog("Sys::Syslog", "ndelay,perror", "user");
+syslog(info => "Lorem ipsum dolor sit amet");
+closelog();
+
diff --git a/gnu/usr.bin/perl/cpan/Sys-Syslog/t/cpan-rt-55151.t b/gnu/usr.bin/perl/cpan/Sys-Syslog/t/cpan-rt-55151.t
new file mode 100644 (file)
index 0000000..bf6c792
--- /dev/null
@@ -0,0 +1,19 @@
+#!perl
+use strict;
+use Test::More;
+
+plan tests => 2;
+
+# --------------------
+# CPAN-RT #55151: Allow temporary facility in syslog() for native mechanism
+#
+use Sys::Syslog qw< :standard :macros >;
+
+openlog("Sys::Syslog", "pid,ndelay", "user");
+
+eval { syslog("local0|info", "Lorem ipsum dolor sit amet") };
+is($@, "", "syslog('local0|info', ...)");
+
+eval { syslog(LOG_LOCAL0|LOG_INFO, "Lorem ipsum dolor sit amet") };
+is($@, "", "syslog(LOG_LOCAL0|LOG_INFO, ...)");
+
diff --git a/gnu/usr.bin/perl/cpan/Sys-Syslog/t/cpan-rt-64287.t b/gnu/usr.bin/perl/cpan/Sys-Syslog/t/cpan-rt-64287.t
new file mode 100644 (file)
index 0000000..bacb021
--- /dev/null
@@ -0,0 +1,29 @@
+#!perl
+use strict;
+use Test::More;
+
+plan tests => 4;
+
+# --------------------
+# CPAN-RT #64287: Avoid memory corruption when closelog() is called twice.
+#
+use Sys::Syslog;
+
+openlog("Sys::Syslog", "pid", "user");
+syslog(debug => "Lorem ipsum dolor sit amet");
+
+# first call to closelog()
+eval { closelog() };
+is($@, "", "closelog()");
+
+# create a variable with a reference to something
+$a = {};
+isa_ok($a, "HASH");
+
+# second call to closelog()
+eval { closelog() };
+is($@, "", "closelog()");
+
+# check that the variable still is what it's supposed to be
+isa_ok($a, "HASH");
+
diff --git a/gnu/usr.bin/perl/cpan/Sys-Syslog/t/syslog-inet-udp.t b/gnu/usr.bin/perl/cpan/Sys-Syslog/t/syslog-inet-udp.t
new file mode 100644 (file)
index 0000000..707e3ce
--- /dev/null
@@ -0,0 +1,205 @@
+#!perl -T
+
+use strict;
+use Config;
+use FileHandle;
+use File::Spec;
+use Test::More;
+
+# we enable all Perl warnings, but we don't "use warnings 'all'" because 
+# we want to disable the warnings generated by Sys::Syslog
+no warnings;
+use warnings qw(closure deprecated exiting glob io misc numeric once overflow
+                pack portable recursion redefine regexp severe signal substr
+                syntax taint uninitialized unpack untie utf8 void);
+
+# if someone is using warnings::compat, the previous trick won't work, so we
+# must manually disable warnings
+$^W = 0 if $] < 5.006;
+
+my $is_Win32  = $^O =~ /win32/i;
+my $is_Cygwin = $^O =~ /cygwin/i;
+
+# if testing in core, check that the module is at least available
+if ($ENV{PERL_CORE}) {
+    plan skip_all => "Sys::Syslog was not build" 
+        unless $Config{'extensions'} =~ /\bSyslog\b/;
+}
+
+# we also need Socket
+plan skip_all => "Socket was not build" 
+    unless $Config{'extensions'} =~ /\bSocket\b/;
+
+my $tests;
+plan tests => $tests;
+
+# any remaining warning should be severly punished
+BEGIN { eval "use Test::NoWarnings"; $tests = $@ ? 0 : 1; }
+
+BEGIN { $tests += 1 }
+# ok, now loads them
+eval 'use Socket';
+use_ok('Sys::Syslog', ':standard', ':extended', ':macros');
+
+BEGIN { $tests += 1 }
+# check that the documented functions are correctly provided
+can_ok( 'Sys::Syslog' => qw(openlog syslog syslog setlogmask setlogsock closelog) );
+
+
+BEGIN { $tests += 4 }
+# check the diagnostics
+# setlogsock()
+eval { setlogsock() };
+like( $@, qr/^setlogsock\(\): Invalid number of arguments/, 
+    "calling setlogsock() with no argument" );
+
+eval { setlogsock(undef) };
+like( $@, qr/^setlogsock\(\): Invalid type; must be one of /, 
+    "calling setlogsock() with undef" );
+
+eval { setlogsock(\"") };
+like( $@, qr/^setlogsock\(\): Unexpected scalar reference/, 
+    "calling setlogsock() with a scalar reference" );
+
+eval { setlogsock({}) };
+like( $@, qr/^setlogsock\(\): No argument given/, 
+    "calling setlogsock() with an empty hash reference" );
+
+BEGIN { $tests += 3 }
+# syslog()
+eval { syslog() };
+like( $@, qr/^syslog: expecting argument \$priority/, 
+    "calling syslog() with no argument" );
+
+eval { syslog(undef) };
+like( $@, qr/^syslog: expecting argument \$priority/, 
+    "calling syslog() with one undef argument" );
+
+eval { syslog('') };
+like( $@, qr/^syslog: expecting argument \$format/, 
+    "calling syslog() with one empty argument" );
+
+
+my $test_string = "uid $< is testing Perl $] syslog(3) capabilities";
+my $r = 0;
+
+BEGIN { $tests += 8 }
+# try to open a syslog using a Unix or stream socket
+SKIP: {
+    skip "can't connect to Unix socket: _PATH_LOG unavailable", 8
+      unless -e Sys::Syslog::_PATH_LOG();
+
+    # The only known $^O eq 'svr4' that needs this is NCR MP-RAS,
+    # but assuming 'stream' in SVR4 is probably not that bad.
+    my $sock_type = $^O =~ /^(solaris|irix|svr4|powerux)$/ ? 'stream' : 'unix';
+
+    eval { setlogsock($sock_type) };
+    is( $@, '', "setlogsock() called with '$sock_type'" );
+    TODO: {
+        local $TODO = "minor bug";
+        SKIP: { skip "TODO $TODO", 1 if $] < 5.006002;
+        ok( $r, "setlogsock() should return true: '$r'" );
+        }
+    }
+
+
+    # open syslog with a "local0" facility
+    SKIP: {
+        # openlog()
+        $r = eval { openlog('perl', 'ndelay', 'local0') } || 0;
+        skip "can't connect to syslog", 6 if $@ =~ /^no connection to syslog available/;
+        is( $@, '', "openlog() called with facility 'local0'" );
+        ok( $r, "openlog() should return true: '$r'" );
+
+        # syslog()
+        $r = eval { syslog('info', "$test_string by connecting to a $sock_type socket") } || 0;
+        is( $@, '', "syslog() called with level 'info'" );
+        ok( $r, "syslog() should return true: '$r'" );
+
+        # closelog()
+        $r = eval { closelog() } || 0;
+        is( $@, '', "closelog()" );
+        ok( $r, "closelog() should return true: '$r'" );
+    }
+}
+
+# try to open a syslog using all the available connection methods
+# handle other connections in t/syslog.t
+
+my @passed = ();
+
+BEGIN { $tests += 22 * 2 }
+for my $sock_type (qw(inet udp)) {
+    SKIP: {
+        skip "the 'stream' mechanism because a previous mechanism with similar interface succeeded", 22 
+            if $sock_type eq 'stream' and grep {/pipe|unix/} @passed;
+        # setlogsock() called with an arrayref
+        $r = eval { setlogsock([$sock_type]) } || 0;
+        skip "can't use '$sock_type' socket", 22 unless $r;
+        is( $@, '', "[$sock_type] setlogsock() called with ['$sock_type']" );
+        ok( $r, "[$sock_type] setlogsock() should return true: '$r'" );
+
+        # setlogsock() called with a single argument
+        $r = eval { setlogsock($sock_type) } || 0;
+        skip "can't use '$sock_type' socket", 20 unless $r;
+        is( $@, '', "[$sock_type] setlogsock() called with '$sock_type'" );
+        ok( $r, "[$sock_type] setlogsock() should return true: '$r'" );
+
+        # openlog() without option NDELAY
+        $r = eval { openlog('perl', '', 'local0') } || 0;
+        skip "can't connect to syslog", 18 if $@ =~ /^no connection to syslog available/;
+        is( $@, '', "[$sock_type] openlog() called with facility 'local0' and without option 'ndelay'" );
+        ok( $r, "[$sock_type] openlog() should return true: '$r'" );
+
+        # openlog() with the option NDELAY
+        $r = eval { openlog('perl', 'ndelay', 'local0') } || 0;
+        skip "can't connect to syslog", 16 if $@ =~ /^no connection to syslog available/;
+        is( $@, '', "[$sock_type] openlog() called with facility 'local0' with option 'ndelay'" );
+        ok( $r, "[$sock_type] openlog() should return true: '$r'" );
+
+        # syslog() with negative level, should fail
+        $r = eval { syslog(-1, "$test_string by connecting to a $sock_type socket") } || 0;
+        like( $@, '/^syslog: invalid level\/facility: /', "[$sock_type] syslog() called with level -1" );
+        ok( !$r, "[$sock_type] syslog() should return false: '$r'" );
+
+        # syslog() with invalid level, should fail
+        $r = eval { syslog("plonk", "$test_string by connecting to a $sock_type socket") } || 0;
+        like( $@, '/^syslog: invalid level\/facility: /', "[$sock_type] syslog() called with level plonk" );
+        ok( !$r, "[$sock_type] syslog() should return false: '$r'" );
+
+        # syslog() with levels "info" and "notice" (as a strings), should fail
+        $r = eval { syslog('info,notice', "$test_string by connecting to a $sock_type socket") } || 0;
+        like( $@, '/^syslog: too many levels given: notice/', "[$sock_type] syslog() called with level 'info,notice'" );
+        ok( !$r, "[$sock_type] syslog() should return false: '$r'" );
+
+        # syslog() with facilities "local0" and "local1" (as a strings), should fail
+        $r = eval { syslog('local0,local1', "$test_string by connecting to a $sock_type socket") } || 0;
+        like( $@, '/^syslog: too many facilities given: local1/', "[$sock_type] syslog() called with level 'local0,local1'" );
+        ok( !$r, "[$sock_type] syslog() should return false: '$r'" );
+
+        # syslog() with level "info" (as a string), should pass
+        $r = eval { syslog('info', "$test_string by connecting to a $sock_type socket") } || 0;
+        is( $@, '', "[$sock_type] syslog() called with level 'info' (string)" );
+        ok( $r, "[$sock_type] syslog() should return true: '$r'" );
+
+        # syslog() with level "info" (as a macro), should pass
+        { local $! = 1;
+          $r = eval { syslog(LOG_INFO(), "$test_string by connecting to a $sock_type socket, setting a fake errno: %m") } || 0;
+        }
+        is( $@, '', "[$sock_type] syslog() called with level 'info' (macro)" );
+        ok( $r, "[$sock_type] syslog() should return true: '$r'" );
+
+        push @passed, $sock_type;
+
+        SKIP: {
+            skip "skipping closelog() tests for 'console'", 2 if $sock_type eq 'console';
+            # closelog()
+            $r = eval { closelog() } || 0;
+            is( $@, '', "[$sock_type] closelog()" );
+            ok( $r, "[$sock_type] closelog() should return true: '$r'" );
+        }
+    }
+}
+
+
+
index 92af0c7..6802ace 100755 (executable)
@@ -102,6 +102,7 @@ SKIP: {
         }
     }
 
+
     # open syslog with a "local0" facility
     SKIP: {
         # openlog()
@@ -122,15 +123,16 @@ SKIP: {
     }
 }
 
-
-BEGIN { $tests += 22 * 8 }
 # try to open a syslog using all the available connection methods
+# handle inet and udp in a separate test file
+
 my @passed = ();
-for my $sock_type (qw(native eventlog unix pipe stream inet tcp udp)) {
+
+BEGIN { $tests += 22 * 6 }
+for my $sock_type (qw(native eventlog unix pipe stream tcp )) {
     SKIP: {
         skip "the 'stream' mechanism because a previous mechanism with similar interface succeeded", 22 
             if $sock_type eq 'stream' and grep {/pipe|unix/} @passed;
-
         # setlogsock() called with an arrayref
         $r = eval { setlogsock([$sock_type]) } || 0;
         skip "can't use '$sock_type' socket", 22 unless $r;
@@ -199,7 +201,6 @@ for my $sock_type (qw(native eventlog unix pipe stream inet tcp udp)) {
     }
 }
 
-
 BEGIN { $tests += 10 }
 SKIP: {
     skip "not testing setlogsock('stream') on Win32", 10 if $is_Win32;
index 7ba1c3e..890c714 100644 (file)
@@ -2,20 +2,21 @@
 #
 # Test setting color aliases via the function interface.
 #
-# Copyright 2012 Russ Allbery <rra@cpan.org>
+# Copyright 2012, 2020 Russ Allbery <rra@cpan.org>
 #
-# This program is free software; you may redistribute it and/or modify it
-# under the same terms as Perl itself.
+# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl
 
+use 5.008;
 use strict;
 use warnings;
 
-use Test::More tests => 23;
+use Test::More tests => 30;
 
 # Load the module.
 BEGIN {
     delete $ENV{ANSI_COLORS_ALIASES};
     delete $ENV{ANSI_COLORS_DISABLED};
+    delete $ENV{NO_COLOR};
     use_ok('Term::ANSIColor', qw(color colored colorvalid uncolor coloralias));
 }
 
@@ -30,21 +31,50 @@ like(
 
 # Basic alias functionality.
 is(coloralias('alert', 'red'), 'red', 'coloralias works and returns color');
-is(color('alert'), color('red'), 'alert now works as a color');
+is(color('alert'),           color('red'),      'alert now works as a color');
 is(colored('test', 'alert'), "\e[31mtest\e[0m", '..and colored works');
 ok(colorvalid('alert'), '...and alert is now a valid color');
 is(coloralias('alert'), 'red', 'coloralias with one arg returns value');
 
 # The alias can be changed.
 is(coloralias('alert', 'green'), 'green', 'changing the alias works');
-is(coloralias('alert'), 'green',        '...and changed the mapping');
-is(color('alert'),      color('green'), '...and now returns its new value');
+is(coloralias('alert'),          'green', '...and changed the mapping');
+is(color('alert'), color('green'), '...and now returns its new value');
+
+# Aliasing to an alias expands the underlying alias.
+is(coloralias('warning', 'alert'), 'green', 'aliasing to an alias works');
+is(color('warning'), color('green'), '...and returns the right value');
+
+# An alias can map to multiple attributes.
+is(
+    coloralias('multiple', 'blue on_green', 'bold'),
+    'blue on_green bold',
+    'aliasing to multiple attributes works'
+);
+is(color('multiple'), color('blue on_green bold'), '...and works with color');
+is(colored('foo', 'multiple'), "\e[34;42;1mfoo\e[0m", '...and colored works');
+ok(colorvalid('multiple'), '...and colorvalid works');
+
+# Those can include other aliases.
+is(
+    coloralias('multiple', 'on_blue alert blink'),
+    'on_blue green blink',
+    'aliasing to multiple attributes including aliases'
+);
+is(color('multiple'), color('on_blue green blink'), '...and works with color');
+
+# color supports aliases among multiple attributes.
+is(
+    color('bold warning'),
+    color('bold', 'green'),
+    'color supports aliases with multiple attributes'
+);
 
 # uncolor ignores aliases.
 is_deeply([uncolor("\e[32m")], ['green'], 'uncolor ignores aliases');
 
 # Asking for the value of an unknown alias returns undef.
-is(coloralias('warning'), undef, 'coloralias on unknown alias returns undef');
+is(coloralias('foo'), undef, 'coloralias on unknown alias returns undef');
 
 # Invalid alias names.
 $output = eval { coloralias('foo;bar', 'green') };
@@ -71,7 +101,7 @@ like(
     '...with the right error'
 );
 
-# Aliasing to a color that doesn't exist, or to another alias.
+# Aliasing to a color that doesn't exist.
 $output = eval { coloralias('warning', 'chartreuse') };
 ok(!$output, 'aliasing to an unknown color rejected');
 like(
@@ -79,10 +109,3 @@ like(
     qr{ \A Invalid [ ] attribute [ ] name [ ] "chartreuse" [ ] at [ ] }xms,
     '...with the right error'
 );
-$output = eval { coloralias('warning', 'alert') };
-ok(!$output, 'aliasing to an alias rejected');
-like(
-    $@,
-    qr{ \A Invalid [ ] attribute [ ] name [ ] "alert" [ ] at [ ] }xms,
-    '...with the right error'
-);
index 735ce52..ae2b843 100644 (file)
@@ -2,21 +2,22 @@
 #
 # Basic test suite for the Term::ANSIColor Perl module.
 #
-# Copyright 1997, 1998, 2000, 2001, 2002, 2005, 2006, 2009, 2010, 2012, 2014
+# Copyright 1997-1998, 2000-2002, 2005-2006, 2009-2010, 2012, 2014, 2020
 #     Russ Allbery <rra@cpan.org>
 #
-# This program is free software; you may redistribute it and/or modify it
-# under the same terms as Perl itself.
+# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl
 
+use 5.008;
 use strict;
 use warnings;
 
-use Test::More tests => 152;
+use Test::More tests => 169;
 
 # Load the module.
 BEGIN {
     delete $ENV{ANSI_COLORS_ALIASES};
     delete $ENV{ANSI_COLORS_DISABLED};
+    delete $ENV{NO_COLOR};
     use_ok('Term::ANSIColor',
         qw(:pushpop color colored uncolor colorstrip colorvalid));
 }
@@ -24,7 +25,7 @@ BEGIN {
 # Various basic tests.
 is(color('blue on_green', 'bold'), "\e[34;42;1m", 'Simple attributes');
 is(colored('testing', 'blue', 'bold'), "\e[34;1mtesting\e[0m", 'colored');
-is((BLUE BOLD 'testing'), "\e[34m\e[1mtesting", 'Constants');
+is((BLUE BOLD 'testing'),              "\e[34m\e[1mtesting",   'Constants');
 is(join(q{}, BLUE, BOLD, 'testing'),
     "\e[34m\e[1mtesting", 'Constants with commas');
 is((BLUE 'test', 'ing'), "\e[34mtesting", 'Constants with multiple strings');
@@ -90,6 +91,18 @@ is(color('bold'), "\e[1m", '...likewise when set to an empty string');
 is((BOLD),        "\e[1m", '...likewise for constants');
 delete $ENV{ANSI_COLORS_DISABLED};
 
+# Similar tests for NO_COLOR, although NO_COLOR may be set to any value.
+local $ENV{NO_COLOR} = 1;
+is(color('blue'), q{}, 'color support for NO_COLOR');
+is(colored('testing', 'blue', 'on_red'),
+    'testing', 'colored support for NO_COLOR');
+is((BLUE 'testing'), 'testing', 'Constant support for NO_COLOR');
+local $ENV{NO_COLOR} = q{};
+is(color('blue'), q{}, 'color support for NO_COLOR with empty string');
+is((RED 'testing'),
+    'testing', 'Constant support for NO_COLOR with empty string');
+delete $ENV{NO_COLOR};
+
 # Make sure DARK is exported.  This was omitted in versions prior to 1.07.
 is((DARK 'testing'), "\e[2mtesting", 'DARK');
 
@@ -130,7 +143,7 @@ is((POPCOLOR 'text'),       "\e[31m\e[42mtext", '...and POPCOLOR works');
 is((LOCALCOLOR GREEN ON_BLUE 'text'),
     "\e[32m\e[44mtext\e[31m\e[42m", 'LOCALCOLOR');
 $Term::ANSIColor::AUTOLOCAL = 1;
-is((BLUE 'text'), "\e[34mtext\e[31m\e[42m", 'AUTOLOCAL');
+is((BLUE 'text'),     "\e[34mtext\e[31m\e[42m", 'AUTOLOCAL');
 is((BLUE 'te', 'xt'), "\e[34mtext\e[31m\e[42m", 'AUTOLOCAL with commas');
 $Term::ANSIColor::AUTOLOCAL = 0;
 is((POPCOLOR 'text'), "\e[0mtext", 'POPCOLOR with empty stack');
@@ -300,6 +313,22 @@ is(ON_BLUE,       q{}, '...and for ON_BLUE');
 is(RESET,         q{}, '...and for RESET');
 delete $ENV{ANSI_COLORS_DISABLED};
 
+# Do the same for disabled colors with NO_COLOR.
+local $ENV{NO_COLOR} = 1;
+is(BOLD,          q{}, 'NO_COLOR works for BOLD');
+is(BLUE,          q{}, '...and for BLUE');
+is(GREEN,         q{}, '...and for GREEN');
+is(DARK,          q{}, '...and for DARK');
+is(FAINT,         q{}, '...and for FAINT');
+is(BRIGHT_RED,    q{}, '...and for BRIGHT_RED');
+is(ON_BRIGHT_RED, q{}, '...and for ON_BRIGHT_RED');
+is(ITALIC,        q{}, '...and for ITALIC');
+is(RED,           q{}, '...and for RED');
+is(ON_GREEN,      q{}, '...and for ON_GREEN');
+is(ON_BLUE,       q{}, '...and for ON_BLUE');
+is(RESET,         q{}, '...and for RESET');
+delete $ENV{NO_COLOR};
+
 # Do the same for AUTORESET.
 $Term::ANSIColor::AUTORESET = 1;
 is((BOLD 't'),          "\e[1mt\e[0m",   'AUTORESET works for BOLD');
index b5332ee..677aae0 100644 (file)
@@ -6,15 +6,15 @@
 # processing and lose its value or leak $@ values to the calling program.
 # This is a regression test to ensure that this problem doesn't return.
 #
-# Copyright 2012, 2013, 2014 Russ Allbery <rra@cpan.org>
+# Copyright 2012-2014, 2020 Russ Allbery <rra@cpan.org>
 #
-# This program is free software; you may redistribute it and/or modify it
-# under the same terms as Perl itself.
+# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl
 
+use 5.008;
 use strict;
 use warnings;
 
-use Test::More tests => 15;
+use Test::More tests => 17;
 
 # We refer to $@ in the test descriptions.
 ## no critic (ValuesAndExpressions::RequireInterpolationOfMetachars)
@@ -23,6 +23,7 @@ use Test::More tests => 15;
 BEGIN {
     delete $ENV{ANSI_COLORS_ALIASES};
     delete $ENV{ANSI_COLORS_DISABLED};
+    delete $ENV{NO_COLOR};
     use_ok('Term::ANSIColor', qw(:constants));
 }
 
@@ -43,6 +44,12 @@ is(BOLD,  q{}, 'ANSI_COLORS_DISABLED works for BOLD');
 is(BLINK, q{}, '...and for BLINK');
 delete $ENV{ANSI_COLORS_DISABLED};
 
+# Now, NO_COLOR.
+local $ENV{NO_COLOR} = 'foo';
+is(BOLD,  q{}, 'NO_COLOR works for BOLD');
+is(BLINK, q{}, '...and for BLINK');
+delete $ENV{NO_COLOR};
+
 # Now, AUTORESET.
 $Term::ANSIColor::AUTORESET = 1;
 is((BOLD 't'),  "\e[1mt\e[0m", 'AUTORESET works for BOLD');
index acb558d..ead86d4 100644 (file)
@@ -3,11 +3,11 @@
 # Test suite for stringify interaction.
 #
 # Copyright 2011 Revilo Reegiles
-# Copyright 2011, 2014 Russ Allbery <rra@cpan.org>
+# Copyright 2011, 2014, 2020 Russ Allbery <rra@cpan.org>
 #
-# This program is free software; you may redistribute it and/or modify it
-# under the same terms as Perl itself.
+# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl
 
+use 5.008;
 use strict;
 use warnings;
 
@@ -17,7 +17,7 @@ use Test::More tests => 6;
 ## no critic (Modules::ProhibitMultiplePackages)
 package Test::Stringify;
 use overload '""' => 'stringify';
-sub new { return bless({}, 'Test::Stringify') }
+sub new       { return bless({}, 'Test::Stringify') }
 sub stringify { return "Foo Bar\n" }
 
 # Back to the main package.
@@ -27,6 +27,7 @@ package main;
 BEGIN {
     delete $ENV{ANSI_COLORS_ALIASES};
     delete $ENV{ANSI_COLORS_DISABLED};
+    delete $ENV{NO_COLOR};
     use_ok('Term::ANSIColor', qw(colored));
 }
 
diff --git a/gnu/usr.bin/perl/cpan/Term-ANSIColor/t/module/true-color.t b/gnu/usr.bin/perl/cpan/Term-ANSIColor/t/module/true-color.t
new file mode 100644 (file)
index 0000000..a5fe55a
--- /dev/null
@@ -0,0 +1,112 @@
+#!/usr/bin/perl
+#
+# Tests for true color support (24-bit color).
+#
+# Copyright 2020 Russ Allbery <rra@cpan.org>
+#
+# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl
+
+use 5.008;
+use strict;
+use warnings;
+
+use Test::More tests => 82;
+
+# Load the module.
+BEGIN {
+    delete $ENV{ANSI_COLORS_ALIASES};
+    delete $ENV{ANSI_COLORS_DISABLED};
+    delete $ENV{NO_COLOR};
+    use_ok('Term::ANSIColor', qw(color uncolor colorvalid));
+}
+
+# Test basic true color codes.
+is(color('r0g0b0'),          "\e[38;2;0;0;0m",       'foreground 0 0 0');
+is(color('r000g000b000'),    "\e[38;2;0;0;0m",       'foreground 000 000 000');
+is(color('r255g0b0'),        "\e[38;2;255;0;0m",     'foreground 255 0 0');
+is(color('r0g255b0'),        "\e[38;2;0;255;0m",     'foreground 255 0 0');
+is(color('r0g0b255'),        "\e[38;2;0;0;255m",     'foreground 255 0 0');
+is(color('r255g255b255'),    "\e[38;2;255;255;255m", 'foreground 255 255 255');
+is(color('r1g02b003'),       "\e[38;2;1;2;3m",       'foreground 1 02 003');
+is(color('on_r0g0b0'),       "\e[48;2;0;0;0m",       'background 0 0 0');
+is(color('on_r000g000b000'), "\e[48;2;0;0;0m",       'background 000 000 000');
+is(color('on_r255g0b0'),     "\e[48;2;255;0;0m",     'background 255 0 0');
+is(color('on_r0g255b0'),     "\e[48;2;0;255;0m",     'background 255 0 0');
+is(color('on_r0g0b255'),     "\e[48;2;0;0;255m",     'background 255 0 0');
+is(color('on_r255g255b255'), "\e[48;2;255;255;255m", 'background 255 255 255');
+is(color('on_r1g02b003'),    "\e[48;2;1;2;3m",       'background 1 02 003');
+
+# Check that various true color codes are valid.
+my @valid = qw(
+  r0g0b0 r255g255b255 r1g02b003 on_r0g0b0 on_r255g255b255 on_r1g02b003
+);
+for my $color (@valid) {
+    ok(colorvalid($color), "Color $color is valid");
+}
+
+# Errors at boundary cases.
+my @invalid = qw(
+  r0g0 r256g0b0 r0g256b0 r0g0b256 r1000g2b3 rgb r1g2b r1gb2 r1b2g3
+);
+for my $color (@invalid) {
+    my $output = eval { color($color) };
+    is($output, undef, 'color on an invalid attribute fails');
+    like(
+        $@,
+        qr{ \A Invalid [ ] attribute [ ] name [ ] \Q$color\E [ ] at [ ] }xms,
+        '...with the right error'
+    );
+    ok(!colorvalid($color), '...and colorvalid says it is invalid');
+}
+
+# Check uncolor with true color codes.
+is_deeply([uncolor('38;2;0;0;0')],  ['r0g0b0'],    'uncolor of r0g0b0');
+is_deeply([uncolor('48;02;0;0;0')], ['on_r0g0b0'], 'uncolor of on_r0g0b0');
+is_deeply([uncolor("\e[038;2;255;255;255")],
+    ['r255g255b255'], 'uncolor of r255g255b255');
+is_deeply([uncolor("\e[48;002;255;255;255")],
+    ['on_r255g255b255'], 'uncolor of on_r255g255b255');
+is_deeply(
+    [uncolor("\e[1;38;2;1;02;003;5;48;2;4;5;6m")],
+    [qw(bold r1g2b3 blink on_r4g5b6)],
+    'uncolor of a complex escape',
+);
+is_deeply(
+    [uncolor("\e[1;38;2;1;02;003;5;48;5;230m")],
+    [qw(bold r1g2b3 blink on_rgb554)],
+    'uncolor mixing true-color and 256-color',
+);
+
+# An invalid true-color code should report an error on the part that makes it
+# invalid.  Check truncated codes (should report on the 38 or 48), codes with
+# an invalid second part (likewise), and codes with an invalid third part
+# (should report the complete code).
+#
+# This is a hash of test escape sequences to the invalid sequence that should
+# be reported.
+my %uncolor_tests = (
+    "\e[38;1m"             => 38,
+    "\e[38;2m"             => 38,
+    "\e[38;2;255;0m"       => 38,
+    "\e[38;2;256;0;0m"     => '38;2;256;0;0',
+    "\e[38;2;0;256;0m"     => '38;2;0;256;0',
+    "\e[38;2;0;0;256m"     => '38;2;0;0;256',
+    "\e[38;2;777;777;777m" => '38;2;777;777;777',
+    "\e[48;1m"             => 48,
+    "\e[48;2m"             => 48,
+    "\e[48;2;255;0m"       => 48,
+    "\e[48;2;256;0;0m"     => '48;2;256;0;0',
+    "\e[48;2;0;256;0m"     => '48;2;0;256;0',
+    "\e[48;2;0;0;256m"     => '48;2;0;0;256',
+    "\e[48;2;777;777;777m" => '48;2;777;777;777',
+);
+while (my ($escape, $invalid) = each(%uncolor_tests)) {
+    my $output = eval { uncolor($escape) };
+    is($output, undef, "uncolor on unknown color code \Q$escape\E fails");
+    like(
+        $@,
+        qr{ \A No [ ] name [ ] for [ ] escape [ ] sequence [ ] \Q$invalid\E
+            [ ] at [ ] }xms,
+        '...with the right error'
+    );
+}
index 53a6bb6..54611c8 100644 (file)
@@ -7,11 +7,11 @@
 # an environment variable).  Term::ANSIColor does the work to untaint it; be
 # sure that the taint flag is properly cleared.
 #
-# Copyright 2012 Russ Allbery <rra@cpan.org>
+# Copyright 2012, 2020 Russ Allbery <rra@cpan.org>
 #
-# This program is free software; you may redistribute it and/or modify it
-# under the same terms as Perl itself.
+# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl
 
+use 5.008;
 use strict;
 use warnings;
 
@@ -21,13 +21,14 @@ use Test::More tests => 4;
 BEGIN {
     delete $ENV{ANSI_COLORS_ALIASES};
     delete $ENV{ANSI_COLORS_DISABLED};
+    delete $ENV{NO_COLOR};
     use_ok('Term::ANSIColor', qw(:pushpop));
 }
 
 # Generate a tainted constant name.  PATH is always tainted, and tainting is
 # sticky, so we can prepend the name to whatever PATH holds and then chop it
 # off again.
-my $constant = substr 'BOLD' . $ENV{PATH}, 0, length 'BOLD';
+my $constant = substr('BOLD' . $ENV{PATH}, 0, length('BOLD'));
 
 # Using that as a constant should now work without any tainting problems.
 ## no critic (TestingAndDebugging::ProhibitNoStrict)
index 3c29ffd..ab405ca 100644 (file)
@@ -2,7 +2,7 @@ package Test::Builder::Formatter;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 BEGIN { require Test2::Formatter::TAP; our @ISA = qw(Test2::Formatter::TAP) }
 
@@ -33,7 +33,8 @@ sub debug_tap {
     my ($self, $f, $num) = @_;
     return if $self->{+NO_DIAG};
     my @out = $self->SUPER::debug_tap($f, $num);
-    $self->redirect(\@out) if @out && $f->{about}->{package} eq 'Test::Builder::TodoDiag';
+    $self->redirect(\@out) if @out && ref $f->{about} && defined $f->{about}->{package}
+        && $f->{about}->{package} eq 'Test::Builder::TodoDiag';
     return @out;
 }
 
@@ -41,7 +42,8 @@ sub info_tap {
     my ($self, $f) = @_;
     return if $self->{+NO_DIAG};
     my @out = $self->SUPER::info_tap($f);
-    $self->redirect(\@out) if @out && $f->{about}->{package} eq 'Test::Builder::TodoDiag';
+    $self->redirect(\@out) if @out && ref $f->{about} && defined $f->{about}->{package}
+        && $f->{about}->{package} eq 'Test::Builder::TodoDiag';
     return @out;
 }
 
index 8ac230f..b69ca25 100644 (file)
@@ -2,7 +2,7 @@ package Test::Builder::TodoDiag;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 BEGIN { require Test2::Event::Diag; our @ISA = qw(Test2::Event::Diag) }
 
index 98c5391..d915631 100644 (file)
@@ -2,7 +2,7 @@ package Test2;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 
 1;
index 8193b07..6c51741 100644 (file)
@@ -9,14 +9,44 @@ BEGIN {
     $ENV{TEST2_ACTIVE} = 1;
 }
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 
 my $INST;
 my $ENDING = 0;
-sub test2_set_is_end { ($ENDING) = @_ ? @_ : (1) }
+sub test2_unset_is_end { $ENDING = 0 }
 sub test2_get_is_end { $ENDING }
 
+sub test2_set_is_end {
+    my $before = $ENDING;
+    ($ENDING) = @_ ? @_ : (1);
+
+    # Only send the event in a transition from false to true
+    return if $before;
+    return unless $ENDING;
+
+    return unless $INST;
+    my $stack = $INST->stack or return;
+    my $root = $stack->root or return;
+
+    return unless $root->count;
+
+    return unless $$ == $INST->pid;
+    return unless get_tid() == $INST->tid;
+
+    my $trace = Test2::EventFacet::Trace->new(
+        frame  => [__PACKAGE__, __FILE__, __LINE__, __PACKAGE__ . '::test2_set_is_end'],
+    );
+    my $ctx = Test2::API::Context->new(
+        trace => $trace,
+        hub   => $root,
+    );
+
+    $ctx->send_ev2(control => { phase => 'END', details => 'Transition to END phase' });
+
+    1;
+}
+
 use Test2::API::Instance(\$INST);
 
 # Set the exit status
@@ -85,8 +115,10 @@ our @EXPORT_OK = qw{
     test2_start_preload
     test2_stop_preload
     test2_in_preload
+    test2_is_testing_done
 
     test2_set_is_end
+    test2_unset_is_end
     test2_get_is_end
 
     test2_pid
@@ -176,6 +208,27 @@ sub test2_ipc_wait_enable  { $INST->set_no_wait(0) }
 sub test2_ipc_wait_disable { $INST->set_no_wait(1) }
 sub test2_ipc_wait_enabled { !$INST->no_wait }
 
+sub test2_is_testing_done {
+    # No instance? VERY DONE!
+    return 1 unless $INST;
+
+    # No stack? tests must be done, it is created pretty early
+    my $stack = $INST->stack or return 1;
+
+    # Nothing on the stack, no root hub yet, likely have not started testing
+    return 0 unless @$stack;
+
+    # Stack has a slot for the root hub (see above) but it is undefined, likely
+    # garbage collected, test is done
+    my $root_hub = $stack->[0] or return 1;
+
+    # If the root hub is ended than testing is done.
+    return 1 if $root_hub->ended;
+
+    # Looks like we are still testing!
+    return 0;
+}
+
 sub test2_no_wait {
     $INST->set_no_wait(@_) if @_;
     $INST->no_wait;
@@ -322,6 +375,23 @@ sub context {
 
     my $stack   = $params{stack} || $STACK;
     my $hub     = $params{hub}   || (@$stack ? $stack->[-1] : $stack->top);
+
+    # Catch an edge case where we try to get context after the root hub has
+    # been garbage collected resulting in a stack that has a single undef
+    # hub
+    if (!$hub && !exists($params{hub}) && @$stack) {
+        my $msg = Carp::longmess("Attempt to get Test2 context after testing has completed (did you attempt a testing event after done_testing?)");
+
+        # The error message is usually masked by the global destruction, so we have to print to STDER
+        print STDERR $msg;
+
+        # Make sure this is a failure, we are probably already in END, so set $? to change the exit code
+        $? = 1;
+
+        # Now we actually die to interrupt the program flow and avoid undefined his warnings
+        die $msg;
+    }
+
     my $hid     = $hub->{hid};
     my $current = $CONTEXTS->{$hid};
 
@@ -814,6 +884,7 @@ C<intercept { ... }> which only lets you see events as the main hub sees them.
         test2_ipc
         test2_formatter_set
         test2_formatter
+        test2_is_testing_done
     };
 
     my $init  = test2_init_done();
@@ -1257,6 +1328,26 @@ Check if Test2 believes it is the END phase.
 This will return the global L<Test2::API::Stack> instance. If this has not
 yet been initialized it will be initialized now.
 
+=item $bool = test2_is_testing_done()
+
+This will return true if testing is complete and no other events should be
+sent. This is useful in things like warning handlers where you might want to
+turn warnings into events, but need them to start acting like normal warnings
+when testing is done.
+
+    $SIG{__WARN__} = sub {
+        my ($warning) = @_;
+
+        if (test2_is_testing_done()) {
+            warn @_;
+        }
+        else {
+            my $ctx = context();
+            ...
+            $ctx->release
+        }
+    }
+
 =item test2_ipc_disable
 
 Disable IPC.
index ffcf1be..2dd2852 100644 (file)
@@ -2,7 +2,7 @@ package Test2::API::Breakage;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 
 use Test2::Util qw/pkg_to_file/;
@@ -73,7 +73,9 @@ sub report {
         next unless $INC{$file} || ($require && eval { require $file; 1 });
         my $want = $suggest{$mod};
         next if eval { $mod->VERSION($want); 1 };
-        push @warn => " * Module '$mod' is outdated, we recommed updating above $want.";
+        my $error = $@;
+        chomp $error;
+        push @warn => " * Module '$mod' is outdated, we recommed updating above $want. error was: '$error'; INC is $INC{$file}";
     }
 
     for my $mod (keys %required) {
index 9cb1cfc..177d9c4 100644 (file)
@@ -2,7 +2,7 @@ package Test2::API::Context;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 
 use Carp qw/confess croak/;
@@ -71,6 +71,8 @@ sub DESTROY {
         # show the warning about using eq.
         no warnings 'uninitialized';
         if($self->{+EVAL_ERROR} eq $@ && $hub->is_local) {
+            require Carp;
+            my $mess = Carp::longmess("Context destroyed");
             my $frame = $self->{+_IS_SPAWN} || $self->{+TRACE}->frame;
             warn <<"            EOT";
 A context appears to have been destroyed without first calling release().
@@ -87,6 +89,10 @@ release():
   Line: $frame->[2]
   Tool: $frame->[3]
 
+Here is a trace to the code that caused the context to be destroyed, this could
+be an exit(), a goto, or simply the end of a scope:
+$mess
+
 Cleaning up the CONTEXT stack...
             EOT
         }
index 1cf224c..fbbb675 100644 (file)
@@ -2,7 +2,7 @@ package Test2::API::Instance;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 our @CARP_NOT = qw/Test2::API Test2::API::Instance Test2::IPC::Driver Test2::Formatter/;
 use Carp qw/confess carp/;
index ffa4ed5..d6b6e85 100644 (file)
@@ -2,7 +2,7 @@ package Test2::API::Stack;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 
 use Test2::Hub();
@@ -63,6 +63,12 @@ sub all {
     return @$self;
 }
 
+sub root {
+    my $self = shift;
+    return unless @$self;
+    return $self->[0];
+}
+
 sub clear {
     my $self = shift;
     @$self = ();
index 598456c..e1c567a 100644 (file)
@@ -2,7 +2,7 @@ package Test2::Event;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 use Scalar::Util qw/blessed reftype/;
 use Carp qw/croak/;
@@ -526,11 +526,11 @@ perhaps to say that an event of an unknown type was seen.
 Facets are produced by the C<facet_data()> subroutine, which you should
 nearly-always override. C<facet_data()> is expected to return a hashref where
 each key is the facet type, and the value is either a hashref with the data for
-that facet, or an array of hashref's. Some facets must be defined as single
+that facet, or an array of hashrefs. Some facets must be defined as single
 hashrefs, some must be defined as an array of hashrefs, No facets allow both.
 
 C<facet_data()> B<MUST NOT> bless the data it returns, the main hashref, and
-nested facet hashref's B<MUST> be bare, though items contained within each
+nested facet hashrefs B<MUST> be bare, though items contained within each
 facet may be blessed. The data returned by this method B<should> also be copies
 of the internal data in order to prevent accidental state modification.
 
index 4fa83c4..076ac97 100644 (file)
@@ -2,7 +2,7 @@ package Test2::Event::Bail;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 
 BEGIN { require Test2::Event; our @ISA = qw(Test2::Event) }
index 86617f8..9fa732f 100644 (file)
@@ -2,7 +2,7 @@ package Test2::Event::Diag;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 
 BEGIN { require Test2::Event; our @ISA = qw(Test2::Event) }
index 1207163..3fb7364 100644 (file)
@@ -2,7 +2,7 @@ package Test2::Event::Encoding;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 use Carp qw/croak/;
 
index 66bbdb4..df83ac8 100644 (file)
@@ -2,7 +2,7 @@ package Test2::Event::Exception;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 
 BEGIN { require Test2::Event; our @ISA = qw(Test2::Event) }
index 2577cd9..f09a035 100644 (file)
@@ -2,7 +2,7 @@ package Test2::Event::Fail;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 use Test2::EventFacet::Info;
 
index 02619d9..ef08124 100644 (file)
@@ -5,7 +5,7 @@ use warnings;
 use Carp qw/croak/;
 use Scalar::Util qw/reftype/;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 BEGIN { require Test2::Event; our @ISA = qw(Test2::Event) }
 use Test2::Util::HashBase;
index 3dd0999..4a310f3 100644 (file)
@@ -2,7 +2,7 @@ package Test2::Event::Note;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 
 BEGIN { require Test2::Event; our @ISA = qw(Test2::Event) }
index 7a603b4..088c8b6 100644 (file)
@@ -2,7 +2,7 @@ package Test2::Event::Ok;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 
 BEGIN { require Test2::Event; our @ISA = qw(Test2::Event) }
index 4672623..bfc3a73 100644 (file)
@@ -2,7 +2,7 @@ package Test2::Event::Pass;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 use Test2::EventFacet::Info;
 
index 00b6397..ad8f927 100644 (file)
@@ -2,7 +2,7 @@ package Test2::Event::Plan;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 
 BEGIN { require Test2::Event; our @ISA = qw(Test2::Event) }
index 07db329..a992324 100644 (file)
@@ -2,7 +2,7 @@ package Test2::Event::Skip;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 
 BEGIN { require Test2::Event::Ok; our @ISA = qw(Test2::Event::Ok) }
index 92e3f6d..aed0c00 100644 (file)
@@ -2,7 +2,7 @@ package Test2::Event::Subtest;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 BEGIN { require Test2::Event::Ok; our @ISA = qw(Test2::Event::Ok) }
 use Test2::Util::HashBase qw{subevents buffered subtest_id subtest_uuid};
index cf7d773..b3cb1d8 100644 (file)
@@ -2,7 +2,7 @@ package Test2::Event::TAP::Version;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 use Carp qw/croak/;
 
index 020cf23..326a818 100644 (file)
@@ -2,7 +2,7 @@ package Test2::Event::V2;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 use Scalar::Util qw/reftype/;
 use Carp qw/croak/;
@@ -60,8 +60,8 @@ sub facet_data {
     for my $k (keys %$f) {
         next if substr($k, 0, 1) eq '_';
 
-        my $data = $f->{$k};
-        my $is_list = reftype($data) eq 'ARRAY';
+        my $data = $f->{$k} or next; # Key is there, but no facet
+        my $is_list = 'ARRAY' eq (reftype($data) || '');
         $out{$k} = $is_list ? [ map { {%{$_}} } @$data ] : {%$data};
     }
 
index 4b790a6..dbd1448 100644 (file)
@@ -2,7 +2,7 @@ package Test2::Event::Waiting;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 
 BEGIN { require Test2::Event; our @ISA = qw(Test2::Event) }
index d9fb03f..13c217f 100644 (file)
@@ -2,7 +2,7 @@ package Test2::EventFacet;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 use Test2::Util::HashBase qw/-details/;
 use Carp qw/croak/;
index fc36d27..f12ebf8 100644 (file)
@@ -2,7 +2,7 @@ package Test2::EventFacet::About;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 BEGIN { require Test2::EventFacet; our @ISA = qw(Test2::EventFacet) }
 use Test2::Util::HashBase qw{ -package -no_display -uuid -eid };
index ac72cf3..45ed927 100644 (file)
@@ -2,7 +2,7 @@ package Test2::EventFacet::Amnesty;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 sub is_list { 1 }
 
index a11aef1..02f89af 100644 (file)
@@ -2,7 +2,7 @@ package Test2::EventFacet::Assert;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 BEGIN { require Test2::EventFacet; our @ISA = qw(Test2::EventFacet) }
 use Test2::Util::HashBase qw{ -pass -no_debug -number };
index 6ea0eae..8a04a4a 100644 (file)
@@ -2,10 +2,10 @@ package Test2::EventFacet::Control;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 BEGIN { require Test2::EventFacet; our @ISA = qw(Test2::EventFacet) }
-use Test2::Util::HashBase qw{ -global -terminate -halt -has_callback -encoding };
+use Test2::Util::HashBase qw{ -global -terminate -halt -has_callback -encoding -phase };
 
 1;
 
@@ -65,6 +65,13 @@ True if the C<callback($hub)> method on the event should be called.
 
 This can be used to change the encoding from this event onward.
 
+=item $phase = $control->{phase}
+
+=item $phase = $control->phase()
+
+Used to signal that a phase change has occurred. Currently only the perl END
+phase is signaled.
+
 =back
 
 =head1 SOURCE
index 4a21ef7..87baf11 100644 (file)
@@ -2,7 +2,7 @@ package Test2::EventFacet::Error;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 sub facet_key { 'errors' }
 sub is_list { 1 }
index 40b9d65..3701425 100644 (file)
@@ -2,7 +2,7 @@ package Test2::EventFacet::Hub;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 sub is_list { 1 }
 sub facet_key { 'hubs' }
index c382049..badd2d0 100644 (file)
@@ -2,7 +2,7 @@ package Test2::EventFacet::Info;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 sub is_list { 1 }
 
index 64bd955..0c127b5 100644 (file)
@@ -2,6 +2,8 @@ package Test2::EventFacet::Info::Table;
 use strict;
 use warnings;
 
+our $VERSION = '1.302175';
+
 use Carp qw/confess/;
 
 use Test2::Util::HashBase qw{-header -rows -collapse -no_collapse -as_string};
index dc369ff..2b75764 100644 (file)
@@ -2,7 +2,7 @@ package Test2::EventFacet::Meta;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 BEGIN { require Test2::EventFacet; our @ISA = qw(Test2::EventFacet) }
 use vars qw/$AUTOLOAD/;
index d36fd92..ac26737 100644 (file)
@@ -2,7 +2,7 @@ package Test2::EventFacet::Parent;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 use Carp qw/confess/;
 
index 2f14f7d..355588b 100644 (file)
@@ -2,7 +2,7 @@ package Test2::EventFacet::Plan;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 BEGIN { require Test2::EventFacet; our @ISA = qw(Test2::EventFacet) }
 use Test2::Util::HashBase qw{ -count -skip -none };
index 07c4543..13fe4cb 100644 (file)
@@ -2,7 +2,7 @@ package Test2::EventFacet::Render;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 sub is_list { 1 }
 
index 34a3fce..455b0ee 100644 (file)
@@ -2,7 +2,7 @@ package Test2::EventFacet::Trace;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 BEGIN { require Test2::EventFacet; our @ISA = qw(Test2::EventFacet) }
 
index c4515d8..17c28bf 100644 (file)
@@ -2,7 +2,7 @@ package Test2::Formatter;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 
 my %ADDED;
index 25961bf..120c82d 100644 (file)
@@ -2,7 +2,7 @@ package Test2::Formatter::TAP;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 use Test2::Util qw/clone_io/;
 
@@ -16,16 +16,17 @@ sub OUT_ERR() { 1 }
 
 BEGIN { require Test2::Formatter; our @ISA = qw(Test2::Formatter) }
 
-# Not constants because this is a method, and can be overriden
-BEGIN {
-    local $SIG{__DIE__} = 'DEFAULT';
-    local $@;
-    if (($INC{'Term/Table.pm'} && $INC{'Term/Table/Util.pm'}) || eval { require Term::Table; require Term::Table::Util; 1 }) {
-        *supports_tables = sub { 1 };
-    }
-    else {
-        *supports_tables = sub { 0 };
+my $supports_tables;
+sub supports_tables {
+    if (!defined $supports_tables) {
+        local $SIG{__DIE__} = 'DEFAULT';
+        local $@;
+        $supports_tables
+            = ($INC{'Term/Table.pm'} && $INC{'Term/Table/Util.pm'})
+            || eval { require Term::Table; require Term::Table::Util; 1 }
+            || 0;
     }
+    return $supports_tables;
 }
 
 sub _autoflush {
@@ -270,7 +271,10 @@ sub assert_tap {
         }
 
         my %seen;
-        my @order = grep { !$seen{$_}++ } sort keys %directives;
+
+        # Sort so that TODO comes before skip even on systems where lc sorts
+        # before uc, as other code depends on that ordering.
+        my @order = grep { !$seen{$_}++ } sort { lc $b cmp lc $a } keys %directives;
 
         $directives = ' # ' . join ' & ' => @order;
 
index a5706e5..e041f6d 100644 (file)
@@ -2,7 +2,7 @@ package Test2::Hub;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 
 use Carp qw/carp croak confess/;
@@ -813,7 +813,7 @@ Get the IPC object used by the hub.
 
 This can be used to disable auto-ending behavior for a hub. The auto-ending
 behavior is triggered by an end block and is used to cull IPC events, and
-output the final plan if the plan was 'no_plan'.
+output the final plan if the plan was 'NO PLAN'.
 
 =item $bool = $hub->active
 
@@ -861,7 +861,7 @@ pass/fail status.
 =item $plan = $hub->plan
 
 Get or set the plan. The plan must be an integer larger than 0, the string
-'no_plan', or the string 'skip_all'.
+'NO PLAN', or the string 'SKIP'.
 
 =item $bool = $hub->check_plan
 
index cd459ad..317dfa8 100644 (file)
@@ -2,7 +2,7 @@ package Test2::Hub::Interceptor;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 
 use Test2::Hub::Interceptor::Terminator();
index 6f44b08..906e7b0 100644 (file)
@@ -2,7 +2,7 @@ package Test2::Hub::Interceptor::Terminator;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 
 1;
index 52d5b4e..acc6369 100644 (file)
@@ -2,7 +2,7 @@ package Test2::Hub::Subtest;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 BEGIN { require Test2::Hub; our @ISA = qw(Test2::Hub) }
 use Test2::Util::HashBase qw/nested exit_code manual_skip_all/;
index b2a503b..e9d29cc 100644 (file)
@@ -2,7 +2,7 @@ package Test2::IPC;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 
 use Test2::API::Instance;
index dbcb700..db6642a 100644 (file)
@@ -2,7 +2,7 @@ package Test2::IPC::Driver;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 
 use Carp qw/confess/;
index f6d7ff1..09fdd5c 100644 (file)
@@ -2,7 +2,7 @@ package Test2::IPC::Driver::Files;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 BEGIN { require Test2::IPC::Driver; our @ISA = qw(Test2::IPC::Driver) }
 
@@ -117,12 +117,36 @@ sub drop_hub {
     }
 
     opendir(my $dh, $tdir) or $self->abort_trace("Could not open temp dir!");
+
+    my %bad;
     for my $file (readdir($dh)) {
         next if $file =~ m{\.complete$};
         next unless $file =~ m{^$hid};
-        $self->abort_trace("Not all files from hub '$hid' have been collected!");
+
+        eval { $bad{$file} = $self->read_event_file(File::Spec->catfile($tdir, $file)); 1 } or $bad{$file} = $@ || "Unknown error reading file";
     }
     closedir($dh);
+
+    return unless keys %bad;
+
+    my $data;
+    my $ok = eval {
+        require JSON::PP;
+        local *UNIVERSAL::TO_JSON = sub { +{ %{$_[0]} } };
+        my $json = JSON::PP->new->ascii->pretty->canonical->allow_unknown->allow_blessed->convert_blessed;
+        $data = $json->encode(\%bad);
+        1;
+    };
+    $ok ||= eval {
+        require Data::Dumper;
+        local $Data::Dumper::Sortkeys = 1;
+        $data = Data::Dumper::Dumper(\%bad);
+        1;
+    };
+
+    $data = "Could not dump data... sorry." unless defined $data;
+
+    $self->abort_trace("Not all files from hub '$hid' have been collected!\nHere is the leftover data:\n========================\n$data\n===================\n");
 }
 
 sub send {
index 4da76a7..5139e46 100644 (file)
@@ -16,7 +16,7 @@ use Test2::API qw/context run_subtest test2_stack/;
 use Test2::Hub::Interceptor();
 use Test2::Hub::Interceptor::Terminator();
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 BEGIN { require Exporter; our @ISA = qw(Exporter) }
 our @EXPORT = qw{
index de6442c..07811f0 100644 (file)
@@ -76,7 +76,7 @@ as needed.
 =head3 The Problem
 
 An early change, in fact the change that made Test2 an idea, was a change to
-the indentation of the subtest note. IT was decided it would be more readable
+the indentation of the subtest note. It was decided it would be more readable
 to outdent the subtest note instead of having it inline with the subtest:
 
     # subtest foo
@@ -104,7 +104,7 @@ This breaks tests that do string comparison of TAP output.
     );
 
 Check if C<$INC{'Test2/API.pm'}> is set, if it is then no indentation should be
-expected. If it is not set than the old Test::Builder is in use, indentation
+expected. If it is not set, then the old Test::Builder is in use, indentation
 should be expected.
 
 =head1 DISTRIBUTIONS THAT BREAK OR NEED TO BE UPGRADED
@@ -129,13 +129,6 @@ failure. This can be easily updated, but nobody has done so yet.
 
 Known broken in versions: 1.0.9 and older
 
-=item Test::Kit
-
-This actually works fine, but will not install because L<Test::Aggregate> is in
-the dependency chain.
-
-See the L<Test::Aggregate> info below for additional information.
-
 =item Device::Chip
 
 Tests break due to subtest indentation.
@@ -201,6 +194,13 @@ the bugfix.
 
 Fixed in version: 0.04
 
+=item Test::Kit
+
+Old versions work fine, but would not install because L<Test::Aggregate> was in
+the dependency chain. An upgrade should not be needed.
+
+Fixed in version: 2.15
+
 =item autouse
 
 A test broke because it depended on Scalar::Util not being loaded. Test2 loads
@@ -274,8 +274,8 @@ Fixed in version: 0.007
 
 This distribution directly accesses the hash keys in the L<Test::Builder>
 singleton. It also approaches the problem from the wrong angle, please consider
-using L<Test2::Harness> or L<App::ForkProve> which both solve the same problem
-at the harness level.
+using L<Test2::Aggregate> for similar functionality and L<Test2::Harness>
+which allows module preloading at the harness level.
 
 Still broken as of version: 0.373
 
index c4a865e..0ba4995 100644 (file)
@@ -2,7 +2,7 @@ package Test2::Util;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 use POSIX();
 use Config qw/%Config/;
index dbd819f..90345d0 100644 (file)
@@ -2,7 +2,7 @@ package Test2::Util::ExternalMeta;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 
 use Carp qw/croak/;
index 812282d..4bcee18 100644 (file)
@@ -2,7 +2,7 @@ package Test2::Util::Facets2Legacy;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 use Carp qw/croak confess/;
 use Scalar::Util qw/blessed/;
index c34db5f..a6a04f9 100644 (file)
@@ -2,7 +2,7 @@ package Test2::Util::HashBase;
 use strict;
 use warnings;
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 #################################################################
 #                                                               #
@@ -16,7 +16,7 @@ our $VERSION = '1.302162';
 
 {
     no warnings 'once';
-    $Test2::Util::HashBase::HB_VERSION = '0.006';
+    $Test2::Util::HashBase::HB_VERSION = '0.009';
     *Test2::Util::HashBase::ATTR_SUBS = \%Object::HashBase::ATTR_SUBS;
     *Test2::Util::HashBase::ATTR_LIST = \%Object::HashBase::ATTR_LIST;
     *Test2::Util::HashBase::VERSION   = \%Object::HashBase::VERSION;
@@ -44,9 +44,12 @@ BEGIN {
     }
 }
 
-my %STRIP = (
-    '^' => 1,
-    '-' => 1,
+my %SPEC = (
+    '^' => {reader => 1, writer => 0, dep_writer => 1, read_only => 0, strip => 1},
+    '-' => {reader => 1, writer => 0, dep_writer => 0, read_only => 1, strip => 1},
+    '>' => {reader => 0, writer => 1, dep_writer => 0, read_only => 0, strip => 1},
+    '<' => {reader => 1, writer => 0, dep_writer => 0, read_only => 0, strip => 1},
+    '+' => {reader => 0, writer => 0, dep_writer => 0, read_only => 0, strip => 1},
 );
 
 sub import {
@@ -68,14 +71,22 @@ sub import {
             map {
                 my $p = substr($_, 0, 1);
                 my $x = $_;
-                substr($x, 0, 1) = '' if $STRIP{$p};
+
+                my $spec = $SPEC{$p} || {reader => 1, writer => 1};
+
+                substr($x, 0, 1) = '' if $spec->{strip};
                 push @$attr_list => $x;
                 my ($sub, $attr) = (uc $x, $x);
-                $sub => ($attr_subs->{$sub} = sub() { $attr }),
-                    $attr => sub { $_[0]->{$attr} },
-                      $p eq '-' ? ("set_$attr" => sub { Carp::croak("'$attr' is read-only") })
-                    : $p eq '^' ? ("set_$attr" => sub { Carp::carp("set_$attr() is deprecated"); $_[0]->{$attr} = $_[1] })
-                    : ("set_$attr" => sub { $_[0]->{$attr} = $_[1] }),
+
+                $attr_subs->{$sub} = sub() { $attr };
+                my %out = ($sub => $attr_subs->{$sub});
+
+                $out{$attr}       = sub { $_[0]->{$attr} }                                                  if $spec->{reader};
+                $out{"set_$attr"} = sub { $_[0]->{$attr} = $_[1] }                                          if $spec->{writer};
+                $out{"set_$attr"} = sub { Carp::croak("'$attr' is read-only") }                             if $spec->{read_only};
+                $out{"set_$attr"} = sub { Carp::carp("set_$attr() is deprecated"); $_[0]->{$attr} = $_[1] } if $spec->{dep_writer};
+
+                %out;
             } @_
         ),
     );
@@ -167,7 +178,7 @@ A class:
     use warnings;
 
     # Generate 3 accessors
-    use Test2::Util::HashBase qw/foo -bar ^baz/;
+    use Test2::Util::HashBase qw/foo -bar ^baz <bat >ban +boo/;
 
     # Chance to initialize defaults
     sub init {
@@ -175,10 +186,13 @@ A class:
         $self->{+FOO} ||= "foo";
         $self->{+BAR} ||= "bar";
         $self->{+BAZ} ||= "baz";
+        $self->{+BAT} ||= "bat";
+        $self->{+BAN} ||= "ban";
+        $self->{+BOO} ||= "boo";
     }
 
     sub print {
-        print join ", " => map { $self->{$_} } FOO, BAR, BAZ;
+        print join ", " => map { $self->{$_} } FOO, BAR, BAZ, BAT, BAN, BOO;
     }
 
 Subclass it
@@ -189,14 +203,14 @@ Subclass it
 
     # Note, you should subclass before loading HashBase.
     use base 'My::Class';
-    use Test2::Util::HashBase qw/bat/;
+    use Test2::Util::HashBase qw/bub/;
 
     sub init {
         my $self = shift;
 
         # We get the constants from the base class for free.
         $self->{+FOO} ||= 'SubFoo';
-        $self->{+BAT} ||= 'bat';
+        $self->{+BUB} ||= 'bub';
 
         $self->SUPER::init();
     }
@@ -213,10 +227,13 @@ use it:
     my $two   = My::Class->new({foo => 'MyFoo', bar => 'MyBar'});
     my $three = My::Class->new(['MyFoo', 'MyBar']);
 
-    # Accessors!
+    # Readers!
     my $foo = $one->foo;    # 'MyFoo'
     my $bar = $one->bar;    # 'MyBar'
     my $baz = $one->baz;    # Defaulted to: 'baz'
+    my $bat = $one->bat;    # Defaulted to: 'bat'
+    # '>ban' means setter only, no reader
+    # '+boo' means no setter or reader, just the BOO constant
 
     # Setters!
     $one->set_foo('A Foo');
@@ -228,6 +245,9 @@ use it:
     # deprecated.
     $one->set_baz('A Baz');
 
+    # '<bat' means no setter defined at all
+    # '+boo' means no setter or reader, just the BOO constant
+
     $one->{+FOO} = 'xxx';
 
 =head1 DESCRIPTION
@@ -371,6 +391,24 @@ deprecated.
 
 =back
 
+=head2 NO SETTER
+
+    use Test2::Util::HashBase qw/<foo/;
+
+Only gives you a reader, no C<set_foo> method is defined at all.
+
+=head2 NO READER
+
+    use Test2::Util::HashBase qw/>foo/;
+
+Only gives you a write (C<set_foo>), no C<foo> method is defined at all.
+
+=head2 CONSTANT ONLY
+
+    use Test2::Util::HashBase qw/+foo/;
+
+This does not create any methods for you, it just adds the C<FOO> constant.
+
 =head1 SUBCLASSING
 
 You can subclass an existing HashBase class.
@@ -425,7 +463,7 @@ F<http://github.com/Test-More/HashBase/>.
 
 =head1 COPYRIGHT
 
-Copyright 2019 Chad Granum E<lt>exodist@cpan.orgE<gt>.
+Copyright 2017 Chad Granum E<lt>exodist@cpan.orgE<gt>.
 
 This program is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself.
index 28124f3..33b3648 100644 (file)
@@ -2,7 +2,7 @@ package Test2::Util::Trace;
 require Test2::EventFacet::Trace;
 @ISA = ('Test2::EventFacet::Trace');
 
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
 
 1;
 
index 397c697..e040de6 100644 (file)
@@ -135,17 +135,28 @@ BEGIN {
 
     package
         main::HBase2;
-    use Test2::Util::HashBase qw/foo -bar ^baz/;
+    use Test2::Util::HashBase qw/foo -bar ^baz <bat >ban +boo/;
 
     main::is(FOO, 'foo', "FOO CONSTANT");
     main::is(BAR, 'bar', "BAR CONSTANT");
     main::is(BAZ, 'baz', "BAZ CONSTANT");
+    main::is(BAT, 'bat', "BAT CONSTANT");
+    main::is(BAN, 'ban', "BAN CONSTANT");
+    main::is(BOO, 'boo', "BOO CONSTANT");
 }
 
-my $ro = main::HBase2->new(foo => 'foo', bar => 'bar', baz => 'baz');
+my $ro = main::HBase2->new(foo => 'foo', bar => 'bar', baz => 'baz', bat => 'bat', ban => 'ban');
 is($ro->foo, 'foo', "got foo");
 is($ro->bar, 'bar', "got bar");
 is($ro->baz, 'baz', "got baz");
+is($ro->bat, 'bat', "got bat");
+ok(!$ro->can('set_bat'), "No setter for bat");
+ok(!$ro->can('ban'), "No reader for ban");
+ok(!$ro->can('boo'), "No reader for boo");
+ok(!$ro->can('set_boo'), "No setter for boo");
+is($ro->{ban}, 'ban', "ban attribute is set");
+$ro->set_ban('xxx');
+is($ro->{ban}, 'xxx', "ban attribute can be set");
 
 is($ro->set_foo('xxx'), 'xxx', "Can set foo");
 is($ro->foo, 'xxx', "got foo");
index 87e1a54..6b25525 100644 (file)
@@ -9,7 +9,7 @@ use File::Basename qw(dirname);
 use File::Spec qw();
 
 my $file = File::Spec->join(dirname(__FILE__), 'tbt_09do_script.pl');
-$file = File::Spec->catfile(File::Spec->curdir(), $file)
+$file = File::Spec->rel2abs(File::Spec->catfile(File::Spec->curdir(), $file))
     unless File::Spec->file_name_is_absolute($file);
 my $done = do $file;
 ok(defined($done), 'do succeeded') or do {
index a804cac..c96c423 100644 (file)
@@ -1,6 +1,8 @@
 use strict;
 use warnings;
 
+BEGIN { no warnings 'once'; $main::cleanup1 = bless {}, 'My::Cleanup' }
+
 use Test2::API qw/context/;
 
 my ($LOADED, $INIT);
@@ -26,6 +28,7 @@ ok(Test2::API->can($_), "$_ method is present") for qw{
     test2_tid
     test2_stack
     test2_no_wait
+    test2_is_testing_done
 
     test2_add_callback_context_init
     test2_add_callback_context_release
@@ -285,5 +288,23 @@ is((grep { $_ == $sub } Test2::API::test2_list_context_release_callbacks()), 2,
 is((grep { $_ == $sub } Test2::API::test2_list_exit_callbacks()),            2, "got the two instances of the hook");
 is((grep { $_ == $sub } Test2::API::test2_list_post_load_callbacks()),       2, "got the two instances of the hook");
 
+ok(!Test2::API::test2_is_testing_done(), "Testing is not done");
+
 done_testing;
 
+die "Testing should be done, but it is not!" unless Test2::API::test2_is_testing_done();
+
+{
+    package My::Cleanup;
+
+    sub DESTROY {
+        return if Test2::API::test2_is_testing_done();
+        print "not ok - Testing should be done, but it is not!\n";
+        warn "Testing should be done, but it is not!";
+        eval "END { $? = 255 }; 1" or die $@;
+        exit 255;
+    }
+}
+
+# This should destroy the thing
+END { no warnings 'once'; $main::cleanup2 = bless {}, 'My::Cleanup' }
index e293246..26d01b8 100644 (file)
@@ -33,12 +33,12 @@ for my $meth (qw/upgrade_suggested upgrade_required known_broken/) {
     {
         local %INC = (
             %INC,
-            'T2Test/UG1.pm' => 1,
-            'T2Test/UG2.pm' => 1,
-            'T2Test/UR1.pm' => 1,
-            'T2Test/UR2.pm' => 1,
-            'T2Test/KB1.pm' => 1,
-            'T2Test/KB2.pm' => 1,
+            'T2Test/UG1.pm' => 'T2Test/UG1.pm',
+            'T2Test/UG2.pm' => 'T2Test/UG2.pm',
+            'T2Test/UR1.pm' => 'T2Test/UR1.pm',
+            'T2Test/UR2.pm' => 'T2Test/UR2.pm',
+            'T2Test/KB1.pm' => 'T2Test/KB1.pm',
+            'T2Test/KB2.pm' => 'T2Test/KB2.pm',
         );
         local $T2Test::UG1::VERSION = '0.9';
         local $T2Test::UG2::VERSION = '0.9';
@@ -49,14 +49,16 @@ for my $meth (qw/upgrade_suggested upgrade_required known_broken/) {
 
         my @report = $CLASS->report;
 
+        $_ =~ s{\S+/Breakage\.pm}{Breakage.pm}g for @report;
+
         is_deeply(
             [sort @report],
             [
                 sort
-                " * Module 'T2Test::UG1' is outdated, we recommed updating above 1.0.",
                 " * Module 'T2Test::UR1' is outdated and known to be broken, please update to 1.0 or higher.",
                 " * Module 'T2Test::KB1' is known to be broken in version 1.0 and below, newer versions have not been tested. You have: 0.9",
                 " * Module 'T2Test::KB2' is known to be broken in version 0.5 and below, newer versions have not been tested. You have: 0.9",
+                " * Module 'T2Test::UG1' is outdated, we recommed updating above 1.0. error was: 'T2Test::UG1 version 1.0 required--this is only version 0.9 at Breakage.pm line 75.'; INC is T2Test/UG1.pm",
             ],
             "Got expected report items"
         );
index 207f3d0..b17dd20 100644 (file)
@@ -477,4 +477,30 @@ sub {
 
 }->();
 
+sub ctx_destroy_test {
+    my (undef, undef, $line1) = caller();
+    my (@warn, $line2);
+    local $SIG{__WARN__} = sub { push @warn => $_[0] };
+
+    { my $ctx = context(); $ctx = undef } $line2 = __LINE__;
+
+    use Data::Dumper;
+#    print Dumper(@warn);
+
+    like($warn[0], qr/context appears to have been destroyed without first calling release/, "Is normal context warning");
+    like($warn[0], qr{\QContext destroyed at ${ \__FILE__ } line $line2\E}, "Reported context destruction trace");
+
+    my $created = <<"    EOT";
+Here are the context creation details, just in case a tool forgot to call
+release():
+  File: ${ \__FILE__ }
+  Line: $line1
+  Tool: main::ctx_destroy_test
+    EOT
+
+    like($warn[0], qr{\Q$created\E}, "Reported context creation details");
+};
+
+ctx_destroy_test();
+
 done_testing;
index ee54a15..43ec086 100644 (file)
@@ -1,6 +1,7 @@
 use strict;
 use warnings;
 # HARNESS-NO-PRELOAD
+# HARNESS-NO-STREAM
 
 my $CLASS;
 my %BEFORE_LOAD;
@@ -1019,7 +1020,7 @@ my $can_table      = $CLASS->supports_tables;
 my $author_testing = $ENV{AUTHOR_TESTING};
 
 if ($author_testing && !$can_table) {
-    die "This test requires Term::Table to be installed, and must be run in AUTHOR_TESTING mode";
+    die "You are running this test under AUTHOR_TESTING, doing so requires Term::Table to be installed, but it is not currently installed, this is a fatal error. Please install Term::Table before attempting to run this test under AUTHOR_TESTING.";
 }
 elsif ($can_table) {
     tests tables => sub {
index dd4e0b4..f3acb5c 100644 (file)
@@ -5,7 +5,6 @@ use Test2::API qw/intercept/;
 use Test::More;
 
 my @values = (
-    "",               # false but defined -> inconsistent
     0,                # false but defined -> inconsistent
     0.0,              # false but defined -> inconsistent
     "0.0",            # true -> TODO
@@ -18,4 +17,12 @@ for my $value (@values) {
     fail "Testing: $x";
 }
 
+my $e = intercept {
+    local $TODO = "";
+    fail "Testing: '\"\"'";
+};
+
+ok(!$e->[0]->effective_pass, "Test was not TODO when set to \"\"");
+like($e->[1]->message, qr/Failed test '/, "Did not add TODO to the diagnostics");
+
 done_testing;
index c4e30f9..6427ba2 100644 (file)
@@ -14,7 +14,7 @@ use Test2::API qw/intercept context/;
 
         my $out = $self->common_facet_data;
 
-        $out->{errors} = [{tag => 'OOPS', fail => !$ENV{FAILURE_DO_PASS}, details => "An error occured"}];
+        $out->{errors} = [{tag => 'OOPS', fail => !$ENV{FAILURE_DO_PASS}, details => "An error occurred"}];
 
         return $out;
     }
diff --git a/gnu/usr.bin/perl/cpan/Time-Piece/t/06large.t b/gnu/usr.bin/perl/cpan/Time-Piece/t/06large.t
new file mode 100644 (file)
index 0000000..aa0c192
--- /dev/null
@@ -0,0 +1,42 @@
+use Test::More;
+use Time::Piece;
+use Time::Seconds;
+
+# Large tests - test dates outside of the epoch range,
+# somewhat silly, but lets see what happens
+
+
+plan skip_all => "Large time tests not required for installation"
+  unless ( $ENV{AUTOMATED_TESTING} );
+
+TODO: {
+    local $TODO = "Big dates will probably fail on some platforms";
+    my $t = gmtime;
+
+    my $base_year = $t->year;
+    my $one_year  = ONE_YEAR;
+
+    for ( 1 .. 50 ) {
+        $t = $t + $one_year;
+        cmp_ok(
+            $t->year, '==',
+            $base_year + $_,
+            "Year is: " . ( $base_year + $_ )
+        );
+    }
+
+    $t         = gmtime;
+    $base_year = $t->year;
+
+    for ( 1 .. 200 ) {
+        $t = $t - $one_year;
+        cmp_ok(
+            $t->year, '==',
+            $base_year - $_,
+            "Year is: " . ( $base_year - $_ )
+        );
+    }
+
+}
+
+done_testing(250);
diff --git a/gnu/usr.bin/perl/cpan/Time-Piece/t/08truncate.t b/gnu/usr.bin/perl/cpan/Time-Piece/t/08truncate.t
new file mode 100644 (file)
index 0000000..4bacf0e
--- /dev/null
@@ -0,0 +1,51 @@
+use strict;
+use warnings;
+use Test::More tests => 24;
+
+use Time::Piece;
+
+my $epoch = 1373371631;
+my $t = gmtime($epoch); # 2013-07-09T12:07:11
+
+is ($t->truncate,        $t, 'No args, same object');
+is ($t->truncate('foo'), $t, 'No "to" arg, same object');
+eval { $t->truncate('to') };
+like ($@, qr/Invalid value of 'to' parameter/,
+        'No "to" value croaks');
+eval { $t->truncate('to' => 'foo') };
+like ($@, qr/Invalid value of 'to' parameter: foo/,
+        'Unrecognised "to" value croaks');
+
+my $short = $t->truncate(to => 'second');
+my $exp   = $epoch;
+cmp_ok ($short->epoch, '==', $exp, 'Truncate to second');
+
+$short = $t->truncate(to => 'minute');
+$exp   -= 11;
+cmp_ok ($short->epoch, '==', $exp, 'Truncate to minute');
+
+$short = $t->truncate(to => 'hour');
+$exp   -= 420;
+cmp_ok ($short->epoch, '==', $exp, 'Truncate to hour');
+
+$short = $t->truncate(to => 'day');
+$exp   -= 43200;
+cmp_ok ($short->epoch, '==', $exp, 'Truncate to day');
+
+$short = $t->truncate(to => 'month');
+$exp   -= 8 * 86400;
+cmp_ok ($short->epoch, '==', $exp, 'Truncate to month');
+
+$exp = gmtime ($exp)->add_months(-6);
+$short = $t->truncate(to => 'year');
+cmp_ok ($short, '==', $exp, 'Truncate to year');
+
+is ($t->epoch, $epoch, 'Time unchanged');
+
+for my $addmon (0..12) {
+    my $quarter = $short->add_months ($addmon);
+    $exp   = $quarter->add_months (0 - ($addmon % 3));
+    $quarter = $quarter->truncate(to => 'quarter');
+    cmp_ok ($quarter, '==', $exp, "Truncate to quarter (month $addmon)");
+
+}
diff --git a/gnu/usr.bin/perl/cpan/Time-Piece/t/09locales.t b/gnu/usr.bin/perl/cpan/Time-Piece/t/09locales.t
new file mode 100644 (file)
index 0000000..b1d0316
--- /dev/null
@@ -0,0 +1,111 @@
+use Test::More;
+use Time::Piece;
+
+# Skip if doing a regular install
+# These are mostly for reverse parsing tests, not required for installation
+plan skip_all => "Reverse parsing not required for installation"
+  unless ( $ENV{AUTOMATED_TESTING} );
+
+my $t = gmtime(1373371631);    # 2013-07-09T12:07:11
+
+#locale should be undef
+is( $t->_locale, undef );
+&Time::Piece::_default_locale();
+
+ok( $t->_locale );
+
+#use localized names
+cmp_ok( $t->monname,   'eq', &Time::Piece::_locale()->{mon}[ $t->_mon ] );
+cmp_ok( $t->month,     'eq', &Time::Piece::_locale()->{mon}[ $t->_mon ] );
+cmp_ok( $t->fullmonth, 'eq', &Time::Piece::_locale()->{month}[ $t->_mon ] );
+
+#use localized names
+cmp_ok( $t->wdayname, 'eq', &Time::Piece::_locale()->{wday}[ $t->_wday ] );
+cmp_ok( $t->day,      'eq', &Time::Piece::_locale()->{wday}[ $t->_wday ] );
+cmp_ok( $t->fullday,  'eq', &Time::Piece::_locale()->{weekday}[ $t->_wday ] );
+
+my @frdays = qw( Dimanche Lundi Merdi Mercredi Jeudi Vendredi Samedi );
+$t->day_list(@frdays);
+cmp_ok( $t->day,     'eq', &Time::Piece::_locale()->{wday}[ $t->_wday ] );
+cmp_ok( $t->fullday, 'eq', &Time::Piece::_locale()->{weekday}[ $t->_wday ] );
+
+
+#load local locale
+Time::Piece->use_locale();
+
+#test reverse parsing
+sub check_parsed
+{
+    my ( $t, $parsed, $t_str, $strp_format ) = @_;
+
+    cmp_ok( $parsed->epoch, '==', $t->epoch,
+        "Epochs match for $t_str with $strp_format" );
+    cmp_ok(
+        $parsed->strftime($strp_format),
+        'eq',
+        $t->strftime($strp_format),
+        "Outputs formatted with $strp_format match"
+    );
+    cmp_ok( $parsed->strftime(), 'eq', $t->strftime(),
+        'Outputs formatted as default match' );
+}
+
+my @dates = (
+    '%Y-%m-%d %H:%M:%S',
+    '%Y-%m-%d %T',
+    '%A, %e %B %Y at %H:%M:%S',
+    '%a, %e %b %Y at %r',
+    '%s',
+    '%c',
+    '%F %T',
+
+#TODO
+#    '%u %U %Y %T',                    #%U,W,V currently skipped inside strptime
+#    '%w %W %y %T',
+#    '%A, %e %B %Y at %I:%M:%S %p',    #%I and %p can be locale dependant
+    '%x %X',    #hard coded to American localization
+);
+
+for my $time (
+    time(),        # Now, whenever that might be
+    1451606400,    # 2016-01-01 00:00
+    1451649600,    # 2016-01-01 12:00
+  )
+{
+    my $t = gmtime($time);
+    for my $strp_format (@dates) {
+
+        my $t_str = $t->strftime($strp_format);
+        my $parsed;
+      SKIP: {
+            eval { $parsed = $t->strptime( $t_str, $strp_format ); };
+            skip "gmtime strptime parse failed", 3 if $@;
+            check_parsed( $t, $parsed, $t_str, $strp_format );
+        }
+
+    }
+
+}
+
+for my $time (
+    time(),        # Now, whenever that might be
+    1451606400,    # 2016-01-01 00:00
+    1451649600,    # 2016-01-01 12:00
+  )
+{
+    my $t = localtime($time);
+    for my $strp_format (@dates) {
+
+        my $t_str = $t->strftime($strp_format);
+        my $parsed;
+      SKIP: {
+            eval { $parsed = $t->strptime( $t_str, $strp_format ); };
+            skip "localtime strptime parse failed", 3 if $@;
+            check_parsed( $t, $parsed, $t_str, $strp_format );
+        }
+
+    }
+
+}
+
+done_testing(154);
diff --git a/gnu/usr.bin/perl/cpan/Time-Piece/t/10overload.t b/gnu/usr.bin/perl/cpan/Time-Piece/t/10overload.t
new file mode 100644 (file)
index 0000000..a85b509
--- /dev/null
@@ -0,0 +1,25 @@
+use strict;
+use warnings;
+use Time::Piece;
+use Test::More;
+
+eval 'use Math::BigInt';
+plan skip_all => "Math::BigInt required for testing overloaded operands" if $@;
+
+my $t = Time::Piece->gmtime(315532800); # 00:00:00 1/1/1980
+isa_ok $t, 'Time::Piece';
+is $t->cdate, 'Tue Jan  1 00:00:00 1980', 'got expected gmtime with int secs';
+
+$t = Time::Piece->gmtime(Math::BigInt->new('315532800')); # 00:00:00 1/1/1980
+is $t->cdate, 'Tue Jan  1 00:00:00 1980', 'got same time with overloaded secs';
+
+
+my $big_hour = Math::BigInt->new('3600');
+$t = $t + $big_hour;
+is $t->cdate, 'Tue Jan  1 01:00:00 1980', 'add overloaded value';
+$t = $t - $big_hour;
+is $t->cdate, 'Tue Jan  1 00:00:00 1980', 'sub overloaded value';
+
+done_testing;
diff --git a/gnu/usr.bin/perl/cpan/Time-Piece/t/99legacy.t b/gnu/usr.bin/perl/cpan/Time-Piece/t/99legacy.t
new file mode 100644 (file)
index 0000000..175e335
--- /dev/null
@@ -0,0 +1,26 @@
+use strict;
+use warnings;
+no warnings 'deprecated';
+
+use Test::More tests => 5;
+
+BEGIN { use_ok('Time::Piece'); }
+
+# The parse() legacy method is deprecated and will not be maintained.
+# The tests in this script illustrate both its functionality and some of
+# its bugs. This script should be removed from the test suite once
+# parse() has been deleted from Time::Piece.
+
+SKIP: {
+    skip "Linux only", 4 if $^O !~ /linux/i;
+
+    my $timestring = '2000-01-01T06:00:00';
+    my $t1         = Time::Piece->parse($timestring);
+    isnt( $t1->datetime, $timestring, 'LEGACY: parse string months fail' );
+    my $t2 = $t1->parse( 0, 0, 6, 1, 0, 100 );
+    is( $t2->datetime, $timestring, 'LEGACY: parse array' );
+    eval { $t2 = Time::Piece->parse(); };
+    is( $t2->datetime, $timestring, 'LEGACY: parse with no args dies' );
+    eval { $t2 = Time::Piece::parse( 0, 0, 12, 1, 0, 100 ); };
+    is( $t2->datetime, $timestring, 'LEGACY: parse as non-method dies' );
+}
index ea6c1de..429e65d 100644 (file)
@@ -81,7 +81,7 @@ LONGPATH(CHAR_T *path)
        *start = sep;
        if (fhand != INVALID_HANDLE_VALUE) {
            STRLEN len = FN_STRLEN(fdata.cFileName);
-           if ((STRLEN)(tmpbuf + sizeof(tmpbuf) - tmpstart) > len) {
+           if (len < (STRLEN)(tmpbuf - tmpstart + sizeof(tmpbuf))) {
                FN_STRCPY(tmpstart, fdata.cFileName);
                tmpstart += len;
                FindClose(fhand);
index bd34fc8..8ee412b 100644 (file)
@@ -4,7 +4,7 @@ use strict;
 use warnings;
 
 # ABSTRACT: Wrapper class for calling subs at end of scope
-our $VERSION = '2.29'; # VERSION
+our $VERSION = '2.32'; # VERSION
 
 # This code schedules the cleanup of subroutines at the end of
 # scope.  It's directly inspired by chocolateboy's excellent
index 3ee3ae5..9b0a906 100644 (file)
@@ -6,7 +6,7 @@ use warnings;
 use autodie::Scope::Guard;
 
 # ABSTRACT: Hook stack for managing scopes via %^H
-our $VERSION = '2.29'; # VERSION
+our $VERSION = '2.32'; # VERSION
 
 my $H_KEY_STEM = __PACKAGE__ . '/guard';
 my $COUNTER = 0;
index 2a308a8..1a04a19 100644 (file)
@@ -14,7 +14,7 @@ our @EXPORT_OK = qw(
   on_end_of_compile_scope
 );
 
-our $VERSION = '2.29'; # VERSION: Generated by DZP::OurPkg:Version
+our $VERSION = '2.32'; # VERSION: Generated by DZP::OurPkg:Version
 
 # ABSTRACT: Internal Utility subroutines for autodie and Fatal
 
index 22d4b36..eb2083f 100644 (file)
@@ -5,6 +5,10 @@ use autodie;
 
 use constant SYSINIT => 1;
 
+if ($^O eq 'MSWin32') {
+    plan skip_all => "Can't send signals to own process on recent versions of Windows.";
+}
+
 if (not CORE::kill(0,$$)) {
     plan skip_all => "Can't send signals to own process on this system.";
 }
@@ -13,14 +17,22 @@ if (CORE::kill(0, SYSINIT)) {
     plan skip_all => "Can unexpectedly signal process 1. Won't run as root.";
 }
 
-plan tests => 4;
+$SIG{HUP} = sub { }; # Ignore SIGHUP
+
+plan tests => 6;
 
-eval { kill(0, $$); };
+eval { my $rv = kill(0, $$); };
 is($@, '', "Signalling self is fine");
 
-eval { kill(0, SYSINIT ) };
-isa_ok($@, 'autodie::exception', "Signalling init is not allowed.");
+eval { kill('HUP', $$); };
+is($@, '', "Kill with non-zero signal, in void context is ok");
+
+eval { kill(0, SYSINIT) };
+isa_ok($@, 'autodie::exception', "kill 0 should die if called in void context");
+
+eval { my $rv = kill(0, SYSINIT) };
+is($@, '', "kill 0 should never die if called in scalar context");
 
-eval { kill(0, $$, SYSINIT) };
+eval { my $rv = kill('HUP', $$, SYSINIT) };
 isa_ok($@, 'autodie::exception', 'kill exception on single failure.');
 is($@->return, 1, "kill fails correctly on a 'true' failure.");
diff --git a/gnu/usr.bin/perl/cpan/autodie/t/no-default.t b/gnu/usr.bin/perl/cpan/autodie/t/no-default.t
new file mode 100644 (file)
index 0000000..44d2acf
--- /dev/null
@@ -0,0 +1,23 @@
+#!/usr/bin/perl
+
+package foo;
+use warnings;
+use strict;
+use Test::More tests => 2;
+use autodie;
+
+
+use_system();
+ok("system() works with a lexical 'no autodie' block (github issue #69");
+break_system();
+
+sub break_system {
+    no autodie;
+    open(my $fh, "<", 'NONEXISTENT');
+    ok("survived failing open");
+}
+
+sub use_system {
+    system($^X, '-e' , 1);
+}
+1;
index 8b76b1c..ca05568 100644 (file)
@@ -1,7 +1,7 @@
 # Configuration for Perl tests.  -*- perl -*-
 
 # Default minimum version requirement.
-$MINIMUM_VERSION = '5.006';
+$MINIMUM_VERSION = '5.008';
 
 # File must end with this line.
 1;
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/overstrike/tag-width b/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/overstrike/tag-width
new file mode 100644 (file)
index 0000000..d12b16b
--- /dev/null
@@ -0,0 +1,35 @@
+[name]
+Tag width with formatting
+
+[input]
+=head1 TAG WIDTH
+
+=over 10
+
+=item 12345678
+
+A
+
+=item B<12345678>
+
+B
+
+=item 1Z<>
+
+C
+
+=item B<1>
+
+D
+
+=back
+
+[output]
+T\bTA\bAG\b\b W\bWI\bID\bDT\bTH\bH
+    12345678  A
+
+    1\b12\b23\b34\b45\b56\b67\b78\b8  B
+
+    1         C
+
+    1\b1         D
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/overstrike/wrapping b/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/overstrike/wrapping
new file mode 100644 (file)
index 0000000..93405f7
--- /dev/null
@@ -0,0 +1,11 @@
+[name]
+Wrapping
+
+[input]
+=head1 WRAPPING
+
+B<I<Do>> I<B<not>> B<I<include>> B<I<formatting codes when>> B<I<wrapping>>.
+
+[output]
+W\bWR\bRA\bAP\bPP\bPI\bIN\bNG\bG
+    D\bDo\bo _\bn_\bo_\bt i\bin\bnc\bcl\blu\bud\bde\be f\bfo\bor\brm\bma\bat\btt\bti\bin\bng\b\b c\bco\bod\bde\bes\b\b w\bwh\bhe\ben\bn w\bwr\bra\bap\bpp\bpi\bin\bng\bg.
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/termcap/term-unknown b/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/termcap/term-unknown
new file mode 100644 (file)
index 0000000..2f06077
--- /dev/null
@@ -0,0 +1,13 @@
+[name]
+Rendering with unknown terminal type
+
+[input]
+=head1 UNKNOWN
+
+An unknown I<terminal type> B<should> C<suppress> all termcap-based
+formatting and still wrap successfully.
+
+[output]
+UNKNOWN
+    An unknown terminal type should "suppress" all termcap-based formatting
+    and still wrap successfully.
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/alt b/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/alt
new file mode 100644 (file)
index 0000000..9f4e9b7
--- /dev/null
@@ -0,0 +1,38 @@
+[name]
+Alternate output
+
+[options]
+alt 1
+
+[input]
+=head1 SAMPLE
+
+=over 4
+
+=item F
+
+Paragraph.
+
+=item Bar
+
+=item B
+
+Paragraph.
+
+=item Longer
+
+Paragraph.
+
+=back
+
+[output]
+
+==== SAMPLE ====
+
+:   F   Paragraph.
+
+:   Bar
+:   B   Paragraph.
+
+:   Longer
+        Paragraph.
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/c-with-spaces b/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/c-with-spaces
new file mode 100644 (file)
index 0000000..466e95e
--- /dev/null
@@ -0,0 +1,11 @@
+[name]
+C<> with spaces
+
+[input]
+=head1 CE<lt>E<gt> WITH SPACES
+
+What does C<<  this.  >> end up looking like?
+
+[output]
+C<> WITH SPACES
+    What does "this." end up looking like?
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/code b/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/code
new file mode 100644 (file)
index 0000000..89c06bb
--- /dev/null
@@ -0,0 +1,33 @@
+[name]
+code option
+
+[options]
+code 1
+
+[input]
+This is some random text.
+This is more random text.
+
+This is some random text.
+This is more random text.
+
+=head1 SAMPLE
+
+This is POD.
+
+=cut
+
+This is more random text.
+
+[output]
+This is some random text.
+This is more random text.
+
+This is some random text.
+This is more random text.
+
+SAMPLE
+    This is POD.
+
+
+This is more random text.
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/empty b/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/empty
new file mode 100644 (file)
index 0000000..307e36d
--- /dev/null
@@ -0,0 +1,7 @@
+[name]
+Empty document
+
+[input]
+=pod
+
+[output]
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/error-die b/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/error-die
new file mode 100644 (file)
index 0000000..ab4a493
--- /dev/null
@@ -0,0 +1,25 @@
+[name]
+Errors throw exceptions
+
+[options]
+errors die
+
+[input]
+=over 4
+
+=item Foo
+
+Bar.
+
+=head1 NEXT
+
+[output]
+    Foo Bar.
+
+NEXT
+
+[errors]
+Pod input around line 7: You forgot a '=back' before '=head1'
+
+[exception]
+POD document had syntax errors
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/error-none b/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/error-none
new file mode 100644 (file)
index 0000000..b0fa47b
--- /dev/null
@@ -0,0 +1,19 @@
+[name]
+Suppress errors
+
+[options]
+errors none
+
+[input]
+=over 4
+
+=item Foo
+
+Bar.
+
+=head1 NEXT
+
+[output]
+    Foo Bar.
+
+NEXT
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/error-normal b/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/error-normal
new file mode 100644 (file)
index 0000000..b991116
--- /dev/null
@@ -0,0 +1,22 @@
+[name]
+Normal error handling
+
+[input]
+=over 4
+
+=item Foo
+
+Bar.
+
+=head1 NEXT
+
+[output]
+    Foo Bar.
+
+NEXT
+POD ERRORS
+    Hey! The above document had some coding errors, which are explained
+    below:
+
+    Around line 7:
+        You forgot a '=back' before '=head1'
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/error-pod b/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/error-pod
new file mode 100644 (file)
index 0000000..807de01
--- /dev/null
@@ -0,0 +1,25 @@
+[name]
+Errors to POD source
+
+[options]
+errors pod
+
+[input]
+=over 4
+
+=item Foo
+
+Bar.
+
+=head1 NEXT
+
+[output]
+    Foo Bar.
+
+NEXT
+POD ERRORS
+    Hey! The above document had some coding errors, which are explained
+    below:
+
+    Around line 7:
+        You forgot a '=back' before '=head1'
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/error-stderr b/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/error-stderr
new file mode 100644 (file)
index 0000000..e1ec95b
--- /dev/null
@@ -0,0 +1,22 @@
+[name]
+Errors to standard error
+
+[options]
+errors stderr
+
+[input]
+=over 4
+
+=item Foo
+
+Bar.
+
+=head1 NEXT
+
+[output]
+    Foo Bar.
+
+NEXT
+
+[errors]
+Pod input around line 7: You forgot a '=back' before '=head1'
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/error-stderr-opt b/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/error-stderr-opt
new file mode 100644 (file)
index 0000000..7547f84
--- /dev/null
@@ -0,0 +1,22 @@
+[name]
+Errors to standard error with stderr option
+
+[options]
+stderr 1
+
+[input]
+=over 4
+
+=item Foo
+
+Bar.
+
+=head1 NEXT
+
+[output]
+    Foo Bar.
+
+NEXT
+
+[errors]
+Pod input around line 7: You forgot a '=back' before '=head1'
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/for b/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/for
new file mode 100644 (file)
index 0000000..56fb767
--- /dev/null
@@ -0,0 +1,28 @@
+[name]
+Handling of =for
+
+[input]
+=head1 Test of =for
+
+=for comment
+This won't be seen.
+
+Yes.
+
+=for text
+This should be seen.
+
+=for TEXT As should this.
+
+=for man
+But this shouldn't.
+
+Some more text.
+
+[output]
+Test of =for
+    Yes.
+
+This should be seen.
+As should this.
+    Some more text.
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/iso-8859-1 b/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/iso-8859-1
new file mode 100644 (file)
index 0000000..739fa92
--- /dev/null
@@ -0,0 +1,25 @@
+[name]
+ISO-8859-1 encoding
+
+[input]
+=encoding iso-8859-1
+
+=head1 ACCENTS
+
+Beyoncé!  Beyoncé!  Beyoncé!!
+
+    Beyoncé!  Beyoncé!
+      Beyoncé!  Beyoncé!
+        Beyoncé!  Beyoncé!
+
+Older versions didn't convert Beyoncé in verbatim.
+
+[output]
+ACCENTS
+    Beyoncé! Beyoncé! Beyoncé!!
+
+        Beyoncé!  Beyoncé!
+          Beyoncé!  Beyoncé!
+            Beyoncé!  Beyoncé!
+
+    Older versions didn't convert Beyoncé in verbatim.
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/late-encoding b/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/late-encoding
new file mode 100644 (file)
index 0000000..99c0de9
--- /dev/null
@@ -0,0 +1,28 @@
+[name]
+Late use of =encoding
+
+[input]
+=pod
+
+=head1 NAME
+
+This is the first ascii text
+
+=encoding utf8
+
+=over 4
+
+=item ⇒This is the first non-ascii text⇐
+
+This is the second ascii text
+
+=back
+
+=cut
+
+[output]
+NAME
+    This is the first ascii text
+
+    ⇒This is the first non-ascii text⇐
+        This is the second ascii text
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/link-rt b/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/link-rt
new file mode 100644 (file)
index 0000000..8669874
--- /dev/null
@@ -0,0 +1,11 @@
+[name]
+Link to an RT ticket
+
+[input]
+=head1 RT LINK
+
+L<[perl #12345]|https://rt.cpan.org/12345>
+
+[output]
+RT LINK
+    [perl #12345] <https://rt.cpan.org/12345>
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/link-url b/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/link-url
new file mode 100644 (file)
index 0000000..7ef33fd
--- /dev/null
@@ -0,0 +1,11 @@
+[name]
+Link to a URL
+
+[input]
+=head1 LINK TO URL
+
+This is a L<link|http://www.example.com/> to a URL.
+
+[output]
+LINK TO URL
+    This is a link <http://www.example.com/> to a URL.
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/margin b/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/margin
new file mode 100644 (file)
index 0000000..786f06b
--- /dev/null
@@ -0,0 +1,34 @@
+[name]
+margin option
+
+[options]
+margin 4
+
+[input]
+=head1 SAMPLE
+
+This is some body text that is long enough to be a paragraph that wraps,
+thereby testing margins with wrapped paragraphs.
+
+ This is some verbatim text.
+
+=over 6
+
+=item Test
+
+This is a test of an indented paragraph.
+
+This is another indented paragraph.
+
+=back
+
+[output]
+    SAMPLE
+        This is some body text that is long enough to be a paragraph that
+        wraps, thereby testing margins with wrapped paragraphs.
+
+         This is some verbatim text.
+
+        Test  This is a test of an indented paragraph.
+
+              This is another indented paragraph.
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/nonbreaking-space b/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/nonbreaking-space
new file mode 100644 (file)
index 0000000..d57ed73
--- /dev/null
@@ -0,0 +1,11 @@
+[name]
+Multiple non-breaking spaces
+
+[input]
+=head1 Test of SE<lt>E<gt>
+
+This is some S<  > whitespace.
+
+[output]
+Test of S<>
+    This is some    whitespace.
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/nourls b/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/nourls
new file mode 100644 (file)
index 0000000..a34202a
--- /dev/null
@@ -0,0 +1,14 @@
+[name]
+nourls option
+
+[options]
+nourls 1
+
+[input]
+=head1 URL suppression
+
+L<anchor|http://www.example.com/>
+
+[output]
+URL suppression
+    anchor
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/periods b/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/periods
new file mode 100644 (file)
index 0000000..44fe3a2
--- /dev/null
@@ -0,0 +1,11 @@
+[name]
+Quoting of periods
+
+[input]
+=head1 PERIODS
+
+This C<.> should be quoted.
+
+[output]
+PERIODS
+    This "." should be quoted.
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/quotes-opt b/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/quotes-opt
new file mode 100644 (file)
index 0000000..4d2e6b6
--- /dev/null
@@ -0,0 +1,14 @@
+[name]
+quotes option
+
+[options]
+quotes <<<>>>
+
+[input]
+=head1 FOO C<BAR> BAZ
+
+Foo C<bar> baz.
+
+[output]
+FOO <<<BAR>>> BAZ
+    Foo <<<bar>>> baz.
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/s-whitespace b/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/s-whitespace
new file mode 100644 (file)
index 0000000..ff4febc
--- /dev/null
@@ -0,0 +1,11 @@
+[name]
+S<> whitespace
+
+[input]
+=head1 Test of SE<lt>E<gt>
+
+This is S<some whitespace>.
+
+[output]
+Test of S<>
+    This is some whitespace.
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/sentence-spacing b/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/sentence-spacing
new file mode 100644 (file)
index 0000000..bce8c81
--- /dev/null
@@ -0,0 +1,18 @@
+[name]
+Spacing with sentence option
+
+[options]
+sentence 1
+
+[input]
+=head1 EXAMPLE
+
+Whitespace around C<<  this.  >> must be ignored per perlpodspec.  >>
+needs to eat all of the space in front of it.
+
+=cut
+
+[output]
+EXAMPLE
+    Whitespace around "this." must be ignored per perlpodspec.  >> needs to
+    eat all of the space in front of it.
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/utf8 b/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/utf8
new file mode 100644 (file)
index 0000000..8231a2a
--- /dev/null
@@ -0,0 +1,38 @@
+[name]
+UTF-8 text
+
+[input]
+=encoding utf-8
+
+=head1 I can eat glass
+
+=over 4
+
+=item Esperanto
+
+Mi povas manĝi vitron, ĝi ne damaĝas min.
+
+=item Braille
+
+⠊⠀⠉⠁⠝⠀⠑⠁⠞⠀⠛⠇⠁⠎⠎⠀⠁⠝⠙⠀⠊⠞⠀⠙⠕⠑⠎⠝⠞⠀⠓⠥⠗⠞⠀⠍⠑
+
+=item Hindi
+
+मैं काँच खा सकता हूँ और मुझे उससे कोई चोट नहीं पहुंचती.
+
+=back
+
+See L<http://www.columbia.edu/kermit/utf8.html>
+
+[output]
+I can eat glass
+    Esperanto
+        Mi povas manĝi vitron, ĝi ne damaĝas min.
+
+    Braille
+        ⠊⠀⠉⠁⠝⠀⠑⠁⠞⠀⠛⠇⠁⠎⠎⠀⠁⠝⠙⠀⠊⠞⠀⠙⠕⠑⠎⠝⠞⠀⠓⠥⠗⠞⠀⠍⠑
+
+    Hindi
+        मैं काँच खा सकता हूँ और मुझे उससे कोई चोट नहीं पहुंचती.
+
+    See <http://www.columbia.edu/kermit/utf8.html>
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/utf8-iso b/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/utf8-iso
new file mode 100644 (file)
index 0000000..ba375e4
--- /dev/null
@@ -0,0 +1,28 @@
+[name]
+ISO-8859-1 encoding with forced UTF-8 output
+
+[options]
+utf8 1
+
+[input]
+=encoding iso-8859-1
+
+=head1 ACCENTS
+
+Beyoncé!  Beyoncé!  Beyoncé!!
+
+    Beyoncé!  Beyoncé!
+      Beyoncé!  Beyoncé!
+        Beyoncé!  Beyoncé!
+
+Older versions didn't convert Beyoncé in verbatim.
+
+[output]
+ACCENTS
+    Beyoncé! Beyoncé! Beyoncé!!
+
+        Beyoncé!  Beyoncé!
+          Beyoncé!  Beyoncé!
+            Beyoncé!  Beyoncé!
+
+    Older versions didn't convert Beyoncé in verbatim.
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/verbatim b/gnu/usr.bin/perl/cpan/podlators/t/data/snippets/text/verbatim
new file mode 100644 (file)
index 0000000..689a60f
--- /dev/null
@@ -0,0 +1,18 @@
+[name]
+Verbatim text
+
+[input]
+=pod
+
+text
+
+  line1
+  
+  line3
+
+[output]
+    text
+
+      line1
+  
+      line3
index 8094815..32346dd 100644 (file)
@@ -6,3 +6,4 @@
 # provide this file anyway to ensure the test suite will still run.
 
 xterm:co=#80:do=^J:md=\E[1m:us=\E[4m:me=\E[m
+unknown:co=#80:do=^J
index 100adf1..5b34cab 100644 (file)
@@ -9,7 +9,7 @@
 # The canonical version of this file is maintained in the rra-c-util package,
 # which can be found at <https://www.eyrie.org/~eagle/software/rra-c-util/>.
 #
-# Copyright 2018 Russ Allbery <eagle@eyrie.org>
+# Copyright 2018-2019 Russ Allbery <eagle@eyrie.org>
 #
 # Permission is hereby granted, free of charge, to any person obtaining a
 # copy of this software and associated documentation files (the "Software"),
 #
 # SPDX-License-Identifier: MIT
 
-use 5.006;
+use 5.008;
 use strict;
 use warnings;
 
 use lib 't/lib';
 
+use Test::RRA qw(skip_unless_automated);
+
 use File::Find qw(find);
 use Test::More;
-use Test::RRA qw(skip_unless_automated);
 
 # File name (the file without any directory component) and path patterns to
 # skip for this check.
 ## no critic (RegularExpressions::ProhibitFixedStringMatches)
 my @IGNORE = (
-    qr{ \A Build ( [.] .* )? \z }ixms,      # Generated file from Build.PL
+    qr{ \A Build ( [.] (?!PL) .* )? \z }ixms,    # Generated file from Build.PL
     qr{ \A LICENSE \z }xms,                 # Generated file, no license itself
     qr{ \A (Changes|NEWS|THANKS) \z }xms,   # Package license should be fine
     qr{ \A TODO \z }xms,                    # Package license should be fine
@@ -60,11 +61,13 @@ my @IGNORE_PATHS = (
     qr{ \A [.] /_build/ }xms,                 # Module::Build metadata
     qr{ \A [.] /blib/ }xms,                   # Perl build system artifacts
     qr{ \A [.] /cover_db/ }xms,               # Artifacts from coverage testing
+    qr{ \A [.] /debian/ }xms,                 # Found in debian/* branches
     qr{ \A [.] /docs/metadata/ }xms,          # Package license should be fine
     qr{ \A [.] /README ( [.] .* )? \z }xms,   # Package license should be fine
     qr{ \A [.] /share/ }xms,                  # Package license should be fine
     qr{ \A [.] /t/data .* /metadata/ }xms,    # Test metadata
     qr{ \A [.] /t/data .* /output/ }xms,      # Test output
+    qr{ \A [.] /t/data .* [.] json \z }xms,   # Test metadata
 );
 ## use critic
 
@@ -81,9 +84,7 @@ sub check_file {
     my $filename = $_;
     my $path     = $File::Find::name;
 
-    # Ignore files in the whitelist, binary files, and files under 1KB.  The
-    # latter can be rolled up into the overall project license and the license
-    # notice may be a substantial portion of the file size.
+    # Ignore files in the whitelist and binary files.
     for my $pattern (@IGNORE) {
         return if $filename =~ $pattern;
     }
@@ -95,12 +96,14 @@ sub check_file {
     }
     return if -d $filename;
     return if !-T $filename;
-    return if -s $filename < 1024;
 
     # Scan the file.
-    my ($saw_spdx, $skip_spdx);
+    my ($saw_legacy_notice, $saw_spdx, $skip_spdx);
     open(my $file, '<', $filename) or BAIL_OUT("Cannot open $path");
     while (defined(my $line = <$file>)) {
+        if ($line =~ m{ \b See \s+ LICENSE \s+ for \s+ licensing }xms) {
+            $saw_legacy_notice = 1;
+        }
         if ($line =~ m{ \b SPDX-License-Identifier: \s+ \S+ }xms) {
             $saw_spdx = 1;
             last;
@@ -111,7 +114,16 @@ sub check_file {
         }
     }
     close($file) or BAIL_OUT("Cannot close $path");
-    ok($saw_spdx || $skip_spdx, $path);
+
+    # If there is a legacy license notice, report a failure regardless of file
+    # size.  Otherwise, skip files under 1KB.  They can be rolled up into the
+    # overall project license and the license notice may be a substantial
+    # portion of the file size.
+    if ($saw_legacy_notice) {
+        ok(!$saw_legacy_notice, "$path has legacy license notice");
+    } else {
+        ok($saw_spdx || $skip_spdx || -s $filename < 1024, $path);
+    }
     return;
 }
 
index 0c1dac3..2b2106f 100644 (file)
@@ -2,12 +2,14 @@
 #
 # Test Pod::Man ISO-8859-1 handling
 #
-# Copyright 2016 Russ Allbery <rra@cpan.org>
+# Copyright 2016, 2019 Russ Allbery <rra@cpan.org>
 #
 # This program is free software; you may redistribute it and/or modify it
 # under the same terms as Perl itself.
+#
+# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl
 
-use 5.006;
+use 5.008;
 use strict;
 use warnings;
 
@@ -22,4 +24,4 @@ BEGIN {
 }
 
 # Test the snippet with the proper encoding.
-test_snippet('Pod::Man', 'man/iso-8859-1', { encoding => 'iso-8859-1' });
+test_snippet('Pod::Man', 'man/iso-8859-1');
index 1598871..7e0ad38 100644 (file)
@@ -2,7 +2,7 @@
 #
 # Test Pod::Man behavior with various snippets.
 #
-# Copyright 2002, 2004, 2006, 2008-2009, 2012-2013, 2015-2016, 2018
+# Copyright 2002, 2004, 2006, 2008-2009, 2012-2013, 2015-2016, 2018-2019
 #     Russ Allbery <rra@cpan.org>
 #
 # This program is free software; you may redistribute it and/or modify it
@@ -10,7 +10,7 @@
 #
 # SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl
 
-use 5.006;
+use 5.008;
 use strict;
 use warnings;
 
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/style/obsolete-strings.t b/gnu/usr.bin/perl/cpan/podlators/t/style/obsolete-strings.t
new file mode 100644 (file)
index 0000000..fca5a80
--- /dev/null
@@ -0,0 +1,96 @@
+#!/usr/bin/perl
+#
+# Check for obsolete strings in source files.
+#
+# Examine all source files in a distribution for obsolete strings and report
+# on files that fail this check.  This catches various transitions I want to
+# do globally in all my packages, like changing my personal URLs to https.
+#
+# The canonical version of this file is maintained in the rra-c-util package,
+# which can be found at <https://www.eyrie.org/~eagle/software/rra-c-util/>.
+#
+# Copyright 2016, 2018-2019 Russ Allbery <eagle@eyrie.org>
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+# DEALINGS IN THE SOFTWARE.
+#
+# SPDX-License-Identifier: MIT
+
+use 5.008;
+use strict;
+use warnings;
+
+use lib 't/lib';
+
+use Test::RRA qw(skip_unless_automated);
+
+use File::Find qw(find);
+use Test::More;
+
+# Bad patterns to search for.
+my @BAD_REGEXES = (qr{ http:// \S+ [.]eyrie[.]org }xms);
+my @BAD_STRINGS = qw(rra@stanford.edu RRA_MAINTAINER_TESTS);
+
+# File or directory names to always skip.
+my %SKIP = map { $_ => 1 } qw(
+  .git Changes _build blib cover_db obsolete-strings.t
+);
+
+# Only run this test during automated testing, since failure doesn't indicate
+# any user-noticable flaw in the package itself.
+skip_unless_automated('Obsolete strings tests');
+
+# Scan files for bad URL patterns.  This is meant to be run as the wanted
+# function from File::Find.
+sub check_file {
+    my $filename = $_;
+
+    # Ignore and prune any skipped files.  Ignore directories and binaries.
+    if ($SKIP{$filename}) {
+        $File::Find::prune = 1;
+        return;
+    }
+    return if -d $filename;
+    return if !-T $filename;
+
+    # Scan the file.
+    open(my $fh, '<', $filename) or BAIL_OUT("Cannot open $File::Find::name");
+    while (defined(my $line = <$fh>)) {
+        for my $regex (@BAD_REGEXES) {
+            if ($line =~ $regex) {
+                ok(0, "$File::Find::name contains $regex");
+                close($fh) or BAIL_OUT("Cannot close $File::Find::name");
+                return;
+            }
+        }
+        for my $string (@BAD_STRINGS) {
+            if (index($line, $string) != -1) {
+                ok(0, "$File::Find::name contains $string");
+                close($fh) or BAIL_OUT("Cannot close $File::Find::name");
+                return;
+            }
+        }
+    }
+    close($fh) or BAIL_OUT("Cannot close $File::Find::name");
+    ok(1, $File::Find::name);
+    return;
+}
+
+# Use File::Find to scan all files from the top of the directory.
+find(\&check_file, q{.});
+done_testing();
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/text/invalid.t b/gnu/usr.bin/perl/cpan/podlators/t/text/invalid.t
new file mode 100644 (file)
index 0000000..27a4e82
--- /dev/null
@@ -0,0 +1,61 @@
+#!/usr/bin/perl -w
+#
+# Test Pod::Text with a document that produces only errors.
+#
+# Documents with only errors were shown as contentless but had a POD ERRORS
+# section, which previously led to internal errors because state variables
+# weren't properly initialized.  See CPAN RT #88724.
+#
+# Copyright 2013, 2018, 2020 Russ Allbery <rra@cpan.org>
+#
+# This program is free software; you may redistribute it and/or modify it
+# under the same terms as Perl itself.
+#
+# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl
+
+use 5.008;
+use strict;
+use warnings;
+
+use Test::More tests => 8;
+
+BEGIN {
+    use_ok('Pod::Text');
+}
+
+# Set up Pod::Text to output to a string.
+my $parser = Pod::Text->new;
+isa_ok($parser, 'Pod::Text');
+my $output;
+$parser->output_string(\$output);
+
+# Ensure any warnings cause a test failure.
+## no critic (ErrorHandling::RequireCarping)
+local $SIG{__WARN__} = sub { die $_[0] };
+
+# Parse a document provided as a string, ensure that it doesn't produce any
+# warnings or errors, and check that it either contains no content or a POD
+# ERRORS section.
+#
+# $document - Document to parse
+# $name     - Name of the test
+sub check_document {
+    my ($document, $name) = @_;
+    my $result = eval { $parser->parse_string_document($document) };
+    ok($result, "Parsed $name");
+    is($@, q{}, 'No exceptions');
+    if ($output eq q{}) {
+        # Older Pod::Simple doesn't always produce errors.
+        ok(1, 'Output is empty');
+    } else {
+        like($output, qr{POD [ ] ERRORS}xms, 'Output contains POD ERRORS');
+    }
+    return;
+}
+
+# Document whose only content is an invalid command.
+## no critic (ValuesAndExpressions::ProhibitEscapedCharacters)
+check_document("=\xa0", 'invalid command');
+
+# Document containing only a =cut.
+check_document('=cut', 'document with only =cut');
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/text/iso-8859-1.t b/gnu/usr.bin/perl/cpan/podlators/t/text/iso-8859-1.t
new file mode 100644 (file)
index 0000000..889d553
--- /dev/null
@@ -0,0 +1,27 @@
+#!/usr/bin/perl
+#
+# Test Pod::Text ISO-8859-1 handling
+#
+# Copyright 2016, 2019 Russ Allbery <rra@cpan.org>
+#
+# This program is free software; you may redistribute it and/or modify it
+# under the same terms as Perl itself.
+#
+# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl
+
+use 5.008;
+use strict;
+use warnings;
+
+use lib 't/lib';
+
+use Test::More tests => 3;
+use Test::Podlators qw(test_snippet);
+
+# Load the module.
+BEGIN {
+    use_ok('Pod::Text');
+}
+
+# Test the snippet with the proper encoding.
+test_snippet('Pod::Text', 'text/iso-8859-1', { encoding => 'iso-8859-1' });
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/text/snippets.t b/gnu/usr.bin/perl/cpan/podlators/t/text/snippets.t
new file mode 100644 (file)
index 0000000..7667de7
--- /dev/null
@@ -0,0 +1,38 @@
+#!/usr/bin/perl
+#
+# Test Pod::Text behavior with various snippets.
+#
+# Copyright 2002, 2004, 2006-2009, 2012, 2018-2020
+#     Russ Allbery <rra@cpan.org>
+#
+# This program is free software; you may redistribute it and/or modify it
+# under the same terms as Perl itself.
+#
+# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl
+
+use 5.008;
+use strict;
+use warnings;
+
+use lib 't/lib';
+
+use Test::More tests => 53;
+use Test::Podlators qw(test_snippet);
+
+# Load the module.
+BEGIN {
+    use_ok('Pod::Text');
+}
+
+# List of snippets run by this test.
+my @snippets = qw(
+  alt c-with-spaces code cpp empty error-die error-none error-normal error-pod
+  error-stderr error-stderr-opt for late-encoding link-rt link-url margin
+  nonbreaking-space nourls periods quotes-opt s-whitespace sentence-spacing
+  utf8 verbatim
+);
+
+# Run all the tests.
+for my $snippet (@snippets) {
+    test_snippet('Pod::Text', "text/$snippet");
+}
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/text/utf8-io.t b/gnu/usr.bin/perl/cpan/podlators/t/text/utf8-io.t
new file mode 100644 (file)
index 0000000..2e59c41
--- /dev/null
@@ -0,0 +1,48 @@
+#!/usr/bin/perl
+#
+# Test Pod::Text UTF-8 handling, with and without PerlIO.
+#
+# Copyright 2002, 2004, 2006-2010, 2012, 2014, 2018, 2020
+#     Russ Allbery <rra@cpan.org>
+#
+# This program is free software; you may redistribute it and/or modify it
+# under the same terms as Perl itself.
+#
+# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl
+
+use 5.008;
+use strict;
+use warnings;
+
+use lib 't/lib';
+
+use Test::More tests => 17;
+use Test::Podlators qw(test_snippet_with_io);
+
+BEGIN {
+    use_ok('Pod::Text');
+}
+
+# Force UTF-8 on all relevant file handles.  Hide this in a string eval so
+# that older versions of Perl don't croak and minimum-version tests still
+# pass.
+#
+## no critic (BuiltinFunctions::ProhibitStringyEval)
+## no critic (ValuesAndExpressions::RequireInterpolationOfMetachars)
+eval 'binmode(\*STDOUT, ":encoding(utf-8)")';
+my $builder = Test::More->builder;
+eval 'binmode($builder->output, ":encoding(utf-8)")';
+eval 'binmode($builder->failure_output, ":encoding(utf-8)")';
+## use critic
+
+# For each of the UTF-8 snippets, check them with and without PerlIO layers.
+for my $snippet (qw(late-encoding s-whitespace utf8)) {
+    test_snippet_with_io('Pod::Text', "text/$snippet");
+    test_snippet_with_io('Pod::Text', "text/$snippet", { perlio_utf8 => 1 });
+}
+
+# Load a snippet in ISO 8859-1 that forces the output to be in UTF-8.
+test_snippet_with_io('Pod::Text', 'text/utf8-iso',
+    { encoding => 'iso-8859-1' });
+test_snippet_with_io('Pod::Text', 'text/utf8-iso',
+    { encoding => 'iso-8859-1', perlio_utf8 => 1 });
index ce9add5..2c7a164 100644 (file)
@@ -1,5 +1,75 @@
 Revision history for Devel-PPPort
 
+ 3.57 - 2020-01-31
+
+ * Fix eval_sv for Perl versions prior to 5.6.0 (Pali)
+ * Fix t/ppphtest.t for Perl versions prior to 5.6.0 (Pali)
+ * Fix compilation of sv_setsv_flags when GCC extensions are not present (Pali)
+ * Fix SV_NOSTEAL on 5.7.2 (Karl Williamson)
+ * Fix multiple unit test issues (Craig A. Berry, Karl Williamson, Pali)
+ * Avoid generating warnings on early Perls (Karl Williamson)
+ * Backport memCHRs (Karl Williamson)
+ * Implement sv_setsv_flags() with SV_NOSTEAL and SV_GMAGIC flags for Perl versions < 5.7.3 (Pali)
+ * Implement UTF8f format and its UTF8fARG macro (Pali)
+
+ 3.56 - 2019-11-25
+
+ * mktests.PL: use FindBin for INC setup
+ * devel/regenerate: Adjust POD line length
+ * Fix compilation with Visual C++ bugs introduced in 3.55 (Tomasz Konojacki)
+ * Fix mess.t failures when on VC++ when $0 contains backslashes (Tomasz Konojacki)
+ * Fix failing builds on 5.20.[1-3] introduced in 3.55 (Karl Williamson)
+ * Change tests to accept and use Test::More-like functions (Karl Williamson)
+
+ 3.55 - 2019-11-07
+
+  * Fix p5-Text-Xslate on Perl 5.8.5 (Nicolas R)
+  * Fix EBCDIC build problem (Karl Williamson)
+  * Fix isGRAPH_L1() bug (Karl Williamson)
+  * utf8_to_uvchr_buf: Fix error checking on early EBCDICs and proper length (Karl Williamson)
+  * HACKERS: fix typos and clarification (Karl Williamson)
+  * Update bugtracker and repository URLs (Nicolas R)  (upstream/urls)
+  * Add warning about UTF-8 unreliable in early perls (Karl Williamson)
+  * Add withinCOUNT and inRANGE (Karl Williamson)
+  * Implement G_RETHROW for eval_sv (Pali)
+  * Backport some isFOO_LC macros (Karl Williamson)
+  * Backport isFOO_LC_utf8_safe() (Karl Williamson)
+  * Backport toFOO_uvchr() (Karl Williamson)
+  * Backport isFOO_uvchr() (Karl Williamson)
+  * Backport isFOO_utf8_safe() macros (Karl Williamson)
+  * Backport toLOWER_utf8_safe and kin (Karl Williamson)
+  * Backport UTF8_MAXBYTES_CASE (Karl Williamson)
+  * Backport UTF8_CHK_SKIP (Karl Williamson)
+  * Backport UTF8_SKIP (Karl Williamson)
+  * Backport UNI to/from NATIVE (Karl Williamson)
+
+ 3.54 - 2019-09-27
+
+  * Fix Unix-format path in Devel::PPPort's Makefile.PL
+  * Fix utf8_to_uvchr_buf for 5.7.0
+  * Add hint for utf8_to_uvchr()
+  * Fix hints for is_ascii_string
+  * Use numeric comparisons with $]
+  * Fix 'for loops' to work on early perls
+  * Can't use GCC brace groups before 5.4
+  * Add script to regenerate ppport.fnc
+  * Suppress useless warning
+  * Fix mktests.PL for Perl 5.8.0
+  * Implement sv_len_utf8_nomg() and sv_len_utf8()
+  * Fix eval_pv for Perl versions prior to 5.31.2
+  * Consolidate UTF-8 functions/macros into new file
+  * Implement sv_mortalcopy_flags()
+  * Implement newSVsv_flags()
+  * Enable Perl compile-time warnings at all place
+  * Improve Makefile.PL
+  * Add tests for IVdf, UVuf, IV_MAX and UV_MAX
+
+ 3.53 - 2019-09-27
+
+  * Rename PPPort_xs.PL to RealPPPort_xs.PL
+  * Fix compilation issues with version older than 5.010
+  * Fix compilation issues with version older than 5.010
+
  3.52 - 2019-05-14
 
    * fix utf8_to_uvchr_buf retval in 5.30
index 8cd57a9..0343794 100644 (file)
@@ -11,266 +11,305 @@ lying around in this distribution.
 
 =head1 DESCRIPTION
 
-=head2 How to build 366 versions of Perl
+=head2 How to backport something
+
+First, make sure that what you want to backport is documented.  If it's worth
+backporting, it surely is worth documenting.  Send a documentation patch to 
+L<perlbug@perl.org|mailto:perlbug@perl.org> if necessary.  Also,
+C<Devel::PPPort> cannot automatically generate proper information about the
+item without at least knowing its API prototype.  It can get this from
+F<embed.fnc> if the item is a function, but if it is a macro, there needs to be
+at least a S<C<=for apidoc>> line for C<Devel::PPPort> to be able to figure
+things out on its own.
+
+Next, figure out where to place your implementation.  Look at all the files in
+F<parts/inc/> for one that fits what you're planning.  If there isn't one,
+just start a new one and remember to include it from within F<PPPort_pm.PL>.
+If you do create a new file, it's usually the best approach to just copy an
+existing file and use it as a template.
 
-C<Devel::PPPort> supports Perl versions between 5.003 and bleadperl.
-To guarantee this support, I need some of these versions on my
-machine. I currently have 366 different Perl version/configuration
-combinations installed on my laptop.
-
-As many of the old Perl distributions need patching to compile
-cleanly on newer systems (and because building 366 Perls by hand
-just isn't fun), I wrote a tool to build all the different
-versions and configurations. You can find it in F<devel/buildperl.pl>.
-It can currently build the following Perl releases:
+Each file holds all relevant data for implementing a certain part
+of the API:
 
-    5.003
-    5.004 - 5.004_05
-    5.005 - 5.005_04
-    5.6.x
-    5.7.x
-    5.8.x
-    5.9.x
-    5.1x.x
+=over 2
 
-=head2 Fully automatic API checks
+=item *
 
-Knowing which parts of the API are not backwards compatible and
-probably need C<Devel::PPPort> support is another problem that's
-not easy to deal with manually. If you run
+A list of the provided API in the C<=provides> section.
 
-    perl Makefile.PL --with-apicheck
+=item *
 
-a C file is generated by F<parts/apicheck.pl> that is compiled
-and linked with C<Devel::PPPort>. This C file has the purpose of
-using each of the public API functions/macros once.
+The optional C<=dontwarn> section is used to suppress warnings about particular
+API elements.  Don't use this unless you get such a warning, and be sure to
+think about using other other alternatives before resorting to adding something
+in this section.
 
-The required information is derived from F<parts/embed.fnc> (just
-a copy of bleadperl's F<embed.fnc>), F<parts/apidoc.fnc> (which
-is generated by F<devel/mkapidoc.sh> and simply collects the rest
-of the apidoc entries spread over the Perl source code) and
-F<parts/ppport.fnc> (which lists all API provided purely by
-Devel::PPPort).
-The generated C file F<apicheck.c> is currently about 500k in size
-and takes quite a while to compile.
+=item *
 
-Usually, F<apicheck.c> won't compile with older perls. And even if
-it compiles, there's still a good chance of the dynamic linker
-failing at C<make test> time. But that's on purpose!
+The implementation to add to F<ppport.h> in the C<=implementation>
+section.  See L</Implementation Section Details>.
 
-We can use these failures to find changes in the API automatically.
-The two Perl scripts F<devel/mktodo> and F<devel/mktodo.pl>
-repeatedly run C<Devel::PPPort> with the apicheck code through
-all different versions of perl. Scanning the output of the compiler
-and the dynamic linker for errors, the files in F<parts/todo/> are
-generated. These files list all parts of the public API that don't
-work with less than a certain version of Perl.
-
-This information is in turn used by F<parts/apicheck.pl> to mask
-API calls in the generated C file for these versions, so the
-process can be stopped by the time F<apicheck.c> compiles cleanly
-and the dynamic linker is happy. (Actually, this process may generate
-false positives, so by default each API call is checked once more
-afterwards.)
-
-Running F<devel/mktodo> takes about an hour, depending of course
-on the machine you're running it on. If you run it with
-the C<--nocheck> option, it won't recheck the API calls that failed
-in the compilation stage and it'll take significantly less time.
-Running with C<--nocheck> should usually be safe.
-
-When running F<devel/mktodo> with the C<--base> option, it will
-generate the I<baseline> todo files by disabling all functionality
-provided by C<Devel::PPPort>. These are required for implementing
-the C<--compat-version> option of the F<ppport.h> script. The
-baseline todo files hold the information about which version of
-Perl lacks a certain part of the API.
-
-However, only the documented public API can be checked this way.
-And since C<Devel::PPPort> provides more macros, these would not be
-affected by C<--compat-version>. It's the job of F<devel/scanprov>
-to figure out the baseline information for all remaining provided
-macros by scanning the include files in the F<CORE> directory of
-various Perl versions.
-
-The whole process isn't platform independent. It has currently been
-tested only under Linux, and it definitely requires at least C<gcc> and
-the C<nm> utility.
-
-It's not very often that one has to regenerate the baseline and todo
-files. If you have to, you can either run F<devel/regenerate> or just
-execute the following steps by hand:
+=item *
 
-=over 4
+The code required to add to PPPort.xs for testing the implementation.
+This code goes into the C<=xshead>, C<=xsinit>, C<=xsmisc>, C<=xsboot>
+and C<=xsubs> section. Have a look at the template at the bottom
+of F<RealPPPort_xs.PL> to see where the code ends up.
 
 =item *
 
-You need a whole bunch of different Perls. The more, the better.
-You can use F<devel/buildperl.pl> to build them. I keep my perls
-in F</tmp/perl>, so most of the tools take this as a default.
+The tests in the C<=tests> section. Remember not to use any fancy
+modules or syntax elements, as the test code needs to be able to run
+with Perl 5.003.  (This is because Devel::PPPort itself will run all test files
+in the process of generating the information about when a feature came into
+existence.)  This means, for example
 
-=item *
+=over
 
-You also need a freshly built bleadperl that is in the path under
-exactly this name. (The name of the executable is currently hardcoded
-in F<devel/mktodo> and F<devel/scanprov>.)
+=item C<my> isn't supported in C<for>-loops
 
-=item *
+    for my $x (1, 2, 3) { }    # won't work with 5.003
 
-Remove all existing todo files in the F<parts/base> and
-F<parts/todo> directories.
+Instead declare C<$x> just before the statement
 
-=item *
+=item The postfix C<for> statement modifier isn't supported
 
-Update the API information. Copy the latest F<embed.fnc> file from
-bleadperl to the F<parts> directory and run F<devel/mkapidoc.sh> to
-collect the remaining information in F<parts/apidoc.fnc>.
+    foo for 1..2
 
-=item *
+won't compile.  Instead enclose C<foo> in a loop.
 
-Build the new baseline by running
+=item You can't use plain C<qr//>
 
-    perl devel/mktodo --base
+Instead, wrap it in a string eval C<eval "qr//">, and be sure it's skipped at
+execution time on perls earlier than 5.005
 
-in the root directory of the distribution. When it's finished,
-move all files from the F<parts/todo> directory to F<parts/base>.
+=back
 
-=item *
+As of version 3.56 of Devel::PPPort, the old Test style tests have been
+replaced with the more modern Test::More style, with some limitations.  This
+means, for example, that C<is> is finally available, as well as
+C<done_testing>.  You can pass the number of tests to C<skip>, instead of
+having to have your own C<for> loop.
+
+There is no C<like> nor C<unlike> (as those require C<qr> which didn't exist in
+the earliest perls that Devel::PPPort runs on).
+
+C<skip> doesn't do a S<C<last SKIP>>.  (Perhaps it could, but that would mean
+converting all the skips in the existing tests.)
+
+The existing tests have been changed only as much as necessary so as to get
+things to work.  But feel free to use the full functionality for any new tests
+you write.
+
+Here's a list of the supported functions:
+
+ cmp_ok
+ curr_test
+ diag
+ display
+ done_testing
+ eq_array
+ eq_hash
+ fail
+ is
+ isnt
+ next_test
+ note
+ ok
+ pass
+ plan
+ skip
+ skip_all
+ within
+
+These are copied from F<t/test.pl> in the perl distribution.  Not all of them
+have been tested back as far as Devel::PPPort supports.  Bug reports welcome.
+
+It's fine to backport an element only as far as convenient and necessary.  But
+remember that your test file will end up being called on all perl versions
+available, likely including ones earlier than your backport.  That may mean
+that elements in the C<=xs> sections will have to be C<#idef>'d out so that the
+object will not get missing symbols when loaded.
+
+It also means you have to check for and skip tests that aren't relevant to this
+version.  The recommended way to do this is like:
+
+ if (ivers($]) < ivers(5.6.2)) {
+    skip "reason", $count;
+ }
+ elsif (if (ivers($]) > ivers(5.5) {
+    skip "other reason", $count;
+ }
+
+C<ivers()> is a function automatically made available to all F<.t> files.  It
+converts any reasonble expression of a version number into an integer, which
+can reliably be compared using numeric comparison operators, with the output of
+a second C<ivers()> call on a different version number, like in the result above.
 
-Build the new todo files by running
+=back
 
-    perl devel/mktodo
+In all sections, lines that begin with C<##> are completely ignored.
 
-in the root directory of the distribution.
+=head2 Implementation Section Details
 
-=item *
+You can implement API elements via C functions or macros, or simple variables.
+For a function, just place its body in this C<=implementation> section.  But it
+is preferable to use a macro if feasible.  Otherwise, the user must explicitly
+request that it get loaded, by defining a C<NEED_I<function>> (or I<variable>)
+as described in F<ppport.h>.
 
-Finally, add the remaining baseline information by running
+=over
 
-    perl Makefile.PL && make
-    perl devel/scanprov --mode=write
+=item __UNDEFINED__
 
-=back
+If you add the line C<__UNDEFINED__> to the C<=provides> section, you can use
+lines like this in the C<=implementation> section:
 
-=head2 Implementation
+  __UNDEFINED__ macro    some definition
 
-Residing in F<parts/inc/> is the "heart" of C<Devel::PPPort>. Each
-of the files implements a part of the supported API, along with
-hints, dependency information, XS code and tests.
-The files are in a POD-like format that is parsed using the
-functions in F<parts/ppptools.pl>.
+to both define C<macro> and indicate that it is provided by F<ppport.h>.  This
+replaces these C<=implementation> section lines:
 
-The scripts F<PPPort_pm.PL>, F<PPPort_xs.PL> and F<mktests.PL> all
-use the information in F<parts/inc/> to generate the main module
-F<PPPort.pm>, the XS code in F<RealPPPort.xs> and various test files
-in F<t/>.
+  #ifndef macro
+  #  define macro    some definition
+  #endif
 
-All of these files could be generated on the fly while building
-C<Devel::PPPort>, but not having the tests in F<t/> will confuse
-TEST/harness in the core. Not having F<PPPort.pm> will be bad for
-viewing the docs on C<search.cpan.org>. So unfortunately, it's
-unavoidable to put some redundancy into the package.
+besides automagically making it be considered to be provided.  C<macro> can
+have optional arguments and the definition can even span multiple lines, like
+in
 
-=head2 Adding stuff to Devel::PPPort
+  __UNDEFINED__ SvMAGIC_set(sv, val) \
+                STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \
+                (((XPVMG*) SvANY(sv))->xmg_magic = (val)); } \
+                STMT_END
 
-First, check if the code you plan to add fits into one of the
-existing files in F<parts/inc/>. If not, just start a new one and
-remember to include it from within F<PPPort_pm.PL>.
+This usually makes the code more compact and readable.
 
-Each file holds all relevant data for implementing a certain part
-of the API:
+But you should only use this on things that you plan to publicly provide.  If
+something, such as a mnemonic for a constant needs to be defined but isn't
+really needed for the public at large to know about, you should use
 
-=over 2
+ __UNDEF_NOT_PROVIDED__ macro   some definition
 
-=item *
+instead.  To avoid name space conflicts, follow what's in L</Helper macros>,
+below.
 
-A list of the provided API in the C<=provides> section.
+=item Helper macros
 
-=item *
+If you need to define a helper macro which is not part of C<Devel::PPPort> API
+and its usage is only for the definition of other C<Devel::PPPort> macros, then
+use the C<D_PPP_> prefix for this macro name (e.g. C<D_PPP_SVPV_NOLEN_LP_ARG>).
+This suppresses any warnings when a macro is defined which is not part of the
+Perl public API.
 
-The implementation to add to F<ppport.h> in the C<=implementation>
-section.
+=item Version numbers
 
-=item *
+Version checking can be tricky to get correct (besides being buggy in some perl
+versions).
+C<ivers()> is used in the C<=tests> section to overcome this, and constructs
+like the following in the C language sections.
 
-The code required to add to PPPort.xs for testing the implementation.
-This code goes into the C<=xshead>, C<=xsinit>, C<=xsmisc>, C<=xsboot>
-and C<=xsubs> section. Have a look at the template at the bottom
-of F<PPPort_xs.PL> to see where the code ends up.
+  #if { VERSION < 5.9.3 }
 
-=item *
+instead of
 
-The tests in the C<=tests> section. Remember not to use any fancy
-modules or syntax elements, as the test code should be able to run
-with Perl 5.003, which, for example, doesn't support C<my> in
-C<for>-loops:
+  #if ((PERL_VERSION < 9) \
+    || (PERL_VERSION == 9 && PERL_SUBVERSION < 3))
 
-    for my $x (1, 2, 3) { }    # won't work with 5.003
+The version number can be either of the new form C<5.x.x> or the older
+form C<5.00x_yy>. Both are translated into the correct preprocessor
+statements. It is also possible to combine this with other statements:
+
+  #if { VERSION >= 5.004 } && !defined(sv_vcatpvf)
+    /* a */
+  #elif { VERSION < 5.004_63 } && { VERSION != 5.004_05 }
+    /* b */
+  #endif
 
-You can use C<ok()> to report success or failure:
+This not only works in the C<=implementation> section, but also in
+the C<=xsubs>, C<=xsinit>, C<=xsmisc>, C<=xshead> and C<=xsboot> sections.
 
-    ok($got == 42);
-    ok($got, $expected);
+=item Hints
 
-Regular expressions are not supported as the second argument to C<ok>,
-because older perls do not support the C<qr> operator.
+If you add a comment like so:
 
-=back
+ /* Hint: PL_expect, PL_copline, PL_rsfp
+    paragraphs of stuff about foo you want to have
+    shown when ppport.h outputs something about PL_expect or
+    PL_copline or PL_rsfp
+ */
 
-It's usually the best approach to just copy an existing file and
-use it as a template.
+Earlier versions of F<ppport.h> required an asterisk at the beginning of every
+continuation line, or else the content would be silently dropped.
 
-=head2 Implementation Hints
+=item Warnings
 
-In the C<=implementation> section, you can use
+A more serious caution about C<foo> can be displayed by instead saying
 
-  __UNDEFINED__ macro    some definition
+ /* Warning: PL_expect, PL_copline, PL_rsfp
+    paragraphs of stuff about foo you want to have
+    shown when ppport.h outputs something about PL_expect or
+    PL_copline or PL_rsfp
+ */
 
-instead of
+Earlier versions of F<ppport.h> required an asterisk at the beginning of every
+continuation line, or else the content would be silently dropped.
 
-  #ifndef macro
-  #  define macro    some definition
-  #endif
+=item Replace
 
-The macro can have optional arguments and the definition can even
-span multiple lines, like in
+When F<ppport.h> is run on a file(s), you can cause it to automatically flag
+occurrences of the constructs you specify, encouraging the author to replace
+them with different (presumably better) ones.  These also are used in any
+suggested edits and generated patches.
 
-  __UNDEFINED__ SvMAGIC_set(sv, val) \
-                STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \
-                (((XPVMG*) SvANY(sv))->xmg_magic = (val)); } STMT_END
+There are three ways to do this
 
-This usually makes the code more compact and readable. And you only have to add
-the line C<__UNDEFINED__> to the C<=provides> section to get all macros
-implemented this way to be imported into this section, so they all get
-documented as being provided.
+=over 4
 
-Version checking can be tricky if you want to do it correct.
-You can use
+=item in-line comment
 
-  #if { VERSION < 5.9.3 }
+You can add a trailing comment like so:
 
-instead of
+ #define bar foo    /* Replace */
+ __UNDEFINED__ bar foo  /* Replace */
 
-  #if ((PERL_VERSION < 9) || (PERL_VERSION == 9 && PERL_SUBVERSION < 3))
+These say that C<foo> should be replaced by C<bar>.  NOT the other way around.
 
-The version number can be either of the new form C<5.x.x> or of the older
-form C<5.00x_yy>. Both are translated into the correct preprocessor
-statements. It is also possible to combine this with other statements:
+=item separate comment
 
-  #if { VERSION >= 5.004 } && !defined(sv_vcatpvf)
-    /* a */
-  #elif { VERSION < 5.004_63 } && { VERSION != 5.004_05 }
-    /* b */
-  #endif
+For situations not amenable to the above, you can say
 
-This not only works in the C<=implementation> section, but also in
-the C<=xsubs>, C<=xsinit>, C<=xsmisc>, C<=xshead> and C<=xsboot> sections.
+ /* Replace foo with bar */
+
+=item define a replacement region
+
+It you have several replacements, you can group them together like so:
+
+ /* Replace: 1 */
+ #define foo bar
+ #define bat baz
+ /* Replace: 0 */
+
+These replace C<bar> with C<foo>; C<baz> with C<bat>.  NOT the other way
+around.
+
+=back
+
+=item Dependencies
+
+F<ppport.h> automatically gathers information as to what functions are
+dependent on what other things from inspecting the source, but if this is
+insufficient for you, you can add lines like the following:
+
+ /* foo, bar depends on baz, bat */
+
+Each of C<foo>, C<bar> depends on each of C<baz>, C<bat>.
+
+=back
 
 =head2 Testing
 
-To automatically test C<Devel::PPPort> with lots of different Perl
-versions, you can use the F<soak> script. Just pass it a list of
-all Perl binaries you want to test.
+After you have furnished your implementation, you need to test it.
 
 =head2 Special Makefile targets
 
@@ -286,11 +325,256 @@ use
 
 That's it.
 
+To automatically test C<Devel::PPPort> with lots of different Perl
+versions, you can use the F<soak> script. Just pass it a list of
+all Perl binaries you want to test.
+
+=head2 Regenerating F<ppport.h> and F<PPPort.pm>
+
+C<Devel::PPPort> keeps two directories of generated files, in F<parts/base> and
+F<parts/todo>.  The files in each are named after Perl version numbers.  When a
+function or macro came into existence is indicated by placing its name in the
+corresponding file in F<parts/base>.  The files in F<parts/todo> are the same,
+except they indicate the earliest release that F<ppport.h> supports the
+element.  The delta is effectively what F<ppport.h> buys you.
+
+The generation process described in this section creates these files.  It does
+so by examining as many perl versions as are available to it.  It tries to make
+sure each element actually compiles, and it runs the test scripts you have
+furnished on every version.
+
+Ideally, this should be done before every release that includes new backporting
+and/or when blead has added new public API.  At a minimum, it should be done as
+the next major Perl release comes out.
+
+The process isn't platform independent. It has currently been tested only under
+Linux, and it definitely requires at least C<gcc> and the C<nm> utility.
+The process used to be problematic, with random failures.  But it has now been
+fixed to be reliable.
+
+Before starting the regeneration, you need to have gathered certain data.
+(Options listed below apply to the tools that eventually will use the data, and
+which are described further below).
+
+=over 4
+
+=item *
+
+You will first need a whole bunch of different Perls, the more, the better, but
+only one per version tag (which one is random) will actually get used.
+dromedary has a sufficient set.  They should all have the same Configure
+options with respect to what functions and macros are enabled.  For example,
+they should all be threaded, or all non-threaded.  A mixture will screw up the
+results.  Similarly, they should all or none have quad math (at least as far
+back as that became available).  You can use F<devel/buildperl.pl> to build
+them.
+
+Previous maintainers of this module kept those perls in
+F</tmp/perl/install/default>, so most of the tools use this as a default, but
+you'll likely simply use the C<--install=> option to specify where.  This
+should be a path where a S<C<make install>> has been done, so has immediate
+subdirectories of C</bin> and C</lib>.  C</bin> should contain the binaries.
+It will use all files in this directory whose names begin with C<perl5>.
+
+Actually, not all the binaries need be in this directory.  You can specify
+additional places to look since C<--install=> takes a comma separated list of
+directories.
+
+=item *
+
+You also need a freshly built bleadperl.  The C<--blead=I<path>> option should
+be used to specify it.  (Some of the tools have a default of C<bleadperl-debug>
+if this option is omitted.)  Again, it needs the same Configure options as the
+earlier versions had.  Using C<-DNO_MATHOMS> will change the results, and
+probably should be avoided.  True, these functions are allegedly on their way
+out, so it could be argued that they shouldn't be encouraged in any way; but
+some of these have been in limbo for many years, so should be documented.
+
+=item *
+
+And you will need updated API information. Copy the latest F<embed.fnc> file
+from bleadperl to the F<parts> directory and run F<devel/mkapidoc.pl> to
+collect the remaining information in F<parts/apidoc.fnc>.
+
+=item *
+
+The final step before regenerating everything is to run
+F</devel/mkppport_fnc.pl> to update the F</parts/ppport.fnc> file.
+
+=back
+
+Having done this, run F<devel/regenerate> which wraps the following steps
+(which you could instead do by hand, but it's easy to forget things):
+
+=over
+
+=item *
+
+It first does some sanity checking
+
+=item *
+
+Then it asks you if it's ok to remove all existing todo files in the
+F<parts/base> and F<parts/todo> directories.  If you answer no, the process
+aborts.
+
+This is crtical to getting accurate results.
+
+=item *
+
+It builds the new baseline by running
+
+    perl devel/mktodo --base
+
+in the root directory of the distribution.
+
+If there are warnings in blead, it will ask you to examine them, and to ok if
+it's all right to go ahead.  If there are issues with blead, everything
+following could be wrong.
+
+=item *
+
+It builds the new todo files by running
+
+    perl devel/mktodo
+
+in the root directory of the distribution.
+
+=item *
+
+Finally, it adds the remaining information by running
+
+    perl Makefile.PL && make
+    perl devel/scanprov --mode=write
+
+=back
+
+=head2 How to build gobs of versions of Perl
+
+C<Devel::PPPort> supports Perl versions between 5.003 and bleadperl.
+To guarantee this support, its good to have as many versions as possible to
+test on.  dromedary currently has many such versions.
+
+There is a tool to build all the different
+versions and configurations. You can find it in F<devel/buildperl.pl>.
+It can currently build the following Perl releases:
+
+    5.003
+    5.004 - 5.004_05
+    5.005 - 5.005_04
+    5.6.x
+    5.7.x
+    5.8.x
+    5.9.x
+    5.1x.x
+    5.2x.x
+    5.3x.x
+
+=head2 Implementation
+
+Knowing which parts of the API are not backwards compatible and
+probably need C<Devel::PPPort> support is another problem that's
+not easy to deal with manually. If you run
+
+    perl Makefile.PL --with-apicheck
+
+a C file is generated by F<parts/apicheck.pl> that is compiled
+and linked with C<Devel::PPPort>. This C file has the purpose of
+using each of the public API functions/macros once.
+
+The required information is derived from F<parts/embed.fnc> (just
+a copy of bleadperl's F<embed.fnc>), F<parts/apidoc.fnc> (which
+is generated by F<devel/mkapidoc.pl> and simply collects the rest
+of the apidoc entries spread over the Perl source code) and
+F<parts/ppport.fnc> (which lists the API provided purely by
+Devel::PPPort, along with other elements that are tested only using
+F<ppport.h>).
+
+The generated C file (usually, F<apicheck.c>) won't compile as-is
+with older perls. And even if it compiles, there's still a good chance of the
+dynamic linker failing at C<make test> time. But that's on purpose!
+
+We can use these failures to find changes in the API automatically.
+The Perl script F<devel/mktodo> calls another script F<devel/mktodo.pl>
+repeatedly to run C<Devel::PPPort> on version after version of perl, in
+decreasing version order, so we start with blead and work backwards.  The
+latter script generates an F<apicheck.c>.  It starts with the code that
+successfully worked in the previously tested Perl version, which should be the
+version one higher than the current one.  Call the current one I<n>, and the
+previous one I<n+1>.  The items that fail to compile in I<n>, but did compile
+in I<n+1> must have become available in I<n+1>.  We run the Linux command C<nm>
+to find those undefined symbols in I<n>.  We change F<apicheck.c> to ignore
+(through C<#ifdef>'s) those and recompile, repeating until F<apicheck.c>
+successfully compiles, the dynamic linker is happy, and C<make test> runs on
+this version.  Then we repeat the process for I<n-1>, and so on.  (Actually,
+this process may generate false positives, so by default each failing API call
+is checked again.  If possible, this is done by generating an F<apicheck.c> for
+just the one failing API.)  Note that the make test is run using F<ppport.h>
+during both passes.
+
+Running F<devel/mktodo> currently takes a couple hours on dromedary.
+
+If you run it with the C<--nocheck> option, it won't recheck the API calls
+that failed in the compilation stage and it'll take significantly less time.
+No one currently associated with maintaining this module understands under what
+circumstances it is safe to run with C<--nocheck>.
+
+By repeating the process over and over, we build up information on when every
+element first became supported.  This information is stored in files in the
+F<parts/base> directory, one file per version.  The file for version I<n+1> is
+generated by running version I<n> of perl.
+
+We actually want a second piece of information, which is how much F<ppport.h>
+buys you.  What happens when regenerating is actually two entire runs through
+all the perls.  The first is accomplished by calling F<devel/mktodo> with the
+C<--base> option.  It automically will call F<devel/mktodo.pl> with each
+version of perl, NOT using anything in F<ppport.h>.  When done the results
+indicate  when each API element became available in stock perl, without using
+F<ppport.h>.
+
+And then the whole process is repeated, but this time F<ppport.h> is included.
+The files are placed in F<parts/todo>.  Thus, at the end, we know when each
+element became available in modified perl, using F<ppport.h>.
+
+However, only the public API that is implemented as functions (and must appear
+in F<embed.fnc>) plus macros whose calling sequence is documented can be
+checked this way.  The final step in the process is calling F<devel/scanprov>.
+It looks through the header files for when all the symbols provided by
+C<Devel::PPPort> first became defined.  It doesn't test the symbols or try to
+compile them, as it doesn't generally know the API, but it can tell that
+something exists in release I<n+1> but not I<n> (by scanning the include files
+in the F<CORE> directory of various Perl versions).  (It does know if a macro
+has zero arguments or non-zero arguments, so it does get extra information from
+the zero argument ones.)
+
+=head2 Files
+
+Residing in F<parts/inc/> is the "heart" of C<Devel::PPPort>. Each
+of the files implements a part of the supported API, along with
+hints, dependency information, XS code and tests.
+The files are in a POD-like format that is parsed using the
+functions in F<parts/ppptools.pl>.
+
+The scripts F<PPPort_pm.PL>, F<RealPPPort_xs.PL> and F<mktests.PL> all
+use the information in F<parts/inc/> to generate the main module
+F<PPPort.pm>, the XS code in F<RealPPPort.xs> and various test files
+in F<t/>.
+
+You can get extra information from F<PPPort_pm.PL> by setting the environment
+variable C<DPPP_CHECK_LEVEL> to 1 or 2.
+
+All of these files could be generated on the fly while building
+C<Devel::PPPort>, but not having the tests in F<t/> will confuse
+TEST/harness in the core. Not having F<PPPort.pm> will be bad for
+viewing the docs on C<search.cpan.org>. So unfortunately, it's
+unavoidable to put some redundancy into the package.
+
 =head2 Submitting Patches
 
 If you've added some functionality to C<Devel::PPPort>, please
-consider submitting a patch with your work to P5P by sending a mail
-L<perlbug@perl.org|mailto:perlbug@perl.org>.
+consider submitting a patch with your work to P5P by sending a pull request to
+
+L<https://github.com/Dual-Life/Devel-PPPort/pulls>.
 
 When submitting patches, please only add the relevant changes
 and don't include the differences of the generated files. You
@@ -308,9 +592,14 @@ module in the core:
   META.yml
   PPPort.pm
 
+=head1 BUGS
+
+No known bugs.
+
 =head1 COPYRIGHT
 
-Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
+Version 3.x, Copyright (C) 2004-2019, Marcus Holland-Moritz
+and Perl 5 porters
 
 Version 2.x, Copyright (C) 2001, Paul Marquess.
 
index 05f98d4..90b86af 100644 (file)
@@ -17,7 +17,6 @@
 ^parts/base-
 ^ppport\.h$
 ^PPPort\.c$
-^PPPort.pm$
 ^RealPPPort\.
 ^testing
 Devel-PPPort.*
index 62ba014..bc5f502 100644 (file)
 require 5.003;
 
 use strict;
+BEGIN { $^W = 1; }
+
 use ExtUtils::MakeMaker;
+use Config;
 
 use vars '%opt';  # needs to be global, and we can't use 'our'
 
+sub cat_file
+{
+  eval { require File::Spec };
+  return $@ ? join('/', @_) : File::Spec->catfile(@_);
+}
+
+my $t_01_test = cat_file('t', '01_test.t');
+
 unless ($ENV{'PERL_CORE'}) {
   $ENV{'PERL_CORE'} = 1 if grep { $_ eq 'PERL_CORE=1' } @ARGV;
 }
@@ -27,39 +38,76 @@ unless ($ENV{'PERL_CORE'}) {
 @ARGV = map { /^--with-(apicheck)$/ && ++$opt{$1} ? () : $_ } @ARGV;
 
 my %mf = (
-  NAME          => 'Devel::PPPort',
-  VERSION_FROM  => 'PPPort_pm.PL',
-  PM            => { 'PPPort.pm' => '$(INST_LIBDIR)/PPPort.pm' },
-  H             => [ qw(ppport.h) ],
-  OBJECT        => 'RealPPPort$(OBJ_EXT) $(O_FILES)',
-  XSPROTOARG    => '-noprototypes',
-  CONFIGURE     => \&configure,
+  NAME           => 'Devel::PPPort',
+  VERSION_FROM   => 'PPPort_pm.PL',
+  PM             => { 'PPPort.pm' => '$(INST_LIBDIR)/PPPort.pm' },
+  H              => [ qw(ppport.h) ],
+  OBJECT         => 'RealPPPort$(OBJ_EXT) $(O_FILES)',
+  XSPROTOARG     => '-noprototypes',
+  CONFIGURE      => \&configure,
+  BUILD_REQUIRES => {
+    "FindBin" => "0",
+  },
 );
-delete $mf{META_MERGE} unless eval { ExtUtils::MakeMaker->VERSION (6.46) };
 WriteMakefile(%mf);
 
 sub configure
 {
   my @clean    = qw{ $(H_FILES) RealPPPort.xs RealPPPort.c PPPort.pm };
-  my %depend   = ('$(OBJECT)' => '$(H_FILES)');
+  my %depend   = (
+    '$(OBJECT)' => '$(H_FILES)',
+    'Makefile' => '$(VERSION_FROM)',
+  );
   my @C_FILES  = qw{ module2.c module3.c },
   my %PL_FILES = (
     'ppport_h.PL'  => 'ppport.h',
     'PPPort_pm.PL' => 'PPPort.pm',
-    'PPPort_xs.PL' => 'RealPPPort.xs',
+    'RealPPPort_xs.PL' => 'RealPPPort.xs',
+    'mktests.PL' => $t_01_test,
   );
   my @moreopts;
 
-  if (eval $ExtUtils::MakeMaker::VERSION >= 6) {
+  if (eval { ExtUtils::MakeMaker->VERSION(6) }) {
     push @moreopts, AUTHOR => 'Marcus Holland-Moritz <mhx@cpan.org>';
-    push @moreopts, ABSTRACT_FROM => 'PPPort_pm.PL';
+    push @moreopts, ABSTRACT => 'Perl/Pollution/Portability';
   }
 
-  if (eval $ExtUtils::MakeMaker::VERSION >= 6.30_01) {
+  if (eval { ExtUtils::MakeMaker->VERSION(6.30_01) }) {
     print "Setting license tag...\n";
     push @moreopts, LICENSE => 'perl';
   }
 
+  if (eval { ExtUtils::MakeMaker->VERSION (6.46) }) {
+    open FH, '<PPPort_pm.PL' or die "cannot open PPPort_pm.PL for reading: $!";
+    my $version;
+    my $line;
+    while ($line = <FH>) {
+      ($version) = $line =~ /^\$VERSION = '([\d.]+(_\d+)?)';$/ and last;
+    };
+    die 'failed to extract $VERSION from PPPort_pm.PL' if not $version;
+    close FH;
+    print "Adding META_MERGE...\n";
+    push @moreopts, META_MERGE => {
+      'meta-spec' => { version => 2 },
+      provides => {
+        'Devel::PPPort' => {
+          file    => 'PPPort.pm',
+          version => $version,
+        },
+      },
+      resources => {
+        bugtracker => {
+          web => 'https://github.com/Dual-Life/Devel-PPPort/issues',
+        },
+        repository => {
+          type => 'git',
+          url  => 'git://github.com/Dual-Life/Devel-PPPort.git',
+          web  => 'https://github.com/Dual-Life/Devel-PPPort',
+        },
+      },
+    };
+  }
+
   if (not $ENV{'PERL_CORE'}) {
     # Devel::PPPort is in the core since 5.7.3
     # 5.11.0+ has site before perl
@@ -77,13 +125,11 @@ sub configure
     $depend{'apicheck.i'} = 'ppport.h';
   }
 
-  open my $fh, '<', 'PPPort_pm.PL' or die "cannot open PPPort_pm.PL for reading: $!";
-  my $version;
-  while (my $line = <$fh>) {
-    ($version) = $line =~ /^\$VERSION = '([\d.]+)';$/ and last;
-  };
-  die 'failed to extract $VERSION from PPPort_pm.PL' if not $version;
-  close $fh;
+  if ($Config{gccversion}) {
+    my $define = '-W -Wall';
+    $define .= ' -Wdeclaration-after-statement' if $Config{gccversion} =~ /^(\d+\.\d+)\./ && $1 >= 3.4;
+    push @moreopts, DEFINE => $define;
+  }
 
   return {
     C        => \@C_FILES,
@@ -91,25 +137,6 @@ sub configure
     PL_FILES => \%PL_FILES,
     depend   => \%depend,
     clean    => { FILES => "@clean" },
-    META_MERGE    => {
-      'meta-spec' => { version => 2 },
-      provides => {
-        'Devel::PPPort' => {
-          file    => 'PPPort_pm.PL',
-          version => $version,
-        },
-      },
-      resources => {
-        bugtracker => {
-          web => 'https://rt.perl.org/rt3/',
-        },
-        repository => {
-          type => 'git',
-          url  => 'git://perl5.git.perl.org/perl.git',
-          web  => 'https://perl5.git.perl.org/perl.git',
-        },
-      },
-    },
     @moreopts,
   };
 }
@@ -127,7 +154,7 @@ regen_pm:
        $(PERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) PPPort_pm.PL
 
 regen_xs:
-       $(PERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) PPPort_xs.PL
+       $(PERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) RealPPPort_xs.PL
 
 regen_tests:
        $(PERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) mktests.PL
@@ -141,6 +168,45 @@ POSTAMBLE
   return $post;
 }
 
+sub MY::processPL
+{
+  package MY;
+  my $original = shift->SUPER::processPL(@_);
+
+  require "./parts/ppptools.pl";
+  my $includes = join ' ', all_files_in_dir('parts/inc');
+
+  my $updated = '';
+  my @rules = split( m{^\s*$}m, $original );
+  my $rule;
+  foreach $rule ( @rules ) {
+    if ( $rule =~ m{^\s*^PPPort\.pm\s+:}m ) {
+      $rule =~ s{^(\s*^PPPort\.pm\s+:.*)}{$1 $includes}m; # PPPort.pm depends on all files from parts/inc
+      $rule =~ s{pm_to_blib}{}m; # PPPort.pm must not depend on built PPPort.pm in blib/
+    } elsif ( $rule =~ m{^\s*^ppport\.h\s+:}m ) {
+      $rule =~ s{^(\s*^ppport\.h\s+:.*)}{$1 PPPort.pm}m; # ppport.h depends on PPPort.pm
+      $rule =~ s{pm_to_blib}{}m; # ppport.h is used to build RealPPPort.xs so cannot depend on built PPPort in blib/
+    } elsif ( $rule =~ m{^\s*^RealPPPort\.xs\s+:}m ) {
+      $rule =~ s{^(\s*^RealPPPort\.xs\s+:.*)}{$1 ppport.h}m; # RealPPPort.xs depends on ppport.h
+      $rule =~ s{pm_to_blib}{}m; # RealPPPort.xs is used to build PPPort binary, so it cannot depend on it
+    } elsif ( $rule =~ m{^\s*\S+\b01_test\.t\s+:}m ) {
+      $rule =~ s{^(\s*^\S+\b01_test\.t\s+:.*)}{$1 $includes}m; # all tests in t/ depends on all files from parts/inc
+      $rule =~ s{pm_to_blib}{}m; # Generating test files does not depend on built PPPort in blib/
+    }
+    $updated .= $rule;
+  }
+
+  # All test targets depends on pure_all target, so ensure that t/01_test.t generated by mktests.PL is up-to-date
+  $updated .= <<"TESTS_IN_T";
+
+pure_all :: $t_01_test
+       \$(NOECHO) \$(NOOP)
+
+TESTS_IN_T
+
+  return $updated;
+}
+
 sub MY::dist_core
 {
   package MY;
@@ -148,8 +214,10 @@ sub MY::dist_core
 
   my $updated = '';
   my @rules = split( m{^\s*$}m, $dist );
-  foreach my $rule ( @rules ) {
+  my $rule;
+  foreach $rule ( @rules ) {
     if ( $rule =~ m{^\s*^dist\s+:}m ) {
+        $rule =~ s{:}{: PPPort.pm manifest}; # make sure we update PPPort.pm
         $rule .= qq[\t].q[$(NOECHO) $(ECHO) "Warning: Please check '__MAX_PERL__' value in PPPort_pm.PL"].qq[\n];
     }
     $updated .= $rule;
index 2586824..72d4cab 100644 (file)
@@ -1,3 +1,3 @@
 This is just a dummy file to let Configure know that Devel::PPPort
-is an XS module. The real XS code is autogenerated from PPPort_xs.PL
+is an XS module. The real XS code is autogenerated from RealPPPort_xs.PL
 when this module is built and will go to RealPPPort.xs.
index abce21d..f578954 100644 (file)
@@ -2,6 +2,9 @@
 #
 #  PPPort_pm.PL -- generate PPPort.pm
 #
+# Set the environment variable DPPP_CHECK_LEVEL to more than zero for some
+# extra checking. 1 or 2 currently
+
 ################################################################################
 #
 #  Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
 ################################################################################
 
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 require "./parts/ppptools.pl";
+require "./parts/inc/inctools";
 
 my $INCLUDE = 'parts/inc';
 my $DPPP = 'DPPP_';
 
+# The keys of %embed are the names of the items found in all the .fnc files,
+# and each value is all the information parse_embed returns for that item.
 my %embed = map { ( $_->{name} => $_ ) }
             parse_embed(qw(parts/embed.fnc parts/apidoc.fnc parts/ppport.fnc));
 
 my(%provides, %prototypes, %explicit);
 
 my $data = do { local $/; <DATA> };
+
+# Call include(file, params) for every line that begins with %include
+# These fill in %provides and %prototypes.
+# The keys of %provides are the items provided by Devel::PPPort, and each
+# value is the name of the file (in parts/inc/) that has the code to provide
+# it.
+# An entry in %prototypes looks like:
+#   'grok_bin' => 'UV grok_bin(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result)',
+
 $data =~ s{^\%(include)\s+(\w+)((?:[^\S\r\n]+.*?)?)\s*$}
           {eval "$1('$2', $3)" or die $@}gem;
 
+# And expand it.
 $data = expand($data);
 
-my @api = sort { lc $a cmp lc $b or $a cmp $b } keys %provides;
+# Just the list of provided items.
+my @provided = sort dictionary_order keys %provides;
 
+# which further expands $data.
 $data =~ s{^(.*)__PROVIDED_API__(\s*?)^}
-          {join '', map "$1$_\n", @api}gem;
+          {join '', map "$1$_\n", @provided}gem;
 
 {
   my $len = 0;
@@ -49,79 +67,182 @@ $data =~ s!^(.*)__EXPLICIT_API__(\s*?)^!
            sprintf("$1$format\n", 'Function / Variable', 'Static Request', 'Global Request') .
            $1 . '-'x$len . "\n" .
            join('', map { sprintf "$1$format\n", $explicit{$_} eq 'var' ? $_ : "$_()", "NEED_$_", "NEED_${_}_GLOBAL" }
-                    sort keys %explicit)
+                    sort dictionary_order keys %explicit)
           !gem;
 }
 
+# These hashes look like:
+#   { ...  'gv_check' => '5.003007',
+#          'gv_const_sv' => '5.009003',
+#          'gv_dump' => '5.006000',
+#     ... },
+
+# What's provided when without ppport.h, as far as we've been able to
+# determine
 my %raw_base = %{&parse_todo('parts/base')};
+
+# What's provided when using ppport.h, as far as we've been able to
+# determine
 my %raw_todo = %{&parse_todo('parts/todo')};
 
+# Invert so each key is the 7 digit version number, and it's value is an array
+# of all symbols within it, like:
+#          '5005003' => [
+#                         'POPpx',
+#                         'get_vtbl',
+#                         'save_generic_svref'
+#                       ],
 my %todo;
 for (keys %raw_todo) {
-  push @{$todo{$raw_todo{$_}}}, $_;
+  push @{$todo{int_parse_version($raw_todo{$_}{version})}}, $_;
 }
 
-# check consistency
-for (@api) {
-  if (exists $raw_todo{$_} and exists $raw_base{$_}) {
-    if ($raw_base{$_} eq $raw_todo{$_}) {
+# Most recent first
+my @todo_list = reverse sort keys %todo;
+
+# Here, @todo_list contains the integer version numbers that have support.
+# The first and final elements give the extremes of the supported versions.
+# (Use defaults that were reasonable at the time of this commit if the
+# directories are empty (which should only happen during regeneration of the
+# base and todo files).).  Actually the final element is for blead (at the
+# time things were regenerated), which is 1 beyond the max version supported.
+my $INT_MAX_PERL = (@todo_list) ? $todo_list[0] - 1 : '5030000'; # used for __MAX_PERL__
+my $MAX_PERL = format_version($INT_MAX_PERL);
+my $INT_MIN_PERL = (@todo_list) ? $todo_list[-1] : 5003007;
+my $MIN_PERL = format_version($INT_MIN_PERL);
+
+# Get rid of blead.  It contains the things marked as todo, meaning they
+# don't compile at all, and not getting rid of it would mean they would be
+# listed as working but introduced in blead.
+shift @todo_list if @todo_list && $todo_list[0] > $INT_MAX_PERL;
+
+# check consistency between our list of everything provided, and our lists of
+# what got provided when
+for (@provided) {
+  if (   exists $raw_todo{$_}
+      && $raw_todo{$_}{version} > $INT_MIN_PERL # INT_MIN_PERL contents are real
+                                                # symbols, not something to do
+      && $raw_todo{$_}{version} <= $INT_MAX_PERL # Above this would be things that
+                                                 # don't compile in blead
+      && exists $raw_base{$_})
+  {
+    if ($raw_base{$_}{version} == $raw_todo{$_}{version}) {
       warn "$INCLUDE/$provides{$_} provides $_, which is still marked "
            . "todo for " . format_version($raw_todo{$_}) . "\n";
     }
     else {
-      check(2, "$_ was ported back to " . format_version($raw_todo{$_}) .
-               " (baseline revision: " . format_version($raw_base{$_}) . ").");
+      check(2, "$_ was ported back to " . format_version($raw_todo{$_}{version})
+            .  " (baseline revision: "  . format_version($raw_base{$_}{version})
+            . ").");
     }
   }
 }
 
 my @perl_api;
-for (keys %provides) {
+for (@provided) {
   next if /^Perl_(.*)/ && exists $embed{$1};
   next if exists $embed{$_};
   push @perl_api, $_;
   check(2, "No API definition for provided element $_ found.");
 }
 
+# At this point @perl_api is the list of things we provide that weren't found
+# in the .fnc files.
+my @prototype_unknown = @perl_api;
+
+# Add in the .fnc file definitions.
 push @perl_api, keys %embed;
+@perl_api = sort dictionary_order @perl_api;
 
-for (@perl_api) {
+for (@perl_api) {   # $_ is the item name
   if (exists $provides{$_} && !exists $raw_base{$_}) {
     check(2, "Mmmh, $_ doesn't seem to need backporting.");
   }
-  my $line = "$_|" . (exists $provides{$_} && exists $raw_base{$_} ? $raw_base{$_} : '') . '|';
-  $line .= ($raw_todo{$_} || '') . '|';
+
+  # Create the lines that ppport.h reads.  These look like
+  #     CopyD|5.009002|5.003007|p
+  my $line = "$_|";
+  $line .= $raw_base{$_}{version} if exists $raw_base{$_}
+                # If is above the max, it means it never actually got defined
+            && int_parse_version($raw_base{$_}{version}) <= $INT_MAX_PERL;
+  $line .= '|';
+  $line .= $raw_todo{$_}{version}
+                if exists $raw_todo{$_}
+                && int_parse_version($raw_todo{$_}{version}) <= $INT_MAX_PERL;
+  $line .= '|';
   $line .= 'p' if exists $provides{$_};
-  if (exists $embed{$_}) {
-    my $e = $embed{$_};
-    if (exists $e->{flags}{p}) {
+  my $e;
+  $e = $embed{$_} if exists $embed{$_};
+  my $is_documented = 0;
+  my $is_accessible = 0;
+  if (defined $e) {
+    if (exists $e->{flags}{'p'}) {    # Has 'Perl_' prefix
       my $args = $e->{args};
       $line .= 'v' if @$args && $args->[-1][0] eq '...';
     }
-    $line .= 'n' if exists $e->{flags}{n};
+    $line .= 'o' if exists $e->{ppport_fnc};
+    $line .= 'n' if exists $e->{flags}{'T'};  # No thread context parameter
+    $line .= 'd' if exists $e->{flags}{'D'};  # deprecated
+    $line .= 'x' if exists $e->{flags}{'x'};  # experimental
+    $line .= 'c' if        exists $e->{flags}{'C'}      # core-only
+                   || (    exists $e->{flags}{'X'}
+                       && (exists $e->{flags}{'E'} || ! exists $e->{flags}{'m'}));
+    $is_accessible = 1 if exists $e->{flags}{'A'}
+                       || exists $e->{flags}{'C'}
+                       || (     exists $e->{flags}{'X'}
+                           && ! exists $e->{flags}{'E'}
+                           &&   exists $e->{flags}{'m'});
+    $is_documented = 1 if exists $e->{flags}{'d'};
   }
+
+  # scanprov adds the M and F flags.  The M is for provided macros; F for
+  # functions we didn't find in testing (usually because they are hidden
+  # behind ifdefs, like PERL_GLOBAL_STRUCT_PRIVATE).  None of them were
+  # verified
+  if (exists $raw_base{$_}{code}) {
+    $line .= 'V' if $raw_base{$_}{code} =~ /[MFX]/;
+    $is_accessible = 1 if $raw_base{$_}{code} =~ /M/;
+  }
+  $line .= 'i' unless $is_accessible;
+  $line .= 'u' unless $is_documented;
+
   $_ = $line;
 }
 
 $data =~ s/^([\t ]*)__PERL_API__(\s*?)$/
-           join "\n", map "$1$_", sort @perl_api
+           join "\n", map "$1$_", sort dictionary_order @perl_api
           /gem;
 
+my $undocumented = "(undocumented)";
+
 my @todo;
-for (reverse sort keys %todo) {
+for (@todo_list) {
   my $ver = format_version($_);
+  $ver .= " (at least)" if $_ == $todo_list[-1];
   my $todo = "=item perl $ver\n\n";
-  for (sort @{$todo{$_}}) {
-    $todo .= "  $_\n";
+  for (sort dictionary_order @{$todo{$_}}) {
+    $todo .= "  $_";
+    $todo .= "  (DEPRECATED)" if  $embed{$_}->{flags}{'D'};
+    $todo .= "  (marked experimental)" if $embed{$_}->{flags}{'x'};
+    $todo .= "  $undocumented" unless $embed{$_}->{flags}{'d'};
+    $todo .= "\n";
   }
   push @todo, $todo;
 }
 
+if (@prototype_unknown) {
+    my $todo = "=item Backported version unknown\n\n";
+    for (sort dictionary_order @prototype_unknown) {
+        $todo .= " $_  $undocumented\n";
+    }
+    push @todo, $todo;
+}
+
 $data =~ s{^__UNSUPPORTED_API__(\s*?)^}
           {join "\n", @todo}gem;
 
-$data =~ s{__MIN_PERL__}{5.003}g;
-$data =~ s{__MAX_PERL__}{5.30}g;
+$data =~ s{__MIN_PERL__}{$MIN_PERL}g;
+$data =~ s{__MAX_PERL__}{$MAX_PERL}g;
 
 open FH, ">PPPort.pm" or die "PPPort.pm: $!\n";
 print FH $data;
@@ -150,6 +271,7 @@ sub include
 
   for (keys %{$data->{prototypes}}) {
     $prototypes{$_} = $data->{prototypes}{$_};
+    $prototypes{$_} = normalize_prototype($data->{prototypes}{$_});
     $data->{implementation} =~ s/^$_(?=\s*\()/$DPPP(my_$_)/mg;
   }
 
@@ -167,7 +289,7 @@ sub expand
   my $code = shift;
   $code =~ s{^(\s*#\s*(?:el)?if\s+)(.*)$}{$1.expand_pp_expressions($2)}gem;
   $code =~ s{^\s*
-              __UNDEFINED__
+              __(?:UNDEFINED|UNDEF_NOT_PROVIDED)__
               \s+
               (
                 ( \w+ )
@@ -274,7 +396,14 @@ sub expand_pp_expr
     my $proto = make_prototype($e);
     if (exists $prototypes{$func}) {
       if (compare_prototypes($proto, $prototypes{$func})) {
-        check(1, "differing prototypes for $func:\n  API: $proto\n  PPP: $prototypes{$func}");
+        my $proto_no_pTHX = $proto;
+        $proto_no_pTHX =~ s/pTHX_\s*//;
+        if (compare_prototypes($proto_no_pTHX, $prototypes{$func})) {
+            check(1, "differing prototypes for $func:\n  API: $proto\n  PPP: $prototypes{$func}");
+        }
+        else {
+            check(1, "prototypes differ in pTHX_ for $func:\n  API: $proto\n  PPP: $prototypes{$func}");
+        }
         $proto = $prototypes{$func};
       }
     }
@@ -309,8 +438,8 @@ sub make_embed
   my $a = do { my $x = 'a'; join ',', map { $x++ } 1 .. @{$f->{args}} };
   my $lastarg = ${$f->{args}}[-1];
 
-  if ($f->{flags}{n}) {
-    if ($f->{flags}{p}) {
+  if ($f->{flags}{'T'}) {
+    if ($f->{flags}{'p'}) {
       return "#define $n $DPPP(my_$n)\n" .
              "#define Perl_$n $DPPP(my_$n)";
     }
@@ -324,8 +453,8 @@ sub make_embed
 #  undef $n
 #endif
 UNDEF
-    if ($f->{flags}{p}) {
-      if ($f->{flags}{f}) {
+    if ($f->{flags}{'p'}) {
+      if ($f->{flags}{'f'}) {
         return "#define Perl_$n $DPPP(my_$n)";
       }
       elsif (@$lastarg && $lastarg->[0] =~ /\.\.\./) {
@@ -424,7 +553,7 @@ You should use F<ppport.h> in modern code so that your code will work
 with the widest range of Perl interpreters possible, without significant
 additional work.
 
-You should attempt older code to fully use F<ppport.h>, because the
+You should attempt to get older code to fully use F<ppport.h>, because the
 reduced pollution of newer Perl versions is an important thing. It's so
 important that the old polluting ways of original Perl modules will not be
 supported very far into the future, and your module will almost certainly
@@ -434,7 +563,7 @@ having done the electronic ecology some good.
 =head2 How to use ppport.h
 
 Don't direct the users of your module to download C<Devel::PPPort>.
-They are most probably no XS writers. Also, don't make F<ppport.h>
+They are most probably not XS writers. Also, don't make F<ppport.h>
 optional. Rather, just take the most recent copy of F<ppport.h> that
 you can find (e.g. by generating it with the latest C<Devel::PPPort>
 release from CPAN), copy it into your project, adjust your project to
@@ -478,20 +607,51 @@ in threaded and non-threaded configurations.
 
 =head2 Provided Perl compatibility API
 
-The header file written by this module, typically F<ppport.h>, provides
-access to the following elements of the Perl API that is not available
-in older Perl releases:
+The header file written by this module, typically F<ppport.h>, provides access
+to the following elements of the Perl API that are not otherwise available in
+Perl releases older than when the elements were first introduced.  (Note that
+many of these are not supported all the way back to __MIN_PERL__, but it may
+be that they are supported back as far as you need; see L</Supported Perl API,
+sorted by version> for that information.)
 
     __PROVIDED_API__
 
-=head2 Perl API not supported by ppport.h
+=head2 Supported Perl API, sorted by version
+
+The table in this section lists all the Perl API elements available, sorted by
+the version in which support starts.  This includes all the elements that
+F<ppport.h> helps out with, as well as those elements that it doesn't.
+
+In some cases, it doesn't make practical sense for elements to be supported
+earlier than they already are.  For example, UTF-8 functionality isn't
+provided prior to the release where it was first introduced.
+
+But in other cases, it just is that no one has implemented support yet.
+Patches welcome!  Some elements are ported backward for some releases, but not
+all the way to __MIN_PERL__.
+
+If an element, call it ELEMENT, is not on this list, try using this command to
+find out why:
+
+ perl ppport.h --api-info=ELEMENT
 
-There is still a big part of the API not supported by F<ppport.h>.
-Either because it doesn't make sense to back-port that part of the API,
-or simply because it hasn't been implemented yet. Patches welcome!
+A few of the entries in the list below are marked as DEPRECATED.  You should
+not use these for new code, and should be converting existing uses to use
+something better.
 
-Here's a list of the currently unsupported API, and also the version of
-Perl below which it is unsupported:
+Some of the entries in the list are marked as "experimental".  This means
+these should not generally be used.  They may be removed or changed without
+notice.  You can ask why they are experimental by sending email to
+L<mailto:perl5-porters@perl.org>.
+
+And some of the entries are marked as "undocumented".  This means that they
+aren't necessarily considered stable, and could be changed or removed in some
+future release without warning.  It is therefore a bad idea to use them
+without further checking.  It could be that these are considered to be for
+perl core use only; or it could be, though, that C<Devel::PPPort> doesn't know
+where to find their documentation, or that it's just an oversight that they
+haven't been documented.  If you want to use one, and potentially have it
+backported, first send mail to L<mailto:perl5-porters@perl.org>.
 
 =over 4
 
@@ -503,7 +663,7 @@ __UNSUPPORTED_API__
 
 If you find any bugs, C<Devel::PPPort> doesn't seem to build on your
 system, or any of its tests fail, please send a bug report to
-L<perlbug@perl.org|mailto:perlbug@perl.org>.
+L<https://github.com/Dual-Life/Devel-PPPort/issues/new>.
 
 =head1 AUTHORS
 
@@ -521,9 +681,9 @@ Version 2.x was ported to the Perl core by Paul Marquess.
 
 Version 3.x was ported back to CPAN by Marcus Holland-Moritz.
 
-=item * 
+=item *
 
-Versions >= 3.22 are maintained with support from Matthew Horsfall (alh).
+Versions >= 3.22 are maintained by perl5 porters
 
 =back
 
@@ -551,7 +711,7 @@ package Devel::PPPort;
 use strict;
 use vars qw($VERSION $data);
 
-$VERSION = '3.52';
+$VERSION = '3.57';
 
 sub _init_data
 {
@@ -607,6 +767,8 @@ SKIP
 
 %include ppphdoc { indent => '|>' }
 
+%include inctools
+
 %include ppphbin
 
 __DATA__
@@ -628,44 +790,46 @@ __DATA__
 
 %include limits
 
+%include variables
+
+%include subparse
+
+%include newCONSTSUB
+
+%include magic_defs
+
 %include misc
 
+%include sv_xpvf
+
+%include SvPV
+
 %include warn
 
+%include format
+
 %include uv
 
 %include memory
 
-%include magic_defs
-
 %include mess
 
-%include variables
-
 %include mPUSH
 
 %include call
 
 %include newRV
 
-%include newCONSTSUB
-
 %include MY_CXT
 
-%include format
-
 %include SvREFCNT
 
 %include newSV_type
 
 %include newSVpv
 
-%include SvPV
-
 %include Sv_set
 
-%include sv_xpvf
-
 %include shared_pv
 
 %include HvNAME
@@ -688,8 +852,12 @@ __DATA__
 
 %include strlfuncs
 
+%include utf8
+
 %include pv_tools
 
+%include locale
+
 #endif /* _P_P_PORTABILITY_H_ */
 
 /* End of File ppport.h */
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/RealPPPort_xs.PL b/gnu/usr.bin/perl/dist/Devel-PPPort/RealPPPort_xs.PL
new file mode 100644 (file)
index 0000000..d929b8a
--- /dev/null
@@ -0,0 +1,128 @@
+################################################################################
+#
+#  RealPPPort_xs.PL -- generate RealPPPort.xs
+#
+################################################################################
+#
+#  Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
+#  Version 2.x, Copyright (C) 2001, Paul Marquess.
+#  Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
+#
+#  This program is free software; you can redistribute it and/or
+#  modify it under the same terms as Perl itself.
+#
+################################################################################
+
+use strict;
+$^W = 1;
+require "./parts/ppptools.pl";
+
+my %SECTION = (
+  xshead => { code => '', header => "/* ---- code from __FILE__ ---- */" },
+  xsinit => { code => '', header => "/* ---- code from __FILE__ ---- */" },
+  xsmisc => { code => '', header => "/* ---- code from __FILE__ ---- */" },
+  xsboot => { code => '', header => "/* ---- code from __FILE__ ---- */", indent => "\t" },
+  xsubs  => { code => '', header => <<ENDHEADER },
+##----------------------------------------------------------------------
+##  XSUBs for testing the implementation in __FILE__
+##----------------------------------------------------------------------
+ENDHEADER
+);
+
+if (not exists $ENV{PERL_NO_GET_CONTEXT} or $ENV{PERL_NO_GET_CONTEXT}) {
+$SECTION{xshead}{code} .= <<END;
+#define PERL_NO_GET_CONTEXT
+END
+}
+
+my $file;
+my $sec;
+
+for $file (all_files_in_dir('parts/inc')) {
+  my $spec = parse_partspec($file);
+
+  my $msg = 0;
+  for $sec (keys %SECTION) {
+    if (exists $spec->{$sec}) {
+      $msg++ or print "adding XS code from $file\n";
+      if (exists $SECTION{$sec}{header}) {
+        my $header = $SECTION{$sec}{header};
+        $header =~ s/__FILE__/$file/g;
+        $SECTION{$sec}{code} .= $header . "\n";
+      }
+      $SECTION{$sec}{code} .= $spec->{$sec} . "\n";
+    }
+  }
+}
+
+my $data = do { local $/; <DATA> };
+
+for $sec (keys %SECTION) {
+  my $code = $SECTION{$sec}{code};
+  if (exists $SECTION{$sec}{indent}) {
+    $code =~ s/^/$SECTION{$sec}{indent}/gm;
+  }
+  $code =~ s/[\r\n]+$//;
+  $data =~ s/^__\U$sec\E__$/$code/m;
+}
+
+open FH, ">RealPPPort.xs" or die "RealPPPort.xs: $!\n";
+print FH $data;
+close FH;
+
+exit 0;
+
+__DATA__
+/*******************************************************************************
+*
+*  !!!!! Do NOT edit this file directly! -- Edit RealPPPort_xs.PL instead. !!!!!
+*
+*  This file was automatically generated from the definition files in the
+*  parts/inc/ subdirectory by PPPort_xs.PL. To learn more about how all this
+*  works, please read the F<HACKERS> file that came with this distribution.
+*
+********************************************************************************
+*
+*  Perl/Pollution/Portability
+*
+********************************************************************************
+*
+*  Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
+*  Version 2.x, Copyright (C) 2001, Paul Marquess.
+*  Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
+*
+*  This program is free software; you can redistribute it and/or
+*  modify it under the same terms as Perl itself.
+*
+*******************************************************************************/
+
+/* ========== BEGIN XSHEAD ================================================== */
+
+__XSHEAD__
+
+/* =========== END XSHEAD =================================================== */
+
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
+
+/* ========== BEGIN XSINIT ================================================== */
+
+__XSINIT__
+
+/* =========== END XSINIT =================================================== */
+
+#include "ppport.h"
+
+/* ========== BEGIN XSMISC ================================================== */
+
+__XSMISC__
+
+/* =========== END XSMISC =================================================== */
+
+MODULE = Devel::PPPort          PACKAGE = Devel::PPPort
+
+BOOT:
+__XSBOOT__
+
+__XSUBS__
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/TODO b/gnu/usr.bin/perl/dist/Devel-PPPort/TODO
new file mode 100644 (file)
index 0000000..2a26d01
--- /dev/null
@@ -0,0 +1,345 @@
+TODO:
+
+* > 3. In several cases, "perl ppport.h --copy=.new" output a new file in
+  > which the only change was the addition of "#include "ppport.h"". In each
+  > case, that actually wasn't necessary because the source file in question
+  > already #included another source file which #included ppport.h itself.
+  > Would it be possible for the analyzer to follow #include directives to
+  > spot cases like this?
+
+  Uh, well, I guess it would be possible. But I have some concerns:
+
+  1. ppport.h is already too big. :-)
+
+  2. There is code in ppport.h to actually remove an
+
+       #include "ppport.h"
+
+     if it appears not to be needed. If it's not needed in your
+     included file, it might be dropped from there and moved to
+     the other file that included the first one. This would make
+     the logic much more complicated.
+
+  3. As ppport.h is configurable, it's not (always) a good idea
+     to put it into a file that's included from another file.
+
+  I guess I'll have to think about this a little more. Maybe I can
+  come up with a fancy solution that doesn't increase the code size
+  too much.
+
+
+* On 14/12/06, Nicholas Clark <nick@ccl4.org> wrote:
+  > On Thu, Dec 14, 2006 at 05:03:24AM +0100, Andreas J. Koenig wrote:
+  >
+  > > Params::Validate and Clone suffer from the same cold:
+  >
+  > The same patch will make both compile and pass tests.
+  > I'm wondering if it might be better to totally drop SVt_PBVM and let source
+  > code fail to compile.
+
+  I don't think so. Because :
+  1. your redefinition of SVt_PBVM is probably what most XS modules want
+  2. anyway, if we remove it from the core, it might appear in Devel::PPPort :)
+
+
+* maybe backport bytes_from_utf8() for 5.6.0 (or even before)?
+
+* check which of the following we need to support:
+
+    amagic_generation
+    AMG_names
+    an
+    Argv
+    argvgv
+    argvoutgv
+    basetime
+    beginav
+    block_type
+    bodytarget
+    bufend
+    bufptr
+    check
+    chopset
+    Cmd
+    compcv
+    compiling
+    comppad
+    comppad_name
+    comppad_name_fill
+    copline
+    cop_seqmax
+    cryptseen
+    cshlen
+    cshname
+    curcop
+    curinterp
+    curpad
+    curpm
+    curstash
+    curstname
+    dbargs
+    DBgv
+    DBline
+    DBsignal
+    DBsingle
+    DBsub
+    DBtrace
+    debstash
+    debug
+    defgv
+    defoutgv
+    defstash
+    delaymagic
+    diehook
+    dirty
+    doextract
+    doswitches
+    do_undump
+    dowarn
+    egid
+    encoding
+    endav
+    envgv
+    errgv
+    error_count
+    errors
+    euid
+    eval_root
+    evalseq
+    eval_start
+    expect
+    fdpid
+    filemode
+    firstgv
+    fold
+    forkprocess
+    formfeed
+    formtarget
+    freq
+    generation
+    gensym
+    gid
+    hexdigit
+    hints
+    incgv
+    in_eval
+    in_my
+    inplace
+    lastfd
+    last_in_gv
+    last_lop
+    last_lop_op
+    lastscream
+    laststatval
+    laststype
+    last_uni
+    lex_brackets
+    lex_brackstack
+    lex_casemods
+    lex_casestack
+    lex_defer
+    lex_dojoin
+    lex_expect
+    lex_formbrack
+    lex_inpat
+    lex_inwhat
+    lex_op
+    lex_repl
+    lex_starts
+    lex_state
+    lex_stuff
+    lineary
+    linestr
+    localizing
+    main_cv
+    main_root
+    mainstack
+    main_start
+    markstack
+    markstack_max
+    markstack_ptr
+    max_intro_pending
+    maxo
+    maxscream
+    maxsysfd
+    min_intro_pending
+    minus_a
+    minus_c
+    minus_F
+    minus_l
+    minus_n
+    minus_p
+    multi_close
+    multi_end
+    multi_open
+    multi_start
+    na
+    nexttoke
+    nexttype
+    nextval
+    nice_chunk
+    nice_chunk_size
+    No
+    no_aelem
+    no_dir_func
+    no_func
+    no_mem
+    nomemok
+    no_modify
+    no_myglob
+    no_security
+    no_sock_func
+    no_symref
+    no_usym
+    no_wrongref
+    nrs
+    oldbufptr
+    oldname
+    oldoldbufptr
+    op
+    opargs
+    op_desc
+    op_mask
+    op_name
+    op_seq
+    origalen
+    origargc
+    origargv
+    origenviron
+    origfilename
+    osname
+    padix
+    padix_floor
+    pad_reset_pending
+    patchlevel
+    patleave
+    perldb
+    perl_destruct_level
+    pidstatus
+    ppaddr
+    preambleav
+    preambled
+    preprocess
+    profiledata
+    regdummy
+    regendp
+    regeol
+    reginput
+    regkind
+    reglastparen
+    regsize
+    regstartp
+    restartop
+    rs
+    rsfp
+    rsfp_filters
+    runops
+    savestack
+    savestack_ix
+    savestack_max
+    sawampersand
+    scopestack
+    scopestack_ix
+    scopestack_max
+    screamfirst
+    screamnext
+    secondgv
+    signals
+    sig_name
+    sig_num
+    simple
+    sortcop
+    sortstash
+    splitstr
+    stack_base
+    stack_max
+    stack_sp
+    statbuf
+    statcache
+    statgv
+    statname
+    statusvalue
+    stdingv
+    sub_generation
+    subline
+    subname
+    Sv
+    sv_arenaroot
+    sv_count
+    sv_no
+    sv_objcount
+    sv_root
+    sv_undef
+    sv_yes
+    tainted
+    tainting
+    timesbuf
+    tmps_floor
+    tmps_ix
+    tmps_max
+    tmps_stack
+    tokenbuf
+    top_env
+    toptarget
+    uid
+    unsafe
+    varies
+    vtbl_amagic
+    vtbl_amagicelem
+    vtbl_arylen
+    vtbl_bm
+    vtbl_dbline
+    vtbl_env
+    vtbl_envelem
+    vtbl_glob
+    vtbl_isa
+    vtbl_isaelem
+    vtbl_mglob
+    vtbl_pack
+    vtbl_packelem
+    vtbl_pos
+    vtbl_sig
+    vtbl_sigelem
+    vtbl_substr
+    vtbl_sv
+    vtbl_taint
+    vtbl_uvar
+    vtbl_vec
+    warnhook
+    warn_nl
+    warn_nosemi
+    warn_reserved
+    warn_uninit
+    watchaddr
+    watchok
+    Yes
+
+* have an --env option for soak to set env variable combinations
+
+* only overwrite generated files if they actually changed
+
+* try to make parts/apicheck.pl automatically find NEED_ #defines
+
+* add support for my_vsnprintf?
+
+* try to perform some core consistency checks:
+
+  - check if 'd' flag in embed.fnc matches with
+    supplied documentation
+
+  - check if all public API is documented
+
+* check (during make regen?) if MAX_PERL in PPPort_pm.PL
+  needs to be updated
+
+* see if we can implement sv_catpvf() for < 5.004
+
+* MULTICALL ?
+
+* improve apicheck (things like utf8_mg_pos_init() are
+  not currently checked)
+
+* more documentation, more tests
+
+* Resolve dependencies in Makefile.PL and remind of
+  running 'make regen'
index c9ff8a4..686ac57 100644 (file)
@@ -1,6 +1,6 @@
 ################################################################################
 #
-#  apicheck_c.PL -- generate apicheck.c
+#  apicheck_c.PL -- generate apicheck.c by running parts/apicheck.pl
 #
 ################################################################################
 #
index 72c1929..58f0f24 100644 (file)
@@ -40,23 +40,27 @@ my %opt = (
   install   => 1,
   oneshot   => 0,
   configure => 0,
+  jobs => 1,
   'test-archives' => 0,
 );
 
+my $Configure_extra = '-Dman1dir="none" -Dman3dir="none"';
+
+
 my %config = (
   default     => {
-                   config_args => '-des',
+                   config_args => "-des $Configure_extra" ,
                  },
   thread      => {
-                   config_args     => '-des -Dusethreads',
+                   config_args     => "-des -Dusethreads $Configure_extra",
                    masked_versions => [ qr/^5\.00[01234]/ ],
                  },
   thread5005  => {
-                   config_args     => '-des -Duse5005threads',
+                   config_args     => "-des -Duse5005threads $Configure_extra",
                    masked_versions => [ qr/^5\.00[012345]|^5\.(9|\d\d)|^5\.8\.9/ ],
                  },
   debug       => {
-                   config_args => '-des -Doptimize=-g',
+                   config_args => "-des -Doptimize=-g $Configure_extra",
                  },
 );
 
@@ -161,10 +165,14 @@ GetOptions(\%opt, qw(
   test-archives=i
   patch!
   oneshot
+  jobs=i
 )) or pod2usage(2);
 
 my %current;
 
+my $job_string = "";
+$job_string = "-j$opt{jobs}" if $opt{jobs} != 1;
+
 if ($opt{patch} || $opt{oneshot}) {
   @{$opt{perl}} == 1 or die "Exactly one --perl must be given with --patch or --oneshot\n";
   my $perl = $opt{perl}[0];
@@ -359,10 +367,10 @@ sub build_and_install
   if (-f "x2p/makefile") {
     run_or_die("sed -i -e '/^.*<builtin>/d' -e '/^.*<built-in>/d' -e '/^.*<command line>/d' -e '/^.*<command-line>/d' makefile x2p/makefile");
   }
-  run_or_die("make all");
-  run("make test") if $opt{test};
+  run_or_die("make $job_string all");
+  run("TEST_JOBS=$opt{jobs} make $job_string test") if $opt{test};
   if ($opt{install}) {
-    run_or_die("make install");
+    run("make $job_string install");
   }
   else {
     print "\n*** NOT INSTALLING PERL ***\n\n";
@@ -540,6 +548,10 @@ buildperl.pl - build/install perl distributions
                               /tmp/perl/install/<config>/<perl>]
 
   --config=configuration      build this configuration [MULTI]
+                              The possibilities for this parameter are:
+                                'thread', 'thread5005', 'debug';
+                                 and 'default',
+                                 which means none of the others.
                               [default: all possible configurations]
 
   --perl=version              build this version of perl [MULTI]
@@ -559,6 +571,9 @@ buildperl.pl - build/install perl distributions
                               directory (extra arguments are passed to
                               Configure)
 
+  -j N                        Build and test with N parallel jobs
+                              [default: 1]
+
   options tagged with [MULTI] can be given multiple times
 
   options tagged with [EXPAND] expand the following items
index 465c3cc..e2437a5 100644 (file)
@@ -2,6 +2,8 @@
 #
 #  devtools.pl -- various utility functions
 #
+#  NOTE: This will only be called by the overarching (modern) perl
+#
 ################################################################################
 #
 #  Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
 #
 ################################################################################
 
+use Data::Dumper;
+$Data::Dumper::Sortkeys = 1;
 use IO::File;
+use warnings;   # Can't use strict because of %opt passed from caller
+require "./parts/inc/inctools";
 
 eval "use Term::ANSIColor";
 $@ and eval "sub colored { pop; @_ }";
@@ -67,7 +73,8 @@ sub run
     status    => $? >> 8,
     stdout    => [<$out>],
     stderr    => [<$err>],
-    didnotrun => 0,
+    didnotrun => 0,         # Note that currently this will always be 0
+                            # This must have been used in earlier versions
   );
 
   unlink "tmp.out", "tmp.err";
@@ -75,6 +82,24 @@ sub run
   $? & 128 and $rval{core}   = 1;
   $? & 127 and $rval{signal} = $? & 127;
 
+  # This is expected and isn't an error.
+  @{$rval{stderr}} = grep { $_ !~ /make.*No rule .*realclean/ } @{$rval{stderr}};
+
+  if (    exists $rval{core}
+      ||  exists $rval{signal}
+      || ($opt{debug} > 2 && @{$rval{stderr}} && $rval{status})
+      || ($opt{debug} > 3 && @{$rval{stderr}})
+      || ($opt{debug} > 4 && @{$rval{stdout}}))
+  {
+    print STDERR "Returning\n", Dumper \%rval;
+
+    # Under verbose, runtool already output the call string
+    unless ($opt{verbose}) {
+        print STDERR "from $prog ", join ", ", @args;
+        print STDERR "\n";
+    }
+  }
+
   return \%rval;
 }
 
@@ -93,8 +118,10 @@ sub ask($)
   my $q = shift;
   my $a;
   local $| = 1;
-  print "\n$q [y/n] ";
-  do { $a = <>; } while ($a !~ /^\s*([yn])\s*$/i);
+  do {
+    print "\a\n$q [y/n] ";
+    $a = <>; }
+  while ($a !~ /^\s*([yn])\s*$/i);
   return lc $1 eq 'y';
 }
 
@@ -120,4 +147,80 @@ sub eta
   return sprintf "%02d:%02d:%02d", $h, $m, $s;
 }
 
+sub get_and_sort_perls($)
+{
+    my $opt = shift;
+
+    my $starting;
+    $starting = int_parse_version($opt->{'debug-start'})
+                                                       if $opt->{'debug-start'};
+
+    # Uses the opt structure parameter to find the perl versions to use this
+    # run, and returns an array with a hash representing blead in the 0th
+    # element and the oldest in the final one.  Each entry looks like
+    #     {
+    #       'version' => '5.031002',
+    #       'file' => '5031002',
+    #       'path' => '/home/khw/devel/bin/perl5.31.2'
+    #     },
+    #
+    # Get blead and all other perls
+    my @perls = $opt->{blead};
+    for my $dir (split ",", $opt->{install}) {
+        push @perls, grep !/-RC\d+/, glob "$dir/bin/perl5.*";
+    }
+
+    # Normalize version numbers into 5.xxxyyy, and convert each element
+    # describing the perl to be a hash with keys 'version' and 'path'
+    for (my $i = 0; $i < @perls; $i++) {
+        my $version = `$perls[$i] -e 'print \$]'`;
+        my $file = int_parse_version($version);
+        $version = format_version($version);
+
+        # Make this entry a hash with its version, file name, and path
+        $perls[$i] = { version =>  $version,
+                       file    =>  $file,
+                       path    =>  $perls[$i],
+                     };
+    }
+
+    # Sort in descending order.  We start processing the most recent perl
+    # first.
+    @perls = sort { $b->{file} <=> $a->{file} } @perls;
+
+    # Override blead's version if specified.
+    if (exists $opt->{'blead-version'}) {
+        $perls[0]{version} = format_version($opt->{'blead-version'});
+    }
+
+    my %seen;
+
+    # blead's todo is its version plus 1.  Otherwise, each todo is the
+    # previous one's.  Also get rid of duplicate versions.
+    $perls[0]{todo} = $perls[0]{file} + 1;
+    $seen{$perls[0]{file}} = 1;
+    for my $i (1 .. $#perls) {
+        last unless defined $perls[$i];
+        if (    exists $seen{$perls[$i]{file}}
+            || ($starting && $perls[$i]{file} gt $starting)
+        ) {
+            splice @perls, $i, 1;
+            redo;
+        }
+
+        $seen{$perls[$i]{file}} = 1;
+        $perls[$i]{todo} = $perls[$i-1]{file};
+    }
+
+    # The earliest perl gets a special marker key, consisting of the proper
+    # file name
+    $perls[$#perls]{final} = $perls[$#perls]{file};
+
+    if ($opt{debug}) {
+        print STDERR "The perls returned are: ", Dumper \@perls;
+    }
+
+    return \@perls;
+}
+
 1;
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/devel/mkapidoc.pl b/gnu/usr.bin/perl/dist/Devel-PPPort/devel/mkapidoc.pl
new file mode 100644 (file)
index 0000000..b3a5946
--- /dev/null
@@ -0,0 +1,132 @@
+################################################################################
+#
+#  mkapidoc.pl -- generate apidoc.fnc from scanning the Perl source
+#
+# Should be called from the base directory for Devel::PPPort.
+# If that happens to be in the /dist directory of a perl build structure, and
+# you're doing the standard thing, no parameters are required.  Otherwise
+# (again with the standard things, its single parameter is the base directory
+# of the perl source tree to be used.
+#
+################################################################################
+#
+#  Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
+#  Version 2.x, Copyright (C) 2001, Paul Marquess.
+#  Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
+#
+#  This program is free software; you can redistribute it and/or
+#  modify it under the same terms as Perl itself.
+#
+################################################################################
+
+use warnings;
+use strict;
+
+my $PERLROOT = $ARGV[0];
+$PERLROOT = '../..' unless $PERLROOT;
+
+die "'$PERLROOT' is invalid, or you haven't successfully run 'make' in it"
+                                                unless -e "$PERLROOT/warnings.h";
+    
+my $config= "$PERLROOT/config_h.SH";
+my %seen;
+
+# Find the files in MANIFEST that are core, but not embed.fnc, nor .t's
+my @files;
+open(my $m, '<', "$PERLROOT/MANIFEST") || die "MANIFEST:$!";
+while (<$m>) {                      # In embed.fnc,
+    chomp;
+    next if m! ^ embed \. fnc \t !x;
+    next if m! ^ ( cpan | dist | t) / !x;
+    next if m! [^\t]* \.t \t !x;
+    push @files, $_;
+}
+
+# These files are also needed.  This might have to be added to in the future.
+push @files, qw(pod/perlguts.pod lib/perlxs.pod);
+
+# Find the apidoc entries in all these files
+my @entries;
+for (@files) {
+
+    s/ \t .* //x;
+    open my $f, '<', "$PERLROOT/$_" or die "Can't open $_: $!";
+
+    my $line;
+    while (defined ($line = <$f>)) {
+        chomp $line;
+        next unless $line =~ /^ =for \s+ apidoc \s+ 
+                             (  [^|]* \|        # flags
+                                [^|]* \|        # return type
+                              ( [^|]* )         # name
+                                (?: \| .* )?    # optional args
+                             ) /x;
+        my $meat = $1;
+        my $name = $2;
+
+        if (exists $seen{$name}) {
+            if ($seen{$name} ne $meat) {
+                print STDERR
+                    "Contradictory prototypes for $name,\n$seen{$name}\n$meat\n";
+            }
+            next;
+        }
+
+        $meat =~ s/[ \t]+$//;
+        $seen{$name} = $meat;
+
+        # Many of the entries omit the "d" flag to indicate they are
+        # documented, but we wouldn't have found this unless it was documented
+        # in the source
+        $meat =~ s/\|/d|/ unless $meat =~ /^[^|]*d/;
+
+        push @entries, "$meat\n";
+    }
+}
+
+# The entries in config_h.SH are also (documented) macros that are
+# accessible to XS code, and ppport.h backports some of them.  We
+# use only the unconditionally compiled parameterless ones (as
+# that"s all that"s backported so far, and we don"t have to know
+# the types of the parameters).
+open(my $c, "<", $config) or die "$config: $!";
+my $if_depth = 0;   # We don"t use the ones within #if statements
+                    # The #ifndef that guards the whole file is not
+                    # noticed by the code below
+while (<$c>) {
+    $if_depth ++ if / ^ \# [[:blank:]]* (ifdef | if\ defined ) /x;
+    $if_depth -- if $if_depth > 0 && / ^ \# [[:blank:]]* endif /x;
+    next unless $if_depth <= 0;
+
+    # We are only interested in #defines with no parameters
+    next unless /^ \# [[:blank:]]* define [[:blank:]]+
+                        ( [A-Za-z][A-Za-z0-9]* )
+                        [[:blank:]]
+                /x;
+    next if $seen{$1}; # Ignore duplicates
+    push @entries, "Amnd||$1\n";
+    $seen{$1}++;
+}
+close $c or die "Close failed: $!";
+
+open my $out, ">", "parts/apidoc.fnc"
+                        or die "Can't open 'parts/apidoc.fnc' for writing: $!";
+require "./parts/inc/inctools";
+print $out <<EOF;
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+:
+:  !!!! Do NOT edit this file directly! -- Edit devel/mkapidoc.sh instead. !!!!
+:
+:  This file was automatically generated from the API documentation scattered
+:  all over the Perl source code. To learn more about how all this works,
+:  please read the F<HACKERS> file that came with this distribution.
+:
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+
+:
+: This file lists all API functions/macros that are documented in the Perl
+: source code, but are not contained in F<embed.fnc>.
+:
+EOF
+print $out sort sort_api_lines @entries;
+close $out or die "Close failed: $!";
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/devel/mkppport_fnc.pl b/gnu/usr.bin/perl/dist/Devel-PPPort/devel/mkppport_fnc.pl
new file mode 100644 (file)
index 0000000..26adfea
--- /dev/null
@@ -0,0 +1,165 @@
+use Data::Dumper;
+$Data::Dumper::Sortkeys=1;
+################################################################################
+#
+#  mkppport_fnc.pl -- generate ppport.fnc
+#
+# This program should be run when regenerating the data for ppport.h
+# (devel/regenerate).  It should be run after parts/embed.fnc is updated, and
+# after mkapidoc.pl has been run.
+#
+# Its purpose is to generate ppport.fnc, a file which has the same syntax as
+# embed.fnc and apidoc.fnc, but contains entries that should only be tested
+# when ppport.h is enabled during the test.
+#
+# Thus it includes items that are Devel::PPPort only, and items that it
+# figures out aren't tested by the other two functions.
+#
+# These otherwise-untested items are those:
+#   1) which D:P provides and are not found in embed.fnc nor apidoc.fnc, or
+#      aren't listed as public API in those files
+#   2) and for which tests can be automatically generated that they at least
+#      compile.
+#
+# The reason that an item isn't in those two files is that it is an
+# undocumented macro.  (If it's not a macro, it has to be in embed.fnc, and if
+# it's documented, mkapidoc.sh would find it and place it in apidoc.fnc.)
+#
+# And, the reason we can't generate tests for undocumented macros is we don't
+# readily know the types of the parameters, which we need to get a C program
+# to compile.  We could easily discover the number of parameters, but gleaning
+# their types is harder.
+#
+# Instead of expending effort to cope with undocumented items, document them
+# instead, improving the product doubly.
+#
+# However, if the macro has no parameters, there are no types to need to know.
+# And, it turns out, that it may be that many of these macros (which typically
+# just define constants) really don't need to be documented.  They may be
+# something that is considered to be provided, but should actually have been
+# internal constants, not exposed to the outside world.  And they're a lot of
+# them.  So this function was written to handle them.
+#
+# Algorithms could be devised to read the =xsubs sections and associate code
+# found therein with the item, and to include the code as the test for the
+# item, but again, it would be better to just document them.
+#
+# Later it was discovered that ppport provides support for non-public items.
+# We can list those here too, so that tests can be generated.  (An alternative
+# would be to invent a new flag that means non-public, but test and use that
+# in apidoc.fnc.)
+################################################################################
+#
+#  This program is free software; you can redistribute it and/or
+#  modify it under the same terms as Perl itself.
+#
+################################################################################
+
+use strict;
+    use Data::Dumper;
+    $Data::Dumper::Sortkeys=1;
+use warnings;
+
+my $main_dir = $0;
+
+# Up one level
+$main_dir =~ s;[^/]*$;;;
+$main_dir =~ s;/$;;;
+
+# Up a second level
+$main_dir =~ s;[^/]*$;;;
+$main_dir =~ s;/$;;;
+
+$main_dir = '.' unless $main_dir;
+require "$main_dir/parts/ppptools.pl";
+
+
+my @provided = map { /^(\w+)/ ? $1 : () } `$^X ppport.h --list-provided`;
+
+# First, we look for non-API macros that are documented and furnished by us in
+# spite of not being public
+my @non_public_provided;
+my $api_fnc = "$main_dir/parts/apidoc.fnc";
+open F, "<",  $api_fnc or die "Can't open $api_fnc: $!";
+while (<F>) {
+    my $line = $_;
+    next if $line =~ / ^ [^|]* A /x;    # Skip API
+    chomp $line;
+    push @non_public_provided, $line
+        # Look for the name in the third '|' separated field
+        if grep { $line =~ / ^ [^|]* \| [^|]* \| \s* $_ \s* (?: $ |\| ) /x }
+                                                                    @provided;
+}
+
+my @embeds = parse_embed('parts/embed.fnc', $api_fnc);
+
+# Look for %include lines in the ppport.h generator
+my $PPPort = "$main_dir/PPPort_pm.PL";
+open F, "<", $PPPort or die "Can't open $PPPort: $!";
+
+my @no_parameters;
+while (<F>) {
+    next unless/^%include (\w+)/;
+    my $implementation = parse_partspec("$main_dir/parts/inc/$1")->{'implementation'};
+
+    # Find no-parameter entries using __UNDEFINED__ that aren't in the other.
+    # We know these are provided.
+    while ($implementation =~ /^__UNDEFINED__\s+(\w+)\s/mg) {
+        push @no_parameters, $1 unless grep { $1 eq $_->{'name'} } @embeds;
+    }
+}
+
+# Repeat, but look for ones that are 'provided' that don't use __UNDEFINED__
+seek F, 0, 0;
+while (<F>) {
+    next unless/^%include (\w+)/;
+    my $implementation = parse_partspec("$main_dir/parts/inc/$1")->{'implementation'};
+
+    while ($implementation =~ /^#\s*define\s+(\w+)\s/mg) {
+        next if grep { $1 eq $_ } @no_parameters;
+        next if grep { $1 eq $_->{'name'} } @embeds;
+        next unless grep { $1 eq $_ } @provided;
+        push @no_parameters, $1;
+    }
+}
+
+my @out = 'Am|void|sv_magic_portable|NN SV* sv|NULLOK SV* obj|int how|NULLOK const char* name|I32 namlen';
+push @out, @non_public_provided;
+push @out, map { "Amn|void|$_" } @no_parameters;
+
+@out = sort sort_api_lines @out;
+
+my $out = "parts/ppport.fnc";
+open OUT, ">", $out or die "Could open '$out' for writing: $!";
+
+print OUT <<EOF;
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+:
+:  !!!! Do NOT edit this file directly! -- Edit devel/mkppport_fnc.pl instead. !!!!
+:
+:  Perl/Pollution/Portability
+:
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+:
+:  Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
+:  Version 2.x, Copyright (C) 2001, Paul Marquess.
+:  Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
+:
+:  This program is free software; you can redistribute it and/or
+:  modify it under the same terms as Perl itself.
+:
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+:
+: This file lists all API functions/macros that are provided purely
+: by Devel::PPPort, or that are not public.  It is in the same format as the
+: F<embed.fnc> that ships with the Perl source code.
+:
+: Since these are used only to provide the argument types, it's ok to have the
+: return value be void for some where it's an issues
+
+EOF
+
+print OUT join "\n", @out;
+print OUT "\n";
+
+close OUT;
index 2eb9ea3..d3eba62 100644 (file)
@@ -3,6 +3,9 @@
 #
 #  mktodo -- generate baseline and todo files by running mktodo.pl
 #
+# It calls plain 'mktodo' on each perl version it finds based on the input
+# parameters.
+#
 ################################################################################
 #
 #  Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
@@ -18,41 +21,58 @@ use strict;
 use Getopt::Long;
 
 require './devel/devtools.pl';
+require './parts/ppptools.pl';
 
 our %opt = (
-  base    => 0,
-  check   => 1,
+  base    => 0,     # If specified, this will generate base files, not todo ones
+  check   => 1,     # Do extra checking
   verbose => 0,
   install => '/tmp/perl/install/default',
   blead   => 'bleadperl-debug',
+  debug   => 0,
+ 'debug-start' => "",   # build an incomplete output, starting with the
+                        # specified perl of the form perl5.xxxyyy
 );
 
-GetOptions(\%opt, qw( base check! verbose install=s blead=s blead-version=s )) or die;
-
-identify();
-
-my $outdir = 'parts/todo';
+# The way this works, is it expects to find perl binaries for a bunch of
+# different versions in a given directory.  This defaults to the 'install' one
+# listed above, but is overriddable by the --install parameter.  Comma
+# separating --install allows multiple source directories.
+# It also uses blead, again with an overridable default.
+#
+# It first verifies that the test file works properly for blead.
+#
+# Then it goes through the list of perl binaries sorted in decreasing order of
+# version number.  If something works in version n, but not in version n-1,
+# that means it was introduced (or perhaps fixed) in version n, and adds that
+# thing to the version n list.
+#
+# After everything is done, we have lists of what got added when.  The --base
+# parameter tells it to not use ppport.h when computing this.  Thus we get
+# what the official perls added when.  Without this parameter, we do use
+# ppport.h, so we get, as patched by ppport.h, what gets added when
 
-my @perls = sort { $b->{version} <=> $a->{version} }
-            map { { version => `$_ -e 'printf "%.6f", \$]'`, path => $_ } }
-            ($opt{blead}, grep !/-RC\d+/, glob "$opt{install}/*/bin/perl5.*");
+GetOptions(\%opt, qw( base check! verbose install=s blead=s blead-version=s
+                      debug=i debug-start=s)) or die;
 
-if (exists $opt{'blead-version'}) {
-  $perls[0]{version} = $opt{'blead-version'};
-}
+identify();
 
-for (1 .. $#perls) {
-  $perls[$_]{todo} = $perls[$_-1]{version};
-}
+my $perls_ref = get_and_sort_perls(\%opt);
 
-shift @perls;
+# Go through all the perls, creating a todo file for it.
+for (my $i = 0; $i < @$perls_ref; $i++) {
+  my $this_perl = @{$perls_ref}[$i];
+  my @args = ('--perl',     $this_perl->{path},
+              '--version',  $this_perl->{version},
+              '--todo-dir', (($opt{base}) ? 'parts/base' : 'parts/todo')
+             );
 
-for (@perls) {
-  my $todo = do { my $v = $_->{todo}; $v =~ s/\D+//g; $v };
-  -e "$outdir/$todo" and next;
-  my @args = ('--perl', $_->{path}, '--todo', "$outdir/$todo", '--version', "$_->{todo}");
+  push @args, '--blead' if $i == 0; # First one is blead
+  push @args, '--todo', $this_perl->{'todo'};
   push @args, '--base' if $opt{base};
+  push @args, "--debug=$opt{debug}" if $opt{debug};
   push @args, '--verbose' if $opt{verbose};
   push @args, '--nocheck' unless $opt{check};
+  push @args, '--final', $this_perl->{'final'} if $this_perl->{'final'};
   runperl('devel/mktodo.pl', @args) or die "error running mktodo.pl [$!] [$?]\n";
 }
index c479eab..53a2cad 100644 (file)
@@ -3,6 +3,8 @@
 #
 #  mktodo.pl -- generate baseline and todo files
 #
+# It makes the todo file for the single passed in perl binary.  If --base is
+# not specified it compiles with ppport.h.
 ################################################################################
 #
 #  Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
@@ -25,19 +27,33 @@ use Time::HiRes qw( gettimeofday tv_interval );
 require './devel/devtools.pl';
 
 our %opt = (
-  debug   => 0,
-  base    => 0,
-  verbose => 0,
-  check   => 1,
-  shlib   => 'blib/arch/auto/Devel/PPPort/PPPort.so',
+  blead     => 0,     # ? Is this perl blead
+  debug     => 0,
+  base      => 0,     # Don't use ppport.h when generating
+  verbose   => 0,
+  check     => 1,
+  final     => "",
+ 'todo-dir' => "",
+  todo      => "",    # If no --todo, this is a blead perl
+  shlib     => 'blib/arch/auto/Devel/PPPort/PPPort.so',
 );
 
 GetOptions(\%opt, qw(
-            perl=s todo=s version=s shlib=s debug base verbose check!
+perl=s todo=i blead todo-dir=s version=s shlib=s debug=i base final=s verbose check!
           )) or die;
 
 identify();
 
+my $todo_file;
+my $todo_version;
+if ($opt{todo}) {
+    $todo_file = "$opt{'todo-dir'}/$opt{todo}";
+    $todo_version = format_version_line($opt{todo});
+}
+
+# Pass this through the Make, to apicheck.pl
+$ENV{'DPPP_ARGUMENTS'} = "--todo-dir=$opt{'todo-dir'} --todo=$todo_version";
+
 print "\n", ident_str(), "\n\n";
 
 my $fullperl = `which $opt{perl}`;
@@ -45,8 +61,10 @@ chomp $fullperl;
 
 $ENV{SKIP_SLOW_TESTS} = 1;
 
-regen_all();
+# Generate the Makefile using the passed in perl
+regen_Makefile();
 
+# List of functions that are never considered undefined.  Add to as necessary
 my %stdsym = map { ($_ => 1) } qw (
   strlen
   snprintf
@@ -63,6 +81,8 @@ my %stdsym = map { ($_ => 1) } qw (
   sprintf
 );
 
+# Initialize %sym so that the keys are all the Text symbols for this perl,
+# output from the system's 'nm'
 my %sym;
 for (`$Config{nm} $fullperl`) {
   chomp;
@@ -70,28 +90,77 @@ for (`$Config{nm} $fullperl`) {
 }
 keys %sym >= 50 or die "less than 50 symbols found in $fullperl\n";
 
-my %all = %{load_todo($opt{todo}, $opt{version})};
+# %todo is initialized to be the symbols in the current todo file, like so:
+# {
+#   'UTF8_SAFE_SKIP' => 'U',
+#   'newSVsv_flags' => 'U',
+#   'newSVsv_nomg' => 'U',
+# }
+#
+# The values are the outputs from nm, plus 'E' from us, for Error
+my %todo = %{load_todo($todo_file, $todo_version)} if $opt{todo};
+
 my @recheck;
 
+# Get an exhaustive list from apicheck.i of symbols, what functions contain
+# them, and how many in each function.
+# symbol        fcn            count
+# ------        ---            -----
+# 'UV' => {
+#             'SvUVX'          => 1,
+#             'toFOLD_uvchr'   => 2,
+#             'sv_uni_display' => 1,
+#             ...
+# }
 my $symmap = get_apicheck_symbol_map();
 
+# In each iteration of the loop we create an apicheck.c.  This will contain a
+# generated wrapper function for each API function and macro.  The wrapper
+# contains one or more calls to its API element.  Then we attempt to compile
+# apicheck.c into apicheck.o.  If it compiles, then every API element exists
+# in this version of perl.  If not, we figure out which ones were undefined,
+# and set things up so that in the next iteration of the loop, the wrappers
+# for those elements are #ifdef'd out.
 for (;;) {
   my $retry = 1;
   my $trynm = 1;
+
   regen_apicheck();
 
 retry:
-  my(@new, @tmp, %seen);
+  my(@new, @already_in_sym, %seen);
 
   my $r = run(qw(make));
-  $r->{didnotrun} and die "couldn't run make: $!\n";
+  $r->{didnotrun} and die "couldn't run make: $!\n" .
+        join('', @{$r->{stdout}})."\n---\n".join('', @{$r->{stderr}});
+
+  # If there were warnings, we ask the user before continuing when creating
+  # the base files of blead.  This leads to a potential early exit when things
+  # aren't working right.
+  if ($opt{blead} && $opt{base}) {
+    undef $opt{blead};  # Only warn once.
+    if (@{$r->{stderr}}) {
+        print STDERR "Warnings and errors from compiling blead:\n";
+        print STDERR @{$r->{stderr}};
+        ask_or_quit("\nUnexpected warnings when compiling blead can lead to"
+                  . " wrong results.  Please examine the above list.\n"
+                  . "Shall I proceed?");
+    }
+    else {
+        print STDERR "blead compiled without warnings nor errors.\n"
+                   . "Proceeding with everything else\n";
+    }
+  }
 
+  # Examine stderr.  For each wrapper function listed in it, we create an
+  # 'E' (for error) entry.   If the function (possibly prefixed by '[Pp]erl')
+  # is in %sym, it is added to @already_in_sym.  Otherwise, @new.
   for my $l (@{$r->{stderr}}) {
     if ($l =~ /_DPPP_test_(\w+)/) {
       if (!$seen{$1}++) {
         my @s = grep { exists $sym{$_} } $1, "Perl_$1", "perl_$1";
         if (@s) {
-          push @tmp, [$1, "E (@s)"];
+          push @already_in_sym, [$1, "E (@s)"];
         }
         else {
           push @new, [$1, "E"];
@@ -99,22 +168,33 @@ retry:
       }
     }
   }
+  print STDERR __LINE__, ": \@new after make", Dumper \@new if $opt{debug} > 6;
 
   if ($r->{status} == 0) {
     my @u;
     my @usym;
 
+    # Here, apicheck.o was successfully created.  It likely will need
+    # functions from outside it in order to form a complete executable a.out.
+    # In the first iteration, look to see if all needed externs are available.
+    # (We don't actually try to create an a.out)
     if ($trynm) {
       @u = eval { find_undefined_symbols($fullperl, $opt{shlib}) };
       warn "warning: $@" if $@;
       $trynm = 0;
     }
 
+    # If it didn't find any undefined symbols, everything should be working.
+    # Run the test suite.
     unless (@u) {
       $r = run(qw(make test));
-      $r->{didnotrun} and die "couldn't run make test: $!\n";
-      $r->{status} == 0 and last;
+      $r->{didnotrun} and die "couldn't run make test: $!\n" .
+        join('', @{$r->{stdout}})."\n---\n".join('', @{$r->{stderr}});
 
+      $r->{status} == 0 and last;   # It worked!!
+
+      # Alas, something was wrong.  Add any undefined symbols listed in the
+      # output to our list
       for my $l (@{$r->{stderr}}) {
         if ($l =~ /undefined symbol: (\w+)/) {
           push @u, $1;
@@ -122,93 +202,191 @@ retry:
       }
     }
 
+    # For each undefined symbol
     for my $u (@u) {
+
+      # If this is an API symbol, $symmap->{$u} will exist and be a hash of
+      # keys, being all the symbols referred to within it (with their values
+      # btw being the count of occurrences in the element).
       for my $m (keys %{$symmap->{$u}}) {
+
+        # pthread_getspecific() is undefined.  khw doesn't know why.  But we
+        # have a bunch of things depending on it, so it doesn't work unless we
+        # ignore this apparently spurious issue.
+        next if $u eq 'pthread_getspecific';
+
         if (!$seen{$m}++) {
           my $pl = $m;
           $pl =~ s/^[Pp]erl_//;
           my @s = grep { exists $sym{$_} } $pl, "Perl_$pl", "perl_$pl";
+
+          # The comment for this entry that goes into the file that gets
+          # written includes any [Pp]erl prefix.
           push @new, [$m, @s ? "U (@s)" : "U"];
         }
       }
     }
   }
+  print STDERR __LINE__, ": \@new after getting undefs", Dumper \@new
+                                                            if $opt{debug} > 6;
 
-  @new = grep !$all{$_->[0]}, @new;
+  # Remove from @new all the current todo symbols
+  @new = grep !$todo{$_->[0]}, @new;
+  print STDERR __LINE__, ": \@new after removing current", Dumper \@new
+                                                            if $opt{debug} > 6;
 
+  # If none remain, start over with those we know about, minus the todo
+  # symbols.  khw doesn't understand why this is necessary
   unless (@new) {
-    @new = grep !$all{$_->[0]}, @tmp;
+    @new = grep !$todo{$_->[0]}, @already_in_sym;
+    print STDERR __LINE__, ": \@new after starting over", Dumper \@new
+                                                            if $opt{debug} > 6;
   }
 
+  # This retries once if nothing new was found (khw guesses that is just to
+  # be sure, or maybe it's because we ran nm the first time through)
   unless (@new) {
     if ($retry > 0) {
       $retry--;
-      regen_all();
+      regen_Makefile();
       goto retry;
     }
     print Dumper($r);
     die "no new TODO symbols found...";
   }
 
-  # don't recheck undefined symbols reported by the dynamic linker
+  # recheck symbols except undefined ones reported by the dynamic linker
   push @recheck, map { $_->[0] } grep { $_->[1] !~ /^U/ } @new;
 
+  # Display each newly found undefined symbol, and add it to the list of todo
+  # symbols
   for (@new) {
-    sym('new', @$_);
-    $all{$_->[0]} = $_->[1];
+    display_sym('new', @$_);
+    $todo{$_->[0]} = $_->[1];
   }
 
-  write_todo($opt{todo}, $opt{version}, \%all);
-}
+  print STDERR __LINE__, ": %todo at end of iteration ", Dumper \%todo
+                                                            if $opt{debug} > 6;
+
+  # Write the revised todo, so that apicheck.c when generated in the next
+  # iteration will have these #ifdef'd out
+  write_todo($todo_file, $todo_version, \%todo);
+} # End of loop
 
+# If we are to check our work, do so.  This verifies that each symbol
+# identified above is really a problem in this version.  (khw doesn't know
+# under what circumstances this becomes an issue)
+#
+# We go through each symbol on the @recheck list, and create an apicheck.c
+# with it enabled.
 if ($opt{check}) {
+
+  # Create something like '%3d'
   my $ifmt = '%' . length(scalar @recheck) . 'd';
+
   my $t0 = [gettimeofday];
 
   RECHECK: for my $i (0 .. $#recheck) {
     my $sym = $recheck[$i];
-    my $cur = delete $all{$sym};
 
-    sym('chk', $sym, $cur, sprintf(" [$ifmt/$ifmt, ETA %s]",
+    # Assume it will work
+    my $cur = delete $todo{$sym};
+
+    # Give a progress report
+    display_sym('chk', $sym, $cur, sprintf(" [$ifmt/$ifmt, ETA %s]",
                $i + 1, scalar @recheck, eta($t0, $i, scalar @recheck)));
 
-    write_todo($opt{todo}, $opt{version}, \%all);
+    # Write out the todo file without this symbol, meaning it will be enabled
+    # in the generated apicheck.c file
+    write_todo($todo_file, $todo_version, \%todo);
 
+    # E is not an nm symbol, but was added by us to indicate 'Error'
     if ($cur eq "E (Perl_$sym)") {
-      # we can try a shortcut here
+
+      # We can try a shortcut here.  Create an apicheck.c file for just this
+      # symbol.
       regen_apicheck($sym);
 
       my $r = run(qw(make test));
 
       if (!$r->{didnotrun} && $r->{status} == 0) {
-        sym('del', $sym, $cur);
+
+        # Shortcut indicated that this function compiles..
+        display_sym('del', $sym, $cur);
         next RECHECK;
       }
+
+      # Here, the api file with just this entry failed to compile.  (khw
+      # doesn't know why we just don't give up on it now, but we don't.)  We
+      # drop down below to generate and compile a full apicheck.c with this
+      # symbol enabled.  (XXX Perhaps we could look at stderr and if it
+      # contained things about parameter mismatch, (which is a common
+      # occurrence), we could skip the steps below.)
     }
 
-    # run the full test
-    regen_all();
+    # Either can't shortcut, or the shortcut indicated that the function
+    # doesn't compile in isolation.  Create, compile and test with this
+    # function/symbol enabled.  (Remember that this should have succeeded
+    # above to get to here when this symbol was disabled, so enabling just
+    # this one will tell us for sure that it works or doesn't work.  (khw
+    # wonders if this is actually a DAG, or perhaps with cycles, so this is
+    # under it all, insufficient.)
+    regen_Makefile();
 
     my $r = run(qw(make test));
 
-    $r->{didnotrun} and die "couldn't run make test: $!\n";
+    # This regenerated apicheck.c
+    dump_apicheck() if $opt{debug} > 3;
+
+    $r->{didnotrun} and die "couldn't run make test: $!\n" .
+        join('', @{$r->{stdout}})."\n---\n".join('', @{$r->{stderr}});
 
-    if ($r->{status} == 0) {
-      sym('del', $sym, $cur);
+    if ($r->{status} == 0) {    # This symbol compiles and tests ok, so retain
+                                # in this version
+      display_sym('del', $sym, $cur);
     }
-    else {
-      $all{$sym} = $cur;
+    else { # Revert to this symbol is bad in this version
+      print STDERR __LINE__, ": symbol '$sym' not in this version\n"
+                                                            if $opt{debug} > 6;
+      $todo{$sym} = $cur;
+      write_todo($todo_file, $todo_version, \%todo);
     }
   }
+} # End of checking our work
+
+print STDERR __LINE__, ": %todo at end ", Dumper \%todo  if $opt{debug} > 6;
+write_todo($todo_file, $todo_version, \%todo);
+
+# If this is the earliest perl being tested, we can extend down our values to
+# include it.  (Remember, that we create files for the next higher version,
+# but this allows us to create a file for the lowest as well.)  This
+# effectively writes out all the known symbols of this earliest version as if
+# they came into existence during it.
+if ($opt{final}) {
+    my $file = "$opt{'todo-dir'}/$opt{final}";
+    my $version = format_version_line($opt{final});
+
+    regen_Makefile();
+    my $r = run(qw(make));
+    $r->{didnotrun} and die "couldn't run make: $!\n" .
+        join('', @{$r->{stdout}})."\n---\n".join('', @{$r->{stderr}});
+
+    my $symbols = read_sym(file => $opt{shlib}, options => [qw( --defined-only )]);
+    my @stuff = map { /_DPPP_test_(.*)/ } keys %$symbols;
+    %todo = map { $_ => 'T' } @stuff;
+
+    print STDERR __LINE__, ": write at ", Dumper $file, $version, \%todo
+                                                            if $opt{debug} > 5;
+    write_todo($file, $version, \%todo);
 }
 
-write_todo($opt{todo}, $opt{version}, \%all);
-
+# Clean up after ourselves
+$opt{debug} = 0;    # Don't care about failures
 run(qw(make realclean));
 
 exit 0;
 
-sub sym
+sub display_sym
 {
   my($what, $sym, $reason, $extra) = @_;
   $extra ||= '';
@@ -220,28 +398,56 @@ sub sym
   $what = colored("$what symbol", $col{$what});
 
   printf "[%s] %s %-30s # %s%s\n",
-         $opt{version}, $what, $sym, $reason, $extra;
+         $todo_version, $what, $sym, $reason, $extra;
 }
 
-sub regen_all
+sub regen_Makefile
 {
+  # We make sure to add rules for creating apicheck.c
   my @mf_arg = ('--with-apicheck', 'OPTIMIZE=-O0 -w');
+
+  # It doesn't include ppport.h if generating the base files.
   push @mf_arg, qw( DEFINE=-DDPPP_APICHECK_NO_PPPORT_H ) if $opt{base};
 
   # just to be sure
+  my $debug = $opt{debug};
+  $opt{debug} = 0;    # Don't care about failures
   run(qw(make realclean));
-  run($fullperl, "Makefile.PL", @mf_arg)->{status} == 0
-      or die "cannot run Makefile.PL: $!\n";
+  $opt{debug} = $debug;
+
+  my $r = run($fullperl, "Makefile.PL", @mf_arg);
+  unless ($r->{status} == 0) {
+      die "cannot run Makefile.PL: $!\n" .
+          join('', @{$r->{stdout}})."\n---\n".join('', @{$r->{stderr}});
+  }
 }
 
-sub regen_apicheck
+sub regen_apicheck      # Regeneration can also occur by calling 'make'
 {
   unlink qw(apicheck.c apicheck.o);
   runtool({ out => '/dev/null' }, $fullperl, 'apicheck_c.PL', map { "--api=$_" } @_)
       or die "cannot regenerate apicheck.c\n";
+  dump_apicheck() if $opt{debug} > 3;
 }
 
-sub load_todo
+sub dump_apicheck
+{
+    my $apicheck = "apicheck.c";
+    my $f = new IO::File $apicheck or die "cannot open $apicheck: $!\n";
+    my @lines = <$f>;
+    print STDERR __FILE__, ": ", __LINE__, ": $apicheck (",
+                                           scalar @lines,
+                                           " lines) for $fullperl";
+    print STDERR " and '" if @_;
+    print STDERR join "', '", @_;
+    print STDERR "'" if @_;
+    print STDERR ":\n";
+    my $n = 1;
+    print STDERR $n++, " ", $_ for @lines;
+}
+
+sub load_todo   # Return entries from $file; skip if the first line
+                # isn't $expver (expected version)
 {
   my($file, $expver) = @_;
 
@@ -268,7 +474,8 @@ nuke_file:
   return {};
 }
 
-sub write_todo
+sub write_todo  # Write out the todo file.  The keys of %sym are known to not
+                # be in this version, hence are 'todo'
 {
   my($file, $ver, $sym) = @_;
   my $f;
@@ -276,13 +483,21 @@ sub write_todo
   $f = new IO::File ">$file" or die "cannot open $file: $!\n";
   $f->print("$ver\n");
 
-  for (sort keys %$sym) {
+  # Dictionary ordering, with only alphanumerics
+  for (sort dictionary_order keys %$sym) {
     $f->print(sprintf "%-30s # %s\n", $_, $sym->{$_});
   }
+
+  $f->close;
 }
 
 sub find_undefined_symbols
 {
+  # returns a list of undefined symbols in $shlib.  To be considered
+  # undefined, it must also not be defined in $perl.  Symbols that begin with
+  # underscore, or contain '@', or are some libc ones are not returned.
+  # Presumably, the list of libc could be expanded if necessary.
+
   my($perl, $shlib) = @_;
 
   my $ps = read_sym(file => $perl,  options => [qw( --defined-only   )]);
@@ -291,13 +506,16 @@ sub find_undefined_symbols
   my @undefined;
 
   for my $sym (keys %$ls) {
+    next if $sym =~ /\@/ or $sym =~ /^_/ or exists $stdsym{$sym};
     unless (exists $ps->{$sym}) {
-      if ($sym !~ /\@/ and $sym !~ /^_/) {
-        push @undefined, $sym unless $stdsym{$sym};
-      }
+        print STDERR __LINE__, ": , Couldn't find '$sym' in $perl\n"
+                                                            if $opt{debug} > 4;
+        push @undefined, $sym;
     }
   }
 
+  print STDERR __LINE__, ": find_undef returning ", Dumper \@undefined
+                                                            if $opt{debug} > 4;
   return @undefined;
 }
 
@@ -308,7 +526,8 @@ sub read_sym
   my $r = run($Config{nm}, @{$opt{options}}, $opt{file});
 
   if ($r->{didnotrun} or $r->{status}) {
-    die "cannot run $Config{nm}";
+    die "cannot run $Config{nm}" .
+          join('', @{$r->{stdout}})."\n---\n".join('', @{$r->{stderr}});
   }
 
   my %sym;
@@ -329,27 +548,38 @@ sub get_apicheck_symbol_map
   my $r;
 
   while (1) {
+
+    # Create apicheck.i
     $r = run(qw(make apicheck.i));
 
+    # Quit the loop if it succeeded
     last unless $r->{didnotrun} or $r->{status};
 
+    # Get the list of macros that had parameter issues.  These are marked as
+    # A, for absolute in nm terms
     my %sym = map { /error: macro "(\w+)" (?:requires|passed) \d+ argument/ ? ($1 => 'A') : () }
               @{$r->{stderr}};
 
+    # Display these, and add them to the global %todo.
     if (keys %sym) {
-      for my $s (sort keys %sym) {
-        sym('new', $s, $sym{$s});
-        $all{$s} = $sym{$s};
+      for my $s (sort dictionary_order keys %sym) {
+        display_sym('new', $s, $sym{$s});
+        $todo{$s} = $sym{$s};
       }
-      write_todo($opt{todo}, $opt{version}, \%all);
+
+      # And rewrite the todo file, including these new symbols.
+      write_todo($todo_file, $todo_version, \%todo);
+
+      # Regenerate apicheck.c for the next iteration
       regen_apicheck();
     }
-    else {
+    else {  # It failed for some other reason than parameter issues: give up
       die "cannot run make apicheck.i ($r->{didnotrun} / $r->{status}):\n".
           join('', @{$r->{stdout}})."\n---\n".join('', @{$r->{stderr}});
     }
   }
 
+  # Here, have an apicheck.i.  Read it in
   my $fh = IO::File->new('apicheck.i')
            or die "cannot open apicheck.i: $!";
 
@@ -358,17 +588,37 @@ sub get_apicheck_symbol_map
   my $cur;
 
   while (<$fh>) {
+    print STDERR __LINE__, ": apicheck.i ", $_ if $opt{debug} > 5;
     next if /^#/;
-    if (defined $cur) {
+
+    # We only care about lines within one of our _DPPP_test_ functions.  If
+    # we're in one, $cur is set to the name of the current one.
+    if (! defined $cur) {   # Not within such a function; see if this starts
+                            # one
+      /_DPPP_test_(\w+)/ and $cur = $1;
+    }
+    else {
+
+      # For anything that looks like a symbol, note it as a key, and as its
+      # value, the name of the function.  Actually the value is another key,
+      # whose value is the count of this symbol's occurrences, so it looks
+      # like:
+      # 'UV' => {
+      #             'SvUVX' => 1,
+      #             'toFOLD_uvchr' => 2,
+      #             'sv_uni_display' => 1,
+      #             ...
+      # }
       for my $sym (/\b([A-Za-z_]\w+)\b/g) {
         $symmap{$sym}{$cur}++;
       }
+
+      # This line marks the end of this function, as constructed by us.
       undef $cur if /^}$/;
     }
-    else {
-      /_DPPP_test_(\w+)/ and $cur = $1;
-    }
   }
 
+  print STDERR __LINE__, ": load_todo returning ", Dumper \%symmap
+                                                            if $opt{debug} > 5;
   return \%symmap;
 }
index 5ffa30c..97b7cbe 100644 (file)
@@ -21,13 +21,17 @@ use Getopt::Long;
 use Pod::Usage;
 
 require './devel/devtools.pl';
+require './parts/ppptools.pl';
 
 our %opt = (
   check   => 1,
+  debug   => 0,
   verbose => 0,
+  yes     => 0,
 );
 
-GetOptions(\%opt, qw( check! verbose install=s blead=s blead-version=s )) or die pod2usage();
+GetOptions(\%opt, qw( check! verbose yes install=s blead=s blead-version=s
+                      debug=i debug-start=s)) or die pod2usage();
 
 identify();
 
@@ -36,7 +40,9 @@ unless (-e 'parts/embed.fnc' and -e 'parts/apidoc.fnc') {
   quit_now();
 }
 
-ask_or_quit("Are you sure you have updated parts/embed.fnc and parts/apidoc.fnc?");
+if (! $opt{'yes'}) {
+    ask_or_quit("Are you SURE you have:\n1) updated parts/embed.fnc to latest blead?\n2) run devel/mkapidoc.pl to update parts/apidoc.fnc?\n3) run devel/mkppport_fnc.pl to update parts/ppport.fnc?\n");
+}
 
 my %files = map { ($_ => [glob "parts/$_/5*"]) } qw( base todo );
 
@@ -61,11 +67,54 @@ if (@notwr) {
   }
 }
 
+# Check that there is only one entry in the whole system for each item
+my @embeds = parse_embed(qw(parts/embed.fnc parts/apidoc.fnc parts/ppport.fnc));
+my %seen;
+%seen =  map { $seen{$_->{name}}++; } @embeds;
+my @bads = grep { $seen{$_} > 1 } keys %seen;
+if (@bads) {
+    print "The following items have multiple entries in the parts/*.fnc files.\n",
+          " Regenerate apidoc.fnc, then ppport.fnc and try again.  If this\n",
+          " doesn't work, choose the best version for each symbol and delete\n",
+          " the others: ",
+        join ", ", @bads, "\n";
+    quit_now();
+}
+
+if (-e 'ppport.h') {
+    my $blead = $opt{blead};
+    $blead = get_and_sort_perls(\%opt)->[0]->{path} unless $blead;
+
+    # Get list of things we provide
+    my %provided = map { /^(\w+)/ ? ( $1 => 1 ) : () }
+                                            `$blead ppport.h --list-provided`;
+
+    # Get the list of macros that are hard to test.
+    my @unorthodox = map { exists $_->{flags}{u} ? $_->{name} : () } @embeds;
+
+    # Keep on that list only the things we provide
+    @unorthodox = grep { exists $provided{$_} } @unorthodox;
+
+    # And get the list of known hard things.
+    my $hard_ref = &known_but_hard_to_test_for;
+
+    # If we provide something, it better be on the known things list
+    my @bad = grep { ! exists $hard_ref->{$_} } @unorthodox;
+    if (@bad) {
+        print "The following items need to be manually added to the list in",
+            " part/inc/ppptools: known_but_hard_to_test_for(): ",
+            join ", ", @bad, "\n";
+        quit_now();
+    }
+}
+
 for my $dir (qw( base todo )) {
   my $cur = "parts/$dir";
   my $old = "$cur-old";
   if (-e $old) {
-    ask_or_quit("Do you want me to remove the old $old directory?");
+    if (! $opt{'yes'}) {
+        ask_or_quit("Do you want me to remove the old $old directory?");
+    }
     rmtree($old);
   }
   mkdir $old;
@@ -78,15 +127,31 @@ for my $dir (qw( base todo )) {
 }
 
 my @perlargs;
-push @perlargs, "--install=$opt{install}" if exists $opt{install};
-push @perlargs, "--blead=$opt{blead}" if exists $opt{blead};
+push @perlargs, "--debug=$opt{debug}" if $opt{debug};
+push @perlargs, "--install=$opt{install}" if $opt{install};
+push @perlargs, "--blead=$opt{blead}" if $opt{blead};
+push @perlargs, "--debug-start=$opt{'debug-start'}" if $opt{'debug-start'};
 
 my $T0 = time;
 my @args = ddverbose();
 push @args, '--nocheck' unless $opt{check};
-push @args, "--blead-version=$opt{'blead-version'}" if exists $opt{'blead-version'};
+push @args, "--blead-version=$opt{'blead-version'}" if $opt{'blead-version'};
 push @args, @perlargs;
 
+# Look for all the NEED_foo macros
+my @NEED;
+for my $file (all_files_in_dir('parts/inc')) {
+  my $spec = parse_partspec($file);
+  next unless $spec->{'xsinit'};
+  while ($spec->{'xsinit'} =~ / ^ ( \# \s* define \s+  NEED_ \w+ ) \s /xmg) {
+    push @NEED, "$1";
+  }
+}
+
+# Make the list available to parts/apicheck.pl
+$ENV{'DPPP_NEED'} = join "\n", sort @NEED;
+
+# Find out what symbols were in what releases
 print "\nBuilding baseline files...\n\n";
 
 unless (runperl('devel/mktodo', '--base', @args)) {
@@ -94,22 +159,16 @@ unless (runperl('devel/mktodo', '--base', @args)) {
   quit_now();
 }
 
-print "\nMoving baseline files...\n\n";
-
-for my $src (glob 'parts/todo/5*') {
-  my $dst = $src;
-  $dst =~ s/todo/base/ or die "Ooops!";
-  move($src, $dst) or die "Moving $src to $dst failed: $!\n";
-}
-
+# Then find out what ppport.h buys us by repeating the process above, but
+# using ppport.h
 print "\nBuilding todo files...\n\n";
 
 unless (runperl('devel/mktodo', @args)) {
-  print "\nSomething went wrong while building the baseline files.\n";
+  print "\nSomething went wrong while building the todo files.\n";
   quit_now();
 }
 
-print "\nAdding remaining baseline info...\n\n";
+print "\nAdding remaining info...\n\n";
 
 unless (runperl('Makefile.PL') and
         runtool('make') and
@@ -145,6 +204,8 @@ regenerate - Automatically regenerate Devel::PPPort's API information
 
   --nocheck      don't recheck symbols that caused an error
   --verbose      show verbose output
+  --yes          the answer to all the standard questions is 'yes',
+                 can be used to nohup this.
 
 =head1 COPYRIGHT
 
index 804524c..b8f184d 100644 (file)
@@ -1,7 +1,22 @@
 #!/usr/bin/perl -w
 ################################################################################
 #
-#  scanprov -- scan Perl headers for provided macros
+#  scanprov -- scan Perl headers for provided macros, and add known
+#              exceptions, and functions we weren't able to otherwise find.
+#              Thus the purpose of this file has been expanded beyond what its
+#              name says.
+#
+#  The lines added have a code to signify they are added by us:
+#   M means it is a macro
+#   X means it is a known exceptional item
+#   F means it is a function in embed.fnc that the normal routines didn't find
+#
+#  The regeneration routines do not know the prototypes for the macros scanned
+#  for, which is gotten from documentation in the source.  (If they were
+#  documented, they would be put in parts/apidoc.fnc, and test cases generated
+#  for them in mktodo.pl).  Therefore these are all undocumented.  It would be
+#  best if people would add document to them in the perl source, and then this
+#  portion of this function would be minimized.
 #
 ################################################################################
 #
@@ -18,61 +33,249 @@ use strict;
 use Getopt::Long;
 
 require './parts/ppptools.pl';
+require './parts/inc/inctools';
+require './devel/devtools.pl';
 
 our %opt = (
   mode    => 'check',
   install => '/tmp/perl/install/default',
   blead   => 'bleadperl',
+  debug   => 0,
+ 'debug-start' => "",
 );
 
-GetOptions(\%opt, qw( install=s mode=s blead=s )) or die;
+GetOptions(\%opt, qw( install=s mode=s blead=s debug=i debug-start=s)) or die;
 
 my $write = $opt{mode} eq 'write';
 
-my %embed = map { ( $_->{name} => 1 ) }
-            parse_embed(qw(parts/embed.fnc parts/apidoc.fnc parts/ppport.fnc ));
+# Get the list of known macros.  Functions are calculated separately below
+my %embed = map { $_->{flags}{m} ? ( $_->{name} => 1 ) : () }
+            parse_embed(qw(parts/embed.fnc parts/apidoc.fnc));
+
+# @provided is set to everthing provided
+my @provided = map { /^(\w+)/ ? $1 : () } `$^X ppport.h --list-provided`;
+
+# There are a few exceptions that have to be dealt with specially.  Add these
+# to the list of things to scan for.
+my $hard_to_test_ref = known_but_hard_to_test_for();
+push @provided, keys %$hard_to_test_ref;
+
+my $base_dir = 'parts/base';
+my $todo_dir = 'parts/todo';
+
+if ($write) {
+
+    # Get the list of files, which are returned sorted, and so the min version
+    # is in the 0th element
+    my @files = all_files_in_dir($base_dir);
+    my $file =  $files[0];
+    my $min_perl = $file;
+    $min_perl =~ s,.*/,,;    # The name is the integer of __MIN_PERL__
+
+    # There are a very few special cases that we may not find in scanning, but
+    # exist all the way back.  Add them now to avoid throwing later things
+    # off.
+    print "-- $file --\n";
+    open F, ">>$file" or die "$file: $!\n";
+    for (qw(RETVAL CALL THIS)) { # These are also in hard_to_test_for(),
+                                 # so can't be in blead, as they are skipped
+                                 # in testing, so no real need to check that
+                                 # they aren't dups.
+        print "Adding $_ to $file\n";
+        print F format_output_line($_, 'X');
+    }
+    close F;
+
+    # Now we're going to add the hard to test symbols.  The hash has been
+    # manually populated and commited, with the version number ppport supports
+    # them to.
+    #
+    # This is a hash ref with the keys being all symbols found in all the
+    # files in the directory, and the values being the perl versions of each
+    # symbol.
+    my $todo = parse_todo($todo_dir);
 
-my @provided = grep { !exists $embed{$_} }
-               map { /^(\w+)/ ? $1 : () }
-               `$^X ppport.h --list-provided`;
+    # The keys of $hard_to_test_ref are the symbols, and the values are
+    # subhashes, with each 'version' key being its proper perl version.
+    # Below, we invert %hard_to_test, so that the keys are the version, and
+    # the values are the symbols that go in that version
+    my %add_by_version;
+    for my $hard (keys %$hard_to_test_ref) {
 
-my @perls = sort { $b->{version} <=> $a->{version} }
-            map { { version => `$_ -e 'printf "%.6f", \$]'`, path => $_ } }
-            ($opt{blead}, glob "$opt{install}/*/bin/perl5.*");
+        # But if someone ups the min version we support, we don't want to add
+        # something less than that.
+        my $version = int_parse_version($hard_to_test_ref->{$hard});
+        $version = $min_perl if $version < $min_perl;
+        $version = format_version_line($version);
 
-for (1 .. $#perls) {
-  $perls[$_]{todo} = $perls[$_-1]{version};
+        push @{$add_by_version{$version}}, $hard
+                unless grep { $todo->{$_}->{version} eq $hard } keys %$todo;
+    }
+
+    # Only a few files will have exceptions that apply to them.  Rewrite each
+    foreach my $version (keys %add_by_version) {
+        my $file = "$todo_dir/" . int_parse_version($version);
+        print "-- Adding known exceptions to $file --\n";
+        my $need_version_line = ! -e $file;
+        open F, ">>$file" or die "$file: $!\n";
+        print F format_version_line($version) . "\n" if $need_version_line;
+        foreach my $symbol (sort dictionary_order @{$add_by_version{$version}})
+        {
+            print "adding $symbol\n";
+            print F format_output_line($symbol, 'X');
+        }
+        close F;
+    }
 }
 
-shift @perls;
+# Now that we've added the exceptions to a few files, we can parse
+# and deal with all of them.
+my $perls_ref = get_and_sort_perls(\%opt);
+
+die "Couldn't find any perls" unless @$perls_ref > 1;
+
+find_first_mentions($perls_ref,   # perls to look in
+                    \@provided,   # List of symbol names to look for
+                    '*.h',        # Look in all hdrs.
+                    1,            # Strip comments
+                   'M'
+                   );
+
+# Now look for functions that we didn't test in mktodo.pl, generally because
+# these were hidden behind #ifdef's.
+my $base_ref = parse_todo($base_dir);
+my @functions = parse_embed(qw(parts/embed.fnc));
+
+# We could just gather data for the publicly available ones, but having this
+# information available for everything is useful (for those who know where to
+# look)
+#@functions = grep { exists $_->{flags}{A} } @functions;
 
-my %v;
+# The ones we don't have info on are the ones in embed.fnc that aren't in the
+# base files.  Certain of these will only be in the Perl_foo form.
+my @missing = map { exists $base_ref->{$_->{name}}
+                    ? ()
+                    : ((exists $_->{flags}{p} && exists $_->{flags}{o})
+                       ? ((exists $base_ref->{$_->{"Perl_$_->{name}"}}
+                           ? ()
+                           : "Perl_$_->{name}"))
+                       : $_->{name})
+                  } @functions;
 
-for my $p (@perls) {
-  print "checking perl $p->{version}...\n";
-  my $archlib = `$p->{path} -MConfig -l -e 'print \$Config{archlib}'`;
-  chomp $archlib;
-  local @ARGV = glob "$archlib/CORE/*.h";
-  my %sym;
-  while (<>) { $sym{$_}++ for /(\w+)/g; }
-  @provided = map { $sym{$_} or $v{$p->{todo}}{$_}++; $sym{$_} ? $_ : () } @provided;
+# These symbols will be found in the autogen'd files, and they may be
+# commented out in them.
+find_first_mentions($perls_ref,
+                    \@missing,
+                    [ 'embed.h', 'proto.h' ],
+                    0,          # Don't strip comments
+                   'F'
+                   );
+
+sub format_output_line
+{
+    my $sym = shift;
+    my $code = shift;
+
+    return sprintf "%-30s # $code added by $0\n", $sym;
 }
 
-my $out = 'parts/base';
-my $todo = parse_todo($out);
-
-for my $v (keys %v) {
-  my @new = sort grep { !exists $todo->{$_} } keys %{$v{$v}};
-  @new or next;
-  my $file = $v;
-  $file =~ s/\.//g;
-  $file = "$out/$file";
-  -e $file or die "non-existent: $file\n";
-  print "-- $file --\n";
-  $write and (open F, ">>$file" or die "$file: $!\n");
-  for (@new) {
-    print "adding $_\n";
-    $write and printf F "%-30s # added by $0\n", $_;
-  }
-  $write and close F;
+sub find_first_mentions
+{
+    my $perls_ref =    shift;   # List of perls to look in
+    my $look_for_ref = shift;   # List of symbol names to look for
+    my $hdrs =         shift;   # Glob of hdrs to look in
+    my $strip_comments = shift;
+    my $code           = shift; # Mark entries as having this type
+
+    $hdrs = [ $hdrs ] unless ref $hdrs;
+
+    my @remaining = @$look_for_ref;
+
+    my %v;
+
+    # We look in descending order of perl versions.  Each time through the
+    # loop @remaining is narrowed.
+    for my $p (@$perls_ref) {
+        print "checking perl $p->{version}...\n";
+
+        # Get the hdr files associated with this version
+        my $archlib = `$p->{path} -MConfig -l -e 'print \$Config{archlib}'`;
+        chomp $archlib;
+        local @ARGV;
+        push @ARGV, glob "$archlib/CORE/$_" for @$hdrs;
+
+        my %sym;
+
+        # %sym's keys are every single thing that looks like an identifier
+        # (beginning with a non-digit \w, followed by \w*) that occurs in all
+        # the headers, regardless of where (outside of comments).
+        local $/ = undef;
+        while (<>) {  # Read in the next file
+
+            # Strip comments, from perl faq
+            if ($strip_comments) {
+                s#/\*[^*]*\*+([^/*][^*]*\*+)*/|("(\\.|[^"\\])*"|'(\\.|[^'\\])*'|.[^/"'\\]*)#defined $2 ? $2 : ""#gse;
+            }
+
+            $sym{$_}++ for /(\b[^\W\d]\w*)/g;
+        }
+
+        # @remaining is narrowed to include only those identifier-like things
+        # that are mentioned in one of the input hdrs in this release.  (If it
+        # isn't even mentioned, it won't exist in the release.)  For those not
+        # mentioned, a key is added of the identifier-like thing in %v.  It is
+        # a subkey of this release's "todo" release, which is the next higher
+        # one.  If we are at version n, we have already done version n+1 and
+        # the provided element was mentioned there, and now it no longer is.
+        # We take that to mean that to mean that the element became provided
+        # for in n+1.
+        @remaining = map { $sym{$_} or $v{$p->{todo}}{$_}++;
+                            $sym{$_} ? $_ : ()
+                        } @remaining;
+
+    }
+
+    $v{$perls_ref->[-1]{file}}{$_}++ for @remaining;
+
+    # Read in the parts/base files.  The hash ref has keys being all symbols
+    # found in all the files in base/, which are all we are concerned with
+    # became defined in.
+    my $base_ref = parse_todo($base_dir);
+
+
+    # Now add the results from above.  At this point, The keys of %v are the 7
+    # digit BCD version numbers, and their subkeys are the symbols provided by
+    # D:P that are first mentioned in this version, like this:
+    #   '5009002' => {
+    #                  'MY_CXT_CLONE' => 1,
+    #                  'SV_NOSTEAL' => 1,
+    #                  'UTF8_MAXBYTES' => 1
+    #                },
+
+    for my $v (keys %v) {
+
+        # Things listed in blead (the most recent file) are special.  They are
+        # there by default because we haven't found them anywhere, so they
+        # don't really exist as far as we can determine, so shouldn't be
+        # listed as existing.
+        next if $v > $perls_ref->[0]->{file};
+
+        # @new becomes the symbols for version $v not already in the file for
+        # $v
+        my @new = sort dictionary_order grep { !exists $base_ref->{$_} }
+                                                                keys %{$v{$v}};
+        @new or next; # Nothing new, skip writing
+
+        my $file = $v;
+        $file =~ s/\.//g;
+        $file = "$base_dir/$file";
+        -e $file or die "non-existent: $file\n";
+        print "-- $file --\n";
+        $write and (open F, ">>$file" or die "$file: $!\n");
+        for (@new) {
+            print "adding $_\n";
+            $write and print F format_output_line($_, $code);
+        }
+        $write and close F;
+    }
 }
index 02c9110..217afef 100644 (file)
@@ -14,7 +14,7 @@
 ################################################################################
 
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 require "./parts/ppptools.pl";
 
 my $template = do { local $/; <DATA> };
@@ -41,11 +41,14 @@ sub generate_tests
       print "generating $testfile\n";
 
       my $tmpl = $template;
-      $tmpl =~ s/__SOURCE__/$file/mg;
+      my $canonfile = $file;
+      $canonfile =~ tr!\\!/!; # MSWin32 use backslashes
+      $tmpl =~ s/__SOURCE__/$canonfile/mg;
       $tmpl =~ s/__PLAN__/$spec->{OPTIONS}{tests}{plan}/mg;
       $tmpl =~ s/^__TESTS__$/$spec->{tests}/mg;
 
       open FH, ">$testfile" or die "$testfile: $!\n";
+      binmode FH;
       print FH $tmpl;
       close FH;
 
@@ -69,10 +72,12 @@ __DATA__
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -80,13 +85,15 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
   if (__PLAN__) {
@@ -97,7 +104,7 @@ BEGIN {
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
index 69d8502..268ada4 100644 (file)
@@ -1,7 +1,10 @@
 #!/usr/bin/perl -w
 ################################################################################
 #
-#  apicheck.pl -- generate C source for automated API check
+#  apicheck.pl -- generate apicheck.c: C source for automated API check
+#
+#  WARNING:  This script will be run on very old perls.  You need to not use
+#            modern constructs.  See HACKERS file for examples.
 #
 ################################################################################
 #
@@ -25,92 +28,125 @@ else {
   *OUT = \*STDOUT;
 }
 
+# Arguments passed to us in this variable are of the form
+# '--a=foo --b=bar', so split first on space, then the =, and then the hash is
+# of the form { a => foo, b => bar }
+my %script_args = map { split /=/ } split(/\s+/, $ENV{'DPPP_ARGUMENTS'});
+
+# Get list of functions/macros to test
 my @f = parse_embed(qw( parts/embed.fnc parts/apidoc.fnc parts/ppport.fnc ));
 
-my %todo = %{&parse_todo};
+# Read in what we've decided in previous calls should be #ifdef'd out for this
+# call.  The keys are the symbols to test; each value is a subhash, like so:
+#     'utf8_hop_forward' => {
+#                               'version' => '5.025007'
+#                           },
+# We don't care here about other subkeys
+my %todo = %{&parse_todo($script_args{'--todo-dir'})};
 
+# We convert these types into these other types
 my %tmap = (
   void => 'int',
 );
 
+# These are for special marker argument names, as mentioned in embed.fnc
 my %amap = (
   SP   => 'SP',
   type => 'int',
   cast => 'int',
+  block => '{1;}',
 );
 
+# Certain return types are instead considered void
 my %void = (
   void     => 1,
   Free_t   => 1,
   Signal_t => 1,
 );
 
+# khw doesn't know why these exist.  These have an explicit (void) cast added.
+# Undef'ing this hash made no difference.  Maybe it's for older compilers?
 my %castvoid = (
   map { ($_ => 1) } qw(
+    G_ARRAY
+    G_DISCARD
+    G_EVAL
+    G_NOARGS
+    G_SCALAR
+    G_VOID
+    HEf_SVKEY
+    MARK
     Nullav
+    Nullch
     Nullcv
     Nullhv
-    Nullch
     Nullsv
-    HEf_SVKEY
     SP
-    MARK
-    SVt_PV
     SVt_IV
     SVt_NV
-    SVt_PVMG
+    SVt_PV
     SVt_PVAV
-    SVt_PVHV
     SVt_PVCV
+    SVt_PVHV
+    SVt_PVMG
     SvUOK
-    G_SCALAR
-    G_ARRAY
-    G_VOID
-    G_DISCARD
-    G_EVAL
-    G_NOARGS
     XS_VERSION
   ),
 );
 
+# Ignore the return value of these
 my %ignorerv = (
   map { ($_ => 1) } qw(
     newCONSTSUB
   ),
 );
 
+my @simple_my_cxt_prereqs = ( 'typedef struct { int count; } my_cxt_t;', 'START_MY_CXT;' );
+my @my_cxt_prereqs = ( @simple_my_cxt_prereqs, 'MY_CXT_INIT;' );
+
+# The value of each key is a list of things that need to be declared in order
+# for the key to compile.
 my %stack = (
+  MULTICALL      => ['dMULTICALL;'],
   ORIGMARK       => ['dORIGMARK;'],
-  POPpx          => ['STRLEN n_a;'],
+  POP_MULTICALL  => ['dMULTICALL;', 'U8 gimme;' ],
+  PUSH_MULTICALL => ['dMULTICALL;', 'U8 gimme;' ],
   POPpbytex      => ['STRLEN n_a;'],
-  PUSHp          => ['dTARG;'],
-  PUSHn          => ['dTARG;'],
+  POPpx          => ['STRLEN n_a;'],
   PUSHi          => ['dTARG;'],
+  PUSHn          => ['dTARG;'],
+  PUSHp          => ['dTARG;'],
   PUSHu          => ['dTARG;'],
-  XPUSHp         => ['dTARG;'],
-  XPUSHn         => ['dTARG;'],
-  XPUSHi         => ['dTARG;'],
-  XPUSHu         => ['dTARG;'],
+  RESTORE_LC_NUMERIC => ['DECLARATION_FOR_LC_NUMERIC_MANIPULATION;'],
+  STORE_LC_NUMERIC_FORCE_TO_UNDERLYING => ['DECLARATION_FOR_LC_NUMERIC_MANIPULATION;'],
+  STORE_LC_NUMERIC_SET_TO_NEEDED => ['DECLARATION_FOR_LC_NUMERIC_MANIPULATION;'],
+  STORE_LC_NUMERIC_SET_TO_NEEDED_IN => ['DECLARATION_FOR_LC_NUMERIC_MANIPULATION;'],
   UNDERBAR       => ['dUNDERBAR;'],
-  XCPT_TRY_START => ['dXCPT;'],
-  XCPT_TRY_END   => ['dXCPT;'],
   XCPT_CATCH     => ['dXCPT;'],
   XCPT_RETHROW   => ['dXCPT;'],
+  XCPT_TRY_END   => ['dXCPT;'],
+  XCPT_TRY_START => ['dXCPT;'],
+  XPUSHi         => ['dTARG;'],
+  XPUSHn         => ['dTARG;'],
+  XPUSHp         => ['dTARG;'],
+  XPUSHu         => ['dTARG;'],
+  XS_APIVERSION_BOOTCHECK => ['CV * cv;'],
+  XS_VERSION_BOOTCHECK => ['CV * cv;'],
+  MY_CXT_INIT  => [ @simple_my_cxt_prereqs ],
+  MY_CXT_CLONE => [ @simple_my_cxt_prereqs ],
+  dMY_CXT      => [ @simple_my_cxt_prereqs ],
+  MY_CXT       => [ @my_cxt_prereqs ],
+  _aMY_CXT     => [ @my_cxt_prereqs ],
+   aMY_CXT     => [ @my_cxt_prereqs ],
+   aMY_CXT_    => [ @my_cxt_prereqs ],
+   pMY_CXT     => [ @my_cxt_prereqs ],
 );
 
-my %ignore = (
-  map { ($_ => 1) } qw(
-    svtype
-    items
-    ix
-    dXSI32
-    XS
-    CLASS
-    THIS
-    RETVAL
-    StructCopy
-  ),
-);
+# The entries in %ignore have two components, separated by this.
+my $sep = '~';
+
+# Things to not try to check.  (The component after $sep is empty.)
+my %ignore = map { ("$_$sep" => 1) } keys %{&known_but_hard_to_test_for()};
 
 print OUT <<HEAD;
 /*
@@ -135,42 +171,7 @@ print OUT <<HEAD;
 
 #else
 
-#define NEED_PL_signals
-#define NEED_PL_parser
-#define NEED_caller_cx
-#define NEED_eval_pv
-#define NEED_grok_bin
-#define NEED_grok_hex
-#define NEED_grok_number
-#define NEED_grok_numeric_radix
-#define NEED_grok_oct
-#define NEED_gv_fetchpvn_flags
-#define NEED_load_module
-#define NEED_mg_findext
-#define NEED_my_snprintf
-#define NEED_my_sprintf
-#define NEED_my_strlcat
-#define NEED_my_strlcpy
-#define NEED_newCONSTSUB
-#define NEED_newRV_noinc
-#define NEED_newSV_type
-#define NEED_newSVpvn_flags
-#define NEED_newSVpvn_share
-#define NEED_pv_display
-#define NEED_pv_escape
-#define NEED_pv_pretty
-#define NEED_sv_2pv_flags
-#define NEED_sv_2pvbyte
-#define NEED_sv_catpvf_mg
-#define NEED_sv_catpvf_mg_nocontext
-#define NEED_sv_pvn_force_flags
-#define NEED_sv_setpvf_mg
-#define NEED_sv_setpvf_mg_nocontext
-#define NEED_sv_unmagicext
-#define NEED_SvRX
-#define NEED_vload_module
-#define NEED_vnewSVpvf
-#define NEED_warner
+$ENV{'DPPP_NEED'}    /* All the requisite NEED_foo #defines */
 
 #include "ppport.h"
 
@@ -187,23 +188,37 @@ typedef void yy_parser;
 
 HEAD
 
+# Caller can restrict what functions tests are generated for
 if (@ARGV) {
   my %want = map { ($_ => 0) } @ARGV;
-  @f = grep { exists $want{$_->{name}} } @f;
-  for (@f) { $want{$_->{name}}++ }
+  @f = grep { exists $want{$_->{'name'}} } @f;
+  for (@f) { $want{$_->{'name'}}++ }
   for (keys %want) {
     die "nothing found for '$_'\n" unless $want{$_};
   }
 }
 
 my $f;
-for $f (@f) {
-  $ignore{$f->{name}} and next;
-  $f->{flags}{A} or next;  # only public API members
+for $f (@f) {   # Loop through all the tests to add
+
+  # Just the name isn't unique;  We also need the #if or #else condition
+  my $unique = "$f->{'name'}$sep$f->{'cond'}";
+  $ignore{$unique} and next;
+
+  # only public API members, except those in ppport.fnc are there because we
+  # want them to be tested even if non-public.  X,M functions are supposed to
+  # be considered to have just the macro form public.
+      $f->{'flags'}{'A'}
+  or  $f->{'ppport_fnc'}
+  or ($f->{'flags'}{'X'} and $f->{'flags'}{'M'})
+  or next;
+
+  # Don't test unorthodox things that we aren't set up to do
+  $f->{'flags'}{'u'} and next;
 
-  $ignore{$f->{name}} = 1; # ignore duplicates
+  $ignore{$unique} = 1; # ignore duplicates
 
-  my $Perl_ = $f->{flags}{p} ? 'Perl_' : '';
+  my $Perl_ = $f->{'flags'}{'p'} ? 'Perl_' : '';
 
   my $stack = '';
   my @arg;
@@ -212,113 +227,173 @@ for $f (@f) {
   my $i = 1;
   my $ca;
   my $varargs = 0;
-  for $ca (@{$f->{args}}) {
-    my $a = $ca->[0];
+
+  for $ca (@{$f->{'args'}}) {   # Loop through the function's args
+    my $a = $ca->[0];           # 1th is the name, 0th is its type
     if ($a eq '...') {
       $varargs = 1;
       push @arg, qw(VARarg1 VARarg2 VARarg3);
       last;
     }
-    my($n, $p, $d) = $a =~ /^ (\w+(?:\s+\w+)*)\s*  # type name  => $n
-                              (\**)                # pointer    => $p
-                              (?:\s*const\s*)?     # const
-                              ((?:\[[^\]]*\])*)    # dimension  => $d
+
+    # Split this type into its components
+    my($n, $p, $d) = $a =~ /^ (  (?: " [^"]* " )      # literal string type => $n
+                               | (?: \w+ (?: \s+ \w+ )* )    # name of type => $n
+                              )
+                              \s*
+                              ( \** )                 # optional pointer(s) => $p
+                              (?: \s* \b const \b \s* )? # opt. const
+                              ( (?: \[ [^\]]* \] )* )    # opt. dimension(s)=> $d
                             $/x
-                     or die "$0 - cannot parse argument: [$a]\n";
+                     or die "$0 - cannot parse argument: [$a] in $f->{'name'}\n";
+
+    # Replace a special argument name by something that will compile.
     if (exists $amap{$n}) {
+      die "$f->{'name'} had type $n, which should have been the whole type"
+                                                                    if $p or $d;
       push @arg, $amap{$n};
       next;
     }
+
+    # Certain types, like 'void', get remapped.
     $n = $tmap{$n} || $n;
-    if ($n eq 'const char' and $p eq '*' and !$f->{flags}{f}) {
-      push @arg, '"foo"';
+
+    if ($n =~ / ^ " [^"]* " $/x) {  # Use the literal string, literally
+      push @arg, $n;
     }
     else {
-      my $v = 'arg' . $i++;
+      my $v = 'arg' . $i++;     # Argument number
       push @arg, $v;
-      $stack .= "  static $n $p$v$d;\n";
+      my $no_const_n = $n;      # Get rid of any remaining 'const's
+      $no_const_n =~ s/\bconst\b// unless $p;
+
+      # Declare this argument
+      $stack .= "  static $no_const_n $p$v$d;\n";
     }
   }
 
-  unless ($f->{flags}{n} || $f->{flags}{'m'}) {
-    $stack = "  dTHX;\n$stack";
+  # Declare thread context for functions and macros that might need it.
+  # (Macros often fail to say they don't need it.)
+  unless ($f->{'flags'}{'T'}) {
+    $stack = "  dTHX;\n$stack";     # Harmless to declare even if not needed
     $aTHX = @arg ? 'aTHX_ ' : 'aTHX';
   }
 
-  if ($stack{$f->{name}}) {
+  # If this function is on the list of things that need declarations, add
+  # them.
+  if ($stack{$f->{'name'}}) {
     my $s = '';
-    for (@{$stack{$f->{name}}}) {
+    for (@{$stack{$f->{'name'}}}) {
       $s .= "  $_\n";
     }
     $stack = "$s$stack";
   }
 
   my $args = join ', ', @arg;
-  my $rvt = $f->{ret} || 'void';
+  my $prefix = "";
+
+  # Failure to specify a return type in the apidoc line means void
+  my $rvt = $f->{'ret'} || 'void';
+
   my $ret;
-  if ($void{$rvt}) {
-    $ret = $castvoid{$f->{name}} ? '(void) ' : '';
+  if ($void{$rvt}) {    # Certain return types are instead considered void
+    $ret = $castvoid{$f->{'name'}} ? '(void) ' : '';
   }
   else {
     $stack .= "  $rvt rval;\n";
-    $ret = $ignorerv{$f->{name}} ? '(void) ' : "rval = ";
+    $ret = $ignorerv{$f->{'name'}} ? '(void) ' : "rval = ";
   }
-  my $aTHX_args = "$aTHX$args";
 
-  if (!$f->{flags}{'m'} or $f->{flags}{'b'} or @arg > 0) {
+  my $aTHX_args   = "";
+  my $aTHX_prefix = "";
+
+  # Add parens to functions that take an argument list, even if empty
+  unless ($f->{'flags'}{'n'}) {
+    $aTHX_args = "($aTHX$args)";
     $args = "($args)";
-    $aTHX_args = "($aTHX_args)";
   }
 
+  # Single trailing underscore in name means is a comma operator
+  if ($f->{'name'} =~ /[^_]_$/) {
+    $aTHX_args .= ' 1';
+    $args .= ' 1';
+  }
+
+  # Single leading underscore in a few names means is a comma operator
+  if ($f->{'name'} =~ /^ _[ adp] (?: THX | MY_CXT ) /x) {
+    $aTHX_prefix = '1 ';
+    $prefix = '1 ';
+  }
+
+
   print OUT <<HEAD;
 /******************************************************************************
 *
-*  $f->{name}
+
+*  $f->{'name'}  $script_args{'--todo-dir'}  $script_args{'--todo'}
 *
 ******************************************************************************/
 
 HEAD
 
-  if ($todo{$f->{name}}) {
-    my($ver,$sub) = $todo{$f->{name}} =~ /^5\.(\d{3})(\d{3})$/ or die;
-    for ($ver, $sub) {
-      s/^0+(\d)/$1/
-    }
-    if ($ver < 6 && $sub > 0) {
-      $sub =~ s/0$// or die;
-    }
+  # #ifdef out if marked as todo (not known in) this version
+  if (exists $todo{$f->{'name'}}) {
+    my($five, $ver,$sub) = parse_version($todo{$f->{'name'}}{'version'});
     print OUT "#if PERL_VERSION > $ver || (PERL_VERSION == $ver && PERL_SUBVERSION >= $sub) /* TODO */\n";
   }
 
   my $final = $varargs
-              ? "$Perl_$f->{name}$aTHX_args"
-              : "$f->{name}$args";
+              ? "$aTHX_prefix$Perl_$f->{'name'}$aTHX_args"
+              : "$prefix$f->{'name'}$args";
+
+  # If there is a '#if' associated with this, add that
+  $f->{'cond'} and print OUT "#if $f->{'cond'}\n";
 
-  $f->{cond} and print OUT "#if $f->{cond}\n";
+  # If only to be tested when ppport.h is enabled
+  $f->{'ppport_fnc'} and print OUT "#ifndef DPPP_APICHECK_NO_PPPORT_H\n";
 
   print OUT <<END;
-void _DPPP_test_$f->{name} (void)
+void _DPPP_test_$f->{'name'} (void)
 {
   dXSARGS;
 $stack
   {
-#ifdef $f->{name}
-    $ret$f->{name}$args;
+END
+
+  # If M is a flag here, it means the 'Perl_' form is not for general use, but
+  # the macro (tested above) is.
+  if ($f->{'flags'}{'M'}) {
+      print OUT <<END;
+
+    $ret$prefix$f->{'name'}$args;
+  }
+}
+END
+
+  }
+  else {
+    print OUT <<END;
+
+#ifdef $f->{'name'}
+    $ret$prefix$f->{'name'}$args;
 #endif
   }
 
   {
-#ifdef $f->{name}
+#ifdef $f->{'name'}
     $ret$final;
 #else
-    $ret$Perl_$f->{name}$aTHX_args;
+    $ret$aTHX_prefix$Perl_$f->{'name'}$aTHX_args;
 #endif
   }
 }
 END
 
-  $f->{cond} and print OUT "#endif\n";
-  $todo{$f->{name}} and print OUT "#endif\n";
+  }
+
+  $f->{'ppport_fnc'} and print OUT "#endif\n";
+  $f->{'cond'} and print OUT "#endif\n";
+  exists $todo{$f->{'name'}} and print OUT "#endif\n";
 
   print OUT "\n";
 }
index 1149c06..f455038 100644 (file)
 : This file lists all API functions/macros that are documented in the Perl
 : source code, but are not contained in F<embed.fnc>.
 :
-
-Ama|char*|savepvs|"literal string" s
-Ama|char*|savesharedpvs|"literal string" s
-Ama|SV*|newSVpvs_flags|"literal string" s|U32 flags
-Ama|SV*|newSVpvs|"literal string" s
-Ama|SV*|newSVpvs_share|"literal string" s
-Am|AV*|GvAV|GV* gv
-Am|bool|ckWARN2_d|U32 w1|U32 w2
-Am|bool|ckWARN2|U32 w1|U32 w2
-Am|bool|ckWARN3_d|U32 w1|U32 w2|U32 w3
-Am|bool|ckWARN3|U32 w1|U32 w2|U32 w3
-Am|bool|ckWARN4_d|U32 w1|U32 w2|U32 w3|U32 w4
-Am|bool|ckWARN4|U32 w1|U32 w2|U32 w3|U32 w4
-Am|bool|ckWARN_d|U32 w
-Am|bool|ckWARN|U32 w
-Am|bool|DO_UTF8|SV* sv
-Am|bool|isALPHA|char ch
-Am|bool|isALPHANUMERIC|char ch
-Am|bool|isASCII|char ch
-Am|bool|isBLANK|char ch
-Am|bool|isCNTRL|char ch
-Am|bool|isDIGIT|char ch
-Am|bool|isGRAPH|char ch
-Am|bool|isIDCONT|char ch
-Am|bool|isIDFIRST|char ch
-Am|bool|isLOWER|char ch
-Am|bool|isOCTAL|char ch
-Am|bool|isPRINT|char ch
-Am|bool|isPSXSPC|char ch
-Am|bool|isPUNCT|char ch
-Am|bool|isSPACE|char ch
-Am|bool|isUPPER|char ch
-Am|bool|isWORDCHAR|char ch
-Am|bool|isXDIGIT|char ch
-Am|bool|memEQ|char* s1|char* s2|STRLEN len
-Am|bool|memNE|char* s1|char* s2|STRLEN len
-Am|bool|OpHAS_SIBLING|OP *o
-Am|bool|OP_TYPE_IS|OP *o|Optype type
-Am|bool|OP_TYPE_IS_OR_WAS|OP *o|Optype type
-Am|bool|strEQ|char* s1|char* s2
-Am|bool|strGE|char* s1|char* s2
-Am|bool|strGT|char* s1|char* s2
-Am|bool|strLE|char* s1|char* s2
-Am|bool|strLT|char* s1|char* s2
-Am|bool|strNE|char* s1|char* s2
-Am|bool|strnEQ|char* s1|char* s2|STRLEN len
-Am|bool|strnNE|char* s1|char* s2|STRLEN len
-Am|bool|SvIOK_notUV|SV* sv
-Am|bool|SvIOK_UV|SV* sv
-Am|bool|SvIsCOW_shared_hash|SV* sv
-Am|bool|SvRXOK|SV* sv
-Am|bool|SvTAINTED|SV* sv
-Am|bool|SvTRUE_nomg|SV* sv
-Am|bool|SvTRUE|SV* sv
-Am|bool|SvUOK|SV* sv
-Am|bool|SvVOK|SV* sv
-Am|bool|UTF8_IS_INVARIANT|char c
-Am|bool|UTF8_IS_NONCHAR|const U8 *s|const U8 *e
-Am|bool|UTF8_IS_SUPER|const U8 *s|const U8 *e
-Am|bool|UTF8_IS_SURROGATE|const U8 *s|const U8 *e
-Am|bool|UVCHR_IS_INVARIANT|UV cp
-Am|char*|HePV|HE* he|STRLEN len
-Am|char*|HvENAME|HV* stash
-Am|char*|HvNAME|HV* stash
-Am|char*|SvEND|SV* sv
-Am|char *|SvGROW|SV* sv|STRLEN len
-Am|char*|SvPVbyte_force|SV* sv|STRLEN len
-Am|char*|SvPVbyte_nolen|SV* sv
-Am|char*|SvPVbyte|SV* sv|STRLEN len
-Am|char*|SvPVbytex_force|SV* sv|STRLEN len
-Am|char*|SvPVbytex|SV* sv|STRLEN len
-Am|char *|SvPVCLEAR|SV* sv
-Am|char*|SvPV_force_nomg|SV* sv|STRLEN len
-Am|char*|SvPV_force|SV* sv|STRLEN len
-Am|char*|SvPV_nolen|SV* sv
-Am|char*|SvPV_nomg_nolen|SV* sv
-Am|char*|SvPV_nomg|SV* sv|STRLEN len
-Am|char*|SvPV|SV* sv|STRLEN len
-Am|char*|SvPVutf8_force|SV* sv|STRLEN len
-Am|char*|SvPVutf8_nolen|SV* sv
-Am|char*|SvPVutf8|SV* sv|STRLEN len
-Am|char*|SvPVutf8x_force|SV* sv|STRLEN len
-Am|char*|SvPVutf8x|SV* sv|STRLEN len
-Am|char*|SvPVX|SV* sv
-Am|char*|SvPVx|SV* sv|STRLEN len
-Am|const char *|OP_DESC|OP *o
-Am|const char *|OP_NAME|OP *o
-Am|CV*|GvCV|GV* gv
-Am|HV *|cop_hints_2hv|const COP *cop|U32 flags
-Am|HV*|CvSTASH|CV* cv
-Am|HV*|GvHV|GV* gv
-Am|HV*|gv_stashpvs|"literal string" name|I32 create
-Am|HV*|SvSTASH|SV* sv
-Am|int|AvFILL|AV* av
-Am|IV|SvIV_nomg|SV* sv
-Am|IV|SvIV|SV* sv
-Am|IV|SvIVx|SV* sv
-Am|IV|SvIVX|SV* sv
-Amn|char*|CLASS
-Amn|char*|POPp
-Amn|char*|POPpbytex
-Amn|char*|POPpx
-Amn|HV*|PL_modglobal
-Amn|I32|ax
-Amn|I32|items
-Amn|I32|ix
-Amn|IV|POPi
-Amn|long|POPl
-Amn|long|POPul
-Amn|NV|POPn
-Amn|peep_t|PL_peepp
-Amn|peep_t|PL_rpeepp
-Amn|Perl_ophook_t|PL_opfreehook
-Amn|STRLEN|PL_na
-Amn|SV|PL_sv_no
-Amn|SV|PL_sv_undef
-Amn|SV|PL_sv_yes
-Amn|SV|PL_sv_zero
-Amn|SV*|POPs
-Amn|U32|GIMME
-Amn|U32|GIMME_V
-Amn|UV|POPu
-Amn|void|DECLARATION_FOR_LC_NUMERIC_MANIPULATION
-Am|NV|SvNV_nomg|SV* sv
-Am|NV|SvNV|SV* sv
-Am|NV|SvNVx|SV* sv
-Am|NV|SvNVX|SV* sv
-Amn|(whatever)|RETVAL
-Amn|(whatever)|THIS
-Am|OP*|LINKLIST|OP *o
-Am|OP*|OpSIBLING|OP *o
-Am|PADOFFSET|pad_add_name_pvs|"literal string" name|U32 flags|HV *typestash|HV *ourstash
-Am|PADOFFSET|pad_findmy_pvs|"literal string" name|U32 flags
-Am|REGEXP *|SvRX|SV *sv
-Ams||dAX
-Ams||dAXMARK
-Ams||dITEMS
-Ams||dMARK
-Ams||dMULTICALL
-Ams||dORIGMARK
-Ams||dSP
-Ams||dUNDERBAR
-Ams||dXCPT
-Ams||dXSARGS
-Ams||dXSI32
-Ams||ENTER
-Ams||ENTER_with_name(name)
-Ams||FREETMPS
-Ams||LEAVE
-Ams||LEAVE_with_name(name)
-Ams||MULTICALL
-Ams||POP_MULTICALL
-Ams||PUSH_MULTICALL
-Ams||PUTBACK
-Ams||SAVETMPS
-Ams||SPAGAIN
-Am|STRLEN|HeKLEN|HE* he
-Am|STRLEN|HvENAMELEN|HV *stash
-Am|STRLEN|HvNAMELEN|HV *stash
-Am|STRLEN|isUTF8_CHAR_flags|const U8 *s|const U8 *e| const U32 flags
-Am|STRLEN|SvCUR|SV* sv
-Am|STRLEN|SvLEN|SV* sv
-Am|STRLEN|UTF8_SAFE_SKIP|char* s|char* e
-Am|STRLEN|UTF8SKIP|char* s
-Am|STRLEN|UVCHR_SKIP|UV cp
-Am|SV *|boolSV|bool b
-Am|SV *|cop_hints_fetch_pv|const COP *cop|const char *key|U32 hash|U32 flags
-Am|SV *|cop_hints_fetch_pvn|const COP *cop|const char *keypv|STRLEN keylen|U32 hash|U32 flags
-Am|SV *|cop_hints_fetch_pvs|const COP *cop|"literal string" key|U32 flags
-Am|SV *|cop_hints_fetch_sv|const COP *cop|SV *key|U32 hash|U32 flags
-Am|SV*|GvSV|GV* gv
-Am|SV*|HeSVKEY_force|HE* he
-Am|SV*|HeSVKEY|HE* he
-Am|SV*|HeSVKEY_set|HE* he|SV* sv
-Am|SV*|HeVAL|HE* he
-Am|SV**|hv_fetchs|HV* tb|"literal string" key|I32 lval
-Am|SV**|hv_stores|HV* tb|"literal string" key|SV* val
-Am|SV*|newRV_inc|SV* sv
-Am|SV*|newSVpvn_utf8|const char* s|STRLEN len|U32 utf8
-Am|SV*|ST|int ix
-Am|SV*|SvREFCNT_inc_NN|SV* sv
-Am|SV*|SvREFCNT_inc_simple_NN|SV* sv
-Am|SV*|SvREFCNT_inc_simple|SV* sv
-Am|SV*|SvREFCNT_inc|SV* sv
-Am|SV*|SvRV|SV* sv
-Am|SV *|sv_setref_pvs|"literal string" s
-Am|svtype|SvTYPE|SV* sv
-Ams||XCPT_RETHROW
-Ams||XS_APIVERSION_BOOTCHECK
-Ams||XSRETURN_EMPTY
-Ams||XSRETURN_NO
-Ams||XSRETURN_UNDEF
-Ams||XSRETURN_YES
-Ams||XS_VERSION_BOOTCHECK
-Am|U32|HeHASH|HE* he
-Am|U32|HeUTF8|HE* he
-Am|U32|OP_CLASS|OP *o
-Am|U32|SvGAMAGIC|SV* sv
-Am|U32|SvIOKp|SV* sv
-Am|U32|SvIOK|SV* sv
-Am|U32|SvIsCOW|SV* sv
-Am|U32|SvNIOKp|SV* sv
-Am|U32|SvNIOK|SV* sv
-Am|U32|SvNOKp|SV* sv
-Am|U32|SvNOK|SV* sv
-Am|U32|SvOK|SV* sv
-Am|U32|SvOOK|SV* sv
-Am|U32|SvPOKp|SV* sv
-Am|U32|SvPOK|SV* sv
-Am|U32|SvREADONLY_off|SV* sv
-Am|U32|SvREADONLY_on|SV* sv
-Am|U32|SvREADONLY|SV* sv
-Am|U32|SvREFCNT|SV* sv
-Am|U32|SvROK|SV* sv
-Am|U32|SvUTF8|SV* sv
-Am|U32|XopFLAGS|XOP *xop
-Am|U8|READ_XDIGIT|char str*
-Am|U8|toFOLD|U8 ch
-Am|U8|toLOWER_L1|U8 ch
-Am|U8|toLOWER_LC|U8 ch
-Am|U8|toLOWER|U8 ch
-Am|U8|toTITLE|U8 ch
-Am|U8|toUPPER|U8 ch
-AmU||G_ARRAY
-AmU||G_DISCARD
-AmU||G_EVAL
-AmU||G_NOARGS
-AmU||G_SCALAR
-AmU||G_VOID
-AmU||HEf_SVKEY
-AmU||MARK
-AmU||newXSproto|char* name|XSUBADDR_t f|char* filename|const char *proto
-Am|unsigned char|HvENAMEUTF8|HV *stash
-Am|unsigned char|HvNAMEUTF8|HV *stash
-AmU||Nullav
-AmU||Nullch
-AmU||Nullcv
-AmU||Nullhv
-AmU||Nullsv
-AmU||ORIGMARK
-AmU|Perl_check_t *|PL_check
-AmU|placeholder|BOM_UTF8
-AmU|placeholder|REPLACEMENT_CHARACTER_UTF8
-AmU||SP
-AmU||SVt_INVLIST
-AmU||SVt_IV
-AmU||SVt_NULL
-AmU||SVt_NV
-AmU||SVt_PV
-AmU||SVt_PVAV
-AmU||SVt_PVCV
-AmU||SVt_PVFM
-AmU||SVt_PVGV
-AmU||SVt_PVHV
-AmU||SVt_PVIO
-AmU||SVt_PVIV
-AmU||SVt_PVLV
-AmU||SVt_PVMG
-AmU||SVt_PVNV
-AmU||SVt_REGEXP
-AmU||svtype
-AmU||UNDERBAR
-Am|UV|SvUV_nomg|SV* sv
-Am|UV|SvUV|SV* sv
-Am|UV|SvUVx|SV* sv
-Am|UV|SvUVX|SV* sv
-Am|UV|toFOLD_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
-Am|UV|toFOLD_utf8|U8* p|U8* s|STRLEN* lenp
-Am|UV|toFOLD_uvchr|UV cp|U8* s|STRLEN* lenp
-Am|UV|toLOWER_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
-Am|UV|toLOWER_utf8|U8* p|U8* s|STRLEN* lenp
-Am|UV|toLOWER_uvchr|UV cp|U8* s|STRLEN* lenp
-Am|UV|toTITLE_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
-Am|UV|toTITLE_utf8|U8* p|U8* s|STRLEN* lenp
-Am|UV|toTITLE_uvchr|UV cp|U8* s|STRLEN* lenp
-Am|UV|toUPPER_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
-Am|UV|toUPPER_utf8|U8* p|U8* s|STRLEN* lenp
-Am|UV|toUPPER_uvchr|UV cp|U8* s|STRLEN* lenp
-AmU||XCPT_CATCH
-AmU||XCPT_TRY_END
-AmU||XCPT_TRY_START
-AmUx|Perl_keyword_plugin_t|PL_keyword_plugin
-AmU||XS
-AmU||XS_EXTERNAL
-AmU||XS_INTERNAL
-AmU||XS_VERSION
-AmU|yy_parser *|PL_parser
-Am|void *|CopyD|void* src|void* dest|int nitems|type
-Am|void|Copy|void* src|void* dest|int nitems|type
-Am|void|EXTEND|SP|SSize_t nitems
-Am|void*|HeKEY|HE* he
-Am|void *|MoveD|void* src|void* dest|int nitems|type
-Am|void|Move|void* src|void* dest|int nitems|type
-Am|void|mPUSHi|IV iv
-Am|void|mPUSHn|NV nv
-Am|void|mPUSHp|char* str|STRLEN len
-Am|void|mPUSHs|SV* sv
-Am|void|mPUSHu|UV uv
-Am|void|mXPUSHi|IV iv
-Am|void|mXPUSHn|NV nv
-Am|void|mXPUSHp|char* str|STRLEN len
-Am|void|mXPUSHs|SV* sv
-Am|void|mXPUSHu|UV uv
-Am|void|Newxc|void* ptr|int nitems|type|cast
-Am|void|Newx|void* ptr|int nitems|type
-Am|void|Newxz|void* ptr|int nitems|type
-Am|void|OpLASTSIB_set|OP *o|OP *parent
-Am|void|OpMAYBESIB_set|OP *o|OP *sib|OP *parent
-Am|void|OpMORESIB_set|OP *o|OP *sib
-Am|void|PERL_SYS_INIT3|int *argc|char*** argv|char*** env
-Am|void|PERL_SYS_INIT|int *argc|char*** argv
-Am|void|PERL_SYS_TERM|
-Am|void|PoisonFree|void* dest|int nitems|type
-Am|void|PoisonNew|void* dest|int nitems|type
-Am|void|Poison|void* dest|int nitems|type
-Am|void|PoisonWith|void* dest|int nitems|type|U8 byte
-Am|void|PUSHi|IV iv
-Am|void|PUSHMARK|SP
-Am|void|PUSHmortal
-Am|void|PUSHn|NV nv
-Am|void|PUSHp|char* str|STRLEN len
-Am|void|PUSHs|SV* sv
-Am|void|PUSHu|UV uv
-Am|void|Renewc|void* ptr|int nitems|type|cast
-Am|void|Renew|void* ptr|int nitems|type
-Am|void|RESTORE_LC_NUMERIC
-Am|void|Safefree|void* ptr
-Am|void|STORE_LC_NUMERIC_FORCE_TO_UNDERLYING
-Am|void|STORE_LC_NUMERIC_SET_TO_NEEDED
-Am|void|StructCopy|type *src|type *dest|type
-Am|void|sv_catpvn_nomg|SV* sv|const char* ptr|STRLEN len
-Am|void|sv_catpv_nomg|SV* sv|const char* ptr
-Am|void|sv_catpvs_flags|SV* sv|"literal string" s|I32 flags
-Am|void|sv_catpvs_mg|SV* sv|"literal string" s
-Am|void|sv_catpvs_nomg|SV* sv|"literal string" s
-Am|void|sv_catpvs|SV* sv|"literal string" s
-Am|void|sv_catsv_nomg|SV* dsv|SV* ssv
-Am|void|SvCUR_set|SV* sv|STRLEN len
-Am|void|SvGETMAGIC|SV* sv
-Am|void|SvIOK_off|SV* sv
-Am|void|SvIOK_only|SV* sv
-Am|void|SvIOK_only_UV|SV* sv
-Am|void|SvIOK_on|SV* sv
-Am|void|SvIV_set|SV* sv|IV val
-Am|void|SvLEN_set|SV* sv|STRLEN len
-Am|void|SvLOCK|SV* sv
-Am|void|SvMAGIC_set|SV* sv|MAGIC* val
-Am|void|SvNIOK_off|SV* sv
-Am|void|SvNOK_off|SV* sv
-Am|void|SvNOK_only|SV* sv
-Am|void|SvNOK_on|SV* sv
-Am|void|SvNV_set|SV* sv|NV val
-Am|void|SvOOK_offset|SV*sv|STRLEN len
-Am|void|SvPOK_off|SV* sv
-Am|void|SvPOK_only|SV* sv
-Am|void|SvPOK_only_UTF8|SV* sv
-Am|void|SvPOK_on|SV* sv
-Am|void|SvPV_set|SV* sv|char* val
-Am|void|SvREFCNT_dec_NN|SV* sv
-Am|void|SvREFCNT_dec|SV* sv
-Am|void|SvREFCNT_inc_simple_void_NN|SV* sv
-Am|void|SvREFCNT_inc_simple_void|SV* sv
-Am|void|SvREFCNT_inc_void_NN|SV* sv
-Am|void|SvREFCNT_inc_void|SV* sv
-Am|void|SvROK_off|SV* sv
-Am|void|SvROK_on|SV* sv
-Am|void|SvRV_set|SV* sv|SV* val
-Am|void|SvSetMagicSV_nosteal|SV* dsv|SV* ssv
-Am|void|SvSETMAGIC|SV* sv
-Am|void|SvSetMagicSV|SV* dsv|SV* ssv
-Am|void|sv_setpvs_mg|SV* sv|"literal string" s
-Am|void|sv_setpvs|SV* sv|"literal string" s
-Am|void|sv_setsv_nomg|SV* dsv|SV* ssv
-Am|void|SvSetSV_nosteal|SV* dsv|SV* ssv
-Am|void|SvSetSV|SV* dsv|SV* ssv
-Am|void|SvSHARE|SV* sv
-Am|void|SvSTASH_set|SV* sv|HV* val
-Am|void|SvTAINTED_off|SV* sv
-Am|void|SvTAINTED_on|SV* sv
-Am|void|SvTAINT|SV* sv
-Am|void|SvUNLOCK|SV* sv
-Am|void|SvUPGRADE|SV* sv|svtype type
-Am|void|SvUTF8_off|SV *sv
-Am|void|SvUTF8_on|SV *sv
-Am|void|SvUV_set|SV* sv|UV val
-Am|void|XopDISABLE|XOP *xop|which
-Am|void|XopENABLE|XOP *xop|which
-Am|void|XopENTRY_set|XOP *xop|which|value
-Am|void|XPUSHi|IV iv
-Am|void|XPUSHmortal
-Am|void|XPUSHn|NV nv
-Am|void|XPUSHp|char* str|STRLEN len
-Am|void|XPUSHs|SV* sv
-Am|void|XPUSHu|UV uv
-Am|void|XSRETURN|int nitems
-Am|void|XSRETURN_IV|IV iv
-Am|void|XSRETURN_NV|NV nv
-Am|void|XSRETURN_PV|char* str
-Am|void|XSRETURN_UV|IV uv
-Am|void|XST_mIV|int pos|IV iv
-Am|void|XST_mNO|int pos
-Am|void|XST_mNV|int pos|NV nv
-Am|void|XST_mPV|int pos|char* str
-Am|void|XST_mUNDEF|int pos
-Am|void|XST_mYES|int pos
-Am|void *|ZeroD|void* dest|int nitems|type
-Am|void|Zero|void* dest|int nitems|type
-Amx|bool|PadnameUTF8|PADNAME pn
-Amx|char *|PadnamePV|PADNAME pn
-Amx|COPHH *|cophh_copy|COPHH *cophh
-Amx|COPHH *|cophh_delete_pv|const COPHH *cophh|const char *key|U32 hash|U32 flags
-Amx|COPHH *|cophh_delete_pvn|COPHH *cophh|const char *keypv|STRLEN keylen|U32 hash|U32 flags
-Amx|COPHH *|cophh_delete_pvs|const COPHH *cophh|"literal string" key|U32 flags
-Amx|COPHH *|cophh_delete_sv|const COPHH *cophh|SV *key|U32 hash|U32 flags
-Amx|COPHH *|cophh_new_empty
-Amx|COPHH *|cophh_store_pv|const COPHH *cophh|const char *key|U32 hash|SV *value|U32 flags
-Amx|COPHH *|cophh_store_pvn|COPHH *cophh|const char *keypv|STRLEN keylen|U32 hash|SV *value|U32 flags
-Amx|COPHH *|cophh_store_pvs|const COPHH *cophh|"literal string" key|SV *value|U32 flags
-Amx|COPHH *|cophh_store_sv|const COPHH *cophh|SV *key|U32 hash|SV *value|U32 flags
-Amx|HV *|cophh_2hv|const COPHH *cophh|U32 flags
-Am||XopENTRYCUSTOM|const OP *o|which
-Am||XopENTRY|XOP *xop|which
-Amx|PADLIST *|CvPADLIST|CV *cv
-Amx|PADNAMELIST *|PadlistNAMES|PADLIST padlist
-Amx|PADNAME **|PadlistNAMESARRAY|PADLIST padlist
-Amx|PADNAME **|PadnamelistARRAY|PADNAMELIST pnl
-Amx|PAD **|PadlistARRAY|PADLIST padlist
-Amx|SSize_t|PadlistMAX|PADLIST padlist
-Amx|SSize_t|PadlistNAMESMAX|PADLIST padlist
-Amx|SSize_t|PadMAX|PAD pad
-Amx|SSize_t|PadnamelistMAX|PADNAMELIST pnl
-Amx|SSize_t|PadnamelistREFCNT|PADNAMELIST pnl
-Amx|SSize_t|PadnameREFCNT|PADNAME pn
-Amx|STRLEN|PadnameLEN|PADNAME pn
-Amx|SV *|cophh_fetch_pv|const COPHH *cophh|const char *key|U32 hash|U32 flags
-Amx|SV *|cophh_fetch_pvn|const COPHH *cophh|const char *keypv|STRLEN keylen|U32 hash|U32 flags
-Amx|SV *|cophh_fetch_pvs|const COPHH *cophh|"literal string" key|U32 flags
-Amx|SV *|cophh_fetch_sv|const COPHH *cophh|SV *key|U32 hash|U32 flags
-Amx|SV*|newSVpadname|PADNAME *pn
-Amx|SV **|PadARRAY|PAD pad
-Amx|SV *|PadnameSV|PADNAME pn
-Amx|U32|PadlistREFCNT|PADLIST padlist
-AmxU|char *|PL_parser-E<gt>bufend
-AmxU|char *|PL_parser-E<gt>bufptr
-AmxU|char *|PL_parser-E<gt>linestart
-AmxU|PADNAMELIST *|PL_comppad_name
-AmxU|PAD *|PL_comppad
-AmxU|SV **|PL_curpad
-AmxU|SV *|PL_parser-E<gt>linestr
-Amx|void|BhkDISABLE|BHK *hk|which
-Amx|void|BhkENABLE|BHK *hk|which
-Amx|void|BhkENTRY_set|BHK *hk|which|void *ptr
-Amx|void|cophh_free|COPHH *cophh
-Amx|void|lex_stuff_pvs|"literal string" pv|U32 flags
-Amx|void|PadnamelistREFCNT_dec|PADNAMELIST pnl
-Amx|void|PadnameREFCNT_dec|PADNAME pn
-m|bool|CvWEAKOUTSIDE|CV *cv
-m|bool|PadnameIsOUR|PADNAME pn
-m|bool|PadnameIsSTATE|PADNAME pn
-m|bool|PadnameOUTER|PADNAME pn
-m|char *|PAD_COMPNAME_PV|PADOFFSET po
-m|HV *|PAD_COMPNAME_OURSTASH|PADOFFSET po
-m|HV *|PAD_COMPNAME_TYPE|PADOFFSET po
-m|HV *|PadnameOURSTASH
-m|HV *|PadnameTYPE|PADNAME pn
-mn|GV *|PL_DBsub
-mn|GV*|PL_last_in_gv
-mn|GV*|PL_ofsgv
-mn|SV *|PL_DBsingle
-mn|SV *|PL_DBtrace
-mn|SV*|PL_rs
-mn|U8|PL_dowarn
-ms||djSP
-m|STRLEN|PAD_COMPNAME_GEN|PADOFFSET po
-m|STRLEN|PAD_COMPNAME_GEN_set|PADOFFSET po|int gen
-m|struct refcounted_he *|refcounted_he_new_pvs|struct refcounted_he *parent|"literal string" key|SV *value|U32 flags
-m|SV *|CX_CURPAD_SV|struct context|PADOFFSET po
-m|SV *|PAD_BASE_SV     |PADLIST padlist|PADOFFSET po
-m|SV *|PAD_SETSV       |PADOFFSET po|SV* sv
-m|SV *|PAD_SVl |PADOFFSET po
-m|SV *|PAD_SV  |PADOFFSET po
-m|SV *|refcounted_he_fetch_pvs|const struct refcounted_he *chain|"literal string" key|U32 flags
-m|U32|PAD_COMPNAME_FLAGS|PADOFFSET po
-m|U32|SvTHINKFIRST|SV *sv
-mU||LVRET
-m|void|CX_CURPAD_SAVE|struct context
-m|void|PAD_CLONE_VARS|PerlInterpreter *proto_perl|CLONE_PARAMS* param
-m|void|PAD_RESTORE_LOCAL|PAD *opad
-m|void|PAD_SAVE_LOCAL|PAD *opad|PAD *npad
-m|void|PAD_SAVE_SETNULLPAD
-m|void|PAD_SET_CUR_NOSAVE      |PADLIST padlist|I32 n
-m|void|PAD_SET_CUR     |PADLIST padlist|I32 n
-m|void|SAVECLEARSV     |SV **svp
-m|void|SAVECOMPPAD
-m|void|SAVEPADSV       |PADOFFSET po
-mx|U32|BhkFLAGS|BHK *hk
-mx|void *|BhkENTRY|BHK *hk|which
-mx|void|CALL_BLOCK_HOOKS|which|arg
+Amnhd||_aMY_CXT
+Amnhd||aMY_CXT
+Amnhd||aMY_CXT_
+Amnd||ARCHNAME
+Amd|void|__ASSERT_|bool expr
+Amnhd||aTHX
+Amnhd||aTHX_
+Amd|int|AvFILL|AV* av
+Amnd|I32|ax
+Amxud|void|BhkDISABLE|BHK *hk|which
+Amxud|void|BhkENABLE|BHK *hk|which
+mxud|void *|BhkENTRY|BHK *hk|which
+Amxud|void|BhkENTRY_set|BHK *hk|which|void *ptr
+mxd|U32|BhkFLAGS|BHK *hk
+Amnd||BIN
+AmnUd|const char *|BOM_UTF8
+Amd|SV *|boolSV|bool b
+Amnd||BYTEORDER
+mxud|void|CALL_BLOCK_HOOKS|which|arg
+Amnhd||CALL_CHECKER_REQUIRE_GV
+Amd|void *|C_ARRAY_END|void *a
+Amd|STRLEN|C_ARRAY_LENGTH|void *a
+Amnd||CASTFLAGS
+Amd|bool|cBOOL|bool expr
+Amnd||CHARBITS
+Amd|bool|ckWARN|U32 w
+Amd|bool|ckWARN2|U32 w1|U32 w2
+Amd|bool|ckWARN2_d|U32 w1|U32 w2
+Amd|bool|ckWARN3|U32 w1|U32 w2|U32 w3
+Amd|bool|ckWARN3_d|U32 w1|U32 w2|U32 w3
+Amd|bool|ckWARN4|U32 w1|U32 w2|U32 w3|U32 w4
+Amd|bool|ckWARN4_d|U32 w1|U32 w2|U32 w3|U32 w4
+Amd|bool|ckWARN_d|U32 w
+Amnd|char*|CLASS
+Amd|void|CLEAR_ERRSV
+Amxd|HV *|cophh_2hv|const COPHH *cophh|U32 flags
+Amxd|COPHH *|cophh_copy|COPHH *cophh
+Amxd|COPHH *|cophh_delete_pv|const COPHH *cophh|const char *key|U32 hash|U32 flags
+Amxd|COPHH *|cophh_delete_pvn|COPHH *cophh|const char *keypv|STRLEN keylen|U32 hash|U32 flags
+Amxd|COPHH *|cophh_delete_pvs|const COPHH *cophh|"key"|U32 flags
+Amxd|COPHH *|cophh_delete_sv|const COPHH *cophh|SV *key|U32 hash|U32 flags
+Amxd|SV *|cophh_fetch_pv|const COPHH *cophh|const char *key|U32 hash|U32 flags
+Amxd|SV *|cophh_fetch_pvn|const COPHH *cophh|const char *keypv|STRLEN keylen|U32 hash|U32 flags
+Amxd|SV *|cophh_fetch_pvs|const COPHH *cophh|"key"|U32 flags
+Amxd|SV *|cophh_fetch_sv|const COPHH *cophh|SV *key|U32 hash|U32 flags
+Amxd|void|cophh_free|COPHH *cophh
+Amnhd||COPHH_KEY_UTF8
+Amxd|COPHH *|cophh_new_empty
+Amxd|COPHH *|cophh_store_pv|const COPHH *cophh|const char *key|U32 hash|SV *value|U32 flags
+Amxd|COPHH *|cophh_store_pvn|COPHH *cophh|const char *keypv|STRLEN keylen|U32 hash|SV *value|U32 flags
+Amxd|COPHH *|cophh_store_pvs|const COPHH *cophh|"key"|SV *value|U32 flags
+Amxd|COPHH *|cophh_store_sv|const COPHH *cophh|SV *key|U32 hash|SV *value|U32 flags
+Amd|HV *|cop_hints_2hv|const COP *cop|U32 flags
+Amd|SV *|cop_hints_fetch_pv|const COP *cop|const char *key|U32 hash|U32 flags
+Amd|SV *|cop_hints_fetch_pvn|const COP *cop|const char *keypv|STRLEN keylen|U32 hash|U32 flags
+Amd|SV *|cop_hints_fetch_pvs|const COP *cop|"key"|U32 flags
+Amd|SV *|cop_hints_fetch_sv|const COP *cop|SV *key|U32 hash|U32 flags
+Amd|const char *|CopLABEL|COP *const cop
+Amd|const char *|CopLABEL_len|COP *const cop|STRLEN *len
+Amd|const char *|CopLABEL_len_flags|COP *const cop|STRLEN *len|U32 *flags
+Amd|void|Copy|void* src|void* dest|int nitems|type
+Amd|void *|CopyD|void* src|void* dest|int nitems|type
+Amnd||CPPLAST
+Amnd||CPPMINUS
+Amnd||CPPRUN
+Amnd||CPPSTDIN
+Amnhd||CV_NAME_NOTQUAL
+Amxd|PADLIST *|CvPADLIST|CV *cv
+Amd|HV*|CvSTASH|CV* cv
+md|bool|CvWEAKOUTSIDE|CV *cv
+md|void|CX_CURPAD_SAVE|struct context
+md|SV *|CX_CURPAD_SV|struct context|PADOFFSET po
+Amnsd||dAX
+Amnsd||dAXMARK
+Amnd|void|DECLARATION_FOR_LC_NUMERIC_MANIPULATION
+Amnsd||dITEMS
+msd||djSP
+Amnsd||dMARK
+Amnsd||dMULTICALL
+Amnhd||dMY_CXT
+Amnsd||dORIGMARK
+Amnd||DOUBLEINFBYTES
+Amnd||DOUBLEKIND
+Amnd||DOUBLEMANTBITS
+Amnd||DOUBLENANBYTES
+Amnd||DOUBLESIZE
+Amd|bool|DO_UTF8|SV* sv
+mnd|void|dSAVEDERRNO
+mnd|void|dSAVE_ERRNO
+Amnsd||dSP
+Amnhd||dTHR
+Amnhd||dTHX
+Amnsd||dUNDERBAR
+Amnhd||dVAR
+Amnsd||dXCPT
+Amnsd||dXSARGS
+Amnsd||dXSI32
+Amnsd||ENTER
+Amsd||ENTER_with_name|"name"
+Amnd|SV *|ERRSV
+Amd|void|EXTEND|SP|SSize_t nitems
+Amnsd||FREETMPS
+AmnUd||G_ARRAY
+AmnUd||G_DISCARD
+AmnUd||G_EVAL
+Amnd|U32|GIMME
+Amnd|U32|GIMME_V
+Amnhd||G_METHOD
+Amnhd||G_METHOD_NAMED
+AmnUd||G_NOARGS
+Amnhd||G_RETHROW
+AmdR|bool|GROK_NUMERIC_RADIX|NN const char **sp|NN const char *send
+AmnUd||G_SCALAR
+Amnhd||GV_ADD
+Amnhd||GV_ADDMG
+Amnhd||GV_ADDMULTI
+Amd|AV*|GvAV|GV* gv
+Amd|CV*|GvCV|GV* gv
+Amd|HV*|GvHV|GV* gv
+Amnhd||GV_NOADD_NOINIT
+Amnhd||GV_NOEXPAND
+Amnhd||GV_NOINIT
+AmnUd||G_VOID
+Amd|HV*|gv_stashpvs|"name"|I32 create
+Amnhd||GV_SUPER
+Amd|SV*|GvSV|GV* gv
+AmnUd||HEf_SVKEY
+Amd|U32|HeHASH|HE* he
+Amd|void*|HeKEY|HE* he
+Amd|STRLEN|HeKLEN|HE* he
+Amd|char*|HePV|HE* he|STRLEN len
+Amd|SV*|HeSVKEY|HE* he
+Amd|SV*|HeSVKEY_force|HE* he
+Amd|SV*|HeSVKEY_set|HE* he|SV* sv
+Amd|U32|HeUTF8|HE* he
+Amd|SV*|HeVAL|HE* he
+Amd|char*|HvENAME|HV* stash
+Amd|STRLEN|HvENAMELEN|HV *stash
+Amd|unsigned char|HvENAMEUTF8|HV *stash
+Amd|SV**|hv_fetchs|HV* tb|"key"|I32 lval
+Amd|STRLEN|HvFILL|HV *const hv
+Amnhd||HV_ITERNEXT_WANTPLACEHOLDERS
+Amd|char*|HvNAME|HV* stash
+Amd|STRLEN|HvNAMELEN|HV *stash
+Amd|unsigned char|HvNAMEUTF8|HV *stash
+Amd|SV**|hv_stores|HV* tb|"key"|SV* val
+Amnd||I16SIZE
+Amnd||I16TYPE
+Amnd||I32SIZE
+Amnd||I32TYPE
+Amnd||I8SIZE
+Amnd||I8TYPE
+Amnd|bool|IN_LOCALE
+Amnd|bool|IN_LOCALE_COMPILETIME
+Amnd|bool|IN_LOCALE_RUNTIME
+Amhd|void *|INT2PTR|type|int value
+Amnd||INTSIZE
+Amhd|bool|isALNUM|int ch
+Amhd|bool|isALNUM_A|int ch
+Amhd|bool|isALNUMC|int ch
+Amhd|bool|isALNUMC_A|int ch
+Amhd|bool|isALNUMC_L1|int ch
+Amhd|bool|isALNUMC_LC|int ch
+Amhd|bool|isALNUMC_LC_uvchr|int ch
+Amhd|bool|isALNUM_LC|int ch
+Amhd|bool|isALNUM_LC_uvchr|int ch
+Amd|bool|isALPHA|int ch
+Amhd|bool|isALPHA_A|int ch
+Amhd|bool|isALPHA_L1|int ch
+Amhd|bool|isALPHA_LC|int ch
+Amhd|bool|isALPHA_LC_utf8_safe|U8 * s| U8 *end
+Amhd|bool|isALPHA_LC_uvchr|int ch
+Amd|bool|isALPHANUMERIC|int ch
+Amhd|bool|isALPHANUMERIC_A|int ch
+Amhd|bool|isALPHANUMERIC_L1|int ch
+Amhd|bool|isALPHANUMERIC_LC|int ch
+Amhd|bool|isALPHANUMERIC_LC_utf8_safe|U8 * s| U8 *end
+Amhd|bool|isALPHANUMERIC_LC_uvchr|int ch
+Amhd|bool|isALPHANUMERIC_utf8|U8 * s|U8 * end
+Amhd|bool|isALPHANUMERIC_utf8_safe|U8 * s|U8 * end
+Amhd|bool|isALPHANUMERIC_uvchr|int ch
+Amhd|bool|isALPHA_utf8|U8 * s|U8 * end
+Amhd|bool|isALPHA_utf8_safe|U8 * s|U8 * end
+Amhd|bool|isALPHA_uvchr|int ch
+Amd|bool|isASCII|int ch
+Amhd|bool|isASCII_A|int ch
+Amhd|bool|isASCII_L1|int ch
+Amhd|bool|isASCII_LC|int ch
+Amhd|bool|isASCII_LC_utf8_safe|U8 * s| U8 *end
+Amhd|bool|isASCII_LC_uvchr|int ch
+Amhd|bool|isASCII_utf8|U8 * s|U8 * end
+Amhd|bool|isASCII_utf8_safe|U8 * s|U8 * end
+Amhd|bool|isASCII_uvchr|int ch
+Amd|bool|isBLANK|char ch
+Amhd|bool|isBLANK_A|int ch
+Amhd|bool|isBLANK_L1|int ch
+Amhd|bool|isBLANK_LC|int ch
+Amhd|bool|isBLANK_LC_utf8_safe|U8 * s| U8 *end
+Amhd|bool|isBLANK_LC_uvchr|int ch
+Amhd|bool|isBLANK_utf8|U8 * s|U8 * end
+Amhd|bool|isBLANK_utf8_safe|U8 * s|U8 * end
+Amhd|bool|isBLANK_uvchr|int ch
+Amd|bool|isCNTRL|char ch
+Amhd|bool|isCNTRL_A|int ch
+Amhd|bool|isCNTRL_L1|int ch
+Amhd|bool|isCNTRL_LC|int ch
+Amhd|bool|isCNTRL_LC_utf8_safe|U8 * s| U8 *end
+Amhd|bool|isCNTRL_LC_uvchr|int ch
+Amhd|bool|isCNTRL_utf8|U8 * s|U8 * end
+Amhd|bool|isCNTRL_utf8_safe|U8 * s|U8 * end
+Amhd|bool|isCNTRL_uvchr|int ch
+Amd|bool|isDIGIT|char ch
+Amhd|bool|isDIGIT_A|int ch
+Amhd|bool|isDIGIT_L1|int ch
+Amhd|bool|isDIGIT_LC|int ch
+Amhd|bool|isDIGIT_LC_utf8_safe|U8 * s| U8 *end
+Amhd|bool|isDIGIT_LC_uvchr|int ch
+Amhd|bool|isDIGIT_utf8|U8 * s|U8 * end
+Amhd|bool|isDIGIT_utf8_safe|U8 * s|U8 * end
+Amhd|bool|isDIGIT_uvchr|int ch
+Amd|bool|isGRAPH|char ch
+Amhd|bool|isGRAPH_A|int ch
+Amhd|bool|isGRAPH_L1|int ch
+Amhd|bool|isGRAPH_LC|int ch
+Amhd|bool|isGRAPH_LC_utf8_safe|U8 * s| U8 *end
+Amhd|bool|isGRAPH_LC_uvchr|int ch
+Amhd|bool|isGRAPH_utf8|U8 * s|U8 * end
+Amhd|bool|isGRAPH_utf8_safe|U8 * s|U8 * end
+Amhd|bool|isGRAPH_uvchr|int ch
+Amd|bool|isIDCONT|char ch
+Amhd|bool|isIDCONT_A|int ch
+Amhd|bool|isIDCONT_L1|int ch
+Amhd|bool|isIDCONT_LC|int ch
+Amhd|bool|isIDCONT_LC_utf8_safe|U8 * s| U8 *end
+Amhd|bool|isIDCONT_LC_uvchr|int ch
+Amhd|bool|isIDCONT_utf8|U8 * s|U8 * end
+Amhd|bool|isIDCONT_utf8_safe|U8 * s|U8 * end
+Amhd|bool|isIDCONT_uvchr|int ch
+Amd|bool|isIDFIRST|char ch
+Amhd|bool|isIDFIRST_A|int ch
+Amhd|bool|isIDFIRST_L1|int ch
+Amhd|bool|isIDFIRST_LC|int ch
+Amhd|bool|isIDFIRST_LC_utf8_safe|U8 * s| U8 *end
+Amhd|bool|isIDFIRST_LC_uvchr|int ch
+Amhd|bool|isIDFIRST_utf8|U8 * s|U8 * end
+Amhd|bool|isIDFIRST_utf8_safe|U8 * s|U8 * end
+Amhd|bool|isIDFIRST_uvchr|int ch
+Amd|bool|isLOWER|char ch
+Amhd|bool|isLOWER_A|int ch
+Amhd|bool|isLOWER_L1|int ch
+Amhd|bool|isLOWER_LC|int ch
+Amhd|bool|isLOWER_LC_utf8_safe|U8 * s| U8 *end
+Amhd|bool|isLOWER_LC_uvchr|int ch
+Amhd|bool|isLOWER_utf8|U8 * s|U8 * end
+Amhd|bool|isLOWER_utf8_safe|U8 * s|U8 * end
+Amhd|bool|isLOWER_uvchr|int ch
+Amnd|bool|IS_NUMBER_GREATER_THAN_UV_MAX
+Amnd|bool|IS_NUMBER_INFINITY
+Amnd|bool|IS_NUMBER_IN_UV
+Amnd|bool|IS_NUMBER_NAN
+Amnd|bool|IS_NUMBER_NEG
+Amnd|bool|IS_NUMBER_NOT_INT
+Amd|bool|isOCTAL|char ch
+Amhd|bool|isOCTAL_A|int ch
+Amhd|bool|isOCTAL_L1|int ch
+Amd|bool|isPRINT|char ch
+Amhd|bool|isPRINT_A|int ch
+Amhd|bool|isPRINT_L1|int ch
+Amhd|bool|isPRINT_LC|int ch
+Amhd|bool|isPRINT_LC_utf8_safe|U8 * s| U8 *end
+Amhd|bool|isPRINT_LC_uvchr|int ch
+Amhd|bool|isPRINT_utf8|U8 * s|U8 * end
+Amhd|bool|isPRINT_utf8_safe|U8 * s|U8 * end
+Amhd|bool|isPRINT_uvchr|int ch
+Amd|bool|isPSXSPC|char ch
+Amhd|bool|isPSXSPC_A|int ch
+Amhd|bool|isPSXSPC_L1|int ch
+Amhd|bool|isPSXSPC_LC|int ch
+Amhd|bool|isPSXSPC_LC_utf8_safe|U8 * s| U8 *end
+Amhd|bool|isPSXSPC_LC_uvchr|int ch
+Amhd|bool|isPSXSPC_utf8|U8 * s|U8 * end
+Amhd|bool|isPSXSPC_utf8_safe|U8 * s|U8 * end
+Amhd|bool|isPSXSPC_uvchr|int ch
+Amd|bool|isPUNCT|char ch
+Amhd|bool|isPUNCT_A|int ch
+Amhd|bool|isPUNCT_L1|int ch
+Amhd|bool|isPUNCT_LC|int ch
+Amhd|bool|isPUNCT_LC_utf8_safe|U8 * s| U8 *end
+Amhd|bool|isPUNCT_LC_uvchr|int ch
+Amhd|bool|isPUNCT_utf8|U8 * s|U8 * end
+Amhd|bool|isPUNCT_utf8_safe|U8 * s|U8 * end
+Amhd|bool|isPUNCT_uvchr|int ch
+Amd|bool|IS_SAFE_SYSCALL|NN const char *pv|STRLEN len|NN const char *what|NN const char *op_name
+Amd|bool|isSPACE|char ch
+Amhd|bool|isSPACE_A|int ch
+Amhd|bool|isSPACE_L1|int ch
+Amhd|bool|isSPACE_LC|int ch
+Amhd|bool|isSPACE_LC_utf8_safe|U8 * s| U8 *end
+Amhd|bool|isSPACE_LC_uvchr|int ch
+Amhd|bool|isSPACE_utf8|U8 * s|U8 * end
+Amhd|bool|isSPACE_utf8_safe|U8 * s|U8 * end
+Amhd|bool|isSPACE_uvchr|int ch
+Amd|bool|isUPPER|char ch
+Amhd|bool|isUPPER_A|int ch
+Amhd|bool|isUPPER_L1|int ch
+Amhd|bool|isUPPER_LC|int ch
+Amhd|bool|isUPPER_LC_utf8_safe|U8 * s| U8 *end
+Amhd|bool|isUPPER_LC_uvchr|int ch
+Amhd|bool|isUPPER_utf8|U8 * s|U8 * end
+Amhd|bool|isUPPER_utf8_safe|U8 * s|U8 * end
+Amhd|bool|isUPPER_uvchr|int ch
+Amd|STRLEN|isUTF8_CHAR_flags|const U8 *s|const U8 *e| const U32 flags
+Amd|bool|isWORDCHAR|char ch
+Amhd|bool|isWORDCHAR_A|int ch
+Amhd|bool|isWORDCHAR_L1|int ch
+Amhd|bool|isWORDCHAR_LC|int ch
+Amhd|bool|isWORDCHAR_LC_utf8_safe|U8 * s| U8 *end
+Amhd|bool|isWORDCHAR_LC_uvchr|int ch
+Amhd|bool|isWORDCHAR_utf8|U8 * s|U8 * end
+Amhd|bool|isWORDCHAR_utf8_safe|U8 * s|U8 * end
+Amhd|bool|isWORDCHAR_uvchr|int ch
+Amd|bool|isXDIGIT|char ch
+Amhd|bool|isXDIGIT_A|int ch
+Amhd|bool|isXDIGIT_L1|int ch
+Amhd|bool|isXDIGIT_LC|int ch
+Amhd|bool|isXDIGIT_LC_utf8_safe|U8 * s| U8 *end
+Amhd|bool|isXDIGIT_LC_uvchr|int ch
+Amhd|bool|isXDIGIT_utf8|U8 * s|U8 * end
+Amhd|bool|isXDIGIT_utf8_safe|U8 * s|U8 * end
+Amhd|bool|isXDIGIT_uvchr|int ch
+Amnd|I32|items
+Amnhd||IVdf
+Amnd||IVSIZE
+Amnd||IVTYPE
+Amnd|I32|ix
+Amd|U8|LATIN1_TO_NATIVE|U8 ch
+Amnsd||LEAVE
+Amsd||LEAVE_with_name|"name"
+Amnhd||LEX_KEEP_PREVIOUS
+Amxd|void|lex_stuff_pvs|"pv"|U32 flags
+Amnhd||LEX_STUFF_UTF8
+AmUd|bool|LIKELY|const bool expr
+Amd|OP*|LINKLIST|OP *o
+Amnd||LONGDBLINFBYTES
+Amnd||LONGDBLMANTBITS
+Amnd||LONGDBLNANBYTES
+Amnd||LONGSIZE
+Amnd||LSEEKSIZE
+mnUd||LVRET
+AmnUd||MARK
+Amd|bool|memCHRs|"list"|char c
+Amd|bool|memEQ|char* s1|char* s2|STRLEN len
+Amd|bool|memEQs|char* s1|STRLEN l1|"s2"
+Amd|bool|memNE|char* s1|char* s2|STRLEN len
+Amd|bool|memNEs|char* s1|STRLEN l1|"s2"
+Amd|void|Move|void* src|void* dest|int nitems|type
+Amd|void *|MoveD|void* src|void* dest|int nitems|type
+Amd|void|mPUSHi|IV iv
+Amd|void|mPUSHn|NV nv
+Amd|void|mPUSHp|char* str|STRLEN len
+Amd|void|mPUSHs|SV* sv
+Amd|void|mPUSHu|UV uv
+Amnsd||MULTICALL
+Amd|void|mXPUSHi|IV iv
+Amd|void|mXPUSHn|NV nv
+Amd|void|mXPUSHp|char* str|STRLEN len
+Amd|void|mXPUSHs|SV* sv
+Amd|void|mXPUSHu|UV uv
+Amnhd||MY_CXT
+Amnhd||MY_CXT_CLONE
+Amnhd||MY_CXT_INIT
+ATmDd|int|my_sprintf|NN char *buffer|NN const char *pat|...
+Amd|U8|NATIVE_TO_LATIN1|U8 ch
+Amd|UV|NATIVE_TO_UNI|UV ch
+Amd|SV*|newRV_inc|SV* sv
+Amxd|SV*|newSVpadname|PADNAME *pn
+Amd|SV*|newSVpvn_utf8|const char* s|STRLEN len|U32 utf8
+Amad|SV*|newSVpvs|"literal string"
+Amad|SV*|newSVpvs_flags|"literal string"|U32 flags
+Amad|SV*|newSVpvs_share|"literal string"
+Amd|void|Newx|void* ptr|int nitems|type
+Amd|void|Newxc|void* ptr|int nitems|type|cast
+AmUd||newXSproto|char* name|XSUBADDR_t f|char* filename|const char *proto
+Amd|void|Newxz|void* ptr|int nitems|type
+ADmnUd||Nullav
+AmnUd||Nullch
+ADmnUd||Nullcv
+ADmnUd||Nullhv
+AmnUd||Nullsv
+Amnhd||NVef
+Amnhd||NVff
+Amnhd||NVgf
+Amnd||NVMANTBITS
+Amnd||NVSIZE
+Amnd||NVTYPE
+Amd|U32|OP_CLASS|OP *o
+Amd|const char *|OP_DESC|OP *o
+Amnhd||OPf_KIDS
+Amd|bool|OpHAS_SIBLING|OP *o
+Amd|void|OpLASTSIB_set|OP *o|OP *parent
+Amd|void|OpMAYBESIB_set|OP *o|OP *sib|OP *parent
+Amd|void|OpMORESIB_set|OP *o|OP *sib
+Amd|const char *|OP_NAME|OP *o
+Amnhd||OPpEARLY_CV
+Amnhd||OPpENTERSUB_AMPER
+Amd|OP*|OpSIBLING|OP *o
+Amd|bool|OP_TYPE_IS|OP *o|Optype type
+Amd|bool|OP_TYPE_IS_OR_WAS|OP *o|Optype type
+AmnUd||ORIGMARK
+Amnd||OSNAME
+Amnd||OSVERS
+Amd|PADOFFSET|pad_add_name_pvs|"name"|U32 flags|HV *typestash|HV *ourstash
+Amxd|SV **|PadARRAY|PAD * pad
+md|SV *|PAD_BASE_SV    |PADLIST padlist|PADOFFSET po
+md|void|PAD_CLONE_VARS|PerlInterpreter *proto_perl|CLONE_PARAMS* param
+md|U32|PAD_COMPNAME_FLAGS|PADOFFSET po
+md|STRLEN|PAD_COMPNAME_GEN|PADOFFSET po
+md|STRLEN|PAD_COMPNAME_GEN_set|PADOFFSET po|int gen
+md|HV *|PAD_COMPNAME_OURSTASH|PADOFFSET po
+md|char *|PAD_COMPNAME_PV|PADOFFSET po
+md|HV *|PAD_COMPNAME_TYPE|PADOFFSET po
+Amd|PADOFFSET|pad_findmy_pvs|"name"|U32 flags
+Amxd|PAD **|PadlistARRAY|PADLIST * padlist
+Amxd|SSize_t|PadlistMAX|PADLIST * padlist
+Amxd|PADNAMELIST *|PadlistNAMES|PADLIST * padlist
+Amxd|PADNAME **|PadlistNAMESARRAY|PADLIST * padlist
+Amxd|SSize_t|PadlistNAMESMAX|PADLIST * padlist
+Amxd|U32|PadlistREFCNT|PADLIST * padlist
+Amxd|SSize_t|PadMAX|PAD * pad
+md|bool|PadnameIsOUR|PADNAME * pn
+md|bool|PadnameIsSTATE|PADNAME * pn
+Amxd|STRLEN|PadnameLEN|PADNAME * pn
+Amxd|PADNAME **|PadnamelistARRAY|PADNAMELIST * pnl
+Amxd|SSize_t|PadnamelistMAX|PADNAMELIST * pnl
+Amxd|SSize_t|PadnamelistREFCNT|PADNAMELIST * pnl
+Amxd|void|PadnamelistREFCNT_dec|PADNAMELIST * pnl
+md|HV *|PadnameOURSTASH
+md|bool|PadnameOUTER|PADNAME * pn
+Amxd|char *|PadnamePV|PADNAME * pn
+Amxd|SSize_t|PadnameREFCNT|PADNAME * pn
+Amxd|void|PadnameREFCNT_dec|PADNAME * pn
+Amxd|SV *|PadnameSV|PADNAME * pn
+Amnhd||PADNAMEt_OUTER
+md|HV *|PadnameTYPE|PADNAME * pn
+Amxd|bool|PadnameUTF8|PADNAME * pn
+md|void|PAD_RESTORE_LOCAL|PAD *opad
+md|void|PAD_SAVE_LOCAL|PAD *opad|PAD *npad
+md|void|PAD_SAVE_SETNULLPAD
+md|void|PAD_SET_CUR    |PADLIST padlist|I32 n
+md|void|PAD_SET_CUR_NOSAVE     |PADLIST padlist|I32 n
+md|SV *|PAD_SETSV      |PADOFFSET po|SV* sv
+md|SV *|PAD_SV |PADOFFSET po
+md|SV *|PAD_SVl        |PADOFFSET po
+Amnhd||PARSE_OPTIONAL
+Amd|int|PERL_ABS|int
+Amnhd||PERL_EXIT_ABORT
+Amnhd||PERL_EXIT_DESTRUCT_END
+Amnhd||PERL_EXIT_EXPECTED
+Amnhd||PERL_EXIT_WARN
+Amhd|void|PERL_HASH|U32 hash|char *key|STRLEN klen
+AmnUd||PERL_INT_MAX
+AmnUhd||PERL_INT_MIN
+Amhd|int     |PerlIO_apply_layers|PerlIO *f|const char *mode|const char *layers
+Amhd|int     |PerlIO_binmode|PerlIO *f|int ptype|int imode|const char *layers
+ATmhd|int    |PerlIO_canset_cnt|PerlIO *f
+Amhd|void    |PerlIO_debug|const char *fmt|...
+ATmhd|FILE  *|PerlIO_exportFILE|PerlIO *f|const char *mode
+ATmhd|int    |PerlIO_fast_gets|PerlIO *f
+ATmhd|PerlIO*|PerlIO_fdopen|int fd|const char *mode
+ATmhd|FILE  *|PerlIO_findFILE|PerlIO *f
+ATmhd|int    |PerlIO_getc|PerlIO *d
+ATmhd|int    |PerlIO_getpos|PerlIO *f|SV *save
+ATmhd|int    |PerlIO_has_base|PerlIO *f
+ATmhd|int    |PerlIO_has_cntptr|PerlIO *f
+ATmhd|PerlIO*|PerlIO_importFILE|FILE *stdio|const char *mode
+ATmhd|PerlIO*|PerlIO_open|const char *path|const char *mode
+Amhd|int     |PerlIO_printf|PerlIO *f|const char *fmt|...
+ATmhd|int    |PerlIO_putc|PerlIO *f|int ch
+ATmhd|int    |PerlIO_puts|PerlIO *f|const char *string
+ATmhd|void   |PerlIO_releaseFILE|PerlIO *f|FILE *stdio
+Amhd|PerlIO *|PerlIO_reopen|const char *path|const char *mode|PerlIO *old
+ATmhd|void   |PerlIO_rewind|PerlIO *f
+ATmhd|int    |PerlIO_setpos|PerlIO *f|SV *saved
+Amhd|int     |PerlIO_stdoutf|const char *fmt|...
+ATmhd|int    |PerlIO_ungetc|PerlIO *f|int ch
+ATmhd|int    |PerlIO_vprintf|PerlIO *f|const char *fmt|va_list args
+Amnhd||PERL_LOADMOD_DENY
+Amnhd||PERL_LOADMOD_IMPORT_OPS
+Amnhd||PERL_LOADMOD_NOIMPORT
+AmnUhd||PERL_LONG_MAX
+AmnUhd||PERL_LONG_MIN
+Amnhd||PERL_MAGIC_arylen
+Amnhd||PERL_MAGIC_arylen_p
+Amnhd||PERL_MAGIC_backref
+Amnhd||PERL_MAGIC_bm
+Amnhd||PERL_MAGIC_checkcall
+Amnhd||PERL_MAGIC_collxfrm
+Amnhd||PERL_MAGIC_dbfile
+Amnhd||PERL_MAGIC_dbline
+Amnhd||PERL_MAGIC_debugvar
+Amnhd||PERL_MAGIC_defelem
+Amnhd||PERL_MAGIC_env
+Amnhd||PERL_MAGIC_envelem
+Amnhd||PERL_MAGIC_ext
+Amnhd||PERL_MAGIC_fm
+Amnhd||PERL_MAGIC_hints
+Amnhd||PERL_MAGIC_hintselem
+Amnhd||PERL_MAGIC_isa
+Amnhd||PERL_MAGIC_isaelem
+Amnhd||PERL_MAGIC_lvref
+Amnhd||PERL_MAGIC_nkeys
+Amnhd||PERL_MAGIC_nonelem
+Amnhd||PERL_MAGIC_overload_table
+Amnhd||PERL_MAGIC_pos
+Amnhd||PERL_MAGIC_qr
+Amnhd||PERL_MAGIC_regdata
+Amnhd||PERL_MAGIC_regdatum
+Amnhd||PERL_MAGIC_regex_global
+Amnhd||PERL_MAGIC_rhash
+Amnhd||PERL_MAGIC_shared
+Amnhd||PERL_MAGIC_shared_scalar
+Amnhd||PERL_MAGIC_sig
+Amnhd||PERL_MAGIC_sigelem
+Amnhd||PERL_MAGIC_substr
+Amnhd||PERL_MAGIC_sv
+Amnhd||PERL_MAGIC_symtab
+Amnhd||PERL_MAGIC_taint
+Amnhd||PERL_MAGIC_tied
+Amnhd||PERL_MAGIC_tiedelem
+Amnhd||PERL_MAGIC_tiedscalar
+Amnhd||PERL_MAGIC_utf8
+Amnhd||PERL_MAGIC_uvar
+Amnhd||PERL_MAGIC_uvar_elem
+Amnhd||PERL_MAGIC_vec
+Amnhd||PERL_MAGIC_vstring
+Amnhd||PERL_PV_ESCAPE_ALL
+Amnhd||PERL_PV_ESCAPE_FIRSTCHAR
+Amnhd||PERL_PV_ESCAPE_NOBACKSLASH
+Amnhd||PERL_PV_ESCAPE_NOCLEAR
+Amnhd||PERL_PV_ESCAPE_NONASCII
+Amnhd||PERL_PV_ESCAPE_QUOTE
+Amnhd||PERL_PV_ESCAPE_RE
+Amnhd||PERL_PV_ESCAPE_UNI
+Amnhd||PERL_PV_ESCAPE_UNI_DETECT
+Amnhd||PERL_PV_PRETTY_ELLIPSES
+Amnhd||PERL_PV_PRETTY_LTGT
+Amnhd||PERL_PV_PRETTY_QUOTE
+AmnUhd||PERL_QUAD_MAX
+AmnUhd||PERL_QUAD_MIN
+hAmnd|int|PERL_REVISION
+Amnhd||PERL_SCAN_ALLOW_UNDERSCORES
+Amnhd||PERL_SCAN_DISALLOW_PREFIX
+Amnhd||PERL_SCAN_GREATER_THAN_UV_MAX
+Amnhd||PERL_SCAN_SILENT_ILLDIGIT
+Amnhd||PERL_SCAN_TRAILING
+AmnUhd||PERL_SHORT_MAX
+AmnUhd||PERL_SHORT_MIN
+hAmnd|int|PERL_SUBVERSION
+Amd|void|PERL_SYS_INIT|int *argc|char*** argv
+Amd|void|PERL_SYS_INIT3|int *argc|char*** argv|char*** env
+Amd|void|PERL_SYS_TERM|
+AmnUhd||PERL_UCHAR_MAX
+AmnUhd||PERL_UCHAR_MIN
+AmnUhd||PERL_UINT_MAX
+AmnUhd||PERL_ULONG_MAX
+AmnUhd||PERL_ULONG_MIN
+AmnUhd||PERL_UQUAD_MAX
+AmnUhd||PERL_UQUAD_MIN
+AmnUhd||PERL_USHORT_MAX
+AmnUhd||PERL_USHORT_MIN
+hAmnd|int|PERL_VERSION
+AmnUd|Perl_check_t *|PL_check
+AmnxUd|PAD *|PL_comppad
+AmnxUd|PADNAMELIST *|PL_comppad_name
+Amnd|COP*|PL_curcop
+AmnxUd|SV **|PL_curpad
+Amnd|HV*|PL_curstash
+Amnd|GV *|PL_defgv
+Amnhd|GV *|PL_errgv
+Amnd|U8|PL_exit_flags
+AmnUxd|Perl_keyword_plugin_t|PL_keyword_plugin
+mnd|GV*|PL_last_in_gv
+Amnd|HV*|PL_modglobal
+Amnd|STRLEN|PL_na
+mnd|GV*|PL_ofsgv
+Amnd|Perl_ophook_t|PL_opfreehook
+AmnUd|yy_parser *|PL_parser
+AmnxUNd|SV *|PL_parser-E<gt>linestr
+AmnxUNd|char *|PL_parser-E<gt>bufend
+AmnxUNd|char *|PL_parser-E<gt>bufptr
+AmnxUNd|char *|PL_parser-E<gt>linestart
+Amnd|peep_t|PL_peepp
+Amnd|signed char|PL_perl_destruct_level
+Amnd|enum perl_phase|PL_phase
+Amnd|peep_t|PL_rpeepp
+mnd|SV*|PL_rs
+Amnd|runops_proc_t|PL_runops
+Amnd|SV|PL_sv_no
+Amnd|SV|PL_sv_undef
+Amnd|SV|PL_sv_yes
+Amnd|SV|PL_sv_zero
+Amnhd||_pMY_CXT
+Amnhd||pMY_CXT
+Amnhd||pMY_CXT_
+Amd|void|Poison|void* dest|int nitems|type
+Amd|void|PoisonFree|void* dest|int nitems|type
+Amd|void|PoisonNew|void* dest|int nitems|type
+Amd|void|PoisonWith|void* dest|int nitems|type|U8 byte
+Amnd|IV|POPi
+Amnd|long|POPl
+Amnsd||POP_MULTICALL
+Amnd|NV|POPn
+Amnd|char*|POPp
+Amnd|char*|POPpbytex
+Amnd|char*|POPpx
+Amnd|SV*|POPs
+Amnd|UV|POPu
+Amnd|long|POPul
+Amnd||PRIVLIB
+Amnhd||pTHX
+Amnhd||pTHX_
+Amhd|IV|PTR2IV|void *
+Amhd|NV|PTR2NV|void *
+Amhd|UV|PTR2UV|void *
+Amnd||PTRSIZE
+Amd|void|PUSHi|IV iv
+Amd|void|PUSHMARK|SP
+Amnd|void|PUSHmortal
+Amsd||PUSH_MULTICALL|CV* the_cv
+Amd|void|PUSHn|NV nv
+Amd|void|PUSHp|char* str|STRLEN len
+Amd|void|PUSHs|SV* sv
+Amd|void|PUSHu|UV uv
+Amnsd||PUTBACK
+Amnd||RANDBITS
+Amd|U8|READ_XDIGIT|char str*
+md|SV *|refcounted_he_fetch_pvs|const struct refcounted_he *chain|"key"|U32 flags
+md|struct refcounted_he *|refcounted_he_new_pvs|struct refcounted_he *parent|"key"|SV *value|U32 flags
+Amd|void|Renew|void* ptr|int nitems|type
+Amd|void|Renewc|void* ptr|int nitems|type|cast
+AmnUd|const char *|REPLACEMENT_CHARACTER_UTF8
+mnd|void|RESTORE_ERRNO
+Amd|void|RESTORE_LC_NUMERIC
+Amnd|(whatever)|RETVAL
+Amnhd||RV2CVOPCV_MARK_EARLY
+Amnhd||RV2CVOPCV_RETURN_NAME_GV
+Amd|void|Safefree|void* ptr
+Amd|void|SANE_ERRSV
+md|void|SAVECLEARSV    |SV **svp
+md|void|SAVECOMPPAD
+mnd|void|SAVE_ERRNO
+md|void|SAVEPADSV      |PADOFFSET po
+Amad|char*|savepvs|"literal string"
+Amad|char*|savesharedpvs|"literal string"
+Amnsd||SAVETMPS
+md|void|SETERRNO|int errcode|int vmserrcode
+Amnd||SHORTSIZE
+Amnd||SITELIB
+AmnUd||SP
+Amnsd||SPAGAIN
+Amd|SV*|ST|int ix
+Amnhd||START_MY_CXT
+Amnd||STARTPERL
+Amnd||STDCHAR
+AmnUhud|void|STMT_END
+AmnUud|void|STMT_START
+Amd|void|STORE_LC_NUMERIC_FORCE_TO_UNDERLYING
+Amd|void|STORE_LC_NUMERIC_SET_TO_NEEDED
+Amd|void|STORE_LC_NUMERIC_SET_TO_NEEDED_IN|bool in_lc_numeric
+Amd|bool|strEQ|char* s1|char* s2
+Amd|bool|strGE|char* s1|char* s2
+Amd|bool|strGT|char* s1|char* s2
+Amd|bool|strLE|char* s1|char* s2
+Amd|bool|strLT|char* s1|char* s2
+Amd|bool|strNE|char* s1|char* s2
+Amd|bool|strnEQ|char* s1|char* s2|STRLEN len
+Amd|bool|strnNE|char* s1|char* s2|STRLEN len
+AmTRd|NV|Strtod|NN const char * const s|NULLOK char ** e
+AmTRd|NV|Strtol|NN const char * const s|NULLOK char ** e|int base
+AmTRd|NV|Strtoul|NN const char * const s|NULLOK char ** e|int base
+Amd|void|StructCopy|type *src|type *dest|type
+Amud|pair|STR_WITH_LEN|"literal string"
+Amnhd||SV_CATBYTES
+Amd|void|sv_catpvn_nomg|SV* sv|const char* ptr|STRLEN len
+Amd|void|sv_catpv_nomg|SV* sv|const char* ptr
+Amd|void|sv_catpvs|SV* sv|"literal string"
+Amd|void|sv_catpvs_flags|SV* sv|"literal string"|I32 flags
+Amd|void|sv_catpvs_mg|SV* sv|"literal string"
+Amd|void|sv_catpvs_nomg|SV* sv|"literal string"
+Amd|void|sv_catsv_nomg|SV* dsv|SV* ssv
+Amnhd||SV_CATUTF8
+Amnhd||SV_COW_DROP_PV
+Amd|STRLEN|SvCUR|SV* sv
+Amd|void|SvCUR_set|SV* sv|STRLEN len
+Amd|char*|SvEND|SV* sv
+Amnhd||SVf
+Amhd||SVfARG|SV *sv
+Amnhd||SVf_UTF8
+Amd|U32|SvGAMAGIC|SV* sv
+Amd|void|SvGETMAGIC|SV* sv
+Amnhd||SV_GMAGIC
+Amd|char *|SvGROW|SV* sv|STRLEN len
+Amnhd||SV_HAS_TRAILING_NUL
+Amnhd||SV_IMMEDIATE_UNREF
+Amd|U32|SvIOK|SV* sv
+Amd|bool|SvIOK_notUV|SV* sv
+Amd|void|SvIOK_off|SV* sv
+Amd|void|SvIOK_on|SV* sv
+Amd|void|SvIOK_only|SV* sv
+Amd|void|SvIOK_only_UV|SV* sv
+Amd|U32|SvIOKp|SV* sv
+Amd|bool|SvIOK_UV|SV* sv
+Amd|U32|SvIsCOW|SV* sv
+Amd|bool|SvIsCOW_shared_hash|SV* sv
+Amd|IV|SvIV|SV* sv
+Amd|IV|SvIV_nomg|SV* sv
+Amd|void|SvIV_set|SV* sv|IV val
+Amd|IV|SvIVX|SV* sv
+Amd|IV|SvIVx|SV* sv
+Amd|STRLEN|SvLEN|SV* sv
+Amd|void|SvLEN_set|SV* sv|STRLEN len
+Amd|void|SvLOCK|SV* sv
+Amd|void|SvMAGIC_set|SV* sv|MAGIC* val
+Amd|U32|SvNIOK|SV* sv
+Amd|void|SvNIOK_off|SV* sv
+Amd|U32|SvNIOKp|SV* sv
+Amd|U32|SvNOK|SV* sv
+Amd|void|SvNOK_off|SV* sv
+Amd|void|SvNOK_on|SV* sv
+Amd|void|SvNOK_only|SV* sv
+Amd|U32|SvNOKp|SV* sv
+Amnhd||SV_NOSTEAL
+Amd|NV|SvNV|SV* sv
+Amd|NV|SvNV_nomg|SV* sv
+Amd|void|SvNV_set|SV* sv|NV val
+Amd|NV|SvNVX|SV* sv
+Amd|NV|SvNVx|SV* sv
+Amd|U32|SvOK|SV* sv
+Amd|U32|SvOOK|SV* sv
+Amd|void|SvOOK_offset|SV*sv|STRLEN len
+Amd|U32|SvPOK|SV* sv
+Amd|void|SvPOK_off|SV* sv
+Amd|void|SvPOK_on|SV* sv
+Amd|void|SvPOK_only|SV* sv
+Amd|void|SvPOK_only_UTF8|SV* sv
+Amd|U32|SvPOKp|SV* sv
+Amd|char*|SvPV|SV* sv|STRLEN len
+Amd|char*|SvPVbyte|SV* sv|STRLEN len
+Amd|char*|SvPVbyte_force|SV* sv|STRLEN len
+Amd|char*|SvPVbyte_nolen|SV* sv
+Amd|char*|SvPVbyte_nomg|SV* sv|STRLEN len
+Amd|char*|SvPVbyte_or_null|SV* sv|STRLEN len
+Amd|char*|SvPVbyte_or_null_nomg|SV* sv|STRLEN len
+Amd|char*|SvPVbytex|SV* sv|STRLEN len
+Amd|char*|SvPVbytex_force|SV* sv|STRLEN len
+Amd|char *|SvPVCLEAR|SV* sv
+Amd|char*|SvPV_force|SV* sv|STRLEN len
+Amd|char*|SvPV_force_nomg|SV* sv|STRLEN len
+Amd|char*|SvPV_nolen|SV* sv
+Amd|char*|SvPV_nomg|SV* sv|STRLEN len
+Amd|char*|SvPV_nomg_nolen|SV* sv
+Amd|void|SvPV_set|SV* sv|char* val
+Amd|char*|SvPVutf8|SV* sv|STRLEN len
+Amd|char*|SvPVutf8_force|SV* sv|STRLEN len
+Amd|char*|SvPVutf8_nolen|SV* sv
+Amd|char*|SvPVutf8_nomg|SV* sv|STRLEN len
+Amd|char*|SvPVutf8_or_null|SV* sv|STRLEN len
+Amd|char*|SvPVutf8_or_null_nomg|SV* sv|STRLEN len
+Amd|char*|SvPVutf8x|SV* sv|STRLEN len
+Amd|char*|SvPVutf8x_force|SV* sv|STRLEN len
+Amd|char*|SvPVX|SV* sv
+Amd|char*|SvPVx|SV* sv|STRLEN len
+Amd|U32|SvREADONLY|SV* sv
+Amd|U32|SvREADONLY_off|SV* sv
+Amd|U32|SvREADONLY_on|SV* sv
+Amd|U32|SvREFCNT|SV* sv
+Amd|SV*|SvREFCNT_inc_simple|SV* sv
+Amd|SV*|SvREFCNT_inc_simple_NN|SV* sv
+Amd|void|SvREFCNT_inc_simple_void|SV* sv
+Amd|void|SvREFCNT_inc_simple_void_NN|SV* sv
+Amd|void|SvREFCNT_inc_void_NN|SV* sv
+Amd|U32|SvROK|SV* sv
+Amd|void|SvROK_off|SV* sv
+Amd|void|SvROK_on|SV* sv
+Amd|SV*|SvRV|SV* sv
+Amd|void|SvRV_set|SV* sv|SV* val
+Amd|REGEXP *|SvRX|SV *sv
+Amd|bool|SvRXOK|SV* sv
+Amd|void|SvSETMAGIC|SV* sv
+Amd|void|SvSetMagicSV|SV* dsv|SV* ssv
+Amd|void|SvSetMagicSV_nosteal|SV* dsv|SV* ssv
+Amd|void|sv_setpvs|SV* sv|"literal string"
+Amd|void|sv_setpvs_mg|SV* sv|"literal string"
+Amd|SV *|sv_setref_pvs|SV *const rv|const char *const classname|"literal string"
+Amd|void|SvSetSV|SV* dsv|SV* ssv
+Amd|void|sv_setsv_nomg|SV* dsv|SV* ssv
+Amd|void|SvSetSV_nosteal|SV* dsv|SV* ssv
+Amd|void|SvSHARE|SV* sv
+Amnhd||SV_SMAGIC
+Amnhd||SVs_PADSTALE
+Amd|HV*|SvSTASH|SV* sv
+Amd|void|SvSTASH_set|SV* sv|HV* val
+Amnhd||SVs_TEMP
+Amd|void|SvTAINT|SV* sv
+Amd|bool|SvTAINTED|SV* sv
+Amd|void|SvTAINTED_off|SV* sv
+Amd|void|SvTAINTED_on|SV* sv
+md|U32|SvTHINKFIRST|SV *sv
+CmnUd||SVt_INVLIST
+AmnUd||SVt_IV
+AmnUd||SVt_NULL
+AmnUd||SVt_NV
+AmnUd||SVt_PV
+AmnUd||SVt_PVAV
+AmnUd||SVt_PVCV
+AmnUd||SVt_PVFM
+AmnUd||SVt_PVGV
+AmnUd||SVt_PVHV
+AmnUd||SVt_PVIO
+AmnUd||SVt_PVIV
+AmnUd||SVt_PVLV
+AmnUd||SVt_PVMG
+AmnUd||SVt_PVNV
+AmnUd||SVt_REGEXP
+Amd|bool|SvTRUE|SV* sv
+Amd|bool|SvTRUE_nomg|SV* sv
+Amd|bool|SvTRUEx|SV* sv
+Amd|svtype|SvTYPE|SV* sv
+AmnUd||svtype
+Amd|void|SvUNLOCK|SV* sv
+Amd|bool|SvUOK|SV* sv
+Amd|void|SvUPGRADE|SV* sv|svtype type
+Amd|U32|SvUTF8|SV* sv
+Amd|void|SvUTF8_off|SV *sv
+Amd|void|SvUTF8_on|SV *sv
+Amd|UV|SvUV|SV* sv
+Amd|UV|SvUV_nomg|SV* sv
+Amd|void|SvUV_set|SV* sv|UV val
+Amd|UV|SvUVX|SV* sv
+Amd|UV|SvUVx|SV* sv
+AmDd|UV|SvUVXx|SV* sv
+Amd|bool|SvVOK|SV* sv
+Amnd|(whatever)|THIS
+Amd|U8|toFOLD|U8 ch
+Amd|UV|toFOLD_utf8|U8* p|U8* e|U8* s|STRLEN* lenp
+Amd|UV|toFOLD_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
+Amd|UV|toFOLD_uvchr|UV cp|U8* s|STRLEN* lenp
+Amd|U8|toLOWER|U8 ch
+Amd|U8|toLOWER_L1|U8 ch
+Amd|U8|toLOWER_LC|U8 ch
+Amd|UV|toLOWER_utf8|U8* p|U8* e|U8* s|STRLEN* lenp
+Amd|UV|toLOWER_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
+Amd|UV|toLOWER_uvchr|UV cp|U8* s|STRLEN* lenp
+Amd|U8|toTITLE|U8 ch
+Amd|UV|toTITLE_utf8|U8* p|U8* e|U8* s|STRLEN* lenp
+Amd|UV|toTITLE_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
+Amd|UV|toTITLE_uvchr|UV cp|U8* s|STRLEN* lenp
+Amd|U8|toUPPER|int ch
+Amd|UV|toUPPER_utf8|U8* p|U8* e|U8* s|STRLEN* lenp
+Amd|UV|toUPPER_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
+Amd|UV|toUPPER_uvchr|UV cp|U8* s|STRLEN* lenp
+Amnd||U16SIZE
+Amnd||U16TYPE
+Amnd||U32SIZE
+Amnd||U32TYPE
+Amnd||U8SIZE
+Amnd||U8TYPE
+AmnUd||UNDERBAR
+AmnUd|UV|UNICODE_REPLACEMENT
+Amd|UV|UNI_TO_NATIVE|UV ch
+AmUd|bool|UNLIKELY|const bool expr
+Amnhd||UTF8_CHECK_ONLY
+Amd|STRLEN|UTF8_CHK_SKIP|char* s
+Amnhd||UTF8_DISALLOW_ILLEGAL_C9_INTERCHANGE
+Amnhd||UTF8_DISALLOW_ILLEGAL_INTERCHANGE
+Amnhd||UTF8_DISALLOW_NONCHAR
+Amnhd||UTF8_DISALLOW_PERL_EXTENDED
+Amnhd||UTF8_DISALLOW_SUPER
+Amnhd||UTF8_DISALLOW_SURROGATE
+Amnhd||UTF8f
+Amhd||UTF8fARG|bool is_utf8|Size_t byte_len|char *str
+Amd|bool|UTF8_IS_INVARIANT|char c
+Amd|bool|UTF8_IS_NONCHAR|const U8 *s|const U8 *e
+Amd|bool|UTF8_IS_SUPER|const U8 *s|const U8 *e
+Amd|bool|UTF8_IS_SURROGATE|const U8 *s|const U8 *e
+AmnUd|STRLEN|UTF8_MAXBYTES
+AmnUd|STRLEN|UTF8_MAXBYTES_CASE
+Amd|STRLEN|UTF8_SAFE_SKIP|char* s|char* e
+Amd|STRLEN|UTF8_SKIP|char* s
+Amd|STRLEN|UTF8SKIP|char* s
+Amnhd||UTF8_WARN_ILLEGAL_C9_INTERCHANGE
+Amnhd||UTF8_WARN_ILLEGAL_INTERCHANGE
+Amnhd||UTF8_WARN_NONCHAR
+Amnhd||UTF8_WARN_PERL_EXTENDED
+Amnhd||UTF8_WARN_SUPER
+Amnhd||UTF8_WARN_SURROGATE
+Amd|bool|UVCHR_IS_INVARIANT|UV cp
+Amd|STRLEN|UVCHR_SKIP|UV cp
+Amnhd||UVof
+Amnd||UVSIZE
+Amnd||UVTYPE
+Amnhd||UVuf
+Amnd||UVXf
+Amnhd||UVxf
+Amnhd||WARN_ALL
+Amnhd||WARN_AMBIGUOUS
+Amnhd||WARN_BAREWORD
+Amnhd||WARN_CLOSED
+Amnhd||WARN_CLOSURE
+Amnhd||WARN_DEBUGGING
+Amnhd||WARN_DEPRECATED
+Amnhd||WARN_DIGIT
+Amnhd||WARN_EXEC
+Amnhd||WARN_EXITING
+Amnhd||WARN_EXPERIMENTAL
+Amnhd||WARN_EXPERIMENTAL__ALPHA_ASSERTIONS
+Amnhd||WARN_EXPERIMENTAL__BITWISE
+Amnhd||WARN_EXPERIMENTAL__CONST_ATTR
+Amnhd||WARN_EXPERIMENTAL__DECLARED_REFS
+Amnhd||WARN_EXPERIMENTAL__ISA
+Amnhd||WARN_EXPERIMENTAL__LEXICAL_SUBS
+Amnhd||WARN_EXPERIMENTAL__POSTDEREF
+Amnhd||WARN_EXPERIMENTAL__PRIVATE_USE
+Amnhd||WARN_EXPERIMENTAL__REFALIASING
+Amnhd||WARN_EXPERIMENTAL__REGEX_SETS
+Amnhd||WARN_EXPERIMENTAL__RE_STRICT
+Amnhd||WARN_EXPERIMENTAL__SCRIPT_RUN
+Amnhd||WARN_EXPERIMENTAL__SIGNATURES
+Amnhd||WARN_EXPERIMENTAL__SMARTMATCH
+Amnhd||WARN_EXPERIMENTAL__UNIPROP_WILDCARDS
+Amnhd||WARN_EXPERIMENTAL__VLB
+Amnhd||WARN_EXPERIMENTAL__WIN32_PERLIO
+Amnhd||WARN_GLOB
+Amnhd||WARN_ILLEGALPROTO
+Amnhd||WARN_IMPRECISION
+Amnhd||WARN_INPLACE
+Amnhd||WARN_INTERNAL
+Amnhd||WARN_IO
+Amnhd||WARN_LAYER
+Amnhd||WARN_LOCALE
+Amnhd||WARN_MALLOC
+Amnhd||WARN_MISC
+Amnhd||WARN_MISSING
+Amnhd||WARN_NEWLINE
+Amnhd||WARN_NONCHAR
+Amnhd||WARN_NON_UNICODE
+Amnhd||WARN_NUMERIC
+Amnhd||WARN_ONCE
+Amnhd||WARN_OVERFLOW
+Amnhd||WARN_PACK
+Amnhd||WARN_PARENTHESIS
+Amnhd||WARN_PIPE
+Amnhd||WARN_PORTABLE
+Amnhd||WARN_PRECEDENCE
+Amnhd||WARN_PRINTF
+Amnhd||WARN_PROTOTYPE
+Amnhd||WARN_QW
+Amnhd||WARN_RECURSION
+Amnhd||WARN_REDEFINE
+Amnhd||WARN_REDUNDANT
+Amnhd||WARN_REGEXP
+Amnhd||WARN_RESERVED
+Amnhd||WARN_SEMICOLON
+Amnhd||WARN_SEVERE
+Amnhd||WARN_SHADOW
+Amnhd||WARN_SIGNAL
+Amnhd||WARN_SUBSTR
+Amnhd||WARN_SURROGATE
+Amnhd||WARN_SYNTAX
+Amnhd||WARN_SYSCALLS
+Amnhd||WARN_TAINT
+Amnhd||WARN_THREADS
+Amnhd||WARN_UNINITIALIZED
+Amnhd||WARN_UNOPENED
+Amnhd||WARN_UNPACK
+Amnhd||WARN_UNTIE
+Amnhd||WARN_UTF8
+Amnhd||WARN_VOID
+AmnUd|void|WIDEST_UTYPE
+Amd|void|WITH_LC_NUMERIC_SET_TO_NEEDED|block
+Amd|void|WITH_LC_NUMERIC_SET_TO_NEEDED_IN|bool in_lc_numeric|block
+AmnUd||XCPT_CATCH
+Amnsd||XCPT_RETHROW
+AmnUd||XCPT_TRY_END
+AmnUd||XCPT_TRY_START
+Amd|void|XopDISABLE|XOP *xop|which
+Amd|void|XopENABLE|XOP *xop|which
+Amd||XopENTRY|XOP *xop|which
+Amd||XopENTRYCUSTOM|const OP *o|which
+Amd|void|XopENTRY_set|XOP *xop|which|value
+Amd|U32|XopFLAGS|XOP *xop
+Amd|void|XPUSHi|IV iv
+Amnd|void|XPUSHmortal
+Amd|void|XPUSHn|NV nv
+Amd|void|XPUSHp|char* str|STRLEN len
+Amd|void|XPUSHs|SV* sv
+Amd|void|XPUSHu|UV uv
+AmnUd||XS
+Amnsd||XS_APIVERSION_BOOTCHECK
+AmnUd||XS_EXTERNAL
+AmUd||XS_INTERNAL
+Amd|void|XSRETURN|int nitems
+Amnsd||XSRETURN_EMPTY
+Amd|void|XSRETURN_IV|IV iv
+Amnsd||XSRETURN_NO
+Amd|void|XSRETURN_NV|NV nv
+Amd|void|XSRETURN_PV|char* str
+Amnsd||XSRETURN_UNDEF
+Amd|void|XSRETURN_UV|IV uv
+Amnsd||XSRETURN_YES
+Amd|void|XST_mIV|int pos|IV iv
+Amd|void|XST_mNO|int pos
+Amd|void|XST_mNV|int pos|NV nv
+Amd|void|XST_mPV|int pos|char* str
+Amd|void|XST_mUNDEF|int pos
+Amd|void|XST_mUV|int pos|UV uv
+Amd|void|XST_mYES|int pos
+AmnUd||XS_VERSION
+Amnsd||XS_VERSION_BOOTCHECK
+Amd|void|Zero|void* dest|int nitems|type
+Amd|void *|ZeroD|void* dest|int nitems|type
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5003007 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5003007
new file mode 100644 (file)
index 0000000..11fdae8
--- /dev/null
@@ -0,0 +1,549 @@
+5.003007
+amagic_call                    # T
+av_clear                       # T
+av_extend                      # T
+av_fetch                       # T
+av_fill                        # T
+AvFILL                         # T
+av_len                         # T
+av_make                        # T
+av_pop                         # T
+av_push                        # T
+av_shift                       # T
+av_store                       # T
+av_undef                       # T
+av_unshift                     # T
+ax                             # T
+BIN                            # T
+BYTEORDER                      # T
+CASTFLAGS                      # T
+Copy                           # T
+CPPMINUS                       # T
+CPPSTDIN                       # T
+cv_clone                       # T
+cv_const_sv                    # T
+CvDEPTH                        # T
+CvGV                           # T
+CvSTASH                        # T
+cv_undef                       # T
+cxinc                          # T
+dMARK                          # T
+do_close                       # T
+do_join                        # T
+do_open                        # T
+dORIGMARK                      # T
+do_sprintf                     # T
+dounwind                       # T
+dowantarray                    # T
+dSP                            # T
+dTHX                           # T
+dXSARGS                        # T
+ENTER                          # T
+EXTEND                         # T
+filter_add                     # T
+filter_del                     # T
+filter_read                    # T
+free_tmps                      # T
+FREETMPS                       # T
+G_ARRAY                        # T
+G_DISCARD                      # T
+G_EVAL                         # T
+GIMME                          # T
+G_NOARGS                       # T
+gp_free                        # T
+gp_ref                         # T
+G_SCALAR                       # T
+GV_ADD                         # T
+GV_ADDMULTI                    # T
+GvAV                           # T
+gv_AVadd                       # T
+gv_check                       # T
+GvCV                           # T
+gv_efullname                   # T
+gv_efullname3                  # T
+gv_fetchfile                   # T
+gv_fetchmeth                   # T
+gv_fetchmethod                 # T
+gv_fetchpv                     # T
+gv_fullname                    # T
+gv_fullname3                   # T
+GvHV                           # T
+gv_HVadd                       # T
+gv_init                        # T
+gv_IOadd                       # T
+gv_stashpv                     # T
+gv_stashpvn                    # T
+gv_stashsv                     # T
+GvSV                           # T
+HEf_SVKEY                      # T
+HeHASH                         # T
+HeKEY                          # T
+HeKLEN                         # T
+HeSVKEY                        # T
+HeSVKEY_force                  # T
+HeVAL                          # T
+hv_clear                       # T
+hv_delete                      # T
+hv_delete_ent                  # T
+hv_exists                      # T
+hv_exists_ent                  # T
+hv_fetch                       # T
+hv_fetch_ent                   # T
+HvFILL                         # T
+hv_iterinit                    # T
+hv_iterkey                     # T
+hv_iterkeysv                   # T
+hv_iternext                    # T
+hv_iternextsv                  # T
+hv_iterval                     # T
+hv_ksplit                      # T
+hv_magic                       # T
+HvNAME                         # T
+hv_store                       # T
+hv_store_ent                   # T
+hv_undef                       # T
+ibcmp                          # T
+instr                          # T
+INTSIZE                        # T
+isALNUM                        # T
+isALPHA                        # T
+isDIGIT                        # T
+isIDFIRST                      # T
+isLOWER                        # T
+isSPACE                        # T
+isUPPER                        # T
+LEAVE                          # T
+leave_scope                    # T
+looks_like_number              # T
+MARK                           # T
+mg_clear                       # T
+mg_copy                        # T
+mg_find                        # T
+mg_free                        # T
+mg_get                         # T
+mg_magical                     # T
+mg_set                         # T
+moreswitches                   # T
+Move                           # T
+my_exit                        # T
+my_pclose                      # T
+my_popen                       # T
+my_setenv                      # T
+newANONHASH                    # T
+newANONLIST                    # T
+newANONSUB                     # T
+newASSIGNOP                    # T
+newAV                          # T
+newAVREF                       # T
+newBINOP                       # T
+newCONDOP                      # T
+newCVREF                       # T
+newFORM                        # T
+newGVgen                       # T
+newGVOP                        # T
+newGVREF                       # T
+newHV                          # T
+newHVREF                       # T
+newIO                          # T
+newLISTOP                      # T
+newLOGOP                       # T
+newLOOPEX                      # T
+newLOOPOP                      # T
+newNULLLIST                    # T
+newOP                          # T
+newPMOP                        # T
+newPROG                        # T
+newPVOP                        # T
+newRANGE                       # T
+newRV                          # T
+newSLICEOP                     # T
+newSTATEOP                     # T
+newSUB                         # T
+newSV                          # T
+newSViv                        # T
+newSVOP                        # T
+newSVpv                        # T
+newSVREF                       # T
+newSVrv                        # T
+newSVsv                        # T
+newUNOP                        # T
+ninstr                         # T
+Nullav                         # T
+Nullch                         # T
+Nullcv                         # T
+Nullhv                         # T
+Nullsv                         # T
+OPf_KIDS                       # T
+op_free                        # T
+OPpENTERSUB_AMPER              # T
+ORIGMARK                       # T
+OSNAME                         # T
+pad_alloc                      # T
+perl_alloc                     # T
+perl_construct                 # T
+perl_free                      # T
+PERL_HASH                      # T
+PERL_INT_MAX                   # T
+PERL_INT_MIN                   # T
+PerlIO_canset_cnt              # T
+PerlIO_exportFILE              # T
+PerlIO_fast_gets               # T
+PerlIO_fdopen                  # T
+PerlIO_findFILE                # T
+PerlIO_getc                    # T
+PerlIO_getpos                  # T
+PerlIO_has_base                # T
+PerlIO_has_cntptr              # T
+PerlIO_importFILE              # T
+PerlIO_open                    # T
+PerlIO_putc                    # T
+PerlIO_puts                    # T
+PerlIO_releaseFILE             # T
+PerlIO_reopen                  # T
+PerlIO_rewind                  # T
+PerlIO_setpos                  # T
+PerlIO_ungetc                  # T
+PerlIO_vprintf                 # T
+PERL_LONG_MAX                  # T
+PERL_LONG_MIN                  # T
+PERL_QUAD_MAX                  # T
+PERL_QUAD_MIN                  # T
+perl_run                       # T
+PERL_SHORT_MAX                 # T
+PERL_SHORT_MIN                 # T
+PERL_SYS_INIT                  # T
+PERL_SYS_TERM                  # T
+PERL_UCHAR_MAX                 # T
+PERL_UCHAR_MIN                 # T
+PERL_UINT_MAX                  # T
+PERL_ULONG_MAX                 # T
+PERL_ULONG_MIN                 # T
+PERL_UQUAD_MAX                 # T
+PERL_UQUAD_MIN                 # T
+PERL_USHORT_MAX                # T
+PERL_USHORT_MIN                # T
+POPi                           # T
+POPl                           # T
+POPp                           # T
+POPs                           # T
+pop_scope                      # T
+pregexec                       # T
+pregfree                       # T
+PRIVLIB                        # T
+PUSHi                          # T
+PUSHMARK                       # T
+PUSHp                          # T
+PUSHs                          # T
+push_scope                     # T
+PUTBACK                        # T
+RANDBITS                       # T
+Renew                          # T
+Renewc                         # T
+repeatcpy                      # T
+rninstr                        # T
+Safefree                       # T
+save_aptr                      # T
+save_ary                       # T
+save_clearsv                   # T
+save_delete                    # T
+save_freepv                    # T
+save_freesv                    # T
+save_hash                      # T
+save_hptr                      # T
+save_I32                       # T
+save_int                       # T
+save_item                      # T
+save_list                      # T
+save_long                      # T
+save_nogv                      # T
+save_pptr                      # T
+savepv                         # T
+savepvn                        # T
+save_scalar                    # T
+save_sptr                      # T
+savestack_grow                 # T
+save_svref                     # T
+SAVETMPS                       # T
+setdefout                      # T
+SITELIB                        # T
+SP                             # T
+SPAGAIN                        # T
+ST                             # T
+stack_grow                     # T
+STARTPERL                      # T
+STDCHAR                        # T
+strEQ                          # T
+strGE                          # T
+strGT                          # T
+strLE                          # T
+strLT                          # T
+strNE                          # T
+strnEQ                         # T
+strnNE                         # T
+sv_2bool                       # T
+sv_2cv                         # T
+sv_2io                         # T
+sv_2iv                         # T
+sv_2mortal                     # T
+sv_2pv                         # T
+sv_backoff                     # T
+sv_bless                       # T
+sv_catpv                       # T
+sv_catpvn                      # T
+sv_catsv                       # T
+sv_chop                        # T
+sv_clear                       # T
+sv_cmp                         # T
+SvCUR                          # T
+SvCUR_set                      # T
+sv_dec                         # T
+sv_dump                        # T
+SvEND                          # T
+sv_eq                          # T
+sv_free                        # T
+sv_gets                        # T
+sv_grow                        # T
+SvGROW                         # T
+sv_inc                         # T
+sv_insert                      # T
+SvIOK                          # T
+SvIOK_off                      # T
+SvIOK_on                       # T
+SvIOK_only                     # T
+SvIOKp                         # T
+sv_isa                         # T
+sv_isobject                    # T
+SvIV                           # T
+SvIV_set                       # T
+SvIVX                          # T
+SvIVx                          # T
+sv_len                         # T
+SvLEN                          # T
+SvLEN_set                      # T
+sv_magic                       # T
+sv_mortalcopy                  # T
+sv_newmortal                   # T
+sv_newref                      # T
+SvNIOK                         # T
+SvNIOK_off                     # T
+SvNIOKp                        # T
+SvNOK                          # T
+SvNOK_off                      # T
+SvNOK_on                       # T
+SvNOK_only                     # T
+SvNOKp                         # T
+SvOK                           # T
+SvOOK                          # T
+SvPOK                          # T
+SvPOK_off                      # T
+SvPOK_on                       # T
+SvPOK_only                     # T
+SvPOKp                         # T
+SvPV                           # T
+SvPV_force                     # T
+sv_pvn_force                   # T
+SvPV_set                       # T
+SvPVX                          # T
+SvPVx                          # T
+SvREADONLY                     # T
+SvREADONLY_off                 # T
+SvREADONLY_on                  # T
+SvREFCNT                       # T
+SvREFCNT_dec                   # T
+SvREFCNT_inc                   # T
+sv_reftype                     # T
+sv_replace                     # T
+sv_report_used                 # T
+sv_reset                       # T
+SvROK                          # T
+SvROK_off                      # T
+SvROK_on                       # T
+SvRV                           # T
+sv_setiv                       # T
+SvSETMAGIC                     # T
+sv_setpv                       # T
+sv_setpvn                      # T
+sv_setref_iv                   # T
+sv_setref_pv                   # T
+sv_setref_pvn                  # T
+sv_setsv                       # T
+SvSetSV                        # T
+SvSTASH                        # T
+SVs_TEMP                       # T
+SvTAINT                        # T
+SVt_IV                         # T
+SVt_NULL                       # T
+SVt_NV                         # T
+SVt_PV                         # T
+SVt_PVAV                       # T
+SVt_PVCV                       # T
+SVt_PVFM                       # T
+SVt_PVGV                       # T
+SVt_PVHV                       # T
+SVt_PVIO                       # T
+SVt_PVIV                       # T
+SVt_PVLV                       # T
+SVt_PVMG                       # T
+SVt_PVNV                       # T
+SvTRUE                         # T
+SvTRUEx                        # T
+SvTYPE                         # T
+sv_unmagic                     # T
+sv_unref                       # T
+sv_upgrade                     # T
+SvUPGRADE                      # T
+sv_usepvn                      # T
+taint_env                      # T
+taint_proper                   # T
+toLOWER                        # T
+toUPPER                        # T
+unsharepvn                     # T
+whichsig                       # T
+XPUSHi                         # T
+XPUSHp                         # T
+XPUSHs                         # T
+XSRETURN                       # T
+XSRETURN_EMPTY                 # T
+XSRETURN_IV                    # T
+XSRETURN_NO                    # T
+XSRETURN_PV                    # T
+XSRETURN_UNDEF                 # T
+XSRETURN_YES                   # T
+XST_mIV                        # T
+XST_mNO                        # T
+XST_mPV                        # T
+XST_mUNDEF                     # T
+XST_mYES                       # T
+XS_VERSION                     # T
+XS_VERSION_BOOTCHECK           # T
+Zero                           # T
+RETVAL                         # X added by devel/scanprov
+CALL                           # X added by devel/scanprov
+THIS                           # X added by devel/scanprov
+dXSI32                         # M added by devel/scanprov
+items                          # M added by devel/scanprov
+ix                             # M added by devel/scanprov
+PERL_UINT_MIN                  # M added by devel/scanprov
+STMT_END                       # M added by devel/scanprov
+STMT_START                     # M added by devel/scanprov
+StructCopy                     # M added by devel/scanprov
+svtype                         # M added by devel/scanprov
+XS                             # M added by devel/scanprov
+apply                          # F added by devel/scanprov
+bind_match                     # F added by devel/scanprov
+boot_core_UNIVERSAL            # F added by devel/scanprov
+cando                          # F added by devel/scanprov
+checkcomma                     # F added by devel/scanprov
+check_uni                      # F added by devel/scanprov
+do_chomp                       # F added by devel/scanprov
+do_eof                         # F added by devel/scanprov
+do_exec                        # F added by devel/scanprov
+dofindlabel                    # F added by devel/scanprov
+do_ipcctl                      # F added by devel/scanprov
+do_ipcget                      # F added by devel/scanprov
+do_msgrcv                      # F added by devel/scanprov
+do_msgsnd                      # F added by devel/scanprov
+dopoptoeval                    # F added by devel/scanprov
+do_print                       # F added by devel/scanprov
+do_readline                    # F added by devel/scanprov
+do_seek                        # F added by devel/scanprov
+do_semop                       # F added by devel/scanprov
+do_shmio                       # F added by devel/scanprov
+do_tell                        # F added by devel/scanprov
+do_trans                       # F added by devel/scanprov
+do_vecset                      # F added by devel/scanprov
+do_vop                         # F added by devel/scanprov
+dump_mstats                    # F added by devel/scanprov
+fold_constants                 # F added by devel/scanprov
+force_ident                    # F added by devel/scanprov
+force_list                     # F added by devel/scanprov
+force_next                     # F added by devel/scanprov
+force_word                     # F added by devel/scanprov
+gen_constant_list              # F added by devel/scanprov
+ingroup                        # F added by devel/scanprov
+intuit_more                    # F added by devel/scanprov
+invert                         # F added by devel/scanprov
+io_close                       # F added by devel/scanprov
+jmaybe                         # F added by devel/scanprov
+keyword                        # F added by devel/scanprov
+list                           # F added by devel/scanprov
+listkids                       # F added by devel/scanprov
+localize                       # F added by devel/scanprov
+magic_clearenv                 # F added by devel/scanprov
+magic_clearpack                # F added by devel/scanprov
+magic_clearsig                 # F added by devel/scanprov
+magic_existspack               # F added by devel/scanprov
+magic_get                      # F added by devel/scanprov
+magic_getarylen                # F added by devel/scanprov
+magic_getpack                  # F added by devel/scanprov
+magic_getpos                   # F added by devel/scanprov
+magic_getsig                   # F added by devel/scanprov
+magic_gettaint                 # F added by devel/scanprov
+magic_getuvar                  # F added by devel/scanprov
+magic_nextpack                 # F added by devel/scanprov
+magic_set                      # F added by devel/scanprov
+magic_setarylen                # F added by devel/scanprov
+magic_setdbline                # F added by devel/scanprov
+magic_setenv                   # F added by devel/scanprov
+magic_setisa                   # F added by devel/scanprov
+magic_setmglob                 # F added by devel/scanprov
+magic_setnkeys                 # F added by devel/scanprov
+magic_setpack                  # F added by devel/scanprov
+magic_setpos                   # F added by devel/scanprov
+magic_setsig                   # F added by devel/scanprov
+magic_setsubstr                # F added by devel/scanprov
+magic_settaint                 # F added by devel/scanprov
+magic_setuvar                  # F added by devel/scanprov
+magic_setvec                   # F added by devel/scanprov
+magic_wipepack                 # F added by devel/scanprov
+mem_collxfrm                   # F added by devel/scanprov
+modkids                        # F added by devel/scanprov
+my_chsize                      # F added by devel/scanprov
+my_unexec                      # F added by devel/scanprov
+nextargv                       # F added by devel/scanprov
+no_fh_allowed                  # F added by devel/scanprov
+no_op                          # F added by devel/scanprov
+oopsAV                         # F added by devel/scanprov
+oopsHV                         # F added by devel/scanprov
+package                        # F added by devel/scanprov
+pad_free                       # F added by devel/scanprov
+pad_leavemy                    # F added by devel/scanprov
+pad_reset                      # F added by devel/scanprov
+pad_sv                         # F added by devel/scanprov
+pad_swipe                      # F added by devel/scanprov
+peep                           # F added by devel/scanprov
+pidgone                        # F added by devel/scanprov
+pmruntime                      # F added by devel/scanprov
+pmtrans                        # F added by devel/scanprov
+ref                            # F added by devel/scanprov
+refkids                        # F added by devel/scanprov
+regprop                        # F added by devel/scanprov
+same_dirent                    # F added by devel/scanprov
+sawparens                      # F added by devel/scanprov
+scalar                         # F added by devel/scanprov
+scalarkids                     # F added by devel/scanprov
+scalarseq                      # F added by devel/scanprov
+scalarvoid                     # F added by devel/scanprov
+scan_const                     # F added by devel/scanprov
+scan_formline                  # F added by devel/scanprov
+scan_heredoc                   # F added by devel/scanprov
+scan_ident                     # F added by devel/scanprov
+scan_inputsymbol               # F added by devel/scanprov
+scan_pat                       # F added by devel/scanprov
+scan_str                       # F added by devel/scanprov
+scan_subst                     # F added by devel/scanprov
+scan_trans                     # F added by devel/scanprov
+scan_word                      # F added by devel/scanprov
+sighandler                     # F added by devel/scanprov
+sv_add_arena                   # F added by devel/scanprov
+sv_clean_all                   # F added by devel/scanprov
+sv_clean_objs                  # F added by devel/scanprov
+sv_free_arenas                 # F added by devel/scanprov
+unlnk                          # F added by devel/scanprov
+utilize                        # F added by devel/scanprov
+wait4pid                       # F added by devel/scanprov
+watch                          # F added by devel/scanprov
+yyerror                        # F added by devel/scanprov
+yylex                          # F added by devel/scanprov
+yyparse                        # F added by devel/scanprov
+yywarn                         # F added by devel/scanprov
index 38b77a1..7d77ab1 100644 (file)
@@ -1,52 +1,76 @@
 5.004000
-GIMME_V                        # E
-G_VOID                         # E
-HePV                           # A
-HeSVKEY_set                    # U
-POPu                           # E
-PUSHu                          # U
-SvSetMagicSV                   # U
-SvSetMagicSV_nosteal           # U
-SvSetSV_nosteal                # U
-SvTAINTED                      # U
-SvTAINTED_off                  # U
-SvTAINTED_on                   # U
-SvUV                           # U
-SvUVX                          # U
-SvUVx                          # U
-XPUSHu                         # U
+ARCHNAME                       # E
 block_end                      # E (Perl_block_end)
 block_gimme                    # E
 block_start                    # E (Perl_block_start)
-boolSV                         # U
+boolSV                         # E
 call_list                      # E
 delimcpy                       # U
-gv_autoload4                   # U
+GIMME_V                        # E
+gv_autoload4                   # E
 gv_fetchmethod_autoload        # E
+G_VOID                         # E
+HePV                           # A
+HeSVKEY_set                    # E
 hv_delayfree_ent               # E
 hv_free_ent                    # E
-ibcmp_locale                   # U
+ibcmp_locale                   # E
 intro_my                       # E
-isPRINT                        # U
-memEQ                          # U
-memNE                          # U
+isALNUM_LC                     # E
+isALPHA_LC                     # E
+isDIGIT_LC                     # E
+isIDFIRST_LC                   # E
+isLOWER_LC                     # E
+isPRINT                        # E
+isPRINT_LC                     # E
+isSPACE_LC                     # E
+isUPPER_LC                     # E
+LONGSIZE                       # E
+memEQ                          # E
+memNE                          # E
 my_failure_exit                # E
-newRV_inc                      # U
+newRV_inc                      # E
 newRV_noinc                    # E
+POPu                           # E
+PUSHu                          # E
 rsignal                        # E
 rsignal_state                  # E
-save_I16                       # E
 save_gp                        # E
+save_I16                       # E
 share_hek                      # E
+SHORTSIZE                      # E
 start_subparse                 # E (Perl_start_subparse)
 sv_2uv                         # U
-sv_cmp_locale                  # E
+sv_cmp_locale                  # U
 sv_derived_from                # E
+SvSetMagicSV                   # E
+SvSetMagicSV_nosteal           # E
+SvSetSV_nosteal                # E
 sv_setuv                       # E
 sv_taint                       # U
 sv_tainted                     # E
+SvTAINTED                      # E
+SvTAINTED_off                  # E
+SvTAINTED_on                   # E
 sv_untaint                     # E
+SvUV                           # E
+SvUVX                          # E
+SvUVx                          # E
+SvUVXx                         # E
 sv_vcatpvfn                    # E
 sv_vsetpvfn                    # E
-toLOWER_LC                     # U
-SvUVXx                         # added by devel/scanprov
+toLOWER_LC                     # E
+XPUSHu                         # E
+do_sysseek                     # F added by devel/scanprov
+magic_getdefelem               # F added by devel/scanprov
+magic_setcollxfrm              # F added by devel/scanprov
+magic_setdefelem               # F added by devel/scanprov
+rsignal_restore                # F added by devel/scanprov
+rsignal_save                   # F added by devel/scanprov
+rxres_free                     # F added by devel/scanprov
+rxres_restore                  # F added by devel/scanprov
+rxres_save                     # F added by devel/scanprov
+sub_crush_depth                # F added by devel/scanprov
+unshare_hek                    # F added by devel/scanprov
+vivify_defelem                 # F added by devel/scanprov
+vivify_ref                     # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5004001 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5004001
new file mode 100644 (file)
index 0000000..1a7f0b7
--- /dev/null
@@ -0,0 +1,2 @@
+5.004001
+magic_clear_all_env            # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5004002 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5004002
new file mode 100644 (file)
index 0000000..88ea401
--- /dev/null
@@ -0,0 +1 @@
+5.004002
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5004003 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5004003
new file mode 100644 (file)
index 0000000..42ff9a8
--- /dev/null
@@ -0,0 +1 @@
+5.004003
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5004004 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5004004
new file mode 100644 (file)
index 0000000..6437c3e
--- /dev/null
@@ -0,0 +1,3 @@
+5.004004
+av_reify                       # F added by devel/scanprov
+magic_set_all_env              # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5004005 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5004005
new file mode 100644 (file)
index 0000000..5abbf16
--- /dev/null
@@ -0,0 +1,49 @@
+5.004005
+do_binmode                     # E
+dTHR                           # E
+ERRSV                          # E
+GV_NOINIT                      # E
+newCONSTSUB                    # E
+newSVpvn                       # E
+PL_curcop                      # E
+PL_curstash                    # E
+PL_defgv                       # E
+PL_errgv                       # E
+PL_na                          # E
+PL_perl_destruct_level         # E
+PL_sv_no                       # E
+PL_sv_undef                    # E
+PL_sv_yes                      # E
+save_aelem                     # E
+save_helem                     # E
+sv_catpv_mg                    # E
+sv_catpvn_mg                   # U
+sv_catsv_mg                    # U
+SvGETMAGIC                     # E
+sv_setiv_mg                    # E
+sv_setpv_mg                    # E
+sv_setpvn_mg                   # E
+sv_setsv_mg                    # E
+sv_setuv_mg                    # E
+sv_usepvn_mg                   # U
+AvFILLp                        # M added by devel/scanprov
+DEFSV                          # M added by devel/scanprov
+PL_compiling                   # M added by devel/scanprov
+PL_DBsingle                    # M added by devel/scanprov
+PL_DBsub                       # M added by devel/scanprov
+PL_debstash                    # M added by devel/scanprov
+PL_diehook                     # M added by devel/scanprov
+PL_dirty                       # M added by devel/scanprov
+PL_dowarn                      # M added by devel/scanprov
+PL_perldb                      # M added by devel/scanprov
+PL_stack_base                  # M added by devel/scanprov
+PL_stack_sp                    # M added by devel/scanprov
+PL_stdingv                     # M added by devel/scanprov
+PL_sv_arenaroot                # M added by devel/scanprov
+PL_tainted                     # M added by devel/scanprov
+PL_tainting                    # M added by devel/scanprov
+SAVE_DEFSV                     # M added by devel/scanprov
+find_script                    # F added by devel/scanprov
+magic_getnkeys                 # F added by devel/scanprov
+magic_getsubstr                # F added by devel/scanprov
+magic_getvec                   # F added by devel/scanprov
index d3ba84c..a9d989f 100644 (file)
 5.005000
-PL_curpad                      # E
-PL_modglobal                   # E
 cx_dump                        # U
 debop                          # U
 debprofdump                    # U
+DOUBLESIZE                     # E
 fbm_compile                    # E (Perl_fbm_compile)
 fbm_instr                      # E (Perl_fbm_instr)
 get_op_descs                   # E
 get_op_names                   # E
 init_stacks                    # E
+mg_length                      # E
 mg_size                        # E
 newHVhv                        # E
 new_stackinfo                  # E
+PL_curpad                      # E
+PL_modglobal                   # E
+PTRSIZE                        # E
 regdump                        # U
 regexec_flags                  # E
 regnext                        # E (Perl_regnext)
 runops_debug                   # E
 runops_standard                # E
 save_iv                        # E (save_iv)
-save_op                        # U
 sv_iv                          # E
 sv_peek                        # U
 sv_pvn                         # E
 sv_true                        # E
 sv_uv                          # E
-CPERLscope                     # added by devel/scanprov
-END_EXTERN_C                   # added by devel/scanprov
-EXTERN_C                       # added by devel/scanprov
-NOOP                           # added by devel/scanprov
-PL_DBsignal                    # added by devel/scanprov
-PL_Sv                          # added by devel/scanprov
-PL_hexdigit                    # added by devel/scanprov
-PL_hints                       # added by devel/scanprov
-PL_laststatval                 # added by devel/scanprov
-PL_statcache                   # added by devel/scanprov
-START_EXTERN_C                 # added by devel/scanprov
+CPERLscope                     # M added by devel/scanprov
+END_EXTERN_C                   # M added by devel/scanprov
+EXTERN_C                       # M added by devel/scanprov
+NOOP                           # M added by devel/scanprov
+PL_DBsignal                    # M added by devel/scanprov
+PL_DBtrace                     # M added by devel/scanprov
+PL_hexdigit                    # M added by devel/scanprov
+PL_hints                       # M added by devel/scanprov
+PL_laststatval                 # M added by devel/scanprov
+PL_mess_sv                     # M added by devel/scanprov
+PL_statcache                   # M added by devel/scanprov
+PL_Sv                          # M added by devel/scanprov
+PL_Xpv                         # M added by devel/scanprov
+START_EXTERN_C                 # M added by devel/scanprov
+add_data                       # F added by devel/scanprov
+ao                             # F added by devel/scanprov
+debprof                        # F added by devel/scanprov
+del_sv                         # F added by devel/scanprov
+div128                         # F added by devel/scanprov
+docatch                        # F added by devel/scanprov
+doform                         # F added by devel/scanprov
+doparseform                    # F added by devel/scanprov
+dopoptolabel                   # F added by devel/scanprov
+dopoptoloop                    # F added by devel/scanprov
+dopoptosub_at                  # F added by devel/scanprov
+dumpuntil                      # F added by devel/scanprov
+filter_gets                    # F added by devel/scanprov
+find_beginning                 # F added by devel/scanprov
+forbid_setid                   # F added by devel/scanprov
+force_version                  # F added by devel/scanprov
+get_no_modify                  # F added by devel/scanprov
+get_opargs                     # F added by devel/scanprov
+hsplit                         # F added by devel/scanprov
+incline                        # F added by devel/scanprov
+incpush                        # F added by devel/scanprov
+init_debugger                  # F added by devel/scanprov
+init_ids                       # F added by devel/scanprov
+init_interp                    # F added by devel/scanprov
+init_main_stash                # F added by devel/scanprov
+init_perllib                   # F added by devel/scanprov
+init_postdump_symbols          # F added by devel/scanprov
+init_predump_symbols           # F added by devel/scanprov
+intuit_method                  # F added by devel/scanprov
+isa_lookup                     # F added by devel/scanprov
+is_an_int                      # F added by devel/scanprov
+lop                            # F added by devel/scanprov
+magic_methpack                 # F added by devel/scanprov
+magic_sizepack                 # F added by devel/scanprov
+malloced_size                  # F added by devel/scanprov
+mess_alloc                     # F added by devel/scanprov
+missingterm                    # F added by devel/scanprov
+mul128                         # F added by devel/scanprov
+my_exit_jump                   # F added by devel/scanprov
+new_he                         # F added by devel/scanprov
+new_logop                      # F added by devel/scanprov
+nextchar                       # F added by devel/scanprov
+not_a_number                   # F added by devel/scanprov
+nuke_stacks                    # F added by devel/scanprov
+open_script                    # F added by devel/scanprov
+pad_findlex                    # F added by devel/scanprov
+refto                          # F added by devel/scanprov
+reg                            # F added by devel/scanprov
+reganode                       # F added by devel/scanprov
+regatom                        # F added by devel/scanprov
+regbranch                      # F added by devel/scanprov
+regclass                       # F added by devel/scanprov
+regcppop                       # F added by devel/scanprov
+regcppush                      # F added by devel/scanprov
+reginclass                     # F added by devel/scanprov
+reginsert                      # F added by devel/scanprov
+regmatch                       # F added by devel/scanprov
+reg_node                       # F added by devel/scanprov
+regpiece                       # F added by devel/scanprov
+regrepeat                      # F added by devel/scanprov
+regtail                        # F added by devel/scanprov
+regtry                         # F added by devel/scanprov
+save_lines                     # F added by devel/scanprov
+save_scalar_at                 # F added by devel/scanprov
+scalarboolean                  # F added by devel/scanprov
+scan_commit                    # F added by devel/scanprov
+study_chunk                    # F added by devel/scanprov
+sublex_done                    # F added by devel/scanprov
+sublex_push                    # F added by devel/scanprov
+sublex_start                   # F added by devel/scanprov
+sv_unglob                      # F added by devel/scanprov
+tokeq                          # F added by devel/scanprov
+usage                          # F added by devel/scanprov
+visit                          # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5005001 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5005001
new file mode 100644 (file)
index 0000000..9eb326e
--- /dev/null
@@ -0,0 +1 @@
+5.005001
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5005002 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5005002
new file mode 100644 (file)
index 0000000..35d08b2
--- /dev/null
@@ -0,0 +1 @@
+5.005002
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5005003 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5005003
new file mode 100644 (file)
index 0000000..354427d
--- /dev/null
@@ -0,0 +1,5 @@
+5.005003
+get_vtbl                       # E
+POPpx                          # E
+save_generic_svref             # E
+dofile                         # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5005004 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5005004
new file mode 100644 (file)
index 0000000..a63720a
--- /dev/null
@@ -0,0 +1,2 @@
+5.005004
+no_bareword_allowed            # F added by devel/scanprov
index 34b750a..268579a 100644 (file)
@@ -1,34 +1,6 @@
 5.006000
-DO_UTF8                        # U
-PERL_SYS_INIT3                 # U
-POPn                           # E
-POPul                          # E
-PUSHn                          # E
-SvIOK_UV                       # U
-SvIOK_notUV                    # U
-SvIOK_only_UV                  # U
-SvNV                           # E
-SvNVX                          # E
-SvNV_set                       # E
-SvNVx                          # E
-SvPOK_only_UTF8                # U
-SvPV_nolen                     # U
-SvPVbyte                       # U
-SvPVbyte_nolen                 # U
-SvPVbytex                      # U
-SvPVbytex_force                # U
-SvPVutf8                       # U
-SvPVutf8_force                 # U
-SvPVutf8_nolen                 # U
-SvPVutf8x                      # U
-SvPVutf8x_force                # U
-SvUTF8                         # U
-SvUTF8_off                     # U
-SvUTF8_on                      # U
-UTF8SKIP                       # U
-XPUSHn                         # E
-XSRETURN_NV                    # E
-XST_mNV                        # E
+aTHX                           # E
+aTHX_                          # E
 av_delete                      # E
 av_exists                      # E
 call_argv                      # E (perl_call_argv)
@@ -40,6 +12,12 @@ cast_i32                       # E (cast_i32)
 cast_iv                        # E (cast_iv)
 cast_ulong                     # E
 cast_uv                        # E (cast_uv)
+ckWARN                         # E
+ckWARN2                        # E
+ckWARN2_d                      # E
+ckWARN_d                       # E
+CPPLAST                        # E
+CPPRUN                         # E
 croak                          # E (Perl_croak)
 die                            # E (Perl_die)
 do_gv_dump                     # E
@@ -50,6 +28,7 @@ do_op_dump                     # E
 do_open9                       # E
 do_pmop_dump                   # E
 do_sv_dump                     # E
+DO_UTF8                        # E
 dump_all                       # U
 dump_eval                      # U
 dump_form                      # U
@@ -67,80 +46,153 @@ get_hv                         # E (perl_get_hv)
 get_ppaddr                     # E
 get_sv                         # E (perl_get_sv)
 gv_dump                        # E
-isASCII                        # U
-isCNTRL                        # U
-isGRAPH                        # U
-isPUNCT                        # U
-isXDIGIT                       # U
+I16SIZE                        # E
+I16TYPE                        # E
+I32SIZE                        # E
+I32TYPE                        # E
+I8SIZE                         # E
+I8TYPE                         # E
+INT2PTR                        # E
+isALNUMC                       # E
+isALNUMC_LC                    # E
+isASCII                        # E
+isCNTRL                        # E
+isCNTRL_LC                     # E
+isGRAPH                        # E
+isGRAPH_LC                     # E
+isPUNCT                        # E
+isPUNCT_LC                     # E
+is_utf8_char                   # U
+isXDIGIT                       # E
+IVdf                           # E
+IVSIZE                         # E
+IVTYPE                         # E
 load_module                    # E
+LSEEKSIZE                      # E
 magic_dump                     # E
 mess                           # E (Perl_mess)
 my_atof                        # E
 my_fflush_all                  # E
 newANONATTRSUB                 # E
-newATTRSUB                     # U
+newATTRSUB                     # E
 newSVnv                        # E (Perl_newSVnv)
 newSVpvf                       # E (Perl_newSVpvf)
 newSVuv                        # E
 newXS                          # E (Perl_newXS)
 newXSproto                     # E
+NVTYPE                         # E
 op_dump                        # E
+OPpEARLY_CV                    # E
+PERL_EXIT_EXPECTED             # E
+PerlIO_printf                  # E
+PerlIO_stdoutf                 # E
+PERL_LOADMOD_DENY              # E
+PERL_LOADMOD_IMPORT_OPS        # E
+PERL_LOADMOD_NOIMPORT          # E
 perl_parse                     # E (perl_parse)
+PERL_REVISION                  # E
+PERL_SUBVERSION                # E
+PERL_SYS_INIT3                 # E
+PERL_VERSION                   # E
+PL_exit_flags                  # E
+PL_runops                      # E
 pmop_dump                      # E
+POPn                           # E
+POPul                          # E
+pTHX                           # E
+PTR2IV                         # E
+PTR2NV                         # E
+PTR2UV                         # E
+PUSHn                          # E
 pv_display                     # E
-re_intuit_string               # E
 reginitcolors                  # E
 require_pv                     # E (perl_require_pv)
 safesyscalloc                  # U
 safesysfree                    # U
 safesysmalloc                  # U
 safesysrealloc                 # U
-save_I8                        # E
 save_alloc                     # E
 save_destructor                # E (Perl_save_destructor)
 save_destructor_x              # E
+save_I8                        # E
 save_re_context                # E
 save_vptr                      # E
 scan_bin                       # E
 scan_hex                       # E (Perl_scan_hex)
 scan_oct                       # E (Perl_scan_oct)
 set_context                    # U
-set_numeric_local              # E (perl_set_numeric_local)
-set_numeric_radix              # E
-set_numeric_standard           # E (perl_set_numeric_standard)
+Strtol                         # E
+Strtoul                        # E
 str_to_version                 # E
-sv_2pv_nolen                   # U
-sv_2pvbyte                     # E
+sv_2pvbyte                     # U
 sv_2pvbyte_nolen               # U
-sv_2pvutf8                     # E
+sv_2pv_nolen                   # U
+sv_2pvutf8                     # U
 sv_2pvutf8_nolen               # U
 sv_catpvf                      # E (Perl_sv_catpvf)
 sv_catpvf_mg                   # E (Perl_sv_catpvf_mg)
+SVf                            # E
 sv_force_normal                # U
+SVf_UTF8                       # E
+SvIOK_notUV                    # E
+SvIOK_only_UV                  # E
+SvIOK_UV                       # E
 sv_len_utf8                    # E
 sv_nv                          # E (Perl_sv_nv)
+SvNV                           # E
+SvNV_set                       # E
+SvNVX                          # E
+SvNVx                          # E
+SvPOK_only_UTF8                # E
 sv_pos_b2u                     # E
 sv_pos_u2b                     # E
 sv_pv                          # U
 sv_pvbyte                      # U
+SvPVbyte                       # E
 sv_pvbyten                     # E
 sv_pvbyten_force               # E
+SvPVbyte_nolen                 # E
+SvPVbytex                      # E
+SvPVbytex_force                # E
+SvPV_nolen                     # E
 sv_pvutf8                      # U
+SvPVutf8                       # E
+SvPVutf8_force                 # E
 sv_pvutf8n                     # E
 sv_pvutf8n_force               # E
+SvPVutf8_nolen                 # E
+SvPVutf8x                      # E
+SvPVutf8x_force                # E
 sv_rvweaken                    # E
 sv_setnv                       # E (Perl_sv_setnv)
 sv_setnv_mg                    # E (Perl_sv_setnv_mg)
 sv_setpvf                      # E (Perl_sv_setpvf)
 sv_setpvf_mg                   # E (Perl_sv_setpvf_mg)
 sv_setref_nv                   # E (Perl_sv_setref_nv)
+SvUTF8                         # E
+sv_utf8_decode                 # E
+sv_utf8_downgrade              # U
 sv_utf8_encode                 # E
+SvUTF8_off                     # E
+SvUTF8_on                      # E
 sv_vcatpvf                     # E
 sv_vcatpvf_mg                  # E
 sv_vsetpvf                     # E
 sv_vsetpvf_mg                  # E
+U16SIZE                        # E
+U16TYPE                        # E
+U32SIZE                        # E
+U32TYPE                        # E
+U8SIZE                         # E
+U8TYPE                         # E
 utf8_distance                  # E
 utf8_hop                       # U
+UTF8SKIP                       # E
+UVof                           # E
+UVSIZE                         # E
+UVTYPE                         # E
+UVuf                           # E
+UVxf                           # E
 vcroak                         # E
 vform                          # E
 vload_module                   # E
@@ -149,93 +201,136 @@ vnewSVpvf                      # E
 vwarn                          # E
 vwarner                        # E
 warn                           # E (Perl_warn)
+WARN_ALL                       # E
+WARN_AMBIGUOUS                 # E
+WARN_BAREWORD                  # E
+WARN_CLOSED                    # E
+WARN_CLOSURE                   # E
+WARN_DEBUGGING                 # E
+WARN_DEPRECATED                # E
+WARN_DIGIT                     # E
 warner                         # E
-CopFILE                        # added by devel/scanprov
-CopFILEAV                      # added by devel/scanprov
-CopFILEGV                      # added by devel/scanprov
-CopFILEGV_set                  # added by devel/scanprov
-CopFILESV                      # added by devel/scanprov
-CopFILE_set                    # added by devel/scanprov
-CopSTASH                       # added by devel/scanprov
-CopSTASHPV                     # added by devel/scanprov
-CopSTASHPV_set                 # added by devel/scanprov
-CopSTASH_eq                    # added by devel/scanprov
-CopSTASH_set                   # added by devel/scanprov
-INT2PTR                        # added by devel/scanprov
-IVSIZE                         # added by devel/scanprov
-IVTYPE                         # added by devel/scanprov
-IVdf                           # added by devel/scanprov
-NUM2PTR                        # added by devel/scanprov
-NVTYPE                         # added by devel/scanprov
-PERL_REVISION                  # added by devel/scanprov
-PERL_SUBVERSION                # added by devel/scanprov
-PERL_VERSION                   # added by devel/scanprov
-PL_no_modify                   # added by devel/scanprov
-PL_ppaddr                      # added by devel/scanprov
-PTR2IV                         # added by devel/scanprov
-PTR2NV                         # added by devel/scanprov
-PTR2UV                         # added by devel/scanprov
-PTRV                           # added by devel/scanprov
-SVf                            # added by devel/scanprov
-SVf_UTF8                       # added by devel/scanprov
-UVSIZE                         # added by devel/scanprov
-UVTYPE                         # added by devel/scanprov
-UVof                           # added by devel/scanprov
-UVuf                           # added by devel/scanprov
-UVxf                           # added by devel/scanprov
-WARN_ALL                       # added by devel/scanprov
-WARN_AMBIGUOUS                 # added by devel/scanprov
-WARN_BAREWORD                  # added by devel/scanprov
-WARN_CLOSED                    # added by devel/scanprov
-WARN_CLOSURE                   # added by devel/scanprov
-WARN_DEBUGGING                 # added by devel/scanprov
-WARN_DEPRECATED                # added by devel/scanprov
-WARN_DIGIT                     # added by devel/scanprov
-WARN_EXEC                      # added by devel/scanprov
-WARN_EXITING                   # added by devel/scanprov
-WARN_GLOB                      # added by devel/scanprov
-WARN_INPLACE                   # added by devel/scanprov
-WARN_INTERNAL                  # added by devel/scanprov
-WARN_IO                        # added by devel/scanprov
-WARN_MALLOC                    # added by devel/scanprov
-WARN_MISC                      # added by devel/scanprov
-WARN_NEWLINE                   # added by devel/scanprov
-WARN_NUMERIC                   # added by devel/scanprov
-WARN_ONCE                      # added by devel/scanprov
-WARN_OVERFLOW                  # added by devel/scanprov
-WARN_PACK                      # added by devel/scanprov
-WARN_PARENTHESIS               # added by devel/scanprov
-WARN_PIPE                      # added by devel/scanprov
-WARN_PORTABLE                  # added by devel/scanprov
-WARN_PRECEDENCE                # added by devel/scanprov
-WARN_PRINTF                    # added by devel/scanprov
-WARN_PROTOTYPE                 # added by devel/scanprov
-WARN_QW                        # added by devel/scanprov
-WARN_RECURSION                 # added by devel/scanprov
-WARN_REDEFINE                  # added by devel/scanprov
-WARN_REGEXP                    # added by devel/scanprov
-WARN_RESERVED                  # added by devel/scanprov
-WARN_SEMICOLON                 # added by devel/scanprov
-WARN_SEVERE                    # added by devel/scanprov
-WARN_SIGNAL                    # added by devel/scanprov
-WARN_SUBSTR                    # added by devel/scanprov
-WARN_SYNTAX                    # added by devel/scanprov
-WARN_TAINT                     # added by devel/scanprov
-WARN_UNINITIALIZED             # added by devel/scanprov
-WARN_UNOPENED                  # added by devel/scanprov
-WARN_UNPACK                    # added by devel/scanprov
-WARN_UNTIE                     # added by devel/scanprov
-WARN_UTF8                      # added by devel/scanprov
-WARN_VOID                      # added by devel/scanprov
-XSprePUSH                      # added by devel/scanprov
-aTHX                           # added by devel/scanprov
-aTHX_                          # added by devel/scanprov
-ckWARN                         # added by devel/scanprov
-dNOOP                          # added by devel/scanprov
-dTHX                           # added by devel/scanprov
-dTHXa                          # added by devel/scanprov
-dTHXoa                         # added by devel/scanprov
-dXSTARG                        # added by devel/scanprov
-isALNUMC                       # added by devel/scanprov
-pTHX                           # added by devel/scanprov
-pTHX_                          # added by devel/scanprov
+WARN_EXEC                      # E
+WARN_EXITING                   # E
+WARN_GLOB                      # E
+WARN_INPLACE                   # E
+WARN_INTERNAL                  # E
+WARN_IO                        # E
+WARN_MALLOC                    # E
+WARN_MISC                      # E
+WARN_NEWLINE                   # E
+WARN_NUMERIC                   # E
+WARN_ONCE                      # E
+WARN_OVERFLOW                  # E
+WARN_PACK                      # E
+WARN_PARENTHESIS               # E
+WARN_PIPE                      # E
+WARN_PORTABLE                  # E
+WARN_PRECEDENCE                # E
+WARN_PRINTF                    # E
+WARN_PROTOTYPE                 # E
+WARN_QW                        # E
+WARN_RECURSION                 # E
+WARN_REDEFINE                  # E
+WARN_REGEXP                    # E
+WARN_RESERVED                  # E
+WARN_SEMICOLON                 # E
+WARN_SEVERE                    # E
+WARN_SIGNAL                    # E
+WARN_SUBSTR                    # E
+WARN_SYNTAX                    # E
+WARN_TAINT                     # E
+WARN_UNINITIALIZED             # E
+WARN_UNOPENED                  # E
+WARN_UNPACK                    # E
+WARN_UNTIE                     # E
+WARN_UTF8                      # E
+WARN_VOID                      # E
+XPUSHn                         # E
+XSRETURN_NV                    # E
+XST_mNV                        # E
+CopFILE                        # M added by devel/scanprov
+CopFILEAV                      # M added by devel/scanprov
+CopFILEGV                      # M added by devel/scanprov
+CopFILEGV_set                  # M added by devel/scanprov
+CopFILE_set                    # M added by devel/scanprov
+CopFILESV                      # M added by devel/scanprov
+CopSTASH                       # M added by devel/scanprov
+CopSTASH_eq                    # M added by devel/scanprov
+CopSTASHPV                     # M added by devel/scanprov
+CopSTASHPV_set                 # M added by devel/scanprov
+CopSTASH_set                   # M added by devel/scanprov
+croak_nocontext                # M added by devel/scanprov
+dNOOP                          # M added by devel/scanprov
+dTHXa                          # M added by devel/scanprov
+dTHXoa                         # M added by devel/scanprov
+dXSTARG                        # M added by devel/scanprov
+mess_nocontext                 # M added by devel/scanprov
+NUM2PTR                        # M added by devel/scanprov
+PL_no_modify                   # M added by devel/scanprov
+PL_ppaddr                      # M added by devel/scanprov
+pTHX_                          # M added by devel/scanprov
+PTRV                           # M added by devel/scanprov
+sv_catpvf_mg_nocontext         # M added by devel/scanprov
+sv_setpvf_mg_nocontext         # M added by devel/scanprov
+warn_nocontext                 # M added by devel/scanprov
+XSprePUSH                      # M added by devel/scanprov
+any_dup                        # F added by devel/scanprov
+apply_attrs                    # F added by devel/scanprov
+cop_free                       # F added by devel/scanprov
+cr_textfilter                  # F added by devel/scanprov
+cv_dump                        # F added by devel/scanprov
+die_nocontext                  # F added by devel/scanprov
+do_aexec5                      # F added by devel/scanprov
+do_exec3                       # F added by devel/scanprov
+do_oddball                     # F added by devel/scanprov
+dooneliner                     # F added by devel/scanprov
+do_vecget                      # F added by devel/scanprov
+dup_attrlist                   # F added by devel/scanprov
+find_byclass                   # F added by devel/scanprov
+form_nocontext                 # F added by devel/scanprov
+fprintf_nocontext              # F added by devel/scanprov
+getenv_len                     # F added by devel/scanprov
+get_mstats                     # F added by devel/scanprov
+GetVars                        # F added by devel/scanprov
+hv_magic_check                 # F added by devel/scanprov
+init_i18nl10n                  # F added by devel/scanprov
+init_i18nl14n                  # F added by devel/scanprov
+is_handle_constructor          # F added by devel/scanprov
+load_module_nocontext          # F added by devel/scanprov
+magic_killbackrefs             # F added by devel/scanprov
+magic_regdata_cnt              # F added by devel/scanprov
+magic_regdatum_get             # F added by devel/scanprov
+mode_from_discipline           # F added by devel/scanprov
+my_attrs                       # F added by devel/scanprov
+my_kid                         # F added by devel/scanprov
+new_collate                    # F added by devel/scanprov
+new_ctype                      # F added by devel/scanprov
+new_numeric                    # F added by devel/scanprov
+newPADOP                       # F added by devel/scanprov
+newSVpvf_nocontext             # F added by devel/scanprov
+op_clear                       # F added by devel/scanprov
+parse_body                     # F added by devel/scanprov
+perl_alloc_using               # F added by devel/scanprov
+perl_clone                     # F added by devel/scanprov
+perl_clone_using               # F added by devel/scanprov
+qerror                         # F added by devel/scanprov
+re_intuit_start                # F added by devel/scanprov
+re_intuit_string               # F added by devel/scanprov
+report_uninit                  # F added by devel/scanprov
+run_body                       # F added by devel/scanprov
+scalar_mod_type                # F added by devel/scanprov
+set_numeric_radix              # F added by devel/scanprov
+set_numeric_standard           # F added by devel/scanprov
+simplify_sort                  # F added by devel/scanprov
+Slab_Alloc                     # F added by devel/scanprov
+sv_catpvf_nocontext            # F added by devel/scanprov
+sv_del_backref                 # F added by devel/scanprov
+sv_setpvf_nocontext            # F added by devel/scanprov
+sys_intern_dup                 # F added by devel/scanprov
+to_uni_lower                   # F added by devel/scanprov
+to_uni_title                   # F added by devel/scanprov
+to_uni_upper                   # F added by devel/scanprov
+utf16_to_utf8                  # F added by devel/scanprov
+utf16_to_utf8_reversed         # F added by devel/scanprov
+warner_nocontext               # F added by devel/scanprov
index 7eab86a..6205d50 100644 (file)
@@ -1,14 +1,27 @@
 5.006001
-SvGAMAGIC                      # U
+apply_attrs_string             # U
+bytes_to_utf8                  # U
+G_METHOD                       # E
 gv_efullname4                  # U
 gv_fullname4                   # U
 isBLANK                        # U
+isBLANK_LC                     # U
 isPSXSPC                       # U
+isPSXSPC_LC                    # U
 is_utf8_string                 # U
+NVef                           # E
+NVff                           # E
+NVgf                           # E
+NVSIZE                         # E
 save_generic_pvref             # U
-utf16_to_utf8                  # E (Perl_utf16_to_utf8)
-utf16_to_utf8_reversed         # E (Perl_utf16_to_utf8_reversed)
-G_METHOD                       # added by devel/scanprov
-NVef                           # added by devel/scanprov
-NVff                           # added by devel/scanprov
-NVgf                           # added by devel/scanprov
+SvGAMAGIC                      # U
+utf8_to_bytes                  # U
+do_trans_complex               # F added by devel/scanprov
+do_trans_count                 # F added by devel/scanprov
+do_trans_simple                # F added by devel/scanprov
+find_in_my_stash               # F added by devel/scanprov
+magic_regdatum_set             # F added by devel/scanprov
+report_evil_fh                 # F added by devel/scanprov
+swallow_bom                    # F added by devel/scanprov
+sys_intern_clear               # F added by devel/scanprov
+sys_intern_init                # F added by devel/scanprov
index 716a909..14a9a27 100644 (file)
@@ -1,23 +1,53 @@
 5.007001
-POPpbytex                      # E
-SvUOK                          # U
+bytes_from_utf8                # U
 despatch_signals               # U
 do_openn                       # U
 gv_handler                     # U
+isALNUM_LC_uvchr               # U
+isALPHA_LC_uvchr               # U
+isCNTRL_LC_uvchr               # U
+isDIGIT_LC_uvchr               # U
+isGRAPH_LC_uvchr               # U
+isIDFIRST_LC_uvchr             # U
+isLOWER_LC_uvchr               # U
 is_lvalue_sub                  # U
+isPRINT_LC_uvchr               # U
+isPUNCT_LC_uvchr               # U
+isSPACE_LC_uvchr               # U
+isUPPER_LC_uvchr               # U
 my_popen_list                  # U
+NATIVE_TO_UNI                  # U
 newSVpvn_share                 # U
+PerlIO_apply_layers            # U
+PerlIO_binmode                 # U
+PerlIO_debug                   # U
+POPpbytex                      # E
+printf_nocontext               # U
 save_mortalizesv               # U
-scan_num                       # E (Perl_scan_num)
+scan_num                       # A
 sv_force_normal_flags          # U
+SV_IMMEDIATE_UNREF             # E
 sv_setref_uv                   # U
 sv_unref_flags                 # U
+SvUOK                          # U
 sv_utf8_upgrade                # E (Perl_sv_utf8_upgrade)
+UNICODE_REPLACEMENT            # E
+UNI_TO_NATIVE                  # U
+UTF8_CHECK_ONLY                # E
+UTF8_IS_INVARIANT              # U
 utf8_length                    # U
 utf8n_to_uvchr                 # U
-utf8n_to_uvuni                 # U
+utf8_to_uvchr                  # U
 uvchr_to_utf8                  # U
-uvuni_to_utf8                  # U
-PTR2ul                         # added by devel/scanprov
-SV_IMMEDIATE_UNREF             # added by devel/scanprov
-UVXf                           # added by devel/scanprov
+UVXf                           # E
+PTR2ul                         # M added by devel/scanprov
+expect_number                  # F added by devel/scanprov
+magic_freeovrld                # F added by devel/scanprov
+Perl_start_glob                # F added by devel/scanprov
+reghop3                        # F added by devel/scanprov
+reghopmaybe3                   # F added by devel/scanprov
+stdize_locale                  # F added by devel/scanprov
+sv_2iuv_non_preserve           # F added by devel/scanprov
+tokereport                     # F added by devel/scanprov
+utf8n_to_uvuni                 # F added by devel/scanprov
+utf8_to_uvuni                  # F added by devel/scanprov
index 40792a3..fafecdf 100644 (file)
@@ -1,71 +1,77 @@
 5.007002
-SvPV_force_nomg                # U
-SvPV_nomg                      # U
+atfork_lock                    # U
+atfork_unlock                  # U
 calloc                         # U
 dAX                            # E
 dITEMS                         # E
 getcwd_sv                      # U
 grok_number                    # U
+GROK_NUMERIC_RADIX             # U
 grok_numeric_radix             # U
 init_tm                        # U
+IN_LOCALE                      # E
+IN_LOCALE_COMPILETIME          # E
+IN_LOCALE_RUNTIME              # E
+IS_NUMBER_GREATER_THAN_UV_MAX  # E
+IS_NUMBER_INFINITY             # E
+IS_NUMBER_IN_UV                # E
+IS_NUMBER_NEG                  # E
+IS_NUMBER_NOT_INT              # E
 malloc                         # U
 mfree                          # U
 mini_mktime                    # U
-my_atof2                       # U
 my_strftime                    # U
 op_null                        # U
+OSVERS                         # E
+PERL_MAGIC_arylen              # E
+PERL_MAGIC_backref             # E
+PERL_MAGIC_bm                  # E
+PERL_MAGIC_collxfrm            # E
+PERL_MAGIC_dbfile              # E
+PERL_MAGIC_dbline              # E
+PERL_MAGIC_defelem             # E
+PERL_MAGIC_env                 # E
+PERL_MAGIC_envelem             # E
+PERL_MAGIC_ext                 # E
+PERL_MAGIC_fm                  # E
+PERL_MAGIC_isa                 # E
+PERL_MAGIC_isaelem             # E
+PERL_MAGIC_nkeys               # E
+PERL_MAGIC_overload_table      # E
+PERL_MAGIC_pos                 # E
+PERL_MAGIC_qr                  # E
+PERL_MAGIC_regdata             # E
+PERL_MAGIC_regdatum            # E
+PERL_MAGIC_regex_global        # E
+PERL_MAGIC_sig                 # E
+PERL_MAGIC_sigelem             # E
+PERL_MAGIC_substr              # E
+PERL_MAGIC_sv                  # E
+PERL_MAGIC_taint               # E
+PERL_MAGIC_tied                # E
+PERL_MAGIC_tiedelem            # E
+PERL_MAGIC_tiedscalar          # E
+PERL_MAGIC_uvar                # E
+PERL_MAGIC_vec                 # E
 realloc                        # U
 sv_2pv_flags                   # U
 sv_catpvn_flags                # U
 sv_catpvn_nomg                 # U
 sv_catsv_flags                 # U
 sv_catsv_nomg                  # U
+SV_GMAGIC                      # E
+SvPV_force_nomg                # U
 sv_pvn_force_flags             # U
+SvPV_nomg                      # U
 sv_setsv_flags                 # U
 sv_setsv_nomg                  # U
 sv_utf8_upgrade_flags          # U
 sv_utf8_upgrade_nomg           # U
-GROK_NUMERIC_RADIX             # added by devel/scanprov
-IN_LOCALE                      # added by devel/scanprov
-IN_LOCALE_COMPILETIME          # added by devel/scanprov
-IN_LOCALE_RUNTIME              # added by devel/scanprov
-IS_NUMBER_GREATER_THAN_UV_MAX  # added by devel/scanprov
-IS_NUMBER_INFINITY             # added by devel/scanprov
-IS_NUMBER_IN_UV                # added by devel/scanprov
-IS_NUMBER_NEG                  # added by devel/scanprov
-IS_NUMBER_NOT_INT              # added by devel/scanprov
-PERL_MAGIC_arylen              # added by devel/scanprov
-PERL_MAGIC_backref             # added by devel/scanprov
-PERL_MAGIC_bm                  # added by devel/scanprov
-PERL_MAGIC_collxfrm            # added by devel/scanprov
-PERL_MAGIC_dbfile              # added by devel/scanprov
-PERL_MAGIC_dbline              # added by devel/scanprov
-PERL_MAGIC_defelem             # added by devel/scanprov
-PERL_MAGIC_env                 # added by devel/scanprov
-PERL_MAGIC_envelem             # added by devel/scanprov
-PERL_MAGIC_ext                 # added by devel/scanprov
-PERL_MAGIC_fm                  # added by devel/scanprov
-PERL_MAGIC_isa                 # added by devel/scanprov
-PERL_MAGIC_isaelem             # added by devel/scanprov
-PERL_MAGIC_nkeys               # added by devel/scanprov
-PERL_MAGIC_overload_table      # added by devel/scanprov
-PERL_MAGIC_pos                 # added by devel/scanprov
-PERL_MAGIC_qr                  # added by devel/scanprov
-PERL_MAGIC_regdata             # added by devel/scanprov
-PERL_MAGIC_regdatum            # added by devel/scanprov
-PERL_MAGIC_regex_global        # added by devel/scanprov
-PERL_MAGIC_sig                 # added by devel/scanprov
-PERL_MAGIC_sigelem             # added by devel/scanprov
-PERL_MAGIC_substr              # added by devel/scanprov
-PERL_MAGIC_sv                  # added by devel/scanprov
-PERL_MAGIC_taint               # added by devel/scanprov
-PERL_MAGIC_tied                # added by devel/scanprov
-PERL_MAGIC_tiedelem            # added by devel/scanprov
-PERL_MAGIC_tiedscalar          # added by devel/scanprov
-PERL_MAGIC_uvar                # added by devel/scanprov
-PERL_MAGIC_vec                 # added by devel/scanprov
-PERL_UNUSED_DECL               # added by devel/scanprov
-PERL_UNUSED_VAR                # added by devel/scanprov
-SV_GMAGIC                      # added by devel/scanprov
-SvPV_flags                     # added by devel/scanprov
-SvPV_force_flags               # added by devel/scanprov
+PERL_UNUSED_DECL               # M added by devel/scanprov
+PERL_UNUSED_VAR                # M added by devel/scanprov
+SvPV_flags                     # M added by devel/scanprov
+SvPV_force_flags               # M added by devel/scanprov
+boot_core_PerlIO               # F added by devel/scanprov
+closest_cop                    # F added by devel/scanprov
+deb_curcv                      # F added by devel/scanprov
+Perl_my_atof2                  # F added by devel/scanprov
index fc0a15d..6360b28 100644 (file)
@@ -1,7 +1,31 @@
 5.007003
+ckWARN3                        # U
+ckWARN3_d                      # U
+ckWARN4                        # U
+ckWARN4_d                      # U
+custom_op_desc                 # U
+custom_op_name                 # U
+cx_dup                         # E (Perl_cx_dup)
+deb                            # U
+deb_nocontext                  # U
+debstack                       # U
+debstackptrs                   # U
+fp_dup                         # A
+gp_dup                         # E (Perl_gp_dup)
+grok_bin                       # U
+grok_hex                       # U
+grok_oct                       # U
+gv_fetchmeth_autoload          # U
+he_dup                         # E (Perl_he_dup)
+ibcmp_utf8                     # U
+IS_NUMBER_NAN                  # E
+mg_dup                         # E (Perl_mg_dup)
+my_fork                        # U
+my_socketpair                  # U
 OP_DESC                        # U
 OP_NAME                        # U
-PL_peepp                       # E
+perl_destruct                  # E (perl_destruct)
+PERL_EXIT_DESTRUCT_END         # E
 PerlIO_clearerr                # U (PerlIO_clearerr)
 PerlIO_close                   # U (PerlIO_close)
 PerlIO_eof                     # U (PerlIO_eof)
@@ -16,63 +40,51 @@ PerlIO_get_ptr                 # U (PerlIO_get_ptr)
 PerlIO_read                    # U (PerlIO_read)
 PerlIO_seek                    # U (PerlIO_seek)
 PerlIO_set_cnt                 # U (PerlIO_set_cnt)
-PerlIO_set_ptrcnt              # U (PerlIO_set_ptrcnt)
 PerlIO_setlinebuf              # U (PerlIO_setlinebuf)
+PerlIO_set_ptrcnt              # U (PerlIO_set_ptrcnt)
 PerlIO_stderr                  # U (PerlIO_stderr)
 PerlIO_stdin                   # U (PerlIO_stdin)
 PerlIO_stdout                  # U (PerlIO_stdout)
 PerlIO_tell                    # U (PerlIO_tell)
 PerlIO_unread                  # U (PerlIO_unread)
 PerlIO_write                   # U (PerlIO_write)
-SvLOCK                         # U
-SvSHARE                        # U
-SvUNLOCK                       # U
-atfork_lock                    # U
-atfork_unlock                  # U
-custom_op_desc                 # U
-custom_op_name                 # U
-deb                            # U
-debstack                       # U
-debstackptrs                   # U
-grok_bin                       # U
-grok_hex                       # U
-grok_oct                       # U
-gv_fetchmeth_autoload          # U
-ibcmp_utf8                     # U
-my_fork                        # U
-my_socketpair                  # U
-pack_cat                       # U
-perl_destruct                  # E (perl_destruct)
+PERL_MAGIC_shared              # E
+PERL_MAGIC_shared_scalar       # E
+PERL_MAGIC_uvar_elem           # E
+PERL_SCAN_ALLOW_UNDERSCORES    # E
+PERL_SCAN_DISALLOW_PREFIX      # E
+PERL_SCAN_GREATER_THAN_UV_MAX  # E
+PL_peepp                       # E
 pv_uni_display                 # U
-save_shared_pvref              # U
+rvpv_dup                       # E
 savesharedpv                   # U
+save_shared_pvref              # U
+si_dup                         # E (Perl_si_dup)
 sortsv                         # U
+ss_dup                         # E (Perl_ss_dup)
+sv_copypv                      # U
+sv_dup                         # E (Perl_sv_dup)
+SvLOCK                         # U
 sv_magicext                    # U
 sv_nolocking                   # U
 sv_nosharing                   # U
+sv_nounlocking                 # U
 sv_pvn_nomg                    # U
 sv_recode_to_utf8              # U
+SvSHARE                        # U
 sv_uni_display                 # U
+SvUNLOCK                       # U
 unpack_str                     # U
 uvchr_to_utf8_flags            # U
-uvuni_to_utf8_flags            # U
 vdeb                           # U
-IS_NUMBER_NAN                  # added by devel/scanprov
-MY_CXT                         # added by devel/scanprov
-MY_CXT_INIT                    # added by devel/scanprov
-PERL_MAGIC_shared              # added by devel/scanprov
-PERL_MAGIC_shared_scalar       # added by devel/scanprov
-PERL_MAGIC_uvar_elem           # added by devel/scanprov
-PERL_SCAN_ALLOW_UNDERSCORES    # added by devel/scanprov
-PERL_SCAN_DISALLOW_PREFIX      # added by devel/scanprov
-PERL_SCAN_GREATER_THAN_UV_MAX  # added by devel/scanprov
-START_MY_CXT                   # added by devel/scanprov
-_aMY_CXT                       # added by devel/scanprov
-_pMY_CXT                       # added by devel/scanprov
-aMY_CXT                        # added by devel/scanprov
-aMY_CXT_                       # added by devel/scanprov
-dMY_CXT                        # added by devel/scanprov
-dMY_CXT_SV                     # added by devel/scanprov
-pMY_CXT                        # added by devel/scanprov
-pMY_CXT_                       # added by devel/scanprov
-packWARN                       # added by devel/scanprov
+dMY_CXT_SV                     # M added by devel/scanprov
+packWARN                       # M added by devel/scanprov
+_pMY_CXT                       # M added by devel/scanprov
+pMY_CXT_                       # M added by devel/scanprov
+apply_attrs_my                 # F added by devel/scanprov
+group_end                      # F added by devel/scanprov
+init_argv_symbols              # F added by devel/scanprov
+measure_struct                 # F added by devel/scanprov
+next_symbol                    # F added by devel/scanprov
+Slab_Free                      # F added by devel/scanprov
+uvuni_to_utf8_flags            # F added by devel/scanprov
index e5a6dfc..53b7686 100644 (file)
@@ -1,5 +1,17 @@
 5.008000
-Poison                         # E
+hv_iternext_flags              # U
+HV_ITERNEXT_WANTPLACEHOLDERS   # E
+hv_store_flags                 # U
 nothreadhook                   # U
-WARN_LAYER                     # added by devel/scanprov
-WARN_THREADS                   # added by devel/scanprov
+Poison                         # E
+WARN_LAYER                     # E
+WARN_THREADS                   # E
+do_aspawn                      # F added by devel/scanprov
+do_spawn                       # F added by devel/scanprov
+do_spawn_nowait                # F added by devel/scanprov
+hv_notallowed                  # F added by devel/scanprov
+save_hek_flags                 # F added by devel/scanprov
+share_hek_flags                # F added by devel/scanprov
+to_byte_substr                 # F added by devel/scanprov
+to_utf8_substr                 # F added by devel/scanprov
+unshare_hek_or_pvn             # F added by devel/scanprov
index 97039b5..6dfa718 100644 (file)
@@ -1,30 +1,50 @@
 5.008001
+C_ARRAY_LENGTH                 # U
 CvPADLIST                      # E
-PL_comppad                     # E
-SvVOK                          # U
-XSRETURN_UV                    # U
 doing_taint                    # U
 find_runcv                     # U
 is_utf8_string_loc             # U
 packlist                       # U
 pad_add_anon                   # U
 pad_new                        # E
+pad_setsv                      # U
+pad_tidy                       # E
+PERL_ABS                       # U
+PERL_MAGIC_utf8                # E
+PERL_MAGIC_vstring             # E
+PERL_SCAN_SILENT_ILLDIGIT      # E
+PL_comppad                     # E
 save_bool                      # U
 savestack_grow_cnt             # U
 seed                           # U
 sv_cat_decode                  # U
+SV_COW_DROP_PV                 # E
 sv_setpviv                     # U
 sv_setpviv_mg                  # U
+SvVOK                          # U
 unpackstring                   # U
-C_ARRAY_LENGTH                 # added by devel/scanprov
-IN_PERL_COMPILETIME            # added by devel/scanprov
-PERL_ABS                       # added by devel/scanprov
-PERL_GCC_BRACE_GROUPS_FORBIDDEN # added by devel/scanprov
-PERL_MAGIC_utf8                # added by devel/scanprov
-PERL_MAGIC_vstring             # added by devel/scanprov
-PERL_SCAN_SILENT_ILLDIGIT      # added by devel/scanprov
-PERL_SIGNALS_UNSAFE_FLAG       # added by devel/scanprov
-PL_signals                     # added by devel/scanprov
-SV_COW_DROP_PV                 # added by devel/scanprov
-SV_UTF8_NO_ENCODING            # added by devel/scanprov
-XST_mUV                        # added by devel/scanprov
+XSRETURN_UV                    # U
+XST_mUV                        # U
+IN_PERL_COMPILETIME            # M added by devel/scanprov
+PERL_SIGNALS_UNSAFE_FLAG       # M added by devel/scanprov
+PL_signals                     # M added by devel/scanprov
+SV_UTF8_NO_ENCODING            # M added by devel/scanprov
+allocmy                        # F added by devel/scanprov
+deb_stack_all                  # F added by devel/scanprov
+deb_stack_n                    # F added by devel/scanprov
+do_dump_pad                    # F added by devel/scanprov
+doopen_pm                      # F added by devel/scanprov
+free_tied_hv_pool              # F added by devel/scanprov
+get_debug_opts                 # F added by devel/scanprov
+get_hash_seed                  # F added by devel/scanprov
+get_num                        # F added by devel/scanprov
+magic_setregexp                # F added by devel/scanprov
+magic_setutf8                  # F added by devel/scanprov
+pack_rec                       # F added by devel/scanprov
+pad_block_start                # F added by devel/scanprov
+pad_check_dup                  # F added by devel/scanprov
+pad_fixup_inner_anons          # F added by devel/scanprov
+pad_push                       # F added by devel/scanprov
+parse_unicode_opts             # F added by devel/scanprov
+unpack_rec                     # F added by devel/scanprov
+write_to_stderr                # F added by devel/scanprov
index 28bc859..e33d67e 100644 (file)
@@ -1,6 +1,20 @@
 5.009000
+_aMY_CXT                       # E
+aMY_CXT                        # E
+aMY_CXT_                       # E
+dMY_CXT                        # E
+hek_dup                        # U
+MY_CXT                         # E
+MY_CXT_INIT                    # E
+my_cxt_init                    # U
 new_version                    # U
+parser_dup                     # E
+pMY_CXT                        # E
+regdupe_internal               # U
 save_set_svflags               # U
+SVs_PADSTALE                   # E
 vcmp                           # U
 vnumify                        # U
 vstringify                     # U
+Perl_sv_free2                  # F added by devel/scanprov
+sv_setsv_cow                   # F added by devel/scanprov
index 0666184..90ab5a1 100644 (file)
@@ -1,8 +1,11 @@
 5.009001
-SvIV_nomg                      # U
-SvUV_nomg                      # U
 hv_clear_placeholders          # U
 hv_scalar                      # U
 scan_version                   # E (Perl_scan_version)
 sv_2iv_flags                   # U
 sv_2uv_flags                   # U
+SvIV_nomg                      # U
+SvUV_nomg                      # U
+hv_delete_common               # F added by devel/scanprov
+magic_scalarpack               # F added by devel/scanprov
+num_overflow                   # F added by devel/scanprov
index 86fee4d..2409a8a 100644 (file)
@@ -1,19 +1,11 @@
 5.009002
 CopyD                          # E
-MoveD                          # E
-PUSHmortal                     # E
-SvPVbyte_force                 # U
-UNDERBAR                       # E
-XCPT_CATCH                     # E
-XCPT_RETHROW                   # E
-XCPT_TRY_END                   # E
-XCPT_TRY_START                 # E
-XPUSHmortal                    # E
-ZeroD                          # E
 dUNDERBAR                      # E
 dXCPT                          # E
+find_rundefsvoffset            # U
 gv_fetchpvn_flags              # U
 gv_fetchsv                     # U
+MoveD                          # E
 mPUSHi                         # U
 mPUSHn                         # U
 mPUSHp                         # U
@@ -22,10 +14,22 @@ mXPUSHi                        # U
 mXPUSHn                        # U
 mXPUSHp                        # U
 mXPUSHu                        # U
+MY_CXT_CLONE                   # E
 op_refcnt_lock                 # U
 op_refcnt_unlock               # U
+PUSHmortal                     # E
 savesvpv                       # U
+SV_NOSTEAL                     # E
+SvPVbyte_force                 # U
+UNDERBAR                       # E
+UTF8_MAXBYTES                  # E
+UTF8_MAXBYTES_CASE             # E
 vnormal                        # U
-MY_CXT_CLONE                   # added by devel/scanprov
-SV_NOSTEAL                     # added by devel/scanprov
-UTF8_MAXBYTES                  # added by devel/scanprov
+XCPT_CATCH                     # E
+XCPT_RETHROW                   # E
+XCPT_TRY_END                   # E
+XCPT_TRY_START                 # E
+XPUSHmortal                    # E
+ZeroD                          # E
+find_uninit_var                # F added by devel/scanprov
+make_trie                      # F added by devel/scanprov
index 8b69a99..69b81a2 100644 (file)
@@ -1,20 +1,14 @@
 5.009003
-Newx                           # E
-Newxc                          # E
-Newxz                          # E
-PL_check                       # E
-SvMAGIC_set                    # U
-SvRV_set                       # U
-SvSTASH_set                    # U
-SvUV_set                       # U
 av_arylen_p                    # U
 ckwarn                         # U
 ckwarn_d                       # U
-csighandler                    # E (Perl_csighandler)
 dAXMARK                        # E
 dMULTICALL                     # E
 doref                          # U
+dVAR                           # E
 gv_const_sv                    # U
+GV_NOADD_NOINIT                # E
+GV_NOEXPAND                    # E
 gv_stashpvs                    # U
 hv_eiter_p                     # U
 hv_eiter_set                   # U
@@ -25,42 +19,88 @@ hv_placeholders_set            # U
 hv_riter_p                     # U
 hv_riter_set                   # U
 is_utf8_string_loclen          # U
+MULTICALL                      # E
 my_sprintf                     # U
 newGIVENOP                     # U
 newSVhek                       # U
 newSVpvs                       # U
 newSVpvs_share                 # U
-newWHENOP                      # U
-pad_compname_type              # U
+Newx                           # E
+Newxc                          # E
+Newxz                          # E
+PERL_MAGIC_arylen_p            # E
+PERL_MAGIC_rhash               # E
+PERL_MAGIC_symtab              # E
+PL_check                       # E
+POP_MULTICALL                  # E
 savepvs                        # U
 sortsv_flags                   # U
 sv_catpvs                      # U
+SvMAGIC_set                    # U
+SvRV_set                       # U
+SV_SMAGIC                      # E
+SvSTASH_set                    # U
+SvUV_set                       # U
 vverify                        # U
-HvNAMELEN_get                  # added by devel/scanprov
-HvNAME_get                     # added by devel/scanprov
-PERLIO_FUNCS_CAST              # added by devel/scanprov
-PERLIO_FUNCS_DECL              # added by devel/scanprov
-PERL_UNUSED_ARG                # added by devel/scanprov
-PTR2nat                        # added by devel/scanprov
-STR_WITH_LEN                   # added by devel/scanprov
-SV_CONST_RETURN                # added by devel/scanprov
-SV_MUTABLE_RETURN              # added by devel/scanprov
-SV_SMAGIC                      # added by devel/scanprov
-SvPVX_const                    # added by devel/scanprov
-SvPVX_mutable                  # added by devel/scanprov
-SvPV_const                     # added by devel/scanprov
-SvPV_flags_const               # added by devel/scanprov
-SvPV_flags_const_nolen         # added by devel/scanprov
-SvPV_flags_mutable             # added by devel/scanprov
-SvPV_force_flags_mutable       # added by devel/scanprov
-SvPV_force_flags_nolen         # added by devel/scanprov
-SvPV_force_mutable             # added by devel/scanprov
-SvPV_force_nolen               # added by devel/scanprov
-SvPV_force_nomg_nolen          # added by devel/scanprov
-SvPV_mutable                   # added by devel/scanprov
-SvPV_nolen_const               # added by devel/scanprov
-SvPV_nomg_const                # added by devel/scanprov
-SvPV_nomg_const_nolen          # added by devel/scanprov
-SvPV_renew                     # added by devel/scanprov
-SvSHARED_HASH                  # added by devel/scanprov
-dVAR                           # added by devel/scanprov
+GvSVn                          # M added by devel/scanprov
+HvNAME_get                     # M added by devel/scanprov
+HvNAMELEN_get                  # M added by devel/scanprov
+PERLIO_FUNCS_CAST              # M added by devel/scanprov
+PERLIO_FUNCS_DECL              # M added by devel/scanprov
+PERL_UNUSED_ARG                # M added by devel/scanprov
+PTR2nat                        # M added by devel/scanprov
+STR_WITH_LEN                   # M added by devel/scanprov
+SV_CONST_RETURN                # M added by devel/scanprov
+SV_MUTABLE_RETURN              # M added by devel/scanprov
+SvPV_const                     # M added by devel/scanprov
+SvPV_flags_const               # M added by devel/scanprov
+SvPV_flags_const_nolen         # M added by devel/scanprov
+SvPV_flags_mutable             # M added by devel/scanprov
+SvPV_force_flags_mutable       # M added by devel/scanprov
+SvPV_force_flags_nolen         # M added by devel/scanprov
+SvPV_force_mutable             # M added by devel/scanprov
+SvPV_force_nolen               # M added by devel/scanprov
+SvPV_force_nomg_nolen          # M added by devel/scanprov
+SvPV_mutable                   # M added by devel/scanprov
+SvPV_nolen_const               # M added by devel/scanprov
+SvPV_nomg_const                # M added by devel/scanprov
+SvPV_nomg_const_nolen          # M added by devel/scanprov
+SvPV_renew                     # M added by devel/scanprov
+SvPVX_const                    # M added by devel/scanprov
+SvPVX_mutable                  # M added by devel/scanprov
+SvSHARED_HASH                  # M added by devel/scanprov
+amagic_cmp                     # F added by devel/scanprov
+amagic_cmp_locale              # F added by devel/scanprov
+amagic_i_ncmp                  # F added by devel/scanprov
+amagic_ncmp                    # F added by devel/scanprov
+check_type_and_open            # F added by devel/scanprov
+dump_sv_child                  # F added by devel/scanprov
+F0convert                      # F added by devel/scanprov
+first_symbol                   # F added by devel/scanprov
+free_global_struct             # F added by devel/scanprov
+hv_auxinit                     # F added by devel/scanprov
+incpush_if_exists              # F added by devel/scanprov
+init_global_struct             # F added by devel/scanprov
+is_utf8_common                 # F added by devel/scanprov
+magic_freearylen_p             # F added by devel/scanprov
+mg_localize                    # F added by devel/scanprov
+my_clearenv                    # F added by devel/scanprov
+need_utf8                      # F added by devel/scanprov
+Perl_hv_backreferences_p       # F added by devel/scanprov
+Perl_hv_placeholders_p         # F added by devel/scanprov
+Perl_sv_add_backref            # F added by devel/scanprov
+Perl_sv_kill_backrefs          # F added by devel/scanprov
+restore_magic                  # F added by devel/scanprov
+run_user_filter                # F added by devel/scanprov
+sequence_num                   # F added by devel/scanprov
+sortcv                         # F added by devel/scanprov
+sortcv_stacked                 # F added by devel/scanprov
+sortcv_xsub                    # F added by devel/scanprov
+strip_return                   # F added by devel/scanprov
+sv_exp_grow                    # F added by devel/scanprov
+sv_i_ncmp                      # F added by devel/scanprov
+sv_ncmp                        # F added by devel/scanprov
+tokenize_use                   # F added by devel/scanprov
+uiv_2buf                       # F added by devel/scanprov
+unwind_handler_stack           # F added by devel/scanprov
+varname                        # F added by devel/scanprov
index 03e22e5..c4e52c8 100644 (file)
@@ -1,8 +1,32 @@
 5.009004
+gv_name_set                    # U
+hv_copy_hints_hv               # U
+hv_stores                      # U
+LIKELY                         # U
+my_snprintf                    # U
+my_strlcat                     # U
+my_strlcpy                     # U
+my_vsnprintf                   # U
+newXS_flags                    # U
 PerlIO_context_layers          # U
+PERL_MAGIC_hints               # E
+PERL_MAGIC_hintselem           # E
+PERL_PV_ESCAPE_ALL             # E
+PERL_PV_ESCAPE_FIRSTCHAR       # E
+PERL_PV_ESCAPE_NOBACKSLASH     # E
+PERL_PV_ESCAPE_NOCLEAR         # E
+PERL_PV_ESCAPE_QUOTE           # E
+PERL_PV_ESCAPE_UNI             # E
+PERL_PV_ESCAPE_UNI_DETECT      # E
+PERL_PV_PRETTY_LTGT            # E
+PERL_PV_PRETTY_QUOTE           # E
 PoisonFree                     # E
 PoisonNew                      # E
 PoisonWith                     # E
+pv_escape                      # U
+pv_pretty                      # U
+sv_does                        # U
+SV_HAS_TRAILING_NUL            # E
 SvREFCNT_inc_NN                # U
 SvREFCNT_inc_simple            # U
 SvREFCNT_inc_simple_NN         # U
@@ -10,31 +34,44 @@ SvREFCNT_inc_simple_void       # U
 SvREFCNT_inc_simple_void_NN    # U
 SvREFCNT_inc_void              # U
 SvREFCNT_inc_void_NN           # U
-gv_name_set                    # U
-hv_copy_hints_hv               # U
-hv_stores                      # U
-my_snprintf                    # U
-my_strlcat                     # U
-my_strlcpy                     # U
-my_vsnprintf                   # U
-pv_escape                      # U
-pv_pretty                      # U
-sv_does                        # U
 sv_setpvs                      # U
 sv_usepvn_flags                # U
-PERL_PV_ESCAPE_ALL             # added by devel/scanprov
-PERL_PV_ESCAPE_FIRSTCHAR       # added by devel/scanprov
-PERL_PV_ESCAPE_NOBACKSLASH     # added by devel/scanprov
-PERL_PV_ESCAPE_NOCLEAR         # added by devel/scanprov
-PERL_PV_ESCAPE_QUOTE           # added by devel/scanprov
-PERL_PV_ESCAPE_UNI             # added by devel/scanprov
-PERL_PV_ESCAPE_UNI_DETECT      # added by devel/scanprov
-PERL_PV_PRETTY_DUMP            # added by devel/scanprov
-PERL_PV_PRETTY_LTGT            # added by devel/scanprov
-PERL_PV_PRETTY_QUOTE           # added by devel/scanprov
-PERL_PV_PRETTY_REGPROP         # added by devel/scanprov
-PERL_UNUSED_CONTEXT            # added by devel/scanprov
-PERL_USE_GCC_BRACE_GROUPS      # added by devel/scanprov
-SV_HAS_TRAILING_NUL            # added by devel/scanprov
-SvVSTRING_mg                   # added by devel/scanprov
-gv_fetchpvs                    # added by devel/scanprov
+UNLIKELY                       # U
+gv_fetchpvs                    # M added by devel/scanprov
+isGV_with_GP                   # M added by devel/scanprov
+PERL_PV_PRETTY_DUMP            # M added by devel/scanprov
+PERL_PV_PRETTY_REGPROP         # M added by devel/scanprov
+PERL_UNUSED_CONTEXT            # M added by devel/scanprov
+PERL_USE_GCC_BRACE_GROUPS      # M added by devel/scanprov
+SvVSTRING_mg                   # M added by devel/scanprov
+clear_placeholders             # F added by devel/scanprov
+create_eval_scope              # F added by devel/scanprov
+debug_start_match              # F added by devel/scanprov
+delete_eval_scope              # F added by devel/scanprov
+dump_exec_pos                  # F added by devel/scanprov
+dump_trie                      # F added by devel/scanprov
+dump_trie_interim_list         # F added by devel/scanprov
+dump_trie_interim_table        # F added by devel/scanprov
+exec_failed                    # F added by devel/scanprov
+find_array_subscript           # F added by devel/scanprov
+find_hash_subscript            # F added by devel/scanprov
+glob_2number                   # F added by devel/scanprov
+glob_assign_glob               # F added by devel/scanprov
+join_exact                     # F added by devel/scanprov
+magic_clearhint                # F added by devel/scanprov
+magic_sethint                  # F added by devel/scanprov
+more_sv                        # F added by devel/scanprov
+Perl_newGP                     # F added by devel/scanprov
+Perl_new_warnings_bitfield     # F added by devel/scanprov
+pm_description                 # F added by devel/scanprov
+printbuf                       # F added by devel/scanprov
+ptr_table_find                 # F added by devel/scanprov
+refcounted_he_value            # F added by devel/scanprov
+regtail_study                  # F added by devel/scanprov
+space_join_names_mortal        # F added by devel/scanprov
+sv_2iuv_common                 # F added by devel/scanprov
+sv_pos_b2u_midway              # F added by devel/scanprov
+sv_pos_u2b_cached              # F added by devel/scanprov
+sv_pos_u2b_forwards            # F added by devel/scanprov
+sv_pos_u2b_midway              # F added by devel/scanprov
+utf8_mg_pos_cache_update       # F added by devel/scanprov
index 0959f92..17ce3d5 100644 (file)
@@ -1,32 +1,69 @@
 5.009005
-PL_parser                      # E
-SvRX                           # U
-SvRXOK                         # U
+av_create_and_push             # U
+av_create_and_unshift_one      # U
+CopLABEL                       # U
 get_cvn_flags                  # U
 gv_fetchfile_flags             # U
+lex_start                      # E (Perl_lex_start)
+memEQs                         # U
+memNEs                         # U
 mro_get_linear_isa             # U
 mro_method_changed_in          # U
 my_dirfd                       # U
 newSV_type                     # U
+PERL_PV_ESCAPE_RE              # E
+Perl_signbit                   # U
+PL_parser                      # E
 pregcomp                       # E (Perl_pregcomp)
+ptr_table_clear                # U
 ptr_table_fetch                # U
 ptr_table_free                 # U
 ptr_table_new                  # U
 ptr_table_split                # U
 ptr_table_store                # U
 re_compile                     # U
+regfree_internal               # U
 reg_named_buff_all             # U
 reg_named_buff_exists          # U
 reg_named_buff_fetch           # U
 reg_named_buff_firstkey        # U
 reg_named_buff_nextkey         # U
 reg_named_buff_scalar          # U
-regfree_internal               # U
 savesharedpvn                  # U
 scan_vstring                   # E (Perl_scan_vstring)
+SVfARG                         # U
+SvRX                           # U
+SvRXOK                         # U
 upg_version                    # E (Perl_upg_version)
-PERL_PV_ESCAPE_RE              # added by devel/scanprov
-SV_COW_SHARED_HASH_KEYS        # added by devel/scanprov
-SVfARG                         # added by devel/scanprov
-memEQs                         # added by devel/scanprov
-memNEs                         # added by devel/scanprov
+GV_NOADD_MASK                  # M added by devel/scanprov
+SV_COW_SHARED_HASH_KEYS        # M added by devel/scanprov
+boot_core_mro                  # F added by devel/scanprov
+find_and_forget_pmops          # F added by devel/scanprov
+mro_get_linear_isa_dfs         # F added by devel/scanprov
+mro_isa_changed_in             # F added by devel/scanprov
+mro_meta_dup                   # F added by devel/scanprov
+parser_free                    # F added by devel/scanprov
+Perl_emulate_cop_io            # F added by devel/scanprov
+Perl_get_db_sub                # F added by devel/scanprov
+Perl_get_re_arg                # F added by devel/scanprov
+Perl_mro_meta_init             # F added by devel/scanprov
+Perl_my_cxt_index              # F added by devel/scanprov
+Perl_op_refcnt_dec             # F added by devel/scanprov
+Perl_op_refcnt_inc             # F added by devel/scanprov
+Perl_softref2xv                # F added by devel/scanprov
+process_special_blocks         # F added by devel/scanprov
+reg_check_named_buff_matched   # F added by devel/scanprov
+regdump_extflags               # F added by devel/scanprov
+reghop4                        # F added by devel/scanprov
+reg_named_buff                 # F added by devel/scanprov
+reg_named_buff_iter            # F added by devel/scanprov
+reg_numbered_buff_fetch        # F added by devel/scanprov
+reg_numbered_buff_length       # F added by devel/scanprov
+reg_numbered_buff_store        # F added by devel/scanprov
+reg_qr_package                 # F added by devel/scanprov
+reg_scan_name                  # F added by devel/scanprov
+reg_skipcomment                # F added by devel/scanprov
+reg_temp_copy                  # F added by devel/scanprov
+require_tie_mod                # F added by devel/scanprov
+Slab_to_rw                     # F added by devel/scanprov
+update_debugger_info           # F added by devel/scanprov
index 922e614..43b63ec 100644 (file)
@@ -1,10 +1,16 @@
 5.010000
 hv_common                      # U
 hv_common_key_len              # U
+PERL_PV_PRETTY_ELLIPSES        # E
+reentrant_free                 # U
+reentrant_init                 # U
+reentrant_retry                # U
+reentrant_size                 # U
+START_MY_CXT                   # E
 sv_destroyable                 # U
 sys_init                       # U
 sys_init3                      # U
 sys_term                       # U
-PERL_PV_PRETTY_ELLIPSES        # added by devel/scanprov
-PERL_PV_PRETTY_NOCLEAR         # added by devel/scanprov
-XSPROTO                        # added by devel/scanprov
+PERL_PV_PRETTY_NOCLEAR         # M added by devel/scanprov
+XSPROTO                        # M added by devel/scanprov
+sv_2num                        # F added by devel/scanprov
index 61012f7..04b614a 100644 (file)
@@ -1,22 +1,29 @@
 5.010001
-HeUTF8                         # U
 croak_xs_usage                 # U
+HeUTF8                         # U
 mPUSHs                         # U
-mXPUSHs                        # U
 mro_get_from_name              # U
 mro_get_private_data           # U
 mro_register                   # U
 mro_set_mro                    # U
 mro_set_private_data           # U
+mXPUSHs                        # U
 newSVpvn_flags                 # U
 newSVpvn_utf8                  # U
 newSVpvs_flags                 # U
+save_freeop                    # U (Perl_save_freeop)
 save_hints                     # U
+save_op                        # U (Perl_save_op)
 save_padsv_and_mortalize       # U
 save_pushi32ptr                # U
 save_pushptr                   # U
 save_pushptrptr                # U
 sv_insert_flags                # U
-DEFSV_set                      # added by devel/scanprov
-MUTABLE_PTR                    # added by devel/scanprov
-MUTABLE_SV                     # added by devel/scanprov
+DEFSV_set                      # M added by devel/scanprov
+MUTABLE_PTR                    # M added by devel/scanprov
+MUTABLE_SV                     # M added by devel/scanprov
+magic_clearisa                 # F added by devel/scanprov
+malloc_good_size               # F added by devel/scanprov
+mem_log_common                 # F added by devel/scanprov
+save_pushptri32ptr             # F added by devel/scanprov
+search_const                   # F added by devel/scanprov
index 1f499d9..b908c46 100644 (file)
@@ -1,15 +1,26 @@
 5.011000
-Gv_AMupdate                    # E (Perl_Gv_AMupdate)
-PL_opfreehook                  # E
-SVt_REGEXP                     # E
-SvOOK_offset                   # U
 av_iter_p                      # U
 gv_add_by_type                 # U
+Gv_AMupdate                    # A
 is_ascii_string                # U
+PL_opfreehook                  # E
 pregfree2                      # U
+PUSH_MULTICALL                 # U
+re_dup_guts                    # U
 save_adelete                   # U
 save_aelem_flags               # U
 save_hdelete                   # U
 save_helem_flags               # U
+SvOOK_offset                   # U
+SVt_REGEXP                     # E
 sv_utf8_upgrade_flags_grow     # U
-get_cvs                        # added by devel/scanprov
+WARN_IMPRECISION               # E
+get_cvs                        # M added by devel/scanprov
+do_delete_local                # F added by devel/scanprov
+dump_all_perl                  # F added by devel/scanprov
+dump_packsubs_perl             # F added by devel/scanprov
+dump_sub_perl                  # F added by devel/scanprov
+get_aux_mg                     # F added by devel/scanprov
+incpush_use_sep                # F added by devel/scanprov
+magic_clearhints               # F added by devel/scanprov
+sv_dup_inc_multiple            # F added by devel/scanprov
index 28a8d5b..48651c5 100644 (file)
@@ -1,3 +1,7 @@
 5.011001
 ck_warner                      # U
 ck_warner_d                    # U
+add_utf16_textfilter           # F added by devel/scanprov
+ckwarn_common                  # F added by devel/scanprov
+package_version                # F added by devel/scanprov
+utf16_textfilter               # F added by devel/scanprov
index 910a552..651df59 100644 (file)
@@ -1,2 +1,20 @@
 5.011002
+CHARBITS                       # E
+ENTER_with_name                # U
+LEAVE_with_name                # U
+lex_bufutf8                    # U
+lex_discard_to                 # U
+lex_grow_linestr               # U
+LEX_KEEP_PREVIOUS              # E
+lex_next_chunk                 # U
+lex_peek_unichar               # U
+lex_read_space                 # U
+lex_read_to                    # U
+lex_read_unichar               # U
+lex_stuff_pvn                  # U
+lex_stuff_sv                   # U
+LEX_STUFF_UTF8                 # E
+lex_unstuff                    # U
 PL_keyword_plugin              # E
+gv_try_downgrade               # F added by devel/scanprov
+Perl_keyword_plugin_standard   # F added by devel/scanprov
index 86c1fce..2679a3f 100644 (file)
@@ -1,2 +1,4 @@
 5.011004
 prescan_version                # U
+WARN_ILLEGALPROTO              # E
+force_strict_version           # F added by devel/scanprov
index 8a31cc7..84da3de 100644 (file)
@@ -1,2 +1,2 @@
 5.013000
-cBOOL                          # added by devel/scanprov
+cBOOL                          # U
index 679bf3c..02c65cd 100644 (file)
@@ -4,3 +4,9 @@ die_sv                         # U
 mess_sv                        # U
 sv_2nv_flags                   # U
 warn_sv                        # U
+die_unwind                     # F added by devel/scanprov
+grok_bslash_c                  # F added by devel/scanprov
+invoke_exception_hook          # F added by devel/scanprov
+magic_methcall1                # F added by devel/scanprov
+Perl_magic_methcall            # F added by devel/scanprov
+with_queued_errors             # F added by devel/scanprov
index 5058d1e..bfd1764 100644 (file)
@@ -1,10 +1,18 @@
 5.013002
-SvNV_nomg                      # U
+C_ARRAY_END                    # U
+clone_params_del               # U
+clone_params_new               # U
 find_rundefsv                  # U
 foldEQ                         # U
 foldEQ_locale                  # U
 foldEQ_utf8                    # U
 hv_fill                        # U
 sv_dec_nomg                    # U
+sv_dup_inc                     # U
 sv_inc_nomg                    # U
-C_ARRAY_END                    # added by devel/scanprov
+SvNV_nomg                      # U
+padlist_dup                    # F added by devel/scanprov
+Perl_try_amagic_bin            # F added by devel/scanprov
+Perl_try_amagic_un             # F added by devel/scanprov
+sv_dup_common                  # F added by devel/scanprov
+unreferenced_to_tmp_stack      # F added by devel/scanprov
index 5e04f03..2284558 100644 (file)
@@ -1,3 +1,10 @@
 5.013003
 blockhook_register             # E
 croak_no_modify                # U
+anonymise_cv_maybe             # F added by devel/scanprov
+assert_uft8_cache_coherent     # F added by devel/scanprov
+cvgv_set                       # F added by devel/scanprov
+grok_bslash_o                  # F added by devel/scanprov
+my_lstat_flags                 # F added by devel/scanprov
+my_stat_flags                  # F added by devel/scanprov
+utf8_mg_len_cache_update       # F added by devel/scanprov
index 8aac89e..6d5bd06 100644 (file)
@@ -1 +1,4 @@
 5.013004
+XS_APIVERSION_BOOTCHECK        # E
+Perl_hv_kill_backrefs          # F added by devel/scanprov
+Perl_init_dbargs               # F added by devel/scanprov
index 825d1ad..53130ca 100644 (file)
@@ -1,5 +1,10 @@
 5.013005
-PL_rpeepp                      # E
 caller_cx                      # U
 isOCTAL                        # U
 lex_stuff_pvs                  # U
+parse_fullstmt                 # U
+PL_rpeepp                      # E
+gv_magicalize_isa              # F added by devel/scanprov
+Perl_more_bodies               # F added by devel/scanprov
+rpeep                          # F added by devel/scanprov
+yyunlex                        # F added by devel/scanprov
index 596c1ad..0ee7d59 100644 (file)
@@ -1,12 +1,45 @@
 5.013006
-LINKLIST                       # U
-SvTRUE_nomg                    # U
 ck_entersub_args_list          # U
 ck_entersub_args_proto         # U
 ck_entersub_args_proto_or_list # U
 cv_get_call_checker            # E
 cv_set_call_checker            # E
+isALNUMC_A                     # U
+isALNUMC_L1                    # U
+isALPHA_A                      # U
+isALPHA_L1                     # U
+isASCII_A                      # U
+isBLANK_A                      # U
+isBLANK_L1                     # U
+isCNTRL_A                      # U
+isCNTRL_L1                     # U
+isDIGIT_A                      # U
+isDIGIT_L1                     # U
+isGRAPH_A                      # U
+isGRAPH_L1                     # U
+isIDFIRST_A                    # U
+isIDFIRST_L1                   # U
+isLOWER_A                      # U
+isLOWER_L1                     # U
+isOCTAL_A                      # U
+isOCTAL_L1                     # U
+isPRINT_A                      # U
+isPRINT_L1                     # U
+isPSXSPC_A                     # U
+isPSXSPC_L1                    # U
+isPUNCT_A                      # U
+isPUNCT_L1                     # U
+isSPACE_A                      # U
+isSPACE_L1                     # U
+isUPPER_A                      # U
+isUPPER_L1                     # U
 isWORDCHAR                     # U
+isWORDCHAR_A                   # U
+isWORDCHAR_L1                  # U
+isXDIGIT_A                     # U
+isXDIGIT_L1                    # U
+lex_stuff_pv                   # U
+LINKLIST                       # U
 mg_free_type                   # U
 newSVpv_share                  # U
 op_append_elem                 # U
@@ -14,7 +47,11 @@ op_append_list                 # U
 op_contextualize               # U
 op_linklist                    # U
 op_prepend_elem                # U
+parse_stmtseq                  # U
+PERL_MAGIC_checkcall           # E
 rv2cv_op_cv                    # U
+RV2CVOPCV_MARK_EARLY           # E
+RV2CVOPCV_RETURN_NAME_GV       # E
 savesharedpvs                  # U
 savesharedsvpv                 # U
 sv_2bool_flags                 # U
@@ -28,3 +65,7 @@ sv_cmp_locale_flags            # U
 sv_collxfrm_flags              # U
 sv_eq_flags                    # U
 sv_setpvs_mg                   # U
+sv_setref_pvs                  # U
+SvTRUE_nomg                    # U
+mro_package_moved              # F added by devel/scanprov
+Perl_populate_isa              # F added by devel/scanprov
index 795fd1c..50f21fa 100644 (file)
@@ -1,15 +1,6 @@
 5.013007
-HvENAME                        # U
-OP_CLASS                       # U
-SvPV_nomg_nolen                # U
-XopFLAGS                       # E
 amagic_deref_call              # U
 bytes_cmp_utf8                 # U
-cop_hints_2hv                  # A
-cop_hints_fetch_pv             # U
-cop_hints_fetch_pvn            # U
-cop_hints_fetch_pvs            # U
-cop_hints_fetch_sv             # U
 cophh_2hv                      # E
 cophh_copy                     # E
 cophh_delete_pv                # E
@@ -21,11 +12,48 @@ cophh_fetch_pvn                # E
 cophh_fetch_pvs                # E
 cophh_fetch_sv                 # E
 cophh_free                     # E
+COPHH_KEY_UTF8                 # E
+cophh_new_empty                # E
 cophh_store_pv                 # E
 cophh_store_pvn                # E
 cophh_store_pvs                # E
 cophh_store_sv                 # E
+cop_hints_2hv                  # A
+cop_hints_fetch_pv             # U
+cop_hints_fetch_pvn            # U
+cop_hints_fetch_pvs            # U
+cop_hints_fetch_sv             # U
 custom_op_register             # E
-custom_op_xop                  # E
+dirp_dup                       # A
+HvENAME                        # U
 newFOROP                       # A
 newWHILEOP                     # A
+OP_CLASS                       # U
+op_lvalue                      # U
+op_scope                       # U
+parse_barestmt                 # U
+parse_block                    # U
+parse_label                    # U
+PARSE_OPTIONAL                 # E
+PL_phase                       # E
+SvPV_nomg_nolen                # U
+XopFLAGS                       # E
+XopDISABLE                     # M added by devel/scanprov
+XopENABLE                      # M added by devel/scanprov
+XopENTRY                       # M added by devel/scanprov
+XopENTRY_set                   # M added by devel/scanprov
+cvstash_set                    # F added by devel/scanprov
+hv_ename_add                   # F added by devel/scanprov
+hv_ename_delete                # F added by devel/scanprov
+mro_clean_isarev               # F added by devel/scanprov
+mro_gather_and_rename          # F added by devel/scanprov
+Perl_custom_op_xop             # F added by devel/scanprov
+refcounted_he_chain_2hv        # F added by devel/scanprov
+refcounted_he_fetch_pv         # F added by devel/scanprov
+refcounted_he_fetch_pvn        # F added by devel/scanprov
+refcounted_he_fetch_sv         # F added by devel/scanprov
+refcounted_he_free             # F added by devel/scanprov
+refcounted_he_inc              # F added by devel/scanprov
+refcounted_he_new_pv           # F added by devel/scanprov
+refcounted_he_new_pvn          # F added by devel/scanprov
+refcounted_he_new_sv           # F added by devel/scanprov
index e4c882b..25fbf7a 100644 (file)
@@ -1,4 +1,9 @@
 5.013008
 foldEQ_latin1                  # U
 mg_findext                     # U
+parse_arithexpr                # U
+parse_fullexpr                 # U
+parse_listexpr                 # U
+parse_termexpr                 # U
 sv_unmagicext                  # U
+Perl_hv_undef_flags            # F added by devel/scanprov
index 51160ae..c969c70 100644 (file)
@@ -1 +1,14 @@
 5.013009
+PERL_PV_ESCAPE_NONASCII        # E
+UTF8_DISALLOW_ILLEGAL_INTERCHANGE # E
+UTF8_DISALLOW_NONCHAR          # E
+UTF8_DISALLOW_SUPER            # E
+UTF8_DISALLOW_SURROGATE        # E
+UTF8_WARN_ILLEGAL_INTERCHANGE  # E
+UTF8_WARN_NONCHAR              # E
+UTF8_WARN_SUPER                # E
+UTF8_WARN_SURROGATE            # E
+check_utf8_print               # F added by devel/scanprov
+curse                          # F added by devel/scanprov
+report_wrongway_fh             # F added by devel/scanprov
+tied_method                    # F added by devel/scanprov
index 467ea46..071409b 100644 (file)
@@ -1 +1,13 @@
 5.013010
+WARN_NONCHAR                   # E
+WARN_NON_UNICODE               # E
+WARN_SURROGATE                 # E
+_append_range_to_invlist       # F added by devel/scanprov
+foldEQ_utf8_flags              # F added by devel/scanprov
+invlist_array                  # F added by devel/scanprov
+invlist_extend                 # F added by devel/scanprov
+invlist_max                    # F added by devel/scanprov
+invlist_set_len                # F added by devel/scanprov
+invlist_trim                   # F added by devel/scanprov
+_new_invlist                   # F added by devel/scanprov
+regcurly                       # F added by devel/scanprov
index cfe7822..89a626a 100644 (file)
@@ -1 +1,3 @@
 5.014000
+_to_uni_fold_flags             # F added by devel/scanprov
+_to_utf8_fold_flags            # F added by devel/scanprov
index d8c6546..5970cd4 100644 (file)
@@ -1 +1,3 @@
 5.015000
+hv_free_ent_ret                # F added by devel/scanprov
+Perl_hfree_next_entry          # F added by devel/scanprov
index c886418..75f98a0 100644 (file)
@@ -1,4 +1,6 @@
 5.015001
+cop_fetch_label                # U
+cop_store_label                # U
 pad_add_name_pv                # U
 pad_add_name_pvn               # U
 pad_add_name_pvs               # U
@@ -7,3 +9,16 @@ pad_findmy_pv                  # U
 pad_findmy_pvn                 # U
 pad_findmy_pvs                 # U
 pad_findmy_sv                  # U
+do_ncmp                        # F added by devel/scanprov
+get_invlist_iter_addr          # F added by devel/scanprov
+_invlist_array_init            # F added by devel/scanprov
+invlist_clone                  # F added by devel/scanprov
+_invlist_intersection          # F added by devel/scanprov
+_invlist_invert                # F added by devel/scanprov
+invlist_iterinit               # F added by devel/scanprov
+invlist_iternext               # F added by devel/scanprov
+_invlist_subtract              # F added by devel/scanprov
+_invlist_union                 # F added by devel/scanprov
+pad_alloc_name                 # F added by devel/scanprov
+Perl_op_lvalue_flags           # F added by devel/scanprov
+Perl_was_lvalue_sub            # F added by devel/scanprov
index 0674128..07dae39 100644 (file)
@@ -1 +1,7 @@
 5.015002
+XS_EXTERNAL                    # M added by devel/scanprov
+XS_INTERNAL                    # M added by devel/scanprov
+core_prototype                 # F added by devel/scanprov
+finalize_op                    # F added by devel/scanprov
+finalize_optree                # F added by devel/scanprov
+Perl_ck_entersub_args_core     # F added by devel/scanprov
index 7f33df7..c10cb56 100644 (file)
@@ -1 +1,6 @@
 5.015003
+GV_ADDMG                       # E
+coresub_op                     # F added by devel/scanprov
+inplace_aassign                # F added by devel/scanprov
+op_integerize                  # F added by devel/scanprov
+op_std_init                    # F added by devel/scanprov
index d680103..a8853a3 100644 (file)
@@ -1,11 +1,10 @@
 5.015004
-HvENAMELEN                     # U
-HvENAMEUTF8                    # U
-HvNAMELEN                      # U
-HvNAMEUTF8                     # U
 gv_autoload_pv                 # U
 gv_autoload_pvn                # U
 gv_autoload_sv                 # U
+gv_fetchmethod_pv_flags        # U
+gv_fetchmethod_pvn_flags       # U
+gv_fetchmethod_sv_flags        # U
 gv_fetchmeth_pv                # U
 gv_fetchmeth_pv_autoload       # U
 gv_fetchmeth_pvn               # U
@@ -15,6 +14,11 @@ gv_fetchmeth_sv_autoload       # U
 gv_init_pv                     # U
 gv_init_pvn                    # U
 gv_init_sv                     # U
+HvENAMELEN                     # U
+HvENAMEUTF8                    # U
+HvNAMELEN                      # U
+HvNAMEUTF8                     # U
+isASCII_L1                     # U
 newGVgen_flags                 # U
 sv_derived_from_pv             # U
 sv_derived_from_pvn            # U
@@ -26,4 +30,7 @@ sv_ref                         # U
 whichsig_pv                    # U
 whichsig_pvn                   # U
 whichsig_sv                    # U
-WIDEST_UTYPE                   # added by devel/scanprov
+WIDEST_UTYPE                   # E
+cv_ckproto_len_flags           # F added by devel/scanprov
+gv_init_svtype                 # F added by devel/scanprov
+sv_sethek                      # F added by devel/scanprov
index 1908a93..2c52f9b 100644 (file)
@@ -1 +1,4 @@
 5.015005
+_to_fold_latin1                # F added by devel/scanprov
+to_lower_latin1                # F added by devel/scanprov
+_to_upper_title_latin1         # F added by devel/scanprov
index 4fb3c7c..81b9284 100644 (file)
@@ -1,2 +1,11 @@
 5.015006
 newCONSTSUB_flags              # A
+check_locale_boundary_crossing # F added by devel/scanprov
+mayberelocate                  # F added by devel/scanprov
+minus_v                        # F added by devel/scanprov
+newXS_len_flags                # F added by devel/scanprov
+report_redefined_cv            # F added by devel/scanprov
+_to_utf8_lower_flags           # F added by devel/scanprov
+_to_utf8_title_flags           # F added by devel/scanprov
+_to_utf8_upper_flags           # F added by devel/scanprov
+translate_substr_offsets       # F added by devel/scanprov
index ce90789..b02b431 100644 (file)
@@ -1,8 +1 @@
 5.015007
-toLOWER_utf8                   # U
-toTITLE_utf8                   # U
-toUPPER_utf8                   # U
-to_utf8_fold                   # U
-to_utf8_lower                  # U
-to_utf8_title                  # U
-to_utf8_upper                  # U
index 14c6403..5687046 100644 (file)
@@ -1,3 +1,8 @@
 5.015008
+isASCII_LC                     # U
 is_utf8_char_buf               # U
 wrap_op_checker                # U
+amagic_is_enabled              # F added by devel/scanprov
+_invlist_intersection_maybe_complement_2nd # F added by devel/scanprov
+_invlist_union_maybe_complement_2nd # F added by devel/scanprov
+_new_invlist_C_array           # F added by devel/scanprov
index 12e4d6d..26adad0 100644 (file)
@@ -1,2 +1,5 @@
 5.015009
 utf8_to_uvchr_buf              # U
+utf8_to_uvuni_buf              # F added by devel/scanprov
+valid_utf8_to_uvchr            # F added by devel/scanprov
+valid_utf8_to_uvuni            # F added by devel/scanprov
index 3bd46b7..01207b0 100644 (file)
@@ -1 +1,9 @@
 5.016000
+CopLABEL_len                   # U
+CopLABEL_len_flags             # U
+_add_range_to_invlist          # F added by devel/scanprov
+bad_type_pv                    # F added by devel/scanprov
+too_few_arguments_pv           # F added by devel/scanprov
+too_many_arguments_pv          # F added by devel/scanprov
+yyerror_pv                     # F added by devel/scanprov
+yyerror_pvn                    # F added by devel/scanprov
index 6c99943..1336444 100644 (file)
@@ -1 +1,5 @@
 5.017001
+alloccopstash                  # U
+current_re_engine              # F added by devel/scanprov
+newSTUB                        # F added by devel/scanprov
+re_op_compile                  # F added by devel/scanprov
index e8638dc..960991e 100644 (file)
@@ -2,3 +2,12 @@
 sv_copypv_flags                # U
 sv_copypv_nomg                 # U
 sv_vcatpvfn_flags              # U
+cv_forget_slab                 # F added by devel/scanprov
+find_runcv_where               # F added by devel/scanprov
+grok_bslash_x                  # F added by devel/scanprov
+invlist_highest                # F added by devel/scanprov
+magic_cleararylen_p            # F added by devel/scanprov
+opslab_force_free              # F added by devel/scanprov
+opslab_free                    # F added by devel/scanprov
+opslab_free_nopad              # F added by devel/scanprov
+Slab_to_ro                     # F added by devel/scanprov
index 5022764..81e5077 100644 (file)
@@ -1 +1,7 @@
 5.017003
+compute_EXACTish               # F added by devel/scanprov
+grok_bslash_N                  # F added by devel/scanprov
+init_constants                 # F added by devel/scanprov
+_invlist_contains_cp           # F added by devel/scanprov
+_invlist_search                # F added by devel/scanprov
+op_unscope                     # F added by devel/scanprov
index 0202125..be63ed3 100644 (file)
@@ -1,5 +1,30 @@
 5.017004
-PL_comppad_name                # E
-PadlistREFCNT                  # U
+GV_SUPER                       # E
 newMYSUB                       # E (Perl_newMYSUB)
 newSVpadname                   # E
+PadARRAY                       # U
+PadlistARRAY                   # U
+PadlistMAX                     # U
+PadlistNAMES                   # E
+PadlistNAMESARRAY              # E
+PadlistNAMESMAX                # U
+PadlistREFCNT                  # U
+PadMAX                         # U
+PadnameLEN                     # E
+PadnamelistARRAY               # E
+PadnamelistMAX                 # E
+PadnamePV                      # E
+PadnameSV                      # E
+PadnameUTF8                    # E
+PL_comppad_name                # E
+WARN_EXPERIMENTAL              # E
+sv_len_utf8_nomg               # M added by devel/scanprov
+av_extend_guts                 # F added by devel/scanprov
+cv_clone_into                  # F added by devel/scanprov
+force_ident_maybe_lex          # F added by devel/scanprov
+get_invlist_previous_index_addr # F added by devel/scanprov
+_invlist_len                   # F added by devel/scanprov
+invlist_previous_index         # F added by devel/scanprov
+invlist_set_previous_index     # F added by devel/scanprov
+padlist_store                  # F added by devel/scanprov
+pending_ident                  # F added by devel/scanprov
index 31dfb1c..17b0d1f 100644 (file)
@@ -1 +1,4 @@
 5.017005
+sv_mortalcopy_flags            # U
+WARN_EXPERIMENTAL__LEXICAL_SUBS # E
+sv_resetpvn                    # F added by devel/scanprov
index 0bb2486..896dabc 100644 (file)
@@ -1,2 +1,7 @@
 5.017006
+croak_memory_wrap              # U
 READ_XDIGIT                    # U
+croak_no_mem                   # F added by devel/scanprov
+get_and_check_backslash_N_name # F added by devel/scanprov
+parser_free_nexttoke_ops       # F added by devel/scanprov
+win32_croak_not_implemented    # F added by devel/scanprov
index 6d97dff..1e45834 100644 (file)
@@ -1,2 +1,13 @@
 5.017007
+isALNUMC_LC_uvchr              # U
+isASCII_LC_uvchr               # U
+isBLANK_LC_uvchr               # U
+isPSXSPC_LC_uvchr              # U
+isWORDCHAR_LC                  # U
+isWORDCHAR_LC_uvchr            # U
+isXDIGIT_LC                    # U
+isXDIGIT_LC_uvchr              # U
 SvREFCNT_dec_NN                # U
+forget_pmop                    # F added by devel/scanprov
+isFOO_lc                       # F added by devel/scanprov
+_is_uni_perl_idstart           # F added by devel/scanprov
index de67457..1f573e9 100644 (file)
@@ -1,3 +1,18 @@
 5.017008
 isALPHANUMERIC                 # U
+isALPHANUMERIC_A               # U
+isALPHANUMERIC_L1              # U
+isALPHANUMERIC_LC              # U
+isALPHANUMERIC_LC_uvchr        # U
 isIDCONT                       # U
+isIDCONT_A                     # U
+isIDCONT_L1                    # U
+isIDCONT_LC                    # U
+isIDCONT_LC_uvchr              # U
+WARN_EXPERIMENTAL__REGEX_SETS  # E
+croak_popstack                 # F added by devel/scanprov
+invlist_is_iterating           # F added by devel/scanprov
+invlist_iterfinish             # F added by devel/scanprov
+isFOO_utf8_lc                  # F added by devel/scanprov
+_is_uni_FOO                    # F added by devel/scanprov
+_is_uni_perl_idcont            # F added by devel/scanprov
index fd72827..8af1a5f 100644 (file)
@@ -1,3 +1,5 @@
 5.017009
 av_tindex                      # U
 av_top_index                   # U
+handle_regex_sets              # F added by devel/scanprov
+parse_lparen_question_flags    # F added by devel/scanprov
index fed2762..5b3585c 100644 (file)
@@ -1 +1,3 @@
 5.017010
+parse_ident                    # F added by devel/scanprov
+ptr_hash                       # F added by devel/scanprov
index 803ad9a..0894b3f 100644 (file)
@@ -1,6 +1,7 @@
 5.019001
-re_intuit_start                # A
 toFOLD                         # U
-toFOLD_utf8                    # U
 toLOWER_L1                     # U
 toTITLE                        # U
+UTF8f                          # E
+find_lexical_cv                # F added by devel/scanprov
+path_is_searchable             # F added by devel/scanprov
index 5af71fb..63829e9 100644 (file)
@@ -1,2 +1,12 @@
 5.019002
-SVt_INVLIST                    # E
+G_METHOD_NAMED                 # E
+UTF8fARG                       # U
+bad_type_gv                    # F added by devel/scanprov
+defelem_target                 # F added by devel/scanprov
+get_invlist_offset_addr        # F added by devel/scanprov
+mg_find_mglob                  # F added by devel/scanprov
+regdump_intflags               # F added by devel/scanprov
+save_magic_flags               # F added by devel/scanprov
+skipspace_flags                # F added by devel/scanprov
+sv_magicext_mglob              # F added by devel/scanprov
+validate_proto                 # F added by devel/scanprov
index 488ef60..5bcd299 100644 (file)
@@ -1,3 +1,7 @@
 5.019003
-croak_memory_wrap              # U (Perl_croak_memory_wrap)
+PERL_EXIT_ABORT                # E
+PERL_EXIT_WARN                 # E
 sv_pos_b2u_flags               # U
+adjust_size_and_find_bucket    # F added by devel/scanprov
+cv_const_sv_or_av              # F added by devel/scanprov
+_invlist_dump                  # F added by devel/scanprov
index a24caa7..378be8e 100644 (file)
@@ -1,3 +1,21 @@
 5.019004
+IS_SAFE_SYSCALL                # U
 is_safe_syscall                # U
-uvoffuni_to_utf8_flags         # U
+LATIN1_TO_NATIVE               # U
+NATIVE_TO_LATIN1               # U
+UVCHR_IS_INVARIANT             # U
+WARN_SYSCALLS                  # E
+append_utf8_from_native_byte   # F added by devel/scanprov
+ASCII_TO_NEED                  # F added by devel/scanprov
+find_default_stash             # F added by devel/scanprov
+gv_is_in_main                  # F added by devel/scanprov
+gv_magicalize                  # F added by devel/scanprov
+maybe_multimagic_gv            # F added by devel/scanprov
+NATIVE_TO_NEED                 # F added by devel/scanprov
+newSVavdefelem                 # F added by devel/scanprov
+parse_gv_stash_name            # F added by devel/scanprov
+Perl_drand48_init_r            # F added by devel/scanprov
+Perl_drand48_r                 # F added by devel/scanprov
+save_strlen                    # F added by devel/scanprov
+sv_or_pv_pos_u2b               # F added by devel/scanprov
+uvuni_to_utf8                  # F added by devel/scanprov
index 69dcd69..f9b4194 100644 (file)
@@ -1 +1,18 @@
 5.019005
+WARN_EXPERIMENTAL__POSTDEREF   # E
+get_ANYOF_cp_list_for_ssc      # F added by devel/scanprov
+move_proto_attr                # F added by devel/scanprov
+populate_ANYOF_from_invlist    # F added by devel/scanprov
+set_ANYOF_arg                  # F added by devel/scanprov
+ssc_add_range                  # F added by devel/scanprov
+ssc_and                        # F added by devel/scanprov
+ssc_anything                   # F added by devel/scanprov
+ssc_clear_locale               # F added by devel/scanprov
+ssc_cp_and                     # F added by devel/scanprov
+ssc_finalize                   # F added by devel/scanprov
+ssc_init                       # F added by devel/scanprov
+ssc_intersection               # F added by devel/scanprov
+ssc_is_anything                # F added by devel/scanprov
+ssc_is_cp_posixl_init          # F added by devel/scanprov
+ssc_or                         # F added by devel/scanprov
+ssc_union                      # F added by devel/scanprov
index f14fb0c..176400d 100644 (file)
@@ -1 +1,5 @@
 5.019006
+XopENTRYCUSTOM                 # M added by devel/scanprov
+custom_op_get_field            # F added by devel/scanprov
+gv_override                    # F added by devel/scanprov
+set_caret_X                    # F added by devel/scanprov
index c34055e..af1c95d 100644 (file)
@@ -1,2 +1,4 @@
 5.019007
+__ASSERT_                      # E
 OP_TYPE_IS                     # U
+fixup_errno_string             # F added by devel/scanprov
index 8fe2e2f..8da5697 100644 (file)
@@ -1 +1,5 @@
 5.019008
+newATTRSUB_x                   # F added by devel/scanprov
+_setup_canned_invlist          # F added by devel/scanprov
+sv_buf_to_ro                   # F added by devel/scanprov
+sv_buf_to_rw                   # F added by devel/scanprov
index d6ccc50..6789972 100644 (file)
@@ -1 +1,4 @@
 5.019009
+WARN_EXPERIMENTAL__SIGNATURES  # E
+_get_regclass_nonbitmap_data   # F added by devel/scanprov
+put_range                      # F added by devel/scanprov
index 8bdae66..02e9173 100644 (file)
@@ -1,2 +1,7 @@
 5.019010
 OP_TYPE_IS_OR_WAS              # U
+do_open6                       # F added by devel/scanprov
+do_open_raw                    # F added by devel/scanprov
+hv_auxinit_internal            # F added by devel/scanprov
+openn_cleanup                  # F added by devel/scanprov
+openn_setup                    # F added by devel/scanprov
index 89e3849..af98005 100644 (file)
@@ -1,4 +1,15 @@
 5.021001
 isUTF8_CHAR                    # U
 markstack_grow                 # E (Perl_markstack_grow)
-PERL_UNUSED_RESULT             # added by devel/scanprov
+WARN_EXPERIMENTAL__WIN32_PERLIO # E
+PERL_UNUSED_RESULT             # M added by devel/scanprov
+add_above_Latin1_folds         # F added by devel/scanprov
+construct_ahocorasick_from_trie # F added by devel/scanprov
+dump_c_backtrace               # F added by devel/scanprov
+free_c_backtrace               # F added by devel/scanprov
+get_c_backtrace                # F added by devel/scanprov
+get_c_backtrace_dump           # F added by devel/scanprov
+_is_cur_LC_category_utf8       # F added by devel/scanprov
+_is_in_locale_category         # F added by devel/scanprov
+my_strerror                    # F added by devel/scanprov
+should_warn_nl                 # F added by devel/scanprov
index abe5ac1..ec97b0f 100644 (file)
@@ -1,3 +1,8 @@
 5.021002
 grok_number_flags              # U
 op_sibling_splice              # U
+PERL_SCAN_TRAILING             # E
+WARN_MISSING                   # E
+WARN_REDUNDANT                 # E
+not_incrementable              # F added by devel/scanprov
+sv_display                     # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5021003 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5021003
new file mode 100644 (file)
index 0000000..a0f459f
--- /dev/null
@@ -0,0 +1,2 @@
+5.021003
+clear_special_blocks           # F added by devel/scanprov
index 3a62526..05a1b65 100644 (file)
@@ -1,5 +1,14 @@
 5.021004
+CALL_CHECKER_REQUIRE_GV        # E
 cv_set_call_checker_flags      # U
 grok_infnan                    # U
 isinfnan                       # U
-sync_locale                    # U
+add_multi_match                # F added by devel/scanprov
+cntrl_to_mnemonic              # F added by devel/scanprov
+cv_undef_flags                 # F added by devel/scanprov
+gv_stashpvn_internal           # F added by devel/scanprov
+gv_stashsvpvn_cached           # F added by devel/scanprov
+Perl_cvgv_from_hek             # F added by devel/scanprov
+put_charclass_bitmap_innards   # F added by devel/scanprov
+put_code_point                 # F added by devel/scanprov
+quadmath_format_needed         # F added by devel/scanprov
index 2a02ad2..a427083 100644 (file)
@@ -1,4 +1,22 @@
 5.021005
 cv_name                        # A
+CV_NAME_NOTQUAL                # E
 newMETHOP                      # U
 newMETHOP_named                # U
+PERL_MAGIC_debugvar            # E
+PERL_MAGIC_lvref               # E
+SV_CATBYTES                    # E
+SV_CATUTF8                     # E
+WARN_EXPERIMENTAL__REFALIASING # E
+assignment_type                # F added by devel/scanprov
+gv_setref                      # F added by devel/scanprov
+isinfnansv                     # F added by devel/scanprov
+is_ssc_worth_it                # F added by devel/scanprov
+magic_getdebugvar              # F added by devel/scanprov
+magic_setdebugvar              # F added by devel/scanprov
+magic_setlvref                 # F added by devel/scanprov
+newMETHOP_internal             # F added by devel/scanprov
+op_relocate_sv                 # F added by devel/scanprov
+reg2Lanode                     # F added by devel/scanprov
+regnode_guts                   # F added by devel/scanprov
+tmps_grow_p                    # F added by devel/scanprov
index fbefd16..04ff79e 100644 (file)
@@ -1,3 +1,12 @@
 5.021006
+DOUBLEKIND                     # E
 newDEFSVOP                     # U
 op_convert_list                # U
+WARN_LOCALE                    # E
+newXS_deffile                  # F added by devel/scanprov
+noperl_die                     # F added by devel/scanprov
+PerlIO_restore_errno           # F added by devel/scanprov
+PerlIO_save_errno              # F added by devel/scanprov
+Perl_xs_handshake              # F added by devel/scanprov
+set_padlist                    # F added by devel/scanprov
+xs_boot_epilog                 # F added by devel/scanprov
index 43aef21..4a3d4d0 100644 (file)
@@ -1,6 +1,22 @@
 5.021007
-OpHAS_SIBLING                  # U
-OpSIBLING                      # U
-PadnameUTF8                    # E
 is_invariant_string            # U
+newPADNAMELIST                 # U
+newPADNAMEouter                # U
+newPADNAMEpvn                  # U
 newUNOP_AUX                    # E
+OpHAS_SIBLING                  # U
+OpSIBLING                      # U
+padnamelist_fetch              # U
+PadnamelistREFCNT              # U
+PadnamelistREFCNT_dec          # U
+padnamelist_store              # U
+PadnameREFCNT                  # U
+PadnameREFCNT_dec              # U
+PADNAMEt_OUTER                 # E
+gv_fetchmeth_internal          # F added by devel/scanprov
+opmethod_stash                 # F added by devel/scanprov
+pad_add_weakref                # F added by devel/scanprov
+padname_dup                    # F added by devel/scanprov
+padnamelist_dup                # F added by devel/scanprov
+Perl_padname_free              # F added by devel/scanprov
+Perl_padnamelist_free          # F added by devel/scanprov
index 06633ee..61387ed 100644 (file)
@@ -1 +1,5 @@
 5.021008
+sv_get_backrefs                # U
+WARN_EXPERIMENTAL__CONST_ATTR  # E
+WARN_EXPERIMENTAL__RE_STRICT   # E
+_warn_problematic_locale       # F added by devel/scanprov
index 7397722..979825e 100644 (file)
@@ -1 +1,11 @@
 5.021009
+WARN_EXPERIMENTAL__BITWISE     # E
+advance_one_SB                 # F added by devel/scanprov
+advance_one_WB                 # F added by devel/scanprov
+backup_one_SB                  # F added by devel/scanprov
+backup_one_WB                  # F added by devel/scanprov
+isGCB                          # F added by devel/scanprov
+isSB                           # F added by devel/scanprov
+isWB                           # F added by devel/scanprov
+multideref_stringify           # F added by devel/scanprov
+my_bytes_to_utf8               # F added by devel/scanprov
index 821a8fb..b86937f 100644 (file)
@@ -1,2 +1,8 @@
 5.021010
 DECLARATION_FOR_LC_NUMERIC_MANIPULATION # E
+RESTORE_LC_NUMERIC             # E
+STORE_LC_NUMERIC_FORCE_TO_UNDERLYING # E
+STORE_LC_NUMERIC_SET_TO_NEEDED # E
+grok_atoUV                     # F added by devel/scanprov
+regex_set_precedence           # F added by devel/scanprov
+sv_only_taint_gmagic           # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5022002 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5022002
new file mode 100644 (file)
index 0000000..5a429a1
--- /dev/null
@@ -0,0 +1 @@
+5.022002
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5022003 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5022003
new file mode 100644 (file)
index 0000000..ad46f70
--- /dev/null
@@ -0,0 +1 @@
+5.022003
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5022004 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5022004
new file mode 100644 (file)
index 0000000..3974ff3
--- /dev/null
@@ -0,0 +1 @@
+5.022004
index e461a32..50ed05a 100644 (file)
@@ -1 +1,8 @@
 5.023000
+DOUBLEINFBYTES                 # E
+DOUBLEMANTBITS                 # E
+DOUBLENANBYTES                 # E
+LONGDBLINFBYTES                # E
+LONGDBLMANTBITS                # E
+LONGDBLNANBYTES                # E
+NVMANTBITS                     # E
index 2060466..9d73a7f 100644 (file)
@@ -1 +1,5 @@
 5.023002
+UTF8_IS_NONCHAR                # U
+UTF8_IS_SUPER                  # A
+UTF8_IS_SURROGATE              # A
+UTF8_SKIP                      # U
index f6c5994..2945414 100644 (file)
@@ -1 +1,3 @@
 5.023006
+_invlistEQ                     # F added by devel/scanprov
+_to_utf8_case                  # F added by devel/scanprov
index fb7c553..08b6922 100644 (file)
@@ -1 +1,4 @@
 5.023007
+advance_one_LB                 # F added by devel/scanprov
+backup_one_LB                  # F added by devel/scanprov
+isLB                           # F added by devel/scanprov
index 91f6164..a5480fc 100644 (file)
@@ -1,2 +1,25 @@
 5.023008
 clear_defarray                 # U
+cx_popblock                    # U
+cx_popeval                     # U
+cx_popformat                   # U
+cx_poploop                     # U
+cx_popsub                      # U
+cx_popsub_args                 # U
+cx_popsub_common               # U
+cx_pushblock                   # U
+cx_pusheval                    # U
+cx_pushformat                  # U
+cx_pushloop_for                # U
+cx_pushloop_plain              # U
+cx_pushsub                     # U
+cx_topblock                    # U
+leave_adjust_stacks            # U
+savetmps                       # U
+doeval_compile                 # F added by devel/scanprov
+edit_distance                  # F added by devel/scanprov
+handle_named_backref           # F added by devel/scanprov
+handle_possible_posix          # F added by devel/scanprov
+invlist_contents               # F added by devel/scanprov
+put_charclass_bitmap_innards_common # F added by devel/scanprov
+put_charclass_bitmap_innards_invlist # F added by devel/scanprov
index 336b09a..cceca1d 100644 (file)
@@ -1,5 +1,31 @@
 5.023009
+isALPHANUMERIC_uvchr           # U
+isALPHA_uvchr                  # U
+isASCII_uvchr                  # U
+isBLANK_uvchr                  # U
+isCNTRL_uvchr                  # U
+isDIGIT_uvchr                  # U
+isGRAPH_uvchr                  # U
+isIDCONT_uvchr                 # U
+isIDFIRST_uvchr                # U
+isLOWER_uvchr                  # U
+isPRINT_uvchr                  # U
+isPSXSPC_uvchr                 # U
+isPUNCT_uvchr                  # U
+isSPACE_uvchr                  # U
+isUPPER_uvchr                  # U
+isWORDCHAR_uvchr               # U
+isXDIGIT_uvchr                 # U
 toFOLD_uvchr                   # U
 toLOWER_uvchr                  # U
 toTITLE_uvchr                  # U
 toUPPER_uvchr                  # U
+invlist_clear                  # F added by devel/scanprov
+invlist_replace_list_destroys_src # F added by devel/scanprov
+Perl_dtrace_probe_call         # F added by devel/scanprov
+Perl_dtrace_probe_load         # F added by devel/scanprov
+Perl_dtrace_probe_op           # F added by devel/scanprov
+Perl_dtrace_probe_phase        # F added by devel/scanprov
+re_exec_indentf                # F added by devel/scanprov
+re_indentf                     # F added by devel/scanprov
+re_printf                      # F added by devel/scanprov
index 32870f9..2445a65 100644 (file)
@@ -1,68 +1,4 @@
 5.024000
-BhkDISABLE                     # E
-BhkENABLE                      # E
-BhkENTRY_set                   # E
-MULTICALL                      # E
-PERL_SYS_TERM                  # E
-POP_MULTICALL                  # E
-PUSH_MULTICALL                 # E
-PadARRAY                       # E
-PadMAX                         # E
-PadlistARRAY                   # E
-PadlistMAX                     # E
-PadlistNAMES                   # E
-PadlistNAMESARRAY              # E
-PadlistNAMESMAX                # E
-PadnameLEN                     # E
-PadnamePV                      # E
-PadnameREFCNT                  # E
-PadnameREFCNT_dec              # E
-PadnameSV                      # E
-PadnamelistARRAY               # E
-PadnamelistMAX                 # E
-PadnamelistREFCNT              # E
-PadnamelistREFCNT_dec          # E
-RESTORE_LC_NUMERIC             # E
-STORE_LC_NUMERIC_FORCE_TO_UNDERLYING # E
-STORE_LC_NUMERIC_SET_TO_NEEDED # E
-XS_APIVERSION_BOOTCHECK        # E
-XS_EXTERNAL                    # E
-XS_INTERNAL                    # E
-XS_VERSION_BOOTCHECK           # E
-XopDISABLE                     # E
-XopENABLE                      # E
-XopENTRY                       # E
-XopENTRYCUSTOM                 # E
-XopENTRY_set                   # E
-cophh_new_empty                # E
-my_lstat                       # U (Perl_my_lstat)
-my_stat                        # U (Perl_my_stat)
-reentrant_free                 # U
-reentrant_init                 # U
-reentrant_retry                # U
-reentrant_size                 # U
-ref                            # U (Perl_ref)
-sv_magic_portable              # U
-sv_setref_pvs                  # A
-PERL_BCDVERSION                # added by devel/scanprov
-PERL_MAGIC_glob                # added by devel/scanprov
-PERL_MAGIC_mutex               # added by devel/scanprov
-PERL_MAGIC_overload            # added by devel/scanprov
-PERL_MAGIC_overload_elem       # added by devel/scanprov
-PL_bufend                      # added by devel/scanprov
-PL_bufptr                      # added by devel/scanprov
-PL_copline                     # added by devel/scanprov
-PL_error_count                 # added by devel/scanprov
-PL_expect                      # added by devel/scanprov
-PL_in_my                       # added by devel/scanprov
-PL_in_my_stash                 # added by devel/scanprov
-PL_lex_state                   # added by devel/scanprov
-PL_lex_stuff                   # added by devel/scanprov
-PL_linestr                     # added by devel/scanprov
-PL_rsfp                        # added by devel/scanprov
-PL_rsfp_filters                # added by devel/scanprov
-PL_tokenbuf                    # added by devel/scanprov
-WARN_ASSERTIONS                # added by devel/scanprov
-aTHXR                          # added by devel/scanprov
-aTHXR_                         # added by devel/scanprov
-dTHXR                          # added by devel/scanprov
+mem_log_alloc                  # F added by devel/scanprov
+mem_log_free                   # F added by devel/scanprov
+mem_log_realloc                # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5024001 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5024001
new file mode 100644 (file)
index 0000000..e5a806c
--- /dev/null
@@ -0,0 +1 @@
+5.024001
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5024002 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5024002
new file mode 100644 (file)
index 0000000..21641ad
--- /dev/null
@@ -0,0 +1 @@
+5.024002
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5024003 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5024003
new file mode 100644 (file)
index 0000000..e7ab7b6
--- /dev/null
@@ -0,0 +1 @@
+5.024003
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5024004 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5024004
new file mode 100644 (file)
index 0000000..590396c
--- /dev/null
@@ -0,0 +1 @@
+5.024004
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025000 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025000
new file mode 100644 (file)
index 0000000..da02bb4
--- /dev/null
@@ -0,0 +1 @@
+5.025000
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025001 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025001
new file mode 100644 (file)
index 0000000..398001b
--- /dev/null
@@ -0,0 +1,2 @@
+5.025001
+op_parent                      # U
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025002 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025002
new file mode 100644 (file)
index 0000000..03f1ade
--- /dev/null
@@ -0,0 +1,2 @@
+5.025002
+_mem_collxfrm                  # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025003 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025003
new file mode 100644 (file)
index 0000000..583bf3e
--- /dev/null
@@ -0,0 +1,4 @@
+5.025003
+hv_bucket_ratio                # U
+WARN_EXPERIMENTAL__DECLARED_REFS # E
+backup_one_GCB                 # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025004 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025004
new file mode 100644 (file)
index 0000000..c1165b8
--- /dev/null
@@ -0,0 +1,4 @@
+5.025004
+alloc_LOGOP                    # F added by devel/scanprov
+croak_caller                   # F added by devel/scanprov
+print_collxfrm_input_and_return # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025005 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025005
new file mode 100644 (file)
index 0000000..7b018ce
--- /dev/null
@@ -0,0 +1,13 @@
+5.025005
+BOM_UTF8                       # E
+isC9_STRICT_UTF8_CHAR          # U
+isSTRICT_UTF8_CHAR             # U
+isUTF8_CHAR_flags              # U
+is_utf8_invariant_string       # U
+is_utf8_valid_partial_char     # U
+is_utf8_valid_partial_char_flags # U
+REPLACEMENT_CHARACTER_UTF8     # E
+UTF8_DISALLOW_ILLEGAL_C9_INTERCHANGE # E
+UTF8_WARN_ILLEGAL_C9_INTERCHANGE # E
+delimcpy_no_escape             # F added by devel/scanprov
+is_utf8_cp_above_31_bits       # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025006 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025006
new file mode 100644 (file)
index 0000000..08c2bed
--- /dev/null
@@ -0,0 +1,22 @@
+5.025006
+is_c9strict_utf8_string        # U
+is_c9strict_utf8_string_loc    # U
+is_c9strict_utf8_string_loclen # U
+is_strict_utf8_string          # U
+is_strict_utf8_string_loc      # U
+is_strict_utf8_string_loclen   # U
+is_utf8_fixed_width_buf_flags  # U
+is_utf8_fixed_width_buf_loc_flags # U
+is_utf8_fixed_width_buf_loclen_flags # U
+is_utf8_string_flags           # U
+is_utf8_string_loc_flags       # U
+is_utf8_string_loclen_flags    # U
+SvPVCLEAR                      # U
+sv_setpv_bufsize               # U
+utf8n_to_uvchr_error           # U
+_byte_dump_string              # F added by devel/scanprov
+does_utf8_overflow             # F added by devel/scanprov
+dump_regex_sets_structures     # F added by devel/scanprov
+is_utf8_overlong_given_start_byte_ok # F added by devel/scanprov
+regcp_restore                  # F added by devel/scanprov
+unexpected_non_continuation_text # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025007 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025007
new file mode 100644 (file)
index 0000000..2176720
--- /dev/null
@@ -0,0 +1,6 @@
+5.025007
+CLEAR_ERRSV                    # E
+utf8_hop_back                  # U
+utf8_hop_forward               # U
+utf8_hop_safe                  # U
+isFF_OVERLONG                  # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025008 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025008
new file mode 100644 (file)
index 0000000..4ca9b58
--- /dev/null
@@ -0,0 +1,2 @@
+5.025008
+sv_set_undef                   # U
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025009 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025009
new file mode 100644 (file)
index 0000000..71d2ac4
--- /dev/null
@@ -0,0 +1,41 @@
+5.025009
+isALPHA_LC_utf8_safe           # U
+isALPHANUMERIC_LC_utf8_safe    # U
+isALPHANUMERIC_utf8_safe       # U
+isALPHA_utf8_safe              # U
+isASCII_LC_utf8_safe           # U
+isASCII_utf8_safe              # U
+isBLANK_LC_utf8_safe           # U
+isBLANK_utf8_safe              # U
+isCNTRL_LC_utf8_safe           # U
+isCNTRL_utf8_safe              # U
+isDIGIT_LC_utf8_safe           # U
+isDIGIT_utf8_safe              # U
+isGRAPH_LC_utf8_safe           # U
+isGRAPH_utf8_safe              # U
+isIDCONT_LC_utf8_safe          # U
+isIDCONT_utf8_safe             # U
+isIDFIRST_LC_utf8_safe         # U
+isIDFIRST_utf8_safe            # U
+isLOWER_LC_utf8_safe           # U
+isLOWER_utf8_safe              # U
+isPRINT_LC_utf8_safe           # U
+isPRINT_utf8_safe              # U
+isPSXSPC_LC_utf8_safe          # U
+isPSXSPC_utf8_safe             # U
+isPUNCT_LC_utf8_safe           # U
+isPUNCT_utf8_safe              # U
+isSPACE_LC_utf8_safe           # U
+isSPACE_utf8_safe              # U
+isUPPER_LC_utf8_safe           # U
+isUPPER_utf8_safe              # U
+isWORDCHAR_LC_utf8_safe        # U
+isWORDCHAR_utf8_safe           # U
+isXDIGIT_LC_utf8_safe          # U
+isXDIGIT_utf8_safe             # U
+toFOLD_utf8_safe               # U
+toLOWER_utf8_safe              # U
+toTITLE_utf8_safe              # U
+toUPPER_utf8_safe              # U
+_force_out_malformed_utf8_message # F added by devel/scanprov
+warn_on_first_deprecated_use   # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025010 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025010
new file mode 100644 (file)
index 0000000..5f2b615
--- /dev/null
@@ -0,0 +1,5 @@
+5.025010
+op_class                       # E
+abort_execution                # F added by devel/scanprov
+notify_parser_that_changed_to_utf8 # F added by devel/scanprov
+yyquit                         # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025011 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025011
new file mode 100644 (file)
index 0000000..ebbab42
--- /dev/null
@@ -0,0 +1 @@
+5.025011
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025012 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5025012
new file mode 100644 (file)
index 0000000..c1d9e63
--- /dev/null
@@ -0,0 +1 @@
+5.025012
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5026000 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5026000
new file mode 100644 (file)
index 0000000..00a1a0d
--- /dev/null
@@ -0,0 +1 @@
+5.026000
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5026001 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5026001
new file mode 100644 (file)
index 0000000..f6e8b9f
--- /dev/null
@@ -0,0 +1 @@
+5.026001
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5026002 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5026002
new file mode 100644 (file)
index 0000000..b3537a4
--- /dev/null
@@ -0,0 +1 @@
+5.026002
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5026003 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5026003
new file mode 100644 (file)
index 0000000..6b87dfd
--- /dev/null
@@ -0,0 +1 @@
+5.026003
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027000 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027000
new file mode 100644 (file)
index 0000000..fc48745
--- /dev/null
@@ -0,0 +1 @@
+5.027000
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027001 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027001
new file mode 100644 (file)
index 0000000..a952cd1
--- /dev/null
@@ -0,0 +1,4 @@
+5.027001
+bytes_from_utf8_loc            # U
+is_utf8_invariant_string_loc   # U
+new_regcurly                   # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027002 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027002
new file mode 100644 (file)
index 0000000..2ba94f4
--- /dev/null
@@ -0,0 +1,7 @@
+5.027002
+Perl_setlocale                 # U
+UTF8_DISALLOW_PERL_EXTENDED    # E
+UTF8_WARN_PERL_EXTENDED        # E
+hv_free_entries                # F added by devel/scanprov
+print_bytes_for_locale         # F added by devel/scanprov
+setlocale_debug_string         # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027003 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027003
new file mode 100644 (file)
index 0000000..b74f1c2
--- /dev/null
@@ -0,0 +1,5 @@
+5.027003
+cv_get_call_checker_flags      # U
+PL_sv_zero                     # E
+sv_string_from_errnum          # U
+hv_pushkv                      # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027004 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027004
new file mode 100644 (file)
index 0000000..e04e1f7
--- /dev/null
@@ -0,0 +1,6 @@
+5.027004
+mg_freeext                     # U
+Perl_langinfo                  # U
+sv_rvunweaken                  # U
+Perl_my_mkstemp                # F added by devel/scanprov
+save_to_buffer                 # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027005 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027005
new file mode 100644 (file)
index 0000000..e36214c
--- /dev/null
@@ -0,0 +1 @@
+5.027005
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027006 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027006
new file mode 100644 (file)
index 0000000..74a7516
--- /dev/null
@@ -0,0 +1,10 @@
+5.027006
+my_strnlen                     # U
+wrap_keyword_plugin            # U
+multiconcat_stringify          # F added by devel/scanprov
+my_memrchr                     # F added by devel/scanprov
+my_nl_langinfo                 # F added by devel/scanprov
+optimize_op                    # F added by devel/scanprov
+optimize_optree                # F added by devel/scanprov
+set_numeric_underlying         # F added by devel/scanprov
+win32_setlocale                # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027007 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027007
new file mode 100644 (file)
index 0000000..b194b05
--- /dev/null
@@ -0,0 +1,4 @@
+5.027007
+WARN_SHADOW                    # E
+is_utf8_non_invariant_string   # F added by devel/scanprov
+variant_under_utf8_count       # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027008 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027008
new file mode 100644 (file)
index 0000000..e4cea51
--- /dev/null
@@ -0,0 +1,33 @@
+5.027008
+cx_popgiven                    # U
+cx_popwhen                     # U
+cx_pushgiven                   # U
+cx_pushwhen                    # U
+newWHENOP                      # U
+WARN_EXPERIMENTAL__SCRIPT_RUN  # E
+category_name                  # F added by devel/scanprov
+destroy_matcher                # F added by devel/scanprov
+dopoptogivenfor                # F added by devel/scanprov
+dopoptowhen                    # F added by devel/scanprov
+do_smartmatch                  # F added by devel/scanprov
+isSCRIPT_RUN                   # F added by devel/scanprov
+looks_like_bool                # F added by devel/scanprov
+make_matcher                   # F added by devel/scanprov
+matcher_matches_sv             # F added by devel/scanprov
+newGIVWHENOP                   # F added by devel/scanprov
+PerlLIO_dup2_cloexec           # F added by devel/scanprov
+PerlLIO_dup_cloexec            # F added by devel/scanprov
+PerlLIO_open3_cloexec          # F added by devel/scanprov
+PerlLIO_open_cloexec           # F added by devel/scanprov
+Perl_my_mkostemp               # F added by devel/scanprov
+Perl_my_mkstemp_cloexec        # F added by devel/scanprov
+PerlProc_pipe_cloexec          # F added by devel/scanprov
+PerlSock_accept_cloexec        # F added by devel/scanprov
+PerlSock_socket_cloexec        # F added by devel/scanprov
+PerlSock_socketpair_cloexec    # F added by devel/scanprov
+ref_array_or_hash              # F added by devel/scanprov
+setfd_cloexec                  # F added by devel/scanprov
+setfd_cloexec_for_nonsysfd     # F added by devel/scanprov
+setfd_cloexec_or_inhexec_by_sysfdness # F added by devel/scanprov
+setfd_inhexec                  # F added by devel/scanprov
+setfd_inhexec_for_sysfd        # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027009 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027009
new file mode 100644 (file)
index 0000000..a321803
--- /dev/null
@@ -0,0 +1,20 @@
+5.027009
+PERL_MAGIC_nonelem             # E
+switch_to_global_locale        # U
+sync_locale                    # E (Perl_sync_locale)
+thread_locale_init             # U
+thread_locale_term             # U
+utf8n_to_uvchr_msgs            # U
+uvchr_to_utf8_flags_msgs       # U
+WARN_EXPERIMENTAL__ALPHA_ASSERTIONS # E
+av_nonelem                     # F added by devel/scanprov
+emulate_setlocale              # F added by devel/scanprov
+find_next_masked               # F added by devel/scanprov
+find_span_end                  # F added by devel/scanprov
+find_span_end_mask             # F added by devel/scanprov
+get_ANYOFM_contents            # F added by devel/scanprov
+magic_setnonelem               # F added by devel/scanprov
+new_msg_hv                     # F added by devel/scanprov
+restore_switched_locale        # F added by devel/scanprov
+switch_category_locale_to_template # F added by devel/scanprov
+uvoffuni_to_utf8_flags_msgs    # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027010 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027010
new file mode 100644 (file)
index 0000000..8f82fa2
--- /dev/null
@@ -0,0 +1,2 @@
+5.027010
+init_named_cv                  # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027011 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5027011
new file mode 100644 (file)
index 0000000..bc2d22a
--- /dev/null
@@ -0,0 +1,4 @@
+5.027011
+init_uniprops                  # F added by devel/scanprov
+_inverse_folds                 # F added by devel/scanprov
+parse_uniprop_string           # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5028000 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5028000
new file mode 100644 (file)
index 0000000..83f8de5
--- /dev/null
@@ -0,0 +1 @@
+5.028000
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5028001 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5028001
new file mode 100644 (file)
index 0000000..3a0bfa3
--- /dev/null
@@ -0,0 +1 @@
+5.028001
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5029000 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5029000
new file mode 100644 (file)
index 0000000..4b504bb
--- /dev/null
@@ -0,0 +1,2 @@
+5.029000
+my_atof3                       # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5029001 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5029001
new file mode 100644 (file)
index 0000000..5beea24
--- /dev/null
@@ -0,0 +1,2 @@
+5.029001
+_utf8n_to_uvchr_msgs_helper    # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5029002 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5029002
new file mode 100644 (file)
index 0000000..53a1395
--- /dev/null
@@ -0,0 +1,3 @@
+5.029002
+initialize_invlist_guts        # F added by devel/scanprov
+is_invlist                     # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5029003 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5029003
new file mode 100644 (file)
index 0000000..f426ffc
--- /dev/null
@@ -0,0 +1 @@
+5.029003
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5029004 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5029004
new file mode 100644 (file)
index 0000000..d1fa1e8
--- /dev/null
@@ -0,0 +1,3 @@
+5.029004
+change_engine_size             # F added by devel/scanprov
+set_regex_pv                   # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5029005 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5029005
new file mode 100644 (file)
index 0000000..5b26fa5
--- /dev/null
@@ -0,0 +1,2 @@
+5.029005
+output_posix_warnings          # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5029006 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5029006
new file mode 100644 (file)
index 0000000..7b374ce
--- /dev/null
@@ -0,0 +1,2 @@
+5.029006
+argvout_final                  # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5029007 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5029007
new file mode 100644 (file)
index 0000000..c5f295a
--- /dev/null
@@ -0,0 +1,2 @@
+5.029007
+foldEQ_latin1_s2_folded        # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5029008 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5029008
new file mode 100644 (file)
index 0000000..997168c
--- /dev/null
@@ -0,0 +1,6 @@
+5.029008
+handle_user_defined_property   # F added by devel/scanprov
+traverse_op_tree               # F added by devel/scanprov
+turkic_fc                      # F added by devel/scanprov
+turkic_lc                      # F added by devel/scanprov
+turkic_uc                      # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5029009 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5029009
new file mode 100644 (file)
index 0000000..71e1ea4
--- /dev/null
@@ -0,0 +1,9 @@
+5.029009
+newSVsv_flags                  # U
+newSVsv_nomg                   # U
+UTF8_SAFE_SKIP                 # U
+WARN_EXPERIMENTAL__PRIVATE_USE # E
+WARN_EXPERIMENTAL__UNIPROP_WILDCARDS # E
+WARN_EXPERIMENTAL__VLB         # E
+get_and_check_backslash_N_name_wrapper # F added by devel/scanprov
+Perl_dup_warnings              # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5029010 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5029010
new file mode 100644 (file)
index 0000000..0c02979
--- /dev/null
@@ -0,0 +1,3 @@
+5.029010
+my_strtod                      # U
+Strtod                         # U
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5030000 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5030000
new file mode 100644 (file)
index 0000000..2860a42
--- /dev/null
@@ -0,0 +1 @@
+5.030000
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5031001 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5031001
new file mode 100644 (file)
index 0000000..4d4fe30
--- /dev/null
@@ -0,0 +1,2 @@
+5.031001
+lossless_NV_to_IV              # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5031002 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5031002
new file mode 100644 (file)
index 0000000..7a56370
--- /dev/null
@@ -0,0 +1,3 @@
+5.031002
+G_RETHROW                      # E
+Perl_my_mkostemp_cloexec       # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5031003 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5031003
new file mode 100644 (file)
index 0000000..8f19afa
--- /dev/null
@@ -0,0 +1,7 @@
+5.031003
+isALNUM_A                      # U
+parse_subsignature             # U
+SANE_ERRSV                     # U
+STORE_LC_NUMERIC_SET_TO_NEEDED_IN # U
+WITH_LC_NUMERIC_SET_TO_NEEDED  # E
+WITH_LC_NUMERIC_SET_TO_NEEDED_IN # E
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5031004 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5031004
new file mode 100644 (file)
index 0000000..cd1085d
--- /dev/null
@@ -0,0 +1,22 @@
+5.031004
+sv_2pvbyte_flags               # U
+sv_2pvutf8_flags               # U
+SvAMAGIC_off                   # U
+SvAMAGIC_on                    # U
+SvPVbyte_nomg                  # U
+SvPVbyte_or_null               # U
+SvPVbyte_or_null_nomg          # U
+SvPVutf8_nomg                  # U
+SvPVutf8_or_null               # U
+SvPVutf8_or_null_nomg          # U
+sv_utf8_downgrade_flags        # U
+sv_utf8_downgrade_nomg         # U
+get_regex_charset_name         # F added by devel/scanprov
+is_utf8_char_helper            # F added by devel/scanprov
+PadnameIN_SCOPE                # F added by devel/scanprov
+Perl_POPMARK                   # F added by devel/scanprov
+Perl_ReANY                     # F added by devel/scanprov
+Perl_TOPMARK                   # F added by devel/scanprov
+to_uni_fold                    # F added by devel/scanprov
+utf8_to_uvchr_buf_helper       # F added by devel/scanprov
+variant_byte_number            # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5031005 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5031005
new file mode 100644 (file)
index 0000000..fc93346
--- /dev/null
@@ -0,0 +1,23 @@
+5.031005
+gimme_V                        # U
+isALPHANUMERIC_utf8            # A
+isALPHA_utf8                   # A
+isASCII_utf8                   # A
+isBLANK_utf8                   # A
+isCNTRL_utf8                   # A
+isDIGIT_utf8                   # A
+isGRAPH_utf8                   # A
+isIDCONT_utf8                  # A
+isIDFIRST_utf8                 # A
+isLOWER_utf8                   # A
+isPRINT_utf8                   # A
+isPSXSPC_utf8                  # A
+isPUNCT_utf8                   # A
+isSPACE_utf8                   # A
+isUPPER_utf8                   # A
+isWORDCHAR_utf8                # A
+isXDIGIT_utf8                  # A
+toFOLD_utf8                    # A
+toLOWER_utf8                   # A
+toTITLE_utf8                   # A
+toUPPER_utf8                   # A
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5031006 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5031006
new file mode 100644 (file)
index 0000000..231cc5c
--- /dev/null
@@ -0,0 +1,10 @@
+5.031006
+UTF8_CHK_SKIP                  # U
+do_trans_count_invmap          # F added by devel/scanprov
+do_trans_invmap                # F added by devel/scanprov
+invmap_dump                    # F added by devel/scanprov
+_is_utf8_FOO                   # F added by devel/scanprov
+_is_utf8_perl_idcont           # F added by devel/scanprov
+_is_utf8_perl_idstart          # F added by devel/scanprov
+make_exactf_invlist            # F added by devel/scanprov
+sv_derived_from_svpvn          # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5031007 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5031007
new file mode 100644 (file)
index 0000000..b0206dc
--- /dev/null
@@ -0,0 +1,13 @@
+5.031007
+csighandler                    # E (Perl_csighandler)
+csighandler1                   # U
+csighandler3                   # E
+perly_sighandler               # E
+sv_isa_sv                      # U
+WARN_EXPERIMENTAL__ISA         # E
+find_first_differing_byte_pos  # F added by devel/scanprov
+invlist_lowest                 # F added by devel/scanprov
+is_grapheme                    # F added by devel/scanprov
+quadmath_format_valid          # F added by devel/scanprov
+sighandler1                    # F added by devel/scanprov
+sighandler3                    # F added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5031008 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5031008
new file mode 100644 (file)
index 0000000..7424595
--- /dev/null
@@ -0,0 +1,4 @@
+5.031008
+memCHRs                        # U
+grok_bin_oct_hex               # F added by devel/scanprov
+output_non_portable            # F added by devel/scanprov
index 40c8069..4bb864f 100644 (file)
 : BEGIN{die "You meant to run regen/embed.pl"} # Stop early if fed to perl.
 :
-: This file is processed by regen/embed.pl and autodoc.pl
-: It is used to declare the interfaces to the functions defined by perl.  All
-: non-static functions must have entries here.  Static functions need not, but
-: there is benefit to declaring them here, as it generally handles the thread
-: context parameter invisibly, as well as making sure a PERL_ARGS_ASSERT_foo
-: macro is defined, which can save you debugging time.
+: WARNING:  The meanings of some flags have been changed as of v5.31.0
 :
-: Lines are of the form:
-:    flags|return_type|function_name|arg1|arg2|...|argN
+: This file is known to be processed by regen/embed.pl, autodoc.pl,
+: makedef.pl, Devel::PPPort, and porting/diag.t.
 :
-: A line may be continued on another by ending it with a backslash.
+: This file contains entries for various functions and macros defined by perl.
+: Each entry includes the name, parameters, and various attributes about it.
+: In most functions listed here, the name is a short name, and the function's
+: real name is the short one, prefixed by either 'Perl_' (for publicly visible
+: functions) or 'S_' (for internal-to-a-file static ones).  In many instances a
+: macro is defined that is the name in this file, and which expands to call the
+: real (full) name, with any appropriate thread context paramaters, thus hiding
+: that detail from the typical code.
+:
+: Most macros listed here are the complete full name.
+:
+: All non-static functions defined by perl need to be listed in this file.
+: embed.pl uses the entries here to construct:
+:   1) proto.h to declare to the compiler the function interfaces; and
+:   2) embed.h to create short name macros
+:
+: Static functions internal to a file need not appear here, but there is
+: benefit to declaring them here, as it generally handles the thread context
+: parameter invisibly, as well as making sure a PERL_ARGS_ASSERT_foo macro is
+: defined, which can save you debugging time.
+:
+: Lines in this file are of the form:
+:    flags|return_type|name|arg1|arg2|...|argN
+:
+: 'flags' is a string of single letters.  Most of the flags are meaningful only
+: to embed.pl; some only to autodoc.pl, and others only to makedef.pl.  The
+: comments here mostly don't include how Devel::PPPort or diag.t use them:
+:
+: A function taking no parameters will have no 'arg' elements.
+: A line may be continued onto the next by ending it with a backslash.
 : Leading and trailing whitespace will be ignored in each component.
 :
+: Most entries here have a macro created with the entry name.  This presents
+: name space collision potentials which haven't been well thought out, but are
+: now documented here.  In practice this has rarely been an issue.  At least,
+: with a macro, the XS author can #undef it, unlike a function.
+:
 : The default without flags is to declare a function for internal perl-core use
-: only, not visible to XS code nor to Perl extensions.  Use the A and E flags to
-: modify this.  Most non-static functions should have the 'p' flag to avoid
-: namespace clashes with programs that embed perl.
+: only.  The short name is visible only when the PERL_CORE symbol is defined.
+: On some platforms, such as Linux and Darwin, all non-static functions
+: are currently externally visible.  Because of this, and also for programs
+: that embed perl, most non-static functions should have the 'p' flag to avoid
+: namespace clashes.
+:
+: There are several advantages to using a macro instead of the full Perl_foo or
+: S_foo form: it hides the need to know if the called function requires a
+: thread context parameter or not, and the code using it is more readable
+: because of fewer parameters being visible.  And if there is some bug in it
+: that gets fixed in a later release, ppport.h can be changed to automatically
+: backport the fixed version to modules.  The only disadvantage khw can think
+: of is the namespace pollution one.
+:
+: Since we don't require a C compiler to support variadic macros (C99), the
+: macros can't be generated in such situations.
+:
+: WARNING: Any macro created in a header file is visible to XS code, unless
+: care is taken to wrap it within something like #ifdef PERL_CORE..#endif.
+: This has had to be done with things like MAX and MIN, but nearly everything
+: else has been created without regard to the namespace pollution problem.
+:
+: Here's what else you need to know about using this file with regards to name
+: space pollution:
+:
+: The A flag is used to make a function and its short name visible everywhere
+:           on all platforms.  This should be used to make it part of Perl's
+:           API contract with XS developers.  The documentation for these is
+:           usually placed in perlapi.  If no documentation exists, that fact
+:           is also noted in perlapi.
+:
+: The C flag is used instead for functions and their short names that need to
+:            be accessible everywhere, typically because they are called from a
+:            publicly available macro or inline function, but they are not for
+:            public use by themselves.  The documentation for these is placed
+:            in perlintern.  If no documentation exists, that fact is also
+:            noted in perlintern.
+:
+:            These really need the 'p' flag to avoid name space collisions.
+:
+:           Some of these have been constructed so that the wrapper macro
+:           names begin with an underscore to lessen the chances of a name
+:           collision.  However, this is contrary to the C standard, and those
+:           should be changed.
+:
+: The E flag is used instead for a function and its short name that is supposed
+:            to be used only in the core, and in extensions compiled with the
+:            PERL_EXT symbol defined.  Again, on some platforms, the function
+:            will be visible everywhere, so the 'p' flag is generally needed.
+:            Also note that an XS writer can always cheat and pretend to be an
+:            extension by #defining PERL_EXT.
+:
+: The X flag is similar to the C flag in that the function (whose entry better
+:           have the 'p' flag) is accessible everywhere on all platforms.
+:           However the short name macro that normally gets generated is
+:           suppressed outside the core.  (Except it is also visible in
+:           PERL_EXT extensions if the E flag is also specified.)  This flag
+:           is used for functions that are called from a public macro, the
+:           name of which isn't derived from the function name.  You'll have
+:           to write the macro yourself, and from within it, refer to the
+:           function in its full 'Perl_' form with any necessary thread
+:           context parameter.
+:
+: Scattered around the perl source are lines of the form:
+:
+:   =for apidoc name
+:
+: followed by pod for that function.  The purpose of these is to tell
+: autodoc.pl where the documentation is for a function listed in this file.  It
+: uses the prototype from here and the pod from there in generating the
+: documentation in perlapi or perlintern.  The entries in this file that have
+: corresponding '=for apidoc' entries should have the 'd' flag set in this
+: file.
+:
+: There are also lines of this form scattered around:
 :
-: flags are single letters with following meanings:
+:   =for apidoc flags|return_type|name|arg1|arg2|...|argN
 :
-:   A  Available fully everywhere (usually part of the public API):
+: and with the same meanings as the lines in this file.  These are for
+: documenting macros.  The 'name' in any such line must not be the same as any
+: in this file (i.e., no redundant definitions), and one of the flags must be
+: 'm', indicating it is a macro.  The lines following these are pod for the
+: respective macro.  Since these are macros, the arguments need not be legal C
+: parameters.  To indicate this to downstream software that inspects these
+: lines, there are a few conventions:
+:  type    should be the entire argument name if it names a type
+:  cast    should be the entire argument name if it is a cast
+:  SP      should be the entire argument name if it is the stack pointer SP
+:  block   should be the entire argument name if it is a C brace-enclosed block
 :
-:         add entry to the list of exported symbols (unless x or m);
-:         any doc entry goes in perlapi.pod rather than perlintern.pod.  If no
-:           documentation is furnished for this function, and M is also
-:           specified, the function is not listed as part of the public API.
-:           If M isn't specified, and no documentation is furnished, the
-:           function is listed in perlapi as existing and being undocumented
-:         makes '#define foo Perl_foo' scope not just for PERL_CORE/PERL_EXT
+: The letters above are exact.  For example, you have to have 't', 'y', 'p',
+: and 'e' literally.  Here is an example:
+:   =for apidoc Am|void|Newxc|void* ptr|int nitems|type|cast
 :
-:      If the function is only exported for use in a public
-:      macro, see X.
+: Additionally, an argument can be some word(s) enclosed in double quotes to
+: indicate that it has to be a string, instead of a const char * const, like this
+:   =for apidoc Ama|SV*|newSVpvs|"string"
 :
-:   a  Allocates memory a la malloc/calloc.  Also implies "R".
-:      This should only be on functions which returns 'empty' memory
-:      which has no other pointers to it, and which does not contain
-:      any pointers to other things. So for example realloc() can't be
-:      'a'.
+: If any argument or return value is not one of the above, and isn't a legal C
+: language one, the 'u' flag should be specified.
+:
+: Again, autodoc uses these lines to construct perlapi. 'return_type' in these
+: lines can be empty, unlike in this file.
+:
+: Devel::PPPort also looks at both this file and the '=for apidoc' lines.  In
+: part it is to construct lists of functions that are or are not backported.
+:
+: makedef.pl uses this file for constructing the export list which lists the
+: symbols that should be available on all platforms.
+:
+: porting/diag.t checks some things for consistency based on this file.
+:
+: The remainder of these introductory comments detail all the possible flags:
+:
+:   A  Both long and short names are accessible fully everywhere (usually part
+:      of the public API).  If the function is not part of the public API,
+:      instead use C, E, or X.
+:
+:         add entry to the list of symbols available on all platforms
+:          unless e or m are also specified;
+:         any doc entry goes in perlapi.pod rather than perlintern.pod.  If
+:          there isn't a doc entry, autodoc.pl lists this in perlapi as
+:          existing and being undocumented; unless x is also specified, in
+:          which case it simply isn't listed.
+:         makes the short name defined for everywhere, not just for
+:          PERL_CORE/PERL_EXT
+:
+:   a  Allocates memory a la malloc/calloc.  Also implies "R".  This flag
+:      should only be on a function which returns 'empty' memory which has no
+:      other pointers to it, and which does not contain any pointers to other
+:      things. So for example realloc() can't be 'a'.
 :
 :         proto.h: add __attribute__malloc__
 :
 :      kept only to not have to change legacy applications that call them.  If
 :      there are no such legacy applications in a Perl installation for all
 :      functions flagged with this, the installation can run Configure with the
-:      -Accflags='-DNO_MATHOMS' parameter to not even compile them.  If there
-:      is a macro form of this function that provides equivalent functionality
-:      (using a different implementation), also specify the 'm' flag.  The 'b'
-:      functions are normally moved to mathoms.c, but if circumstances dictate
-:      otherwise, they can be anywhere, provided the whole function is wrapped
-:      with
-:       #ifndef NO_MATHOMS
-:       ...
-:       #endif
+:      -Accflags='-DNO_MATHOMS' parameter to not even compile them.
+:
+:      Sometimes the function has been subsumed by a more general one (say, by
+:      adding a flags parameter), and a macro exists with the original short
+:      name API, and it calls the new function, bypassing this one, and the
+:      original 'Perl_' form is being deprecated.  In this case also specify
+:      the 'M' flag.
+:
+:      Without the M flag, these functions should be deprecated, and it is an
+:      error to not also specify the 'D' flag.
+:
+:      The 'b' functions are normally moved to mathoms.c, but if circumstances
+:      dictate otherwise, they can be anywhere, provided the whole function is
+:      wrapped with
+:          #ifndef NO_MATHOMS
+:          ...
+:          #endif
 :
 :      Note that this flag no longer automatically adds a 'Perl_' prefix to the
 :      name.  Additionally specify 'p' to do that.
 :
-:      For functions, like wrappers, whose macro shortcut doesn't call the
-:      function, but which, for whatever reason, aren't considered legacy-only,
-:      use the 'o' flag
-:
 :      This flag effectively causes nothing to happen if the perl interpreter
-:      is compiled with -DNO_MATHOMS; otherwise these happen:
-:         add entry to the list of exported symbols;
+:      is compiled with -DNO_MATHOMS (which causes any functions with this flag
+:      to not be compiled); otherwise these happen:
+:         add entry to the list of symbols available on all platforms;
 :         create PERL_ARGS_ASSERT_foo;
-:        add embed.h entry (unless overridden by the 'm' flag)
+:        add embed.h entry (unless overridden by the 'M' or 'o' flags)
+:
+:   C  Intended for core use only.  This indicates to XS writers that they
+:      shouldn't be using this function.  Devel::PPPort informs them of this,
+:      for example.  Some functions have to be accessible everywhere even if
+:      they are not intended for public use.  An example is helper functions
+:      that are called from inline ones that are publicly available.
+:
+:         add entry to the list of symbols available on all platforms
+:          unless e or m are also specified;
+:         any doc entry goes in perlintern.pod rather than perlapi.pod.  If
+:          there isn't a doc entry, autodoc.pl lists this in perlintern as
+:          existing and being undocumented
+:         makes the short name defined for everywhere, not just for
+:          PERL_CORE/PERL_EXT
 :
 :   D  Function is deprecated:
 :
 :         proto.h: add __attribute__deprecated__
+:         autodoc.pl adds a note to this effect in the doc entry
 :
 :   d  Function has documentation (somewhere) in the source:
 :
-:         enables 'no docs for foo" warning in autodoc.pl
+:         enables 'no docs for foo" warning in autodoc.pl if the documentation
+:         isn't found.
 :
 :   E  Visible to extensions included in the Perl core:
 :
 :         in embed.h, change "#ifdef PERL_CORE"
 :         into               "#if defined(PERL_CORE) || defined(PERL_EXT)"
 :
-:      To be usable from dynamically loaded extensions, either:
-:        1) must be static to its containing file ("i" or "s" flag); or
+:       To be usable from dynamically loaded extensions, either:
+:        1) it must be static to its containing file ("i" or "s" flag); or
 :         2) be combined with the "X" flag.
 :
+:   e  Not exported
+:
+:         suppress entry in the list of symbols available on all platforms
+:
 :   f  Function takes a format string. If the function name =~ qr/strftime/
-:      then its assumed to take a strftime-style format string as 1st arg;
-:      otherwise it's assumed to be a printf style format string, varargs
+:      then it is assumed to take a strftime-style format string as the 1st
+:      arg; otherwise it's assumed to be a printf style format string, varargs
 :      (hence any entry that would otherwise go in embed.h is suppressed):
 :
 :         proto.h: add __attribute__format__ (or ...null_ok__)
 :
-:   i  Static inline: function in source code has a S_ prefix:
+:   G  Suppress empty PERL_ARGS_ASSERT_foo macro.  Normally such a macro is
+:      generated for all entries for functions 'foo' in this file.  If there is
+:      a pointer argument to 'foo', it needs to be declared in this file as
+:      either NN or NULLOK, and the function definition must call its
+:      corresponding PERL_ARGS_ASSERT_foo macro (a porting test ensures this)
+:      which asserts at runtime (under DEBUGGING builds) that NN arguments are
+:      not NULL.  If there aren't NN arguments, use of this macro is optional.
+:      Rarely, a function will define its own PERL_ARGS_ASSERT_foo macro, and
+:      in those cases, adding this flag to its entry in this file will suppress
+:      the normal one.  It is not possible to suppress the generated macro if
+:      it isn't optional, that is, if there is at least one NN argument.
 :
-:         proto.h: function is declared as S_foo rather than foo unless the 'p'
-:                 flag is also given in which case 'Perl_foo' is used,
-:                PERL_STATIC_INLINE is added to declaration;
-:         embed.h: "#define foo S_foo" or Perl_foo entries added
+:         proto.h: PERL_ARGS_ASSERT macro is not defined unless the function
+:                 has NN arguments
 :
-:   M  May change:
+:   h  Hide any documentation.  This is used when the documentation is atypical
+:      of the rest of perlapi and perlintern.  In other words the item is
+:      documented, but just not the standard way.  One reason would be if there
+:      are a bunch of macros which follow a common paradigm in their naming, so
+:      rather than having an entry for each slight variation, there is an
+:      overarchinge one.  It is also used when the documentation is in another
+:      pod, such as perlguts or warnings.h.  This flag is useful for downstream
+:      programs, such as Devel::PPPort.
 :
-:         any doc entry is marked that function may change.  Also used to
-:        suppress making a doc entry if it would just be a placeholder.
+:   i  inline static.  This is used for functions that the compiler is being
+:      requested to inline.  If the function is in a header file its
+:      definition will be visible (unless guarded by #if..#endif) to all
+:      XS code.  (A typical guard will be that it is being included in a
+:      particular C file(s) or in the perl core.)  Therefore, all
+:      non-guarded function should also have the 'p' flag specified to avoid
+:      polluting the XS code name space.  Otherwise an error is generated if
+:      the 'S' flag is not also specified.
 :
-:   m  Implemented as a macro:
+:         proto.h: function is declared as PERL_STATIC_INLINE
 :
-:         suppress proto.h entry unless 'b' also specified (actually, not
-:              suppressed, but commented out)
-:         suppress entry in the list of exported symbols
-:         suppress embed.h entry
+:   m  Implemented as a macro; there is no function associated with this name,
+:      and hence no long Perl_ or S_ name.  However, if the macro name itself
+:      begins with 'Perl_', autodoc.pl will show a thread context parameter
+:      unless the 'T' flag is specified.
 :
-:   n  Has no implicit interpreter/thread context argument:
+:         suppress proto.h entry (actually, not suppressed, but commented out)
+:         suppress entry in the list of exported symbols available on all platforms
+:         suppress embed.h entry, as the implementation should furnish the macro
 :
-:         suppress the pTHX part of "foo(pTHX...)" in proto.h;
-:         In the PERL_IMPLICIT_SYS branch of embed.h, generates
-:             "#define foo Perl_foo",      rather than
-:             "#define foo(a,b,c) Perl_foo(aTHX_ a,b,c)
+:   M  The implementation is furnishing its own macro instead of relying on the
+:      default short name macro that simply expands to call the real name
+:      function.  This is used if the parameters need to be cast from what the
+:      caller has, or if there is a macro that bypasses this function (whose
+:      long name is being retained for backward compatibility for those who
+:      call it with that name).  An example is when a new function is created
+:      with an extra parameter and a wrapper macro is added that has the old
+:      API, but calls the new one with the exta parameter set to a default.
+:
+:      This flag requires the 'p' flag to be specified, as there would be no
+:      need to do this if the function weren't publicly accessible before.
+:
+:      The entry is processed based on the other flags, but the:
+:         embed.h entry is suppressed
+:
+:   N  The name in the entry isn't strictly a name
+:
+:      Normally, the name of the function or macro must contain all \w
+:      characters, and a warning is raised otherwise.  This flag suppresses
+:      that warning, so that weird things can be documented
+:
+:   n  Has no arguments (used only in =for apidoc entries)
+:
+:      The macro (it can't be a function) is used without any parameters nor
+:      empty parentheses.
 :
 :   O  Has a perl_ compatibility macro.
 :
-:      The really OLD name for API funcs
+:      The really OLD name for API funcs.
+:
+:      autodoc.pl adds a note that the perl_ form of this function is
+:      deprecated.
 :
 :   o  Has no Perl_foo or S_foo compatibility macro:
 :
-:      This can be used when you define a macro with this entry's name that
-:      doesn't call the function specified by this entry.  This is typically
-:      done for a function that effectively just wraps another one, and where
-:      the macro form calls the underlying function directly.  For these, also
-:      specify the 'm' flag.  Legacy-only functions should instead use 'b'.
+:      This is used for whatever reason to force the function to be called
+:      with the long name.  Perhaps there is a varargs issue.  Use the 'M'
+:      flag instead for wrapper macros, and legacy-only functions should
+:      also use 'b'.
 :
 :         embed.h: suppress "#define foo Perl_foo"
 :
+:      autodoc.pl adds a note that this function must be explicitly called as
+:      Perl_$name with an aTHX_ parameter.
+:
 :   P  Pure function:
 :
 :      A pure function has no effects except the return value, and the return
 :
 :   R  Return value must not be ignored (also implied by 'a' and 'P' flags):
 :
+:      gcc has a bug (which they claim is a feature) in which casting the
+:       result of one of these to (void) doesn't silence the warning that the
+:      result is ignored.
+:
 :        proto.h: add __attribute__warn_unused_result__
 :
 :   r  Function never returns:
 :
 :        proto.h: add __attribute__noreturn__
 :
-:   s  Static function: function in source code has a S_ prefix:
+:   S  Static function: function in source code has a S_ prefix:
 :
 :         proto.h: function is declared as S_foo rather than foo,
 :                STATIC is added to declaration;
 :         embed.h: "#define foo S_foo" entries added
 :
-:   U  Suppress usage example in autogenerated documentation
+:   s  autodoc.pl adds a terminating semi-colon to the usage example in the
+:      documentation.
 :
-:         (currently no effect)
+:   T  Has no implicit interpreter/thread context argument:
+:
+:         suppress the pTHX part of "foo(pTHX...)" in proto.h;
+:         In the PERL_IMPLICIT_SYS branch of embed.h, generates
+:             "#define foo Perl_foo",      rather than
+:             "#define foo(a,b,c) Perl_foo(aTHX_ a,b,c)
+:
+:   u  The macro's (it has to be a macro) return value or parameters are
+:      unorthodox, and aren't in the list above of recognized weird ones.   For
+:      example, they aren't C parameters, or the macro expands to something
+:      that isn't a symbol.
+:
+:      For example, the expansion of STR_WITH_LEN is a comma separated pair of
+:      values, so would have this flag; or some macros take preprocessor
+:      tokens, so would have this flag.  This flag is an indication to
+:      downstream tools, such as Devel::PPPort, that this requires special
+:      handling.
+:
+:   U  autodoc.pl will not output a usage example
 :
 :   W  Add a _pDEPTH argument to function prototypes, and an _aDEPTH
 :      argument to the function calls. This means that under DEBUGGING
 :
 :   X  Explicitly exported:
 :
-:         add entry to the list of exported symbols, unless x or m
+:         add entry to the list of symbols available on all platforms, unless e
+:          or m
 :
 :      This is often used for private functions that are used by public
 :      macros.  In those cases the macros must use the long form of the
 :      name (Perl_blah(aTHX_ ...)).
 :
-:   x  Not exported
+:   x  Experimental, may change:
 :
-:         suppress entry in the list of exported symbols
+:         any doc entry is marked that it may change.  Also used to suppress
+:        making a perlapi doc entry if it would just be a placeholder.
 :
-: (see also L<perlguts/Internal Functions> for those flags.)
+: In this file, pointer parameters that must not be passed NULLs should be
+: prefixed with NN.
 :
-: Pointer parameters that must not be passed NULLs should be prefixed with NN.
+: And, pointer parameters that may be NULL should be prefixed with NULLOK.
+: This has no effect on output yet.  It's a notation for the maintainers to
+: know "I have defined whether NULL is OK or not" rather than having neither
+: NULL or NULLOK, which is ambiguous.
 :
-: Pointer parameters that may be NULL should be prefixed with NULLOK.  This has
-: no effect on output yet.  It's a notation for the maintainers to know "I have
-: defined whether NULL is OK or not" rather than having neither NULL or NULLOK,
-: which is ambiguous.
-:
-: Individual flags may be separated by whitespace.
+: Individual flags may be separated by non-tab whitespace.
 
 #if defined(PERL_IMPLICIT_SYS)
-Ano    |PerlInterpreter*|perl_alloc_using \
+ATo    |PerlInterpreter*|perl_alloc_using \
                                |NN struct IPerlMem *ipM \
                                |NN struct IPerlMem *ipMS \
                                |NN struct IPerlMem *ipMP \
@@ -216,18 +450,18 @@ Ano       |PerlInterpreter*|perl_alloc_using \
                                |NN struct IPerlSock *ipS \
                                |NN struct IPerlProc *ipP
 #endif
-Anod   |PerlInterpreter*       |perl_alloc
-Anod   |void   |perl_construct |NN PerlInterpreter *my_perl
-Anod   |int    |perl_destruct  |NN PerlInterpreter *my_perl
-Anod   |void   |perl_free      |NN PerlInterpreter *my_perl
-Anod   |int    |perl_run       |NN PerlInterpreter *my_perl
-Anod   |int    |perl_parse     |NN PerlInterpreter *my_perl|XSINIT_t xsinit \
+ATod   |PerlInterpreter*       |perl_alloc
+ATod   |void   |perl_construct |NN PerlInterpreter *my_perl
+ATod   |int    |perl_destruct  |NN PerlInterpreter *my_perl
+ATod   |void   |perl_free      |NN PerlInterpreter *my_perl
+ATod   |int    |perl_run       |NN PerlInterpreter *my_perl
+ATod   |int    |perl_parse     |NN PerlInterpreter *my_perl|XSINIT_t xsinit \
                                |int argc|NULLOK char** argv|NULLOK char** env
-AnpR   |bool   |doing_taint    |int argc|NULLOK char** argv|NULLOK char** env
+ATpR   |bool   |doing_taint    |int argc|NULLOK char** argv|NULLOK char** env
 #if defined(USE_ITHREADS)
-Anod   |PerlInterpreter*|perl_clone|NN PerlInterpreter *proto_perl|UV flags
+ATod   |PerlInterpreter*|perl_clone|NN PerlInterpreter *proto_perl|UV flags
 #  if defined(PERL_IMPLICIT_SYS)
-Ano    |PerlInterpreter*|perl_clone_using \
+ATo    |PerlInterpreter*|perl_clone_using \
                                |NN PerlInterpreter *proto_perl \
                                |UV flags \
                                |NN struct IPerlMem* ipM \
@@ -242,20 +476,20 @@ Ano       |PerlInterpreter*|perl_clone_using \
 #  endif
 #endif
 
-Aanop  |Malloc_t|malloc        |MEM_SIZE nbytes
-Aanop  |Malloc_t|calloc        |MEM_SIZE elements|MEM_SIZE size
-ARnop  |Malloc_t|realloc       |Malloc_t where|MEM_SIZE nbytes
-Anop   |Free_t |mfree          |Malloc_t where
+AaTophd        |Malloc_t|malloc        |MEM_SIZE nbytes
+AaTophd        |Malloc_t|calloc        |MEM_SIZE elements|MEM_SIZE size
+ARTophd        |Malloc_t|realloc       |Malloc_t where|MEM_SIZE nbytes
+ATop   |Free_t |mfree          |Malloc_t where
 #if defined(MYMALLOC)
-npR    |MEM_SIZE|malloced_size |NN void *p
-npR    |MEM_SIZE|malloc_good_size      |size_t nbytes
+TpR    |MEM_SIZE|malloced_size |NN void *p
+TpR    |MEM_SIZE|malloc_good_size      |size_t nbytes
 #endif
 #if defined(PERL_IN_MALLOC_C)
-sn     |int    |adjust_size_and_find_bucket    |NN size_t *nbytes_p
+ST     |int    |adjust_size_and_find_bucket    |NN size_t *nbytes_p
 #endif
 
-AnpR   |void*  |get_context
-Anp    |void   |set_context    |NN void *t
+ATpR   |void*  |get_context
+ATp    |void   |set_context    |NN void *t
 
 XEop   |bool   |try_amagic_bin |int method|int flags
 XEop   |bool   |try_amagic_un  |int method|int flags
@@ -270,7 +504,7 @@ Apd |OP*    |op_linklist    |NN OP *o
 Apd    |OP*    |op_prepend_elem|I32 optype|NULLOK OP* first|NULLOK OP* last
 : FIXME - this is only called by pp_chown. They should be merged.
 p      |I32    |apply          |I32 type|NN SV** mark|NN SV** sp
-ApM    |void   |apply_attrs_string|NN const char *stashpv|NN CV *cv|NN const char *attrstr|STRLEN len
+Apx    |void   |apply_attrs_string|NN const char *stashpv|NN CV *cv|NN const char *attrstr|STRLEN len
 Apd    |void   |av_clear       |NN AV *av
 Apd    |SV*    |av_delete      |NN AV *av|SSize_t key|I32 flags
 ApdR   |bool   |av_exists      |NN AV *av|SSize_t key
@@ -284,21 +518,21 @@ ApdR      |SSize_t|av_len         |NN AV *av
 ApdR   |AV*    |av_make        |SSize_t size|NN SV **strp
 p      |SV*    |av_nonelem     |NN AV *av|SSize_t ix
 Apd    |SV*    |av_pop         |NN AV *av
-ApdoxM |void   |av_create_and_push|NN AV **const avp|NN SV *const val
+Apdoex |void   |av_create_and_push|NN AV **const avp|NN SV *const val
 Apd    |void   |av_push        |NN AV *av|NN SV *val
 : Used in scope.c, and by Data::Alias
 EXp    |void   |av_reify       |NN AV *av
 ApdR   |SV*    |av_shift       |NN AV *av
 Apd    |SV**   |av_store       |NN AV *av|SSize_t key|NULLOK SV *val
-AidR   |SSize_t|av_top_index   |NN AV *av
-AmpdR  |SSize_t|av_tindex      |NN AV *av
+AidRp  |SSize_t|av_top_index   |NN AV *av
+AmdR   |SSize_t|av_tindex      |NN AV *av
 Apd    |void   |av_undef       |NN AV *av
-ApdoxM |SV**   |av_create_and_unshift_one|NN AV **const avp|NN SV *const val
+Apdoex |SV**   |av_create_and_unshift_one|NN AV **const avp|NN SV *const val
 Apd    |void   |av_unshift     |NN AV *av|SSize_t num
 Apo    |SV**   |av_arylen_p    |NN AV *av
 Apo    |IV*    |av_iter_p      |NN AV *av
 #if defined(PERL_IN_AV_C)
-s      |MAGIC* |get_aux_mg     |NN AV *av
+S      |MAGIC* |get_aux_mg     |NN AV *av
 #endif
 : Used in perly.y
 pR     |OP*    |bind_match     |I32 type|NN OP *left|NN OP *right
@@ -307,7 +541,7 @@ ApdR        |OP*    |block_end      |I32 floor|NULLOK OP* seq
 ApR    |U8     |block_gimme
 : Used in perly.y
 ApdR   |int    |block_start    |int full
-Aod  |void   |blockhook_register |NN BHK *hk
+Aodxp  |void   |blockhook_register |NN BHK *hk
 : Used in perl.c
 p      |void   |boot_core_UNIVERSAL
 : Used in perl.c
@@ -317,10 +551,10 @@ Apd       |const PERL_CONTEXT *   |caller_cx|I32 level \
                                |NULLOK const PERL_CONTEXT **dbcxp
 : Used in several source files
 pR     |bool   |cando          |Mode_t mode|bool effective|NN const Stat_t* statbufp
-ApRn   |U32    |cast_ulong     |NV f
-ApRn   |I32    |cast_i32       |NV f
-ApRn   |IV     |cast_iv        |NV f
-ApRn   |UV     |cast_uv        |NV f
+ApRT   |U32    |cast_ulong     |NV f
+ApRT   |I32    |cast_i32       |NV f
+ApRT   |IV     |cast_iv        |NV f
+ApRT   |UV     |cast_uv        |NV f
 #if !defined(HAS_TRUNCATE) && !defined(HAS_CHSIZE) && defined(F_FREESP)
 ApR    |I32    |my_chsize      |int fd|Off_t length
 #endif
@@ -329,60 +563,62 @@ p |const COP*|closest_cop |NN const COP *cop|NULLOK const OP *o \
 : Used in perly.y
 ApdR   |OP*    |op_convert_list        |I32 optype|I32 flags|NULLOK OP* o
 : Used in op.c and perl.c
-pM     |void   |create_eval_scope|NULLOK OP *retop|U32 flags
+px     |void   |create_eval_scope|NULLOK OP *retop|U32 flags
 Aprd   |void   |croak_sv       |NN SV *baseex
 : croak()'s first parm can be NULL.  Otherwise, mod_perl breaks.
 Afprd  |void   |croak          |NULLOK const char* pat|...
 Aprd   |void   |vcroak         |NULLOK const char* pat|NULLOK va_list* args
-Anprd  |void   |croak_no_modify
-Anprd  |void   |croak_xs_usage |NN const CV *const cv \
+ATprd  |void   |croak_no_modify
+ATprd  |void   |croak_xs_usage |NN const CV *const cv \
                                |NN const char *const params
-npr    |void   |croak_no_mem
-nprX   |void   |croak_popstack
-fnrp   |void   |croak_caller|NULLOK const char* pat|...
-fnprx  |void   |noperl_die|NN const char* pat|...
+Tpr    |void   |croak_no_mem
+TprX   |void   |croak_popstack
+fTrp   |void   |croak_caller|NULLOK const char* pat|...
+fTpre  |void   |noperl_die|NN const char* pat|...
 #if defined(WIN32)
-norx   |void   |win32_croak_not_implemented|NN const char * fname
+Tore   |void   |win32_croak_not_implemented|NN const char * fname
 #endif
 #if defined(PERL_IMPLICIT_CONTEXT)
-Afnrp  |void   |croak_nocontext|NULLOK const char* pat|...
-Afnrp  |OP*    |die_nocontext  |NULLOK const char* pat|...
-Afnp   |void   |deb_nocontext  |NN const char* pat|...
-Afnp   |char*  |form_nocontext |NN const char* pat|...
-Anp    |void   |load_module_nocontext|U32 flags|NN SV* name|NULLOK SV* ver|...
-Afnp   |SV*    |mess_nocontext |NN const char* pat|...
-Afnp   |void   |warn_nocontext |NN const char* pat|...
-Afnp   |void   |warner_nocontext|U32 err|NN const char* pat|...
-Afnp   |SV*    |newSVpvf_nocontext|NN const char *const pat|...
-Afnp   |void   |sv_catpvf_nocontext|NN SV *const sv|NN const char *const pat|...
-Afnp   |void   |sv_setpvf_nocontext|NN SV *const sv|NN const char *const pat|...
-Afnp   |void   |sv_catpvf_mg_nocontext|NN SV *const sv|NN const char *const pat|...
-Afnp   |void   |sv_setpvf_mg_nocontext|NN SV *const sv|NN const char *const pat|...
-Abfnp  |int    |fprintf_nocontext|NN PerlIO *stream|NN const char *format|...
-Abfnp  |int    |printf_nocontext|NN const char *format|...
+AfTrp  |void   |croak_nocontext|NULLOK const char* pat|...
+AfTrp  |OP*    |die_nocontext  |NULLOK const char* pat|...
+AfTp   |void   |deb_nocontext  |NN const char* pat|...
+AfTp   |char*  |form_nocontext |NN const char* pat|...
+ATp    |void   |load_module_nocontext|U32 flags|NN SV* name|NULLOK SV* ver|...
+AfTp   |SV*    |mess_nocontext |NN const char* pat|...
+AfTp   |void   |warn_nocontext |NN const char* pat|...
+AfTp   |void   |warner_nocontext|U32 err|NN const char* pat|...
+AfTp   |SV*    |newSVpvf_nocontext|NN const char *const pat|...
+AfTp   |void   |sv_catpvf_nocontext|NN SV *const sv|NN const char *const pat|...
+AfTp   |void   |sv_setpvf_nocontext|NN SV *const sv|NN const char *const pat|...
+AfTp   |void   |sv_catpvf_mg_nocontext|NN SV *const sv|NN const char *const pat|...
+AfTp   |void   |sv_setpvf_mg_nocontext|NN SV *const sv|NN const char *const pat|...
+AbfTpD |int    |fprintf_nocontext|NN PerlIO *stream|NN const char *format|...
+AbfTpD |int    |printf_nocontext|NN const char *format|...
 #endif
 : Used in pp.c
-p      |SV *   |core_prototype |NULLOK SV *sv|NN const char *name \
+pd     |SV *   |core_prototype |NULLOK SV *sv|NN const char *name \
                                |const int code|NULLOK int * const opnum
 : Used in gv.c
 p      |OP *   |coresub_op     |NN SV *const coreargssv|const int code \
                                |const int opnum
 : Used in sv.c
-EMXp   |void   |cv_ckproto_len_flags   |NN const CV* cv|NULLOK const GV* gv\
+ExXp   |void   |cv_ckproto_len_flags   |NN const CV* cv|NULLOK const GV* gv\
                                |NULLOK const char* p|const STRLEN len \
                                 |const U32 flags
 : Used in pp.c and pp_sys.c
 ApdR   |SV*    |gv_const_sv    |NN GV* gv
-ApdRn  |SV*    |cv_const_sv    |NULLOK const CV *const cv
-pRn    |SV*    |cv_const_sv_or_av|NULLOK const CV *const cv
+ApdRT  |SV*    |cv_const_sv    |NULLOK const CV *const cv
+pRT    |SV*    |cv_const_sv_or_av|NULLOK const CV *const cv
 Apd    |SV *   |cv_name        |NN CV *cv|NULLOK SV *sv|U32 flags
 Apd    |void   |cv_undef       |NN CV* cv
 p      |void   |cv_undef_flags |NN CV* cv|U32 flags
-p      |void   |cv_forget_slab |NULLOK CV *cv
+pd     |void   |cv_forget_slab |NULLOK CV *cv
 Ap     |void   |cx_dump        |NN PERL_CONTEXT* cx
-Ap     |SV*    |filter_add     |NULLOK filter_t funcp|NULLOK SV* datasv
+AiMp   |GV *   |CvGV           |NN CV *sv
+AiMTp  |I32 *  |CvDEPTH        |NN const CV * const sv
+Aphd   |SV*    |filter_add     |NULLOK filter_t funcp|NULLOK SV* datasv
 Ap     |void   |filter_del     |NN filter_t funcp
-ApR    |I32    |filter_read    |int idx|NN SV *buf_sv|int maxlen
+ApRhd  |I32    |filter_read    |int idx|NN SV *buf_sv|int maxlen
 ApPR   |char** |get_op_descs
 ApPR   |char** |get_op_names
 : FIXME discussion on p5p
@@ -401,31 +637,31 @@ Ap        |I32    |debop          |NN const OP* o
 Ap     |I32    |debstack
 Ap     |I32    |debstackptrs
 pR     |SV *   |defelem_target |NN SV *sv|NULLOK MAGIC *mg
-Anp    |char*  |delimcpy       |NN char* to|NN const char* toend|NN const char* from \
+ATp    |char*  |delimcpy       |NN char* to|NN const char* toend|NN const char* from \
                                |NN const char* fromend|int delim|NN I32* retlen
-np     |char*  |delimcpy_no_escape|NN char* to|NN const char* toend \
+Tp     |char*  |delimcpy_no_escape|NN char* to|NN const char* toend \
                                   |NN const char* from \
                                   |NN const char* fromend|int delim \
                                   |NN I32* retlen
 : Used in op.c, perl.c
-pM     |void   |delete_eval_scope
+px     |void   |delete_eval_scope
 Aprd   |OP*    |die_sv         |NN SV *baseex
 Afrpd  |OP*    |die            |NULLOK const char* pat|...
 : Used in util.c
 pr     |void   |die_unwind     |NN SV* msv
 Ap     |void   |dounwind       |I32 cxix
 : FIXME
-pmb    |bool|do_aexec  |NULLOK SV* really|NN SV** mark|NN SV** sp
+pMb    |bool|do_aexec  |NULLOK SV* really|NN SV** mark|NN SV** sp
 : Used in pp_sys.c
 p      |bool|do_aexec5 |NULLOK SV* really|NN SV** mark|NN SV** sp|int fd|int do_report
-Abp    |int    |do_binmode     |NN PerlIO *fp|int iotype|int mode
+AbpD   |int    |do_binmode     |NN PerlIO *fp|int iotype|int mode
 : Used in pp.c
 Ap     |bool   |do_close       |NULLOK GV* gv|bool not_implicit
 : Defined in doio.c, used only in pp_sys.c
 p      |bool   |do_eof         |NN GV* gv
 
 #ifdef PERL_DEFAULT_DO_EXEC3_IMPLEMENTATION
-pm     |bool|do_exec   |NN const char* cmd
+pM     |bool|do_exec   |NN const char* cmd
 #else
 p      |bool|do_exec   |NN const char* cmd
 #endif
@@ -439,8 +675,8 @@ Ap  |int    |do_spawn_nowait|NN char* cmd
 p      |bool|do_exec3  |NN const char *incmd|int fd|int do_report
 #endif
 #if defined(PERL_IN_DOIO_C)
-s      |void   |exec_failed    |NN const char *cmd|int fd|int do_report
-s      |bool   |argvout_final  |NN MAGIC *mg|NN IO *io|bool not_implicit
+S      |void   |exec_failed    |NN const char *cmd|int fd|int do_report
+S      |bool   |argvout_final  |NN MAGIC *mg|NN IO *io|bool not_implicit
 #endif
 #if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
 : Defined in doio.c, used only in pp_sys.c
@@ -461,13 +697,13 @@ Ap        |void   |do_join        |NN SV *sv|NN SV *delim|NN SV **mark|NN SV **sp
 : p    |OP*    |do_kv
 : used in pp.c, pp_hot.c
 pR     |I32    |do_ncmp        |NN SV *const left|NN SV *const right
-Apmb   |bool   |do_open        |NN GV* gv|NN const char* name|I32 len|int as_raw \
+ApMb   |bool   |do_open        |NN GV* gv|NN const char* name|I32 len|int as_raw \
                                |int rawmode|int rawperm|NULLOK PerlIO* supplied_fp
-Abp    |bool   |do_open9       |NN GV *gv|NN const char *name|I32 len|int as_raw \
+AbpD   |bool   |do_open9       |NN GV *gv|NN const char *name|I32 len|int as_raw \
                                |int rawmode|int rawperm|NULLOK PerlIO *supplied_fp \
                                |NN SV *svs|I32 num
-pn     |void   |setfd_cloexec|int fd
-pn     |void   |setfd_inhexec|int fd
+pT     |void   |setfd_cloexec|int fd
+pT     |void   |setfd_inhexec|int fd
 p      |void   |setfd_cloexec_for_nonsysfd|int fd
 p      |void   |setfd_inhexec_for_sysfd|int fd
 p      |void   |setfd_cloexec_or_inhexec_by_sysfdness|int fd
@@ -475,7 +711,8 @@ pR  |int    |PerlLIO_dup_cloexec|int oldfd
 p      |int    |PerlLIO_dup2_cloexec|int oldfd|int newfd
 pR     |int    |PerlLIO_open_cloexec|NN const char *file|int flag
 pR     |int    |PerlLIO_open3_cloexec|NN const char *file|int flag|int perm
-pnoR   |int    |my_mkstemp_cloexec|NN char *templte
+pToR   |int    |my_mkstemp_cloexec|NN char *templte
+pToR   |int    |my_mkostemp_cloexec|NN char *templte|int flags
 #ifdef HAS_PIPE
 pR     |int    |PerlProc_pipe_cloexec|NN int *pipefd
 #endif
@@ -492,10 +729,10 @@ pR        |int    |PerlSock_socketpair_cloexec|int domain|int type|int protocol \
                                |NN int *pairfd
 #endif
 #if defined(PERL_IN_DOIO_C)
-s      |IO *   |openn_setup    |NN GV *gv|NN char *mode|NN PerlIO **saveifp \
+S      |IO *   |openn_setup    |NN GV *gv|NN char *mode|NN PerlIO **saveifp \
                                |NN PerlIO **saveofp|NN int *savefd \
                                 |NN char *savetype
-s      |bool   |openn_cleanup  |NN GV *gv|NN IO *io|NULLOK PerlIO *fp \
+S      |bool   |openn_cleanup  |NN GV *gv|NN IO *io|NULLOK PerlIO *fp \
                                |NN char *mode|NN const char *oname \
                                 |NULLOK PerlIO *saveifp|NULLOK PerlIO *saveofp \
                                 |int savefd|char savetype|int writing \
@@ -506,9 +743,9 @@ Ap  |bool   |do_openn       |NN GV *gv|NN const char *oname|I32 len \
                                |int as_raw|int rawmode|int rawperm \
                                |NULLOK PerlIO *supplied_fp|NULLOK SV **svp \
                                |I32 num
-Mp     |bool   |do_open_raw    |NN GV *gv|NN const char *oname|STRLEN len \
+xp     |bool   |do_open_raw    |NN GV *gv|NN const char *oname|STRLEN len \
                                |int rawmode|int rawperm|NULLOK Stat_t *statbufp
-Mp     |bool   |do_open6       |NN GV *gv|NN const char *oname|STRLEN len \
+xp     |bool   |do_open6       |NN GV *gv|NN const char *oname|STRLEN len \
                                |NULLOK PerlIO *supplied_fp|NULLOK SV **svp \
                                |U32 num
 : Used in pp_hot.c and pp_sys.c
@@ -533,27 +770,28 @@ p |void   |do_vop         |I32 optype|NN SV* sv|NN SV* left|NN SV* right
 : Used in perly.y
 p      |OP*    |dofile         |NN OP* term|I32 force_builtin
 ApR    |U8     |dowantarray
-A    |void   |dump_all
+Adp    |void   |dump_all
 p      |void   |dump_all_perl  |bool justperl
 Ap     |void   |dump_eval
 Ap     |void   |dump_form      |NN const GV* gv
 Ap     |void   |gv_dump        |NULLOK GV* gv
 Apd    |OPclass|op_class       |NULLOK const OP *o
-Ap     |void   |op_dump        |NN const OP *o
+Apd    |void   |op_dump        |NN const OP *o
 Ap     |void   |pmop_dump      |NULLOK PMOP* pm
-Ap     |void   |dump_packsubs  |NN const HV* stash
+Apd    |void   |dump_packsubs  |NN const HV* stash
 p      |void   |dump_packsubs_perl     |NN const HV* stash|bool justperl
 Ap     |void   |dump_sub       |NN const GV* gv
 p      |void   |dump_sub_perl  |NN const GV* gv|bool justperl
 Apd    |void   |fbm_compile    |NN SV* sv|U32 flags
 ApdR   |char*  |fbm_instr      |NN unsigned char* big|NN unsigned char* bigend \
                                |NN SV* littlestr|U32 flags
+pEXTR  |const char *|cntrl_to_mnemonic|const U8 c
 p      |CV *   |find_lexical_cv|PADOFFSET off
 : Defined in util.c, used only in perl.c
 p      |char*  |find_script    |NN const char *scriptname|bool dosearch \
                                |NULLOK const char *const *const search_ext|I32 flags
 #if defined(PERL_IN_OP_C)
-s      |OP*    |force_list     |NULLOK OP* arg|bool nullit
+S      |OP*    |force_list     |NULLOK OP* arg|bool nullit
 i      |OP*    |op_integerize  |NN OP *o
 i      |OP*    |op_std_init    |NN OP *o
 #if defined(USE_ITHREADS)
@@ -562,27 +800,27 @@ i |void   |op_relocate_sv |NN SV** svp|NN PADOFFSET* targp
 i      |OP*    |newMETHOP_internal     |I32 type|I32 flags|NULLOK OP* dynamic_meth \
                                        |NULLOK SV* const_meth
 : FIXME
-s      |OP*    |fold_constants |NN OP * const o
-     |OP*    |traverse_op_tree|NN OP* top|NN OP* o
+S      |OP*    |fold_constants |NN OP * const o
+Sd     |OP*    |traverse_op_tree|NN OP* top|NN OP* o
 #endif
 Afpd   |char*  |form           |NN const char* pat|...
 Ap     |char*  |vform          |NN const char* pat|NULLOK va_list* args
 Ap     |void   |free_tmps
 #if defined(PERL_IN_OP_C)
-s      |OP*    |gen_constant_list|NULLOK OP* o
+S      |void   |gen_constant_list|NULLOK OP* o
 #endif
 #if !defined(HAS_GETENV_LEN)
 : Used in hv.c
 p      |char*  |getenv_len     |NN const char *env_elem|NN unsigned long *len
 #endif
 : Used in pp_ctl.c and pp_hot.c
-pox    |void   |get_db_sub     |NULLOK SV **svp|NN CV *cv
+poe    |void   |get_db_sub     |NULLOK SV **svp|NN CV *cv
 Ap     |void   |gp_free        |NULLOK GV* gv
 Ap     |GP*    |gp_ref         |NULLOK GP* gp
 Ap     |GV*    |gv_add_by_type |NULLOK GV *gv|svtype type
-Apmb   |GV*    |gv_AVadd       |NULLOK GV *gv
-Apmb   |GV*    |gv_HVadd       |NULLOK GV *gv
-Apmb   |GV*    |gv_IOadd       |NULLOK GV* gv
+ApMb   |GV*    |gv_AVadd       |NULLOK GV *gv
+ApMb   |GV*    |gv_HVadd       |NULLOK GV *gv
+ApMb   |GV*    |gv_IOadd       |NULLOK GV* gv
 AmR    |GV*    |gv_autoload4   |NULLOK HV* stash|NN const char* name \
                                |STRLEN len|I32 method
 ApR    |GV*    |gv_autoload_sv |NULLOK HV* stash|NN SV* namesv|U32 flags
@@ -591,8 +829,8 @@ ApR |GV*    |gv_autoload_pv |NULLOK HV* stash|NN const char* namepv \
 ApR    |GV*    |gv_autoload_pvn        |NULLOK HV* stash|NN const char* name \
                                         |STRLEN len|U32 flags
 Ap     |void   |gv_check       |NN HV* stash
-Abp    |void   |gv_efullname   |NN SV* sv|NN const GV* gv
-Apmb   |void   |gv_efullname3  |NN SV* sv|NN const GV* gv|NULLOK const char* prefix
+AbpD   |void   |gv_efullname   |NN SV* sv|NN const GV* gv
+ApMb   |void   |gv_efullname3  |NN SV* sv|NN const GV* gv|NULLOK const char* prefix
 Ap     |void   |gv_efullname4  |NN SV* sv|NN const GV* gv|NULLOK const char* prefix|bool keepmain
 Ap     |GV*    |gv_fetchfile   |NN const char* name
 Ap     |GV*    |gv_fetchfile_flags|NN const char *const name|const STRLEN len\
@@ -612,40 +850,42 @@ Apd       |GV*    |gv_fetchmeth_pv_autoload       |NULLOK HV* stash|NN const char* name \
                                         |I32 level|U32 flags
 Apd    |GV*    |gv_fetchmeth_pvn_autoload      |NULLOK HV* stash|NN const char* name \
                                         |STRLEN len|I32 level|U32 flags
-Apdmb  |GV*    |gv_fetchmethod |NN HV* stash|NN const char* name
+ApdMb  |GV*    |gv_fetchmethod |NN HV* stash|NN const char* name
 Apd    |GV*    |gv_fetchmethod_autoload|NN HV* stash|NN const char* name \
                                |I32 autoload
-ApM    |GV*    |gv_fetchmethod_sv_flags|NN HV* stash|NN SV* namesv|U32 flags
-ApM    |GV*    |gv_fetchmethod_pv_flags|NN HV* stash|NN const char* name \
+Apx    |GV*    |gv_fetchmethod_sv_flags|NN HV* stash|NN SV* namesv|U32 flags
+Apx    |GV*    |gv_fetchmethod_pv_flags|NN HV* stash|NN const char* name \
                                |U32 flags
-ApM    |GV*    |gv_fetchmethod_pvn_flags|NN HV* stash|NN const char* name \
+Apx    |GV*    |gv_fetchmethod_pvn_flags|NN HV* stash|NN const char* name \
                                |const STRLEN len|U32 flags
 Ap     |GV*    |gv_fetchpv     |NN const char *nambeg|I32 add|const svtype sv_type
-Abp    |void   |gv_fullname    |NN SV* sv|NN const GV* gv
-Apmb   |void   |gv_fullname3   |NN SV* sv|NN const GV* gv|NULLOK const char* prefix
+AbpD   |void   |gv_fullname    |NN SV* sv|NN const GV* gv
+ApMb   |void   |gv_fullname3   |NN SV* sv|NN const GV* gv|NULLOK const char* prefix
 Ap     |void   |gv_fullname4   |NN SV* sv|NN const GV* gv|NULLOK const char* prefix|bool keepmain
 : Used in scope.c
-pMox   |GP *   |newGP          |NN GV *const gv
+pxoe   |GP *   |newGP          |NN GV *const gv
 pX     |void   |cvgv_set       |NN CV* cv|NULLOK GV* gv
 poX    |GV *   |cvgv_from_hek  |NN CV* cv
 pX     |void   |cvstash_set    |NN CV* cv|NULLOK HV* stash
 Amd    |void   |gv_init        |NN GV* gv|NULLOK HV* stash \
                                 |NN const char* name|STRLEN len|int multi
-Ap     |void   |gv_init_sv     |NN GV* gv|NULLOK HV* stash|NN SV* namesv|U32 flags
-Ap     |void   |gv_init_pv     |NN GV* gv|NULLOK HV* stash|NN const char* name \
+Apd    |void   |gv_init_sv     |NN GV* gv|NULLOK HV* stash|NN SV* namesv|U32 flags
+Apd    |void   |gv_init_pv     |NN GV* gv|NULLOK HV* stash|NN const char* name \
                                 |U32 flags
-Ap     |void   |gv_init_pvn    |NN GV* gv|NULLOK HV* stash|NN const char* name \
+Apd    |void   |gv_init_pvn    |NN GV* gv|NULLOK HV* stash|NN const char* name \
                                 |STRLEN len|U32 flags
 Ap     |void   |gv_name_set    |NN GV* gv|NN const char *name|U32 len|U32 flags
-px     |GV *   |gv_override    |NN const char * const name \
+pe     |GV *   |gv_override    |NN const char * const name \
                                |const STRLEN len
-XMpd   |void   |gv_try_downgrade|NN GV* gv
+Xxpd   |void   |gv_try_downgrade|NN GV* gv
 p      |void   |gv_setref      |NN SV *const dstr|NN SV *const sstr
 Apd    |HV*    |gv_stashpv     |NN const char* name|I32 flags
 Apd    |HV*    |gv_stashpvn    |NN const char* name|U32 namelen|I32 flags
+#if defined(PERL_IN_GV_C) || defined(PERL_IN_UNIVERSAL_C)
+EpG    |HV*    |gv_stashsvpvn_cached   |NULLOK SV *namesv|NULLOK const char* name|U32 namelen|I32 flags
+#endif
 #if defined(PERL_IN_GV_C)
 i      |HV*    |gv_stashpvn_internal   |NN const char* name|U32 namelen|I32 flags
-i      |HV*    |gv_stashsvpvn_cached   |NULLOK SV *namesv|NULLOK const char* name|U32 namelen|I32 flags
 i      |GV*    |gv_fetchmeth_internal  |NULLOK HV* stash|NULLOK SV* meth|NULLOK const char* name \
                                        |STRLEN len|I32 level|U32 flags
 #endif
@@ -654,14 +894,14 @@ Apd       |void   |hv_clear       |NULLOK HV *hv
 : used in SAVEHINTS() and op.c
 ApdR   |HV *   |hv_copy_hints_hv|NULLOK HV *const ohv
 Ap     |void   |hv_delayfree_ent|NN HV *hv|NULLOK HE *entry
-Abmdp  |SV*    |hv_delete      |NULLOK HV *hv|NN const char *key|I32 klen \
+AbMdp  |SV*    |hv_delete      |NULLOK HV *hv|NN const char *key|I32 klen \
                                |I32 flags
-Abmdp  |SV*    |hv_delete_ent  |NULLOK HV *hv|NN SV *keysv|I32 flags|U32 hash
-AbmdRp |bool   |hv_exists      |NULLOK HV *hv|NN const char *key|I32 klen
-AbmdRp |bool   |hv_exists_ent  |NULLOK HV *hv|NN SV *keysv|U32 hash
-Abmdp  |SV**   |hv_fetch       |NULLOK HV *hv|NN const char *key|I32 klen \
+AbMdp  |SV*    |hv_delete_ent  |NULLOK HV *hv|NN SV *keysv|I32 flags|U32 hash
+AbMdRp |bool   |hv_exists      |NULLOK HV *hv|NN const char *key|I32 klen
+AbMdRp |bool   |hv_exists_ent  |NULLOK HV *hv|NN SV *keysv|U32 hash
+AbMdp  |SV**   |hv_fetch       |NULLOK HV *hv|NN const char *key|I32 klen \
                                |I32 lval
-Abmdp  |HE*    |hv_fetch_ent   |NULLOK HV *hv|NN SV *keysv|I32 lval|U32 hash
+AbMdp  |HE*    |hv_fetch_ent   |NULLOK HV *hv|NN SV *keysv|I32 lval|U32 hash
 Ap     |void*  |hv_common      |NULLOK HV *hv|NULLOK SV *keysv \
                                |NULLOK const char* key|STRLEN klen|int flags \
                                |int action|NULLOK SV *val|U32 hash
@@ -673,14 +913,14 @@ Ap        |void   |hv_free_ent    |NN HV *hv|NULLOK HE *entry
 Apd    |I32    |hv_iterinit    |NN HV *hv
 ApdR   |char*  |hv_iterkey     |NN HE* entry|NN I32* retlen
 ApdR   |SV*    |hv_iterkeysv   |NN HE* entry
-ApdRbm |HE*    |hv_iternext    |NN HV *hv
+ApdRbM |HE*    |hv_iternext    |NN HV *hv
 ApdR   |SV*    |hv_iternextsv  |NN HV *hv|NN char **key|NN I32 *retlen
-ApMdR  |HE*    |hv_iternext_flags|NN HV *hv|I32 flags
+ApxdR  |HE*    |hv_iternext_flags|NN HV *hv|I32 flags
 ApdR   |SV*    |hv_iterval     |NN HV *hv|NN HE *entry
 Ap     |void   |hv_ksplit      |NN HV *hv|IV newmax
-Apdbm  |void   |hv_magic       |NN HV *hv|NULLOK GV *gv|int how
+ApdbM  |void   |hv_magic       |NN HV *hv|NULLOK GV *gv|int how
 #if defined(PERL_IN_HV_C)
-s      |SV *   |refcounted_he_value    |NN const struct refcounted_he *he
+S      |SV *   |refcounted_he_value    |NN const struct refcounted_he *he
 #endif
 Xpd    |HV *   |refcounted_he_chain_2hv|NULLOK const struct refcounted_he *c|U32 flags
 Xpd    |SV *   |refcounted_he_fetch_pvn|NULLOK const struct refcounted_he *chain \
@@ -703,30 +943,30 @@ Xpd       |struct refcounted_he *|refcounted_he_new_sv \
                                |U32 hash|NULLOK SV *value|U32 flags
 Xpd    |void   |refcounted_he_free|NULLOK struct refcounted_he *he
 Xpd    |struct refcounted_he *|refcounted_he_inc|NULLOK struct refcounted_he *he
-Apbmd  |SV**   |hv_store       |NULLOK HV *hv|NULLOK const char *key \
+ApbMd  |SV**   |hv_store       |NULLOK HV *hv|NULLOK const char *key \
                                |I32 klen|NULLOK SV *val|U32 hash
-Apbmd  |HE*    |hv_store_ent   |NULLOK HV *hv|NULLOK SV *key|NULLOK SV *val\
+ApbMd  |HE*    |hv_store_ent   |NULLOK HV *hv|NULLOK SV *key|NULLOK SV *val\
                                |U32 hash
-ApbmM  |SV**   |hv_store_flags |NULLOK HV *hv|NULLOK const char *key \
+ApbMx  |SV**   |hv_store_flags |NULLOK HV *hv|NULLOK const char *key \
                                |I32 klen|NULLOK SV *val|U32 hash|int flags
 Amd    |void   |hv_undef       |NULLOK HV *hv
 poX    |void   |hv_undef_flags |NULLOK HV *hv|U32 flags
-AmP    |I32    |ibcmp          |NN const char* a|NN const char* b|I32 len
-Ainp   |I32    |foldEQ         |NN const char* a|NN const char* b|I32 len
-AmP    |I32    |ibcmp_locale   |NN const char* a|NN const char* b|I32 len
-Ainp   |I32    |foldEQ_locale  |NN const char* a|NN const char* b|I32 len
+AdmP   |I32    |ibcmp          |NN const char* a|NN const char* b|I32 len
+AdiTp  |I32    |foldEQ         |NN const char* a|NN const char* b|I32 len
+AdmP   |I32    |ibcmp_locale   |NN const char* a|NN const char* b|I32 len
+AiTpd  |I32    |foldEQ_locale  |NN const char* a|NN const char* b|I32 len
 Am     |I32    |ibcmp_utf8     |NN const char *s1|NULLOK char **pe1|UV l1 \
                                |bool u1|NN const char *s2|NULLOK char **pe2 \
                                |UV l2|bool u2
 Amd    |I32    |foldEQ_utf8    |NN const char *s1|NULLOK char **pe1|UV l1 \
                                |bool u1|NN const char *s2|NULLOK char **pe2 \
                                |UV l2|bool u2
-AMp    |I32    |foldEQ_utf8_flags |NN const char *s1|NULLOK char **pe1|UV l1 \
+Cp     |I32    |foldEQ_utf8_flags |NN const char *s1|NULLOK char **pe1|UV l1 \
                                |bool u1|NN const char *s2|NULLOK char **pe2 \
                                |UV l2|bool u2|U32 flags
-Ainp   |I32    |foldEQ_latin1  |NN const char* a|NN const char* b|I32 len
+AiTp   |I32    |foldEQ_latin1  |NN const char* a|NN const char* b|I32 len
 #if defined(PERL_IN_DOIO_C)
-sR     |bool   |ingroup        |Gid_t testgid|bool effective
+SR     |bool   |ingroup        |Gid_t testgid|bool effective
 #endif
 : Used in toke.c
 p      |void   |init_argv_symbols|int argc|NN char **argv
@@ -737,7 +977,7 @@ p   |void   |init_debugger
 Ap     |void   |init_stacks
 Ap     |void   |init_tm        |NN struct tm *ptm
 : Used in perly.y
-AbmnpPR        |char*  |instr          |NN const char* big|NN const char* little
+AbMTpPRd|char* |instr          |NN const char* big|NN const char* little
 : Used in sv.c
 p      |bool   |io_close       |NN IO* io|NULLOK GV *gv \
                                |bool not_implicit|bool warn_on_fail
@@ -746,168 +986,100 @@ pR      |OP*    |invert         |NULLOK OP* cmd
 ApR    |I32    |is_lvalue_sub
 : Used in cop.h
 XopR   |I32    |was_lvalue_sub
-ApMRnP |STRLEN |_is_utf8_char_helper|NN const U8 * const s|NN const U8 * e|const U32 flags
-AbDMpR |U32    |to_uni_upper_lc|U32 c
-AbDMpR |U32    |to_uni_title_lc|U32 c
-AbDMpR |U32    |to_uni_lower_lc|U32 c
-AbDMpR |bool   |is_uni_alnum   |UV c
-AbDMpR |bool   |is_uni_alnumc  |UV c
-AbDMpR |bool   |is_uni_idfirst |UV c
-AbDMpR |bool   |is_uni_alpha   |UV c
-AbDMpPR        |bool   |is_uni_ascii   |UV c
-AbDMpPR        |bool   |is_uni_blank   |UV c
-AbDMpPR        |bool   |is_uni_space   |UV c
-AbDMpPR        |bool   |is_uni_cntrl   |UV c
-AbDMpR |bool   |is_uni_graph   |UV c
-AbDMpR |bool   |is_uni_digit   |UV c
-AbDMpR |bool   |is_uni_upper   |UV c
-AbDMpR |bool   |is_uni_lower   |UV c
-AbDMpR |bool   |is_uni_print   |UV c
-AbDMpR |bool   |is_uni_punct   |UV c
-AbDMpPR        |bool   |is_uni_xdigit  |UV c
-AMp    |UV     |to_uni_upper   |UV c|NN U8 *p|NN STRLEN *lenp
-AMp    |UV     |to_uni_title   |UV c|NN U8 *p|NN STRLEN *lenp
-AbDMpR |bool   |isIDFIRST_lazy |NN const char* p
-AbDMpR |bool   |isALNUM_lazy   |NN const char* p
+CpRTP  |STRLEN |is_utf8_char_helper|NN const U8 * const s|NN const U8 * e|const U32 flags
+Cp     |UV     |to_uni_upper   |UV c|NN U8 *p|NN STRLEN *lenp
+Cp     |UV     |to_uni_title   |UV c|NN U8 *p|NN STRLEN *lenp
 p      |void   |init_uniprops
 #ifdef PERL_IN_UTF8_C
-snR    |U8     |to_lower_latin1|const U8 c|NULLOK U8 *p|NULLOK STRLEN *lenp  \
+STR    |U8     |to_lower_latin1|const U8 c|NULLOK U8 *p|NULLOK STRLEN *lenp  \
                |const char dummy
 #  ifndef UV_IS_QUAD
-snR    |int    |is_utf8_cp_above_31_bits|NN const U8 * const s             \
+STR    |int    |is_utf8_cp_above_31_bits|NN const U8 * const s             \
                                         |NN const U8 * const e             \
                                         |const bool consider_overlongs
 #  endif
 #endif
 #if defined(PERL_IN_UTF8_C) || defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C)
-EXnp   |UV        |_to_fold_latin1|const U8 c|NN U8 *p|NN STRLEN *lenp|const unsigned int flags
+EXTp   |UV        |_to_fold_latin1|const U8 c|NN U8 *p|NN STRLEN *lenp|const unsigned int flags
 #endif
 #if defined(PERL_IN_UTF8_C) || defined(PERL_IN_PP_C)
 p      |UV     |_to_upper_title_latin1|const U8 c|NN U8 *p|NN STRLEN *lenp|const char S_or_s
 #endif
-AMp    |UV     |to_uni_lower   |UV c|NN U8 *p|NN STRLEN *lenp
-AMmp   |UV     |to_uni_fold    |UV c|NN U8 *p|NN STRLEN *lenp
-AMp    |UV     |_to_uni_fold_flags|UV c|NN U8 *p|NN STRLEN *lenp|U8 flags
-AbDMpR |bool   |is_uni_alnum_lc|UV c
-AbDMpR |bool   |is_uni_alnumc_lc|UV c
-AbDMpR |bool   |is_uni_idfirst_lc|UV c
-AMpR   |bool   |_is_uni_perl_idcont|UV c
-AMpR   |bool   |_is_uni_perl_idstart|UV c
-AbDMpR |bool   |is_uni_alpha_lc|UV c
-AbDMpPR        |bool   |is_uni_ascii_lc|UV c
-AbDMpPR        |bool   |is_uni_space_lc|UV c
-AbDMpPR        |bool   |is_uni_blank_lc|UV c
-AbDMpPR        |bool   |is_uni_cntrl_lc|UV c
-AbDMpR |bool   |is_uni_graph_lc|UV c
-AbDMpR |bool   |is_uni_digit_lc|UV c
-AbDMpR |bool   |is_uni_upper_lc|UV c
-AbDMpR |bool   |is_uni_lower_lc|UV c
-AbDMpR |bool   |is_uni_print_lc|UV c
-AbDMpR |bool   |is_uni_punct_lc|UV c
-AbDMpPR        |bool   |is_uni_xdigit_lc|UV c
-AndmoR |bool   |is_utf8_invariant_string|NN const U8* const s              \
+Cp     |UV     |to_uni_lower   |UV c|NN U8 *p|NN STRLEN *lenp
+Cm     |UV     |to_uni_fold    |UV c|NN U8 *p|NN STRLEN *lenp
+Cp     |UV     |_to_uni_fold_flags|UV c|NN U8 *p|NN STRLEN *lenp|U8 flags
+CpR    |bool   |_is_uni_perl_idcont|UV c
+CpR    |bool   |_is_uni_perl_idstart|UV c
+ATdmoR |bool   |is_utf8_invariant_string|NN const U8* const s              \
                |STRLEN len
-AnidR  |bool   |is_utf8_invariant_string_loc|NN const U8* const s          \
+ATidRp |bool   |is_utf8_invariant_string_loc|NN const U8* const s          \
                |STRLEN len                                                 \
                |NULLOK const U8 ** ep
 #ifndef EBCDIC
-AniR   |unsigned int|_variant_byte_number|PERL_UINTMAX_T word
+CTiRp  |unsigned int|variant_byte_number|PERL_UINTMAX_T word
 #endif
 #if defined(PERL_CORE) || defined(PERL_EXT)
-EinR   |Size_t |variant_under_utf8_count|NN const U8* const s              \
+EiTRd  |Size_t |variant_under_utf8_count|NN const U8* const s              \
                |NN const U8* const e
 #endif
-AmnpdRP        |bool   |is_ascii_string|NN const U8* const s|STRLEN len
-AmnpdRP        |bool   |is_invariant_string|NN const U8* const s|STRLEN len
+AmTdRP |bool   |is_ascii_string|NN const U8* const s|STRLEN len
+AmTdRP |bool   |is_invariant_string|NN const U8* const s|STRLEN len
 #if defined(PERL_CORE) || defined (PERL_EXT)
-EXnidR |bool   |is_utf8_non_invariant_string|NN const U8* const s          \
+EXTidRp        |bool   |is_utf8_non_invariant_string|NN const U8* const s          \
                |STRLEN len
 #endif
-AbnpdD |STRLEN |is_utf8_char   |NN const U8 *s
-Abmnpd |STRLEN |is_utf8_char_buf|NN const U8 *buf|NN const U8 *buf_end
-AnidR  |Size_t |isUTF8_CHAR|NN const U8 * const s0                         \
+AbTpdD |STRLEN |is_utf8_char   |NN const U8 *s
+AbMTpd |STRLEN |is_utf8_char_buf|NN const U8 *buf|NN const U8 *buf_end
+ATidRp |Size_t |isUTF8_CHAR|NN const U8 * const s0                         \
                            |NN const U8 * const e
-AnidR  |Size_t |isSTRICT_UTF8_CHAR |NN const U8 * const s0                 \
+ATidRp |Size_t |isSTRICT_UTF8_CHAR |NN const U8 * const s0                 \
                                    |NN const U8 * const e
-AnidR  |Size_t |isC9_STRICT_UTF8_CHAR |NN const U8 * const s0              \
+ATidRp |Size_t |isC9_STRICT_UTF8_CHAR |NN const U8 * const s0              \
                                       |NN const U8 * const e
-AnmdpR |bool   |is_utf8_string |NN const U8 *s|STRLEN len
-AnidR  |bool   |is_utf8_string_flags                                       \
+ATmdR  |bool   |is_utf8_string |NN const U8 *s|STRLEN len
+ATidRp |bool   |is_utf8_string_flags                                       \
                |NN const U8 *s|STRLEN len|const U32 flags
-AnmdpR |bool   |is_strict_utf8_string|NN const U8 *s|STRLEN len
-AnmdpR |bool   |is_c9strict_utf8_string|NN const U8 *s|STRLEN len
-Anpdmb |bool   |is_utf8_string_loc                                         \
+ATmdR  |bool   |is_strict_utf8_string|NN const U8 *s|STRLEN len
+ATmdR  |bool   |is_c9strict_utf8_string|NN const U8 *s|STRLEN len
+ATpdMb |bool   |is_utf8_string_loc                                         \
                |NN const U8 *s|const STRLEN len|NN const U8 **ep
-Andm   |bool   |is_utf8_string_loc_flags                                   \
+ATdm   |bool   |is_utf8_string_loc_flags                                   \
                |NN const U8 *s|STRLEN len|NN const U8 **ep                 \
                |const U32 flags
-Andm   |bool   |is_strict_utf8_string_loc                                  \
+ATdm   |bool   |is_strict_utf8_string_loc                                  \
                |NN const U8 *s|STRLEN len|NN const U8 **ep
-Andm   |bool   |is_c9strict_utf8_string_loc                                \
+ATdm   |bool   |is_c9strict_utf8_string_loc                                \
                |NN const U8 *s|STRLEN len|NN const U8 **ep
-Anipd  |bool   |is_utf8_string_loclen                                      \
+ATipd  |bool   |is_utf8_string_loclen                                      \
                |NN const U8 *s|STRLEN len|NULLOK const U8 **ep             \
                |NULLOK STRLEN *el
-Anid   |bool   |is_utf8_string_loclen_flags                                \
+ATidp  |bool   |is_utf8_string_loclen_flags                                \
                |NN const U8 *s|STRLEN len|NULLOK const U8 **ep             \
                |NULLOK STRLEN *el|const U32 flags
-Anid   |bool   |is_strict_utf8_string_loclen                               \
+ATidp  |bool   |is_strict_utf8_string_loclen                               \
                |NN const U8 *s|STRLEN len|NULLOK const U8 **ep     \
                |NULLOK STRLEN *el
-Anid   |bool   |is_c9strict_utf8_string_loclen                             \
+ATidp  |bool   |is_c9strict_utf8_string_loclen                             \
                |NN const U8 *s|STRLEN len|NULLOK const U8 **ep     \
                |NULLOK STRLEN *el
-Amnd   |bool   |is_utf8_fixed_width_buf_flags                              \
+AmTd   |bool   |is_utf8_fixed_width_buf_flags                              \
                |NN const U8 * const s|STRLEN len|const U32 flags
-Amnd   |bool   |is_utf8_fixed_width_buf_loc_flags                          \
+AmTd   |bool   |is_utf8_fixed_width_buf_loc_flags                          \
                |NN const U8 * const s|STRLEN len                           \
                |NULLOK const U8 **ep|const U32 flags
-Anid   |bool   |is_utf8_fixed_width_buf_loclen_flags                       \
+ATidp  |bool   |is_utf8_fixed_width_buf_loclen_flags                       \
                |NN const U8 * const s|STRLEN len                           \
                |NULLOK const U8 **ep|NULLOK STRLEN *el|const U32 flags
-AmndP  |bool   |is_utf8_valid_partial_char                                 \
+AmTdP  |bool   |is_utf8_valid_partial_char                                 \
                |NN const U8 * const s|NN const U8 * const e
-AnidR  |bool   |is_utf8_valid_partial_char_flags                           \
+ATidRp |bool   |is_utf8_valid_partial_char_flags                           \
                |NN const U8 * const s|NN const U8 * const e|const U32 flags
-AMpR   |bool   |_is_uni_FOO|const U8 classnum|const UV c
-AMpR   |bool   |_is_utf8_FOO|U8 classnum|NN const U8 * const p             \
-               |NN const char * const name                                 \
-               |NN const char * const alternative                          \
-               |const bool use_utf8|const bool use_locale                  \
-               |NN const char * const file|const unsigned line
-AMpR   |bool   |_is_utf8_FOO_with_len|const U8 classnum|NN const U8 *p     \
-               |NN const U8 * const e
-AbDMpR |bool   |is_utf8_alnum  |NN const U8 *p
-AbDMpR |bool   |is_utf8_alnumc |NN const U8 *p
-AbDMpR |bool   |is_utf8_idfirst|NN const U8 *p
-AbDMpR |bool   |is_utf8_xidfirst|NN const U8 *p
-AMpR   |bool   |_is_utf8_idcont|NN const U8 *p
-AMpR   |bool   |_is_utf8_idstart|NN const U8 *p
-AMpR   |bool   |_is_utf8_xidcont|NN const U8 *p
-AMpR   |bool   |_is_utf8_xidstart|NN const U8 *p
-AMpR   |bool   |_is_utf8_perl_idcont_with_len|NN const U8 *p               \
+CpR     |bool   |_is_uni_FOO|const U8 classnum|const UV c
+CpR     |bool   |_is_utf8_FOO|const U8 classnum|NN const U8 *p     \
                |NN const U8 * const e
-AMpR   |bool   |_is_utf8_perl_idstart_with_len|NN const U8 *p              \
-               |NN const U8 * const e
-AbDMpR |bool   |is_utf8_idcont |NN const U8 *p
-AbDMpR |bool   |is_utf8_xidcont        |NN const U8 *p
-AbDMpR |bool   |is_utf8_alpha  |NN const U8 *p
-AbDMpR |bool   |is_utf8_ascii  |NN const U8 *p
-AbDMpR |bool   |is_utf8_blank  |NN const U8 *p
-AbDMpR |bool   |is_utf8_space  |NN const U8 *p
-AbDMpR |bool   |is_utf8_perl_space     |NN const U8 *p
-AbDMpR |bool   |is_utf8_perl_word      |NN const U8 *p
-AbDMpR |bool   |is_utf8_cntrl  |NN const U8 *p
-AbDMpR |bool   |is_utf8_digit  |NN const U8 *p
-AbDMpR |bool   |is_utf8_posix_digit    |NN const U8 *p
-AbDMpR |bool   |is_utf8_graph  |NN const U8 *p
-AbDMpR |bool   |is_utf8_upper  |NN const U8 *p
-AbDMpR |bool   |is_utf8_lower  |NN const U8 *p
-AbDMpR |bool   |is_utf8_print  |NN const U8 *p
-AbDMpR |bool   |is_utf8_punct  |NN const U8 *p
-AbDMpR |bool   |is_utf8_xdigit |NN const U8 *p
-AMpR   |bool   |_is_utf8_mark  |NN const U8 *p
-AbDMpR |bool   |is_utf8_mark   |NN const U8 *p
+CpR     |bool   |_is_utf8_perl_idcont|NN const U8 *p|NN const U8 * const e
+CpR     |bool   |_is_utf8_perl_idstart|NN const U8 *p|NN const U8 * const e
+
 #if defined(PERL_CORE) || defined(PERL_EXT)
 EXdpR  |bool   |isSCRIPT_RUN   |NN const U8 *s|NN const U8 *send   \
                                |const bool utf8_target
@@ -917,45 +1089,46 @@ p        |OP*    |jmaybe         |NN OP *o
 : Used in pp.c 
 pP     |I32    |keyword        |NN const char *name|I32 len|bool all_keywords
 #if defined(PERL_IN_OP_C)
-s      |void   |inplace_aassign        |NN OP* o
+S      |void   |inplace_aassign        |NN OP* o
 #endif
 Ap     |void   |leave_scope    |I32 base
 p      |void   |notify_parser_that_changed_to_utf8
 : Public lexer API
-AMpd   |void   |lex_start      |NULLOK SV* line|NULLOK PerlIO *rsfp|U32 flags
-AMpd   |bool   |lex_bufutf8
-AMpd   |char*  |lex_grow_linestr|STRLEN len
-AMpd   |void   |lex_stuff_pvn  |NN const char* pv|STRLEN len|U32 flags
-AMpd   |void   |lex_stuff_pv   |NN const char* pv|U32 flags
-AMpd   |void   |lex_stuff_sv   |NN SV* sv|U32 flags
-AMpd   |void   |lex_unstuff    |NN char* ptr
-AMpd   |void   |lex_read_to    |NN char* ptr
-AMpd   |void   |lex_discard_to |NN char* ptr
-AMpd   |bool   |lex_next_chunk |U32 flags
-AMpd   |I32    |lex_peek_unichar|U32 flags
-AMpd   |I32    |lex_read_unichar|U32 flags
-AMpd   |void   |lex_read_space |U32 flags
+Axpd   |void   |lex_start      |NULLOK SV* line|NULLOK PerlIO *rsfp|U32 flags
+Axpd   |bool   |lex_bufutf8
+Axpd   |char*  |lex_grow_linestr|STRLEN len
+Axpd   |void   |lex_stuff_pvn  |NN const char* pv|STRLEN len|U32 flags
+Axpd   |void   |lex_stuff_pv   |NN const char* pv|U32 flags
+Axpd   |void   |lex_stuff_sv   |NN SV* sv|U32 flags
+Axpd   |void   |lex_unstuff    |NN char* ptr
+Axpd   |void   |lex_read_to    |NN char* ptr
+Axpd   |void   |lex_discard_to |NN char* ptr
+Axpd   |bool   |lex_next_chunk |U32 flags
+Axpd   |I32    |lex_peek_unichar|U32 flags
+Axpd   |I32    |lex_read_unichar|U32 flags
+Axpd   |void   |lex_read_space |U32 flags
 : Public parser API
-AMpd   |OP*    |parse_arithexpr|U32 flags
-AMpd   |OP*    |parse_termexpr |U32 flags
-AMpd   |OP*    |parse_listexpr |U32 flags
-AMpd   |OP*    |parse_fullexpr |U32 flags
-AMpd   |OP*    |parse_block    |U32 flags
-AMpd   |OP*    |parse_barestmt |U32 flags
-AMpd   |SV*    |parse_label    |U32 flags
-AMpd   |OP*    |parse_fullstmt |U32 flags
-AMpd   |OP*    |parse_stmtseq  |U32 flags
+Axpd   |OP*    |parse_arithexpr|U32 flags
+Axpd   |OP*    |parse_termexpr |U32 flags
+Axpd   |OP*    |parse_listexpr |U32 flags
+Axpd   |OP*    |parse_fullexpr |U32 flags
+Axpd   |OP*    |parse_block    |U32 flags
+Axpd   |OP*    |parse_barestmt |U32 flags
+Axpd   |SV*    |parse_label    |U32 flags
+Axpd   |OP*    |parse_fullstmt |U32 flags
+Axpd   |OP*    |parse_stmtseq  |U32 flags
+Axpd   |OP*    |parse_subsignature|U32 flags
 : Used in various files
 Apd    |void   |op_null        |NN OP* o
 : FIXME. Used by Data::Alias
 EXp    |void   |op_clear       |NN OP* o
 Ap     |void   |op_refcnt_lock
 Ap     |void   |op_refcnt_unlock
-Apdn   |OP*    |op_sibling_splice|NULLOK OP *parent|NULLOK OP *start \
+ApdT   |OP*    |op_sibling_splice|NULLOK OP *parent|NULLOK OP *start \
                |int del_count|NULLOK OP* insert
-Apdn   |OP*    |op_parent|NN OP *o
+ApdT   |OP*    |op_parent|NN OP *o
 #if defined(PERL_IN_OP_C)
-s      |OP*    |listkids       |NULLOK OP* o
+S      |OP*    |listkids       |NULLOK OP* o
 #endif
 p      |OP*    |list           |NULLOK OP* o
 Apd    |void   |load_module|U32 flags|NN SV* name|NULLOK SV* ver|...
@@ -963,36 +1136,61 @@ Ap       |void   |vload_module|U32 flags|NN SV* name|NULLOK SV* ver|NULLOK va_list* args
 : Used in perly.y
 p      |OP*    |localize       |NN OP *o|I32 lex
 ApdR   |I32    |looks_like_number|NN SV *const sv
-Apd    |UV     |grok_bin       |NN const char* start|NN STRLEN* len_p|NN I32* flags|NULLOK NV *result
 #if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_TOKE_C) || defined(PERL_IN_DQUOTE_C)
-EMpRX  |bool   |grok_bslash_x  |NN char** s             \
-                               |NN const char* const send       \
-                               |NN UV* uv                       \
-                               |NN const char** error_msg       \
-                               |const bool output_warning       \
-                               |const bool strict               \
-                               |const bool silence_non_portable \
+EpRX   |bool   |grok_bslash_x  |NN char** s                    \
+                               |NN const char* const send      \
+                               |NN UV* uv                      \
+                               |NN const char** message        \
+                               |NULLOK U32 * packed_warn       \
+                               |const bool strict              \
+                               |const bool allow_UV_MAX        \
                                |const bool utf8
-EMpRX  |char   |grok_bslash_c  |const char source|const bool output_warning
-EMpRX  |bool   |grok_bslash_o  |NN char** s             \
-                               |NN const char* const send       \
-                               |NN UV* uv                       \
-                               |NN const char** error_msg       \
-                               |const bool output_warning       \
-                               |const bool strict               \
-                               |const bool silence_non_portable \
+EpRX   |bool   |grok_bslash_c  |const char source              \
+                               |NN U8 * result                 \
+                               |NN const char** message        \
+                               |NULLOK U32 * packed_warn
+EpRX   |bool   |grok_bslash_o  |NN char** s                    \
+                               |NN const char* const send      \
+                               |NN UV* uv                      \
+                               |NN const char** message        \
+                               |NULLOK U32 * packed_warn       \
+                               |const bool strict              \
+                               |const bool allow_UV_MAX        \
                                |const bool utf8
-EMiR   |char*|form_short_octal_warning|NN const char * const s  \
-                               |const STRLEN len
-EiRn   |I32    |regcurly       |NN const char *s
-#endif
-Apd    |UV     |grok_hex       |NN const char* start|NN STRLEN* len_p|NN I32* flags|NULLOK NV *result
+EpRX   |const char *|form_alien_digit_msg|const U8 which       \
+                               |const STRLEN valids_len        \
+                               |NN const char * const first_bad\
+                               |NN const char * const send     \
+                               |const bool UTF                 \
+                               |const bool braced
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_TOKE_C)
+EiRT   |bool   |regcurly       |NN const char *s
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_TOKE_C) || defined(PERL_IN_DQUOTE_C) || defined(PERL_IN_UTF8_C)
+EpRX   |const char *|form_cp_too_large_msg|const U8 which      \
+                               |NULLOK const char * string     \
+                               |const Size_t len               \
+                               |const UV cp
+#endif
+AMpd   |UV     |grok_hex       |NN const char* start|NN STRLEN* len_p|NN I32* flags|NULLOK NV *result
 Apd    |int    |grok_infnan    |NN const char** sp|NN const char *send
 Apd    |int    |grok_number    |NN const char *pv|STRLEN len|NULLOK UV *valuep
 Apd    |int    |grok_number_flags|NN const char *pv|STRLEN len|NULLOK UV *valuep|U32 flags
 ApdR   |bool   |grok_numeric_radix|NN const char **sp|NN const char *send
-Apd    |UV     |grok_oct       |NN const char* start|NN STRLEN* len_p|NN I32* flags|NULLOK NV *result
-EXpn   |bool   |grok_atoUV     |NN const char* pv|NN UV* valptr|NULLOK const char** endptr
+ApMd   |UV     |grok_oct       |NN const char* start|NN STRLEN* len_p|NN I32* flags|NULLOK NV *result
+ApMd   |UV     |grok_bin       |NN const char* start|NN STRLEN* len_p|NN I32* flags|NULLOK NV *result
+Cp     |UV     |grok_bin_oct_hex|NN const char* start                      \
+                                |NN STRLEN* len_p                          \
+                                |NN I32* flags                             \
+                                |NULLOK NV *result                         \
+                                |const unsigned shift                      \
+                                |const U8 lookup_bit                       \
+                                |const char prefix
+#ifdef PERL_IN_NUMERIC_C
+S      |void   |output_non_portable|const U8 shift
+#endif
+EXpdT  |bool   |grok_atoUV     |NN const char* pv|NN UV* valptr|NULLOK const char** endptr
 : These are all indirectly referenced by globals.c. This is somewhat annoying.
 p      |int    |magic_clearenv |NN SV* sv|NN MAGIC* mg
 p      |int    |magic_clear_all_env|NN SV* sv|NN MAGIC* mg
@@ -1060,10 +1258,10 @@ pod     |SV*    |magic_methcall |NN SV *sv|NN const MAGIC *mg \
 Ap     |I32 *  |markstack_grow
 #if defined(USE_LOCALE_COLLATE)
 p      |int    |magic_setcollxfrm|NN SV* sv|NN MAGIC* mg
-pb     |char*  |mem_collxfrm   |NN const char* input_string|STRLEN len|NN STRLEN* xlen
+pbD    |char*  |mem_collxfrm   |NN const char* input_string|STRLEN len|NN STRLEN* xlen
 : Defined in locale.c, used only in sv.c
 #   if defined(PERL_IN_LOCALE_C) || defined(PERL_IN_SV_C) || defined(PERL_IN_MATHOMS_C)
-pM     |char*  |_mem_collxfrm  |NN const char* input_string    \
+p      |char*  |_mem_collxfrm  |NN const char* input_string    \
                                |STRLEN len                     \
                                |NN STRLEN* xlen                \
                                |bool utf8
@@ -1083,8 +1281,8 @@ Apd       |int    |mg_copy        |NN SV *sv|NN SV *nsv|NULLOK const char *key \
 : Defined in mg.c, used only in scope.c
 pd     |void   |mg_localize    |NN SV* sv|NN SV* nsv|bool setmagic
 Apd    |SV*    |sv_string_from_errnum|int errnum|NULLOK SV* tgtsv
-ApdRn  |MAGIC* |mg_find        |NULLOK const SV* sv|int type
-ApdRn  |MAGIC* |mg_findext     |NULLOK const SV* sv|int type|NULLOK const MGVTBL *vtbl
+ApdRT  |MAGIC* |mg_find        |NULLOK const SV* sv|int type
+ApdRT  |MAGIC* |mg_findext     |NULLOK const SV* sv|int type|NULLOK const MGVTBL *vtbl
 : exported for re.pm
 EXpR   |MAGIC* |mg_find_mglob  |NN SV* sv
 Apd    |int    |mg_free        |NN SV* sv
@@ -1092,49 +1290,49 @@ Apd     |void   |mg_free_type   |NN SV* sv|int how
 Apd    |void   |mg_freeext     |NN SV* sv|int how|NULLOK const MGVTBL *vtbl
 Apd    |int    |mg_get         |NN SV* sv
 ApdD   |U32    |mg_length      |NN SV* sv
-Apdn   |void   |mg_magical     |NN SV* sv
+ApdT   |void   |mg_magical     |NN SV* sv
 Apd    |int    |mg_set         |NN SV* sv
 Ap     |I32    |mg_size        |NN SV* sv
-Apn    |void   |mini_mktime    |NN struct tm *ptm
-AMmd   |OP*    |op_lvalue      |NULLOK OP* o|I32 type
+ApT    |void   |mini_mktime    |NN struct tm *ptm
+Axmd   |OP*    |op_lvalue      |NULLOK OP* o|I32 type
 poX    |OP*    |op_lvalue_flags|NULLOK OP* o|I32 type|U32 flags
-p      |void   |finalize_optree                |NN OP* o
-p      |void   |optimize_optree|NN OP* o
+pd     |void   |finalize_optree                |NN OP* o
+pd     |void   |optimize_optree|NN OP* o
 #if defined(PERL_IN_OP_C)
-s      |void   |optimize_op    |NN OP* o
-s      |void   |finalize_op    |NN OP* o
-s      |void   |move_proto_attr|NN OP **proto|NN OP **attrs \
+S      |void   |optimize_op    |NN OP* o
+S      |void   |finalize_op    |NN OP* o
+S      |void   |move_proto_attr|NN OP **proto|NN OP **attrs \
                                |NN const GV *name|bool curstash
 #endif
 : Used in op.c and pp_sys.c
 p      |int    |mode_from_discipline|NULLOK const char* s|STRLEN len
 Ap     |const char*    |moreswitches   |NN const char* s
 Ap     |NV     |my_atof        |NN const char *s
-AnpR   |NV     |my_strtod      |NN const char * const s|NULLOK char ** e
-Apr    |void   |my_exit        |U32 status
+ATdpR  |NV     |my_strtod      |NN const char * const s|NULLOK char ** e
+Aprd   |void   |my_exit        |U32 status
 Apr    |void   |my_failure_exit
 Ap     |I32    |my_fflush_all
-Anp    |Pid_t  |my_fork
-Anp    |void   |atfork_lock
-Anp    |void   |atfork_unlock
-Apmb   |I32    |my_lstat
+ATp    |Pid_t  |my_fork
+ATp    |void   |atfork_lock
+ATp    |void   |atfork_unlock
+ApMb   |I32    |my_lstat
 pX     |I32    |my_lstat_flags |NULLOK const U32 flags
 #if ! defined(HAS_MEMRCHR) && (defined(PERL_CORE) || defined(PERL_EXT))
-Exin   |void * |my_memrchr     |NN const char * s|const char c|const STRLEN len
+EeiT   |void * |my_memrchr     |NN const char * s|const char c|const STRLEN len
 #endif
 #if !defined(PERL_IMPLICIT_SYS)
 Ap     |I32    |my_pclose      |NULLOK PerlIO* ptr
 Ap     |PerlIO*|my_popen       |NN const char* cmd|NN const char* mode
 #endif
 Ap     |PerlIO*|my_popen_list  |NN const char* mode|int n|NN SV ** args
-Ap     |void   |my_setenv      |NULLOK const char* nam|NULLOK const char* val
-Apmb   |I32    |my_stat
+Apd    |void   |my_setenv      |NULLOK const char* nam|NULLOK const char* val
+ApMb   |I32    |my_stat
 pX     |I32    |my_stat_flags  |NULLOK const U32 flags
 Afp    |char * |my_strftime    |NN const char *fmt|int sec|int min|int hour|int mday|int mon|int year|int wday|int yday|int isdst
 : Used in pp_ctl.c
 p      |void   |my_unexec
-AbDMnPR        |UV     |NATIVE_TO_NEED |const UV enc|const UV ch
-AbDMnPR        |UV     |ASCII_TO_NEED  |const UV enc|const UV ch
+CbDTPR |UV     |NATIVE_TO_NEED |const UV enc|const UV ch
+CbDTPR |UV     |ASCII_TO_NEED  |const UV enc|const UV ch
 ApR    |OP*    |newANONLIST    |NULLOK OP* o
 ApR    |OP*    |newANONHASH    |NULLOK OP* o
 Ap     |OP*    |newANONSUB     |I32 floor|NULLOK OP* proto|NULLOK OP* block
@@ -1148,7 +1346,7 @@ Ap        |void   |newFORM        |I32 floor|NULLOK OP* o|NULLOK OP* block
 ApdR   |OP*    |newFOROP       |I32 flags|NULLOK OP* sv|NN OP* expr|NULLOK OP* block|NULLOK OP* cont
 ApdR   |OP*    |newGIVENOP     |NN OP* cond|NN OP* block|PADOFFSET defsv_off
 ApdR   |OP*    |newLOGOP       |I32 optype|I32 flags|NN OP *first|NN OP *other
-pM     |LOGOP* |alloc_LOGOP    |I32 type|NULLOK OP *first|NULLOK OP *other
+px     |LOGOP* |alloc_LOGOP    |I32 type|NULLOK OP *first|NULLOK OP *other
 ApdR   |OP*    |newLOOPEX      |I32 type|NN OP* label
 ApdR   |OP*    |newLOOPOP      |I32 flags|I32 debuggable|NULLOK OP* expr|NULLOK OP* block
 ApdR   |OP*    |newNULLLIST
@@ -1157,7 +1355,7 @@ Ap        |void   |newPROG        |NN OP* o
 ApdR   |OP*    |newRANGE       |I32 flags|NN OP* left|NN OP* right
 ApdR   |OP*    |newSLICEOP     |I32 flags|NULLOK OP* subscript|NULLOK OP* listop
 ApdR   |OP*    |newSTATEOP     |I32 flags|NULLOK char* label|NULLOK OP* o
-Apbm   |CV*    |newSUB         |I32 floor|NULLOK OP* o|NULLOK OP* proto \
+ApbM   |CV*    |newSUB         |I32 floor|NULLOK OP* o|NULLOK OP* proto \
                                |NULLOK OP* block
 pd     |CV *   |newXS_len_flags|NULLOK const char *name|STRLEN len \
                                |NN XSUBADDR_t subaddr\
@@ -1165,12 +1363,12 @@ pd      |CV *   |newXS_len_flags|NULLOK const char *name|STRLEN len \
                                |NULLOK const char *const proto \
                                |NULLOK SV **const_svp|U32 flags
 pX     |CV *   |newXS_deffile  |NN const char *name|NN XSUBADDR_t subaddr
-ApM    |CV *   |newXS_flags    |NULLOK const char *name|NN XSUBADDR_t subaddr\
+Apx    |CV *   |newXS_flags    |NULLOK const char *name|NN XSUBADDR_t subaddr\
                                |NN const char *const filename \
                                |NULLOK const char *const proto|U32 flags
-Apd    |CV*    |newXS          |NULLOK const char *name|NN XSUBADDR_t subaddr\
+ApdU   |CV*    |newXS          |NULLOK const char *name|NN XSUBADDR_t subaddr\
                                |NN const char *filename
-ApmdbR |AV*    |newAV
+ApMdbR |AV*    |newAV
 ApR    |OP*    |newAVREF       |NN OP* o
 ApdR   |OP*    |newBINOP       |I32 type|I32 flags|NULLOK OP* first|NULLOK OP* last
 ApR    |OP*    |newCVREF       |I32 flags|NULLOK OP* o
@@ -1179,13 +1377,13 @@ Am      |GV*    |newGVgen       |NN const char* pack
 ApR    |GV*    |newGVgen_flags |NN const char* pack|U32 flags
 ApR    |OP*    |newGVREF       |I32 type|NULLOK OP* o
 ApR    |OP*    |newHVREF       |NN OP* o
-ApmdbR |HV*    |newHV
+ApMdbR |HV*    |newHV
 ApR    |HV*    |newHVhv        |NULLOK HV *hv
-ApRbm  |IO*    |newIO
+ApRbM  |IO*    |newIO
 ApdR   |OP*    |newLISTOP      |I32 type|I32 flags|NULLOK OP* first|NULLOK OP* last
-AMpdRn |PADNAME *|newPADNAMEouter|NN PADNAME *outer
-AMpdRn |PADNAME *|newPADNAMEpvn|NN const char *s|STRLEN len
-AMpdRn |PADNAMELIST *|newPADNAMELIST|size_t max
+AxpdRT |PADNAME *|newPADNAMEouter|NN PADNAME *outer
+AxpdRT |PADNAME *|newPADNAMEpvn|NN const char *s|STRLEN len
+AxpdRT |PADNAMELIST *|newPADNAMELIST|size_t max
 #ifdef USE_ITHREADS
 ApdR   |OP*    |newPADOP       |I32 type|I32 flags|NN SV* sv
 #endif
@@ -1210,8 +1408,8 @@ ApdR      |SV*    |newSVpv_share  |NULLOK const char* s|U32 hash
 AfpdR  |SV*    |newSVpvf       |NN const char *const pat|...
 ApR    |SV*    |vnewSVpvf      |NN const char *const pat|NULLOK va_list *const args
 Apd    |SV*    |newSVrv        |NN SV *const rv|NULLOK const char *const classname
-ApmbdR |SV*    |newSVsv        |NULLOK SV *const old
-ApmdR  |SV*    |newSVsv_nomg   |NULLOK SV *const old
+ApMbdR |SV*    |newSVsv        |NULLOK SV *const old
+AmdR   |SV*    |newSVsv_nomg   |NULLOK SV *const old
 ApR    |SV*    |newSVsv_flags  |NULLOK SV *const old|I32 flags
 ApdR   |SV*    |newSV_type     |const svtype type
 ApdR   |OP*    |newUNOP        |I32 type|I32 flags|NULLOK OP* first
@@ -1236,7 +1434,7 @@ Apd       |void   |cv_set_call_checker_flags|NN CV *cv \
                                          |NN Perl_call_checker ckfun \
                                          |NN SV *ckobj|U32 ckflags
 Apd    |void   |wrap_op_checker|Optype opcode|NN Perl_check_t new_checker|NN Perl_check_t *old_checker_p
-AMpd   |void   |wrap_keyword_plugin|NN Perl_keyword_plugin_t new_plugin|NN Perl_keyword_plugin_t *old_plugin_p
+Axpd   |void   |wrap_keyword_plugin|NN Perl_keyword_plugin_t new_plugin|NN Perl_keyword_plugin_t *old_plugin_p
 ApR    |PERL_SI*|new_stackinfo|I32 stitems|I32 cxitems
 Ap     |char*  |scan_vstring   |NN const char *s|NN const char *const e \
                                |NN SV *sv
@@ -1253,15 +1451,10 @@ Apd     |SV*    |vstringify     |NN SV *vs
 Apd    |int    |vcmp           |NN SV *lhv|NN SV *rhv
 : Used in pp_hot.c and pp_sys.c
 p      |PerlIO*|nextargv       |NN GV* gv|bool nomagicopen
-#ifdef HAS_MEMMEM
-AdnopP |char*  |ninstr         |NN const char* big|NN const char* bigend \
-                               |NN const char* little|NN const char* lend
-#else
-AdnpP  |char*  |ninstr         |NN const char* big|NN const char* bigend \
+AdMTpP |char*  |ninstr         |NN const char* big|NN const char* bigend \
                                |NN const char* little|NN const char* lend
-#endif
 Apd    |void   |op_free        |NULLOK OP* arg
-Mp     |OP*    |op_unscope     |NULLOK OP* o
+xp     |OP*    |op_unscope     |NULLOK OP* o
 #ifdef PERL_CORE
 p      |void   |opslab_free    |NN OPSLAB *slab
 p      |void   |opslab_free_nopad|NN OPSLAB *slab
@@ -1275,7 +1468,7 @@ p |void   |package_version|NN OP* v
 p      |PADOFFSET|allocmy      |NN const char *const name|const STRLEN len\
                                |const U32 flags
 #ifdef USE_ITHREADS
-AMp    |PADOFFSET|alloccopstash|NN HV *hv
+Adxp   |PADOFFSET|alloccopstash|NN HV *hv
 #endif
 : Used in perly.y
 pR     |OP*    |oopsAV         |NN OP* o
@@ -1286,12 +1479,12 @@ pR      |OP*    |oopsHV         |NN OP* o
 p      |void   |peep           |NULLOK OP* o
 p      |void   |rpeep          |NULLOK OP* o
 : Defined in doio.c, used only in pp_hot.c
-dopM   |PerlIO*|start_glob     |NN SV *tmpglob|NN IO *io
+dopx   |PerlIO*|start_glob     |NN SV *tmpglob|NN IO *io
 
 Ap     |void   |reentrant_size
 Ap     |void   |reentrant_init
 Ap     |void   |reentrant_free
-Anp    |void*  |reentrant_retry|NN const char *f|...
+ATp    |void*  |reentrant_retry|NN const char *f|...
 
 : "Very" special - can't use the O flag for this one:
 : (The rename from perl_atexit to Perl_call_atexit was in 864dbfa3ca8032ef)
@@ -1309,46 +1502,50 @@ ApdO    |AV*    |get_av         |NN const char *name|I32 flags
 ApdO   |HV*    |get_hv         |NN const char *name|I32 flags
 ApdO   |CV*    |get_cv         |NN const char* name|I32 flags
 Apd    |CV*    |get_cvn_flags  |NN const char* name|STRLEN len|I32 flags
-Ando   |const char*|Perl_setlocale|const int category|NULLOK const char* locale
+ATdo   |const char*|Perl_setlocale|const int category|NULLOK const char* locale
 #if defined(HAS_NL_LANGINFO) && defined(PERL_LANGINFO_H)
-Ando   |const char*|Perl_langinfo|const nl_item item
+ATdo   |const char*|Perl_langinfo|const nl_item item
 #else
-Ando   |const char*|Perl_langinfo|const int item
+ATdo   |const char*|Perl_langinfo|const int item
 #endif
-ApOM   |int    |init_i18nl10n  |int printwarn
-AbpOM  |int    |init_i18nl14n  |int printwarn
+CpO    |int    |init_i18nl10n  |int printwarn
+CbpOD  |int    |init_i18nl14n  |int printwarn
 p      |char*  |my_strerror    |const int errnum
-Xpn    |void   |_warn_problematic_locale
+XpT    |void   |_warn_problematic_locale
 Xp     |void   |set_numeric_underlying
 Xp     |void   |set_numeric_standard
 Xp     |bool   |_is_in_locale_category|const bool compiling|const int category
-Apdn   |void   |switch_to_global_locale
-Apdn   |bool   |sync_locale
-ApMn   |void   |thread_locale_init
-ApMn   |void   |thread_locale_term
+ApdT   |void   |switch_to_global_locale
+ApdT   |bool   |sync_locale
+ApxT   |void   |thread_locale_init
+ApxT   |void   |thread_locale_term
 ApdO   |void   |require_pv     |NN const char* pv
-Abpd   |void   |pack_cat       |NN SV *cat|NN const char *pat|NN const char *patend \
+AbpdM  |void   |pack_cat       |NN SV *cat|NN const char *pat|NN const char *patend \
                                |NN SV **beglist|NN SV **endlist|NN SV ***next_in_list|U32 flags
 Apd    |void   |packlist       |NN SV *cat|NN const char *pat|NN const char *patend|NN SV **beglist|NN SV **endlist
 #if defined(PERL_USES_PL_PIDSTATUS) && defined(PERL_IN_UTIL_C)
-s      |void   |pidgone        |Pid_t pid|int status
+S      |void   |pidgone        |Pid_t pid|int status
 #endif
 : Used in perly.y
 p      |OP*    |pmruntime      |NN OP *o|NN OP *expr|NULLOK OP *repl \
                                |UV flags|I32 floor
 #if defined(PERL_IN_OP_C)
-s      |OP*    |pmtrans        |NN OP* o|NN OP* expr|NN OP* repl
+S      |OP*    |pmtrans        |NN OP* o|NN OP* expr|NN OP* repl
 #endif
+p      |void   |invmap_dump    |NN SV* invlist|NN UV * map
 Ap     |void   |pop_scope
 Ap     |void   |push_scope
-Apmb   |OP*    |ref            |NULLOK OP* o|I32 type
+#if defined(PERL_IN_PERLY_C) || defined(PERL_IN_OP_C) || defined(PERL_IN_TOKE_C)
+ApMb   |OP*    |ref            |NULLOK OP* o|I32 type
+#endif
 #if defined(PERL_IN_OP_C)
-s      |OP*    |refkids        |NULLOK OP* o|I32 type
+S      |OP*    |refkids        |NULLOK OP* o|I32 type
 #endif
 Ap     |void   |regdump        |NN const regexp* r
+CiTop  |struct regexp *|ReANY  |NN const REGEXP * const re
 #if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_PERL_C) || defined(PERL_IN_UTF8_C)
 EXpR   |SV*    |_new_invlist_C_array|NN const UV* const list
-EXMp   |bool   |_invlistEQ     |NN SV* const a|NN SV* const b|const bool complement_b
+EX   |bool   |_invlistEQ     |NN SV* const a|NN SV* const b|const bool complement_b
 #endif
 Ap     |I32    |pregexec       |NN REGEXP * const prog|NN char* stringarg \
                                |NN char* strend|NN char* strbeg \
@@ -1370,14 +1567,14 @@ p       |REGEXP*|re_op_compile  |NULLOK SV ** const patternp \
                                |NULLOK bool *is_bare_re \
                                |const U32 rx_flags|const U32 pm_flags
 Ap     |REGEXP*|re_compile     |NN SV * const pattern|U32 orig_rx_flags
-Ap     |char*  |re_intuit_start|NN REGEXP * const rx \
+Cp     |char*  |re_intuit_start|NN REGEXP * const rx \
                                |NULLOK SV* sv \
                                |NN const char* const strbeg \
                                |NN char* strpos \
                                |NN char* strend \
                                |const U32 flags \
                                |NULLOK re_scream_pos_data *data
-Ap     |SV*    |re_intuit_string|NN REGEXP  *const r
+Cp     |SV*    |re_intuit_string|NN REGEXP  *const r
 Ap     |I32    |regexec_flags  |NN REGEXP *const rx|NN char *stringarg \
                                |NN char *strend|NN char *strbeg \
                                |SSize_t minend|NN SV *sv \
@@ -1404,18 +1601,18 @@ EXp     |I32|reg_numbered_buff_length|NN REGEXP * const rx|NN const SV * const sv|co
 : FIXME - is anything in re using this now?
 EXp    |SV*|reg_qr_package|NN REGEXP * const rx
 
-Anp    |void   |repeatcpy      |NN char* to|NN const char* from|I32 len|IV count
-AdnpP  |char*  |rninstr        |NN const char* big|NN const char* bigend \
+ATp    |void   |repeatcpy      |NN char* to|NN const char* from|I32 len|IV count
+AdTpP  |char*  |rninstr        |NN const char* big|NN const char* bigend \
                                |NN const char* little|NN const char* lend
-Ap     |Sighandler_t|rsignal   |int i|Sighandler_t t
+Apd    |Sighandler_t|rsignal   |int i|Sighandler_t t
 : Used in pp_sys.c
 p      |int    |rsignal_restore|int i|NULLOK Sigsave_t* t
 : Used in pp_sys.c
 p      |int    |rsignal_save   |int i|Sighandler_t t1|NN Sigsave_t* save
 Ap     |Sighandler_t|rsignal_state|int i
 #if defined(PERL_IN_PP_CTL_C)
-s      |void   |rxres_free     |NN void** rsp
-s      |void   |rxres_restore  |NN void **rsp|NN REGEXP *rx
+S      |void   |rxres_free     |NN void** rsp
+S      |void   |rxres_restore  |NN void **rsp|NN REGEXP *rx
 #endif
 : Used in pp_hot.c
 p      |void   |rxres_save     |NN void **rsp|NN REGEXP *rx
@@ -1424,7 +1621,7 @@ p |void   |rxres_save     |NN void **rsp|NN REGEXP *rx
 p      |I32    |same_dirent    |NN const char* a|NN const char* b
 #endif
 Apda   |char*  |savepv         |NULLOK const char* pv
-Apda   |char*  |savepvn        |NULLOK const char* pv|I32 len
+Apda   |char*  |savepvn        |NULLOK const char* pv|Size_t len
 Apda   |char*  |savesharedpv   |NULLOK const char* pv
 
 : NULLOK only to suppress a compiler warning
@@ -1434,12 +1631,12 @@ Apda    |char*  |savesharedsvpv |NN SV *sv
 Apda   |char*  |savesvpv       |NN SV* sv
 Ap     |void   |savestack_grow
 Ap     |void   |savestack_grow_cnt     |I32 need
-Amp    |void   |save_aelem     |NN AV* av|SSize_t idx|NN SV **sptr
+Am     |void   |save_aelem     |NN AV* av|SSize_t idx|NN SV **sptr
 Ap     |void   |save_aelem_flags|NN AV* av|SSize_t idx|NN SV **sptr \
                                 |const U32 flags
 Ap     |I32    |save_alloc     |I32 size|I32 pad
-Ap     |void   |save_aptr      |NN AV** aptr
-Ap     |AV*    |save_ary       |NN GV* gv
+Apdh   |void   |save_aptr      |NN AV** aptr
+Apdh   |AV*    |save_ary       |NN GV* gv
 Ap     |void   |save_bool      |NN bool* boolp
 Ap     |void   |save_clearsv   |NN SV** svp
 Ap     |void   |save_delete    |NN HV *hv|NN char *key|I32 klen
@@ -1447,57 +1644,59 @@ Ap      |void   |save_hdelete   |NN HV *hv|NN SV *keysv
 Ap     |void   |save_adelete   |NN AV *av|SSize_t key
 Ap     |void   |save_destructor|DESTRUCTORFUNC_NOCONTEXT_t f|NN void* p
 Ap     |void   |save_destructor_x|DESTRUCTORFUNC_t f|NULLOK void* p
-Apmb   |void   |save_freesv    |NULLOK SV* sv
+ApMb   |void   |save_freesv    |NULLOK SV* sv
 : Used in SAVEFREOP(), used in op.c, pp_ctl.c
-Apmb   |void   |save_freeop    |NULLOK OP* o
-Apmb   |void   |save_freepv    |NULLOK char* pv
+ApMb   |void   |save_freeop    |NULLOK OP* o
+ApMb   |void   |save_freepv    |NULLOK char* pv
 Ap     |void   |save_generic_svref|NN SV** sptr
 Ap     |void   |save_generic_pvref|NN char** str
 Ap     |void   |save_shared_pvref|NN char** str
 Adp    |void   |save_gp        |NN GV* gv|I32 empty
-Ap     |HV*    |save_hash      |NN GV* gv
+Apdh   |HV*    |save_hash      |NN GV* gv
 Ap     |void   |save_hints
-Amp    |void   |save_helem     |NN HV *hv|NN SV *key|NN SV **sptr
+Am     |void   |save_helem     |NN HV *hv|NN SV *key|NN SV **sptr
 Ap     |void   |save_helem_flags|NN HV *hv|NN SV *key|NN SV **sptr|const U32 flags
-Ap     |void   |save_hptr      |NN HV** hptr
+Apdh   |void   |save_hptr      |NN HV** hptr
 Ap     |void   |save_I16       |NN I16* intp
 Ap     |void   |save_I32       |NN I32* intp
 Ap     |void   |save_I8        |NN I8* bytep
 Ap     |void   |save_int       |NN int* intp
-Ap     |void   |save_item      |NN SV* item
+Apdh   |void   |save_item      |NN SV* item
 Ap     |void   |save_iv        |NN IV *ivp
-Abp    |void   |save_list      |NN SV** sarg|I32 maxsarg
-Abp    |void   |save_long      |NN long* longp
-Apmb   |void   |save_mortalizesv|NN SV* sv
-Abp    |void   |save_nogv      |NN GV* gv
+AbpDdh |void   |save_list      |NN SV** sarg|I32 maxsarg
+AbpD   |void   |save_long      |NN long* longp
+ApMb   |void   |save_mortalizesv|NN SV* sv
+AbpD   |void   |save_nogv      |NN GV* gv
 : Used in SAVEFREOP(), used in gv.c, op.c, perl.c, pp_ctl.c, pp_sort.c
-Apmb   |void   |save_op
-Ap     |SV*    |save_scalar    |NN GV* gv
+ApMb   |void   |save_op
+Apdh   |SV*    |save_scalar    |NN GV* gv
 Ap     |void   |save_pptr      |NN char** pptr
 Ap     |void   |save_vptr      |NN void *ptr
 Ap     |void   |save_re_context
 Ap     |void   |save_padsv_and_mortalize|PADOFFSET off
 Ap     |void   |save_sptr      |NN SV** sptr
 Xp     |void   |save_strlen    |NN STRLEN* ptr
-Ap     |SV*    |save_svref     |NN SV** sptr
-AMpo   |void   |savetmps
+Apdh   |SV*    |save_svref     |NN SV** sptr
+Axpo   |void   |savetmps
 Ap     |void   |save_pushptr   |NULLOK void *const ptr|const int type
 Ap     |void   |save_pushi32ptr|const I32 i|NULLOK void *const ptr|const int type
 : Used by SAVESWITCHSTACK() in pp.c
 Ap     |void   |save_pushptrptr|NULLOK void *const ptr1 \
                                |NULLOK void *const ptr2|const int type
 #if defined(PERL_IN_SCOPE_C)
-s      |void   |save_pushptri32ptr|NULLOK void *const ptr1|const I32 i \
+S      |void   |save_pushptri32ptr|NULLOK void *const ptr1|const I32 i \
                                |NULLOK void *const ptr2|const int type
 #endif
+Xiop   |I32    |TOPMARK
+Xiop   |I32    |POPMARK
 : Used in perly.y
 p      |OP*    |sawparens      |NULLOK OP* o
 Apd    |OP*    |op_contextualize|NN OP* o|I32 context
 : Used in perly.y
 p      |OP*    |scalar         |NULLOK OP* o
 #if defined(PERL_IN_OP_C)
-s      |OP*    |scalarkids     |NULLOK OP* o
-s      |OP*    |scalarseq      |NULLOK OP* o
+S      |OP*    |scalarkids     |NULLOK OP* o
+S      |OP*    |scalarseq      |NULLOK OP* o
 #endif
 : Used in pp_ctl.c
 p      |OP*    |scalarvoid     |NN OP* o
@@ -1505,70 +1704,77 @@ Apd     |NV     |scan_bin       |NN const char* start|STRLEN len|NN STRLEN* retlen
 Apd    |NV     |scan_hex       |NN const char* start|STRLEN len|NN STRLEN* retlen
 Ap     |char*  |scan_num       |NN const char* s|NN YYSTYPE *lvalp
 Apd    |NV     |scan_oct       |NN const char* start|STRLEN len|NN STRLEN* retlen
-AMpd   |OP*    |op_scope       |NULLOK OP* o
+Axpd   |OP*    |op_scope       |NULLOK OP* o
 : Only used by perl.c/miniperl.c, but defined in caretx.c
-px     |void   |set_caret_X
+pe     |void   |set_caret_X
 Apd    |void   |setdefout      |NN GV* gv
 Ap     |HEK*   |share_hek      |NN const char* str|SSize_t len|U32 hash
-#if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
+#ifdef PERL_USE_3ARG_SIGHANDLER
 : Used in perl.c
-np     |Signal_t |sighandler   |int sig|NULLOK siginfo_t *info|NULLOK void *uap
-Anp    |Signal_t |csighandler  |int sig|NULLOK siginfo_t *info|NULLOK void *uap
+Tp     |Signal_t |sighandler   |int sig|NULLOK Siginfo_t *info|NULLOK void *uap
+ATp    |Signal_t |csighandler  |int sig|NULLOK Siginfo_t *info|NULLOK void *uap
 #else
-np     |Signal_t |sighandler   |int sig
-Anp    |Signal_t |csighandler  |int sig
-#endif
+Tp     |Signal_t |sighandler   |int sig
+ATp    |Signal_t |csighandler  |int sig
+#endif
+Tp     |Signal_t |sighandler1  |int sig
+ATp    |Signal_t |csighandler1 |int sig
+Tp     |Signal_t |sighandler3  |int sig|NULLOK Siginfo_t *info|NULLOK void *uap
+ATp    |Signal_t |csighandler3 |int sig|NULLOK Siginfo_t *info|NULLOK void *uap
+ATp    |Signal_t |perly_sighandler     |int sig|NULLOK Siginfo_t *info|NULLOK void *uap|bool safe
 Ap     |SV**   |stack_grow     |NN SV** sp|NN SV** p|SSize_t n
 Ap     |I32    |start_subparse |I32 is_format|U32 flags
 Xp     |void   |init_named_cv  |NN CV *cv|NN OP *nameop
 : Used in pp_ctl.c
 p      |void   |sub_crush_depth|NN CV* cv
-Apbmd  |bool   |sv_2bool       |NN SV *const sv
+ApbMd  |bool   |sv_2bool       |NN SV *const sv
 Apd    |bool   |sv_2bool_flags |NN SV *sv|I32 flags
 Apd    |CV*    |sv_2cv         |NULLOK SV* sv|NN HV **const st|NN GV **const gvp \
                                |const I32 lref
 Apd    |IO*    |sv_2io         |NN SV *const sv
 #if defined(PERL_IN_SV_C)
-s      |bool   |glob_2number   |NN GV* const gv
+S      |bool   |glob_2number   |NN GV* const gv
 #endif
-Apmb   |IV     |sv_2iv         |NN SV *sv
+ApMb   |IV     |sv_2iv         |NN SV *sv
 Apd    |IV     |sv_2iv_flags   |NN SV *const sv|const I32 flags
 Apd    |SV*    |sv_2mortal     |NULLOK SV *const sv
 Apd    |NV     |sv_2nv_flags   |NN SV *const sv|const I32 flags
 : Used in pp.c, pp_hot.c, sv.c
-pMd    |SV*    |sv_2num        |NN SV *const sv
-Apmb   |char*  |sv_2pv         |NN SV *sv|NULLOK STRLEN *lp
+pxd    |SV*    |sv_2num        |NN SV *const sv
+ApMb   |char*  |sv_2pv         |NN SV *sv|NULLOK STRLEN *lp
 Apd    |char*  |sv_2pv_flags   |NN SV *const sv|NULLOK STRLEN *const lp|const I32 flags
-Apd    |char*  |sv_2pvutf8     |NN SV *sv|NULLOK STRLEN *const lp
-Apd    |char*  |sv_2pvbyte     |NN SV *sv|NULLOK STRLEN *const lp
-Abp    |char*  |sv_pvn_nomg    |NN SV* sv|NULLOK STRLEN* lp
-Apmb   |UV     |sv_2uv         |NN SV *sv
+ApdMb  |char*  |sv_2pvutf8     |NN SV *sv|NULLOK STRLEN *const lp
+Ap     |char*  |sv_2pvutf8_flags       |NN SV *sv|NULLOK STRLEN *const lp|const U32 flags
+ApdMb  |char*  |sv_2pvbyte     |NN SV *sv|NULLOK STRLEN *const lp
+Ap     |char*  |sv_2pvbyte_flags       |NN SV *sv|NULLOK STRLEN *const lp|const U32 flags
+AbpD   |char*  |sv_pvn_nomg    |NN SV* sv|NULLOK STRLEN* lp
+ApMb   |UV     |sv_2uv         |NN SV *sv
 Apd    |UV     |sv_2uv_flags   |NN SV *const sv|const I32 flags
-Abpd   |IV     |sv_iv          |NN SV* sv
-Abpd   |UV     |sv_uv          |NN SV* sv
-Abpd   |NV     |sv_nv          |NN SV* sv
-Abpd   |char*  |sv_pvn         |NN SV *sv|NN STRLEN *lp
-Abpd   |char*  |sv_pvutf8n     |NN SV *sv|NN STRLEN *lp
-Abpd   |char*  |sv_pvbyten     |NN SV *sv|NN STRLEN *lp
+AbpdD  |IV     |sv_iv          |NN SV* sv
+AbpdD  |UV     |sv_uv          |NN SV* sv
+AbpdD  |NV     |sv_nv          |NN SV* sv
+AbpdD  |char*  |sv_pvn         |NN SV *sv|NN STRLEN *lp
+AbpdD  |char*  |sv_pvutf8n     |NN SV *sv|NN STRLEN *lp
+AbpdD  |char*  |sv_pvbyten     |NN SV *sv|NN STRLEN *lp
 Apd    |I32    |sv_true        |NULLOK SV *const sv
 #if defined(PERL_IN_SV_C)
-sd     |void   |sv_add_arena   |NN char *const ptr|const U32 size \
+Sd     |void   |sv_add_arena   |NN char *const ptr|const U32 size \
                                |const U32 flags
 #endif
-Apdn   |void   |sv_backoff     |NN SV *const sv
+ApdT   |void   |sv_backoff     |NN SV *const sv
 Apd    |SV*    |sv_bless       |NN SV *const sv|NN HV *const stash
 #if defined(PERL_DEBUG_READONLY_COW)
 p      |void   |sv_buf_to_ro   |NN SV *sv
 # if defined(PERL_IN_SV_C)
-s      |void   |sv_buf_to_rw   |NN SV *sv
+S      |void   |sv_buf_to_rw   |NN SV *sv
 # endif
 #endif
 Afpd   |void   |sv_catpvf      |NN SV *const sv|NN const char *const pat|...
 Apd    |void   |sv_vcatpvf     |NN SV *const sv|NN const char *const pat \
                                |NULLOK va_list *const args
 Apd    |void   |sv_catpv       |NN SV *const sv|NULLOK const char* ptr
-Apmdb  |void   |sv_catpvn      |NN SV *dsv|NN const char *sstr|STRLEN len
-Apmdb  |void   |sv_catsv       |NN SV *dstr|NULLOK SV *sstr
+ApMdb  |void   |sv_catpvn      |NN SV *dsv|NN const char *sstr|STRLEN len
+ApMdb  |void   |sv_catsv       |NN SV *dstr|NULLOK SV *sstr
 Apd    |void   |sv_chop        |NN SV *const sv|NULLOK const char *const ptr
 : Used only in perl.c
 pd     |I32    |sv_clean_all
@@ -1576,43 +1782,44 @@ pd      |I32    |sv_clean_all
 pd     |void   |sv_clean_objs
 Apd    |void   |sv_clear       |NN SV *const orig_sv
 #if defined(PERL_IN_SV_C)
-s      |bool   |curse          |NN SV * const sv|const bool check_refcnt
+S      |bool   |curse          |NN SV * const sv|const bool check_refcnt
 #endif
-Aopd   |I32    |sv_cmp         |NULLOK SV *const sv1|NULLOK SV *const sv2
+AMpd   |I32    |sv_cmp         |NULLOK SV *const sv1|NULLOK SV *const sv2
 Apd    |I32    |sv_cmp_flags   |NULLOK SV *const sv1|NULLOK SV *const sv2 \
                                |const U32 flags
-Aopd   |I32    |sv_cmp_locale  |NULLOK SV *const sv1|NULLOK SV *const sv2
+AMpd   |I32    |sv_cmp_locale  |NULLOK SV *const sv1|NULLOK SV *const sv2
 Apd    |I32    |sv_cmp_locale_flags    |NULLOK SV *const sv1 \
                                |NULLOK SV *const sv2|const U32 flags
 #if defined(USE_LOCALE_COLLATE)
-Apbmd  |char*  |sv_collxfrm    |NN SV *const sv|NN STRLEN *const nxp
+ApbMd  |char*  |sv_collxfrm    |NN SV *const sv|NN STRLEN *const nxp
 Apd    |char*  |sv_collxfrm_flags      |NN SV *const sv|NN STRLEN *const nxp|I32 const flags
 #endif
 Apd    |int    |getcwd_sv      |NN SV* sv
 Apd    |void   |sv_dec         |NULLOK SV *const sv
 Apd    |void   |sv_dec_nomg    |NULLOK SV *const sv
-Ap     |void   |sv_dump        |NULLOK SV* sv
+Apd    |void   |sv_dump        |NULLOK SV* sv
 ApdR   |bool   |sv_derived_from|NN SV* sv|NN const char *const name
 ApdR   |bool   |sv_derived_from_sv|NN SV* sv|NN SV *namesv|U32 flags
 ApdR   |bool   |sv_derived_from_pv|NN SV* sv|NN const char *const name|U32 flags
 ApdR   |bool   |sv_derived_from_pvn|NN SV* sv|NN const char *const name \
                                     |const STRLEN len|U32 flags
+ApdRx  |bool   |sv_isa_sv      |NN SV* sv|NN SV* namesv
 ApdR   |bool   |sv_does        |NN SV* sv|NN const char *const name
 ApdR   |bool   |sv_does_sv     |NN SV* sv|NN SV* namesv|U32 flags
 ApdR   |bool   |sv_does_pv     |NN SV* sv|NN const char *const name|U32 flags
 ApdR   |bool   |sv_does_pvn    |NN SV* sv|NN const char *const name|const STRLEN len \
                                 |U32 flags
-Apbmd  |I32    |sv_eq          |NULLOK SV* sv1|NULLOK SV* sv2
+ApbMd  |I32    |sv_eq          |NULLOK SV* sv1|NULLOK SV* sv2
 Apd    |I32    |sv_eq_flags    |NULLOK SV* sv1|NULLOK SV* sv2|const U32 flags
 Apd    |void   |sv_free        |NULLOK SV *const sv
-poMX   |void   |sv_free2       |NN SV *const sv|const U32 refcnt
+poxX   |void   |sv_free2       |NN SV *const sv|const U32 refcnt
 : Used only in perl.c
 pd     |void   |sv_free_arenas
 Apd    |char*  |sv_gets        |NN SV *const sv|NN PerlIO *const fp|I32 append
 Apd    |char*  |sv_grow        |NN SV *const sv|STRLEN newlen
 Apd    |void   |sv_inc         |NULLOK SV *const sv
 Apd    |void   |sv_inc_nomg    |NULLOK SV *const sv
-Apmdb  |void   |sv_insert      |NN SV *const bigstr|const STRLEN offset \
+ApMdb  |void   |sv_insert      |NN SV *const bigstr|const STRLEN offset \
                                |const STRLEN len|NN const char *const little \
                                |const STRLEN littlelen
 Apd    |void   |sv_insert_flags|NN SV *const bigstr|const STRLEN offset|const STRLEN len \
@@ -1627,11 +1834,11 @@ Apd     |void   |sv_magic       |NN SV *const sv|NULLOK SV *const obj|const int how \
 Apd    |MAGIC *|sv_magicext    |NN SV *const sv|NULLOK SV *const obj|const int how \
                                |NULLOK const MGVTBL *const vtbl|NULLOK const char *const name \
                                |const I32 namlen
-Ei   |bool   |sv_only_taint_gmagic|NN SV *sv
+EiTp   |bool   |sv_only_taint_gmagic|NN SV *sv
 : exported for re.pm
 EXp    |MAGIC *|sv_magicext_mglob|NN SV *sv
-ApdbmR |SV*    |sv_mortalcopy  |NULLOK SV *const oldsv
-XpR    |SV*    |sv_mortalcopy_flags|NULLOK SV *const oldsv|U32 flags
+ApdbMR |SV*    |sv_mortalcopy  |NULLOK SV *const oldsv
+ApdR   |SV*    |sv_mortalcopy_flags|NULLOK SV *const oldsv|U32 flags
 ApdR   |SV*    |sv_newmortal
 Apd    |SV*    |sv_newref      |NULLOK SV *const sv
 Ap     |char*  |sv_peek        |NULLOK SV* sv
@@ -1641,7 +1848,7 @@ Apd       |STRLEN |sv_pos_u2b_flags|NN SV *const sv|STRLEN uoffset \
 Apd    |void   |sv_pos_b2u     |NULLOK SV *const sv|NN I32 *const offsetp
 Apd    |STRLEN |sv_pos_b2u_flags|NN SV *const sv|STRLEN const offset \
                                 |U32 flags
-Apmdb  |char*  |sv_pvn_force   |NN SV* sv|NULLOK STRLEN* lp
+ApMdb  |char*  |sv_pvn_force   |NN SV* sv|NULLOK STRLEN* lp
 Apd    |char*  |sv_pvutf8n_force|NN SV *const sv|NULLOK STRLEN *const lp
 Apd    |char*  |sv_pvbyten_force|NN SV *const sv|NULLOK STRLEN *const lp
 Apd    |char*  |sv_recode_to_utf8      |NN SV* sv|NN SV *encoding
@@ -1657,7 +1864,7 @@ p |void   |sv_resetpvn    |NULLOK const char* s|STRLEN len \
 Afpd   |void   |sv_setpvf      |NN SV *const sv|NN const char *const pat|...
 Apd    |void   |sv_vsetpvf     |NN SV *const sv|NN const char *const pat|NULLOK va_list *const args
 Apd    |void   |sv_setiv       |NN SV *const sv|const IV num
-Apdb   |void   |sv_setpviv     |NN SV *const sv|const IV num
+ApdbD  |void   |sv_setpviv     |NN SV *const sv|const IV num
 Apd    |void   |sv_setuv       |NN SV *const sv|const UV num
 Apd    |void   |sv_setnv       |NN SV *const sv|const NV num
 Apd    |SV*    |sv_setref_iv   |NN SV *const rv|NULLOK const char *const classname|const IV iv
@@ -1671,16 +1878,16 @@ Apd     |void   |sv_setpv       |NN SV *const sv|NULLOK const char *const ptr
 Apd    |void   |sv_setpvn      |NN SV *const sv|NULLOK const char *const ptr|const STRLEN len
 Apd    |char  *|sv_setpv_bufsize|NN SV *const sv|const STRLEN cur|const STRLEN len
 Xp     |void   |sv_sethek      |NN SV *const sv|NULLOK const HEK *const hek
-Apmdb  |void   |sv_setsv       |NN SV *dstr|NULLOK SV *sstr
-Apmdb  |void   |sv_taint       |NN SV* sv
+ApMdb  |void   |sv_setsv       |NN SV *dstr|NULLOK SV *sstr
+ApMdb  |void   |sv_taint       |NN SV* sv
 ApdR   |bool   |sv_tainted     |NN SV *const sv
 Apd    |int    |sv_unmagic     |NN SV *const sv|const int type
 Apd    |int    |sv_unmagicext  |NN SV *const sv|const int type|NULLOK MGVTBL *vtbl
-Apdmb  |void   |sv_unref       |NN SV* sv
+ApdMb  |void   |sv_unref       |NN SV* sv
 Apd    |void   |sv_unref_flags |NN SV *const ref|const U32 flags
 Apd    |void   |sv_untaint     |NN SV *const sv
 Apd    |void   |sv_upgrade     |NN SV *const sv|svtype new_type
-Apdmb  |void   |sv_usepvn      |NN SV* sv|NULLOK char* ptr|STRLEN len
+ApdMb  |void   |sv_usepvn      |NN SV* sv|NULLOK char* ptr|STRLEN len
 Apd    |void   |sv_usepvn_flags|NN SV *const sv|NULLOK char* ptr|const STRLEN len\
                                |const U32 flags
 Apd    |void   |sv_vcatpvfn    |NN SV *const sv|NN const char *const pat|const STRLEN patlen \
@@ -1693,64 +1900,75 @@ Apd     |void   |sv_vsetpvfn    |NN SV *const sv|NN const char *const pat|const STRLEN pa
                                |NULLOK va_list *const args|NULLOK SV **const svargs \
                                |const Size_t sv_count|NULLOK bool *const maybe_tainted
 ApR    |NV     |str_to_version |NN SV *sv
-EXpRM  |SV*    |swash_init     |NN const char* pkg|NN const char* name|NN SV* listsv|I32 minbits|I32 none
-EXpM   |UV     |swash_fetch    |NN SV *swash|NN const U8 *ptr|bool do_utf8
-#ifdef PERL_IN_REGCOMP_C
-EiMR   |SV*    |add_cp_to_invlist      |NULLOK SV* invlist|const UV cp
-EiMRn  |bool   |invlist_is_iterating|NN SV* const invlist
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_OP_C) || defined(PERL_IN_DOOP_C)
+EiR    |SV*    |add_cp_to_invlist      |NULLOK SV* invlist|const UV cp
+Ei     |void   |invlist_extend    |NN SV* const invlist|const UV len
+Ei     |void   |invlist_set_len|NN SV* const invlist|const UV len|const bool offset
+EiRT   |UV     |invlist_highest|NN SV* const invlist
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_OP_C)
+EiRT   |STRLEN*|get_invlist_iter_addr  |NN SV* invlist
+EiT    |void   |invlist_iterinit|NN SV* invlist
+EiRT   |bool   |invlist_iternext|NN SV* invlist|NN UV* start|NN UV* end
+EiT    |void   |invlist_iterfinish|NN SV* invlist
+#endif
+#if defined(PERL_IN_REGCOMP_C)
+EiRT   |bool   |invlist_is_iterating|NN SV* const invlist
+EiR    |SV*    |invlist_contents|NN SV* const invlist              \
+                                |const bool traditional_style
+EixRT  |UV     |invlist_lowest|NN SV* const invlist
 #ifndef PERL_EXT_RE_BUILD
-EiMRn  |UV*    |_invlist_array_init    |NN SV* const invlist|const bool will_have_0
-EiMRn  |UV     |invlist_max    |NN SV* const invlist
-EsM    |void   |_append_range_to_invlist   |NN SV* const invlist|const UV start|const UV end
-EsM    |void   |invlist_extend    |NN SV* const invlist|const UV len
-EsM    |void   |invlist_replace_list_destroys_src|NN SV *dest|NN SV *src
-EiMRn  |IV*    |get_invlist_previous_index_addr|NN SV* invlist
-EiM    |void   |invlist_set_len|NN SV* const invlist|const UV len|const bool offset
-EiMn   |void   |invlist_set_previous_index|NN SV* const invlist|const IV index
-EiMRn  |IV     |invlist_previous_index|NN SV* const invlist
-EiMn   |void   |invlist_trim   |NN SV* invlist
-EiM    |void   |invlist_clear  |NN SV* invlist
-sM     |void   |initialize_invlist_guts|NN SV* invlist|const Size_t initial_size
-#endif
-EiMRn  |STRLEN*|get_invlist_iter_addr  |NN SV* invlist
-EiMn   |void   |invlist_iterinit|NN SV* invlist
-EsMRn  |bool   |invlist_iternext|NN SV* invlist|NN UV* start|NN UV* end
-EiMn   |void   |invlist_iterfinish|NN SV* invlist
-EiMRn  |UV     |invlist_highest|NN SV* const invlist
-EMRs   |SV*    |_make_exactf_invlist   |NN RExC_state_t *pRExC_state \
+EiRT   |UV*    |_invlist_array_init    |NN SV* const invlist|const bool will_have_0
+EiRT   |UV     |invlist_max    |NN SV* const invlist
+EiRT   |IV*    |get_invlist_previous_index_addr|NN SV* invlist
+EiT    |void   |invlist_set_previous_index|NN SV* const invlist|const IV index
+EiRT   |IV     |invlist_previous_index|NN SV* const invlist
+EiT    |void   |invlist_trim   |NN SV* invlist
+Ei     |void   |invlist_clear  |NN SV* invlist
+#endif
+ESRT   |bool   |new_regcurly   |NN const char *s|NN const char *e
+ERS    |SV*    |make_exactf_invlist    |NN RExC_state_t *pRExC_state \
                                        |NN regnode *node
-EsMR   |SV*    |invlist_contents|NN SV* const invlist              \
-                                |const bool traditional_style
-EsRn   |bool   |new_regcurly   |NN const char *s|NN const char *e
+#ifndef PERL_EXT_RE_BUILD
+ES     |void   |_append_range_to_invlist   |NN SV* const invlist|const UV start|const UV end
+ES     |void   |invlist_replace_list_destroys_src|NN SV *dest|NN SV *src
+S      |void   |initialize_invlist_guts|NN SV* invlist|const Size_t initial_size
+#endif
 #endif
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_UTF8_C)
-EXmM   |void   |_invlist_intersection  |NN SV* const a|NN SV* const b|NN SV** i
-EXpM   |void   |_invlist_intersection_maybe_complement_2nd \
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_UTF8_C) || defined(PERL_IN_OP_C) || defined(PERL_IN_DOOP_C)
+m      |void   |_invlist_intersection  |NN SV* const a|NN SV* const b|NN SV** i
+EXp    |void   |_invlist_intersection_maybe_complement_2nd \
                |NULLOK SV* const a|NN SV* const b          \
                |const bool complement_b|NN SV** i
-EXmM   |void   |_invlist_union |NULLOK SV* const a|NN SV* const b|NN SV** output
-EXpM   |void   |_invlist_union_maybe_complement_2nd        \
+Cm     |void   |_invlist_union |NULLOK SV* const a|NN SV* const b|NN SV** output
+EXp    |void   |_invlist_union_maybe_complement_2nd        \
                |NULLOK SV* const a|NN SV* const b          \
                |const bool complement_b|NN SV** output
-EXmM   |void   |_invlist_subtract|NN SV* const a|NN SV* const b|NN SV** result
-EXpM   |void   |_invlist_invert|NN SV* const invlist
-EXMpR  |SV*    |_new_invlist   |IV initial_size
-EXMpR  |SV*    |_add_range_to_invlist  |NULLOK SV* invlist|UV start|UV end
-EXMpR  |SV*    |_setup_canned_invlist|const STRLEN size|const UV element0|NN UV** other_elements_ptr
+m      |void   |_invlist_subtract|NN SV* const a|NN SV* const b|NN SV** result
+EXp    |void   |_invlist_invert|NN SV* const invlist
+EXpR   |SV*    |_new_invlist   |IV initial_size
+EXpR   |SV*    |_add_range_to_invlist  |NULLOK SV* invlist|UV start|UV end
+EXpR   |SV*    |_setup_canned_invlist|const STRLEN size|const UV element0|NN UV** other_elements_ptr
 #endif
 #if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_SV_C)
-EMpX   |SV*    |invlist_clone  |NN SV* const invlist|NULLOK SV* newlist
-#endif
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_TOKE_C) || defined(PERL_IN_UTF8_C) || defined(PERL_IN_PP_C)
-EiMRn  |UV*    |invlist_array  |NN SV* const invlist
-EiMRn  |bool   |is_invlist     |NULLOK SV* const invlist
-EiMRn  |bool*  |get_invlist_offset_addr|NN SV* invlist
-EiMRn  |UV     |_invlist_len   |NN SV* const invlist
-EMiRn  |bool   |_invlist_contains_cp|NN SV* const invlist|const UV cp
-EXpMRn |SSize_t|_invlist_search        |NN SV* const invlist|const UV cp
+EpX    |SV*    |invlist_clone  |NN SV* const invlist|NULLOK SV* newlist
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C)   \
+ || defined(PERL_IN_TOKE_C) || defined(PERL_IN_UTF8_C)         \
+ || defined(PERL_IN_PP_C) || defined(PERL_IN_OP_C)             \
+ || defined(PERL_IN_DOOP_C)
+EiRT   |UV*    |invlist_array  |NN SV* const invlist
+EiRT   |bool   |is_invlist     |NULLOK SV* const invlist
+EiRT   |bool*  |get_invlist_offset_addr|NN SV* invlist
+EiRT   |UV     |_invlist_len   |NN SV* const invlist
+EiRT   |bool   |_invlist_contains_cp|NN SV* const invlist|const UV cp
+EXpRT  |SSize_t|_invlist_search        |NN SV* const invlist|const UV cp
+#endif
+#if defined(PERL_IN_PP_C) || defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_TOKE_C) || defined(PERL_IN_UNIVERSAL_C)
+EiT    |const char *|get_regex_charset_name|const U32 flags|NN STRLEN* const lenp
 #endif
 #if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C)
-EXpM   |SV*    |_get_regclass_nonbitmap_data                              \
+EXp    |SV*    |_get_regclass_nonbitmap_data                              \
                                |NULLOK const regexp *prog                 \
                                |NN const struct regnode *node             \
                                |bool doinit                               \
@@ -1758,73 +1976,60 @@ EXpM    |SV*    |_get_regclass_nonbitmap_data                              \
                                |NULLOK SV **lonly_utf8_locale             \
                                |NULLOK SV **output_invlist
 #endif
-#if defined(PERL_IN_REGCOMP_C) || defined (PERL_IN_DUMP_C)
-EXMp   |void   |_invlist_dump  |NN PerlIO *file|I32 level   \
+#if defined(PERL_IN_REGCOMP_C) || defined (PERL_IN_DUMP_C) || defined(PERL_IN_OP_C)
+EX   |void   |_invlist_dump  |NN PerlIO *file|I32 level   \
                                |NN const char* const indent \
                                |NN SV* const invlist
 #endif
 Ap     |void   |taint_env
 Ap     |void   |taint_proper   |NULLOK const char* f|NN const char *const s
-EpM    |char * |_byte_dump_string                                      \
+EXp    |char * |_byte_dump_string                                      \
                                |NN const U8 * const start              \
                                |const STRLEN len                       \
                                |const bool format
 #if defined(PERL_IN_UTF8_C)
-inR    |int    |does_utf8_overflow|NN const U8 * const s               \
+iTR    |int    |does_utf8_overflow|NN const U8 * const s               \
                                   |NN const U8 * e                     \
                                   |const bool consider_overlongs
-inR    |int    |is_utf8_overlong_given_start_byte_ok|NN const U8 * const s \
+iTR    |int    |is_utf8_overlong_given_start_byte_ok|NN const U8 * const s \
                                                     |const STRLEN len
-inR    |int    |isFF_OVERLONG  |NN const U8 * const s|const STRLEN len
-sMR    |char * |unexpected_non_continuation_text                       \
+iTR    |int    |isFF_OVERLONG  |NN const U8 * const s|const STRLEN len
+SR     |char * |unexpected_non_continuation_text                       \
                |NN const U8 * const s                                  \
                |STRLEN print_len                                       \
                |const STRLEN non_cont_byte_pos                         \
                |const STRLEN expect_len
-s      |void   |warn_on_first_deprecated_use                               \
+#if 0  /* Not currently used, but may be needed in the future */
+S      |void   |warn_on_first_deprecated_use                               \
                                |NN const char * const name                 \
                                |NN const char * const alternative          \
                                |const bool use_locale                      \
                                |NN const char * const file                 \
                                |const unsigned line
-s      |U32    |check_and_deprecate                                        \
-                               |NN const U8 * p                            \
-                               |NN const U8 ** e                           \
-                               |const unsigned type                        \
-                               |const bool use_locale                      \
-                               |NN const char * const file                 \
-                               |const unsigned line
-s      |UV     |_to_utf8_case  |const UV uv1                                   \
+#endif
+S      |UV     |_to_utf8_case  |const UV uv1                                   \
                                |NULLOK const U8 *p                             \
                                |NN U8* ustrp                                   \
                                |NN STRLEN *lenp                                \
                                |NN SV *invlist                                 \
-                               |NN const int * const invmap                    \
-                               |NULLOK const unsigned int * const * const aux_tables   \
+                               |NN const I32 * const invmap                    \
+                               |NULLOK const U32 * const * const aux_tables    \
                                |NULLOK const U8 * const aux_table_lengths      \
                                |NN const char * const normal
-s      |UV     |turkic_fc      |NN const U8 * const p |NN const U8 * const e|NN U8* ustrp|NN STRLEN *lenp
-s      |UV     |turkic_lc      |NN const U8 * const p0|NN const U8 * const e|NN U8* ustrp|NN STRLEN *lenp
-s      |UV     |turkic_uc      |NN const U8 * const p |NN const U8 * const e|NN U8* ustrp|NN STRLEN *lenp
-#endif
-ApbmdD |UV     |to_utf8_lower  |NN const U8 *p|NN U8* ustrp|NULLOK STRLEN *lenp
-AMp    |UV     |_to_utf8_lower_flags|NN const U8 *p|NULLOK const U8* e         \
-                               |NN U8* ustrp|NULLOK STRLEN *lenp|bool flags    \
-                               |NN const char * const file|const int line
-ApbmdD |UV     |to_utf8_upper  |NN const U8 *p|NN U8* ustrp|NULLOK STRLEN *lenp
-AMp    |UV     |_to_utf8_upper_flags   |NN const U8 *p|NULLOK const U8 *e      \
-                               |NN U8* ustrp|NULLOK STRLEN *lenp|bool flags    \
-                               |NN const char * const file|const int line
-ApbmdD |UV     |to_utf8_title  |NN const U8 *p|NN U8* ustrp|NULLOK STRLEN *lenp
-AMp    |UV     |_to_utf8_title_flags   |NN const U8 *p|NULLOK const U8* e      \
-                               |NN U8* ustrp|NULLOK STRLEN *lenp|bool flags    \
-                               |NN const char * const file|const int line
-ApbmdD |UV     |to_utf8_fold   |NN const U8 *p|NN U8* ustrp|NULLOK STRLEN *lenp
-AMp    |UV     |_to_utf8_fold_flags|NN const U8 *p|NULLOK const U8 *e          \
-                               |NN U8* ustrp|NULLOK STRLEN *lenp|U8 flags  \
-                               |NN const char * const file|const int line
+S      |UV     |turkic_fc      |NN const U8 * const p |NN const U8 * const e|NN U8* ustrp|NN STRLEN *lenp
+S      |UV     |turkic_lc      |NN const U8 * const p0|NN const U8 * const e|NN U8* ustrp|NN STRLEN *lenp
+S      |UV     |turkic_uc      |NN const U8 * const p |NN const U8 * const e|NN U8* ustrp|NN STRLEN *lenp
+#endif
+Cp     |UV     |_to_utf8_lower_flags|NN const U8 *p|NULLOK const U8* e         \
+                               |NN U8* ustrp|NULLOK STRLEN *lenp|bool flags
+Cp     |UV     |_to_utf8_upper_flags   |NN const U8 *p|NULLOK const U8 *e      \
+                               |NN U8* ustrp|NULLOK STRLEN *lenp|bool flags
+Cp     |UV     |_to_utf8_title_flags   |NN const U8 *p|NULLOK const U8* e      \
+                               |NN U8* ustrp|NULLOK STRLEN *lenp|bool flags
+Cp     |UV     |_to_utf8_fold_flags|NN const U8 *p|NULLOK const U8 *e          \
+                               |NN U8* ustrp|NULLOK STRLEN *lenp|U8 flags
 #if defined(PERL_IN_MG_C) || defined(PERL_IN_PP_C)
-pn     |bool   |translate_substr_offsets|STRLEN curlen|IV pos1_iv \
+pT     |bool   |translate_substr_offsets|STRLEN curlen|IV pos1_iv \
                                         |bool pos1_is_uv|IV len_iv \
                                         |bool len_is_uv|NN STRLEN *posp \
                                         |NN STRLEN *lenp
@@ -1832,7 +2037,7 @@ pn        |bool   |translate_substr_offsets|STRLEN curlen|IV pos1_iv \
 #if defined(UNLINK_ALL_VERSIONS)
 Ap     |I32    |unlnk          |NN const char* f
 #endif
-Abpd   |SSize_t|unpack_str     |NN const char *pat|NN const char *patend|NN const char *s \
+AbpdD  |SSize_t|unpack_str     |NN const char *pat|NN const char *patend|NN const char *s \
                                |NULLOK const char *strbeg|NN const char *strend|NULLOK char **new_s \
                                |I32 ocnt|U32 flags
 Apd    |SSize_t|unpackstring   |NN const char *pat|NN const char *patend|NN const char *s \
@@ -1842,70 +2047,71 @@ Ap      |void   |unsharepvn     |NULLOK const char* sv|I32 len|U32 hash
 p      |void   |unshare_hek    |NULLOK HEK* hek
 : Used in perly.y
 p      |void   |utilize        |int aver|I32 floor|NULLOK OP* version|NN OP* idop|NULLOK OP* arg
-ApM    |void   |_force_out_malformed_utf8_message                          \
+Cp     |void   |_force_out_malformed_utf8_message                          \
                |NN const U8 *const p|NN const U8 * const e|const U32 flags \
                |const bool die_here
-EXp    |U8*    |utf16_to_utf8  |NN U8* p|NN U8 *d|I32 bytelen|NN I32 *newlen
-EXp    |U8*    |utf16_to_utf8_reversed|NN U8* p|NN U8 *d|I32 bytelen|NN I32 *newlen
+EXp    |U8*    |utf16_to_utf8  |NN U8* p|NN U8 *d|Size_t bytelen|NN Size_t *newlen
+EXp    |U8*    |utf16_to_utf8_reversed|NN U8* p|NN U8 *d|Size_t bytelen|NN Size_t *newlen
 AdpR   |STRLEN |utf8_length    |NN const U8* s|NN const U8 *e
 AipdR  |IV     |utf8_distance  |NN const U8 *a|NN const U8 *b
-AipdRn |U8*    |utf8_hop       |NN const U8 *s|SSize_t off
-AipdRn |U8*    |utf8_hop_back|NN const U8 *s|SSize_t off|NN const U8 *start
-AipdRn |U8*    |utf8_hop_forward|NN const U8 *s|SSize_t off|NN const U8 *end
-AipdRn |U8*    |utf8_hop_safe  |NN const U8 *s|SSize_t off|NN const U8 *start|NN const U8 *end
-ApMd   |U8*    |utf8_to_bytes  |NN U8 *s|NN STRLEN *lenp
+AipdRT |U8*    |utf8_hop       |NN const U8 *s|SSize_t off
+AipdRT |U8*    |utf8_hop_back|NN const U8 *s|SSize_t off|NN const U8 *start
+AipdRT |U8*    |utf8_hop_forward|NN const U8 *s|SSize_t off|NN const U8 *end
+AipdRT |U8*    |utf8_hop_safe  |NN const U8 *s|SSize_t off|NN const U8 *start|NN const U8 *end
+Apxd   |U8*    |utf8_to_bytes  |NN U8 *s|NN STRLEN *lenp
 Apd    |int    |bytes_cmp_utf8 |NN const U8 *b|STRLEN blen|NN const U8 *u \
                                |STRLEN ulen
-AModp  |U8*    |bytes_from_utf8|NN const U8 *s|NN STRLEN *lenp|NN bool *is_utf8p
-AMnp   |U8*    |bytes_from_utf8_loc|NN const U8 *s                         \
+AMxdp  |U8*    |bytes_from_utf8|NN const U8 *s|NN STRLEN *lenp|NN bool *is_utf8p
+AxTp   |U8*    |bytes_from_utf8_loc|NN const U8 *s                         \
                                    |NN STRLEN *lenp                        \
                                    |NN bool *is_utf8p                      \
                                    |NULLOK const U8 ** first_unconverted
-ApMd   |U8*    |bytes_to_utf8  |NN const U8 *s|NN STRLEN *lenp
+Apxd   |U8*    |bytes_to_utf8  |NN const U8 *s|NN STRLEN *lenp
 ApdD   |UV     |utf8_to_uvchr  |NN const U8 *s|NULLOK STRLEN *retlen
-AbpdD  |UV     |utf8_to_uvuni  |NN const U8 *s|NULLOK STRLEN *retlen
-AbpMD  |UV     |valid_utf8_to_uvuni    |NN const U8 *s|NULLOK STRLEN *retlen
-Aopd   |UV     |utf8_to_uvchr_buf      |NN const U8 *s|NN const U8 *send|NULLOK STRLEN *retlen
-ApdD   |UV     |utf8_to_uvuni_buf      |NN const U8 *s|NN const U8 *send|NULLOK STRLEN *retlen
-pM     |bool   |check_utf8_print       |NN const U8 *s|const STRLEN len
-
-Adnop  |UV     |utf8n_to_uvchr |NN const U8 *s                             \
+CbpdD  |UV     |utf8_to_uvuni  |NN const U8 *s|NULLOK STRLEN *retlen
+CbpD   |UV     |valid_utf8_to_uvuni    |NN const U8 *s|NULLOK STRLEN *retlen
+AMpd   |UV     |utf8_to_uvchr_buf      |NN const U8 *s|NN const U8 *send|NULLOK STRLEN *retlen
+Cip    |UV     |utf8_to_uvchr_buf_helper|NN const U8 *s|NN const U8 *send|NULLOK STRLEN *retlen
+CpdD   |UV     |utf8_to_uvuni_buf      |NN const U8 *s|NN const U8 *send|NULLOK STRLEN *retlen
+p      |bool   |check_utf8_print       |NN const U8 *s|const STRLEN len
+
+AdMTp  |UV     |utf8n_to_uvchr |NN const U8 *s                             \
                                |STRLEN curlen                              \
                                |NULLOK STRLEN *retlen                      \
                                |const U32 flags
-Adnop  |UV     |utf8n_to_uvchr_error|NN const U8 *s                        \
+AdMTp  |UV     |utf8n_to_uvchr_error|NN const U8 *s                        \
                                |STRLEN curlen                              \
                                |NULLOK STRLEN *retlen                      \
                                |const U32 flags                            \
                                |NULLOK U32 * errors
-AMndi  |UV     |utf8n_to_uvchr_msgs|NN const U8 *s                         \
+AxTdip |UV     |utf8n_to_uvchr_msgs|NN const U8 *s                         \
                                |STRLEN curlen                              \
                                |NULLOK STRLEN *retlen                      \
                                |const U32 flags                            \
                                |NULLOK U32 * errors                        \
                                |NULLOK AV ** msgs
-AMnp   |UV     |_utf8n_to_uvchr_msgs_helper                                \
+CTp    |UV     |_utf8n_to_uvchr_msgs_helper                                \
                                |NN const U8 *s                             \
                                |STRLEN curlen                              \
                                |NULLOK STRLEN *retlen                      \
                                |const U32 flags                            \
                                |NULLOK U32 * errors                        \
                                |NULLOK AV ** msgs
-AipnR  |UV     |valid_utf8_to_uvchr    |NN const U8 *s|NULLOK STRLEN *retlen
-Ap     |UV     |utf8n_to_uvuni|NN const U8 *s|STRLEN curlen|NULLOK STRLEN *retlen|U32 flags
+CipTRd |UV     |valid_utf8_to_uvchr    |NN const U8 *s|NULLOK STRLEN *retlen
+Cdp    |UV     |utf8n_to_uvuni|NN const U8 *s|STRLEN curlen|NULLOK STRLEN *retlen|U32 flags
 
 Adm    |U8*    |uvchr_to_utf8  |NN U8 *d|UV uv
-Ap     |U8*    |uvuni_to_utf8  |NN U8 *d|UV uv
+Cp     |U8*    |uvuni_to_utf8  |NN U8 *d|UV uv
 Adm    |U8*    |uvchr_to_utf8_flags    |NN U8 *d|UV uv|UV flags
-AdmM   |U8*    |uvchr_to_utf8_flags_msgs|NN U8 *d|UV uv|UV flags|NULLOK HV ** msgs
-Apod   |U8*    |uvoffuni_to_utf8_flags |NN U8 *d|UV uv|const UV flags
-ApM    |U8*    |uvoffuni_to_utf8_flags_msgs|NN U8 *d|UV uv|const UV flags|NULLOK HV** msgs
-Ap     |U8*    |uvuni_to_utf8_flags    |NN U8 *d|UV uv|UV flags
+Admx   |U8*    |uvchr_to_utf8_flags_msgs|NN U8 *d|UV uv|UV flags|NULLOK HV ** msgs
+CMpd   |U8*    |uvoffuni_to_utf8_flags |NN U8 *d|UV uv|const UV flags
+Cp     |U8*    |uvoffuni_to_utf8_flags_msgs|NN U8 *d|UV uv|const UV flags|NULLOK HV** msgs
+Cdp    |U8*    |uvuni_to_utf8_flags    |NN U8 *d|UV uv|UV flags
 Apd    |char*  |pv_uni_display |NN SV *dsv|NN const U8 *spv|STRLEN len|STRLEN pvlim|UV flags
 ApdR   |char*  |sv_uni_display |NN SV *dsv|NN SV *ssv|STRLEN pvlim|UV flags
 EXpR   |Size_t |_inverse_folds |const UV cp                                \
-                               |NN unsigned int * first_folds_to           \
-                               |NN const unsigned int ** remaining_folds_to
+                               |NN U32 * first_folds_to                    \
+                               |NN const U32 ** remaining_folds_to
 : Used by Data::Alias
 EXp    |void   |vivify_defelem |NN SV* sv
 : Used in pp.c
@@ -1915,8 +2121,8 @@ p |I32    |wait4pid       |Pid_t pid|NN int* statusp|int flags
 : Used in locale.c and perl.c
 p      |U32    |parse_unicode_opts|NN const char **popt
 Ap     |U32    |seed
-Xpno   |double |drand48_r      |NN perl_drand48_t *random_state
-Xpno   |void   |drand48_init_r |NN perl_drand48_t *random_state|U32 seed
+XpTo   |double |drand48_r      |NN perl_drand48_t *random_state
+XpTo   |void   |drand48_init_r |NN perl_drand48_t *random_state|U32 seed
 : Only used in perl.c
 p      |void   |get_hash_seed        |NN unsigned char * const seed_buffer
 : Used in doio.c, pp_hot.c, pp_sys.c
@@ -1950,9 +2156,9 @@ Ap        |I32    |whichsig_sv    |NN SV* sigsv
 Ap     |I32    |whichsig_pv    |NN const char* sig
 Ap     |I32    |whichsig_pvn   |NN const char* sig|STRLEN len
 : used to check for NULs in pathnames and other names
-AiR    |bool   |is_safe_syscall|NN const char *pv|STRLEN len|NN const char *what|NN const char *op_name
+AiRdp  |bool   |is_safe_syscall|NN const char *pv|STRLEN len|NN const char *what|NN const char *op_name
 #ifdef PERL_CORE
-inR    |bool   |should_warn_nl|NN const char *pv
+iTR    |bool   |should_warn_nl|NN const char *pv
 #endif
 : Used in pp_ctl.c
 p      |void   |write_to_stderr|NN SV* msv
@@ -1974,17 +2180,17 @@ p       |void   |parser_free_nexttoke_ops|NN yy_parser *parser \
                                         |NN OPSLAB *slab
 #endif
 #if defined(PERL_IN_TOKE_C)
-s      |int    |yywarn         |NN const char *const s|U32 flags
+S      |int    |yywarn         |NN const char *const s|U32 flags
 #endif
 #if defined(MYMALLOC)
 Ap     |void   |dump_mstats    |NN const char* s
 Ap     |int    |get_mstats     |NN perl_mstats_t *buf|int buflen|int level
 #endif
-Anpa   |Malloc_t|safesysmalloc |MEM_SIZE nbytes
-Anpa   |Malloc_t|safesyscalloc |MEM_SIZE elements|MEM_SIZE size
-AnpR   |Malloc_t|safesysrealloc|Malloc_t where|MEM_SIZE nbytes
-Anp    |Free_t |safesysfree    |Malloc_t where
-Asrnx  |void   |croak_memory_wrap
+ATpa   |Malloc_t|safesysmalloc |MEM_SIZE nbytes
+ATpa   |Malloc_t|safesyscalloc |MEM_SIZE elements|MEM_SIZE size
+ATpR   |Malloc_t|safesysrealloc|Malloc_t where|MEM_SIZE nbytes
+ATp    |Free_t |safesysfree    |Malloc_t where
+AirTep |void   |croak_memory_wrap
 #if defined(PERL_GLOBAL_STRUCT)
 Ap     |struct perl_vars *|GetVars
 Ap     |struct perl_vars*|init_global_struct
@@ -1996,19 +2202,19 @@ Afpd    |void   |sv_catpvf_mg   |NN SV *const sv|NN const char *const pat|...
 Apd    |void   |sv_vcatpvf_mg  |NN SV *const sv|NN const char *const pat \
                                |NULLOK va_list *const args
 Apd    |void   |sv_catpv_mg    |NN SV *const sv|NULLOK const char *const ptr
-Apdbm  |void   |sv_catpvn_mg   |NN SV *sv|NN const char *ptr|STRLEN len
-Apdbm  |void   |sv_catsv_mg    |NN SV *dsv|NULLOK SV *ssv
+ApdbM  |void   |sv_catpvn_mg   |NN SV *sv|NN const char *ptr|STRLEN len
+ApdbM  |void   |sv_catsv_mg    |NN SV *dsv|NULLOK SV *ssv
 Afpd   |void   |sv_setpvf_mg   |NN SV *const sv|NN const char *const pat|...
 Apd    |void   |sv_vsetpvf_mg  |NN SV *const sv|NN const char *const pat \
                                |NULLOK va_list *const args
 Apd    |void   |sv_setiv_mg    |NN SV *const sv|const IV i
-Apdb   |void   |sv_setpviv_mg  |NN SV *const sv|const IV iv
+ApdbD  |void   |sv_setpviv_mg  |NN SV *const sv|const IV iv
 Apd    |void   |sv_setuv_mg    |NN SV *const sv|const UV u
 Apd    |void   |sv_setnv_mg    |NN SV *const sv|const NV num
 Apd    |void   |sv_setpv_mg    |NN SV *const sv|NULLOK const char *const ptr
 Apd    |void   |sv_setpvn_mg   |NN SV *const sv|NN const char *const ptr|const STRLEN len
 Apd    |void   |sv_setsv_mg    |NN SV *const dstr|NULLOK SV *const sstr
-Apdbm  |void   |sv_usepvn_mg   |NN SV *sv|NULLOK char *ptr|STRLEN len
+ApdbM  |void   |sv_usepvn_mg   |NN SV *sv|NULLOK char *ptr|STRLEN len
 ApR    |MGVTBL*|get_vtbl       |int vtbl_id
 Apd    |char*  |pv_display     |NN SV *dsv|NN const char *pv|STRLEN cur|STRLEN len \
                                |STRLEN pvlim
@@ -2038,23 +2244,32 @@ Ap      |void   |do_sv_dump     |I32 level|NN PerlIO *file|NULLOK SV *sv|I32 nest \
                                |I32 maxnest|bool dumpops|STRLEN pvlim
 Ap     |void   |magic_dump     |NULLOK const MAGIC *mg
 Ap     |void   |reginitcolors
-ApdRmb |char*  |sv_2pv_nolen   |NN SV* sv
-ApdRmb |char*  |sv_2pvutf8_nolen|NN SV* sv
-ApdRmb |char*  |sv_2pvbyte_nolen|NN SV* sv
-ApmdbR |char*  |sv_pv          |NN SV *sv
-ApmdbR |char*  |sv_pvutf8      |NN SV *sv
-ApmdbR |char*  |sv_pvbyte      |NN SV *sv
-Apmdb  |STRLEN |sv_utf8_upgrade|NN SV *sv
+ApdRMb |char*  |sv_2pv_nolen   |NN SV* sv
+ApdRMb |char*  |sv_2pvutf8_nolen|NN SV* sv
+ApdRMb |char*  |sv_2pvbyte_nolen|NN SV* sv
+ApMdbR |char*  |sv_pv          |NN SV *sv
+ApMdbR |char*  |sv_pvutf8      |NN SV *sv
+ApMdbR |char*  |sv_pvbyte      |NN SV *sv
+ApMdb  |STRLEN |sv_utf8_upgrade|NN SV *sv
 Amd    |STRLEN |sv_utf8_upgrade_nomg|NN SV *sv
-Apd    |bool   |sv_utf8_downgrade|NN SV *const sv|const bool fail_ok
+ApdMb  |bool   |sv_utf8_downgrade|NN SV *const sv|const bool fail_ok
+Amd    |bool   |sv_utf8_downgrade_nomg|NN SV *const sv|const bool fail_ok
+Apd    |bool   |sv_utf8_downgrade_flags|NN SV *const sv|const bool fail_ok|const U32 flags
 Apd    |void   |sv_utf8_encode |NN SV *const sv
 Apd    |bool   |sv_utf8_decode |NN SV *const sv
-Apdmb  |void   |sv_force_normal|NN SV *sv
+ApdMb  |void   |sv_force_normal|NN SV *sv
 Apd    |void   |sv_force_normal_flags|NN SV *const sv|const U32 flags
 pX     |SSize_t|tmps_grow_p    |SSize_t ix
 Apd    |SV*    |sv_rvweaken    |NN SV *const sv
 Apd    |SV*    |sv_rvunweaken  |NN SV *const sv
-AnpMd  |SV*    |sv_get_backrefs|NN SV *const sv
+ATpxd  |SV*    |sv_get_backrefs|NN SV *const sv
+AiTMdp |SV *   |SvREFCNT_inc   |NULLOK SV *sv
+AiTMdp |SV *   |SvREFCNT_inc_NN|NN SV *sv
+AiTMdp |void   |SvREFCNT_inc_void|NULLOK SV *sv
+AiMdp  |void   |SvREFCNT_dec   |NULLOK SV *sv
+AiMdp  |void   |SvREFCNT_dec_NN|NN SV *sv
+AiTp   |void   |SvAMAGIC_on    |NN SV *sv
+AiTp   |void   |SvAMAGIC_off   |NN SV *sv
 : This is indirectly referenced by globals.c. This is somewhat annoying.
 p      |int    |magic_killbackrefs|NN SV *sv|NN MAGIC *mg
 Ap     |OP*    |newANONATTRSUB |I32 floor|NULLOK OP *proto|NULLOK OP *attrs|NULLOK OP *block
@@ -2081,9 +2296,9 @@ ApR       |DIR*   |dirp_dup       |NULLOK DIR *const dp|NN CLONE_PARAMS *const param
 ApR    |GP*    |gp_dup         |NULLOK GP *const gp|NN CLONE_PARAMS *const param
 ApR    |MAGIC* |mg_dup         |NULLOK MAGIC *mg|NN CLONE_PARAMS *const param
 #if defined(PERL_IN_SV_C)
-s      |SV **  |sv_dup_inc_multiple|NN SV *const *source|NN SV **dest \
+S      |SV **  |sv_dup_inc_multiple|NN SV *const *source|NN SV **dest \
                                |SSize_t items|NN CLONE_PARAMS *const param
-sR     |SV*    |sv_dup_common  |NN const SV *const sstr \
+SR     |SV*    |sv_dup_common  |NN const SV *const sstr \
                                |NN CLONE_PARAMS *const param
 #endif
 ApR    |SV*    |sv_dup         |NULLOK const SV *const sstr|NN CLONE_PARAMS *const param
@@ -2107,46 +2322,47 @@ Ap      |void   |sys_intern_dup |NN struct interp_intern* src|NN struct interp_intern*
 #  endif
 #endif
 
-Amop   |const XOP *    |custom_op_xop  |NN const OP *o
-AbpR   |const char *   |custom_op_name |NN const OP *o
-AbpR   |const char *   |custom_op_desc |NN const OP *o
+: The reason for the 'u' flag is that this passes "aTHX_ x" to its callee: not
+: a legal C parameter
+Admu   |const XOP *    |Perl_custom_op_xop     |NN const OP *o
+AbpRdD |const char *   |custom_op_name |NN const OP *o
+AbpRdD |const char *   |custom_op_desc |NN const OP *o
 pRX    |XOPRETANY      |custom_op_get_field    |NN const OP *o|const xop_flags_enum field
-Aop    |void   |custom_op_register     |NN Perl_ppaddr_t ppaddr \
+Adop   |void   |custom_op_register     |NN Perl_ppaddr_t ppaddr \
                        |NN const XOP *xop
 
 Adp    |void   |sv_nosharing   |NULLOK SV *sv
-Adpbm  |void   |sv_nolocking   |NULLOK SV *sv
+AdpbD  |void   |sv_nolocking   |NULLOK SV *sv
 Adp    |bool   |sv_destroyable |NULLOK SV *sv
-Adpb   |void   |sv_nounlocking |NULLOK SV *sv
+AdpbD  |void   |sv_nounlocking |NULLOK SV *sv
 Adp    |int    |nothreadhook
 p      |void   |init_constants
 
 #if defined(PERL_IN_DOOP_C)
-sR     |Size_t |do_trans_simple        |NN SV * const sv
-sR     |Size_t |do_trans_count         |NN SV * const sv
-sR     |Size_t |do_trans_complex       |NN SV * const sv
-sR     |Size_t |do_trans_simple_utf8   |NN SV * const sv
-sR     |Size_t |do_trans_count_utf8    |NN SV * const sv
-sR     |Size_t |do_trans_complex_utf8  |NN SV * const sv
+SR     |Size_t |do_trans_simple        |NN SV * const sv|NN const OPtrans_map * const tbl
+SR     |Size_t |do_trans_count         |NN SV * const sv|NN const OPtrans_map * const tbl
+SR     |Size_t |do_trans_complex       |NN SV * const sv|NN const OPtrans_map * const tbl
+SR     |Size_t |do_trans_invmap        |NN SV * const sv|NN AV * const map
+SR     |Size_t |do_trans_count_invmap  |NN SV * const sv|NN AV * const map
 #endif
 
 #if defined(PERL_IN_GV_C)
-s      |void   |gv_init_svtype |NN GV *gv|const svtype sv_type
-s      |void   |gv_magicalize_isa      |NN GV *gv
-s      |bool|parse_gv_stash_name|NN HV **stash|NN GV **gv \
+S      |void   |gv_init_svtype |NN GV *gv|const svtype sv_type
+S      |void   |gv_magicalize_isa      |NN GV *gv
+S      |bool|parse_gv_stash_name|NN HV **stash|NN GV **gv \
                      |NN const char **name|NN STRLEN *len \
                      |NN const char *nambeg|STRLEN full_len \
                      |const U32 is_utf8|const I32 add
-s      |bool|find_default_stash|NN HV **stash|NN const char *name \
+S      |bool|find_default_stash|NN HV **stash|NN const char *name \
                      |STRLEN len|const U32 is_utf8|const I32 add \
                      |const svtype sv_type
-s      |bool|gv_magicalize|NN GV *gv|NN HV *stash|NN const char *name \
+S      |bool|gv_magicalize|NN GV *gv|NN HV *stash|NN const char *name \
                      |STRLEN len \
                      |const svtype sv_type
-s      |void|maybe_multimagic_gv|NN GV *gv|NN const char *name|const svtype sv_type
-s      |bool|gv_is_in_main|NN const char *name|STRLEN len \
+S      |void|maybe_multimagic_gv|NN GV *gv|NN const char *name|const svtype sv_type
+S      |bool|gv_is_in_main|NN const char *name|STRLEN len \
                       |const U32 is_utf8
-s      |void   |require_tie_mod|NN GV *gv|NN const char varname \
+S      |void   |require_tie_mod|NN GV *gv|NN const char varname \
                                |NN const char * name|STRLEN len \
                                |const U32 flags
 #endif
@@ -2156,196 +2372,197 @@ po    |SV*    |hfree_next_entry       |NN HV *hv|NN STRLEN *indexp
 #endif
 
 #if defined(PERL_IN_HV_C)
-s      |void   |hsplit         |NN HV *hv|STRLEN const oldsize|STRLEN newsize
-s      |void   |hv_free_entries|NN HV *hv
-s      |SV*    |hv_free_ent_ret|NN HV *hv|NN HE *entry
-sR     |HE*    |new_he
-sanR   |HEK*   |save_hek_flags |NN const char *str|I32 len|U32 hash|int flags
-sn     |void   |hv_magic_check |NN HV *hv|NN bool *needs_copy|NN bool *needs_store
-s      |void   |unshare_hek_or_pvn|NULLOK const HEK* hek|NULLOK const char* str|I32 len|U32 hash
-sR     |HEK*   |share_hek_flags|NN const char *str|STRLEN len|U32 hash|int flags
-rs     |void   |hv_notallowed  |int flags|NN const char *key|I32 klen|NN const char *msg
-in     |U32|ptr_hash|PTRV u
-s      |struct xpvhv_aux*|hv_auxinit|NN HV *hv
-sn     |struct xpvhv_aux*|hv_auxinit_internal|NN struct xpvhv_aux *iter
-sM     |SV*    |hv_delete_common|NULLOK HV *hv|NULLOK SV *keysv \
+S      |void   |hsplit         |NN HV *hv|STRLEN const oldsize|STRLEN newsize
+S      |void   |hv_free_entries|NN HV *hv
+S      |SV*    |hv_free_ent_ret|NN HV *hv|NN HE *entry
+SR     |HE*    |new_he
+SaTR   |HEK*   |save_hek_flags |NN const char *str|I32 len|U32 hash|int flags
+ST     |void   |hv_magic_check |NN HV *hv|NN bool *needs_copy|NN bool *needs_store
+S      |void   |unshare_hek_or_pvn|NULLOK const HEK* hek|NULLOK const char* str|I32 len|U32 hash
+SR     |HEK*   |share_hek_flags|NN const char *str|STRLEN len|U32 hash|int flags
+rS     |void   |hv_notallowed  |int flags|NN const char *key|I32 klen|NN const char *msg
+iT     |U32|ptr_hash|PTRV u
+S      |struct xpvhv_aux*|hv_auxinit|NN HV *hv
+ST     |struct xpvhv_aux*|hv_auxinit_internal|NN struct xpvhv_aux *iter
+Sx     |SV*    |hv_delete_common|NULLOK HV *hv|NULLOK SV *keysv \
                |NULLOK const char *key|STRLEN klen|int k_flags|I32 d_flags \
                |U32 hash
-sM     |void   |clear_placeholders     |NN HV *hv|U32 items
+Sx     |void   |clear_placeholders     |NN HV *hv|U32 items
 #endif
 
 #if defined(PERL_IN_MG_C)
-s      |void   |save_magic_flags|I32 mgs_ix|NN SV *sv|U32 flags
-s      |int    |magic_methpack |NN SV *sv|NN const MAGIC *mg|NN SV *meth
-s      |SV*    |magic_methcall1|NN SV *sv|NN const MAGIC *mg \
+S      |void   |save_magic_flags|I32 mgs_ix|NN SV *sv|U32 flags
+S      |int    |magic_methpack |NN SV *sv|NN const MAGIC *mg|NN SV *meth
+S      |SV*    |magic_methcall1|NN SV *sv|NN const MAGIC *mg \
                                |NN SV *meth|U32 flags \
                                |int n|NULLOK SV *val
-s      |void   |restore_magic  |NULLOK const void *p
-s      |void   |unwind_handler_stack|NULLOK const void *p
-s      |void   |fixup_errno_string|NN SV* sv
+S      |void   |restore_magic  |NULLOK const void *p
+S      |void   |unwind_handler_stack|NULLOK const void *p
+S      |void   |fixup_errno_string|NN SV* sv
 
 #endif
 
 #if defined(PERL_IN_OP_C)
-sRn    |bool   |is_handle_constructor|NN const OP *o|I32 numargs
-sR     |I32    |assignment_type|NULLOK const OP *o
-s      |void   |forget_pmop    |NN PMOP *const o
-s      |void   |find_and_forget_pmops  |NN OP *o
-s      |void   |cop_free       |NN COP *cop
-s      |OP*    |modkids        |NULLOK OP *o|I32 type
-s      |OP*    |scalarboolean  |NN OP *o
-sR     |OP*    |search_const   |NN OP *o
-sR     |OP*    |new_logop      |I32 type|I32 flags|NN OP **firstp|NN OP **otherp
-s      |void   |simplify_sort  |NN OP *o
-sRn    |bool   |scalar_mod_type|NULLOK const OP *o|I32 type
-s      |OP *   |my_kid         |NULLOK OP *o|NULLOK OP *attrs|NN OP **imopsp
-s      |OP *   |dup_attrlist   |NN OP *o
-s      |void   |apply_attrs    |NN HV *stash|NN SV *target|NULLOK OP *attrs
-s      |void   |apply_attrs_my |NN HV *stash|NN OP *target|NULLOK OP *attrs|NN OP **imopsp
-s      |void   |bad_type_pv    |I32 n|NN const char *t|NN const OP *o|NN const OP *kid
-s      |void   |bad_type_gv    |I32 n|NN GV *gv|NN const OP *kid|NN const char *t
-s      |void   |no_bareword_allowed|NN OP *o
-sR     |OP*    |no_fh_allowed|NN OP *o
-sR     |OP*    |too_few_arguments_pv|NN OP *o|NN const char* name|U32 flags
-s      |OP*    |too_many_arguments_pv|NN OP *o|NN const char* name|U32 flags
-s      |bool   |looks_like_bool|NN const OP* o
-s      |OP*    |newGIVWHENOP   |NULLOK OP* cond|NN OP *block \
+SRT    |bool   |is_handle_constructor|NN const OP *o|I32 numargs
+SR     |I32    |assignment_type|NULLOK const OP *o
+S      |void   |forget_pmop    |NN PMOP *const o
+S      |void   |find_and_forget_pmops  |NN OP *o
+S      |void   |cop_free       |NN COP *cop
+S      |OP*    |modkids        |NULLOK OP *o|I32 type
+S      |OP*    |scalarboolean  |NN OP *o
+SR     |OP*    |search_const   |NN OP *o
+SR     |OP*    |new_logop      |I32 type|I32 flags|NN OP **firstp|NN OP **otherp
+S      |void   |simplify_sort  |NN OP *o
+SRT    |bool   |scalar_mod_type|NULLOK const OP *o|I32 type
+S      |OP *   |my_kid         |NULLOK OP *o|NULLOK OP *attrs|NN OP **imopsp
+S      |OP *   |dup_attrlist   |NN OP *o
+S      |void   |apply_attrs    |NN HV *stash|NN SV *target|NULLOK OP *attrs
+S      |void   |apply_attrs_my |NN HV *stash|NN OP *target|NULLOK OP *attrs|NN OP **imopsp
+S      |void   |bad_type_pv    |I32 n|NN const char *t|NN const OP *o|NN const OP *kid
+S      |void   |bad_type_gv    |I32 n|NN GV *gv|NN const OP *kid|NN const char *t
+S      |void   |no_bareword_allowed|NN OP *o
+SR     |OP*    |no_fh_allowed|NN OP *o
+SR     |OP*    |too_few_arguments_pv|NN OP *o|NN const char* name|U32 flags
+S      |OP*    |too_many_arguments_pv|NN OP *o|NN const char* name|U32 flags
+S      |bool   |looks_like_bool|NN const OP* o
+S      |OP*    |newGIVWHENOP   |NULLOK OP* cond|NN OP *block \
                                |I32 enter_opcode|I32 leave_opcode \
                                |PADOFFSET entertarg
-s      |OP*    |ref_array_or_hash|NULLOK OP* cond
-s      |bool   |process_special_blocks |I32 floor \
+S      |OP*    |ref_array_or_hash|NULLOK OP* cond
+S      |bool   |process_special_blocks |I32 floor \
                                        |NN const char *const fullname\
                                        |NN GV *const gv|NN CV *const cv
-s      |void   |clear_special_blocks   |NN const char *const fullname\
+S      |void   |clear_special_blocks   |NN const char *const fullname\
                                        |NN GV *const gv|NN CV *const cv
 #endif
 XpR    |void*  |Slab_Alloc     |size_t sz
 Xp     |void   |Slab_Free      |NN void *op
 #if defined(PERL_DEBUG_READONLY_OPS)
 #    if defined(PERL_CORE)
-px     |void   |Slab_to_ro     |NN OPSLAB *slab
-px     |void   |Slab_to_rw     |NN OPSLAB *const slab
+pe     |void   |Slab_to_ro     |NN OPSLAB *slab
+pe     |void   |Slab_to_rw     |NN OPSLAB *const slab
 #    endif
 : Used in OpREFCNT_inc() in sv.c
-poxM   |OP *   |op_refcnt_inc  |NULLOK OP *o
+poex   |OP *   |op_refcnt_inc  |NULLOK OP *o
 : FIXME - can be static.
-poxM   |PADOFFSET      |op_refcnt_dec  |NN OP *o
+poex   |PADOFFSET      |op_refcnt_dec  |NN OP *o
 #endif
 
 #if defined(PERL_IN_PERL_C)
-s      |void   |find_beginning |NN SV* linestr_sv|NN PerlIO *rsfp
-s      |void   |forbid_setid   |const char flag|const bool suidscript
-s      |void   |incpush        |NN const char *const dir|STRLEN len \
+S      |void   |find_beginning |NN SV* linestr_sv|NN PerlIO *rsfp
+S      |void   |forbid_setid   |const char flag|const bool suidscript
+S      |void   |incpush        |NN const char *const dir|STRLEN len \
                                |U32 flags
-s      |SV*    |mayberelocate  |NN const char *const dir|STRLEN len \
+S      |SV*    |mayberelocate  |NN const char *const dir|STRLEN len \
                                |U32 flags
-s      |void   |incpush_use_sep|NN const char *p|STRLEN len|U32 flags
-s      |void   |init_interp
-s      |void   |init_ids
-s      |void   |init_main_stash
-s      |void   |init_perllib
-s      |void   |init_postdump_symbols|int argc|NN char **argv|NULLOK char **env
-s      |void   |init_predump_symbols
-rs     |void   |my_exit_jump
-s      |void   |nuke_stacks
-s      |PerlIO *|open_script   |NN const char *scriptname|bool dosearch \
+S      |void   |incpush_use_sep|NN const char *p|STRLEN len|U32 flags
+S      |void   |init_interp
+S      |void   |init_ids
+S      |void   |init_main_stash
+S      |void   |init_perllib
+S      |void   |init_postdump_symbols|int argc|NN char **argv|NULLOK char **env
+S      |void   |init_predump_symbols
+rS     |void   |my_exit_jump
+S      |void   |nuke_stacks
+S      |PerlIO *|open_script   |NN const char *scriptname|bool dosearch \
                                |NN bool *suidscript
-sr     |void   |usage
+Sr     |void   |usage
 #ifndef SETUID_SCRIPTS_ARE_SECURE_NOW
-so     |void   |validate_suid  |NN PerlIO *rsfp
+So     |void   |validate_suid  |NN PerlIO *rsfp
 #endif
-sr     |void   |minus_v
+Sr     |void   |minus_v
 
-s      |void*  |parse_body     |NULLOK char **env|XSINIT_t xsinit
-rs     |void   |run_body       |I32 oldscope
+S      |void*  |parse_body     |NULLOK char **env|XSINIT_t xsinit
+rS     |void   |run_body       |I32 oldscope
 #  ifndef PERL_IS_MINIPERL
-s      |SV *   |incpush_if_exists|NN AV *const av|NN SV *dir|NN SV *const stem
+S      |SV *   |incpush_if_exists|NN AV *const av|NN SV *dir|NN SV *const stem
 #  endif
 #endif
 
 #if defined(PERL_IN_PP_C)
-s      |size_t |do_chomp       |NN SV *retval|NN SV *sv|bool chomping
-s      |OP*    |do_delete_local
-sR     |SV*    |refto          |NN SV* sv
+S      |size_t |do_chomp       |NN SV *retval|NN SV *sv|bool chomping
+S      |OP*    |do_delete_local
+SR     |SV*    |refto          |NN SV* sv
 #endif
 #if defined(PERL_IN_PP_C) || defined(PERL_IN_PP_HOT_C)
 : Used in pp_hot.c
-pRxo   |GV*    |softref2xv     |NN SV *const sv|NN const char *const what \
+pReo   |GV*    |softref2xv     |NN SV *const sv|NN const char *const what \
                                |const svtype type|NN SV ***spp
+iTR    |bool   |lossless_NV_to_IV|const NV nv|NN IV * ivp
 #endif
 
 #if defined(PERL_IN_PP_PACK_C)
-s      |SSize_t|unpack_rec     |NN struct tempsym* symptr|NN const char *s \
+S      |SSize_t|unpack_rec     |NN struct tempsym* symptr|NN const char *s \
                                |NN const char *strbeg|NN const char *strend|NULLOK const char **new_s
-s      |SV **  |pack_rec       |NN SV *cat|NN struct tempsym* symptr|NN SV **beglist|NN SV **endlist
-s      |SV*    |mul128         |NN SV *sv|U8 m
-s      |SSize_t|measure_struct |NN struct tempsym* symptr
-s      |bool   |next_symbol    |NN struct tempsym* symptr
-sR     |SV*    |is_an_int      |NN const char *s|STRLEN l
-s      |int    |div128         |NN SV *pnum|NN bool *done
-s      |const char *|group_end |NN const char *patptr|NN const char *patend \
+S      |SV **  |pack_rec       |NN SV *cat|NN struct tempsym* symptr|NN SV **beglist|NN SV **endlist
+S      |SV*    |mul128         |NN SV *sv|U8 m
+S      |SSize_t|measure_struct |NN struct tempsym* symptr
+S      |bool   |next_symbol    |NN struct tempsym* symptr
+SR     |SV*    |is_an_int      |NN const char *s|STRLEN l
+S      |int    |div128         |NN SV *pnum|NN bool *done
+S      |const char *|group_end |NN const char *patptr|NN const char *patend \
                                |char ender
-sR     |const char *|get_num   |NN const char *patptr|NN SSize_t *lenptr
-ns     |bool   |need_utf8      |NN const char *pat|NN const char *patend
-ns     |char   |first_symbol   |NN const char *pat|NN const char *patend
-sR     |char * |sv_exp_grow    |NN SV *sv|STRLEN needed
-snR    |char * |my_bytes_to_utf8|NN const U8 *start|STRLEN len|NN char *dest \
+SR     |const char *|get_num   |NN const char *patptr|NN SSize_t *lenptr
+TS     |bool   |need_utf8      |NN const char *pat|NN const char *patend
+TS     |char   |first_symbol   |NN const char *pat|NN const char *patend
+SR     |char * |sv_exp_grow    |NN SV *sv|STRLEN needed
+STR    |char * |my_bytes_to_utf8|NN const U8 *start|STRLEN len|NN char *dest \
                                |const bool needs_swap
 #endif
 
 #if defined(PERL_IN_PP_CTL_C)
-sR     |OP*    |docatch        |Perl_ppaddr_t firstpp
-sR     |OP*    |dofindlabel    |NN OP *o|NN const char *label|STRLEN len \
+SdR    |OP*    |docatch        |Perl_ppaddr_t firstpp
+SR     |OP*    |dofindlabel    |NN OP *o|NN const char *label|STRLEN len \
                                 |U32 flags|NN OP **opstack|NN OP **oplimit
-s      |MAGIC *|doparseform    |NN SV *sv
-snR    |bool   |num_overflow   |NV value|I32 fldsize|I32 frcsize
-sR     |I32    |dopoptoeval    |I32 startingblock
-sR     |I32    |dopoptogivenfor|I32 startingblock
-sR     |I32    |dopoptolabel   |NN const char *label|STRLEN len|U32 flags
-sR     |I32    |dopoptoloop    |I32 startingblock
-sR     |I32    |dopoptosub_at  |NN const PERL_CONTEXT* cxstk|I32 startingblock
-sR     |I32    |dopoptowhen    |I32 startingblock
-s      |void   |save_lines     |NULLOK AV *array|NN SV *sv
-s      |bool   |doeval_compile |U8 gimme \
+S      |MAGIC *|doparseform    |NN SV *sv
+STR    |bool   |num_overflow   |NV value|I32 fldsize|I32 frcsize
+SR     |I32    |dopoptoeval    |I32 startingblock
+SR     |I32    |dopoptogivenfor|I32 startingblock
+SR     |I32    |dopoptolabel   |NN const char *label|STRLEN len|U32 flags
+SR     |I32    |dopoptoloop    |I32 startingblock
+SR     |I32    |dopoptosub_at  |NN const PERL_CONTEXT* cxstk|I32 startingblock
+SR     |I32    |dopoptowhen    |I32 startingblock
+S      |void   |save_lines     |NULLOK AV *array|NN SV *sv
+S      |bool   |doeval_compile |U8 gimme \
                                |NULLOK CV* outside|U32 seq|NULLOK HV* hh
-sR     |PerlIO *|check_type_and_open|NN SV *name
+SR     |PerlIO *|check_type_and_open|NN SV *name
 #ifndef PERL_DISABLE_PMC
-sR     |PerlIO *|doopen_pm     |NN SV *name
-#endif
-iRn    |bool   |path_is_searchable|NN const char *name
-sR     |I32    |run_user_filter|int idx|NN SV *buf_sv|int maxlen
-sR     |PMOP*  |make_matcher   |NN REGEXP* re
-sR     |bool   |matcher_matches_sv|NN PMOP* matcher|NN SV* sv
-s      |void   |destroy_matcher|NN PMOP* matcher
-s      |OP*    |do_smartmatch  |NULLOK HV* seen_this \
+SR     |PerlIO *|doopen_pm     |NN SV *name
+#endif
+iRT    |bool   |path_is_searchable|NN const char *name
+SR     |I32    |run_user_filter|int idx|NN SV *buf_sv|int maxlen
+SR     |PMOP*  |make_matcher   |NN REGEXP* re
+SR     |bool   |matcher_matches_sv|NN PMOP* matcher|NN SV* sv
+S      |void   |destroy_matcher|NN PMOP* matcher
+S      |OP*    |do_smartmatch  |NULLOK HV* seen_this \
                                |NULLOK HV* seen_other|const bool copied
 #endif
 
 #if defined(PERL_IN_PP_HOT_C)
-s      |void   |do_oddball     |NN SV **oddkey|NN SV **firstkey
+S      |void   |do_oddball     |NN SV **oddkey|NN SV **firstkey
 i      |HV*    |opmethod_stash |NN SV* meth
 #endif
 
 #if defined(PERL_IN_PP_SORT_C)
-s      |I32    |sv_ncmp        |NN SV *const a|NN SV *const b
-s      |I32    |sv_i_ncmp      |NN SV *const a|NN SV *const b
-s      |I32    |amagic_ncmp    |NN SV *const a|NN SV *const b
-s      |I32    |amagic_i_ncmp  |NN SV *const a|NN SV *const b
-s      |I32    |amagic_cmp     |NN SV *const str1|NN SV *const str2
+S      |I32    |sv_ncmp        |NN SV *const a|NN SV *const b
+S      |I32    |sv_i_ncmp      |NN SV *const a|NN SV *const b
+S      |I32    |amagic_ncmp    |NN SV *const a|NN SV *const b
+S      |I32    |amagic_i_ncmp  |NN SV *const a|NN SV *const b
+S      |I32    |amagic_cmp     |NN SV *const str1|NN SV *const str2
 #  ifdef USE_LOCALE_COLLATE
-s      |I32    |amagic_cmp_locale|NN SV *const str1|NN SV *const str2
+S      |I32    |amagic_cmp_locale|NN SV *const str1|NN SV *const str2
 #  endif
-s      |I32    |sortcv         |NN SV *const a|NN SV *const b
-s      |I32    |sortcv_xsub    |NN SV *const a|NN SV *const b
-s      |I32    |sortcv_stacked |NN SV *const a|NN SV *const b
+S      |I32    |sortcv         |NN SV *const a|NN SV *const b
+S      |I32    |sortcv_xsub    |NN SV *const a|NN SV *const b
+S      |I32    |sortcv_stacked |NN SV *const a|NN SV *const b
 #endif
 
 #if defined(PERL_IN_PP_SYS_C)
-s      |OP*    |doform         |NN CV *cv|NN GV *gv|NULLOK OP *retop
+S      |OP*    |doform         |NN CV *cv|NN GV *gv|NULLOK OP *retop
 #  if !defined(HAS_MKDIR) || !defined(HAS_RMDIR)
-sR     |int    |dooneliner     |NN const char *cmd|NN const char *filename
+SR     |int    |dooneliner     |NN const char *cmd|NN const char *filename
 #  endif
-s      |SV *   |space_join_names_mortal|NULLOK char *const *array
+S      |SV *   |space_join_names_mortal|NULLOK char *const *array
 #endif
 p      |OP *   |tied_method|NN SV *methname|NN SV **sp \
                                |NN SV *const sv|NN const MAGIC *const mg \
@@ -2357,108 +2574,109 @@ Ep    |void   |regprop        |NULLOK const regexp *prog|NN SV* sv|NN const regnode* o|NULLO
 Ep     |int    |re_printf      |NN const char *fmt|...
 #endif
 #if defined(PERL_IN_REGCOMP_C)
-Es     |regnode_offset|reg     |NN RExC_state_t *pRExC_state \
+ES     |regnode_offset|reg     |NN RExC_state_t *pRExC_state \
                                |I32 paren|NN I32 *flagp|U32 depth
-Es     |regnode_offset|regnode_guts|NN RExC_state_t *pRExC_state          \
+ES     |regnode_offset|regnode_guts|NN RExC_state_t *pRExC_state          \
                                |const U8 op                               \
                                |const STRLEN extra_len                    \
                                |NN const char* const name
-Es     |void   |change_engine_size|NN RExC_state_t *pRExC_state|const Ptrdiff_t size
-Es     |regnode_offset|reganode|NN RExC_state_t *pRExC_state|U8 op \
+ES     |void   |change_engine_size|NN RExC_state_t *pRExC_state|const Ptrdiff_t size
+ES     |regnode_offset|reganode|NN RExC_state_t *pRExC_state|U8 op \
                                |U32 arg
-Es     |regnode_offset|reg2Lanode|NN RExC_state_t *pRExC_state            \
+ES     |regnode_offset|reg2Lanode|NN RExC_state_t *pRExC_state            \
                                |const U8 op                               \
                                |const U32 arg1                            \
                                |const I32 arg2
-Es     |regnode_offset|regatom |NN RExC_state_t *pRExC_state \
+ES     |regnode_offset|regatom |NN RExC_state_t *pRExC_state \
                                |NN I32 *flagp|U32 depth
-Es     |regnode_offset|regbranch       |NN RExC_state_t *pRExC_state \
+ES     |regnode_offset|regbranch       |NN RExC_state_t *pRExC_state \
                                |NN I32 *flagp|I32 first|U32 depth
-Es     |void    |set_ANYOF_arg |NN RExC_state_t* const pRExC_state \
+ES     |void    |set_ANYOF_arg |NN RExC_state_t* const pRExC_state \
                                |NN regnode* const node                    \
                                |NULLOK SV* const cp_list                  \
                                |NULLOK SV* const runtime_defns            \
                                |NULLOK SV* const only_utf8_locale_list
-Es     |void   |output_posix_warnings                                      \
+ES     |void   |output_posix_warnings                                      \
                                |NN RExC_state_t *pRExC_state               \
                                |NN AV* posix_warnings
-Es     |AV*     |add_multi_match|NULLOK AV* multi_char_matches             \
+EiT    |Size_t  |find_first_differing_byte_pos|NN const U8 * s1|NN const U8 * s2| const Size_t max
+ES     |AV*     |add_multi_match|NULLOK AV* multi_char_matches             \
                                |NN SV* multi_string                        \
                                |const STRLEN cp_count
-Es     |regnode_offset|regclass|NN RExC_state_t *pRExC_state                 \
+ES     |regnode_offset|regclass|NN RExC_state_t *pRExC_state                 \
                                |NN I32 *flagp|U32 depth|const bool stop_at_1 \
                                |bool allow_multi_fold                        \
                                |const bool silence_non_portable              \
                                |const bool strict                            \
                                |bool optimizable                             \
                                |NULLOK SV** ret_invlist
-Es     |void|add_above_Latin1_folds|NN RExC_state_t *pRExC_state|const U8 cp \
+ES     |void|add_above_Latin1_folds|NN RExC_state_t *pRExC_state|const U8 cp \
                                |NN SV** invlist
 Ei     |regnode_offset|handle_named_backref|NN RExC_state_t *pRExC_state   \
                                |NN I32 *flagp                              \
                                |NN char * parse_start                      \
                                |char ch
-EsnR   |unsigned int|regex_set_precedence|const U8 my_operator
-Es     |regnode_offset|handle_regex_sets|NN RExC_state_t *pRExC_state \
+ESTR   |unsigned int|regex_set_precedence|const U8 my_operator
+ES     |regnode_offset|handle_regex_sets|NN RExC_state_t *pRExC_state \
                                |NULLOK SV ** return_invlist            \
                                |NN I32 *flagp|U32 depth                \
                                |NN char * const oregcomp_parse
-Es     |void   |set_regex_pv   |NN RExC_state_t *pRExC_state|NN REGEXP *Rx
+ES     |void   |set_regex_pv   |NN RExC_state_t *pRExC_state|NN REGEXP *Rx
 #if defined(DEBUGGING) && defined(ENABLE_REGEX_SETS_DEBUGGING)
-Es     |void   |dump_regex_sets_structures                                 \
+ES     |void   |dump_regex_sets_structures                                 \
                                |NN RExC_state_t *pRExC_state               \
                                |NN AV * stack                              \
                                |const IV fence|NN AV * fence_stack
 #endif
-Es     |void|parse_lparen_question_flags|NN RExC_state_t *pRExC_state
-Es     |regnode_offset|reg_node|NN RExC_state_t *pRExC_state|U8 op
-Es     |regnode_offset|regpiece|NN RExC_state_t *pRExC_state \
+ES     |void|parse_lparen_question_flags|NN RExC_state_t *pRExC_state
+ES     |regnode_offset|reg_node|NN RExC_state_t *pRExC_state|U8 op
+ES     |regnode_offset|regpiece|NN RExC_state_t *pRExC_state \
                                |NN I32 *flagp|U32 depth
-Es     |bool   |grok_bslash_N  |NN RExC_state_t *pRExC_state               \
+ES     |bool   |grok_bslash_N  |NN RExC_state_t *pRExC_state               \
                                |NULLOK regnode_offset* nodep               \
                                |NULLOK UV *code_point_p                    \
                                |NULLOK int* cp_count                       \
                                |NN I32 *flagp                              \
                                |const bool strict                          \
                                |const U32 depth
-Es     |void   |reginsert      |NN RExC_state_t *pRExC_state \
+ES     |void   |reginsert      |NN RExC_state_t *pRExC_state \
                                |const U8 op                                \
                                |const regnode_offset operand               \
                                |const U32 depth
-E    |bool   |regtail        |NN RExC_state_t * pRExC_state              \
+ESR    |bool   |regtail        |NN RExC_state_t * pRExC_state              \
                                |NN const regnode_offset p                  \
                                |NN const regnode_offset val                \
                                |const U32 depth
-Es     |SV *   |reg_scan_name  |NN RExC_state_t *pRExC_state \
+ES     |SV *   |reg_scan_name  |NN RExC_state_t *pRExC_state \
                                |U32 flags
-Es     |U32    |join_exact     |NN RExC_state_t *pRExC_state \
+ES     |U32    |join_exact     |NN RExC_state_t *pRExC_state \
                                |NN regnode *scan|NN UV *min_subtract  \
                                |NN bool *unfolded_multi_char          \
                                |U32 flags|NULLOK regnode *val|U32 depth
-Ein    |U8   |compute_EXACTish|NN RExC_state_t *pRExC_state
-Es     |void   |nextchar       |NN RExC_state_t *pRExC_state
-Es     |void   |skip_to_be_ignored_text|NN RExC_state_t *pRExC_state  \
+EiT    |U8   |compute_EXACTish|NN RExC_state_t *pRExC_state
+ES     |void   |nextchar       |NN RExC_state_t *pRExC_state
+ES     |void   |skip_to_be_ignored_text|NN RExC_state_t *pRExC_state  \
                                |NN char ** p                       \
                                |const bool force_to_xmod
-Ein    |char * |reg_skipcomment|NN RExC_state_t *pRExC_state|NN char * p
-Es     |void   |scan_commit    |NN const RExC_state_t *pRExC_state \
+EiT    |char * |reg_skipcomment|NN RExC_state_t *pRExC_state|NN char * p
+ES     |void   |scan_commit    |NN const RExC_state_t *pRExC_state \
                                |NN struct scan_data_t *data        \
                                |NN SSize_t *minlenp                \
                                |int is_inf
-Es     |void   |populate_ANYOF_from_invlist|NN regnode *node|NN SV** invlist_ptr
-Es     |void   |ssc_anything   |NN regnode_ssc *ssc
-EsRn   |int    |ssc_is_anything|NN const regnode_ssc *ssc
-Es     |void   |ssc_init       |NN const RExC_state_t *pRExC_state \
+ES     |void   |populate_ANYOF_from_invlist|NN regnode *node|NN SV** invlist_ptr
+ES     |void   |ssc_anything   |NN regnode_ssc *ssc
+ESRT   |int    |ssc_is_anything|NN const regnode_ssc *ssc
+ES     |void   |ssc_init       |NN const RExC_state_t *pRExC_state \
                                |NN regnode_ssc *ssc
-EsRn   |int    |ssc_is_cp_posixl_init|NN const RExC_state_t *pRExC_state \
+ESRT   |int    |ssc_is_cp_posixl_init|NN const RExC_state_t *pRExC_state \
                                |NN const regnode_ssc *ssc
-Es     |void   |ssc_and        |NN const RExC_state_t *pRExC_state \
+ES     |void   |ssc_and        |NN const RExC_state_t *pRExC_state \
                                |NN regnode_ssc *ssc                \
                                |NN const regnode_charclass *and_with
-Es     |void   |ssc_or         |NN const RExC_state_t *pRExC_state \
+ES     |void   |ssc_or         |NN const RExC_state_t *pRExC_state \
                                |NN regnode_ssc *ssc \
                                |NN const regnode_charclass *or_with
-Es     |SV*    |get_ANYOF_cp_list_for_ssc                                 \
+ES     |SV*    |get_ANYOF_cp_list_for_ssc                                 \
                                |NN const RExC_state_t *pRExC_state \
                                |NN const regnode_charclass* const node
 Ei     |void   |ssc_intersection|NN regnode_ssc *ssc \
@@ -2469,42 +2687,41 @@ Ei      |void   |ssc_add_range  |NN regnode_ssc *ssc \
                                |UV const start|UV const end
 Ei     |void   |ssc_cp_and     |NN regnode_ssc *ssc \
                                |UV const cp
-Ein    |void   |ssc_clear_locale|NN regnode_ssc *ssc
-Ens    |bool   |is_ssc_worth_it|NN const RExC_state_t * pRExC_state \
+EiT    |void   |ssc_clear_locale|NN regnode_ssc *ssc
+ETS    |bool   |is_ssc_worth_it|NN const RExC_state_t * pRExC_state \
                                |NN const regnode_ssc * ssc
-Es     |void   |ssc_finalize   |NN RExC_state_t *pRExC_state \
+ES     |void   |ssc_finalize   |NN RExC_state_t *pRExC_state \
                                |NN regnode_ssc *ssc
-Es     |SSize_t|study_chunk    |NN RExC_state_t *pRExC_state \
+ES     |SSize_t|study_chunk    |NN RExC_state_t *pRExC_state \
                                |NN regnode **scanp|NN SSize_t *minlenp \
                                |NN SSize_t *deltap|NN regnode *last \
                                |NULLOK struct scan_data_t *data \
                                 |I32 stopparen|U32 recursed_depth \
                                |NULLOK regnode_ssc *and_withp \
                                |U32 flags|U32 depth
-EsR    |SV *   |get_ANYOFM_contents|NN const regnode * n
-EsRn   |U32    |add_data       |NN RExC_state_t* const pRExC_state \
+ESR    |SV *   |get_ANYOFM_contents|NN const regnode * n
+ESRT   |U32    |add_data       |NN RExC_state_t* const pRExC_state \
                                |NN const char* const s|const U32 n
-rs     |void   |re_croak2      |bool utf8|NN const char* pat1|NN const char* pat2|...
-Es     |int    |handle_possible_posix                                      \
+rS     |void   |re_croak2      |bool utf8|NN const char* pat1|NN const char* pat2|...
+ES     |int    |handle_possible_posix                                      \
                                |NN RExC_state_t *pRExC_state               \
                                |NN const char* const s                     \
                                |NULLOK char ** updated_parse_ptr           \
                                |NULLOK AV** posix_warnings                 \
                                |const bool check_only
-Es     |I32    |make_trie      |NN RExC_state_t *pRExC_state \
+ES     |I32    |make_trie      |NN RExC_state_t *pRExC_state \
                                |NN regnode *startbranch|NN regnode *first \
                                |NN regnode *last|NN regnode *tail \
                                |U32 word_count|U32 flags|U32 depth
-Es     |regnode *|construct_ahocorasick_from_trie|NN RExC_state_t *pRExC_state \
+ES     |regnode *|construct_ahocorasick_from_trie|NN RExC_state_t *pRExC_state \
                                 |NN regnode *source|U32 depth
-EnsR   |const char *|cntrl_to_mnemonic|const U8 c
-EnsR   |int    |edit_distance  |NN const UV *src                   \
+ETSR   |int    |edit_distance  |NN const UV *src                   \
                                |NN const UV *tgt                   \
                                |const STRLEN x                     \
                                |const STRLEN y                     \
                                |const SSize_t maxDistance
 EpX    |SV *   |parse_uniprop_string|NN const char * const name            \
-                                    |const Size_t name_len                 \
+                                    |Size_t name_len                       \
                                     |const bool is_utf8                    \
                                     |const bool to_fold                    \
                                     |const bool runtime                    \
@@ -2524,141 +2741,142 @@ EXp   |SV *   |handle_user_defined_property|NN const char * name          \
                                             |const STRLEN level
 #  ifdef DEBUGGING
 Ep     |int    |re_indentf     |NN const char *fmt|U32 depth|...
-Es     |void        |regdump_intflags|NULLOK const char *lead| const U32 flags
-Es     |void   |regdump_extflags|NULLOK const char *lead| const U32 flags
-Es     |const regnode*|dumpuntil|NN const regexp *r|NN const regnode *start \
+ES     |void        |regdump_intflags|NULLOK const char *lead| const U32 flags
+ES     |void   |regdump_extflags|NULLOK const char *lead| const U32 flags
+ES     |const regnode*|dumpuntil|NN const regexp *r|NN const regnode *start \
                                |NN const regnode *node \
                                |NULLOK const regnode *last \
                                |NULLOK const regnode *plast \
                                |NN SV* sv|I32 indent|U32 depth
-Es     |void   |put_code_point |NN SV* sv|UV c
-Es     |bool   |put_charclass_bitmap_innards|NN SV* sv             \
+ES     |void   |put_code_point |NN SV* sv|UV c
+ES     |bool   |put_charclass_bitmap_innards|NN SV* sv             \
                                |NULLOK char* bitmap                \
                                |NULLOK SV* nonbitmap_invlist       \
                                |NULLOK SV* only_utf8_locale_invlist\
                                |NULLOK const regnode * const node  \
+                               |const U8 flags                     \
                                |const bool force_as_is_display
-Es     |SV*    |put_charclass_bitmap_innards_common                \
+ES     |SV*    |put_charclass_bitmap_innards_common                \
                                |NN SV* invlist                     \
                                |NULLOK SV* posixes                 \
                                |NULLOK SV* only_utf8               \
                                |NULLOK SV* not_utf8                \
                                |NULLOK SV* only_utf8_locale        \
                                |const bool invert
-Es     |void   |put_charclass_bitmap_innards_invlist               \
+ES     |void   |put_charclass_bitmap_innards_invlist               \
                                |NN SV *sv                          \
                                |NN SV* invlist
-Es     |void   |put_range      |NN SV* sv|UV start|const UV end    \
+ES     |void   |put_range      |NN SV* sv|UV start|const UV end    \
                                |const bool allow_literals
-Es     |void   |dump_trie      |NN const struct _reg_trie_data *trie\
+ES     |void   |dump_trie      |NN const struct _reg_trie_data *trie\
                                |NULLOK HV* widecharmap|NN AV *revcharmap\
                                |U32 depth
-Es     |void   |dump_trie_interim_list|NN const struct _reg_trie_data *trie\
+ES     |void   |dump_trie_interim_list|NN const struct _reg_trie_data *trie\
                                |NULLOK HV* widecharmap|NN AV *revcharmap\
                                |U32 next_alloc|U32 depth
-Es     |void   |dump_trie_interim_table|NN const struct _reg_trie_data *trie\
+ES     |void   |dump_trie_interim_table|NN const struct _reg_trie_data *trie\
                                |NULLOK HV* widecharmap|NN AV *revcharmap\
                                |U32 next_alloc|U32 depth
-E    |bool   |regtail_study  |NN RExC_state_t *pRExC_state \
+ESR    |bool   |regtail_study  |NN RExC_state_t *pRExC_state \
                                |NN regnode_offset p|NN const regnode_offset val|U32 depth
 #  endif
 #endif
 
 #if defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_UTF8_C)
-EXRpM  |bool   |isFOO_lc       |const U8 classnum|const U8 character
+EXRp   |bool   |isFOO_lc       |const U8 classnum|const U8 character
 #endif
 
-#if defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_TOKE_C)
-ERp    |bool   |_is_grapheme   |NN const U8 * strbeg|NN const U8 * s|NN const U8 *strend|const UV cp
+#if defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_TOKE_C)
+ERp    |bool   |is_grapheme    |NN const U8 * strbeg|NN const U8 * s|NN const U8 *strend|const UV cp
 #endif
 
 #if defined(PERL_IN_REGEXEC_C)
-ERs    |bool   |isFOO_utf8_lc  |const U8 classnum|NN const U8* character|NN const U8* e
-ERns   |U8 *   |find_next_masked|NN U8 * s                             \
+ERS    |bool   |isFOO_utf8_lc  |const U8 classnum|NN const U8* character|NN const U8* e
+ERTS   |U8 *   |find_next_masked|NN U8 * s                             \
                                 |NN const U8 * send                    \
                                 |const U8 byte|const U8 mask
-ERns   |U8 *|find_span_end     |NN U8* s|NN const U8 * send|const U8 span_byte
-ERns   |U8 *|find_span_end_mask|NN U8 * s|NN const U8 * send   \
+ERTS   |U8 *|find_span_end     |NN U8* s|NN const U8 * send|const U8 span_byte
+ERTS   |U8 *|find_span_end_mask|NN U8 * s|NN const U8 * send   \
                                |const U8 span_byte|const U8 mask
-ERs    |SSize_t|regmatch       |NN regmatch_info *reginfo|NN char *startpos|NN regnode *prog
-WERs   |I32    |regrepeat      |NN regexp *prog|NN char **startposp \
+ERS    |SSize_t|regmatch       |NN regmatch_info *reginfo|NN char *startpos|NN regnode *prog
+WERS   |I32    |regrepeat      |NN regexp *prog|NN char **startposp \
                                |NN const regnode *p \
                                |NN char *loceol                \
                                |NN regmatch_info *const reginfo \
                                |I32 max
-ERs    |bool   |regtry         |NN regmatch_info *reginfo|NN char **startposp
-ERs    |bool   |reginclass     |NULLOK regexp * const prog  \
+ERS    |bool   |regtry         |NN regmatch_info *reginfo|NN char **startposp
+ERS    |bool   |reginclass     |NULLOK regexp * const prog  \
                                |NN const regnode * const n  \
                                |NN const U8 * const p       \
                                |NN const U8 * const p_end   \
                                |bool const utf8_target
-WEs    |CHECKPOINT|regcppush   |NN const regexp *rex|I32 parenfloor\
+WES    |CHECKPOINT|regcppush   |NN const regexp *rex|I32 parenfloor\
                                |U32 maxopenparen
-WEs    |void   |regcppop       |NN regexp *rex|NN U32 *maxopenparen_p
-WEs    |void   |regcp_restore  |NN regexp *rex|I32 ix|NN U32 *maxopenparen_p
-ERsn   |U8*    |reghop3        |NN U8 *s|SSize_t off|NN const U8 *lim
-ERsn   |U8*    |reghop4        |NN U8 *s|SSize_t off|NN const U8 *llim \
+WES    |void   |regcppop       |NN regexp *rex|NN U32 *maxopenparen_p
+WES    |void   |regcp_restore  |NN regexp *rex|I32 ix|NN U32 *maxopenparen_p
+ERST   |U8*    |reghop3        |NN U8 *s|SSize_t off|NN const U8 *lim
+ERST   |U8*    |reghop4        |NN U8 *s|SSize_t off|NN const U8 *llim \
                                |NN const U8 *rlim
-ERsn   |U8*    |reghopmaybe3   |NN U8 *s|SSize_t off|NN const U8 * const lim
-ERs    |char*  |find_byclass   |NN regexp * prog|NN const regnode *c \
+ERST   |U8*    |reghopmaybe3   |NN U8 *s|SSize_t off|NN const U8 * const lim
+ERS    |char*  |find_byclass   |NN regexp * prog|NN const regnode *c \
                                |NN char *s|NN const char *strend \
                                |NULLOK regmatch_info *reginfo
-Es     |void   |to_utf8_substr |NN regexp * prog
-Es     |bool   |to_byte_substr |NN regexp * prog
-ERsn   |I32    |reg_check_named_buff_matched   |NN const regexp *rex \
+ES     |void   |to_utf8_substr |NN regexp * prog
+ES     |bool   |to_byte_substr |NN regexp * prog
+ERST   |I32    |reg_check_named_buff_matched   |NN const regexp *rex \
                                                |NN const regnode *scan
-EsR    |bool   |isGCB          |const GCB_enum before                  \
+ESR    |bool   |isGCB          |const GCB_enum before                  \
                                |const GCB_enum after                   \
                                |NN const U8 * const strbeg             \
                                |NN const U8 * const curpos             \
                                |const bool utf8_target
-EsR    |GCB_enum|backup_one_GCB|NN const U8 * const strbeg                     \
+ESR    |GCB_enum|backup_one_GCB|NN const U8 * const strbeg                     \
                                |NN U8 ** curpos                                \
                                |const bool utf8_target
-EsR    |bool   |isLB           |LB_enum before                         \
+ESR    |bool   |isLB           |LB_enum before                         \
                                |LB_enum after                          \
                                |NN const U8 * const strbeg             \
                                |NN const U8 * const curpos             \
                                |NN const U8 * const strend             \
                                |const bool utf8_target
-EsR    |LB_enum|advance_one_LB |NN U8 ** curpos                                \
+ESR    |LB_enum|advance_one_LB |NN U8 ** curpos                                \
                                |NN const U8 * const strend                     \
                                |const bool utf8_target
-EsR    |LB_enum|backup_one_LB  |NN const U8 * const strbeg                     \
+ESR    |LB_enum|backup_one_LB  |NN const U8 * const strbeg                     \
                                |NN U8 ** curpos                                \
                                |const bool utf8_target
-EsR    |bool   |isSB           |SB_enum before                         \
+ESR    |bool   |isSB           |SB_enum before                         \
                                |SB_enum after                          \
                                |NN const U8 * const strbeg                     \
                                |NN const U8 * const curpos                     \
                                |NN const U8 * const strend                     \
                                |const bool utf8_target
-EsR    |SB_enum|advance_one_SB |NN U8 ** curpos                                \
+ESR    |SB_enum|advance_one_SB |NN U8 ** curpos                                \
                                |NN const U8 * const strend                     \
                                |const bool utf8_target
-EsR    |SB_enum|backup_one_SB  |NN const U8 * const strbeg                     \
+ESR    |SB_enum|backup_one_SB  |NN const U8 * const strbeg                     \
                                |NN U8 ** curpos                                \
                                |const bool utf8_target
-EsR    |bool   |isWB           |WB_enum previous                               \
+ESR    |bool   |isWB           |WB_enum previous                               \
                                |WB_enum before                         \
                                |WB_enum after                          \
                                |NN const U8 * const strbeg                     \
                                |NN const U8 * const curpos                     \
                                |NN const U8 * const strend                     \
                                |const bool utf8_target
-EsR    |WB_enum|advance_one_WB |NN U8 ** curpos                                \
+ESR    |WB_enum|advance_one_WB |NN U8 ** curpos                                \
                                |NN const U8 * const strend                     \
                                |const bool utf8_target                         \
                                |const bool skip_Extend_Format
-EsR    |WB_enum|backup_one_WB  |NN WB_enum * previous                  \
+ESR    |WB_enum|backup_one_WB  |NN WB_enum * previous                  \
                                |NN const U8 * const strbeg                     \
                                |NN U8 ** curpos                                \
                                |const bool utf8_target
-Ein    |I32    |foldEQ_latin1_s2_folded|NN const char* a|NN const char* b|I32 len
+EiT    |I32    |foldEQ_latin1_s2_folded|NN const char* a|NN const char* b|I32 len
 #  ifdef DEBUGGING
-Es     |void   |dump_exec_pos  |NN const char *locinput|NN const regnode *scan|NN const char *loc_regeol\
+ES     |void   |dump_exec_pos  |NN const char *locinput|NN const regnode *scan|NN const char *loc_regeol\
                                |NN const char *loc_bostr|NN const char *loc_reg_starttry|const bool do_utf8|const U32 depth
-Es     |void   |debug_start_match|NN const REGEXP *prog|const bool do_utf8\
+ES     |void   |debug_start_match|NN const REGEXP *prog|const bool do_utf8\
                                |NN const char *start|NN const char *end\
                                |NN const char *blurb
 
@@ -2667,14 +2885,14 @@ Ep      |int    |re_exec_indentf        |NN const char *fmt|U32 depth|...
 #endif
 
 #if defined(PERL_IN_DUMP_C)
-s      |CV*    |deb_curcv      |I32 ix
-s      |void   |debprof        |NN const OP *o
-s      |UV     |sequence_num   |NULLOK const OP *o
-s      |SV*    |pm_description |NN const PMOP *pm
+S      |CV*    |deb_curcv      |I32 ix
+S      |void   |debprof        |NN const OP *o
+S      |UV     |sequence_num   |NULLOK const OP *o
+S      |SV*    |pm_description |NN const PMOP *pm
 #endif
 
 #if defined(PERL_IN_SCOPE_C)
-s      |SV*    |save_scalar_at |NN SV **sptr|const U32 flags
+S      |SV*    |save_scalar_at |NN SV **sptr|const U32 flags
 #endif
 
 #if defined(PERL_IN_GV_C) || defined(PERL_IN_SV_C) || defined(PERL_IN_PAD_C) || defined(PERL_IN_OP_C)
@@ -2684,7 +2902,7 @@ po        |void   |sv_add_backref |NN SV *const tsv|NN SV *const sv
 
 #if defined(PERL_IN_HV_C) || defined(PERL_IN_MG_C) || defined(PERL_IN_SV_C)
 : Used in hv.c and mg.c
-poM    |void   |sv_kill_backrefs       |NN SV *const sv|NULLOK AV *const av
+pox    |void   |sv_kill_backrefs       |NN SV *const sv|NULLOK AV *const av
 #endif
 
 #if defined(PERL_IN_SV_C) || defined (PERL_IN_OP_C)
@@ -2695,46 +2913,46 @@ pR      |SV *   |varname        |NULLOK const GV *const gv|const char gvtype \
 
 pX     |void   |sv_del_backref |NN SV *const tsv|NN SV *const sv
 #if defined(PERL_IN_SV_C)
-niR    |char * |uiv_2buf       |NN char *const buf|const IV iv|UV uv|const int is_uv|NN char **const peob
+TiR    |char * |uiv_2buf       |NN char *const buf|const IV iv|UV uv|const int is_uv|NN char **const peob
 i      |void   |sv_unglob      |NN SV *const sv|U32 flags
-s      |const char *|sv_display        |NN SV *const sv|NN char *tmpbuf|STRLEN tmpbuf_size
-s      |void   |not_a_number   |NN SV *const sv
-s      |void   |not_incrementable      |NN SV *const sv
-s      |I32    |visit          |NN SVFUNC_t f|const U32 flags|const U32 mask
+S      |const char *|sv_display        |NN SV *const sv|NN char *tmpbuf|STRLEN tmpbuf_size
+S      |void   |not_a_number   |NN SV *const sv
+S      |void   |not_incrementable      |NN SV *const sv
+S      |I32    |visit          |NN SVFUNC_t f|const U32 flags|const U32 mask
 #  ifdef DEBUGGING
-s      |void   |del_sv |NN SV *p
+S      |void   |del_sv |NN SV *p
 #  endif
 #  if !defined(NV_PRESERVES_UV)
 #    ifdef DEBUGGING
-s      |int    |sv_2iuv_non_preserve   |NN SV *const sv|I32 numtype
+S      |int    |sv_2iuv_non_preserve   |NN SV *const sv|I32 numtype
 #    else
-s      |int    |sv_2iuv_non_preserve   |NN SV *const sv
+S      |int    |sv_2iuv_non_preserve   |NN SV *const sv
 #    endif
 #  endif
-sR     |STRLEN |expect_number  |NN const char **const pattern
-sn     |STRLEN |sv_pos_u2b_forwards|NN const U8 *const start \
+SR     |STRLEN |expect_number  |NN const char **const pattern
+ST     |STRLEN |sv_pos_u2b_forwards|NN const U8 *const start \
                |NN const U8 *const send|NN STRLEN *const uoffset \
                |NN bool *const at_end
-sn     |STRLEN |sv_pos_u2b_midway|NN const U8 *const start \
+ST     |STRLEN |sv_pos_u2b_midway|NN const U8 *const start \
                |NN const U8 *send|STRLEN uoffset|const STRLEN uend
-s      |STRLEN |sv_pos_u2b_cached|NN SV *const sv|NN MAGIC **const mgp \
+S      |STRLEN |sv_pos_u2b_cached|NN SV *const sv|NN MAGIC **const mgp \
                |NN const U8 *const start|NN const U8 *const send \
                |STRLEN uoffset|STRLEN uoffset0|STRLEN boffset0
-s      |void   |utf8_mg_len_cache_update|NN SV *const sv|NN MAGIC **const mgp \
+S      |void   |utf8_mg_len_cache_update|NN SV *const sv|NN MAGIC **const mgp \
                |const STRLEN ulen
-s      |void   |utf8_mg_pos_cache_update|NN SV *const sv|NN MAGIC **const mgp \
+S      |void   |utf8_mg_pos_cache_update|NN SV *const sv|NN MAGIC **const mgp \
                |const STRLEN byte|const STRLEN utf8|const STRLEN blen
-s      |STRLEN |sv_pos_b2u_midway|NN const U8 *const s|NN const U8 *const target \
+S      |STRLEN |sv_pos_b2u_midway|NN const U8 *const s|NN const U8 *const target \
                |NN const U8 *end|STRLEN endu
-s      |void   |assert_uft8_cache_coherent|NN const char *const func \
+S      |void   |assert_uft8_cache_coherent|NN const char *const func \
                |STRLEN from_cache|STRLEN real|NN SV *const sv
-sn     |char * |F0convert      |NV nv|NN char *const endbuf|NN STRLEN *const len
-s      |SV *   |more_sv
-s      |bool   |sv_2iuv_common |NN SV *const sv
-s      |void   |glob_assign_glob|NN SV *const dstr|NN SV *const sstr \
+ST     |char * |F0convert      |NV nv|NN char *const endbuf|NN STRLEN *const len
+S      |SV *   |more_sv
+S      |bool   |sv_2iuv_common |NN SV *const sv
+S      |void   |glob_assign_glob|NN SV *const dstr|NN SV *const sstr \
                |const int dtype
-sRn    |PTR_TBL_ENT_t *|ptr_table_find|NN PTR_TBL_t *const tbl|NULLOK const void *const sv
-s      |void   |anonymise_cv_maybe     |NN GV *gv|NN CV *cv
+SRT    |PTR_TBL_ENT_t *|ptr_table_find|NN PTR_TBL_t *const tbl|NULLOK const void *const sv
+S      |void   |anonymise_cv_maybe     |NN GV *gv|NN CV *cv
 #endif
 
 : Used in sv.c and hv.c
@@ -2746,122 +2964,127 @@ EXpR  |SV*    |get_and_check_backslash_N_name|NN const char* s        \
                                |NN const char** error_msg
 
 : For use ONLY in B::Hooks::Parser, by special dispensation
-EXpMR  |char*  |scan_str       |NN char *start|int keep_quoted \
+EXpxR  |char*  |scan_str       |NN char *start|int keep_quoted \
                                |int keep_delims|int re_reparse \
                                |NULLOK char **delimp
-EXpM   |char*  |scan_word      |NN char *s|NN char *dest|STRLEN destlen \
+EXpx   |char*  |scan_word      |NN char *s|NN char *dest|STRLEN destlen \
                                |int allow_package|NN STRLEN *slp
-EXpMR  |char*  |skipspace_flags|NN char *s|U32 flags
+EXpxR  |char*  |skipspace_flags|NN char *s|U32 flags
 #if defined(PERL_IN_TOKE_C)
-s      |void   |check_uni
-s      |void   |force_next     |I32 type
-s      |char*  |force_version  |NN char *s|int guessing
-s      |char*  |force_strict_version   |NN char *s
-s      |char*  |force_word     |NN char *start|int token|int check_keyword \
+S      |void   |check_uni
+S      |void   |force_next     |I32 type
+S      |char*  |force_version  |NN char *s|int guessing
+S      |char*  |force_strict_version   |NN char *s
+S      |char*  |force_word     |NN char *start|int token|int check_keyword \
                                |int allow_pack
-s      |SV*    |tokeq          |NN SV *sv
-sR     |char*  |scan_const     |NN char *start
-sR     |SV*    |get_and_check_backslash_N_name_wrapper|NN const char* s \
+S      |SV*    |tokeq          |NN SV *sv
+SR     |char*  |scan_const     |NN char *start
+SR     |SV*    |get_and_check_backslash_N_name_wrapper|NN const char* s \
                                |NN const char* const e
-sR     |char*  |scan_formline  |NN char *s
-sR     |char*  |scan_heredoc   |NN char *s
-s      |char*  |scan_ident     |NN char *s|NN char *dest       \
+SR     |char*  |scan_formline  |NN char *s
+SR     |char*  |scan_heredoc   |NN char *s
+S      |char*  |scan_ident     |NN char *s|NN char *dest       \
                                |STRLEN destlen|I32 ck_uni
-sR     |char*  |scan_inputsymbol|NN char *start
-sR     |char*  |scan_pat       |NN char *start|I32 type
-sR     |char*  |scan_subst     |NN char *start
-sR     |char*  |scan_trans     |NN char *start
-s      |void   |update_debugger_info|NULLOK SV *orig_sv \
+SR     |char*  |scan_inputsymbol|NN char *start
+SR     |char*  |scan_pat       |NN char *start|I32 type
+SR     |char*  |scan_subst     |NN char *start
+SR     |char*  |scan_trans     |NN char *start
+S      |void   |update_debugger_info|NULLOK SV *orig_sv \
                                |NULLOK const char *const buf|STRLEN len
-sR     |char*  |swallow_bom    |NN U8 *s
+SR     |char*  |swallow_bom    |NN U8 *s
 #ifndef PERL_NO_UTF16_FILTER
-s      |I32    |utf16_textfilter|int idx|NN SV *sv|int maxlen
-s      |U8*    |add_utf16_textfilter|NN U8 *const s|bool reversed
+S      |I32    |utf16_textfilter|int idx|NN SV *sv|int maxlen
+S      |U8*    |add_utf16_textfilter|NN U8 *const s|bool reversed
 #endif
-s      |void   |checkcomma     |NN const char *s|NN const char *name \
+S      |void   |checkcomma     |NN const char *s|NN const char *name \
                                |NN const char *what
-s      |void   |force_ident    |NN const char *s|int kind
-s      |void   |force_ident_maybe_lex|char pit
-s      |void   |incline        |NN const char *s|NN const char *end
-s      |int    |intuit_method  |NN char *s|NULLOK SV *ioname|NULLOK CV *cv
-s      |int    |intuit_more    |NN char *s|NN char *e
-s      |I32    |lop            |I32 f|U8 x|NN char *s
-rs     |void   |missingterm    |NULLOK char *s|STRLEN len
-s      |void   |no_op          |NN const char *const what|NULLOK char *s
-s      |int    |pending_ident
-sR     |I32    |sublex_done
-sR     |I32    |sublex_push
-sR     |I32    |sublex_start
-sR     |char * |filter_gets    |NN SV *sv|STRLEN append
-sR     |HV *   |find_in_my_stash|NN const char *pkgname|STRLEN len
-sR     |char * |tokenize_use   |int is_use|NN char *s
-so     |SV*    |new_constant   |NULLOK const char *s|STRLEN len            \
+S      |void   |force_ident    |NN const char *s|int kind
+S      |void   |force_ident_maybe_lex|char pit
+S      |void   |incline        |NN const char *s|NN const char *end
+S      |int    |intuit_method  |NN char *s|NULLOK SV *ioname|NULLOK CV *cv
+S      |int    |intuit_more    |NN char *s|NN char *e
+S      |I32    |lop            |I32 f|U8 x|NN char *s
+rS     |void   |missingterm    |NULLOK char *s|STRLEN len
+S      |void   |no_op          |NN const char *const what|NULLOK char *s
+S      |int    |pending_ident
+SR     |I32    |sublex_done
+SR     |I32    |sublex_push
+SR     |I32    |sublex_start
+SR     |char * |filter_gets    |NN SV *sv|STRLEN append
+SR     |HV *   |find_in_my_stash|NN const char *pkgname|STRLEN len
+SR     |char * |tokenize_use   |int is_use|NN char *s
+So     |SV*    |new_constant   |NULLOK const char *s|STRLEN len            \
                                |NN const char *key|STRLEN keylen|NN SV *sv \
                                |NULLOK SV *pv|NULLOK const char *type      \
                                |STRLEN typelen                             \
                                |NULLOK const char ** error_msg
-s      |int    |ao             |int toketype
-s      |void|parse_ident|NN char **s|NN char **d \
+S      |int    |ao             |int toketype
+S      |void|parse_ident|NN char **s|NN char **d \
                      |NN char * const e|int allow_package \
                                |bool is_utf8|bool check_dollar \
                                |bool tick_warn
 #  if defined(PERL_CR_FILTER)
-s      |I32    |cr_textfilter  |int idx|NULLOK SV *sv|int maxlen
-s      |void   |strip_return   |NN SV *sv
+S      |I32    |cr_textfilter  |int idx|NULLOK SV *sv|int maxlen
+S      |void   |strip_return   |NN SV *sv
 #  endif
 #  if defined(DEBUGGING)
-s      |int    |tokereport     |I32 rv|NN const YYSTYPE* lvalp
-sf     |void   |printbuf       |NN const char *const fmt|NN const char *const s
+S      |int    |tokereport     |I32 rv|NN const YYSTYPE* lvalp
+Sf     |void   |printbuf       |NN const char *const fmt|NN const char *const s
 #  endif
 #endif
-EXMp   |bool   |validate_proto |NN SV *name|NULLOK SV *proto|bool warn \
+EdXxp  |bool   |validate_proto |NN SV *name|NULLOK SV *proto|bool warn \
                |bool curstash
 
 #if defined(PERL_IN_UNIVERSAL_C)
-s      |bool   |isa_lookup     |NN HV *stash|NN const char * const name \
+SG     |bool   |isa_lookup     |NULLOK HV *stash|NULLOK SV *namesv|NULLOK const char * name \
                                         |STRLEN len|U32 flags
+SG   |bool   |sv_derived_from_svpvn  |NULLOK SV *sv                    \
+                                    |NULLOK SV *namesv                 \
+                                    |NULLOK const char * name          \
+                                    |const STRLEN len                  \
+                                    |U32 flags
 #endif
 
 #if defined(PERL_IN_LOCALE_C)
 #  ifdef USE_LOCALE
-sn     |const char*|category_name |const int category
-s      |const char*|switch_category_locale_to_template|const int switch_category|const int template_category|NULLOK const char * template_locale
-s      |void   |restore_switched_locale|const int category|NULLOK const char * const original_locale
+ST     |const char*|category_name |const int category
+S      |const char*|switch_category_locale_to_template|const int switch_category|const int template_category|NULLOK const char * template_locale
+S      |void   |restore_switched_locale|const int category|NULLOK const char * const original_locale
 #  endif
 #  ifdef HAS_NL_LANGINFO
-sn     |const char*|my_nl_langinfo|const nl_item item|bool toggle
+ST     |const char*|my_nl_langinfo|const nl_item item|bool toggle
 #  else
-sn     |const char*|my_nl_langinfo|const int item|bool toggle
+ST     |const char*|my_nl_langinfo|const int item|bool toggle
 #  endif
-inR    |const char *|save_to_buffer|NULLOK const char * string \
+iTR    |const char *|save_to_buffer|NULLOK const char * string \
                                    |NULLOK char **buf          \
                                    |NN Size_t *buf_size        \
                                    |const Size_t offset
 #  if defined(USE_LOCALE)
-s      |char*  |stdize_locale  |NN char* locs
-s      |void   |new_collate    |NULLOK const char* newcoll
-s      |void   |new_ctype      |NN const char* newctype
-s      |void   |set_numeric_radix|const bool use_locale
-s      |void   |new_numeric    |NULLOK const char* newnum
+S      |char*  |stdize_locale  |NN char* locs
+S      |void   |new_collate    |NULLOK const char* newcoll
+S      |void   |new_ctype      |NN const char* newctype
+S      |void   |set_numeric_radix|const bool use_locale
+S      |void   |new_numeric    |NULLOK const char* newnum
 #    ifdef USE_POSIX_2008_LOCALE
-sn     |const char*|emulate_setlocale|const int category               \
+ST     |const char*|emulate_setlocale|const int category               \
                                    |NULLOK const char* locale          \
                                    |unsigned int index                 \
                                    |const bool is_index_valid
 #    endif
 #    ifdef WIN32
-s      |char*  |win32_setlocale|int category|NULLOK const char* locale
+S      |char*  |win32_setlocale|int category|NULLOK const char* locale
 #    endif
 #    ifdef DEBUGGING
-s      |void   |print_collxfrm_input_and_return                \
+S      |void   |print_collxfrm_input_and_return                \
                            |NN const char * const s            \
                            |NN const char * const e            \
                            |NULLOK const STRLEN * const xlen   \
                            |const bool is_utf8
-s      |void   |print_bytes_for_locale |NN const char * const s        \
+S      |void   |print_bytes_for_locale |NN const char * const s        \
                                        |NN const char * const e        \
                                        |const bool is_utf8
-snR    |char * |setlocale_debug_string |const int category                 \
+STR    |char * |setlocale_debug_string |const int category                 \
                                        |NULLOK const char* const locale    \
                                        |NULLOK const char* const retval
 #    endif
@@ -2873,16 +3096,16 @@ snR     |char * |setlocale_debug_string |const int category                 \
         || defined(PERL_IN_MG_C)       \
        || defined (PERL_EXT_POSIX)     \
        || defined (PERL_EXT_LANGINFO))
-ApM    |bool   |_is_cur_LC_category_utf8|int category
+Cp     |bool   |_is_cur_LC_category_utf8|int category
 #endif
 
 
 #if defined(PERL_IN_UTIL_C)
-s      |SV*    |mess_alloc
-s      |SV *   |with_queued_errors|NN SV *ex
-s      |bool   |invoke_exception_hook|NULLOK SV *ex|bool warn
+S      |SV*    |mess_alloc
+S      |SV *   |with_queued_errors|NN SV *ex
+S      |bool   |invoke_exception_hook|NULLOK SV *ex|bool warn
 #if defined(PERL_MEM_LOG) && !defined(PERL_MEM_LOG_NOIMPL)
-sn     |void   |mem_log_common |enum mem_log_type mlt|const UV n|const UV typesize \
+ST     |void   |mem_log_common |enum mem_log_type mlt|const UV n|const UV typesize \
                                |NN const char *type_name|NULLOK const SV *sv \
                                |Malloc_t oldalloc|Malloc_t newalloc \
                                |NN const char *filename|const int linenumber \
@@ -2891,32 +3114,26 @@ sn      |void   |mem_log_common |enum mem_log_type mlt|const UV n|const UV typesize \
 #endif
 
 #if defined(PERL_MEM_LOG)
-pn     |Malloc_t       |mem_log_alloc  |const UV nconst|UV typesize|NN const char *type_name|Malloc_t newalloc|NN const char *filename|const int linenumber|NN const char *funcname
-pn     |Malloc_t       |mem_log_realloc        |const UV n|const UV typesize|NN const char *type_name|Malloc_t oldalloc|Malloc_t newalloc|NN const char *filename|const int linenumber|NN const char *funcname
-pn     |Malloc_t       |mem_log_free   |Malloc_t oldalloc|NN const char *filename|const int linenumber|NN const char *funcname
+pT     |Malloc_t       |mem_log_alloc  |const UV nconst|UV typesize|NN const char *type_name|Malloc_t newalloc|NN const char *filename|const int linenumber|NN const char *funcname
+pT     |Malloc_t       |mem_log_realloc        |const UV n|const UV typesize|NN const char *type_name|Malloc_t oldalloc|Malloc_t newalloc|NN const char *filename|const int linenumber|NN const char *funcname
+pT     |Malloc_t       |mem_log_free   |Malloc_t oldalloc|NN const char *filename|const int linenumber|NN const char *funcname
 #endif
 
 #if defined(PERL_IN_UTF8_C)
-sR     |HV *   |new_msg_hv |NN const char * const message                  \
+SR     |HV *   |new_msg_hv |NN const char * const message                  \
                            |U32 categories                                 \
                            |U32 flag
-sRM    |UV     |check_locale_boundary_crossing                             \
+SR     |UV     |check_locale_boundary_crossing                             \
                |NN const U8* const p                                       \
                |const UV result                                            \
                |NN U8* const ustrp                                         \
                |NN STRLEN *lenp
 iR     |bool   |is_utf8_common |NN const U8 *const p                       \
+                               |NN const U8 *const e                       \
                                |NULLOK SV* const invlist
-iR     |bool   |is_utf8_common_with_len|NN const U8 *const p               \
-                                       |NN const U8 *const e               \
-                                       |NULLOK SV* const invlist
-sR     |SV*    |swatch_get     |NN SV* swash|UV start|UV span
-sRM    |U8*    |swash_scan_list_line|NN U8* l|NN U8* const lend|NN UV* min \
-               |NN UV* max|NN UV* val|const bool wants_value               \
-               |NN const U8* const typestr
 #endif
 
-EXiMn  |void   |append_utf8_from_native_byte|const U8 byte|NN U8** dest
+EXiTp  |void   |append_utf8_from_native_byte|const U8 byte|NN U8** dest
 
 Apd    |void   |sv_set_undef   |NN SV *sv
 Apd    |void   |sv_setsv_flags |NN SV *dstr|NULLOK SV *sstr|const I32 flags
@@ -2925,70 +3142,70 @@ Apd     |void   |sv_catpvn_flags|NN SV *const dstr|NN const char *sstr|const STRLEN le
 Apd    |void   |sv_catpv_flags |NN SV *dstr|NN const char *sstr \
                                |const I32 flags
 Apd    |void   |sv_catsv_flags |NN SV *const dsv|NULLOK SV *const ssv|const I32 flags
-Apmd   |STRLEN |sv_utf8_upgrade_flags|NN SV *const sv|const I32 flags
-A    |STRLEN |sv_utf8_upgrade_flags_grow|NN SV *const sv|const I32 flags|STRLEN extra
+Amd    |STRLEN |sv_utf8_upgrade_flags|NN SV *const sv|const I32 flags
+Adp    |STRLEN |sv_utf8_upgrade_flags_grow|NN SV *const sv|const I32 flags|STRLEN extra
 Apd    |char*  |sv_pvn_force_flags|NN SV *const sv|NULLOK STRLEN *const lp|const I32 flags
-Apmb   |void   |sv_copypv      |NN SV *const dsv|NN SV *const ssv
-Apmd   |void   |sv_copypv_nomg |NN SV *const dsv|NN SV *const ssv
+AdpMb  |void   |sv_copypv      |NN SV *const dsv|NN SV *const ssv
+Amd    |void   |sv_copypv_nomg |NN SV *const dsv|NN SV *const ssv
 Apd    |void   |sv_copypv_flags        |NN SV *const dsv|NN SV *const ssv|const I32 flags
-Apo    |char*  |my_atof2       |NN const char *orig|NN NV* value
-Ap     |char*  |my_atof3       |NN const char *orig|NN NV* value|const STRLEN len
-Apn    |int    |my_socketpair  |int family|int type|int protocol|int fd[2]
-Apn    |int    |my_dirfd       |NULLOK DIR* dir
+Cpo    |char*  |my_atof2       |NN const char *orig|NN NV* value
+Cp     |char*  |my_atof3       |NN const char *orig|NN NV* value|const STRLEN len
+ApT    |int    |my_socketpair  |int family|int type|int protocol|int fd[2]
+ApT    |int    |my_dirfd       |NULLOK DIR* dir
 #ifdef PERL_ANY_COW
-: Used in pp_hot.c and regexec.c
-pMXE   |SV*    |sv_setsv_cow   |NULLOK SV* dstr|NN SV* sstr
+: Used in regexec.c
+pxXE   |SV*    |sv_setsv_cow   |NULLOK SV* dstr|NN SV* sstr
 #endif
 
 Aop    |const char *|PerlIO_context_layers|NULLOK const char *mode
 
 #if defined(USE_PERLIO)
-Ap     |int    |PerlIO_close           |NULLOK PerlIO *f
+Apdh   |int    |PerlIO_close           |NULLOK PerlIO *f
 Ap     |int    |PerlIO_fill            |NULLOK PerlIO *f
-Ap     |int    |PerlIO_fileno          |NULLOK PerlIO *f
-Ap     |int    |PerlIO_eof             |NULLOK PerlIO *f
-Ap     |int    |PerlIO_error           |NULLOK PerlIO *f
-Ap     |int    |PerlIO_flush           |NULLOK PerlIO *f
-Ap     |void   |PerlIO_clearerr        |NULLOK PerlIO *f
-Ap     |void   |PerlIO_set_cnt         |NULLOK PerlIO *f|SSize_t cnt
-Ap     |void   |PerlIO_set_ptrcnt      |NULLOK PerlIO *f|NULLOK STDCHAR *ptr \
+Apdh   |int    |PerlIO_fileno          |NULLOK PerlIO *f
+Apdh   |int    |PerlIO_eof             |NULLOK PerlIO *f
+Apdh   |int    |PerlIO_error           |NULLOK PerlIO *f
+Apdh   |int    |PerlIO_flush           |NULLOK PerlIO *f
+Apdh   |void   |PerlIO_clearerr        |NULLOK PerlIO *f
+Apdh   |void   |PerlIO_set_cnt         |NULLOK PerlIO *f|SSize_t cnt
+Apdh   |void   |PerlIO_set_ptrcnt      |NULLOK PerlIO *f|NULLOK STDCHAR *ptr \
                                        |SSize_t cnt
-Ap     |void   |PerlIO_setlinebuf      |NULLOK PerlIO *f
-Ap     |SSize_t|PerlIO_read            |NULLOK PerlIO *f|NN void *vbuf \
+Apdh   |void   |PerlIO_setlinebuf      |NULLOK PerlIO *f
+Apdh   |SSize_t|PerlIO_read            |NULLOK PerlIO *f|NN void *vbuf \
                                        |Size_t count
-Ap     |SSize_t|PerlIO_write           |NULLOK PerlIO *f|NN const void *vbuf \
+Apdh   |SSize_t|PerlIO_write           |NULLOK PerlIO *f|NN const void *vbuf \
                                        |Size_t count
 Ap     |SSize_t|PerlIO_unread          |NULLOK PerlIO *f|NN const void *vbuf \
                                        |Size_t count
-Ap     |Off_t  |PerlIO_tell            |NULLOK PerlIO *f
-Ap     |int    |PerlIO_seek            |NULLOK PerlIO *f|Off_t offset|int whence
+Apdh   |Off_t  |PerlIO_tell            |NULLOK PerlIO *f
+Apdh   |int    |PerlIO_seek            |NULLOK PerlIO *f|Off_t offset|int whence
 Xp     |void   |PerlIO_save_errno      |NULLOK PerlIO *f
 Xp     |void   |PerlIO_restore_errno   |NULLOK PerlIO *f
 
-Ap     |STDCHAR *|PerlIO_get_base      |NULLOK PerlIO *f
-Ap     |STDCHAR *|PerlIO_get_ptr       |NULLOK PerlIO *f
-ApR    |SSize_t          |PerlIO_get_bufsiz    |NULLOK PerlIO *f
-ApR    |SSize_t          |PerlIO_get_cnt       |NULLOK PerlIO *f
+Apdh   |STDCHAR *|PerlIO_get_base      |NULLOK PerlIO *f
+Apdh   |STDCHAR *|PerlIO_get_ptr       |NULLOK PerlIO *f
+ApRdh  |SSize_t          |PerlIO_get_bufsiz    |NULLOK PerlIO *f
+ApRdh  |SSize_t          |PerlIO_get_cnt       |NULLOK PerlIO *f
 
-ApR    |PerlIO *|PerlIO_stdin
-ApR    |PerlIO *|PerlIO_stdout
-ApR    |PerlIO *|PerlIO_stderr
+ApRdh  |PerlIO *|PerlIO_stdin
+ApRdh  |PerlIO *|PerlIO_stdout
+ApRdh  |PerlIO *|PerlIO_stderr
 #endif /* USE_PERLIO */
 
 : Only used in dump.c
 p      |void   |deb_stack_all
 #if defined(PERL_IN_DEB_C)
-s      |void   |deb_stack_n    |NN SV** stack_base|I32 stack_min \
+S      |void   |deb_stack_n    |NN SV** stack_base|I32 stack_min \
                                |I32 stack_max|I32 mark_min|I32 mark_max
 #endif
 
 : pad API
 ApdR   |PADLIST*|pad_new       |int flags
 #ifdef DEBUGGING
-pnX    |void|set_padlist| NN CV * cv | NULLOK PADLIST * padlist
+pTX    |void|set_padlist| NN CV * cv | NULLOK PADLIST * padlist
 #endif
 #if defined(PERL_IN_PAD_C)
-     |PADOFFSET|pad_alloc_name|NN PADNAME *name|U32 flags \
+Sd     |PADOFFSET|pad_alloc_name|NN PADNAME *name|U32 flags \
                                |NULLOK HV *typestash|NULLOK HV *ourstash
 #endif
 Apd    |PADOFFSET|pad_add_name_pvn|NN const char *namepv|STRLEN namelen\
@@ -3000,11 +3217,11 @@ Apd     |PADOFFSET|pad_add_name_pv|NN const char *name\
 Apd    |PADOFFSET|pad_add_name_sv|NN SV *name\
                                |U32 flags|NULLOK HV *typestash\
                                |NULLOK HV *ourstash
-AMpd   |PADOFFSET|pad_alloc    |I32 optype|U32 tmptype
+Axpd   |PADOFFSET|pad_alloc    |I32 optype|U32 tmptype
 Apd    |PADOFFSET|pad_add_anon |NN CV* func|I32 optype
 p      |void   |pad_add_weakref|NN CV* func
 #if defined(PERL_IN_PAD_C)
-sd     |void   |pad_check_dup  |NN PADNAME *name|U32 flags \
+Sd     |void   |pad_check_dup  |NN PADNAME *name|U32 flags \
                                |NULLOK const HV *ourstash
 #endif
 Apd    |PADOFFSET|pad_findmy_pvn|NN const char* namepv|STRLEN namelen|U32 flags
@@ -3013,7 +3230,7 @@ Apd       |PADOFFSET|pad_findmy_sv|NN SV* name|U32 flags
 ApdD   |PADOFFSET|find_rundefsvoffset  |
 Apd    |SV*    |find_rundefsv  |
 #if defined(PERL_IN_PAD_C)
-sd     |PADOFFSET|pad_findlex  |NN const char *namepv|STRLEN namelen|U32 flags \
+Sd     |PADOFFSET|pad_findlex  |NN const char *namepv|STRLEN namelen|U32 flags \
                                |NN const CV* cv|U32 seq|int warn \
                                |NULLOK SV** out_capture \
                                |NN PADNAME** out_name|NN int *out_flags
@@ -3027,29 +3244,32 @@ Apd     |U32    |intro_my
 pd     |OP *   |pad_leavemy
 pd     |void   |pad_swipe      |PADOFFSET po|bool refadjust
 #if defined(PERL_IN_PAD_C)
-sd     |void   |pad_reset
+Sd     |void   |pad_reset
 #endif
-AMpd   |void   |pad_tidy       |padtidy_type type
+Axpd   |void   |pad_tidy       |padtidy_type type
 pd     |void   |pad_free       |PADOFFSET po
 pd     |void   |do_dump_pad    |I32 level|NN PerlIO *file|NULLOK PADLIST *padlist|int full
 #if defined(PERL_IN_PAD_C)
 #  if defined(DEBUGGING)
-sd     |void   |cv_dump        |NN const CV *cv|NN const char *title
+Sd     |void   |cv_dump        |NN const CV *cv|NN const char *title
 #  endif
 #endif
+#if defined(PERL_IN_PAD_C) || defined(PERL_IN_OP_C)
+iT     |bool   |PadnameIN_SCOPE|NN const PADNAME * const pn|const U32 seq
+#endif
 Apd    |CV*    |cv_clone       |NN CV* proto
 p      |CV*    |cv_clone_into  |NN CV* proto|NN CV *target
 pd     |void   |pad_fixup_inner_anons|NN PADLIST *padlist|NN CV *old_cv|NN CV *new_cv
 pdX    |void   |pad_push       |NN PADLIST *padlist|int depth
-ApbdR  |HV*    |pad_compname_type|const PADOFFSET po
-AMpdRn |PADNAME *|padnamelist_fetch|NN PADNAMELIST *pnl|SSize_t key
+ApbdRM |HV*    |pad_compname_type|const PADOFFSET po
+AxpdRT |PADNAME *|padnamelist_fetch|NN PADNAMELIST *pnl|SSize_t key
 Xop    |void   |padnamelist_free|NN PADNAMELIST *pnl
-AMpd   |PADNAME **|padnamelist_store|NN PADNAMELIST *pnl|SSize_t key \
+Axpd   |PADNAME **|padnamelist_store|NN PADNAMELIST *pnl|SSize_t key \
                                     |NULLOK PADNAME *val
 Xop    |void   |padname_free   |NN PADNAME *pn
 #if defined(USE_ITHREADS)
 pdR    |PADNAME *|padname_dup  |NN PADNAME *src|NN CLONE_PARAMS *param
-p    |PADNAMELIST *|padnamelist_dup|NN PADNAMELIST *srcpad \
+pdR    |PADNAMELIST *|padnamelist_dup|NN PADNAMELIST *srcpad \
                                      |NN CLONE_PARAMS *param
 pdR    |PADLIST *|padlist_dup  |NN PADLIST *srcpad \
                                |NN CLONE_PARAMS *param
@@ -3073,21 +3293,21 @@ Apod    |void   |hv_assert      |NN HV *hv
 
 ApdR   |SV*    |hv_scalar      |NN HV *hv
 p      |void   |hv_pushkv      |NN HV *hv|U32 flags
-ApdRM  |SV*    |hv_bucket_ratio|NN HV *hv
+ApdRx  |SV*    |hv_bucket_ratio|NN HV *hv
 ApoR   |I32*   |hv_riter_p     |NN HV *hv
 ApoR   |HE**   |hv_eiter_p     |NN HV *hv
 Apo    |void   |hv_riter_set   |NN HV *hv|I32 riter
 Apo    |void   |hv_eiter_set   |NN HV *hv|NULLOK HE *eiter
 Ap     |void   |hv_rand_set    |NN HV *hv|U32 new_xhv_rand
 Ap     |void   |hv_name_set    |NN HV *hv|NULLOK const char *name|U32 len|U32 flags
-p      |void   |hv_ename_add   |NN HV *hv|NN const char *name|U32 len \
+pd     |void   |hv_ename_add   |NN HV *hv|NN const char *name|U32 len \
                                |U32 flags
-p      |void   |hv_ename_delete|NN HV *hv|NN const char *name|U32 len \
+pd     |void   |hv_ename_delete|NN HV *hv|NN const char *name|U32 len \
                                |U32 flags
 : Used in dump.c and hv.c
-poM    |AV**   |hv_backreferences_p    |NN HV *hv
+pox    |AV**   |hv_backreferences_p    |NN HV *hv
 #if defined(PERL_IN_DUMP_C) || defined(PERL_IN_HV_C) || defined(PERL_IN_SV_C) || defined(PERL_IN_SCOPE_C)
-poM    |void   |hv_kill_backrefs       |NN HV *hv
+pox    |void   |hv_kill_backrefs       |NN HV *hv
 #endif
 Apd    |void   |hv_clear_placeholders  |NN HV *hv
 XpoR   |SSize_t*|hv_placeholders_p     |NN HV *hv
@@ -3098,11 +3318,11 @@ Apo     |void   |hv_placeholders_set    |NN HV *hv|I32 ph
 p      |SV*    |magic_scalarpack|NN HV *hv|NN MAGIC *mg
 
 #if defined(PERL_IN_SV_C)
-s      |SV *   |find_hash_subscript|NULLOK const HV *const hv \
+S      |SV *   |find_hash_subscript|NULLOK const HV *const hv \
                |NN const SV *const val
-s      |SSize_t|find_array_subscript|NULLOK const AV *const av \
+S      |SSize_t|find_array_subscript|NULLOK const AV *const av \
                |NN const SV *const val
-sMd    |SV*    |find_uninit_var|NULLOK const OP *const obase \
+Sxd    |SV*    |find_uninit_var|NULLOK const OP *const obase \
                |NULLOK const SV *const uninit_sv|bool match \
                |NN const char **desc_p
 #endif
@@ -3116,28 +3336,26 @@ p       |void   |dump_sv_child  |NN SV *sv
 #endif
 
 #ifdef PERL_DONT_CREATE_GVSV
-Apbm   |GV*    |gv_SVadd       |NULLOK GV *gv
+ApbM   |GV*    |gv_SVadd       |NULLOK GV *gv
 #endif
 #if defined(PERL_IN_UTIL_C)
-s      |bool   |ckwarn_common  |U32 w
+S      |bool   |ckwarn_common  |U32 w
 #endif
 ApoP   |bool   |ckwarn         |U32 w
 ApoP   |bool   |ckwarn_d       |U32 w
 : FIXME - exported for ByteLoader - public or private?
-XEopMR |STRLEN *|new_warnings_bitfield|NULLOK STRLEN *buffer \
+XEopxR |STRLEN *|new_warnings_bitfield|NULLOK STRLEN *buffer \
                                |NN const char *const bits|STRLEN size
 
-: DON'T REMOVE THE my_sprintf LINE.
-Apnod   |int    |my_sprintf     |NN char *buffer|NN const char *pat|...
-Apnodf |int    |my_snprintf    |NN char *buffer|const Size_t len|NN const char *format|...
-Apnod  |int    |my_vsnprintf   |NN char *buffer|const Size_t len|NN const char *format|va_list ap
+AMpTdf |int    |my_snprintf    |NN char *buffer|const Size_t len|NN const char *format|...
+AMpTd  |int    |my_vsnprintf   |NN char *buffer|const Size_t len|NN const char *format|va_list ap
 #ifdef USE_QUADMATH
-Apnd   |const char*    |quadmath_format_single|NN const char* format
-Apnd   |bool|quadmath_format_needed|NN const char* format
+pTd    |bool   |quadmath_format_valid|NN const char* format
+pTd    |bool|quadmath_format_needed|NN const char* format
 #endif
 
 : Used in mg.c, sv.c
-px     |void   |my_clearenv
+pe     |void   |my_clearenv
 
 #ifdef PERL_IMPLICIT_CONTEXT
 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
@@ -3148,50 +3366,50 @@ Apo     |void*  |my_cxt_init    |NN int *indexp|size_t size
 #endif
 #endif
 #if defined(PERL_IN_UTIL_C)
-so     |void   |xs_version_bootcheck|U32 items|U32 ax|NN const char *xs_p \
+So     |void   |xs_version_bootcheck|U32 items|U32 ax|NN const char *xs_p \
                                |STRLEN xs_len
 #endif
-Xpon   |I32    |xs_handshake   |const U32 key|NN void * v_my_perl\
+XpoT   |I32    |xs_handshake   |const U32 key|NN void * v_my_perl\
                                |NN const char * file| ...
 Xp     |void   |xs_boot_epilog |const I32 ax
 #ifndef HAS_STRLCAT
-Apnod  |Size_t |my_strlcat     |NULLOK char *dst|NULLOK const char *src|Size_t size
+ApTd   |Size_t |my_strlcat     |NULLOK char *dst|NULLOK const char *src|Size_t size
 #endif
 
 #ifndef HAS_STRLCPY
-Apnod  |Size_t |my_strlcpy     |NULLOK char *dst|NULLOK const char *src|Size_t size
+ApTd   |Size_t |my_strlcpy     |NULLOK char *dst|NULLOK const char *src|Size_t size
 #endif
 
 #ifndef HAS_STRNLEN
-Apnod  |Size_t |my_strnlen     |NN const char *str|Size_t maxlen
+AipTd  |Size_t |my_strnlen     |NN const char *str|Size_t maxlen
 #endif
 
 #ifndef HAS_MKOSTEMP
-pno    |int    |my_mkostemp    |NN char *templte|int flags
+pTo    |int    |my_mkostemp    |NN char *templte|int flags
 #endif
 #ifndef HAS_MKSTEMP
-pno    |int    |my_mkstemp     |NN char *templte
+pTo    |int    |my_mkstemp     |NN char *templte
 #endif
 
-APpdn  |bool   |isinfnan       |NV nv
-p      |bool   |isinfnansv     |NN SV *sv
+APpdT  |bool   |isinfnan       |NV nv
+pd     |bool   |isinfnansv     |NN SV *sv
 
 #if !defined(HAS_SIGNBIT)
-AMdnoP |int    |Perl_signbit   |NV f
+AxdToP |int    |Perl_signbit   |NV f
 #endif
 
 : Used by B
-XEMop  |void   |emulate_cop_io |NN const COP *const c|NN SV *const sv
+XExop  |void   |emulate_cop_io |NN const COP *const c|NN SV *const sv
 : Used by SvRX and SvRXOK
-XEMop  |REGEXP *|get_re_arg|NULLOK SV *sv
+XExop  |REGEXP *|get_re_arg|NULLOK SV *sv
 
-Aop    |SV*    |mro_get_private_data|NN struct mro_meta *const smeta \
+Aopdh  |SV*    |mro_get_private_data|NN struct mro_meta *const smeta \
                                     |NN const struct mro_alg *const which
-Aop    |SV*    |mro_set_private_data|NN struct mro_meta *const smeta \
+Aopdh  |SV*    |mro_set_private_data|NN struct mro_meta *const smeta \
                                     |NN const struct mro_alg *const which \
                                     |NN SV *const data
 Aop    |const struct mro_alg *|mro_get_from_name|NN SV *name
-Aop    |void   |mro_register   |NN const struct mro_alg *mro
+Aopd   |void   |mro_register   |NN const struct mro_alg *mro
 Aop    |void   |mro_set_mro    |NN struct mro_meta *const meta \
                                |NN SV *const name
 : Used in HvMROMETA(), which is public.
@@ -3202,13 +3420,13 @@ p       |struct mro_meta*       |mro_meta_dup   |NN struct mro_meta* smeta|NN CLONE_PARAMS* pa
 #endif
 Apd    |AV*    |mro_get_linear_isa|NN HV* stash
 #if defined(PERL_IN_MRO_C)
-sd     |AV*    |mro_get_linear_isa_dfs|NN HV* stash|U32 level
-s      |void   |mro_clean_isarev|NN HV * const isa   \
+Sd     |AV*    |mro_get_linear_isa_dfs|NN HV* stash|U32 level
+S      |void   |mro_clean_isarev|NN HV * const isa   \
                                 |NN const char * const name \
                                 |const STRLEN len \
                                 |NULLOK HV * const exceptions \
                                 |U32 hash|U32 flags
-s      |void   |mro_gather_and_rename|NN HV * const stashes \
+S      |void   |mro_gather_and_rename|NN HV * const stashes \
                                      |NN HV * const seen_stashes \
                                      |NULLOK HV *stash \
                                      |NULLOK HV *oldstash \
@@ -3217,36 +3435,32 @@ s       |void   |mro_gather_and_rename|NN HV * const stashes \
 : Used in hv.c, mg.c, pp.c, sv.c
 pd     |void   |mro_isa_changed_in|NN HV* stash
 Apd    |void   |mro_method_changed_in  |NN HV* stash
-pdx    |void   |mro_package_moved      |NULLOK HV * const stash|NULLOK HV * const oldstash|NN const GV * const gv|U32 flags
+pde    |void   |mro_package_moved      |NULLOK HV * const stash|NULLOK HV * const oldstash|NN const GV * const gv|U32 flags
 : Only used in perl.c
 p      |void   |boot_core_mro
-Apon   |void   |sys_init       |NN int* argc|NN char*** argv
-Apon   |void   |sys_init3      |NN int* argc|NN char*** argv|NN char*** env
-Apon   |void   |sys_term
-ApoM   |const char *|cop_fetch_label|NN COP *const cop \
+ApoT   |void   |sys_init       |NN int* argc|NN char*** argv
+ApoT   |void   |sys_init3      |NN int* argc|NN char*** argv|NN char*** env
+ApoT   |void   |sys_term
+Apxd   |const char *|cop_fetch_label|NN COP *const cop \
                |NULLOK STRLEN *len|NULLOK U32 *flags
 : Only used  in op.c and the perl compiler
-ApoM   |void|cop_store_label \
+Apxd   |void|cop_store_label \
                |NN COP *const cop|NN const char *label|STRLEN len|U32 flags
 
-xpo    |int    |keyword_plugin_standard|NN char* keyword_ptr|STRLEN keyword_len|NN OP** op_ptr
+epo    |int    |keyword_plugin_standard|NN char* keyword_ptr|STRLEN keyword_len|NN OP** op_ptr
 
 #if defined(USE_ITHREADS)
 #  if defined(PERL_IN_SV_C)
-s      |void   |unreferenced_to_tmp_stack|NN AV *const unreferenced
+S      |void   |unreferenced_to_tmp_stack|NN AV *const unreferenced
 #  endif
-ARnop  |CLONE_PARAMS *|clone_params_new|NN PerlInterpreter *const from \
+ARTop  |CLONE_PARAMS *|clone_params_new|NN PerlInterpreter *const from \
                |NN PerlInterpreter *const to
-Anop   |void   |clone_params_del|NN CLONE_PARAMS *param
+ATop   |void   |clone_params_del|NN CLONE_PARAMS *param
 #endif
 
 : Used in perl.c and toke.c
 op     |void   |populate_isa   |NN const char *name|STRLEN len|...
 
-: Used in keywords.c and toke.c
-Xop    |bool   |feature_is_enabled|NN const char *const name \
-               |STRLEN namelen
-
 : Some static inline functions need predeclaration because they are used
 : inside other static inline functions.
 #if defined(PERL_CORE) || defined (PERL_EXT)
@@ -3256,32 +3470,33 @@ Ei      |STRLEN |sv_or_pv_pos_u2b|NN SV *sv|NN const char *pv|STRLEN pos \
 
 Ap     |void   |clear_defarray |NN AV* av|bool abandon
 
-ApM    |void   |leave_adjust_stacks|NN SV **from_sp|NN SV **to_sp \
+Apx    |void   |leave_adjust_stacks|NN SV **from_sp|NN SV **to_sp \
                 |U8 gimme|int filter
 
 #ifndef PERL_NO_INLINE_FUNCTIONS
-AiM    |PERL_CONTEXT * |cx_pushblock|U8 type|U8 gimme|NN SV** sp|I32 saveix
-AiM    |void   |cx_popblock|NN PERL_CONTEXT *cx
-AiM    |void   |cx_topblock|NN PERL_CONTEXT *cx
-AiM    |void   |cx_pushsub      |NN PERL_CONTEXT *cx|NN CV *cv \
+Aixp   |U8     |gimme_V         |
+Aixp   |PERL_CONTEXT * |cx_pushblock|U8 type|U8 gimme|NN SV** sp|I32 saveix
+Aixp   |void   |cx_popblock|NN PERL_CONTEXT *cx
+Aixp   |void   |cx_topblock|NN PERL_CONTEXT *cx
+Aixp   |void   |cx_pushsub      |NN PERL_CONTEXT *cx|NN CV *cv \
                                 |NULLOK OP *retop|bool hasargs
-Ai   |void   |cx_popsub_common|NN PERL_CONTEXT *cx
-Ai   |void   |cx_popsub_args  |NN PERL_CONTEXT *cx
-Ai   |void   |cx_popsub       |NN PERL_CONTEXT *cx
-Ai   |void   |cx_pushformat   |NN PERL_CONTEXT *cx|NN CV *cv \
+Aixp   |void   |cx_popsub_common|NN PERL_CONTEXT *cx
+Aixp   |void   |cx_popsub_args  |NN PERL_CONTEXT *cx
+Aixp   |void   |cx_popsub       |NN PERL_CONTEXT *cx
+Aixp   |void   |cx_pushformat   |NN PERL_CONTEXT *cx|NN CV *cv \
                                 |NULLOK OP *retop|NULLOK GV *gv
-Ai   |void   |cx_popformat    |NN PERL_CONTEXT *cx
-Ai   |void   |cx_pusheval     |NN PERL_CONTEXT *cx \
+Aixp   |void   |cx_popformat    |NN PERL_CONTEXT *cx
+Aixp   |void   |cx_pusheval     |NN PERL_CONTEXT *cx \
                                 |NULLOK OP *retop|NULLOK SV *namesv
-Ai   |void   |cx_popeval      |NN PERL_CONTEXT *cx
-Ai   |void   |cx_pushloop_plain|NN PERL_CONTEXT *cx
-Ai   |void   |cx_pushloop_for |NN PERL_CONTEXT *cx \
+Aixp   |void   |cx_popeval      |NN PERL_CONTEXT *cx
+Aixp   |void   |cx_pushloop_plain|NN PERL_CONTEXT *cx
+Aixp   |void   |cx_pushloop_for |NN PERL_CONTEXT *cx \
                                 |NN void *itervarp|NULLOK SV *itersave
-Ai   |void   |cx_poploop      |NN PERL_CONTEXT *cx
-Ai   |void   |cx_pushwhen     |NN PERL_CONTEXT *cx
-Ai   |void   |cx_popwhen      |NN PERL_CONTEXT *cx
-Ai   |void   |cx_pushgiven    |NN PERL_CONTEXT *cx|NULLOK SV *orig_defsv
-Ai   |void   |cx_popgiven     |NN PERL_CONTEXT *cx
+Aixp   |void   |cx_poploop      |NN PERL_CONTEXT *cx
+Aixp   |void   |cx_pushwhen     |NN PERL_CONTEXT *cx
+Aixp   |void   |cx_popwhen      |NN PERL_CONTEXT *cx
+Aixp   |void   |cx_pushgiven    |NN PERL_CONTEXT *cx|NULLOK SV *orig_defsv
+Aixp   |void   |cx_popgiven     |NN PERL_CONTEXT *cx
 #endif
 
 #ifdef USE_DTRACE
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/01_test b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/01_test
new file mode 100644 (file)
index 0000000..bf28853
--- /dev/null
@@ -0,0 +1,13 @@
+################################################################################
+##
+##  Copyright (C) 2019, Pali <pali@cpan.org>
+##
+##  This program is free software; you can redistribute it and/or
+##  modify it under the same terms as Perl itself.
+##
+################################################################################
+
+=tests plan => 1
+
+# This test file is used as target dependency for Makefile
+ok 1;
index 9fba502..07c84e9 100644 (file)
@@ -31,8 +31,8 @@ HvNAMELEN_get(hv)
 
 =tests plan => 4
 
-ok(Devel::PPPort::HvNAME_get(\%Devel::PPPort::), 'Devel::PPPort');
+is(Devel::PPPort::HvNAME_get(\%Devel::PPPort::), 'Devel::PPPort');
 ok(!defined Devel::PPPort::HvNAME_get({}));
 
-ok(Devel::PPPort::HvNAMELEN_get(\%Devel::PPPort::), length('Devel::PPPort'));
-ok(Devel::PPPort::HvNAMELEN_get({}), 0);
+is(Devel::PPPort::HvNAMELEN_get(\%Devel::PPPort::), length('Devel::PPPort'));
+is(Devel::PPPort::HvNAMELEN_get({}), 0);
index 4f0ded3..c20cb85 100644 (file)
@@ -17,21 +17,8 @@ sv_2pvbyte
 sv_2pv_flags
 sv_pvn_force_flags
 
-=dontwarn
-
-NEED_sv_2pv_flags
-NEED_sv_2pv_flags_GLOBAL
-
 =implementation
 
-/* Backwards compatibility stuff... :-( */
-#if !defined(NEED_sv_2pv_flags) && defined(NEED_sv_2pv_nolen)
-#  define NEED_sv_2pv_flags
-#endif
-#if !defined(NEED_sv_2pv_flags_GLOBAL) && defined(NEED_sv_2pv_nolen_GLOBAL)
-#  define NEED_sv_2pv_flags_GLOBAL
-#endif
-
 /* Hint: sv_2pv_nolen
  * Use the SvPV_nolen() or SvPV_nolen_const() macros instead of sv_2pv_nolen().
  */
@@ -47,21 +34,14 @@ __UNDEFINED__  sv_2pv_nolen(sv)   SvPV_nolen(sv)
 
 #if { VERSION < 5.7.0 }
 
-#if { NEED sv_2pvbyte }
-
-char *
-sv_2pvbyte(pTHX_ SV *sv, STRLEN *lp)
-{
-  sv_utf8_downgrade(sv,0);
-  return SvPV(sv,*lp);
-}
-
-#endif
+__UNDEFINED__ sv_2pvbyte(sv, lp) (sv_utf8_downgrade((sv), 0), SvPV((sv), *(lp)))
 
 /* Hint: sv_2pvbyte
  * Use the SvPVbyte() macro instead of sv_2pvbyte().
  */
 
+/* Replace sv_2pvbyte with SvPVbyte */
+
 #undef SvPVbyte
 
 #define SvPVbyte(sv, lp)                                                \
@@ -83,46 +63,31 @@ __UNDEFINED__  sv_2pvbyte_nolen(sv)  sv_2pv_nolen(sv)
  * Always use the SvPV() macro instead of sv_pvn().
  */
 
+/* Replace sv_pvn with SvPV */
+
 /* Hint: sv_pvn_force
  * Always use the SvPV_force() macro instead of sv_pvn_force().
  */
 
+/* Replace sv_pvn_force with SvPV_force */
+
 /* If these are undefined, they're not handled by the core anyway */
 __UNDEFINED__  SV_IMMEDIATE_UNREF       0
 __UNDEFINED__  SV_GMAGIC                0
 __UNDEFINED__  SV_COW_DROP_PV           0
 __UNDEFINED__  SV_UTF8_NO_ENCODING      0
-__UNDEFINED__  SV_NOSTEAL               0
 __UNDEFINED__  SV_CONST_RETURN          0
 __UNDEFINED__  SV_MUTABLE_RETURN        0
 __UNDEFINED__  SV_SMAGIC                0
 __UNDEFINED__  SV_HAS_TRAILING_NUL      0
 __UNDEFINED__  SV_COW_SHARED_HASH_KEYS  0
 
-#if { VERSION < 5.7.2 }
-
-#if { NEED sv_2pv_flags }
-
-char *
-sv_2pv_flags(pTHX_ SV *sv, STRLEN *lp, I32 flags)
-{
-  STRLEN n_a = (STRLEN) flags;
-  return sv_2pv(sv, lp ? lp : &n_a);
-}
-
-#endif
-
-#if { NEED sv_pvn_force_flags }
-
-char *
-sv_pvn_force_flags(pTHX_ SV *sv, STRLEN *lp, I32 flags)
-{
-  STRLEN n_a = (STRLEN) flags;
-  return sv_pvn_force(sv, lp ? lp : &n_a);
-}
-
-#endif
-
+#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
+  __UNDEFINED__ sv_2pv_flags(sv, lp, flags) ({ SV *_sv = (sv); const I32 _flags = (flags); STRLEN *_lp = lp; _lp = _lp ? : &PL_na; (!(_flags & SV_GMAGIC) && SvGMAGICAL(_sv)) ? ({ char *_pv; SvGMAGICAL_off(_sv); _pv = sv_2pv(_sv, _lp); SvGMAGICAL_on(_sv); _pv; }) : sv_2pv(_sv, _lp); })
+  __UNDEFINED__ sv_pvn_force_flags(sv, lp, flags) ({ SV *_sv = (sv); const I32 _flags = (flags); STRLEN *_lp = lp; _lp = _lp ? : &PL_na; (!(_flags & SV_GMAGIC) && SvGMAGICAL(_sv)) ? ({ char *_pv; SvGMAGICAL_off(_sv); _pv = sv_pvn_force(_sv, _lp); SvGMAGICAL_on(_sv); _pv; }) : sv_pvn_force(_sv, _lp); })
+#else
+  __UNDEFINED__ sv_2pv_flags(sv, lp, flags) ((PL_Sv = (sv)), (!((flags) & SV_GMAGIC) && SvGMAGICAL(PL_Sv)) ? (SvGMAGICAL_off(PL_Sv), (PL_Xpv = (XPV *)sv_2pv(PL_Sv, (lp) ? (lp) : &PL_na)), SvGMAGICAL_on(PL_Sv), (char *)PL_Xpv) : sv_2pv(PL_Sv, (lp) ? (lp) : &PL_na))
+  __UNDEFINED__ sv_pvn_force_flags(sv, lp, flags) ((PL_Sv = (sv)), (!((flags) & SV_GMAGIC) && SvGMAGICAL(PL_Sv)) ? (SvGMAGICAL_off(PL_Sv), (PL_Xpv = (XPV *)sv_pvn_force(PL_Sv, (lp) ? (lp) : &PL_na)), SvGMAGICAL_on(PL_Sv), (char *)PL_Xpv) : sv_pvn_force(PL_Sv, (lp) ? (lp) : &PL_na))
 #endif
 
 #if { VERSION < 5.8.8 } || ( { VERSION >= 5.9.0 } && { VERSION < 5.9.3 } )
@@ -191,12 +156,6 @@ __UNDEFINED__  SvPV_renew(sv,n) STMT_START { SvLEN_set(sv, n); \
                        (Malloc_t)SvPVX(sv), (MEM_SIZE)((n)))); \
                } STMT_END
 
-=xsinit
-
-#define NEED_sv_2pv_flags
-#define NEED_sv_pvn_force_flags
-#define NEED_sv_2pvbyte
-
 =xsubs
 
 IV
@@ -465,70 +424,70 @@ SvPV_renew(sv, nlen, insv)
 
 my $mhx = "mhx";
 
-ok(&Devel::PPPort::SvPVbyte($mhx), 3);
+is(&Devel::PPPort::SvPVbyte($mhx), 3);
 
 my $i = 42;
 
-ok(&Devel::PPPort::SvPV_nolen($mhx), $i++);
-ok(&Devel::PPPort::SvPV_const($mhx), $i++);
-ok(&Devel::PPPort::SvPV_mutable($mhx), $i++);
-ok(&Devel::PPPort::SvPV_flags($mhx), $i++);
-ok(&Devel::PPPort::SvPV_flags_const($mhx), $i++);
-
-ok(&Devel::PPPort::SvPV_flags_const_nolen($mhx), $i++);
-ok(&Devel::PPPort::SvPV_flags_mutable($mhx), $i++);
-ok(&Devel::PPPort::SvPV_force($mhx), $i++);
-ok(&Devel::PPPort::SvPV_force_nolen($mhx), $i++);
-ok(&Devel::PPPort::SvPV_force_mutable($mhx), $i++);
-
-ok(&Devel::PPPort::SvPV_force_nomg($mhx), $i++);
-ok(&Devel::PPPort::SvPV_force_nomg_nolen($mhx), $i++);
-ok(&Devel::PPPort::SvPV_force_flags($mhx), $i++);
-ok(&Devel::PPPort::SvPV_force_flags_nolen($mhx), $i++);
-ok(&Devel::PPPort::SvPV_force_flags_mutable($mhx), $i++);
-
-ok(&Devel::PPPort::SvPV_nolen_const($mhx), $i++);
-ok(&Devel::PPPort::SvPV_nomg($mhx), $i++);
-ok(&Devel::PPPort::SvPV_nomg_const($mhx), $i++);
-ok(&Devel::PPPort::SvPV_nomg_const_nolen($mhx), $i++);
-ok(&Devel::PPPort::SvPV_nomg_nolen($mhx), $i++);
-
-$mhx = 42; ok(&Devel::PPPort::SvPV_nolen($mhx), 0);
-$mhx = 42; ok(&Devel::PPPort::SvPV_const($mhx), 2);
-$mhx = 42; ok(&Devel::PPPort::SvPV_mutable($mhx), 2);
-$mhx = 42; ok(&Devel::PPPort::SvPV_flags($mhx), 2);
-$mhx = 42; ok(&Devel::PPPort::SvPV_flags_const($mhx), 2);
-
-$mhx = 42; ok(&Devel::PPPort::SvPV_flags_const_nolen($mhx), 0);
-$mhx = 42; ok(&Devel::PPPort::SvPV_flags_mutable($mhx), 2);
-$mhx = 42; ok(&Devel::PPPort::SvPV_force($mhx), 2);
-$mhx = 42; ok(&Devel::PPPort::SvPV_force_nolen($mhx), 0);
-$mhx = 42; ok(&Devel::PPPort::SvPV_force_mutable($mhx), 2);
-
-$mhx = 42; ok(&Devel::PPPort::SvPV_force_nomg($mhx), 2);
-$mhx = 42; ok(&Devel::PPPort::SvPV_force_nomg_nolen($mhx), 0);
-$mhx = 42; ok(&Devel::PPPort::SvPV_force_flags($mhx), 2);
-$mhx = 42; ok(&Devel::PPPort::SvPV_force_flags_nolen($mhx), 0);
-$mhx = 42; ok(&Devel::PPPort::SvPV_force_flags_mutable($mhx), 2);
-
-$mhx = 42; ok(&Devel::PPPort::SvPV_nolen_const($mhx), 0);
-$mhx = 42; ok(&Devel::PPPort::SvPV_nomg($mhx), 2);
-$mhx = 42; ok(&Devel::PPPort::SvPV_nomg_const($mhx), 2);
-$mhx = 42; ok(&Devel::PPPort::SvPV_nomg_const_nolen($mhx), 0);
-$mhx = 42; ok(&Devel::PPPort::SvPV_nomg_nolen($mhx), 0);
+is(&Devel::PPPort::SvPV_nolen($mhx), $i++);
+is(&Devel::PPPort::SvPV_const($mhx), $i++);
+is(&Devel::PPPort::SvPV_mutable($mhx), $i++);
+is(&Devel::PPPort::SvPV_flags($mhx), $i++);
+is(&Devel::PPPort::SvPV_flags_const($mhx), $i++);
+
+is(&Devel::PPPort::SvPV_flags_const_nolen($mhx), $i++);
+is(&Devel::PPPort::SvPV_flags_mutable($mhx), $i++);
+is(&Devel::PPPort::SvPV_force($mhx), $i++);
+is(&Devel::PPPort::SvPV_force_nolen($mhx), $i++);
+is(&Devel::PPPort::SvPV_force_mutable($mhx), $i++);
+
+is(&Devel::PPPort::SvPV_force_nomg($mhx), $i++);
+is(&Devel::PPPort::SvPV_force_nomg_nolen($mhx), $i++);
+is(&Devel::PPPort::SvPV_force_flags($mhx), $i++);
+is(&Devel::PPPort::SvPV_force_flags_nolen($mhx), $i++);
+is(&Devel::PPPort::SvPV_force_flags_mutable($mhx), $i++);
+
+is(&Devel::PPPort::SvPV_nolen_const($mhx), $i++);
+is(&Devel::PPPort::SvPV_nomg($mhx), $i++);
+is(&Devel::PPPort::SvPV_nomg_const($mhx), $i++);
+is(&Devel::PPPort::SvPV_nomg_const_nolen($mhx), $i++);
+is(&Devel::PPPort::SvPV_nomg_nolen($mhx), $i++);
+
+$mhx = 42; is(&Devel::PPPort::SvPV_nolen($mhx), 0);
+$mhx = 42; is(&Devel::PPPort::SvPV_const($mhx), 2);
+$mhx = 42; is(&Devel::PPPort::SvPV_mutable($mhx), 2);
+$mhx = 42; is(&Devel::PPPort::SvPV_flags($mhx), 2);
+$mhx = 42; is(&Devel::PPPort::SvPV_flags_const($mhx), 2);
+
+$mhx = 42; is(&Devel::PPPort::SvPV_flags_const_nolen($mhx), 0);
+$mhx = 42; is(&Devel::PPPort::SvPV_flags_mutable($mhx), 2);
+$mhx = 42; is(&Devel::PPPort::SvPV_force($mhx), 2);
+$mhx = 42; is(&Devel::PPPort::SvPV_force_nolen($mhx), 0);
+$mhx = 42; is(&Devel::PPPort::SvPV_force_mutable($mhx), 2);
+
+$mhx = 42; is(&Devel::PPPort::SvPV_force_nomg($mhx), 2);
+$mhx = 42; is(&Devel::PPPort::SvPV_force_nomg_nolen($mhx), 0);
+$mhx = 42; is(&Devel::PPPort::SvPV_force_flags($mhx), 2);
+$mhx = 42; is(&Devel::PPPort::SvPV_force_flags_nolen($mhx), 0);
+$mhx = 42; is(&Devel::PPPort::SvPV_force_flags_mutable($mhx), 2);
+
+$mhx = 42; is(&Devel::PPPort::SvPV_nolen_const($mhx), 0);
+$mhx = 42; is(&Devel::PPPort::SvPV_nomg($mhx), 2);
+$mhx = 42; is(&Devel::PPPort::SvPV_nomg_const($mhx), 2);
+$mhx = 42; is(&Devel::PPPort::SvPV_nomg_const_nolen($mhx), 0);
+$mhx = 42; is(&Devel::PPPort::SvPV_nomg_nolen($mhx), 0);
 
 my $str = "";
 &Devel::PPPort::SvPV_force($str);
 my($s2, $before, $after) = &Devel::PPPort::SvPV_renew($str, 81, "x"x80);
-ok($str, "x"x80);
-ok($s2, "x"x80);
+is($str, "x"x80);
+is($s2, "x"x80);
 ok($before < 81);
-ok($after, 81);
+is($after, 81);
 
 $str = "x"x400;
 &Devel::PPPort::SvPV_force($str);
 ($s2, $before, $after) = &Devel::PPPort::SvPV_renew($str, 41, "x"x40);
-ok($str, "x"x40);
-ok($s2, "x"x40);
+is($str, "x"x40);
+is($s2, "x"x40);
 ok($before > 41);
-ok($after, 41);
+is($after, 41);
index 30452ae..8c3f91b 100644 (file)
 =provides
 
 __UNDEFINED__
+SV_NOSTEAL
+sv_setsv_flags
+newSVsv_nomg
 
 =implementation
 
+__UNDEFINED__ SV_NOSTEAL 16
+
+#if ( { VERSION >= 5.7.3 } && { VERSION < 5.8.7 } ) || ( { VERSION >= 5.9.0 } && { VERSION < 5.9.2 } )
+#undef sv_setsv_flags
+#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
+#define sv_setsv_flags(dstr, sstr, flags)                                          \
+  STMT_START {                                                                     \
+    if (((flags) & SV_NOSTEAL) && (sstr) && (SvFLAGS((SV *)(sstr)) & SVs_TEMP)) {  \
+      SvTEMP_off((SV *)(sstr));                                                    \
+      Perl_sv_setsv_flags(aTHX_ (dstr), (sstr), (flags) & ~SV_NOSTEAL);            \
+      SvTEMP_on((SV *)(sstr));                                                     \
+    } else {                                                                       \
+      Perl_sv_setsv_flags(aTHX_ (dstr), (sstr), (flags) & ~SV_NOSTEAL);            \
+    }                                                                              \
+  } STMT_END
+#else
+  (                                                                                \
+    (((flags) & SV_NOSTEAL) && (sstr) && (SvFLAGS((SV *)(sstr)) & SVs_TEMP)) ? (   \
+      SvTEMP_off((SV *)(sstr)),                                                    \
+      Perl_sv_setsv_flags(aTHX_ (dstr), (sstr), (flags) & ~SV_NOSTEAL),            \
+      SvTEMP_on((SV *)(sstr)),                                                     \
+      1                                                                            \
+    ) : (                                                                          \
+      Perl_sv_setsv_flags(aTHX_ (dstr), (sstr), (flags) & ~SV_NOSTEAL),            \
+      1                                                                            \
+    )                                                                              \
+  )
+#endif
+#endif
+
+#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
+__UNDEFINED__ sv_setsv_flags(dstr, sstr, flags)                                    \
+  STMT_START {                                                                     \
+    if (((flags) & SV_NOSTEAL) && (sstr) && (SvFLAGS((SV *)(sstr)) & SVs_TEMP)) {  \
+      SvTEMP_off((SV *)(sstr));                                                    \
+      if (!((flags) & SV_GMAGIC) && (sstr) && SvGMAGICAL((SV *)(sstr))) {          \
+        SvGMAGICAL_off((SV *)(sstr));                                              \
+        sv_setsv((dstr), (sstr));                                                  \
+        SvGMAGICAL_on((SV *)(sstr));                                               \
+      } else {                                                                     \
+        sv_setsv((dstr), (sstr));                                                  \
+      }                                                                            \
+      SvTEMP_on((SV *)(sstr));                                                     \
+    } else {                                                                       \
+      if (!((flags) & SV_GMAGIC) && (sstr) && SvGMAGICAL((SV *)(sstr))) {          \
+        SvGMAGICAL_off((SV *)(sstr));                                              \
+        sv_setsv((dstr), (sstr));                                                  \
+        SvGMAGICAL_on((SV *)(sstr));                                               \
+      } else {                                                                     \
+        sv_setsv((dstr), (sstr));                                                  \
+      }                                                                            \
+    }                                                                              \
+  } STMT_END
+#else
+__UNDEFINED__ sv_setsv_flags(dstr, sstr, flags)                                    \
+  (                                                                                \
+    (((flags) & SV_NOSTEAL) && (sstr) && (SvFLAGS((SV *)(sstr)) & SVs_TEMP)) ? (   \
+      SvTEMP_off((SV *)(sstr)),                                                    \
+      (!((flags) & SV_GMAGIC) && (sstr) && SvGMAGICAL((SV *)(sstr))) ? (           \
+        SvGMAGICAL_off((SV *)(sstr)),                                              \
+        sv_setsv((dstr), (sstr)),                                                  \
+        SvGMAGICAL_on((SV *)(sstr)),                                               \
+        1                                                                          \
+      ) : (                                                                        \
+        sv_setsv((dstr), (sstr)),                                                  \
+        1                                                                          \
+      ),                                                                           \
+      SvTEMP_on((SV *)(sstr)),                                                     \
+      1                                                                            \
+    ) : (                                                                          \
+      (!((flags) & SV_GMAGIC) && (sstr) && SvGMAGICAL((SV *)(sstr))) ? (           \
+        SvGMAGICAL_off((SV *)(sstr)),                                              \
+        sv_setsv((dstr), (sstr)),                                                  \
+        SvGMAGICAL_on((SV *)(sstr)),                                               \
+        1                                                                          \
+      ) : (                                                                        \
+        sv_setsv((dstr), (sstr)),                                                  \
+        1                                                                          \
+      )                                                                            \
+    )                                                                              \
+  )
+#endif
+
+#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
+__UNDEFINED__ newSVsv_flags(sv, flags) ({ SV *_sv = newSV(0); sv_setsv_flags(_sv, (sv), (flags)); _sv; })
+#else
+__UNDEFINED__ newSVsv_flags(sv, flags) ((PL_Sv = newSV(0)), sv_setsv_flags(PL_Sv, (sv), (flags)), PL_Sv)
+#endif
+
+__UNDEFINED__ newSVsv_nomg(sv) newSVsv_flags((sv), SV_NOSTEAL)
+
+#if { VERSION >= 5.17.5 }
+__UNDEFINED__ sv_mortalcopy_flags(sv, flags) Perl_sv_mortalcopy_flags(aTHX_ (sv), (flags))
+#else
+__UNDEFINED__ sv_mortalcopy_flags(sv, flags) sv_2mortal(newSVsv_flags((sv), (flags)))
+#endif
+
 __UNDEFINED__ SvMAGIC_set(sv, val) \
                 STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \
                 (((XPVMG*) SvANY(sv))->xmg_magic = (val)); } STMT_END
@@ -94,20 +194,90 @@ TestSvSTASH_set(sv, name)
                 SvREFCNT_dec(SvSTASH(sv));
                 SvSTASH_set(sv, (HV*) SvREFCNT_inc(gv_stashpv(name, 0)));
 
-=tests plan => 5
+IV
+Test_sv_setsv_SV_NOSTEAL()
+        PREINIT:
+                SV *sv1, *sv2;
+        CODE:
+                sv1 = sv_2mortal(newSVpv("test1", 0));
+                sv2 = sv_2mortal(newSVpv("test2", 0));
+                sv_setsv_flags(sv2, sv1, SV_NOSTEAL);
+                RETVAL = (strEQ(SvPV_nolen(sv1), "test1") && strEQ(SvPV_nolen(sv2), "test1"));
+        OUTPUT:
+                RETVAL
+
+SV *
+newSVsv_nomg(sv)
+        SV *sv
+        CODE:
+                RETVAL = newSVsv_nomg(sv);
+        OUTPUT:
+                RETVAL
+
+void
+sv_setsv_compile_test(sv)
+        SV *sv
+        CODE:
+                sv_setsv(sv, NULL);
+                sv_setsv_flags(sv, NULL, 0);
+                sv_setsv_flags(sv, NULL, SV_NOSTEAL);
+
+=tests plan => 15
 
 my $foo = 5;
-ok(&Devel::PPPort::TestSvUV_set($foo, 12345), 42);
-ok(&Devel::PPPort::TestSvPVX_const("mhx"), 43);
-ok(&Devel::PPPort::TestSvPVX_mutable("mhx"), 44);
+is(&Devel::PPPort::TestSvUV_set($foo, 12345), 42);
+is(&Devel::PPPort::TestSvPVX_const("mhx"), 43);
+is(&Devel::PPPort::TestSvPVX_mutable("mhx"), 44);
 
 my $bar = [];
 
 bless $bar, 'foo';
-ok($bar->x(), 'foobar');
+is($bar->x(), 'foobar');
 
 Devel::PPPort::TestSvSTASH_set($bar, 'bar');
-ok($bar->x(), 'hacker');
+is($bar->x(), 'hacker');
+
+    if (ivers($]) != ivers(5.7.2)) {
+        ok(Devel::PPPort::Test_sv_setsv_SV_NOSTEAL());
+    }
+    else {
+        skip("7.2 broken for NOSTEAL", 1);
+    }
+
+    tie my $scalar, 'TieScalarCounter', 'string';
+
+    is tied($scalar)->{fetch}, 0;
+    is tied($scalar)->{store}, 0;
+    my $copy = Devel::PPPort::newSVsv_nomg($scalar);
+    is tied($scalar)->{fetch}, 0;
+    is tied($scalar)->{store}, 0;
+
+    my $fetch = $scalar;
+    is tied($scalar)->{fetch}, 1;
+    is tied($scalar)->{store}, 0;
+    my $copy2 = Devel::PPPort::newSVsv_nomg($scalar);
+    is tied($scalar)->{fetch}, 1;
+    is tied($scalar)->{store}, 0;
+    is $copy2, 'string';
+
+package TieScalarCounter;
+
+sub TIESCALAR {
+    my ($class, $value) = @_;
+    return bless { fetch => 0, store => 0, value => $value }, $class;
+}
+
+sub FETCH {
+    my ($self) = @_;
+    $self->{fetch}++;
+    return $self->{value};
+}
+
+sub STORE {
+    my ($self, $value) = @_;
+    $self->{store}++;
+    $self->{value} = $value;
+}
 
 package foo;
 
index 7c46cbb..3525854 100644 (file)
@@ -20,6 +20,7 @@ call_method
 load_module
 vload_module
 G_METHOD
+G_RETHROW
 
 =implementation
 
@@ -28,14 +29,29 @@ __UNDEFINED__  call_sv       perl_call_sv
 __UNDEFINED__  call_pv       perl_call_pv
 __UNDEFINED__  call_argv     perl_call_argv
 __UNDEFINED__  call_method   perl_call_method
-
 __UNDEFINED__  eval_sv       perl_eval_sv
+#if { VERSION >= 5.3.98 } && { VERSION < 5.6.0 }
+__UNDEFINED__  eval_pv       perl_eval_pv
+#endif
 /* Replace: 0 */
 
+#if { VERSION < 5.6.0 }
+__UNDEFINED__ Perl_eval_sv   perl_eval_sv
+#if { VERSION >= 5.3.98 }
+__UNDEFINED__ Perl_eval_pv   perl_eval_pv
+#endif
+#endif
+
 __UNDEFINED__ PERL_LOADMOD_DENY         0x1
 __UNDEFINED__ PERL_LOADMOD_NOIMPORT     0x2
 __UNDEFINED__ PERL_LOADMOD_IMPORT_OPS   0x4
 
+#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
+# define D_PPP_CROAK_IF_ERROR(cond) ({ SV *_errsv; ((cond) && (_errsv = ERRSV) && (SvROK(_errsv) || SvTRUE(_errsv)) && (croak_sv(_errsv), 1)); })
+#else
+# define D_PPP_CROAK_IF_ERROR(cond) ((cond) && (SvROK(ERRSV) || SvTRUE(ERRSV)) && (croak_sv(ERRSV), 1))
+#endif
+
 #ifndef G_METHOD
 # define G_METHOD               64
 # ifdef call_sv
@@ -50,13 +66,36 @@ __UNDEFINED__ PERL_LOADMOD_IMPORT_OPS   0x4
 # endif
 #endif
 
-/* Replace perl_eval_pv with eval_pv */
+#ifndef G_RETHROW
+# define G_RETHROW 8192
+# ifdef eval_sv
+#  undef eval_sv
+# endif
+# if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
+#  define eval_sv(sv, flags) ({ I32 _flags = (flags); I32 _ret = Perl_eval_sv(aTHX_ sv, (_flags & ~G_RETHROW)); D_PPP_CROAK_IF_ERROR(_flags & G_RETHROW); _ret; })
+# else
+#  define eval_sv(sv, flags) ((PL_na = Perl_eval_sv(aTHX_ sv, ((flags) & ~G_RETHROW))), D_PPP_CROAK_IF_ERROR((flags) & G_RETHROW), (I32)PL_na)
+# endif
+#endif
 
+/* Older Perl versions have broken croak_on_error=1 */
+#if { VERSION < 5.31.2 }
+# ifdef eval_pv
+#  undef eval_pv
+#  if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
+#   define eval_pv(p, croak_on_error) ({ SV *_sv = Perl_eval_pv(aTHX_ p, 0); D_PPP_CROAK_IF_ERROR(croak_on_error); _sv; })
+#  else
+#   define eval_pv(p, croak_on_error) ((PL_Sv = Perl_eval_pv(aTHX_ p, 0)), D_PPP_CROAK_IF_ERROR(croak_on_error), PL_Sv)
+#  endif
+# endif
+#endif
+
+/* This is backport for Perl 5.3.97d and older which do not provide perl_eval_pv */
 #ifndef eval_pv
 #if { NEED eval_pv }
 
 SV*
-eval_pv(char *p, I32 croak_on_error)
+eval_pv(const char *p, I32 croak_on_error)
 {
     dSP;
     SV* sv = newSVpv(p, 0);
@@ -69,8 +108,7 @@ eval_pv(char *p, I32 croak_on_error)
     sv = POPs;
     PUTBACK;
 
-    if (croak_on_error && SvTRUEx(ERRSV))
-        croak_sv(ERRSV);
+    D_PPP_CROAK_IF_ERROR(croak_on_error);
 
     return sv;
 }
@@ -78,7 +116,7 @@ eval_pv(char *p, I32 croak_on_error)
 #endif
 #endif
 
-#ifndef vload_module
+#if ! defined(vload_module) && defined(start_subparse)
 #if { NEED vload_module }
 
 void
@@ -121,16 +159,11 @@ vload_module(U32 flags, SV *name, SV *ver, va_list *args)
         COP * const ocurcop = PL_curcop;
         const int oexpect = PL_expect;
 
-#if { VERSION >= 5.004 }
         utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
-                veop, modname, imop);
-#elif { VERSION > 5.003 }
-        utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(),
-                veop, modname, imop);
-#else
-        utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(),
-                modname, imop);
+#if { VERSION > 5.003 }
+                veop,
 #endif
+                modname, imop);
         PL_expect = oexpect;
         PL_copline = ocopline;
         PL_curcop = ocurcop;
@@ -184,6 +217,13 @@ G_DISCARD()
         OUTPUT:
                 RETVAL
 
+I32
+G_RETHROW()
+        CODE:
+                RETVAL = G_RETHROW;
+        OUTPUT:
+                RETVAL
+
 void
 eval_sv(sv, flags)
         SV* sv
@@ -304,13 +344,7 @@ load_module(flags, name, version, ...)
                 Perl_load_module(aTHX_ flags, SvREFCNT_inc_simple(name),
                                  SvREFCNT_inc_simple(version), NULL);
 
-=tests plan => 52
-
-sub eq_array
-{
-  my($a, $b) = @_;
-  join(':', @$a) eq join(':', @$b);
-}
+=tests plan => 88
 
 sub f
 {
@@ -356,9 +390,69 @@ for $test (
     ok(eq_array( [ &Devel::PPPort::call_sv_G_METHOD('meth', $flags, $obj, @$args) ], $expected));
 };
 
-ok(&Devel::PPPort::eval_pv('f()', 0), 'y');
-ok(&Devel::PPPort::eval_pv('f(qw(a b c))', 0), 'y');
+is(&Devel::PPPort::eval_pv('f()', 0), 'y');
+is(&Devel::PPPort::eval_pv('f(qw(a b c))', 0), 'y');
 
-ok(!defined $::{'less::'}, 1, "Hadn't loaded less yet");
+is(!defined $::{'less::'}, 1, "Hadn't loaded less yet");
 Devel::PPPort::load_module(0, "less", undef);
-ok(defined $::{'less::'}, 1, "Have now loaded less");
+is(defined $::{'less::'}, 1, "Have now loaded less");
+
+ok(eval { Devel::PPPort::eval_pv('die', 0); 1 });
+ok(!eval { Devel::PPPort::eval_pv('die', 1); 1 });
+ok($@ =~ /^Died at \(eval [0-9]+\) line 1\.\n$/);
+ok(eval { $@ = 'string1'; Devel::PPPort::eval_pv('', 0); 1 });
+ok(eval { $@ = 'string1'; Devel::PPPort::eval_pv('', 1); 1 });
+ok(eval { $@ = 'string1'; Devel::PPPort::eval_pv('$@ = "string2"', 0); 1 });
+ok(eval { $@ = 'string1'; Devel::PPPort::eval_pv('$@ = "string2"', 1); 1 });
+ok(eval { $@ = 'string1'; Devel::PPPort::eval_pv('$@ = "string2"; die "string3"', 0); 1 });
+ok(!eval { $@ = 'string1'; Devel::PPPort::eval_pv('$@ = "string2"; die "string3"', 1); 1 });
+ok($@ =~ /^string3 at \(eval [0-9]+\) line 1\.\n$/);
+ok(!eval { Devel::PPPort::eval_pv('die False->new', 1); 1 }, 'check false value is rethrown');
+
+if ("$]" >= '5.007003' or ("$]" >= '5.006001' and "$]" < '5.007')) {
+    my $hashref = { key => 'value' };
+    is(eval { Devel::PPPort::eval_pv('die $hashref', 1); 1 }, undef, 'check plain hashref is rethrown');
+    is(ref($@), 'HASH', 'check $@ is hashref') and
+        is($@->{key}, 'value', 'check $@ hashref has correct value');
+
+    my $false = False->new;
+    ok(!$false);
+    is(eval { Devel::PPPort::eval_pv('die $false', 1); 1 }, undef, 'check false objects are rethrown');
+    is(ref($@), 'False', 'check that $@ contains False object');
+    is("$@", "$false", 'check we got the expected object');
+} else {
+    skip 'skip: no support for references in $@', 7;
+}
+
+ok(eval { Devel::PPPort::eval_sv('die', 0); 1 });
+ok(!eval { Devel::PPPort::eval_sv('die', &Devel::PPPort::G_RETHROW); 1 });
+ok($@ =~ /^Died at \(eval [0-9]+\) line 1\.\n$/);
+ok(eval { $@ = 'string1'; Devel::PPPort::eval_sv('', 0); 1 });
+ok(eval { $@ = 'string1'; Devel::PPPort::eval_sv('', &Devel::PPPort::G_RETHROW); 1 });
+ok(eval { $@ = 'string1'; Devel::PPPort::eval_sv('$@ = "string2"', 0); 1 });
+ok(eval { $@ = 'string1'; Devel::PPPort::eval_sv('$@ = "string2"', &Devel::PPPort::G_RETHROW); 1 });
+ok(eval { $@ = 'string1'; Devel::PPPort::eval_sv('$@ = "string2"; die "string3"', 0); 1 });
+ok(!eval { $@ = 'string1'; Devel::PPPort::eval_sv('$@ = "string2"; die "string3"', &Devel::PPPort::G_RETHROW); 1 });
+ok($@ =~ /^string3 at \(eval [0-9]+\) line 1\.\n$/);
+ok(!eval { Devel::PPPort::eval_sv('die False->new', &Devel::PPPort::G_RETHROW); 1 }, 'check false value is rethrown');
+
+if ("$]" >= '5.007003' or ("$]" >= '5.006001' and "$]" < '5.007')) {
+    my $hashref = { key => 'value' };
+    is(eval { Devel::PPPort::eval_sv('die $hashref', &Devel::PPPort::G_RETHROW); 1 }, undef, 'check plain hashref is rethrown');
+    is(ref($@), 'HASH', 'check $@ is hashref') and
+        is($@->{key}, 'value', 'check $@ hashref has correct value');
+
+    my $false = False->new;
+    ok(!$false);
+    is(eval { Devel::PPPort::eval_sv('die $false', &Devel::PPPort::G_RETHROW); 1 }, undef, 'check false objects are rethrown');
+    is(ref($@), 'False', 'check that $@ contains False object');
+    is("$@", "$false", 'check we got the expected object');
+} else {
+    skip 'skip: no support for references in $@', 7;
+}
+
+{
+    package False;
+    use overload bool => sub { 0 }, '""' => sub { 'Foo' };
+    sub new { bless {}, shift }
+}
index 40d3126..c9a92ea 100644 (file)
@@ -74,7 +74,7 @@ DPPP_dopoptosub_at(const PERL_CONTEXT *cxstk, I32 startingblock)
 # if { NEED caller_cx }
 
 const PERL_CONTEXT *
-caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
+caller_cx(pTHX_ I32 level, const PERL_CONTEXT **dbcxp)
 {
     register I32 cxix = DPPP_dopoptosub_at(cxstack, cxstack_ix);
     register const PERL_CONTEXT *cx;
@@ -93,8 +93,8 @@ caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
        /* caller() should not report the automatic calls to &DB::sub */
        if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
                ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
-           count++;
-       if (!count--)
+           level++;
+       if (!level--)
            break;
        cxix = DPPP_dopoptosub_at(ccstack, cxix - 1);
     }
@@ -167,7 +167,7 @@ caller_cx(level)
 
 #endif /* 5.6.0 */
 
-=tests plan => 28
+=tests plan => 8
 
 my $package;
 {
@@ -175,7 +175,7 @@ my $package;
   $package = &Devel::PPPort::CopSTASHPV();
 }
 print "# $package\n";
-ok($package, "MyPackage");
+is($package, "MyPackage");
 
 my $file = &Devel::PPPort::CopFILE();
 print "# $file\n";
@@ -183,10 +183,7 @@ ok($file =~ /cop/i);
 
 BEGIN {
   if ("$]" < 5.006000) {
-    # Skip
-    for (1..28) {
-      ok(1, 1);
-    }
+    skip("Perl version too early", 8);
     exit;
   }
 }
@@ -223,9 +220,6 @@ for (
 ) {
     my ($sub, $arg, @want) = @$_;
     my @got = $sub->($arg);
-    ok(@got, @want);
-    for (0..$#want) {
-        ok($got[$_], $want[$_]);
-    }
+    ok(eq_array(\@got, \@want));
 }
 
index 8dd21cc..e4fa8ce 100644 (file)
@@ -55,14 +55,14 @@ my $rv;
 $Devel::PPPort::exception_caught = undef;
 
 $rv = eval { &Devel::PPPort::exception(0) };
-ok($@, '');
+is($@, '');
 ok(defined $rv);
-ok($rv, 42);
-ok($Devel::PPPort::exception_caught, 0);
+is($rv, 42);
+is($Devel::PPPort::exception_caught, 0);
 
 $Devel::PPPort::exception_caught = undef;
 
 $rv = eval { &Devel::PPPort::exception(1) };
-ok($@, "boo\n");
+is($@, "boo\n");
 ok(not defined $rv);
-ok($Devel::PPPort::exception_caught, 1);
+is($Devel::PPPort::exception_caught, 1);
index 03c632d..094076f 100644 (file)
@@ -55,9 +55,64 @@ croak_NVgf(num)
         PPCODE:
                 Perl_croak(aTHX_ "%.20" NVgf "\n", num);
 
-=tests plan => 1
+#if { VERSION >= 5.004 }
+
+SV *
+sprintf_iv(iv)
+        IV iv
+CODE:
+        RETVAL = newSVpvf("XX_%" IVdf "_XX", iv);
+OUTPUT:
+        RETVAL
+
+SV *
+sprintf_uv(uv)
+        UV uv
+CODE:
+        RETVAL = newSVpvf("XX_%" UVuf "_XX", uv);
+OUTPUT:
+        RETVAL
+
+SV *
+sprintf_ivmax()
+CODE:
+        RETVAL = newSVpvf("%" IVdf, IV_MAX);
+OUTPUT:
+        RETVAL
+
+SV *
+sprintf_uvmax()
+CODE:
+        RETVAL = newSVpvf("%" UVuf, UV_MAX);
+OUTPUT:
+        RETVAL
+
+#endif
+
+=tests plan => 5
+
+use Config;
+
+if ("$]" < '5.004') {
+    skip 'skip: No newSVpvf support', 5;
+    exit;
+}
 
 my $num = 1.12345678901234567890;
 
 eval { Devel::PPPort::croak_NVgf($num) };
 ok($@ =~ /^1.1234567890/);
+
+is(Devel::PPPort::sprintf_iv(-8), 'XX_-8_XX');
+is(Devel::PPPort::sprintf_uv(15), 'XX_15_XX');
+
+my $ivsize = $Config::Config{ivsize};
+if ($ivsize && ($ivsize == 4 || $ivsize == 8)) {
+    my $ivmax = ($ivsize == 4) ? '2147483647' : '9223372036854775807';
+    my $uvmax = ($ivsize == 4) ? '4294967295' : '18446744073709551615';
+    is(Devel::PPPort::sprintf_ivmax(), $ivmax);
+    is(Devel::PPPort::sprintf_uvmax(), $uvmax);
+}
+else {
+    skip 'skip: unknown ivsize', 2;
+}
index 9ca6627..df73008 100644 (file)
@@ -657,14 +657,14 @@ Perl_grok_oct(string)
 
 =tests plan => 10
 
-ok(&Devel::PPPort::grok_number("42"), 42);
+is(&Devel::PPPort::grok_number("42"), 42);
 ok(!defined(&Devel::PPPort::grok_number("A")));
-ok(&Devel::PPPort::grok_bin("10000001"), 129);
-ok(&Devel::PPPort::grok_hex("deadbeef"), 0xdeadbeef);
-ok(&Devel::PPPort::grok_oct("377"), 255);
+is(&Devel::PPPort::grok_bin("10000001"), 129);
+is(&Devel::PPPort::grok_hex("deadbeef"), 0xdeadbeef);
+is(&Devel::PPPort::grok_oct("377"), 255);
 
-ok(&Devel::PPPort::Perl_grok_number("42"), 42);
+is(&Devel::PPPort::Perl_grok_number("42"), 42);
 ok(!defined(&Devel::PPPort::Perl_grok_number("A")));
-ok(&Devel::PPPort::Perl_grok_bin("10000001"), 129);
-ok(&Devel::PPPort::Perl_grok_hex("deadbeef"), 0xdeadbeef);
-ok(&Devel::PPPort::Perl_grok_oct("377"), 255);
+is(&Devel::PPPort::Perl_grok_bin("10000001"), 129);
+is(&Devel::PPPort::Perl_grok_hex("deadbeef"), 0xdeadbeef);
+is(&Devel::PPPort::Perl_grok_oct("377"), 255);
index d2f526f..6f7119a 100644 (file)
 
 =provides
 
+GV_NOADD_MASK
 gv_fetchpvn_flags
+GvSVn
+isGV_with_GP
+gv_fetchsv
+get_cvn_flags
+gv_init_pvn
 
 =implementation
 
-#ifndef gv_fetchpvn_flags
-#if { NEED gv_fetchpvn_flags }
-
-GV*
-gv_fetchpvn_flags(pTHX_ const char* name, STRLEN len, int flags, int types) {
-       char *namepv = savepvn(name, len);
-       GV* stash = gv_fetchpv(namepv, TRUE, SVt_PVHV);
-       Safefree(namepv);
-       return stash;
-}
-
-#endif
+#if { VERSION >= 5.9.2 } && { VERSION <= 5.9.3 } /* 5.9.2 and 5.9.3 ignore the length param */
+#undef gv_fetchpvn_flags
 #endif
 
+__UNDEFINED__ GV_NOADD_MASK 0xE0
+__UNDEFINED__ gv_fetchpvn_flags(name, len, flags, sv_type) gv_fetchpv(SvPVX(sv_2mortal(newSVpvn((name), (len)))), ((flags) & GV_NOADD_MASK) ? FALSE : TRUE, (I32)(sv_type))
+
 __UNDEFINED__ GvSVn(gv)        GvSV(gv)
 __UNDEFINED__ isGV_with_GP(gv) isGV(gv)
 __UNDEFINED__ gv_fetchsv(name, flags, svt) gv_fetchpv(SvPV_nolen_const(name), flags, svt)
@@ -36,10 +35,6 @@ __UNDEFINED__ gv_fetchsv(name, flags, svt) gv_fetchpv(SvPV_nolen_const(name), fl
 __UNDEFINED__ get_cvn_flags(name, namelen, flags) get_cv(name, flags)
 __UNDEFINED__ gv_init_pvn(gv, stash, ptr, len, flags) gv_init(gv, stash, ptr, len, flags & GV_ADDMULTI ? TRUE : FALSE)
 
-=xsinit
-
-#define NEED_gv_fetchpvn_flags
-
 =xsubs
 
 int
@@ -92,11 +87,7 @@ get_cvn_flags()
 SV*
 gv_fetchpvn_flags()
         CODE:
-#if { VERSION < 5.9.2 } || { VERSION > 5.9.3 } /* 5.9.2 and 5.9.3 ignore the length param */
                 RETVAL = newRV_inc((SV*)gv_fetchpvn_flags("Devel::PPPort::VERSIONFAKE", sizeof("Devel::PPPort::VERSIONFAKE")-5, 0, SVt_PV));
-#else
-                RETVAL = newRV_inc((SV*)gv_fetchpvn_flags("Devel::PPPort::VERSION", 0, 0, SVt_PV));
-#endif
         OUTPUT:
                 RETVAL
 
@@ -127,15 +118,15 @@ gv_init_type(namesv, multi, flags)
 
 =tests plan => 7
 
-ok(Devel::PPPort::GvSVn(), 1);
+is(Devel::PPPort::GvSVn(), 1);
 
-ok(Devel::PPPort::isGV_with_GP(), 2);
+is(Devel::PPPort::isGV_with_GP(), 2);
 
-ok(Devel::PPPort::get_cvn_flags(), 3);
+is(Devel::PPPort::get_cvn_flags(), 3);
 
-ok(Devel::PPPort::gv_fetchpvn_flags(), \*Devel::PPPort::VERSION);
+is(Devel::PPPort::gv_fetchpvn_flags(), \*Devel::PPPort::VERSION);
 
-ok(Devel::PPPort::gv_fetchsv("Devel::PPPort::VERSION"), \*Devel::PPPort::VERSION);
+is(Devel::PPPort::gv_fetchsv("Devel::PPPort::VERSION"), \*Devel::PPPort::VERSION);
 
-ok(Devel::PPPort::gv_init_type("sanity_check", 0, 0), "*main::sanity_check");
+is(Devel::PPPort::gv_init_type("sanity_check", 0, 0), "*main::sanity_check");
 ok($::{sanity_check});
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/inctools b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/inctools
new file mode 100644 (file)
index 0000000..ba181fa
--- /dev/null
@@ -0,0 +1,127 @@
+# These are tools that must be included in ppport.h.  It doesn't work if given
+# a .pl suffix
+
+sub format_version
+{
+  # Given an input version that is acceptable to parse_version(), return a
+  # string of the standard representation of it.
+
+  my($r,$v,$s) = parse_version(shift);
+
+  if ($r < 5 || ($r == 5 && $v < 6)) {
+    my $ver = sprintf "%d.%03d", $r, $v;
+    $s > 0 and $ver .= sprintf "_%02d", $s;
+
+    return $ver;
+  }
+
+  return sprintf "%d.%d.%d", $r, $v, $s;
+}
+
+sub parse_version
+{
+  # Returns a triplet, (5, major, minor) from the input, treated as a string,
+  # which can be in any of several typical formats.
+
+  my $ver = shift;
+  $ver = "" unless defined $ver;
+
+  my($r,$v,$s);
+
+  if (   ($r, $v, $s) = $ver =~ /^(5)(\d{3})(\d{3})$/ # 5029010, from the file
+                                                      # names in our
+                                                      # parts/base/ and
+                                                      # parts/todo directories
+      or ($r, $v, $s) = $ver =~ /^(\d+)\.(\d+)\.(\d+)$/   # 5.25.7
+      or ($r, $v, $s) = $ver =~ /^(\d+)\.(\d{3})(\d{3})$/ # 5.025008, from the
+                                                          # output of $]
+      or ($r, $v, $s) = $ver =~ /^(\d+)\.(\d{1,3})()$/    # 5.24, 5.004
+      or ($r, $v, $s) = $ver =~ /^(\d+)\.(00[1-5])_?(\d{2})$/  # 5.003_07
+  ) {
+
+    $s = 0 unless $s;
+
+    die "Only Perl 5 is supported '$ver'\n" if $r != 5;
+    die "Invalid version number: $ver\n" if $v >= 1000 || $s >= 1000;
+    return (5, 0 + $v, 0 + $s);
+  }
+
+  # For some safety, don't assume something is a version number if it has a
+  # literal dot as one of the three characters.  This will have to be fixed
+  # when we reach 5.46
+  if ($ver !~ /\./ && (($r, $v, $s) = $ver =~ /^(.)(.)(.)$/))  # vstring 5.25.7
+  {
+    $r = ord $r;
+    $v = ord $v;
+    $s = ord $s;
+
+    die "Only Perl 5 is supported '$ver'\n" if $r != 5;
+    return (5, $v, $s);
+  }
+
+  my $mesg = "";
+  $mesg = ".  (In 5.00x_yz, x must be 1-5.)" if $ver =~ /_/;
+  die "Invalid version number format: '$ver'$mesg\n";
+}
+
+sub int_parse_version
+{
+    # Returns integer 7 digit human-readable version, suitable for use in file
+    # names in parts/todo parts/base.
+
+    return 0 + join "", map { sprintf("%03d", $_) } parse_version(shift);
+}
+
+sub ivers    # Shorter name for int_parse_version
+{
+    return int_parse_version(shift);
+}
+
+sub format_version_line
+{
+    # Returns a floating point representation of the input version
+
+    my $version = int_parse_version(shift);
+    $version =~ s/^5\B/5./;
+    return $version;
+}
+
+sub dictionary_order($$)    # Sort caselessly, ignoring punct
+{
+    my ($lc_a, $lc_b);
+    my ($squeezed_a, $squeezed_b);
+    my ($valid_a, $valid_b);    # Meaning valid for all releases
+
+    # On early perls, the implicit pass by reference doesn't work, so we have
+    # to use the globals to initialize.
+    if ("$]" < "5.006" ) {
+        $valid_a = $a; $valid_b = $b;
+    }
+    else {
+        ($valid_a, $valid_b) = @_;
+    }
+
+    $lc_a = lc $valid_a;
+    $lc_b = lc $valid_b;
+
+    $squeezed_a = $lc_a;
+    $squeezed_a =~ s/[\W_]//g;   # No punct, including no underscore
+    $squeezed_b = $lc_b;
+    $squeezed_b =~ s/[\W_]//g;
+
+    return( $squeezed_a cmp $squeezed_b
+         or       $lc_a cmp $lc_b
+         or    $valid_a cmp $valid_b);
+}
+
+sub sort_api_lines  # Sort lines of the form flags|return|name|args...
+                    # by 'name'
+{
+    $a =~ / ^ [^|]* \| [^|]* \| (\w+) /x; # 3rd field '|' is sep
+    my $a_name = $1;
+    $b =~ / ^ [^|]* \| [^|]* \| (\w+) /x;
+    my $b_name = $1;
+    return dictionary_order($a_name, $b_name);
+}
+
+1;
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/locale b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/locale
new file mode 100644 (file)
index 0000000..699adfd
--- /dev/null
@@ -0,0 +1,58 @@
+=provides
+
+__UNDEFINED__
+
+=implementation
+
+
+/* If this doesn't exist, it's not needed, so noop */
+__UNDEFINED__  switch_to_global_locale()
+
+/* Originally, this didn't return a value, but in perls like that, the value
+ * should always be TRUE.  Add a return to Perl_sync_locale() when it's
+ * available.  And actually do a sync when its not, if locales are available on
+ * this system. */
+#ifdef sync_locale
+#  if { VERSION < 5.27.9 }
+#    if { VERSION >= 5.21.3 }
+#      undef sync_locale
+#      define sync_locale() (Perl_sync_locale(aTHX), 1)
+#    elif defined(sync_locale)  /* These should be the 5.20 maints*/
+#      undef sync_locale        /* Just copy their defn and return 1 */
+#      define sync_locale() (new_ctype(setlocale(LC_CTYPE, NULL)),        \
+                             new_collate(setlocale(LC_COLLATE, NULL)),    \
+                             set_numeric_local(),                         \
+                             new_numeric(setlocale(LC_NUMERIC, NULL)),    \
+                             1)
+#    elif defined(new_ctype) && defined(LC_CTYPE)
+#      define sync_locale() (new_ctype(setlocale(LC_CTYPE, NULL)), 1)
+#    endif
+#  endif
+#endif
+
+__UNDEFINED__ sync_locale() 1
+
+=xsubs
+
+bool
+sync_locale()
+        CODE:
+            RETVAL = sync_locale();
+        OUTPUT:
+            RETVAL
+
+
+=tests plan => 1
+
+use Config;
+
+  # We don't know for sure that we are in the global locale for testing.  But
+  # if this is unthreaded, it almost certainly is.  But Configure can be called
+  # to force POSIX locales on unthreaded systems.  If this becomes a problem
+  # this check could be beefed up.
+  if ($Config{usethreads}) {
+    ok(1);
+}
+else {
+    ok(&Devel::PPPort::sync_locale());
+}
index a17972c..d1b6d3e 100644 (file)
@@ -118,14 +118,14 @@ mXPUSHu()
 
 =tests plan => 10
 
-ok(join(':', &Devel::PPPort::mPUSHs()), "foo:bar:42");
-ok(join(':', &Devel::PPPort::mPUSHp()), "one:two:three");
-ok(join(':', &Devel::PPPort::mPUSHn()), "0.5:-0.25:0.125");
-ok(join(':', &Devel::PPPort::mPUSHi()), "-1:2:-3");
-ok(join(':', &Devel::PPPort::mPUSHu()), "1:2:3");
-
-ok(join(':', &Devel::PPPort::mXPUSHs()), "foo:bar:42");
-ok(join(':', &Devel::PPPort::mXPUSHp()), "one:two:three");
-ok(join(':', &Devel::PPPort::mXPUSHn()), "0.5:-0.25:0.125");
-ok(join(':', &Devel::PPPort::mXPUSHi()), "-1:2:-3");
-ok(join(':', &Devel::PPPort::mXPUSHu()), "1:2:3");
+is(join(':', &Devel::PPPort::mPUSHs()), "foo:bar:42");
+is(join(':', &Devel::PPPort::mPUSHp()), "one:two:three");
+is(join(':', &Devel::PPPort::mPUSHn()), "0.5:-0.25:0.125");
+is(join(':', &Devel::PPPort::mPUSHi()), "-1:2:-3");
+is(join(':', &Devel::PPPort::mPUSHu()), "1:2:3");
+
+is(join(':', &Devel::PPPort::mXPUSHs()), "foo:bar:42");
+is(join(':', &Devel::PPPort::mXPUSHp()), "one:two:three");
+is(join(':', &Devel::PPPort::mXPUSHn()), "0.5:-0.25:0.125");
+is(join(':', &Devel::PPPort::mXPUSHi()), "-1:2:-3");
+is(join(':', &Devel::PPPort::mXPUSHu()), "1:2:3");
index cecf3ca..3d3b740 100644 (file)
@@ -18,6 +18,11 @@ __UNDEFINED__
 /sv_\w+_mg/
 sv_magic_portable
 
+SvIV_nomg
+SvUV_nomg
+SvNV_nomg
+SvTRUE_nomg
+
 =implementation
 
 __UNDEFINED__  SvGETMAGIC(x) STMT_START { if (SvGMAGICAL(x)) mg_get(x); } STMT_END
@@ -27,8 +32,22 @@ __UNDEFINED__  sv_catpvn_nomg     sv_catpvn
 __UNDEFINED__  sv_catsv_nomg      sv_catsv
 __UNDEFINED__  sv_setsv_nomg      sv_setsv
 __UNDEFINED__  sv_pvn_nomg        sv_pvn
-__UNDEFINED__  SvIV_nomg          SvIV
-__UNDEFINED__  SvUV_nomg          SvUV
+
+#ifdef SVf_IVisUV
+#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
+__UNDEFINED__ SvIV_nomg(sv) (!SvGMAGICAL((sv)) ? SvIV((sv)) : ({ SV *_sviv = sv_mortalcopy_flags((sv), SV_NOSTEAL); IV _iv = SvIV(_sviv); SvFLAGS((sv)) = (SvFLAGS((sv)) & ~SVf_IVisUV) | (SvFLAGS(_sviv) & SVf_IVisUV); _iv; }))
+__UNDEFINED__ SvUV_nomg(sv) (!SvGMAGICAL((sv)) ? SvUV((sv)) : ({ SV *_svuv = sv_mortalcopy_flags((sv), SV_NOSTEAL); UV _uv = SvUV(_svuv); SvFLAGS((sv)) = (SvFLAGS((sv)) & ~SVf_IVisUV) | (SvFLAGS(_svuv) & SVf_IVisUV); _uv; }))
+#else
+__UNDEFINED__ SvIV_nomg(sv) (!SvGMAGICAL((sv)) ? SvIV((sv)) : ((PL_Sv = sv_mortalcopy_flags((sv), SV_NOSTEAL)), sv_upgrade(PL_Sv, SVt_PVIV), (SvIVX(PL_Sv) = SvIV(PL_Sv)), (SvFLAGS((sv)) = (SvFLAGS((sv)) & ~SVf_IVisUV) | (SvFLAGS(PL_Sv) & SVf_IVisUV)), SvIVX(PL_Sv)))
+__UNDEFINED__ SvUV_nomg(sv) (!SvGMAGICAL((sv)) ? SvIV((sv)) : ((PL_Sv = sv_mortalcopy_flags((sv), SV_NOSTEAL)), sv_upgrade(PL_Sv, SVt_PVIV), (SvUVX(PL_Sv) = SvUV(PL_Sv)), (SvFLAGS((sv)) = (SvFLAGS((sv)) & ~SVf_IVisUV) | (SvFLAGS(PL_Sv) & SVf_IVisUV)), SvUVX(PL_Sv)))
+#endif
+#else
+__UNDEFINED__ SvIV_nomg(sv) (!SvGMAGICAL((sv)) ? SvIV((sv)) : SvIVx(sv_mortalcopy_flags((sv), SV_NOSTEAL)))
+__UNDEFINED__ SvUV_nomg(sv) (!SvGMAGICAL((sv)) ? SvUV((sv)) : SvUVx(sv_mortalcopy_flags((sv), SV_NOSTEAL)))
+#endif
+
+__UNDEFINED__ SvNV_nomg(sv) (!SvGMAGICAL((sv)) ? SvNV((sv)) : SvNVx(sv_mortalcopy_flags((sv), SV_NOSTEAL)))
+__UNDEFINED__ SvTRUE_nomg(sv) (!SvGMAGICAL((sv)) ? SvTRUE((sv)) : SvTRUEx(sv_mortalcopy_flags((sv), SV_NOSTEAL)))
 
 #ifndef sv_catpv_mg
 #  define sv_catpv_mg(sv, ptr)          \
@@ -167,7 +186,7 @@ __UNDEFINED__  SvVSTRING_mg(sv)  (SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_vstring
 #if { NEED mg_findext }
 
 MAGIC *
-mg_findext(SV * sv, int type, const MGVTBL *vtbl) {
+mg_findext(const SV * sv, int type, const MGVTBL *vtbl) {
     if (sv) {
         MAGIC *mg;
 
@@ -481,31 +500,110 @@ sv_magic_portable(sv)
         OUTPUT:
                 RETVAL
 
-=tests plan => 23
+UV
+above_IV_MAX()
+        CODE:
+                RETVAL = (UV)IV_MAX+100;
+        OUTPUT:
+                RETVAL
+
+#ifdef SVf_IVisUV
+
+U32
+SVf_IVisUV(sv)
+        SV *sv
+        CODE:
+                RETVAL = (SvFLAGS(sv) & SVf_IVisUV);
+        OUTPUT:
+                RETVAL
+
+#endif
+
+#ifdef SvIV_nomg
+
+IV
+magic_SvIV_nomg(sv)
+        SV *sv
+        CODE:
+                RETVAL = SvIV_nomg(sv);
+        OUTPUT:
+                RETVAL
+
+#endif
+
+#ifdef SvUV_nomg
+
+UV
+magic_SvUV_nomg(sv)
+        SV *sv
+        CODE:
+                RETVAL = SvUV_nomg(sv);
+        OUTPUT:
+                RETVAL
+
+#endif
+
+#ifdef SvNV_nomg
+
+NV
+magic_SvNV_nomg(sv)
+        SV *sv
+        CODE:
+                RETVAL = SvNV_nomg(sv);
+        OUTPUT:
+                RETVAL
+
+#endif
+
+#ifdef SvTRUE_nomg
+
+bool
+magic_SvTRUE_nomg(sv)
+        SV *sv
+        CODE:
+                RETVAL = SvTRUE_nomg(sv);
+        OUTPUT:
+                RETVAL
+
+#endif
+
+#ifdef SvPV_nomg_nolen
+
+char *
+magic_SvPV_nomg_nolen(sv)
+        SV *sv
+        CODE:
+                RETVAL = SvPV_nomg_nolen(sv);
+        OUTPUT:
+                RETVAL
+
+#endif
+
+=tests plan => 63
 
 # Find proper magic
 ok(my $obj1 = Devel::PPPort->new_with_mg());
-ok(Devel::PPPort::as_string($obj1), 'hello');
+is(Devel::PPPort::as_string($obj1), 'hello');
 
 # Find with no magic
 my $obj = bless {}, 'Fake::Class';
-ok(Devel::PPPort::as_string($obj), "Sorry, your princess is in another castle.");
+is(Devel::PPPort::as_string($obj), "Sorry, your princess is in another castle.");
 
 # Find with other magic (not the magic we are looking for)
 ok($obj = Devel::PPPort->new_with_other_mg());
-ok(Devel::PPPort::as_string($obj), "Sorry, your princess is in another castle.");
+is(Devel::PPPort::as_string($obj), "Sorry, your princess is in another castle.");
 
 # Okay, attempt to remove magic that isn't there
 Devel::PPPort::remove_other_magic($obj1);
-ok(Devel::PPPort::as_string($obj1), 'hello');
+is(Devel::PPPort::as_string($obj1), 'hello');
 
 # Remove magic that IS there
 Devel::PPPort::remove_null_magic($obj1);
-ok(Devel::PPPort::as_string($obj1), "Sorry, your princess is in another castle.");
+is(Devel::PPPort::as_string($obj1), "Sorry, your princess is in another castle.");
 
 # Removing when no magic present
 Devel::PPPort::remove_null_magic($obj1);
-ok(Devel::PPPort::as_string($obj1), "Sorry, your princess is in another castle.");
+is(Devel::PPPort::as_string($obj1), "Sorry, your princess is in another castle.");
 
 use Tie::Hash;
 my %h;
@@ -514,34 +612,34 @@ $h{foo} = 'foo';
 $h{bar} = '';
 
 &Devel::PPPort::sv_catpv_mg($h{foo}, 'bar');
-ok($h{foo}, 'foobar');
+is($h{foo}, 'foobar');
 
 &Devel::PPPort::sv_catpvn_mg($h{bar}, 'baz');
-ok($h{bar}, 'baz');
+is($h{bar}, 'baz');
 
 &Devel::PPPort::sv_catsv_mg($h{foo}, '42');
-ok($h{foo}, 'foobar42');
+is($h{foo}, 'foobar42');
 
 &Devel::PPPort::sv_setiv_mg($h{bar}, 42);
-ok($h{bar}, 42);
+is($h{bar}, 42);
 
 &Devel::PPPort::sv_setnv_mg($h{PI}, 3.14159);
 ok(abs($h{PI} - 3.14159) < 0.01);
 
 &Devel::PPPort::sv_setpv_mg($h{mhx}, 'mhx');
-ok($h{mhx}, 'mhx');
+is($h{mhx}, 'mhx');
 
 &Devel::PPPort::sv_setpvn_mg($h{mhx}, 'Marcus');
-ok($h{mhx}, 'Marcus');
+is($h{mhx}, 'Marcus');
 
 &Devel::PPPort::sv_setsv_mg($h{sv}, 'SV');
-ok($h{sv}, 'SV');
+is($h{sv}, 'SV');
 
 &Devel::PPPort::sv_setuv_mg($h{sv}, 4711);
-ok($h{sv}, 4711);
+is($h{sv}, 4711);
 
 &Devel::PPPort::sv_usepvn_mg($h{sv}, 'Perl');
-ok($h{sv}, 'Perl');
+is($h{sv}, 'Perl');
 
 # v1 is treated as a bareword in older perls...
 my $ver = do { local $SIG{'__WARN__'} = sub {}; eval qq[v1.2.0] };
@@ -552,3 +650,108 @@ ok(!Devel::PPPort::SvVSTRING_mg(4711));
 my $foo = 'bar';
 ok(Devel::PPPort::sv_magic_portable($foo));
 ok($foo eq 'bar');
+
+    tie my $scalar, 'TieScalarCounter', 10;
+    my $fetch = $scalar;
+
+    is tied($scalar)->{fetch}, 1;
+    is tied($scalar)->{store}, 0;
+    is Devel::PPPort::magic_SvIV_nomg($scalar), 10;
+    is tied($scalar)->{fetch}, 1;
+    is tied($scalar)->{store}, 0;
+    is Devel::PPPort::magic_SvUV_nomg($scalar), 10;
+    is tied($scalar)->{fetch}, 1;
+    is tied($scalar)->{store}, 0;
+    is Devel::PPPort::magic_SvNV_nomg($scalar), 10;
+    is tied($scalar)->{fetch}, 1;
+    is tied($scalar)->{store}, 0;
+    is Devel::PPPort::magic_SvPV_nomg_nolen($scalar), 10;
+    is tied($scalar)->{fetch}, 1;
+    is tied($scalar)->{store}, 0;
+    ok Devel::PPPort::magic_SvTRUE_nomg($scalar);
+    is tied($scalar)->{fetch}, 1;
+    is tied($scalar)->{store}, 0;
+
+    my $object = OverloadedObject->new('string', 5.5, 0);
+
+    is Devel::PPPort::magic_SvIV_nomg($object), 5;
+    is Devel::PPPort::magic_SvUV_nomg($object), 5;
+    is Devel::PPPort::magic_SvNV_nomg($object), 5.5;
+    is Devel::PPPort::magic_SvPV_nomg_nolen($object), 'string';
+    ok !Devel::PPPort::magic_SvTRUE_nomg($object);
+
+tie my $negative, 'TieScalarCounter', -1;
+$fetch = $negative;
+
+is tied($negative)->{fetch}, 1;
+is tied($negative)->{store}, 0;
+is Devel::PPPort::magic_SvIV_nomg($negative), -1;
+if (ivers($]) >= ivers(5.6)) {
+    ok !Devel::PPPort::SVf_IVisUV($negative);
+} else {
+    skip 'SVf_IVisUV is unsupported', 1;
+}
+is tied($negative)->{fetch}, 1;
+is tied($negative)->{store}, 0;
+Devel::PPPort::magic_SvUV_nomg($negative);
+if (ivers($]) >= ivers(5.6)) {
+    ok !Devel::PPPort::SVf_IVisUV($negative);
+} else {
+    skip 'SVf_IVisUV is unsupported', 1;
+}
+is tied($negative)->{fetch}, 1;
+is tied($negative)->{store}, 0;
+
+tie my $big, 'TieScalarCounter', Devel::PPPort::above_IV_MAX();
+$fetch = $big;
+
+is tied($big)->{fetch}, 1;
+is tied($big)->{store}, 0;
+Devel::PPPort::magic_SvIV_nomg($big);
+if (ivers($]) >= ivers(5.6)) {
+    ok Devel::PPPort::SVf_IVisUV($big);
+} else {
+    skip 'SVf_IVisUV is unsupported', 1;
+}
+is tied($big)->{fetch}, 1;
+is tied($big)->{store}, 0;
+is Devel::PPPort::magic_SvUV_nomg($big), Devel::PPPort::above_IV_MAX();
+if (ivers($]) >= ivers(5.6)) {
+    ok Devel::PPPort::SVf_IVisUV($big);
+} else {
+    skip 'SVf_IVisUV is unsupported', 1;
+}
+is tied($big)->{fetch}, 1;
+is tied($big)->{store}, 0;
+
+package TieScalarCounter;
+
+sub TIESCALAR {
+    my ($class, $value) = @_;
+    return bless { fetch => 0, store => 0, value => $value }, $class;
+}
+
+sub FETCH {
+    my ($self) = @_;
+    $self->{fetch}++;
+    return $self->{value};
+}
+
+sub STORE {
+    my ($self, $value) = @_;
+    $self->{store}++;
+    $self->{value} = $value;
+}
+
+package OverloadedObject;
+
+sub new {
+    my ($class, $str, $num, $bool) = @_;
+    return bless { str => $str, num => $num, bool => $bool }, $class;
+}
+
+use overload
+    '""' => sub { $_[0]->{str} },
+    '0+' => sub { $_[0]->{num} },
+    'bool' => sub { $_[0]->{bool} },
+    ;
index 9a5425e..aa102e2 100644 (file)
@@ -27,6 +27,8 @@ __UNDEFINED__  memEQs(s1, l, s2) \
                    (sizeof(s2)-1 == l && memEQ(s1, (s2 ""), (sizeof(s2)-1)))
 __UNDEFINED__  memNEs(s1, l, s2) !memEQs(s1, l, s2)
 
+__UNDEFINED__  memCHRs(s, c) ((const char *) memchr("" s "" , c, sizeof(s)-1))
+
 __UNDEFINED__  MoveD(s,d,n,t)  memmove((char*)(d),(char*)(s), (n) * sizeof(t))
 __UNDEFINED__  CopyD(s,d,n,t)  memcpy((char*)(d),(char*)(s), (n) * sizeof(t))
 #ifdef HAS_MEMSET
@@ -82,4 +84,4 @@ checkmem()
 
 =tests plan => 1
 
-ok(Devel::PPPort::checkmem(), 6);
+is(Devel::PPPort::checkmem(), 6);
index e9af174..14c7def 100644 (file)
@@ -28,8 +28,6 @@ Perl_croak_no_modify
 croak_memory_wrap
 croak_xs_usage
 
-PERL_ARGS_ASSERT_CROAK_XS_USAGE
-
 =dontwarn
 
 NEED_mess
@@ -50,24 +48,25 @@ NEED_vmess
 #ifndef croak_sv
 #if { VERSION >= 5.7.3 } || ( { VERSION >= 5.6.1 } && { VERSION < 5.7.0 } )
 #  if ( { VERSION >= 5.8.0 } && { VERSION < 5.8.9 } ) || ( { VERSION >= 5.9.0 } && { VERSION < 5.10.1 } )
-#    define D_PPP_FIX_UTF8_ERRSV(errsv, sv)                     \
-        STMT_START {                                            \
-            if (sv != errsv)                                    \
-                SvFLAGS(errsv) = (SvFLAGS(errsv) & ~SVf_UTF8) | \
-                                 (SvFLAGS(sv) & SVf_UTF8);      \
+#    define D_PPP_FIX_UTF8_ERRSV_FOR_SV(sv)                    \
+        STMT_START {                                           \
+            SV *_errsv = ERRSV;                                \
+            SvFLAGS(_errsv) = (SvFLAGS(_errsv) & ~SVf_UTF8) |  \
+                              (SvFLAGS(sv) & SVf_UTF8);        \
         } STMT_END
 #  else
-#    define D_PPP_FIX_UTF8_ERRSV(errsv, sv) STMT_START {} STMT_END
+#    define D_PPP_FIX_UTF8_ERRSV_FOR_SV(sv) STMT_START {} STMT_END
 #  endif
-#  define croak_sv(sv)                        \
-    STMT_START {                              \
-        if (SvROK(sv)) {                      \
-            sv_setsv(ERRSV, sv);              \
-            croak(NULL);                      \
-        } else {                              \
-            D_PPP_FIX_UTF8_ERRSV(ERRSV, sv);  \
-            croak("%" SVf, SVfARG(sv));       \
-        }                                     \
+#  define croak_sv(sv)                         \
+    STMT_START {                               \
+        SV *_sv = (sv);                        \
+        if (SvROK(_sv)) {                      \
+            sv_setsv(ERRSV, _sv);              \
+            croak(NULL);                       \
+        } else {                               \
+            D_PPP_FIX_UTF8_ERRSV_FOR_SV(_sv);  \
+            croak("%" SVf, SVfARG(_sv));       \
+        }                                      \
     } STMT_END
 #elif { VERSION >= 5.4.0 }
 #  define croak_sv(sv) croak("%" SVf, SVfARG(sv))
@@ -79,9 +78,9 @@ NEED_vmess
 #ifndef die_sv
 #if { NEED die_sv }
 OP *
-die_sv(pTHX_ SV *sv)
+die_sv(pTHX_ SV *baseex)
 {
-    croak_sv(sv);
+    croak_sv(baseex);
     return (OP *)NULL;
 }
 #endif
@@ -95,22 +94,23 @@ die_sv(pTHX_ SV *sv)
 #endif
 #endif
 
-#ifndef vmess
-#if { NEED vmess }
+#if ! defined vmess && { VERSION >= 5.4.0 }
+#  if { NEED vmess }
+
 SV*
 vmess(pTHX_ const char* pat, va_list* args)
 {
     mess(pat, args);
     return PL_mess_sv;
 }
-#endif
+#  endif
 #endif
 
-#if { VERSION < 5.6.0 }
+#if { VERSION < 5.6.0 } && { VERSION >= 5.4.0 }
 #undef mess
 #endif
 
-#if !defined(mess_nocontext) && !defined(Perl_mess_nocontext)
+#if !defined(mess_nocontext) && !defined(Perl_mess_nocontext) && { VERSION >= 5.4.0 }
 #if { NEED mess_nocontext }
 SV*
 mess_nocontext(const char* pat, ...)
@@ -146,7 +146,7 @@ mess(pTHX_ const char* pat, ...)
 #endif
 #endif
 
-#ifndef mess_sv
+#if ! defined mess_sv && { VERSION >= 5.4.0 }
 #if { NEED mess_sv }
 SV *
 mess_sv(pTHX_ SV *basemsg, bool consume)
@@ -201,9 +201,6 @@ mess_sv(pTHX_ SV *basemsg, bool consume)
 #ifndef croak_xs_usage
 #if { NEED croak_xs_usage }
 
-#ifndef PERL_ARGS_ASSERT_CROAK_XS_USAGE
-#define PERL_ARGS_ASSERT_CROAK_XS_USAGE assert(cv); assert(params)
-#endif
 
 void
 croak_xs_usage(const CV *const cv, const char *const params)
@@ -211,7 +208,11 @@ croak_xs_usage(const CV *const cv, const char *const params)
     dTHX;
     const GV *const gv = CvGV(cv);
 
+#ifdef PERL_ARGS_ASSERT_CROAK_XS_USAGE
     PERL_ARGS_ASSERT_CROAK_XS_USAGE;
+#else
+     assert(cv); assert(params);
+#endif
 
     if (gv) {
         const char *const gvname = GvNAME(gv);
@@ -236,6 +237,12 @@ croak_xs_usage(const CV *const cv, const char *const params)
 #define NEED_mess_sv
 #define NEED_croak_xs_usage
 
+=xsmisc
+
+static IV counter;
+static void reset_counter(void) { counter = 0; }
+static void inc_counter(void) { counter++; }
+
 =xsubs
 
 void
@@ -244,6 +251,25 @@ croak_sv(sv)
 CODE:
     croak_sv(sv);
 
+void
+croak_sv_errsv()
+CODE:
+    croak_sv(ERRSV);
+
+void
+croak_sv_with_counter(sv)
+    SV *sv
+CODE:
+    reset_counter();
+    croak_sv((inc_counter(), sv));
+
+IV
+get_counter()
+CODE:
+    RETVAL = counter;
+OUTPUT:
+    RETVAL
+
 void
 die_sv(sv)
     SV *sv
@@ -256,6 +282,8 @@ warn_sv(sv)
 CODE:
     warn_sv(sv);
 
+#if { VERSION >= 5.4.0 }
+
 SV *
 mess_sv(sv, consume)
     SV *sv
@@ -265,6 +293,8 @@ CODE:
 OUTPUT:
     RETVAL
 
+#endif
+
 void
 croak_no_modify()
 CODE:
@@ -281,9 +311,9 @@ croak_xs_usage(params)
 CODE:
     croak_xs_usage(cv, params);
 
-=tests plan => 93
+=tests plan => 102
 
-BEGIN { if ($] lt '5.006') { $^W = 0; } }
+BEGIN { if ("$]" < '5.006') { $^W = 0; } }
 
 my $warn;
 my $die;
@@ -297,13 +327,13 @@ my $obj = bless {}, 'Package';
 
 undef $die;
 ok !defined eval { Devel::PPPort::croak_sv("\xE1\n") };
-ok $@, "\xE1\n";
-ok $die, "\xE1\n";
+is $@, "\xE1\n";
+is $die, "\xE1\n";
 
 undef $die;
 ok !defined eval { Devel::PPPort::croak_sv(10) };
-ok $@ =~ /^10 at $0 line /;
-ok $die =~ /^10 at $0 line /;
+ok $@ =~ /^10 at \Q$0\E line /;
+ok $die =~ /^10 at \Q$0\E line /;
 
 undef $die;
 $@ = 'should not be visible (1)';
@@ -311,8 +341,8 @@ ok !defined eval {
     $@ = 'should not be visible (2)';
     Devel::PPPort::croak_sv('');
 };
-ok $@ =~ /^ at $0 line /;
-ok $die =~ /^ at $0 line /;
+ok $@ =~ /^ at \Q$0\E line /;
+ok $die =~ /^ at \Q$0\E line /;
 
 undef $die;
 $@ = 'should not be visible';
@@ -320,8 +350,8 @@ ok !defined eval {
     $@ = 'this must be visible';
     Devel::PPPort::croak_sv($@)
 };
-ok $@ =~ /^this must be visible at $0 line /;
-ok $die =~ /^this must be visible at $0 line /;
+ok $@ =~ /^this must be visible at \Q$0\E line /;
+ok $die =~ /^this must be visible at \Q$0\E line /;
 
 undef $die;
 $@ = 'should not be visible';
@@ -329,125 +359,159 @@ ok !defined eval {
     $@ = "this must be visible\n";
     Devel::PPPort::croak_sv($@)
 };
-ok $@, "this must be visible\n";
-ok $die, "this must be visible\n";
+is $@, "this must be visible\n";
+is $die, "this must be visible\n";
+
+undef $die;
+$@ = 'should not be visible';
+ok !defined eval {
+    $@ = 'this must be visible';
+    Devel::PPPort::croak_sv_errsv()
+};
+ok $@ =~ /^this must be visible at \Q$0\E line /;
+ok $die =~ /^this must be visible at \Q$0\E line /;
+
+undef $die;
+$@ = 'should not be visible';
+ok !defined eval {
+    $@ = "this must be visible\n";
+    Devel::PPPort::croak_sv_errsv()
+};
+is $@, "this must be visible\n";
+is $die, "this must be visible\n";
+
+undef $die;
+ok !defined eval { Devel::PPPort::croak_sv_with_counter("message\n") };
+is $@, "message\n";
+is Devel::PPPort::get_counter(), 1;
 
 undef $die;
 ok !defined eval { Devel::PPPort::croak_sv('') };
-ok $@ =~ /^ at $0 line /;
-ok $die =~ /^ at $0 line /;
+ok $@ =~ /^ at \Q$0\E line /;
+ok $die =~ /^ at \Q$0\E line /;
 
 undef $die;
 ok !defined eval { Devel::PPPort::croak_sv("\xE1") };
-ok $@ =~ /^\xE1 at $0 line /;
-ok $die =~ /^\xE1 at $0 line /;
+ok $@ =~ /^\xE1 at \Q$0\E line /;
+ok $die =~ /^\xE1 at \Q$0\E line /;
 
 undef $die;
 ok !defined eval { Devel::PPPort::croak_sv("\xC3\xA1") };
-ok $@ =~ /^\xC3\xA1 at $0 line /;
-ok $die =~ /^\xC3\xA1 at $0 line /;
+ok $@ =~ /^\xC3\xA1 at \Q$0\E line /;
+ok $die =~ /^\xC3\xA1 at \Q$0\E line /;
 
 undef $warn;
 Devel::PPPort::warn_sv("\xE1\n");
-ok $warn, "\xE1\n";
+is $warn, "\xE1\n";
 
 undef $warn;
 Devel::PPPort::warn_sv(10);
-ok $warn =~ /^10 at $0 line /;
+ok $warn =~ /^10 at \Q$0\E line /;
 
 undef $warn;
 Devel::PPPort::warn_sv('');
-ok $warn =~ /^ at $0 line /;
+ok $warn =~ /^ at \Q$0\E line /;
 
 undef $warn;
 Devel::PPPort::warn_sv("\xE1");
-ok $warn =~ /^\xE1 at $0 line /;
+ok $warn =~ /^\xE1 at \Q$0\E line /;
 
 undef $warn;
 Devel::PPPort::warn_sv("\xC3\xA1");
-ok $warn =~ /^\xC3\xA1 at $0 line /;
+ok $warn =~ /^\xC3\xA1 at \Q$0\E line /;
 
-ok Devel::PPPort::mess_sv("\xE1\n", 0), "\xE1\n";
-ok Devel::PPPort::mess_sv(do {my $tmp = "\xE1\n"}, 1), "\xE1\n";
+is Devel::PPPort::mess_sv("\xE1\n", 0), "\xE1\n";
+is Devel::PPPort::mess_sv(do {my $tmp = "\xE1\n"}, 1), "\xE1\n";
 
-ok Devel::PPPort::mess_sv(10, 0) =~ /^10 at $0 line /;
-ok Devel::PPPort::mess_sv(do {my $tmp = 10}, 1) =~ /^10 at $0 line /;
+ok Devel::PPPort::mess_sv(10, 0) =~ /^10 at \Q$0\E line /;
+ok Devel::PPPort::mess_sv(do {my $tmp = 10}, 1) =~ /^10 at \Q$0\E line /;
 
-ok Devel::PPPort::mess_sv('', 0) =~ /^ at $0 line /;
-ok Devel::PPPort::mess_sv(do {my $tmp = ''}, 1) =~ /^ at $0 line /;
+ok Devel::PPPort::mess_sv('', 0) =~ /^ at \Q$0\E line /;
+ok Devel::PPPort::mess_sv(do {my $tmp = ''}, 1) =~ /^ at \Q$0\E line /;
 
-ok Devel::PPPort::mess_sv("\xE1", 0) =~ /^\xE1 at $0 line /;
-ok Devel::PPPort::mess_sv(do {my $tmp = "\xE1"}, 1) =~ /^\xE1 at $0 line /;
+ok Devel::PPPort::mess_sv("\xE1", 0) =~ /^\xE1 at \Q$0\E line /;
+ok Devel::PPPort::mess_sv(do {my $tmp = "\xE1"}, 1) =~ /^\xE1 at \Q$0\E line /;
 
-ok Devel::PPPort::mess_sv("\xC3\xA1", 0) =~ /^\xC3\xA1 at $0 line /;
-ok Devel::PPPort::mess_sv(do {my $tmp = "\xC3\xA1"}, 1) =~ /^\xC3\xA1 at $0 line /;
+ok Devel::PPPort::mess_sv("\xC3\xA1", 0) =~ /^\xC3\xA1 at \Q$0\E line /;
+ok Devel::PPPort::mess_sv(do {my $tmp = "\xC3\xA1"}, 1) =~ /^\xC3\xA1 at \Q$0\E line /;
 
-if ($] ge '5.006') {
-    BEGIN { if ($] ge '5.006' && $] lt '5.008') { require utf8; utf8->import(); } }
+if ("$]" >= '5.006') {
+    BEGIN { if ("$]" >= '5.006' && "$]" < '5.008') { require utf8; utf8->import(); } }
 
     undef $die;
     ok !defined eval { Devel::PPPort::croak_sv("\x{100}\n") };
-    ok $@, "\x{100}\n";
-    if ($] ne '5.008') {
-        ok $die, "\x{100}\n";
+    if ("$]" < '5.007001' || "$]" > '5.007003') {
+        is $@, "\x{100}\n";
+    } else {
+        skip 'skip: broken utf8 support in die hook', 1;
+    }
+    if ("$]" < '5.007001' || "$]" > '5.008') {
+        is $die, "\x{100}\n";
     } else {
-        skip 'skip: broken utf8 support in die hook', 0;
+        skip 'skip: broken utf8 support in die hook', 1;
     }
 
     undef $die;
     ok !defined eval { Devel::PPPort::croak_sv("\x{100}") };
-    ok $@ =~ /^\x{100} at $0 line /;
-    if ($] ne '5.008') {
-        ok $die =~ /^\x{100} at $0 line /;
+    if ("$]" < '5.007001' || "$]" > '5.007003') {
+        ok $@ =~ /^\x{100} at \Q$0\E line /;
     } else {
-        skip 'skip: broken utf8 support in die hook', 0;
+        skip 'skip: broken utf8 support in die hook', 1;
+    }
+    if ("$]" < '5.007001' || "$]" > '5.008') {
+        ok $die =~ /^\x{100} at \Q$0\E line /;
+    } else {
+        skip 'skip: broken utf8 support in die hook', 1;
     }
 
-    if ($] ne '5.008') {
+    if ("$]" < '5.007001' || "$]" > '5.008') {
         undef $warn;
         Devel::PPPort::warn_sv("\x{100}\n");
-        ok $warn, "\x{100}\n";
+        is $warn, "\x{100}\n";
 
         undef $warn;
         Devel::PPPort::warn_sv("\x{100}");
-        ok (my $tmp = $warn) =~ /^\x{100} at $0 line /;
+        ok (my $tmp = $warn) =~ /^\x{100} at \Q$0\E line /;
     } else {
-        skip 'skip: broken utf8 support in warn hook', 0 for 1..2;
+        skip 'skip: broken utf8 support in warn hook', 2;
     }
 
-    ok Devel::PPPort::mess_sv("\x{100}\n", 0), "\x{100}\n";
-    ok Devel::PPPort::mess_sv(do {my $tmp = "\x{100}\n"}, 1), "\x{100}\n";
+    is Devel::PPPort::mess_sv("\x{100}\n", 0), "\x{100}\n";
+    is Devel::PPPort::mess_sv(do {my $tmp = "\x{100}\n"}, 1), "\x{100}\n";
 
-    ok Devel::PPPort::mess_sv("\x{100}", 0) =~ /^\x{100} at $0 line /;
-    ok Devel::PPPort::mess_sv(do {my $tmp = "\x{100}"}, 1) =~ /^\x{100} at $0 line /;
+    ok Devel::PPPort::mess_sv("\x{100}", 0) =~ /^\x{100} at \Q$0\E line /;
+    ok Devel::PPPort::mess_sv(do {my $tmp = "\x{100}"}, 1) =~ /^\x{100} at \Q$0\E line /;
 } else {
-    skip 'skip: no utf8 support', 0 for 1..12;
+    skip 'skip: no utf8 support', 12;
 }
 
 if (ord('A') != 65) {
-    skip 'skip: no ASCII support', 0 for 1..24;
-} elsif ($] ge '5.008' && $] ne '5.012000') {
+    skip 'skip: no ASCII support', 24;
+} elsif (      "$]" >= '5.008'
+         &&    "$]" != '5.013000'     # Broken in these ranges
+         && ! ("$]" >= '5.011005' && "$]" <= '5.012000'))
+{
     undef $die;
     ok !defined eval { Devel::PPPort::croak_sv(eval '"\N{U+E1}\n"') };
-    ok $@, "\xE1\n";
-    ok $die, "\xE1\n";
+    is $@, "\xE1\n";
+    is $die, "\xE1\n";
 
     undef $die;
     ok !defined eval { Devel::PPPort::croak_sv(eval '"\N{U+E1}"') };
-    ok $@ =~ /^\xE1 at $0 line /;
-    ok $die =~ /^\xE1 at $0 line /;
+    ok $@ =~ /^\xE1 at \Q$0\E line /;
+    ok $die =~ /^\xE1 at \Q$0\E line /;
 
     {
         undef $die;
         my $expect = eval '"\N{U+C3}\N{U+A1}\n"';
         ok !defined eval { Devel::PPPort::croak_sv("\xC3\xA1\n") };
-        ok $@, $expect;
-        ok $die, $expect;
+        is $@, $expect;
+        is $die, $expect;
     }
 
     {
         undef $die;
-        my $expect = eval 'qr/^\N{U+C3}\N{U+A1} at $0 line /';
+        my $expect = eval 'qr/^\N{U+C3}\N{U+A1} at \Q$0\E line /';
         ok !defined eval { Devel::PPPort::croak_sv("\xC3\xA1") };
         ok $@ =~ $expect;
         ok $die =~ $expect;
@@ -455,36 +519,41 @@ if (ord('A') != 65) {
 
     undef $warn;
     Devel::PPPort::warn_sv(eval '"\N{U+E1}\n"');
-    ok $warn, "\xE1\n";
+    is $warn, "\xE1\n";
 
     undef $warn;
     Devel::PPPort::warn_sv(eval '"\N{U+E1}"');
-    ok $warn =~ /^\xE1 at $0 line /;
+    ok $warn =~ /^\xE1 at \Q$0\E line /;
 
     undef $warn;
     Devel::PPPort::warn_sv("\xC3\xA1\n");
-    ok $warn, eval '"\N{U+C3}\N{U+A1}\n"';
+    is $warn, eval '"\N{U+C3}\N{U+A1}\n"';
 
     undef $warn;
     Devel::PPPort::warn_sv("\xC3\xA1");
-    ok $warn =~ eval 'qr/^\N{U+C3}\N{U+A1} at $0 line /';
+    ok $warn =~ eval 'qr/^\N{U+C3}\N{U+A1} at \Q$0\E line /';
 
-    ok Devel::PPPort::mess_sv(eval('"\N{U+E1}\n"'), 0), eval '"\N{U+E1}\n"';
-    ok Devel::PPPort::mess_sv(do {my $tmp = eval '"\N{U+E1}\n"'}, 1), eval '"\N{U+E1}\n"';
+    if ("$]" < '5.004') {
+        skip 'skip: no support for mess_sv', 8;
+    }
+    else {
+      is Devel::PPPort::mess_sv(eval('"\N{U+E1}\n"'), 0), eval '"\N{U+E1}\n"';
+      is Devel::PPPort::mess_sv(do {my $tmp = eval '"\N{U+E1}\n"'}, 1), eval '"\N{U+E1}\n"';
 
-    ok Devel::PPPort::mess_sv(eval('"\N{U+E1}"'), 0) =~ eval 'qr/^\N{U+E1} at $0 line /';
-    ok Devel::PPPort::mess_sv(do {my $tmp = eval '"\N{U+E1}"'}, 1) =~ eval 'qr/^\N{U+E1} at $0 line /';
+      ok Devel::PPPort::mess_sv(eval('"\N{U+E1}"'), 0) =~ eval 'qr/^\N{U+E1} at \Q$0\E line /';
+      ok Devel::PPPort::mess_sv(do {my $tmp = eval '"\N{U+E1}"'}, 1) =~ eval 'qr/^\N{U+E1} at \Q$0\E line /';
 
-    ok Devel::PPPort::mess_sv("\xC3\xA1\n", 0), eval '"\N{U+C3}\N{U+A1}\n"';
-    ok Devel::PPPort::mess_sv(do {my $tmp = "\xC3\xA1\n"}, 1), eval '"\N{U+C3}\N{U+A1}\n"';
+      is Devel::PPPort::mess_sv("\xC3\xA1\n", 0), eval '"\N{U+C3}\N{U+A1}\n"';
+      is Devel::PPPort::mess_sv(do {my $tmp = "\xC3\xA1\n"}, 1), eval '"\N{U+C3}\N{U+A1}\n"';
 
-    ok Devel::PPPort::mess_sv("\xC3\xA1", 0) =~ eval 'qr/^\N{U+C3}\N{U+A1} at $0 line /';
-    ok Devel::PPPort::mess_sv(do {my $tmp = "\xC3\xA1"}, 1) =~ eval 'qr/^\N{U+C3}\N{U+A1} at $0 line /';
+      ok Devel::PPPort::mess_sv("\xC3\xA1", 0) =~ eval 'qr/^\N{U+C3}\N{U+A1} at \Q$0\E line /';
+      ok Devel::PPPort::mess_sv(do {my $tmp = "\xC3\xA1"}, 1) =~ eval 'qr/^\N{U+C3}\N{U+A1} at \Q$0\E line /';
+    }
 } else {
-    skip 'skip: no support for \N{U+..} syntax', 0 for 1..24;
+    skip 'skip: no support for \N{U+..} syntax', 24;
 }
 
-if ($] ge '5.007003' or ($] ge '5.006001' and $] lt '5.007')) {
+if ("$]" >= '5.007003' or ("$]" >= '5.006001' and "$]" < '5.007')) {
     undef $die;
     ok !defined eval { Devel::PPPort::croak_sv($scalar_ref) };
     ok $@ == $scalar_ref;
@@ -505,14 +574,14 @@ if ($] ge '5.007003' or ($] ge '5.006001' and $] lt '5.007')) {
     ok $@ == $obj;
     ok $die == $obj;
 } else {
-    skip 'skip: no support for exceptions', 0 for 1..12;
+    skip 'skip: no support for exceptions', 12;
 }
 
 ok !defined eval { Devel::PPPort::croak_no_modify() };
-ok $@ =~ /^Modification of a read-only value attempted at $0 line /;
+ok $@ =~ /^Modification of a read-only value attempted at \Q$0\E line /;
 
 ok !defined eval { Devel::PPPort::croak_memory_wrap() };
-ok $@ =~ /^panic: memory wrap at $0 line /;
+ok $@ =~ /^panic: memory wrap at \Q$0\E line /;
 
 ok !defined eval { Devel::PPPort::croak_xs_usage("params") };
-ok $@ =~ /^Usage: Devel::PPPort::croak_xs_usage\(params\) at $0 line /;
+ok $@ =~ /^Usage: Devel::PPPort::croak_xs_usage\(params\) at \Q$0\E line /;
index 2bd2dcf..deb1fb8 100644 (file)
@@ -17,7 +17,6 @@ EXTERN_C
 INT2PTR
 MUTABLE_PTR
 NVTYPE
-PERL_GCC_BRACE_GROUPS_FORBIDDEN
 PERLIO_FUNCS_CAST
 PERLIO_FUNCS_DECL
 PERL_UNUSED_ARG
@@ -32,7 +31,6 @@ START_EXTERN_C
 STMT_END
 STMT_START
 SvRX
-UTF8_MAXBYTES
 WIDEST_UTYPE
 XSRETURN
 
@@ -52,26 +50,83 @@ __UNDEFINED__ __ASSERT_(statement)  assert(statement),
 __UNDEFINED__ __ASSERT_(statement)
 #endif
 
-#ifndef SvRX
-#if { NEED SvRX }
-
-void *
-SvRX(pTHX_ SV *rv)
-{
-       if (SvROK(rv)) {
-               SV *sv = SvRV(rv);
-               if (SvMAGICAL(sv)) {
-                       MAGIC *mg = mg_find(sv, PERL_MAGIC_qr);
-                       if (mg && mg->mg_obj) {
-                               return mg->mg_obj;
-                       }
-               }
-       }
-       return 0;
-}
-#endif
-#endif
-
+/* These could become provided if/when they become part of the public API */
+__UNDEF_NOT_PROVIDED__ withinCOUNT(c, l, n)                                    \
+   (((WIDEST_UTYPE) (((c)) - ((l) | 0))) <= (((WIDEST_UTYPE) ((n) | 0))))
+__UNDEF_NOT_PROVIDED__ inRANGE(c, l, u)                                        \
+   (  (sizeof(c) == sizeof(U8))  ? withinCOUNT(((U8)  (c)), (l), ((u) - (l)))  \
+    : (sizeof(c) == sizeof(U16)) ? withinCOUNT(((U16) (c)), (l), ((u) - (l)))  \
+    : (sizeof(c) == sizeof(U32)) ? withinCOUNT(((U32) (c)), (l), ((u) - (l)))  \
+    : (withinCOUNT(((WIDEST_UTYPE) (c)), (l), ((u) - (l)))))
+
+/* The '| 0' part ensures a compiler error if c is not integer (like e.g., a
+ * pointer) */
+#undef FITS_IN_8_BITS   /* handy.h version uses a core-only constant */
+__UNDEF_NOT_PROVIDED__ FITS_IN_8_BITS(c) (   (sizeof(c) == 1)               \
+                                    || !(((WIDEST_UTYPE)((c) | 0)) & ~0xFF))
+
+/* Create the macro for "is'macro'_utf8_safe(s, e)".  For code points below
+ * 256, it calls the equivalent _L1 macro by converting the UTF-8 to code
+ * point.  That is so that it can automatically get the bug fixes done in this
+ * file. */
+#define D_PPP_IS_GENERIC_UTF8_SAFE(s, e, macro)                             \
+   (((e) - (s)) <= 0                                                        \
+     ? 0                                                                    \
+     : UTF8_IS_INVARIANT((s)[0])                                            \
+       ? is ## macro ## _L1((s)[0])                                         \
+       : (((e) - (s)) < UTF8SKIP(s))                                        \
+          ? 0                                                               \
+          : UTF8_IS_DOWNGRADEABLE_START((s)[0])                             \
+              /* The cast in the line below is only to silence warnings */  \
+            ? is ## macro ## _L1((WIDEST_UTYPE) LATIN1_TO_NATIVE(           \
+                                  UTF8_ACCUMULATE(NATIVE_UTF8_TO_I8((s)[0]) \
+                                                     & UTF_START_MASK(2),   \
+                                                  (s)[1])))                 \
+            : is ## macro ## _utf8(s))
+
+/* Create the macro for "is'macro'_LC_utf8_safe(s, e)".  For code points below
+ * 256, it calls the equivalent _L1 macro by converting the UTF-8 to code
+ * point.  That is so that it can automatically get the bug fixes done in this
+ * file. */
+#define D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, macro)                          \
+   (((e) - (s)) <= 0                                                        \
+     ? 0                                                                    \
+     : UTF8_IS_INVARIANT((s)[0])                                            \
+       ? is ## macro ## _LC((s)[0])                                         \
+       : (((e) - (s)) < UTF8SKIP(s))                                        \
+          ? 0                                                               \
+          : UTF8_IS_DOWNGRADEABLE_START((s)[0])                             \
+              /* The cast in the line below is only to silence warnings */  \
+            ? is ## macro ## _LC((WIDEST_UTYPE) LATIN1_TO_NATIVE(           \
+                                  UTF8_ACCUMULATE(NATIVE_UTF8_TO_I8((s)[0]) \
+                                                     & UTF_START_MASK(2),   \
+                                                  (s)[1])))                 \
+            : is ## macro ## _utf8(s))
+
+/* A few of the early functions are broken.  For these and the non-LC case,
+ * machine generated code is substituted.  But that code doesn't work for
+ * locales.  This is just like the above macro, but at the end, we call the
+ * macro we've generated for the above 255 case, which is correct since locale
+ * isn't involved.  This will generate extra code to handle the 0-255 inputs,
+ * but hopefully it will be optimized out by the C compiler.  But just in case
+ * it isn't, this macro is only used on the few versions that are broken */
+
+#define D_PPP_IS_GENERIC_LC_UTF8_SAFE_BROKEN(s, e, macro)                   \
+   (((e) - (s)) <= 0                                                        \
+     ? 0                                                                    \
+     : UTF8_IS_INVARIANT((s)[0])                                            \
+       ? is ## macro ## _LC((s)[0])                                         \
+       : (((e) - (s)) < UTF8SKIP(s))                                        \
+          ? 0                                                               \
+          : UTF8_IS_DOWNGRADEABLE_START((s)[0])                             \
+              /* The cast in the line below is only to silence warnings */  \
+            ? is ## macro ## _LC((WIDEST_UTYPE) LATIN1_TO_NATIVE(           \
+                                  UTF8_ACCUMULATE(NATIVE_UTF8_TO_I8((s)[0]) \
+                                                     & UTF_START_MASK(2),   \
+                                                  (s)[1])))                 \
+            : is ## macro ## _utf8_safe(s, e))
+
+__UNDEFINED__ SvRX(rv) (SvROK((rv)) ? (SvMAGICAL(SvRV((rv))) ? (mg_find(SvRV((rv)), PERL_MAGIC_qr) ? mg_find(SvRV((rv)), PERL_MAGIC_qr)->mg_obj : NULL) : NULL) : NULL)
 __UNDEFINED__ SvRXOK(sv) (!!SvRX(sv))
 
 #ifndef PERL_UNUSED_DECL
@@ -168,9 +223,9 @@ __UNDEFINED__  PTR2NV(p)       NUM2PTR(NV,p)
 #  define EXTERN_C extern
 #endif
 
-#if defined(PERL_GCC_PEDANTIC)
+#if { VERSION < 5.004 } || defined(PERL_GCC_PEDANTIC)
 #  ifndef PERL_GCC_BRACE_GROUPS_FORBIDDEN
-#    define PERL_GCC_BRACE_GROUPS_FORBIDDEN
+__UNDEF_NOT_PROVIDED__  PERL_GCC_BRACE_GROUPS_FORBIDDEN
 #  endif
 #endif
 
@@ -258,8 +313,6 @@ __UNDEFINED__  dVAR            dNOOP
 
 __UNDEFINED__  SVf             "_"
 
-__UNDEFINED__  UTF8_MAXBYTES   UTF8_MAXLEN
-
 __UNDEFINED__  CPERLscope(x)   x
 
 __UNDEFINED__  PERL_HASH(hash,str,len) \
@@ -307,52 +360,103 @@ typedef OP* (CPERLscope(*Perl_check_t)) (pTHX_ OP*);
 # endif
 #endif
 
+/* On versions without NATIVE_TO_ASCII, only ASCII is supported */
+#if defined(EBCDIC) && defined(NATIVE_TO_ASCI)
+__UNDEFINED__ NATIVE_TO_LATIN1(c) NATIVE_TO_ASCII(c)
+__UNDEFINED__ LATIN1_TO_NATIVE(c) ASCII_TO_NATIVE(c)
+__UNDEFINED__ NATIVE_TO_UNI(c) ((c) > 255 ? (c) : NATIVE_TO_LATIN1(c))
+__UNDEFINED__ UNI_TO_NATIVE(c) ((c) > 255 ? (c) : LATIN1_TO_NATIVE(c))
+#else
+__UNDEFINED__ NATIVE_TO_LATIN1(c) (c)
+__UNDEFINED__ LATIN1_TO_NATIVE(c) (c)
+__UNDEFINED__ NATIVE_TO_UNI(c) (c)
+__UNDEFINED__ UNI_TO_NATIVE(c) (c)
+#endif
+
+/* Warning: LATIN1_TO_NATIVE, NATIVE_TO_LATIN1 NATIVE_TO_UNI UNI_TO_NATIVE
+   EBCDIC is not supported on versions earlier than 5.7.1
+ */
+
+/* The meaning of this changed; use the modern version */
+#undef isPSXSPC
+#undef isPSXSPC_A
+#undef isPSXSPC_L1
+
+/* Hint: isPSXSPC, isPSXSPC_A, isPSXSPC_L1, isPSXSPC_utf8_safe
+    This is equivalent to the corresponding isSPACE-type macro.  On perls
+    before 5.18, this matched a vertical tab and SPACE didn't.  But the
+    ppport.h SPACE version does match VT in all perl releases.  Since VT's are
+    extremely rarely found in real-life files, this difference effectively
+    doesn't matter */
+
+/* Hint: isSPACE, isSPACE_A, isSPACE_L1, isSPACE_utf8_safe
+    Until Perl 5.18, this did not match the vertical tab (VT).  The ppport.h
+    version does match it in all perl releases. Since VT's are extremely rarely
+    found in real-life files, this difference effectively doesn't matter */
+
 #ifdef EBCDIC
 
-/* This is the first version where these macros are fully correct.  Relying on
- * the C library functions, as earlier releases did, causes problems with
- * locales */
+/* This is the first version where these macros are fully correct on EBCDIC
+ * platforms.  Relying on * the C library functions, as earlier releases did,
+ * causes problems with * locales */
 # if { VERSION < 5.22.0 }
 #  undef isALNUM
 #  undef isALNUM_A
+#  undef isALNUM_L1
 #  undef isALNUMC
 #  undef isALNUMC_A
+#  undef isALNUMC_L1
 #  undef isALPHA
 #  undef isALPHA_A
+#  undef isALPHA_L1
 #  undef isALPHANUMERIC
 #  undef isALPHANUMERIC_A
+#  undef isALPHANUMERIC_L1
 #  undef isASCII
 #  undef isASCII_A
+#  undef isASCII_L1
 #  undef isBLANK
 #  undef isBLANK_A
+#  undef isBLANK_L1
 #  undef isCNTRL
 #  undef isCNTRL_A
+#  undef isCNTRL_L1
 #  undef isDIGIT
 #  undef isDIGIT_A
+#  undef isDIGIT_L1
 #  undef isGRAPH
 #  undef isGRAPH_A
+#  undef isGRAPH_L1
 #  undef isIDCONT
 #  undef isIDCONT_A
+#  undef isIDCONT_L1
 #  undef isIDFIRST
 #  undef isIDFIRST_A
+#  undef isIDFIRST_L1
 #  undef isLOWER
 #  undef isLOWER_A
+#  undef isLOWER_L1
 #  undef isOCTAL
 #  undef isOCTAL_A
+#  undef isOCTAL_L1
 #  undef isPRINT
 #  undef isPRINT_A
-#  undef isPSXSPC
-#  undef isPSXSPC_A
+#  undef isPRINT_L1
 #  undef isPUNCT
 #  undef isPUNCT_A
+#  undef isPUNCT_L1
 #  undef isSPACE
 #  undef isSPACE_A
+#  undef isSPACE_L1
 #  undef isUPPER
 #  undef isUPPER_A
+#  undef isUPPER_L1
 #  undef isWORDCHAR
 #  undef isWORDCHAR_A
+#  undef isWORDCHAR_L1
 #  undef isXDIGIT
 #  undef isXDIGIT_A
+#  undef isXDIGIT_L1
 # endif
 
 __UNDEFINED__ isASCII(c)    (isCNTRL(c) || isPRINT(c))
@@ -379,6 +483,16 @@ __UNDEFINED__ isCNTRL(c)    (    (c) == '\0' || (c) == '\a' || (c) == '\b'
                              ||  (c) == 0x3D /* U+15 NAK */                     \
                              ||  (c) == 0x3F /* U+1A SUB */                     \
                             )
+
+#if '^' == 106    /* EBCDIC POSIX-BC */
+#  define D_PPP_OUTLIER_CONTROL 0x5F
+#else   /* EBCDIC 1047 037 */
+#  define D_PPP_OUTLIER_CONTROL 0xFF
+#endif
+
+/* The controls are everything below blank, plus one outlier */
+__UNDEFINED__ isCNTRL_L1(c) ((WIDEST_UTYPE) (c) < ' '                           \
+                          || (WIDEST_UTYPE) (c) == D_PPP_OUTLIER_CONTROL)
 /* The ordering of the tests in this and isUPPER are to exclude most characters
  * early */
 __UNDEFINED__ isLOWER(c)    (        (c) >= 'a' && (c) <= 'z'                   \
@@ -409,94 +523,534 @@ __UNDEFINED__ isUPPER(c)    (        (c) >= 'A' && (c) <= 'Z'
 #  undef isUPPER_A
 # endif
 
-# if { VERSION < 5.8.0 }
-/* Hint: isCNTRL
- * Earlier perls omitted DEL */
+#  if { VERSION == 5.7.0 } /* this perl made space GRAPH */
+#    undef isGRAPH
+#  endif
+
+# if { VERSION < 5.8.0 } /* earlier perls omitted DEL */
 #  undef isCNTRL
 # endif
 
 # if { VERSION < 5.10.0 }
-/* Hint: isPRINT
- * The implementation in older perl versions includes all of the
- * isSPACE() characters, which is wrong. The version provided by
- * Devel::PPPort always overrides a present buggy version.
- */
+/* earlier perls included all of the isSPACE() characters, which is wrong. The
+ * version provided by Devel::PPPort always overrides an existing buggy
+ * version. */
 #  undef isPRINT
 #  undef isPRINT_A
 # endif
 
 # if { VERSION < 5.14.0 }
-/* Hint: isASCII
- * The implementation in older perl versions always returned true if the
- * parameter was a signed char
- */
+/* earlier perls always returned true if the parameter was a signed char */
 #  undef isASCII
 #  undef isASCII_A
 # endif
 
-# if { VERSION < 5.20.0 }
-/* Hint: isSPACE
- * The implementation in older perl versions didn't include \v */
+# if { VERSION < 5.17.8 } /* earlier perls didn't include PILCROW, SECTION SIGN */
+#  undef isPUNCT_L1
+# endif
+
+# if { VERSION < 5.13.7 } /* khw didn't investigate why this failed */
+#  undef isALNUMC_L1
+#endif
+
+# if { VERSION < 5.20.0 } /* earlier perls didn't include \v */
 #  undef isSPACE
 #  undef isSPACE_A
+#  undef isSPACE_L1
+
 # endif
 
 __UNDEFINED__ isASCII(c)        ((WIDEST_UTYPE) (c) <= 127)
 __UNDEFINED__ isCNTRL(c)        ((WIDEST_UTYPE) (c) < ' ' || (c) == 127)
+__UNDEFINED__ isCNTRL_L1(c)     (isCNTRL(c) || (   (WIDEST_UTYPE) (c) <= 0x9F  \
+                                                && (WIDEST_UTYPE) (c) >= 0x80))
 __UNDEFINED__ isLOWER(c)        ((c) >= 'a' && (c) <= 'z')
 __UNDEFINED__ isUPPER(c)        ((c) <= 'Z' && (c) >= 'A')
+
 #endif /* Below are definitions common to EBCDIC and ASCII */
 
+__UNDEFINED__ isASCII_L1(c)     isASCII(c)
+__UNDEFINED__ isASCII_LC(c)     isASCII(c)
 __UNDEFINED__ isALNUM(c)        isWORDCHAR(c)
 __UNDEFINED__ isALNUMC(c)       isALPHANUMERIC(c)
+__UNDEFINED__ isALNUMC_L1(c)    isALPHANUMERIC_L1(c)
 __UNDEFINED__ isALPHA(c)        (isUPPER(c) || isLOWER(c))
+__UNDEFINED__ isALPHA_L1(c)     (isUPPER_L1(c) || isLOWER_L1(c))
 __UNDEFINED__ isALPHANUMERIC(c) (isALPHA(c) || isDIGIT(c))
+__UNDEFINED__ isALPHANUMERIC_L1(c) (isALPHA_L1(c) || isDIGIT(c))
+__UNDEFINED__ isALPHANUMERIC_LC(c) (isALPHA_LC(c) || isDIGIT_LC(c))
 __UNDEFINED__ isBLANK(c)        ((c) == ' ' || (c) == '\t')
-__UNDEFINED__ isDIGIT(c)        ((c) <= '9' && (c) >= '0')
+__UNDEFINED__ isBLANK_L1(c) (    isBLANK(c)                                    \
+                             || (   FITS_IN_8_BITS(c)                          \
+                                 && NATIVE_TO_LATIN1((U8) c) == 0xA0))
+__UNDEFINED__ isBLANK_LC(c)     isBLANK(c)
+__UNDEFINED__ isDIGIT(c)        inRANGE(c, '0', '9')
+__UNDEFINED__ isDIGIT_L1(c)     isDIGIT(c)
 __UNDEFINED__ isGRAPH(c)        (isWORDCHAR(c) || isPUNCT(c))
+__UNDEFINED__ isGRAPH_L1(c)     (   isPRINT_L1(c)                              \
+                                 && (c) != ' '                                 \
+                                 && NATIVE_TO_LATIN1((U8) c) != 0xA0)
 __UNDEFINED__ isIDCONT(c)       isWORDCHAR(c)
+__UNDEFINED__ isIDCONT_L1(c)   isWORDCHAR_L1(c)
+__UNDEFINED__ isIDCONT_LC(c)    isWORDCHAR_LC(c)
 __UNDEFINED__ isIDFIRST(c)      (isALPHA(c) || (c) == '_')
+__UNDEFINED__ isIDFIRST_L1(c)   (isALPHA_L1(c) || (U8) (c) == '_')
+__UNDEFINED__ isIDFIRST_LC(c)   (isALPHA_LC(c) || (U8) (c) == '_')
+__UNDEFINED__ isLOWER_L1(c) (    isLOWER(c)                                    \
+                             || (   FITS_IN_8_BITS(c)                          \
+                                 && (  (   NATIVE_TO_LATIN1((U8) c) >= 0xDF    \
+                                        && NATIVE_TO_LATIN1((U8) c) != 0xF7)   \
+                                     || NATIVE_TO_LATIN1((U8) c) == 0xAA       \
+                                     || NATIVE_TO_LATIN1((U8) c) == 0xBA       \
+                                     || NATIVE_TO_LATIN1((U8) c) == 0xB5)))
 __UNDEFINED__ isOCTAL(c)        (((WIDEST_UTYPE)((c)) & ~7) == '0')
+__UNDEFINED__ isOCTAL_L1(c)     isOCTAL(c)
 __UNDEFINED__ isPRINT(c)        (isGRAPH(c) || (c) == ' ')
+__UNDEFINED__ isPRINT_L1(c)     (FITS_IN_8_BITS(c) && ! isCNTRL_L1(c))
 __UNDEFINED__ isPSXSPC(c)       isSPACE(c)
-__UNDEFINED__ isPUNCT(c)    (   (c) == '-' || (c) == '!' || (c) == '"'          \
-                             || (c) == '#' || (c) == '$' || (c) == '%'          \
-                             || (c) == '&' || (c) == '\'' || (c) == '('         \
-                             || (c) == ')' || (c) == '*' || (c) == '+'          \
-                             || (c) == ',' || (c) == '.' || (c) == '/'          \
-                             || (c) == ':' || (c) == ';' || (c) == '<'          \
-                             || (c) == '=' || (c) == '>' || (c) == '?'          \
-                             || (c) == '@' || (c) == '[' || (c) == '\\'         \
-                             || (c) == ']' || (c) == '^' || (c) == '_'          \
-                             || (c) == '`' || (c) == '{' || (c) == '|'          \
+__UNDEFINED__ isPSXSPC_L1(c)    isSPACE_L1(c)
+__UNDEFINED__ isPUNCT(c)    (   (c) == '-' || (c) == '!' || (c) == '"'         \
+                             || (c) == '#' || (c) == '$' || (c) == '%'         \
+                             || (c) == '&' || (c) == '\'' || (c) == '('        \
+                             || (c) == ')' || (c) == '*' || (c) == '+'         \
+                             || (c) == ',' || (c) == '.' || (c) == '/'         \
+                             || (c) == ':' || (c) == ';' || (c) == '<'         \
+                             || (c) == '=' || (c) == '>' || (c) == '?'         \
+                             || (c) == '@' || (c) == '[' || (c) == '\\'        \
+                             || (c) == ']' || (c) == '^' || (c) == '_'         \
+                             || (c) == '`' || (c) == '{' || (c) == '|'         \
                              || (c) == '}' || (c) == '~')
-__UNDEFINED__ isSPACE(c)        (   isBLANK(c) || (c) == '\n' || (c) == '\r'    \
+__UNDEFINED__ isPUNCT_L1(c)  (    isPUNCT(c)                                   \
+                              || (  FITS_IN_8_BITS(c)                          \
+                                  && (   NATIVE_TO_LATIN1((U8) c) == 0xA1      \
+                                      || NATIVE_TO_LATIN1((U8) c) == 0xA7      \
+                                      || NATIVE_TO_LATIN1((U8) c) == 0xAB      \
+                                      || NATIVE_TO_LATIN1((U8) c) == 0xB6      \
+                                      || NATIVE_TO_LATIN1((U8) c) == 0xB7      \
+                                      || NATIVE_TO_LATIN1((U8) c) == 0xBB      \
+                                      || NATIVE_TO_LATIN1((U8) c) == 0xBF)))
+__UNDEFINED__ isSPACE(c)        (   isBLANK(c) || (c) == '\n' || (c) == '\r'   \
                                  || (c) == '\v' || (c) == '\f')
+__UNDEFINED__ isSPACE_L1(c) (    isSPACE(c)                                    \
+                             || (FITS_IN_8_BITS(c)                             \
+                                 && (   NATIVE_TO_LATIN1((U8) c) == 0x85       \
+                                     || NATIVE_TO_LATIN1((U8) c) == 0xA0)))
+__UNDEFINED__ isUPPER_L1(c) (   isUPPER(c)                                     \
+                             || (FITS_IN_8_BITS(c)                             \
+                                 && (   NATIVE_TO_LATIN1((U8) c) >= 0xC0       \
+                                     && NATIVE_TO_LATIN1((U8) c) <= 0xDE       \
+                                     && NATIVE_TO_LATIN1((U8) c) != 0xD7)))
 __UNDEFINED__ isWORDCHAR(c)     (isALPHANUMERIC(c) || (c) == '_')
-__UNDEFINED__ isXDIGIT(c)       (   isDIGIT(c)                                  \
-                                 || ((c) >= 'a' && (c) <= 'f')                  \
+__UNDEFINED__ isWORDCHAR_L1(c)  (isIDFIRST_L1(c) || isDIGIT(c))
+__UNDEFINED__ isWORDCHAR_LC(c)  (isIDFIRST_LC(c) || isDIGIT_LC(c))
+__UNDEFINED__ isXDIGIT(c)       (   isDIGIT(c)                                 \
+                                 || ((c) >= 'a' && (c) <= 'f')                 \
                                  || ((c) >= 'A' && (c) <= 'F'))
+__UNDEFINED__ isXDIGIT_L1(c)    isXDIGIT(c)
+__UNDEFINED__ isXDIGIT_LC(c)    isxdigit(c)
+
+__UNDEFINED__ isALNUM_A(c)         isALNUM(c)
+__UNDEFINED__ isALNUMC_A(c)        isALNUMC(c)
+__UNDEFINED__ isALPHA_A(c)         isALPHA(c)
+__UNDEFINED__ isALPHANUMERIC_A(c)  isALPHANUMERIC(c)
+__UNDEFINED__ isASCII_A(c)         isASCII(c)
+__UNDEFINED__ isBLANK_A(c)         isBLANK(c)
+__UNDEFINED__ isCNTRL_A(c)         isCNTRL(c)
+__UNDEFINED__ isDIGIT_A(c)         isDIGIT(c)
+__UNDEFINED__ isGRAPH_A(c)         isGRAPH(c)
+__UNDEFINED__ isIDCONT_A(c)        isIDCONT(c)
+__UNDEFINED__ isIDFIRST_A(c)       isIDFIRST(c)
+__UNDEFINED__ isLOWER_A(c)         isLOWER(c)
+__UNDEFINED__ isOCTAL_A(c)         isOCTAL(c)
+__UNDEFINED__ isPRINT_A(c)         isPRINT(c)
+__UNDEFINED__ isPSXSPC_A(c)        isPSXSPC(c)
+__UNDEFINED__ isPUNCT_A(c)         isPUNCT(c)
+__UNDEFINED__ isSPACE_A(c)         isSPACE(c)
+__UNDEFINED__ isUPPER_A(c)         isUPPER(c)
+__UNDEFINED__ isWORDCHAR_A(c)     isWORDCHAR(c)
+__UNDEFINED__ isXDIGIT_A(c)       isXDIGIT(c)
+
+__UNDEFINED__ isASCII_utf8_safe(s,e)  (((e) - (s)) <= 0 ? 0 : isASCII(*(s)))
+__UNDEFINED__ isASCII_uvchr(c)    (FITS_IN_8_BITS(c) ? isASCII_L1(c) : 0)
+
+#if { VERSION >= 5.006 }
+#  ifdef isALPHA_uni    /* If one defined, all are; this is just an exemplar */
+#    define D_PPP_is_ctype(upper, lower, c)                                 \
+        (FITS_IN_8_BITS(c)                                                  \
+        ? is ## upper ## _L1(c)                                             \
+        : is ## upper ## _uni((UV) (c)))    /* _uni is old synonym */
+#  else
+#    define D_PPP_is_ctype(upper, lower, c)                                 \
+        (FITS_IN_8_BITS(c)                                                  \
+        ? is ## upper ## _L1(c)                                             \
+        : is_uni_ ## lower((UV) (c)))     /* is_uni_ is even older */
+#  endif
+
+__UNDEFINED__ isALPHA_uvchr(c)    D_PPP_is_ctype(ALPHA, alpha, c)
+__UNDEFINED__ isALPHANUMERIC_uvchr(c) (isALPHA_uvchr(c) || isDIGIT_uvchr(c))
+#  ifdef is_uni_blank
+__UNDEFINED__ isBLANK_uvchr(c)    D_PPP_is_ctype(BLANK, blank, c)
+#  else
+__UNDEFINED__ isBLANK_uvchr(c)  (FITS_IN_8_BITS(c)                          \
+                                 ? isBLANK_L1(c)                            \
+                                 : (   (UV) (c) == 0x1680 /* Unicode 3.0 */ \
+                                    || inRANGE((UV) (c), 0x2000, 0x200A)    \
+                                    || (UV) (c) == 0x202F  /* Unicode 3.0 */\
+                                    || (UV) (c) == 0x205F  /* Unicode 3.2 */\
+                                    || (UV) (c) == 0x3000))
+#  endif
+__UNDEFINED__ isCNTRL_uvchr(c)    D_PPP_is_ctype(CNTRL, cntrl, c)
+__UNDEFINED__ isDIGIT_uvchr(c)    D_PPP_is_ctype(DIGIT, digit, c)
+__UNDEFINED__ isGRAPH_uvchr(c)    D_PPP_is_ctype(GRAPH, graph, c)
+__UNDEFINED__ isIDCONT_uvchr(c)   isWORDCHAR_uvchr(c)
+__UNDEFINED__ isIDFIRST_uvchr(c)  D_PPP_is_ctype(IDFIRST, idfirst, c)
+__UNDEFINED__ isLOWER_uvchr(c)    D_PPP_is_ctype(LOWER, lower, c)
+__UNDEFINED__ isPRINT_uvchr(c)    D_PPP_is_ctype(PRINT, print, c)
+__UNDEFINED__ isPSXSPC_uvchr(c)   isSPACE_uvchr(c)
+__UNDEFINED__ isPUNCT_uvchr(c)    D_PPP_is_ctype(PUNCT, punct, c)
+__UNDEFINED__ isSPACE_uvchr(c)    D_PPP_is_ctype(SPACE, space, c)
+__UNDEFINED__ isUPPER_uvchr(c)    D_PPP_is_ctype(UPPER, upper, c)
+__UNDEFINED__ isXDIGIT_uvchr(c)   D_PPP_is_ctype(XDIGIT, xdigit, c)
+__UNDEFINED__ isWORDCHAR_uvchr(c) (FITS_IN_8_BITS(c)                        \
+                               ? isWORDCHAR_L1(c) : isALPHANUMERIC_uvchr(c))
+
+__UNDEFINED__ isALPHA_utf8_safe(s,e)    D_PPP_IS_GENERIC_UTF8_SAFE(s, e, ALPHA)
+#  ifdef isALPHANUMERIC_utf8
+__UNDEFINED__ isALPHANUMERIC_utf8_safe(s,e)                                 \
+                                D_PPP_IS_GENERIC_UTF8_SAFE(s, e, ALPHANUMERIC)
+#  else
+__UNDEFINED__ isALPHANUMERIC_utf8_safe(s,e)                                \
+                        (isALPHA_utf8_safe(s,e) || isDIGIT_utf8_safe(s,e))
+#  endif
+
+/* This was broken before 5.18, and just use this instead of worrying about
+ * which releases the official works on */
+#  if 'A' == 65
+__UNDEFINED__  isBLANK_utf8_safe(s,e)                                       \
+( ( LIKELY((e) > (s)) ) ?   /* Machine generated */                         \
+    ( ( 0x09 == ((const U8*)s)[0] || 0x20 == ((const U8*)s)[0] ) ? 1        \
+    : ( LIKELY(((e) - (s)) >= UTF8SKIP(s)) ) ?                              \
+           ( ( 0xC2 == ((const U8*)s)[0] ) ?                               \
+               ( ( 0xA0 == ((const U8*)s)[1] ) ? 2 : 0 )                   \
+           : ( 0xE1 == ((const U8*)s)[0] ) ?                               \
+               ( ( ( 0x9A == ((const U8*)s)[1] ) && ( 0x80 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+           : ( 0xE2 == ((const U8*)s)[0] ) ?                               \
+               ( ( 0x80 == ((const U8*)s)[1] ) ?                           \
+                   ( ( inRANGE(((const U8*)s)[2], 0x80, 0x8A ) || 0xAF == ((const U8*)s)[2] ) ? 3 : 0 )\
+               : ( ( 0x81 == ((const U8*)s)[1] ) && ( 0x9F == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+           : ( ( ( 0xE3 == ((const U8*)s)[0] ) && ( 0x80 == ((const U8*)s)[1] ) ) && ( 0x80 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+       : 0 )                                                               \
+ : 0 )
+
+#  elif 'A' == 193  && '^' == 95 /* EBCDIC 1047 */
+
+__UNDEFINED__  isBLANK_utf8_safe(s,e)                                       \
+( ( LIKELY((e) > (s)) ) ?                                                   \
+    ( ( 0x05 == ((const U8*)s)[0] || 0x40 == ((const U8*)s)[0] ) ? 1        \
+    : ( LIKELY(((e) - (s)) >= UTF8SKIP(s)) ) ?                              \
+           ( ( 0x80 == ((const U8*)s)[0] ) ?                               \
+               ( ( 0x41 == ((const U8*)s)[1] ) ? 2 : 0 )                   \
+           : ( 0xBC == ((const U8*)s)[0] ) ?                               \
+               ( ( ( 0x63 == ((const U8*)s)[1] ) && ( 0x41 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+           : ( 0xCA == ((const U8*)s)[0] ) ?                               \
+               ( ( 0x41 == ((const U8*)s)[1] ) ?                           \
+                   ( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || 0x51 == ((const U8*)s)[2] ) ? 3 : 0 )\
+               : ( 0x42 == ((const U8*)s)[1] ) ?                           \
+                   ( ( 0x56 == ((const U8*)s)[2] ) ? 3 : 0 )               \
+               : ( ( 0x43 == ((const U8*)s)[1] ) && ( 0x73 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+           : ( ( ( 0xCE == ((const U8*)s)[0] ) && ( 0x41 == ((const U8*)s)[1] ) ) && ( 0x41 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+       : 0 )                                                               \
+: 0 )
+
+#  elif 'A' == 193  && '^' == 176 /* EBCDIC 037 */
+
+__UNDEFINED__  isBLANK_utf8_safe(s,e)                                       \
+( ( LIKELY((e) > (s)) ) ?                                                   \
+    ( ( 0x05 == ((const U8*)s)[0] || 0x40 == ((const U8*)s)[0] ) ? 1        \
+    : ( LIKELY(((e) - (s)) >= UTF8SKIP(s)) ) ?                              \
+           ( ( 0x78 == ((const U8*)s)[0] ) ?                               \
+               ( ( 0x41 == ((const U8*)s)[1] ) ? 2 : 0 )                   \
+           : ( 0xBD == ((const U8*)s)[0] ) ?                               \
+               ( ( ( 0x62 == ((const U8*)s)[1] ) && ( 0x41 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+           : ( 0xCA == ((const U8*)s)[0] ) ?                               \
+               ( ( 0x41 == ((const U8*)s)[1] ) ?                           \
+                   ( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || 0x51 == ((const U8*)s)[2] ) ? 3 : 0 )\
+               : ( 0x42 == ((const U8*)s)[1] ) ?                           \
+                   ( ( 0x56 == ((const U8*)s)[2] ) ? 3 : 0 )               \
+               : ( ( 0x43 == ((const U8*)s)[1] ) && ( 0x72 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+           : ( ( ( 0xCE == ((const U8*)s)[0] ) && ( 0x41 == ((const U8*)s)[1] ) ) && ( 0x41 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
+       : 0 )                                                               \
+: 0 )
+
+#  else
+#    error Unknown character set
+#  endif
+
+__UNDEFINED__ isCNTRL_utf8_safe(s,e)    D_PPP_IS_GENERIC_UTF8_SAFE(s, e, CNTRL)
+__UNDEFINED__ isDIGIT_utf8_safe(s,e)    D_PPP_IS_GENERIC_UTF8_SAFE(s, e, DIGIT)
+__UNDEFINED__ isGRAPH_utf8_safe(s,e)    D_PPP_IS_GENERIC_UTF8_SAFE(s, e, GRAPH)
+#  ifdef isIDCONT_utf8
+__UNDEFINED__ isIDCONT_utf8_safe(s,e)   D_PPP_IS_GENERIC_UTF8_SAFE(s, e, IDCONT)
+#  else
+__UNDEFINED__ isIDCONT_utf8_safe(s,e)   isWORDCHAR_utf8_safe(s,e)
+#  endif
+
+__UNDEFINED__ isIDFIRST_utf8_safe(s,e)  D_PPP_IS_GENERIC_UTF8_SAFE(s, e, IDFIRST)
+__UNDEFINED__ isLOWER_utf8_safe(s,e)    D_PPP_IS_GENERIC_UTF8_SAFE(s, e, LOWER)
+__UNDEFINED__ isPRINT_utf8_safe(s,e)    D_PPP_IS_GENERIC_UTF8_SAFE(s, e, PRINT)
+
+#  undef isPSXSPC_utf8_safe   /* Use the modern definition */
+__UNDEFINED__ isPSXSPC_utf8_safe(s,e)   isSPACE_utf8_safe(s,e)
+
+__UNDEFINED__ isPUNCT_utf8_safe(s,e)    D_PPP_IS_GENERIC_UTF8_SAFE(s, e, PUNCT)
+__UNDEFINED__ isSPACE_utf8_safe(s,e)    D_PPP_IS_GENERIC_UTF8_SAFE(s, e, SPACE)
+__UNDEFINED__ isUPPER_utf8_safe(s,e)    D_PPP_IS_GENERIC_UTF8_SAFE(s, e, UPPER)
+
+#  ifdef isWORDCHAR_utf8
+__UNDEFINED__ isWORDCHAR_utf8_safe(s,e) D_PPP_IS_GENERIC_UTF8_SAFE(s, e, WORDCHAR)
+#  else
+__UNDEFINED__ isWORDCHAR_utf8_safe(s,e)                                               \
+                               (isALPHANUMERIC_utf8_safe(s,e) || (*(s)) == '_')
+#  endif
+
+/* This was broken before 5.12, and just use this instead of worrying about
+ * which releases the official works on */
+#  if 'A' == 65
+__UNDEFINED__  isXDIGIT_utf8_safe(s,e)                                       \
+( ( LIKELY((e) > (s)) ) ?                                                   \
+    ( ( inRANGE(((const U8*)s)[0], 0x30, 0x39 ) || inRANGE(((const U8*)s)[0], 0x41, 0x46 ) || inRANGE(((const U8*)s)[0], 0x61, 0x66 ) ) ? 1\
+    : ( ( LIKELY(((e) - (s)) >= UTF8SKIP(s)) ) && ( 0xEF == ((const U8*)s)[0] ) ) ? ( ( 0xBC == ((const U8*)s)[1] ) ?\
+                   ( ( inRANGE(((const U8*)s)[2], 0x90, 0x99 ) || inRANGE(((const U8*)s)[2], 0xA1, 0xA6 ) ) ? 3 : 0 )\
+               : ( ( 0xBD == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x81, 0x86 ) ) ) ? 3 : 0 ) : 0 )\
+: 0 )
+
+#  elif 'A' == 193  && '^' == 95 /* EBCDIC 1047 */
+
+__UNDEFINED__  isXDIGIT_utf8_safe(s,e)                                       \
+( ( LIKELY((e) > (s)) ) ?                                                   \
+    ( ( inRANGE(((const U8*)s)[0], 0x81, 0x86 ) || inRANGE(((const U8*)s)[0], 0xC1, 0xC6 ) || inRANGE(((const U8*)s)[0], 0xF0, 0xF9 ) ) ? 1\
+    : ( ( ( LIKELY(((e) - (s)) >= UTF8SKIP(s)) ) && ( 0xDD == ((const U8*)s)[0] ) ) && ( 0x73 == ((const U8*)s)[1] ) ) ? ( ( 0x67 == ((const U8*)s)[2] ) ?\
+                       ( ( inRANGE(((const U8*)s)[3], 0x57, 0x59 ) || inRANGE(((const U8*)s)[3], 0x62, 0x68 ) ) ? 4 : 0 )\
+                   : ( ( inRANGE(((const U8*)s)[2], 0x68, 0x69 ) ) && ( inRANGE(((const U8*)s)[3], 0x42, 0x47 ) ) ) ? 4 : 0 ) : 0 )\
+: 0 )
+
+#  elif 'A' == 193  && '^' == 176 /* EBCDIC 037 */
+
+__UNDEFINED__  isXDIGIT_utf8_safe(s,e)                                       \
+( ( LIKELY((e) > (s)) ) ?                                                   \
+    ( ( inRANGE(((const U8*)s)[0], 0x81, 0x86 ) || inRANGE(((const U8*)s)[0], 0xC1, 0xC6 ) || inRANGE(((const U8*)s)[0], 0xF0, 0xF9 ) ) ? 1\
+    : ( ( ( LIKELY(((e) - (s)) >= UTF8SKIP(s)) ) && ( 0xDD == ((const U8*)s)[0] ) ) && ( 0x72 == ((const U8*)s)[1] ) ) ? ( ( 0x66 == ((const U8*)s)[2] ) ?\
+                       ( ( inRANGE(((const U8*)s)[3], 0x57, 0x59 ) || 0x5F == ((const U8*)s)[3] || inRANGE(((const U8*)s)[3], 0x62, 0x67 ) ) ? 4 : 0 )\
+                   : ( ( inRANGE(((const U8*)s)[2], 0x67, 0x68 ) ) && ( inRANGE(((const U8*)s)[3], 0x42, 0x47 ) ) ) ? 4 : 0 ) : 0 )\
+: 0 )
+
+#  else
+#    error Unknown character set
+#  endif
+
+__UNDEFINED__ isALPHA_LC_utf8_safe(s,e)    D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, ALPHA)
+#  ifdef isALPHANUMERIC_utf8
+__UNDEFINED__ isALPHANUMERIC_LC_utf8_safe(s,e)                                 \
+                                D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, ALPHANUMERIC)
+#  else
+__UNDEFINED__ isALPHANUMERIC_LC_utf8_safe(s,e)                             \
+                        (isALPHA_LC_utf8_safe(s,e) || isDIGIT_LC_utf8_safe(s,e))
+#  endif
+
+__UNDEFINED__  isBLANK_LC_utf8_safe(s,e)                                       \
+                            D_PPP_IS_GENERIC_LC_UTF8_SAFE_BROKEN(s, e, BLANK)
+__UNDEFINED__ isCNTRL_LC_utf8_safe(s,e)    D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, CNTRL)
+__UNDEFINED__ isDIGIT_LC_utf8_safe(s,e)    D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, DIGIT)
+__UNDEFINED__ isGRAPH_LC_utf8_safe(s,e)    D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, GRAPH)
+#  ifdef isIDCONT_utf8
+__UNDEFINED__ isIDCONT_LC_utf8_safe(s,e)   D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, IDCONT)
+#  else
+__UNDEFINED__ isIDCONT_LC_utf8_safe(s,e)   isWORDCHAR_LC_utf8_safe(s,e)
+#  endif
+
+__UNDEFINED__ isIDFIRST_LC_utf8_safe(s,e)  D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, IDFIRST)
+__UNDEFINED__ isLOWER_LC_utf8_safe(s,e)    D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, LOWER)
+__UNDEFINED__ isPRINT_LC_utf8_safe(s,e)    D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, PRINT)
+
+#  undef isPSXSPC_LC_utf8_safe   /* Use the modern definition */
+__UNDEFINED__ isPSXSPC_LC_utf8_safe(s,e)   isSPACE_LC_utf8_safe(s,e)
+
+__UNDEFINED__ isPUNCT_LC_utf8_safe(s,e)    D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, PUNCT)
+__UNDEFINED__ isSPACE_LC_utf8_safe(s,e)    D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, SPACE)
+__UNDEFINED__ isUPPER_LC_utf8_safe(s,e)    D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, UPPER)
+
+#  ifdef isWORDCHAR_utf8
+__UNDEFINED__ isWORDCHAR_LC_utf8_safe(s,e) D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, WORDCHAR)
+#  else
+__UNDEFINED__ isWORDCHAR_LC_utf8_safe(s,e)                                            \
+                               (isALPHANUMERIC_LC_utf8_safe(s,e) || (*(s)) == '_')
+#  endif
+
+__UNDEFINED__  isXDIGIT_LC_utf8_safe(s,e)                                       \
+                            D_PPP_IS_GENERIC_LC_UTF8_SAFE_BROKEN(s, e, XDIGIT)
+
+/* Warning: isALPHANUMERIC_utf8_safe, isALPHA_utf8_safe, isASCII_utf8_safe,
+ * isBLANK_utf8_safe, isCNTRL_utf8_safe, isDIGIT_utf8_safe, isGRAPH_utf8_safe,
+ * isIDCONT_utf8_safe, isIDFIRST_utf8_safe, isLOWER_utf8_safe,
+ * isPRINT_utf8_safe, isPSXSPC_utf8_safe, isPUNCT_utf8_safe, isSPACE_utf8_safe,
+ * isUPPER_utf8_safe, isWORDCHAR_utf8_safe, isWORDCHAR_utf8_safe,
+ * isXDIGIT_utf8_safe,
+ * isALPHANUMERIC_LC_utf8_safe, isALPHA_LC_utf8_safe, isASCII_LC_utf8_safe,
+ * isBLANK_LC_utf8_safe, isCNTRL_LC_utf8_safe, isDIGIT_LC_utf8_safe,
+ * isGRAPH_LC_utf8_safe, isIDCONT_LC_utf8_safe, isIDFIRST_LC_utf8_safe,
+ * isLOWER_LC_utf8_safe, isPRINT_LC_utf8_safe, isPSXSPC_LC_utf8_safe,
+ * isPUNCT_LC_utf8_safe, isSPACE_LC_utf8_safe, isUPPER_LC_utf8_safe,
+ * isWORDCHAR_LC_utf8_safe, isWORDCHAR_LC_utf8_safe, isXDIGIT_LC_utf8_safe,
+ * isALPHANUMERIC_uvchr, isALPHA_uvchr, isASCII_uvchr, isBLANK_uvchr,
+ * isCNTRL_uvchr, isDIGIT_uvchr, isGRAPH_uvchr, isIDCONT_uvchr,
+ * isIDFIRST_uvchr, isLOWER_uvchr, isPRINT_uvchr, isPSXSPC_uvchr,
+ * isPUNCT_uvchr, isSPACE_uvchr, isUPPER_uvchr, isWORDCHAR_uvchr,
+ * isWORDCHAR_uvchr, isXDIGIT_uvchr
+ *
+ * The UTF-8 handling is buggy in early Perls, and this can give inaccurate
+ * results for code points above 0xFF, until the implementation started
+ * settling down in 5.12 and 5.14 */
+
+#endif
+
+#define D_PPP_TOO_SHORT_MSG  "Malformed UTF-8 character starting with:"      \
+                             " \\x%02x (too short; %d bytes available, need" \
+                             " %d)\n"
+/* Perls starting here had a new API which handled multi-character results */
+#if { VERSION >= 5.7.3 }
+
+__UNDEFINED__ toLOWER_uvchr(c, s, l)  UNI_TO_NATIVE(to_uni_lower(NATIVE_TO_UNI(c), s, l))
+__UNDEFINED__ toUPPER_uvchr(c, s, l)  UNI_TO_NATIVE(to_uni_upper(NATIVE_TO_UNI(c), s, l))
+__UNDEFINED__ toTITLE_uvchr(c, s, l)  UNI_TO_NATIVE(to_uni_title(NATIVE_TO_UNI(c), s, l))
+__UNDEFINED__ toFOLD_uvchr(c, s, l)   UNI_TO_NATIVE(to_uni_fold( NATIVE_TO_UNI(c), s, l))
+
+#  if { VERSION != 5.15.6 }     /* Just this version is broken */
+
+      /* Prefer the macro to the function */
+#    if defined toLOWER_utf8
+#      define D_PPP_TO_LOWER_CALLEE(s,r,l)    toLOWER_utf8(s,r,l)
+#    else
+#      define D_PPP_TO_LOWER_CALLEE(s,r,l)    to_utf8_lower(s,r,l)
+#    endif
+#    if defined toTITLE_utf8
+#      define D_PPP_TO_TITLE_CALLEE(s,r,l)    toTITLE_utf8(s,r,l)
+#    else
+#      define D_PPP_TO_TITLE_CALLEE(s,r,l)    to_utf8_title(s,r,l)
+#    endif
+#    if defined toUPPER_utf8
+#      define D_PPP_TO_UPPER_CALLEE(s,r,l)    toUPPER_utf8(s,r,l)
+#    else
+#      define D_PPP_TO_UPPER_CALLEE(s,r,l)    to_utf8_upper(s,r,l)
+#    endif
+#    if defined toFOLD_utf8
+#      define D_PPP_TO_FOLD_CALLEE(s,r,l)     toFOLD_utf8(s,r,l)
+#    else
+#      define D_PPP_TO_FOLD_CALLEE(s,r,l)     to_utf8_fold(s,r,l)
+#    endif
+#  else     /* Below is 5.15.6, which failed to make the macros available
+#              outside of core, so we have to use the 'Perl_' form.  khw
+#              decided it was easier to just handle this case than have to
+#              document the exception, and make an exception in the tests below
+#              */
+#    define D_PPP_TO_LOWER_CALLEE(s,r,l)                                    \
+                        Perl__to_utf8_lower_flags(aTHX_ s, r, l, 0, NULL)
+#    define D_PPP_TO_TITLE_CALLEE(s,r,l)                                    \
+                        Perl__to_utf8_title_flags(aTHX_ s, r, l, 0, NULL)
+#    define D_PPP_TO_UPPER_CALLEE(s,r,l)                                    \
+                        Perl__to_utf8_upper_flags(aTHX_ s, r, l, 0, NULL)
+#    define D_PPP_TO_FOLD_CALLEE(s,r,l)                                     \
+            Perl__to_utf8_fold_flags(aTHX_ s, r, l, FOLD_FLAGS_FULL, NULL)
+#  endif
+
+/* The actual implementation of the backported macros.  If too short, croak,
+ * otherwise call the original that doesn't have an upper limit parameter */
+#  define D_PPP_GENERIC_MULTI_ARG_TO(name, s, e,r,l)                        \
+    (((((e) - (s)) <= 0)                                                    \
+         /* We could just do nothing, but modern perls croak */             \
+      ? (croak("Attempting case change on zero length string"),             \
+         0) /* So looks like it returns something, and will compile */      \
+      : ((e) - (s)) < UTF8SKIP(s))                                          \
+        ? (croak(D_PPP_TOO_SHORT_MSG,                                       \
+                               s[0], (int) ((e) - (s)), (int) UTF8SKIP(s)), \
+           0)                                                               \
+        : D_PPP_TO_ ## name ## _CALLEE(s,r,l))
+
+__UNDEFINED__  toUPPER_utf8_safe(s,e,r,l)                                   \
+                        D_PPP_GENERIC_MULTI_ARG_TO(UPPER,s,e,r,l)
+__UNDEFINED__  toLOWER_utf8_safe(s,e,r,l)                                   \
+                        D_PPP_GENERIC_MULTI_ARG_TO(LOWER,s,e,r,l)
+__UNDEFINED__  toTITLE_utf8_safe(s,e,r,l)                                   \
+                        D_PPP_GENERIC_MULTI_ARG_TO(TITLE,s,e,r,l)
+__UNDEFINED__  toFOLD_utf8_safe(s,e,r,l)                                    \
+                        D_PPP_GENERIC_MULTI_ARG_TO(FOLD,s,e,r,l)
+
+#elif { VERSION >= 5.006 }
+
+/* Here we have UTF-8 support, but using the original API where the case
+ * changing functions merely returned the changed code point; hence they
+ * couldn't handle multi-character results. */
+
+#  ifdef uvchr_to_utf8
+#    define D_PPP_UV_TO_UTF8 uvchr_to_utf8
+#  else
+#    define D_PPP_UV_TO_UTF8 uv_to_utf8
+#  endif
 
-__UNDEFINED__ isALNUM_A         isALNUM
-__UNDEFINED__ isALNUMC_A        isALNUMC
-__UNDEFINED__ isALPHA_A         isALPHA
-__UNDEFINED__ isALPHANUMERIC_A  isALPHANUMERIC
-__UNDEFINED__ isASCII_A         isASCII
-__UNDEFINED__ isBLANK_A         isBLANK
-__UNDEFINED__ isCNTRL_A         isCNTRL
-__UNDEFINED__ isDIGIT_A         isDIGIT
-__UNDEFINED__ isGRAPH_A         isGRAPH
-__UNDEFINED__ isIDCONT_A        isIDCONT
-__UNDEFINED__ isIDFIRST_A       isIDFIRST
-__UNDEFINED__ isLOWER_A         isLOWER
-__UNDEFINED__ isOCTAL_A         isOCTAL
-__UNDEFINED__ isPRINT_A         isPRINT
-__UNDEFINED__ isPSXSPC_A        isPSXSPC
-__UNDEFINED__ isPUNCT_A         isPUNCT
-__UNDEFINED__ isSPACE_A         isSPACE
-__UNDEFINED__ isUPPER_A         isUPPER
-__UNDEFINED__ isWORDCHAR_A     isWORDCHAR
-__UNDEFINED__ isXDIGIT_A       isXDIGIT
+   /* Get the utf8 of the case changed value, and store its length; then have
+    * to re-calculate the changed case value in order to return it */
+#  define D_PPP_GENERIC_SINGLE_ARG_TO_UVCHR(name, c, s, l)                  \
+        (*(l) = (D_PPP_UV_TO_UTF8(s,                                        \
+                 UNI_TO_NATIVE(to_uni_ ## name(NATIVE_TO_UNI(c)))) - (s)),  \
+        UNI_TO_NATIVE(to_uni_ ## name(NATIVE_TO_UNI(c))))
+
+__UNDEFINED__ toLOWER_uvchr(c, s, l)                                        \
+                        D_PPP_GENERIC_SINGLE_ARG_TO_UVCHR(lower, c, s, l)
+__UNDEFINED__ toUPPER_uvchr(c, s, l)                                        \
+                        D_PPP_GENERIC_SINGLE_ARG_TO_UVCHR(upper, c, s, l)
+__UNDEFINED__ toTITLE_uvchr(c, s, l)                                        \
+                        D_PPP_GENERIC_SINGLE_ARG_TO_UVCHR(title, c, s, l)
+__UNDEFINED__ toFOLD_uvchr(c, s, l)   toLOWER_uvchr(c, s, l)
+
+#  define D_PPP_GENERIC_SINGLE_ARG_TO_UTF8(name, s, e, r, l)                \
+    (((((e) - (s)) <= 0)                                                    \
+      ? (croak("Attempting case change on zero length string"),             \
+         0) /* So looks like it returns something, and will compile */      \
+      : ((e) - (s)) < UTF8SKIP(s))                                          \
+        ? (croak(D_PPP_TOO_SHORT_MSG,                                       \
+                               s[0], (int) ((e) - (s)), (int) UTF8SKIP(s)), \
+           0)                                                               \
+          /* Get the changed code point and store its UTF-8 */              \
+        : D_PPP_UV_TO_UTF8(r, to_utf8_ ## name(s)),                         \
+            /* Then store its length, and re-get code point for return */   \
+            *(l) = UTF8SKIP(r), to_utf8_ ## name(r))
+
+/* Warning: toUPPER_utf8_safe, toLOWER_utf8_safe, toTITLE_utf8_safe,
+ * toUPPER_uvchr, toLOWER_uvchr, toTITLE_uvchr
+    The UTF-8 case changing operations had bugs before around 5.12 or 5.14;
+    this backport does not correct them.
+
+    In perls before 7.3, multi-character case changing is not implemented; this
+    backport uses the simple case changes available in those perls. */
+
+__UNDEFINED__  toUPPER_utf8_safe(s,e,r,l)                                   \
+                        D_PPP_GENERIC_SINGLE_ARG_TO_UTF8(upper, s, e, r, l)
+__UNDEFINED__  toLOWER_utf8_safe(s,e,r,l)                                   \
+                        D_PPP_GENERIC_SINGLE_ARG_TO_UTF8(lower, s, e, r, l)
+__UNDEFINED__  toTITLE_utf8_safe(s,e,r,l)                                   \
+                        D_PPP_GENERIC_SINGLE_ARG_TO_UTF8(title, s, e, r, l)
+
+ /* Warning: toFOLD_utf8_safe, toFOLD_uvchr
+    The UTF-8 case changing operations had bugs before around 5.12 or 5.14;
+    this backport does not correct them.
+
+    In perls before 7.3, case folding is not implemented; instead, this
+    backport substitutes simple (not multi-character, which isn't available)
+    lowercasing.  This gives the correct result in most, but not all, instances
+    */
+
+__UNDEFINED__  toFOLD_utf8_safe(s,e,r,l)  toLOWER_utf8_safe(s,e,r,l)
+
+#endif
 
 /* Until we figure out how to support this in older perls... */
 #if { VERSION >= 5.8.0 }
@@ -513,8 +1067,6 @@ __UNDEFINED__ C_ARRAY_END(a)               ((a) + C_ARRAY_LENGTH(a))
 __UNDEFINED__ LIKELY(x) (x)
 __UNDEFINED__ UNLIKELY(x) (x)
 
-__UNDEFINED__ UNICODE_REPLACEMENT  0xFFFD
-
 #ifndef MUTABLE_PTR
 #if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
 #  define MUTABLE_PTR(p) ({ void *_p = (p); _p; })
@@ -559,10 +1111,6 @@ XS(XS_Devel__PPPort_dAXMARK)
   XSRETURN(1);
 }
 
-=xsinit
-
-#define NEED_SvRX
-
 =xsboot
 
 {
@@ -768,7 +1316,7 @@ DEFSV_modify()
 int
 ERRSV()
         CODE:
-                RETVAL = SvTRUE(ERRSV);
+                RETVAL = SvTRUEx(ERRSV);
         OUTPUT:
                 RETVAL
 
@@ -855,521 +1403,1573 @@ check_c_array()
                 mXPUSHi(*(C_ARRAY_END(x)-1)); /* 13 */
 
 bool
-test_isBLANK(UV ord)
+isBLANK(ord)
+    UV ord
     CODE:
         RETVAL = isBLANK(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isBLANK_A(UV ord)
+isBLANK_A(ord)
+    UV ord
     CODE:
         RETVAL = isBLANK_A(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isUPPER(UV ord)
+isBLANK_L1(ord)
+    UV ord
+    CODE:
+        RETVAL = isBLANK_L1(ord);
+    OUTPUT:
+        RETVAL
+
+bool
+isUPPER(ord)
+    UV ord
     CODE:
         RETVAL = isUPPER(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isUPPER_A(UV ord)
+isUPPER_A(ord)
+    UV ord
     CODE:
         RETVAL = isUPPER_A(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isLOWER(UV ord)
+isUPPER_L1(ord)
+    UV ord
+    CODE:
+        RETVAL = isUPPER_L1(ord);
+    OUTPUT:
+        RETVAL
+
+bool
+isLOWER(ord)
+    UV ord
     CODE:
         RETVAL = isLOWER(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isLOWER_A(UV ord)
+isLOWER_A(ord)
+    UV ord
     CODE:
         RETVAL = isLOWER_A(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isALPHA(UV ord)
+isLOWER_L1(ord)
+    UV ord
+    CODE:
+        RETVAL = isLOWER_L1(ord);
+    OUTPUT:
+        RETVAL
+
+bool
+isALPHA(ord)
+    UV ord
     CODE:
         RETVAL = isALPHA(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isALPHA_A(UV ord)
+isALPHA_A(ord)
+    UV ord
     CODE:
         RETVAL = isALPHA_A(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isWORDCHAR(UV ord)
+isALPHA_L1(ord)
+    UV ord
+    CODE:
+        RETVAL = isALPHA_L1(ord);
+    OUTPUT:
+        RETVAL
+
+bool
+isWORDCHAR(ord)
+    UV ord
     CODE:
         RETVAL = isWORDCHAR(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isWORDCHAR_A(UV ord)
+isWORDCHAR_A(ord)
+    UV ord
     CODE:
         RETVAL = isWORDCHAR_A(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isALPHANUMERIC(UV ord)
+isWORDCHAR_L1(ord)
+    UV ord
+    CODE:
+        RETVAL = isWORDCHAR_L1(ord);
+    OUTPUT:
+        RETVAL
+
+bool
+isALPHANUMERIC(ord)
+    UV ord
     CODE:
         RETVAL = isALPHANUMERIC(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isALPHANUMERIC_A(UV ord)
+isALPHANUMERIC_A(ord)
+    UV ord
     CODE:
         RETVAL = isALPHANUMERIC_A(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isALNUM(UV ord)
+isALNUM(ord)
+    UV ord
     CODE:
         RETVAL = isALNUM(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isALNUM_A(UV ord)
+isALNUM_A(ord)
+    UV ord
     CODE:
         RETVAL = isALNUM_A(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isDIGIT(UV ord)
+isDIGIT(ord)
+    UV ord
     CODE:
         RETVAL = isDIGIT(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isDIGIT_A(UV ord)
+isDIGIT_A(ord)
+    UV ord
     CODE:
         RETVAL = isDIGIT_A(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isOCTAL(UV ord)
+isOCTAL(ord)
+    UV ord
     CODE:
         RETVAL = isOCTAL(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isOCTAL_A(UV ord)
+isOCTAL_A(ord)
+    UV ord
     CODE:
         RETVAL = isOCTAL_A(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isIDFIRST(UV ord)
+isIDFIRST(ord)
+    UV ord
     CODE:
         RETVAL = isIDFIRST(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isIDFIRST_A(UV ord)
+isIDFIRST_A(ord)
+    UV ord
     CODE:
         RETVAL = isIDFIRST_A(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isIDCONT(UV ord)
+isIDCONT(ord)
+    UV ord
     CODE:
         RETVAL = isIDCONT(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isIDCONT_A(UV ord)
+isIDCONT_A(ord)
+    UV ord
     CODE:
         RETVAL = isIDCONT_A(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isSPACE(UV ord)
+isSPACE(ord)
+    UV ord
     CODE:
         RETVAL = isSPACE(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isSPACE_A(UV ord)
+isSPACE_A(ord)
+    UV ord
     CODE:
         RETVAL = isSPACE_A(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isASCII(UV ord)
+isASCII(ord)
+    UV ord
     CODE:
         RETVAL = isASCII(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isASCII_A(UV ord)
+isASCII_A(ord)
+    UV ord
     CODE:
         RETVAL = isASCII_A(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isCNTRL(UV ord)
+isCNTRL(ord)
+    UV ord
     CODE:
         RETVAL = isCNTRL(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isCNTRL_A(UV ord)
+isCNTRL_A(ord)
+    UV ord
     CODE:
         RETVAL = isCNTRL_A(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isPRINT(UV ord)
+isPRINT(ord)
+    UV ord
     CODE:
         RETVAL = isPRINT(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isPRINT_A(UV ord)
+isPRINT_A(ord)
+    UV ord
     CODE:
         RETVAL = isPRINT_A(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isGRAPH(UV ord)
+isGRAPH(ord)
+    UV ord
     CODE:
         RETVAL = isGRAPH(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isGRAPH_A(UV ord)
+isGRAPH_A(ord)
+    UV ord
     CODE:
         RETVAL = isGRAPH_A(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isPUNCT(UV ord)
+isPUNCT(ord)
+    UV ord
     CODE:
         RETVAL = isPUNCT(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isPUNCT_A(UV ord)
+isPUNCT_A(ord)
+    UV ord
     CODE:
         RETVAL = isPUNCT_A(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isXDIGIT(UV ord)
+isXDIGIT(ord)
+    UV ord
     CODE:
         RETVAL = isXDIGIT(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isXDIGIT_A(UV ord)
+isXDIGIT_A(ord)
+    UV ord
     CODE:
         RETVAL = isXDIGIT_A(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isPSXSPC(UV ord)
+isPSXSPC(ord)
+    UV ord
     CODE:
         RETVAL = isPSXSPC(ord);
     OUTPUT:
         RETVAL
 
 bool
-test_isPSXSPC_A(UV ord)
+isPSXSPC_A(ord)
+    UV ord
     CODE:
         RETVAL = isPSXSPC_A(ord);
     OUTPUT:
         RETVAL
 
-STRLEN
-av_tindex(av)
-        AV *av
-        CODE:
-                RETVAL = av_tindex(av);
-        OUTPUT:
-                RETVAL
+bool
+isALPHANUMERIC_L1(ord)
+    UV ord
+    CODE:
+        RETVAL = isALPHANUMERIC_L1(ord);
+    OUTPUT:
+        RETVAL
 
-STRLEN
-av_top_index(av)
-        AV *av
-        CODE:
-                RETVAL = av_top_index(av);
-        OUTPUT:
-                RETVAL
+bool
+isALNUMC_L1(ord)
+    UV ord
+    CODE:
+        RETVAL = isALNUMC_L1(ord);
+    OUTPUT:
+        RETVAL
 
-=tests plan => 128
+bool
+isDIGIT_L1(ord)
+    UV ord
+    CODE:
+        RETVAL = isDIGIT_L1(ord);
+    OUTPUT:
+        RETVAL
 
-use vars qw($my_sv @my_av %my_hv);
+bool
+isOCTAL_L1(ord)
+    UV ord
+    CODE:
+        RETVAL = isOCTAL_L1(ord);
+    OUTPUT:
+        RETVAL
 
-ok(&Devel::PPPort::boolSV(1));
-ok(!&Devel::PPPort::boolSV(0));
+bool
+isIDFIRST_L1(ord)
+    UV ord
+    CODE:
+        RETVAL = isIDFIRST_L1(ord);
+    OUTPUT:
+        RETVAL
 
-$_ = "Fred";
-ok(&Devel::PPPort::DEFSV(), "Fred");
-ok(&Devel::PPPort::UNDERBAR(), "Fred");
+bool
+isIDCONT_L1(ord)
+    UV ord
+    CODE:
+        RETVAL = isIDCONT_L1(ord);
+    OUTPUT:
+        RETVAL
 
-if ("$]" >= 5.009002 && "$]" < 5.023 && "$]" < 5.023004) {
-  eval q{
-    no warnings "deprecated";
-    no if $^V > v5.17.9, warnings => "experimental::lexical_topic";
-    my $_ = "Tony";
-    ok(&Devel::PPPort::DEFSV(), "Fred");
-    ok(&Devel::PPPort::UNDERBAR(), "Tony");
-  };
-}
-else {
-  ok(1);
-  ok(1);
-}
+bool
+isSPACE_L1(ord)
+    UV ord
+    CODE:
+        RETVAL = isSPACE_L1(ord);
+    OUTPUT:
+        RETVAL
 
-my @r = &Devel::PPPort::DEFSV_modify();
+bool
+isASCII_L1(ord)
+    UV ord
+    CODE:
+        RETVAL = isASCII_L1(ord);
+    OUTPUT:
+        RETVAL
 
-ok(@r == 3);
-ok($r[0], 'Fred');
-ok($r[1], 'DEFSV');
-ok($r[2], 'Fred');
+bool
+isCNTRL_L1(ord)
+    UV ord
+    CODE:
+        RETVAL = isCNTRL_L1(ord);
+    OUTPUT:
+        RETVAL
 
-ok(&Devel::PPPort::DEFSV(), "Fred");
+bool
+isPRINT_L1(ord)
+    UV ord
+    CODE:
+        RETVAL = isPRINT_L1(ord);
+    OUTPUT:
+        RETVAL
 
-eval { 1 };
-ok(!&Devel::PPPort::ERRSV());
-eval { cannot_call_this_one() };
-ok(&Devel::PPPort::ERRSV());
+bool
+isGRAPH_L1(ord)
+    UV ord
+    CODE:
+        RETVAL = isGRAPH_L1(ord);
+    OUTPUT:
+        RETVAL
 
-ok(&Devel::PPPort::gv_stashpvn('Devel::PPPort', 0));
-ok(!&Devel::PPPort::gv_stashpvn('does::not::exist', 0));
-ok(&Devel::PPPort::gv_stashpvn('does::not::exist', 1));
+bool
+isPUNCT_L1(ord)
+    UV ord
+    CODE:
+        RETVAL = isPUNCT_L1(ord);
+    OUTPUT:
+        RETVAL
 
-$my_sv = 1;
-ok(&Devel::PPPort::get_sv('my_sv', 0));
-ok(!&Devel::PPPort::get_sv('not_my_sv', 0));
-ok(&Devel::PPPort::get_sv('not_my_sv', 1));
+bool
+isXDIGIT_L1(ord)
+    UV ord
+    CODE:
+        RETVAL = isXDIGIT_L1(ord);
+    OUTPUT:
+        RETVAL
 
-@my_av = (1);
-ok(&Devel::PPPort::get_av('my_av', 0));
-ok(!&Devel::PPPort::get_av('not_my_av', 0));
-ok(&Devel::PPPort::get_av('not_my_av', 1));
+bool
+isPSXSPC_L1(ord)
+    UV ord
+    CODE:
+        RETVAL = isPSXSPC_L1(ord);
+    OUTPUT:
+        RETVAL
 
-%my_hv = (a=>1);
-ok(&Devel::PPPort::get_hv('my_hv', 0));
-ok(!&Devel::PPPort::get_hv('not_my_hv', 0));
-ok(&Devel::PPPort::get_hv('not_my_hv', 1));
+bool
+isASCII_uvchr(ord)
+    UV ord
+    CODE:
+        RETVAL = isASCII_uvchr(ord);
+    OUTPUT:
+        RETVAL
 
-sub my_cv { 1 };
-ok(&Devel::PPPort::get_cv('my_cv', 0));
-ok(!&Devel::PPPort::get_cv('not_my_cv', 0));
-ok(&Devel::PPPort::get_cv('not_my_cv', 1));
+bool
+isASCII_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    CODE:
+        PERL_UNUSED_ARG(offset);
+        RETVAL = isASCII_utf8_safe(s, s + 1 + offset);
+    OUTPUT:
+        RETVAL
 
-ok(Devel::PPPort::dXSTARG(42), 43);
-ok(Devel::PPPort::dAXMARK(4711), 4710);
+#if { VERSION >= 5.006 }
 
-ok(Devel::PPPort::prepush(), 42);
+bool
+isBLANK_uvchr(ord)
+    UV ord
+    CODE:
+        RETVAL = isBLANK_uvchr(ord);
+    OUTPUT:
+        RETVAL
 
-ok(join(':', Devel::PPPort::xsreturn(0)), 'test1');
-ok(join(':', Devel::PPPort::xsreturn(1)), 'test1:test2');
+bool
+isALPHA_uvchr(ord)
+    UV ord
+    CODE:
+        RETVAL = isALPHA_uvchr(ord);
+    OUTPUT:
+        RETVAL
 
-ok(Devel::PPPort::PERL_ABS(42), 42);
-ok(Devel::PPPort::PERL_ABS(-13), 13);
+bool
+isALPHANUMERIC_uvchr(ord)
+    UV ord
+    CODE:
+        RETVAL = isALPHANUMERIC_uvchr(ord);
+    OUTPUT:
+        RETVAL
 
-ok(Devel::PPPort::SVf(42), "$]" >= 5.004 ? '[42]' : '42');
-ok(Devel::PPPort::SVf('abc'), "$]" >= 5.004 ? '[abc]' : 'abc');
+bool
+isCNTRL_uvchr(ord)
+    UV ord
+    CODE:
+        RETVAL = isCNTRL_uvchr(ord);
+    OUTPUT:
+        RETVAL
 
-ok(&Devel::PPPort::Perl_ppaddr_t("FOO"), "foo");
+bool
+isDIGIT_uvchr(ord)
+    UV ord
+    CODE:
+        RETVAL = isDIGIT_uvchr(ord);
+    OUTPUT:
+        RETVAL
 
-ok(&Devel::PPPort::ptrtests(), 63);
+bool
+isIDFIRST_uvchr(ord)
+    UV ord
+    CODE:
+        RETVAL = isIDFIRST_uvchr(ord);
+    OUTPUT:
+        RETVAL
 
-ok(&Devel::PPPort::OpSIBLING_tests(), 0);
+bool
+isIDCONT_uvchr(ord)
+    UV ord
+    CODE:
+        RETVAL = isIDCONT_uvchr(ord);
+    OUTPUT:
+        RETVAL
 
-if ("$]" >= 5.009000) {
-  eval q{
-    ok(&Devel::PPPort::check_HeUTF8("hello"), "norm");
-    ok(&Devel::PPPort::check_HeUTF8("\N{U+263a}"), "utf8");
-  };
-} else {
-  ok(1, 1);
-  ok(1, 1);
-}
+bool
+isGRAPH_uvchr(ord)
+    UV ord
+    CODE:
+        RETVAL = isGRAPH_uvchr(ord);
+    OUTPUT:
+        RETVAL
 
-@r = &Devel::PPPort::check_c_array();
-ok($r[0], 4);
-ok($r[1], "13");
+bool
+isLOWER_uvchr(ord)
+    UV ord
+    CODE:
+        RETVAL = isLOWER_uvchr(ord);
+    OUTPUT:
+        RETVAL
 
-ok(!Devel::PPPort::SvRXOK(""));
-ok(!Devel::PPPort::SvRXOK(bless [], "Regexp"));
+bool
+isPRINT_uvchr(ord)
+    UV ord
+    CODE:
+        RETVAL = isPRINT_uvchr(ord);
+    OUTPUT:
+        RETVAL
 
-if ("$]" < 5.005) {
-        skip 'no qr// objects in this perl', 0;
-        skip 'no qr// objects in this perl', 0;
-} else {
-        my $qr = eval 'qr/./';
-        ok(Devel::PPPort::SvRXOK($qr));
-        ok(Devel::PPPort::SvRXOK(bless $qr, "Surprise"));
-}
+bool
+isPSXSPC_uvchr(ord)
+    UV ord
+    CODE:
+        RETVAL = isPSXSPC_uvchr(ord);
+    OUTPUT:
+        RETVAL
+
+bool
+isPUNCT_uvchr(ord)
+    UV ord
+    CODE:
+        RETVAL = isPUNCT_uvchr(ord);
+    OUTPUT:
+        RETVAL
+
+bool
+isSPACE_uvchr(ord)
+    UV ord
+    CODE:
+        RETVAL = isSPACE_uvchr(ord);
+    OUTPUT:
+        RETVAL
+
+bool
+isUPPER_uvchr(ord)
+    UV ord
+    CODE:
+        RETVAL = isUPPER_uvchr(ord);
+    OUTPUT:
+        RETVAL
+
+bool
+isWORDCHAR_uvchr(ord)
+    UV ord
+    CODE:
+        RETVAL = isWORDCHAR_uvchr(ord);
+    OUTPUT:
+        RETVAL
+
+bool
+isXDIGIT_uvchr(ord)
+    UV ord
+    CODE:
+        RETVAL = isXDIGIT_uvchr(ord);
+    OUTPUT:
+        RETVAL
+
+bool
+isALPHA_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    CODE:
+        RETVAL = isALPHA_utf8_safe(s, s + UTF8SKIP(s) + offset);
+    OUTPUT:
+        RETVAL
+
+bool
+isALPHANUMERIC_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    CODE:
+        RETVAL = isALPHANUMERIC_utf8_safe(s, s + UTF8SKIP(s) + offset);
+    OUTPUT:
+        RETVAL
+
+bool
+isBLANK_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    CODE:
+        RETVAL = isBLANK_utf8_safe(s, s + UTF8SKIP(s) + offset);
+    OUTPUT:
+        RETVAL
+
+bool
+isCNTRL_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    CODE:
+        RETVAL = isCNTRL_utf8_safe(s, s + UTF8SKIP(s) + offset);
+    OUTPUT:
+        RETVAL
+
+bool
+isDIGIT_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    CODE:
+        RETVAL = isDIGIT_utf8_safe(s, s + UTF8SKIP(s) + offset);
+    OUTPUT:
+        RETVAL
+
+bool
+isGRAPH_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    CODE:
+        RETVAL = isGRAPH_utf8_safe(s, s + UTF8SKIP(s) + offset);
+    OUTPUT:
+        RETVAL
+
+bool
+isIDCONT_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    CODE:
+        RETVAL = isIDCONT_utf8_safe(s, s + UTF8SKIP(s) + offset);
+    OUTPUT:
+        RETVAL
+
+bool
+isIDFIRST_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    CODE:
+        RETVAL = isIDFIRST_utf8_safe(s, s + UTF8SKIP(s) + offset);
+    OUTPUT:
+        RETVAL
+
+bool
+isLOWER_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    CODE:
+        RETVAL = isLOWER_utf8_safe(s, s + UTF8SKIP(s) + offset);
+    OUTPUT:
+        RETVAL
+
+bool
+isPRINT_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    CODE:
+        RETVAL = isPRINT_utf8_safe(s, s + UTF8SKIP(s) + offset);
+    OUTPUT:
+        RETVAL
+
+bool
+isPSXSPC_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    CODE:
+        RETVAL = isPSXSPC_utf8_safe(s, s + UTF8SKIP(s) + offset);
+    OUTPUT:
+        RETVAL
+
+bool
+isPUNCT_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    CODE:
+        RETVAL = isPUNCT_utf8_safe(s, s + UTF8SKIP(s) + offset);
+    OUTPUT:
+        RETVAL
+
+bool
+isSPACE_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    CODE:
+        RETVAL = isSPACE_utf8_safe(s, s + UTF8SKIP(s) + offset);
+    OUTPUT:
+        RETVAL
+
+bool
+isUPPER_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    CODE:
+        RETVAL = isUPPER_utf8_safe(s, s + UTF8SKIP(s) + offset);
+    OUTPUT:
+        RETVAL
+
+bool
+isWORDCHAR_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    CODE:
+        RETVAL = isWORDCHAR_utf8_safe(s, s + UTF8SKIP(s) + offset);
+    OUTPUT:
+        RETVAL
+
+bool
+isXDIGIT_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    CODE:
+        RETVAL = isXDIGIT_utf8_safe(s, s + UTF8SKIP(s) + offset);
+    OUTPUT:
+        RETVAL
+
+bool
+isALPHA_LC_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    CODE:
+        RETVAL = isALPHA_LC_utf8_safe(s, s + UTF8SKIP(s) + offset);
+    OUTPUT:
+        RETVAL
+
+bool
+isALPHANUMERIC_LC_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    CODE:
+        RETVAL = isALPHANUMERIC_LC_utf8_safe(s, s + UTF8SKIP(s) + offset);
+    OUTPUT:
+        RETVAL
+
+bool
+isASCII_LC_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    CODE:
+        PERL_UNUSED_ARG(offset);
+        RETVAL = isASCII_utf8_safe(s, s + UTF8SKIP(s) + offset);
+    OUTPUT:
+        RETVAL
+
+bool
+isBLANK_LC_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    CODE:
+        RETVAL = isBLANK_LC_utf8_safe(s, s + UTF8SKIP(s) + offset);
+    OUTPUT:
+        RETVAL
+
+bool
+isCNTRL_LC_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    CODE:
+        RETVAL = isCNTRL_LC_utf8_safe(s, s + UTF8SKIP(s) + offset);
+    OUTPUT:
+        RETVAL
+
+bool
+isDIGIT_LC_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    CODE:
+        RETVAL = isDIGIT_LC_utf8_safe(s, s + UTF8SKIP(s) + offset);
+    OUTPUT:
+        RETVAL
+
+bool
+isGRAPH_LC_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    CODE:
+        RETVAL = isGRAPH_LC_utf8_safe(s, s + UTF8SKIP(s) + offset);
+    OUTPUT:
+        RETVAL
+
+bool
+isIDCONT_LC_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    CODE:
+        RETVAL = isIDCONT_LC_utf8_safe(s, s + UTF8SKIP(s) + offset);
+    OUTPUT:
+        RETVAL
+
+bool
+isIDFIRST_LC_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    CODE:
+        RETVAL = isIDFIRST_LC_utf8_safe(s, s + UTF8SKIP(s) + offset);
+    OUTPUT:
+        RETVAL
+
+bool
+isLOWER_LC_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    CODE:
+        RETVAL = isLOWER_LC_utf8_safe(s, s + UTF8SKIP(s) + offset);
+    OUTPUT:
+        RETVAL
 
-ok(  Devel::PPPort::test_isBLANK(ord(" ")));
-ok(! Devel::PPPort::test_isBLANK(ord("\n")));
+bool
+isPRINT_LC_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    CODE:
+        RETVAL = isPRINT_LC_utf8_safe(s, s + UTF8SKIP(s) + offset);
+    OUTPUT:
+        RETVAL
 
-ok(  Devel::PPPort::test_isBLANK_A(ord("\t")));
-ok(! Devel::PPPort::test_isBLANK_A(ord("\r")));
+bool
+isPSXSPC_LC_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    CODE:
+        RETVAL = isPSXSPC_LC_utf8_safe(s, s + UTF8SKIP(s) + offset);
+    OUTPUT:
+        RETVAL
 
-ok(  Devel::PPPort::test_isUPPER(ord("A")));
-ok(! Devel::PPPort::test_isUPPER(ord("a")));
+bool
+isPUNCT_LC_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    CODE:
+        RETVAL = isPUNCT_LC_utf8_safe(s, s + UTF8SKIP(s) + offset);
+    OUTPUT:
+        RETVAL
 
-ok(  Devel::PPPort::test_isUPPER_A(ord("Z")));
+bool
+isSPACE_LC_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    CODE:
+        RETVAL = isSPACE_LC_utf8_safe(s, s + UTF8SKIP(s) + offset);
+    OUTPUT:
+        RETVAL
 
-# One of these two is uppercase in EBCDIC; the other in Latin1, but neither are
-# ASCII uppercase.
-ok(! Devel::PPPort::test_isUPPER_A(ord(0xDC)));
-ok(! Devel::PPPort::test_isUPPER_A(ord(0xFC)));
+bool
+isUPPER_LC_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    CODE:
+        RETVAL = isUPPER_LC_utf8_safe(s, s + UTF8SKIP(s) + offset);
+    OUTPUT:
+        RETVAL
 
-ok(  Devel::PPPort::test_isLOWER(ord("b")));
-ok(! Devel::PPPort::test_isLOWER(ord("B")));
+bool
+isWORDCHAR_LC_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    CODE:
+        RETVAL = isWORDCHAR_LC_utf8_safe(s, s + UTF8SKIP(s) + offset);
+    OUTPUT:
+        RETVAL
 
-ok(  Devel::PPPort::test_isLOWER_A(ord("y")));
+bool
+isXDIGIT_LC_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    CODE:
+        RETVAL = isXDIGIT_LC_utf8_safe(s, s + UTF8SKIP(s) + offset);
+    OUTPUT:
+        RETVAL
 
-# One of these two is lowercase in EBCDIC; the other in Latin1, but neither are
-# ASCII lowercase.
-ok(! Devel::PPPort::test_isLOWER_A(ord(0xDC)));
-ok(! Devel::PPPort::test_isLOWER_A(ord(0xFC)));
+AV *
+toLOWER_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    PREINIT:
+        U8 u[UTF8_MAXBYTES+1];
+        Size_t len;
+        UV ret;
+        SV* utf8;
+        AV * av;
+    CODE:
+        av = newAV();
+        ret = toLOWER_utf8_safe(s, s + UTF8SKIP(s) + offset, u, &len);
+        av_push(av, newSVuv(ret));
 
-ok(  Devel::PPPort::test_isALPHA(ord("C")));
-ok(! Devel::PPPort::test_isALPHA(ord("1")));
+        utf8 = newSVpvn((char *) u, len);
+        SvUTF8_on(utf8);
+        av_push(av, utf8);
 
-ok(  Devel::PPPort::test_isALPHA_A(ord("x")));
-ok(! Devel::PPPort::test_isALPHA_A(0xDC));
+        av_push(av, newSVuv(len));
+        RETVAL = av;
+    OUTPUT:
+        RETVAL
 
-ok(  Devel::PPPort::test_isWORDCHAR(ord("_")));
-ok(! Devel::PPPort::test_isWORDCHAR(ord("@")));
+AV *
+toTITLE_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    PREINIT:
+        U8 u[UTF8_MAXBYTES+1];
+        Size_t len;
+        UV ret;
+        SV* utf8;
+        AV * av;
+    CODE:
+        av = newAV();
+        ret = toTITLE_utf8_safe(s, s + UTF8SKIP(s) + offset, u, &len);
+        av_push(av, newSVuv(ret));
+
+        utf8 = newSVpvn((char *) u, len);
+        SvUTF8_on(utf8);
+        av_push(av, utf8);
+
+        av_push(av, newSVuv(len));
+        RETVAL = av;
+    OUTPUT:
+        RETVAL
 
-ok(  Devel::PPPort::test_isWORDCHAR_A(ord("2")));
-ok(! Devel::PPPort::test_isWORDCHAR_A(0xFC));
+AV *
+toUPPER_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    PREINIT:
+        U8 u[UTF8_MAXBYTES+1];
+        Size_t len;
+        UV ret;
+        SV* utf8;
+        AV * av;
+    CODE:
+        av = newAV();
+        ret = toUPPER_utf8_safe(s, s + UTF8SKIP(s) + offset, u, &len);
+        av_push(av, newSVuv(ret));
+
+        utf8 = newSVpvn((char *) u, len);
+        SvUTF8_on(utf8);
+        av_push(av, utf8);
+
+        av_push(av, newSVuv(len));
+        RETVAL = av;
+    OUTPUT:
+        RETVAL
 
-ok(  Devel::PPPort::test_isALPHANUMERIC(ord("4")));
-ok(! Devel::PPPort::test_isALPHANUMERIC(ord("_")));
+AV *
+toFOLD_utf8_safe(s, offset)
+    unsigned char * s
+    int offset
+    PREINIT:
+        U8 u[UTF8_MAXBYTES+1];
+        Size_t len;
+        UV ret;
+        SV* utf8;
+        AV * av;
+    CODE:
+        av = newAV();
+        ret = toFOLD_utf8_safe(s, s + UTF8SKIP(s) + offset, u, &len);
+        av_push(av, newSVuv(ret));
 
-ok(  Devel::PPPort::test_isALPHANUMERIC_A(ord("l")));
-ok(! Devel::PPPort::test_isALPHANUMERIC_A(0xDC));
+        utf8 = newSVpvn((char *) u, len);
+        SvUTF8_on(utf8);
+        av_push(av, utf8);
 
-ok(  Devel::PPPort::test_isALNUM(ord("c")));
-ok(! Devel::PPPort::test_isALNUM(ord("}")));
+        av_push(av, newSVuv(len));
+        RETVAL = av;
+    OUTPUT:
+        RETVAL
 
-ok(  Devel::PPPort::test_isALNUM_A(ord("5")));
-ok(! Devel::PPPort::test_isALNUM_A(0xFC));
+AV *
+toLOWER_uvchr(c)
+    UV c
+    PREINIT:
+        U8 u[UTF8_MAXBYTES+1];
+        Size_t len;
+        UV ret;
+        SV* utf8;
+        AV * av;
+    CODE:
+        av = newAV();
+        ret = toLOWER_uvchr(c, u, &len);
+        av_push(av, newSVuv(ret));
 
-ok(  Devel::PPPort::test_isDIGIT(ord("6")));
-ok(! Devel::PPPort::test_isDIGIT(ord("_")));
+        utf8 = newSVpvn((char *) u, len);
+        SvUTF8_on(utf8);
+        av_push(av, utf8);
 
-ok(  Devel::PPPort::test_isDIGIT_A(ord("7")));
-ok(! Devel::PPPort::test_isDIGIT_A(0xDC));
+        av_push(av, newSVuv(len));
+        RETVAL = av;
+    OUTPUT:
+        RETVAL
 
-ok(  Devel::PPPort::test_isOCTAL(ord("7")));
-ok(! Devel::PPPort::test_isOCTAL(ord("8")));
+AV *
+toTITLE_uvchr(c)
+    UV c
+    PREINIT:
+        U8 u[UTF8_MAXBYTES+1];
+        Size_t len;
+        UV ret;
+        SV* utf8;
+        AV * av;
+    CODE:
+        av = newAV();
+        ret = toTITLE_uvchr(c, u, &len);
+        av_push(av, newSVuv(ret));
 
-ok(  Devel::PPPort::test_isOCTAL_A(ord("0")));
-ok(! Devel::PPPort::test_isOCTAL_A(ord("9")));
+        utf8 = newSVpvn((char *) u, len);
+        SvUTF8_on(utf8);
+        av_push(av, utf8);
 
-ok(  Devel::PPPort::test_isIDFIRST(ord("D")));
-ok(! Devel::PPPort::test_isIDFIRST(ord("1")));
+        av_push(av, newSVuv(len));
+        RETVAL = av;
+    OUTPUT:
+        RETVAL
 
-ok(  Devel::PPPort::test_isIDFIRST_A(ord("_")));
-ok(! Devel::PPPort::test_isIDFIRST_A(0xFC));
+AV *
+toUPPER_uvchr(c)
+    UV c
+    PREINIT:
+        U8 u[UTF8_MAXBYTES+1];
+        Size_t len;
+        UV ret;
+        SV* utf8;
+        AV * av;
+    CODE:
+        av = newAV();
+        ret = toUPPER_uvchr(c, u, &len);
+        av_push(av, newSVuv(ret));
 
-ok(  Devel::PPPort::test_isIDCONT(ord("e")));
-ok(! Devel::PPPort::test_isIDCONT(ord("@")));
+        utf8 = newSVpvn((char *) u, len);
+        SvUTF8_on(utf8);
+        av_push(av, utf8);
 
-ok(  Devel::PPPort::test_isIDCONT_A(ord("2")));
-ok(! Devel::PPPort::test_isIDCONT_A(0xDC));
+        av_push(av, newSVuv(len));
+        RETVAL = av;
+    OUTPUT:
+        RETVAL
 
-ok(  Devel::PPPort::test_isSPACE(ord(" ")));
-ok(! Devel::PPPort::test_isSPACE(ord("_")));
+AV *
+toFOLD_uvchr(c)
+    UV c
+    PREINIT:
+        U8 u[UTF8_MAXBYTES+1];
+        Size_t len;
+        UV ret;
+        SV* utf8;
+        AV * av;
+    CODE:
+        av = newAV();
+        ret = toFOLD_uvchr(c, u, &len);
+        av_push(av, newSVuv(ret));
 
-ok(  Devel::PPPort::test_isSPACE_A(ord("\cK")));
-ok(! Devel::PPPort::test_isSPACE_A(ord("F")));
+        utf8 = newSVpvn((char *) u, len);
+        SvUTF8_on(utf8);
+        av_push(av, utf8);
 
-# This stresses the edge for ASCII machines, but happens to work on EBCDIC as
-# well
-ok(  Devel::PPPort::test_isASCII(0x7F));
-ok(! Devel::PPPort::test_isASCII(0x80));
+        av_push(av, newSVuv(len));
+        RETVAL = av;
+    OUTPUT:
+        RETVAL
 
-ok(  Devel::PPPort::test_isASCII_A(ord("9")));
+#endif
 
-# B6 is the PARAGRAPH SIGN in ASCII and EBCDIC
-ok(! Devel::PPPort::test_isASCII_A(0xB6));
+UV
+LATIN1_TO_NATIVE(cp)
+        UV cp
+        CODE:
+                if (cp > 255) RETVAL= cp;
+                else RETVAL= LATIN1_TO_NATIVE(cp);
+        OUTPUT:
+                RETVAL
 
-ok(  Devel::PPPort::test_isCNTRL(ord("\e")));
-ok(! Devel::PPPort::test_isCNTRL(ord(" ")));
+UV
+NATIVE_TO_LATIN1(cp)
+        UV cp
+        CODE:
+                RETVAL= NATIVE_TO_LATIN1(cp);
+        OUTPUT:
+                RETVAL
 
-ok(  Devel::PPPort::test_isCNTRL_A(ord("\a")));
-ok(! Devel::PPPort::test_isCNTRL_A(0xB6));
+STRLEN
+av_tindex(av)
+        SV *av
+        CODE:
+                RETVAL = av_tindex((AV*)SvRV(av));
+        OUTPUT:
+                RETVAL
 
-ok(  Devel::PPPort::test_isPRINT(ord(" ")));
-ok(! Devel::PPPort::test_isPRINT(ord("\n")));
+STRLEN
+av_top_index(av)
+        SV *av
+        CODE:
+                RETVAL = av_top_index((AV*)SvRV(av));
+        OUTPUT:
+                RETVAL
 
-ok(  Devel::PPPort::test_isPRINT_A(ord("G")));
-ok(! Devel::PPPort::test_isPRINT_A(0xB6));
+=tests plan => 26826
 
-ok(  Devel::PPPort::test_isGRAPH(ord("h")));
-ok(! Devel::PPPort::test_isGRAPH(ord(" ")));
+use vars qw($my_sv @my_av %my_hv);
 
-ok(  Devel::PPPort::test_isGRAPH_A(ord("i")));
-ok(! Devel::PPPort::test_isGRAPH_A(0xB6));
+ok(&Devel::PPPort::boolSV(1), "Verify boolSV(1) is true");
+ok(!&Devel::PPPort::boolSV(0), "Verify boolSV(0) is false");
 
-ok(  Devel::PPPort::test_isPUNCT(ord("#")));
-ok(! Devel::PPPort::test_isPUNCT(ord(" ")));
+$_ = "Fred";
+is(&Devel::PPPort::DEFSV(), "Fred", '$_ is FRED; Verify DEFSV is FRED');
+is(&Devel::PPPort::UNDERBAR(), "Fred", 'And verify UNDERBAR is FRED');
 
-ok(  Devel::PPPort::test_isPUNCT_A(ord("*")));
-ok(! Devel::PPPort::test_isPUNCT_A(0xB6));
+if (ivers($]) >= ivers(5.9.2) && ivers($]) < ivers(5.23)) {
+  eval q{
+    no warnings "deprecated";
+    no if $^V >= v5.17.9, warnings => "experimental::lexical_topic";
+    my $_ = "Tony";
+    is(&Devel::PPPort::DEFSV(), "Fred", 'lexical_topic eval: $_ is Tony; Verify DEFSV is Fred');
+    is(&Devel::PPPort::UNDERBAR(), "Tony", 'And verify UNDERBAR is Tony');
+  };
+  die __FILE__ . __LINE__ . ": $@" if $@;
+}
+else {
+  skip("perl version outside testing range of lexical_topic", 2);
+}
 
-ok(  Devel::PPPort::test_isXDIGIT(ord("A")));
-ok(! Devel::PPPort::test_isXDIGIT(ord("_")));
+my @r = &Devel::PPPort::DEFSV_modify();
 
-ok(  Devel::PPPort::test_isXDIGIT_A(ord("9")));
-ok(! Devel::PPPort::test_isXDIGIT_A(0xDC));
+ok(@r == 3, "Verify got 3 elements");
+is($r[0], 'Fred');
+is($r[1], 'DEFSV');
+is($r[2], 'Fred');
 
-ok(  Devel::PPPort::test_isPSXSPC(ord(" ")));
-ok(! Devel::PPPort::test_isPSXSPC(ord("k")));
+is(&Devel::PPPort::DEFSV(), "Fred");
 
-ok(  Devel::PPPort::test_isPSXSPC_A(ord("\cK")));
-ok(! Devel::PPPort::test_isPSXSPC_A(0xFC));
+eval { 1 };
+ok(!&Devel::PPPort::ERRSV(), "Verify ERRSV on true is false");
+eval { cannot_call_this_one() };
+ok(&Devel::PPPort::ERRSV(), "Verify ERRSV on false is true");
+
+ok(&Devel::PPPort::gv_stashpvn('Devel::PPPort', 0));
+ok(!&Devel::PPPort::gv_stashpvn('does::not::exist', 0));
+ok(&Devel::PPPort::gv_stashpvn('does::not::exist', 1));
+
+$my_sv = 1;
+ok(&Devel::PPPort::get_sv('my_sv', 0));
+ok(!&Devel::PPPort::get_sv('not_my_sv', 0));
+ok(&Devel::PPPort::get_sv('not_my_sv', 1));
+
+@my_av = (1);
+ok(&Devel::PPPort::get_av('my_av', 0));
+ok(!&Devel::PPPort::get_av('not_my_av', 0));
+ok(&Devel::PPPort::get_av('not_my_av', 1));
+
+%my_hv = (a=>1);
+ok(&Devel::PPPort::get_hv('my_hv', 0));
+ok(!&Devel::PPPort::get_hv('not_my_hv', 0));
+ok(&Devel::PPPort::get_hv('not_my_hv', 1));
+
+sub my_cv { 1 };
+ok(&Devel::PPPort::get_cv('my_cv', 0));
+ok(!&Devel::PPPort::get_cv('not_my_cv', 0));
+ok(&Devel::PPPort::get_cv('not_my_cv', 1));
+
+is(Devel::PPPort::dXSTARG(42), 43);
+is(Devel::PPPort::dAXMARK(4711), 4710);
+
+is(Devel::PPPort::prepush(), 42);
+
+is(join(':', Devel::PPPort::xsreturn(0)), 'test1');
+is(join(':', Devel::PPPort::xsreturn(1)), 'test1:test2');
+
+is(Devel::PPPort::PERL_ABS(42), 42, "Verify PERL_ABS(42) is 42");
+is(Devel::PPPort::PERL_ABS(-13), 13, "Verify PERL_ABS(-13) is 13");
+
+is(Devel::PPPort::SVf(42), ivers($]) >= ivers(5.4) ? '[42]' : '42');
+is(Devel::PPPort::SVf('abc'), ivers($]) >= ivers(5.4) ? '[abc]' : 'abc');
+
+is(&Devel::PPPort::Perl_ppaddr_t("FOO"), "foo");
+
+is(&Devel::PPPort::ptrtests(), 63);
+
+is(&Devel::PPPort::OpSIBLING_tests(), 0);
+
+if (ivers($]) >= ivers(5.9)) {
+  eval q{
+    is(&Devel::PPPort::check_HeUTF8("hello"), "norm");
+    is(&Devel::PPPort::check_HeUTF8("\N{U+263a}"), "utf8");
+  };
+} else {
+  skip("Too early perl version", 2);
+}
+
+@r = &Devel::PPPort::check_c_array();
+is($r[0], 4);
+is($r[1], "13");
+
+ok(!Devel::PPPort::SvRXOK(""));
+ok(!Devel::PPPort::SvRXOK(bless [], "Regexp"));
+
+if (ivers($]) < ivers(5.5)) {
+        skip 'no qr// objects in this perl', 2;
+} else {
+        my $qr = eval 'qr/./';
+        ok(Devel::PPPort::SvRXOK($qr), "SVRXOK(qr) is true");
+        ok(Devel::PPPort::SvRXOK(bless $qr, "Surprise"));
+}
+
+ok( Devel::PPPort::NATIVE_TO_LATIN1(0xB6) == 0xB6);
+ok( Devel::PPPort::NATIVE_TO_LATIN1(0x1) == 0x1);
+ok( Devel::PPPort::NATIVE_TO_LATIN1(ord("A")) == 0x41);
+ok( Devel::PPPort::NATIVE_TO_LATIN1(ord("0")) == 0x30);
+
+ok( Devel::PPPort::LATIN1_TO_NATIVE(0xB6) == 0xB6, "Verify LATIN1_TO_NATIVE(0xB6) is 0xB6");
+if (ord("A") == 65) {
+    ok( Devel::PPPort::LATIN1_TO_NATIVE(0x41) == 0x41);
+    ok( Devel::PPPort::LATIN1_TO_NATIVE(0x30) == 0x30);
+}
+else {
+    ok( Devel::PPPort::LATIN1_TO_NATIVE(0x41) == 0xC1);
+    ok( Devel::PPPort::LATIN1_TO_NATIVE(0x30) == 0xF0);
+}
+
+ok(  Devel::PPPort::isALNUMC_L1(ord("5")));
+ok(  Devel::PPPort::isALNUMC_L1(0xFC));
+ok(! Devel::PPPort::isALNUMC_L1(0xB6));
+
+ok(  Devel::PPPort::isOCTAL(ord("7")), "Verify '7' is OCTAL");
+ok(! Devel::PPPort::isOCTAL(ord("8")), "Verify '8' isn't OCTAL");
+
+ok(  Devel::PPPort::isOCTAL_A(ord("0")), "Verify '0' is OCTAL_A");
+ok(! Devel::PPPort::isOCTAL_A(ord("9")), "Verify '9' isn't OCTAL_A");
+
+ok(  Devel::PPPort::isOCTAL_L1(ord("2")), "Verify '2' is OCTAL_L1");
+ok(! Devel::PPPort::isOCTAL_L1(ord("8")), "Verify '8' isn't OCTAL_L1");
+
+my $way_too_early_msg = 'UTF-8 not implemented on this perl';
+
+# For the other properties, we test every code point from 0.255, and a
+# smattering of higher ones.  First populate a hash with keys like '65:ALPHA'
+# to indicate that the code point there is alphabetic
+my $i;
+my %types;
+for $i (0x41..0x5A, 0x61..0x7A, 0xAA, 0xB5, 0xBA, 0xC0..0xD6, 0xD8..0xF6,
+        0xF8..0x101)
+{
+    my $native = Devel::PPPort::LATIN1_TO_NATIVE($i);
+    $types{"$native:ALPHA"} = 1;
+    $types{"$native:ALPHANUMERIC"} = 1;
+    $types{"$native:IDFIRST"} = 1;
+    $types{"$native:IDCONT"} = 1;
+    $types{"$native:PRINT"} = 1;
+    $types{"$native:WORDCHAR"} = 1;
+}
+for $i (0x30..0x39, 0x660, 0xFF19) {
+    my $native = Devel::PPPort::LATIN1_TO_NATIVE($i);
+    $types{"$native:ALPHANUMERIC"} = 1;
+    $types{"$native:DIGIT"} = 1;
+    $types{"$native:IDCONT"} = 1;
+    $types{"$native:WORDCHAR"} = 1;
+    $types{"$native:GRAPH"} = 1;
+    $types{"$native:PRINT"} = 1;
+    $types{"$native:XDIGIT"} = 1 if $i < 255 || ($i >= 0xFF10 && $i <= 0xFF19);
+}
+
+for $i (0..0x7F) {
+    my $native = Devel::PPPort::LATIN1_TO_NATIVE($i);
+    $types{"$native:ASCII"} = 1;
+}
+for $i (0..0x1f, 0x7F..0x9F) {
+    my $native = Devel::PPPort::LATIN1_TO_NATIVE($i);
+    $types{"$native:CNTRL"} = 1;
+}
+for $i (0x21..0x7E, 0xA1..0x101, 0x660) {
+    my $native = Devel::PPPort::LATIN1_TO_NATIVE($i);
+    $types{"$native:GRAPH"} = 1;
+    $types{"$native:PRINT"} = 1;
+}
+for $i (0x09, 0x20, 0xA0) {
+    my $native = Devel::PPPort::LATIN1_TO_NATIVE($i);
+    $types{"$native:BLANK"} = 1;
+    $types{"$native:SPACE"} = 1;
+    $types{"$native:PSXSPC"} = 1;
+    $types{"$native:PRINT"} = 1 if $i > 0x09;
+}
+for $i (0x09..0x0D, 0x85, 0x2029) {
+    my $native = Devel::PPPort::LATIN1_TO_NATIVE($i);
+    $types{"$native:SPACE"} = 1;
+    $types{"$native:PSXSPC"} = 1;
+}
+for $i (0x41..0x5A, 0xC0..0xD6, 0xD8..0xDE, 0x100) {
+    my $native = Devel::PPPort::LATIN1_TO_NATIVE($i);
+    $types{"$native:UPPER"} = 1;
+    $types{"$native:XDIGIT"} = 1 if $i < 0x47;
+}
+for $i (0x61..0x7A, 0xAA, 0xB5, 0xBA, 0xDF..0xF6, 0xF8..0xFF, 0x101) {
+    my $native = Devel::PPPort::LATIN1_TO_NATIVE($i);
+    $types{"$native:LOWER"} = 1;
+    $types{"$native:XDIGIT"} = 1 if $i < 0x67;
+}
+for $i (0x21..0x2F, 0x3A..0x40, 0x5B..0x60, 0x7B..0x7E, 0xB6, 0xA1, 0xA7, 0xAB,
+        0xB7, 0xBB, 0xBF, 0x5BE)
+{
+    my $native = Devel::PPPort::LATIN1_TO_NATIVE($i);
+    $types{"$native:PUNCT"} = 1;
+    $types{"$native:GRAPH"} = 1;
+    $types{"$native:PRINT"} = 1;
+}
+
+$i = ord('_');
+$types{"$i:WORDCHAR"} = 1;
+$types{"$i:IDFIRST"} = 1;
+$types{"$i:IDCONT"} = 1;
+
+# Now find all the unique code points included above.
+my %code_points_to_test;
+my $key;
+for $key (keys %types) {
+    $key =~ s/:.*//;
+    $code_points_to_test{$key} = 1;
+}
+
+# And test each one
+for $i (sort { $a <=> $b } keys %code_points_to_test) {
+    my $native = Devel::PPPort::LATIN1_TO_NATIVE($i);
+    my $hex = sprintf("0x%02X", $native);
+
+    # And for each code point test each of the classes
+    my $class;
+    for $class (qw(ALPHA ALPHANUMERIC ASCII BLANK CNTRL DIGIT GRAPH IDCONT
+                   IDFIRST LOWER PRINT PSXSPC PUNCT SPACE UPPER WORDCHAR
+                   XDIGIT))
+    {
+        if ($i < 256) {  # For the ones that can fit in a byte, test each of
+                         # three macros.
+            my $suffix;
+            for $suffix ("", "_A", "_L1", "_uvchr") {
+                my $should_be = ($i > 0x7F && $suffix !~ /_(uvchr|L1)/)
+                                ? 0     # Fail on non-ASCII unless unicode
+                                : ($types{"$native:$class"} || 0);
+                if (ivers($]) < ivers(5.6) && $suffix eq '_uvchr') {
+                    skip("No UTF-8 on this perl", 1);
+                    next;
+                }
+
+                my $eval_string = "Devel::PPPort::is${class}$suffix($hex)";
+                local $SIG{__WARN__} = sub {};
+                my $is = eval $eval_string || 0;
+                die "eval 'For $i: $eval_string' gave $@" if $@;
+                is($is, $should_be, "'$eval_string'");
+            }
+        }
+
+        # For all code points, test the '_utf8' macros
+        my $sub_fcn;
+        for $sub_fcn ("", "_LC") {
+            my $skip = "";
+            if (ivers($]) < ivers(5.6)) {
+                $skip = $way_too_early_msg;
+            }
+            elsif (ivers($]) < ivers(5.7) && $native > 255) {
+                $skip = "Perls earlier than 5.7 give wrong answers for above Latin1 code points";
+            }
+            elsif (ivers($]) <= ivers(5.11.3) && $native == 0x2029 && ($class eq 'PRINT' || $class eq 'GRAPH')) {
+                $skip = "Perls earlier than 5.11.3 considered high space characters as isPRINT and isGRAPH";
+            }
+            elsif ($sub_fcn eq '_LC' && $i < 256) {
+                $skip = "Testing of code points whose results depend on locale is skipped ";
+            }
+            my $fcn = "Devel::PPPort::is${class}${sub_fcn}_utf8_safe";
+            my $utf8;
+
+            if ($skip) {
+                skip $skip, 1;
+            }
+            else {
+                $utf8 = quotemeta Devel::PPPort::uvchr_to_utf8($native);
+                my $should_be = $types{"$native:$class"} || 0;
+                my $eval_string = "$fcn(\"$utf8\", 0)";
+                local $SIG{__WARN__} = sub {};
+                my $is = eval $eval_string || 0;
+                die "eval 'For $i, $eval_string' gave $@" if $@;
+                is($is, $should_be, sprintf("For U+%04X '%s'", $native, $eval_string));
+            }
+
+            # And for the high code points, test that a too short malformation (the
+            # -1) causes it to fail
+            if ($i > 255) {
+                if ($skip) {
+                    skip $skip, 1;
+                }
+                elsif (ivers($]) >= ivers(5.25.9)) {
+                    skip("Prints an annoying error message that khw doesn't know how to easily suppress", 1);
+                }
+                else {
+                    my $eval_string = "$fcn(\"$utf8\", -1)";
+                    local $SIG{__WARN__} = sub {};
+                    my $is = eval "$eval_string" || 0;
+                    die "eval '$eval_string' gave $@" if $@;
+                    is($is, 0, sprintf("For U+%04X '%s'", $native, $eval_string));
+                }
+            }
+        }
+    }
+}
+
+my %case_changing = ( 'LOWER' => [ [ ord('A'), ord('a') ],
+                                   [ Devel::PPPort::LATIN1_TO_NATIVE(0xC0),
+                                     Devel::PPPort::LATIN1_TO_NATIVE(0xE0) ],
+                                   [ 0x100, 0x101 ],
+                                 ],
+                      'FOLD'  => [ [ ord('C'), ord('c') ],
+                                   [ Devel::PPPort::LATIN1_TO_NATIVE(0xC0),
+                                     Devel::PPPort::LATIN1_TO_NATIVE(0xE0) ],
+                                   [ 0x104, 0x105 ],
+                                   [ Devel::PPPort::LATIN1_TO_NATIVE(0xDF),
+                                     'ss' ],
+                                 ],
+                      'UPPER' => [ [ ord('a'), ord('A'),  ],
+                                   [ Devel::PPPort::LATIN1_TO_NATIVE(0xE0),
+                                     Devel::PPPort::LATIN1_TO_NATIVE(0xC0) ],
+                                   [ 0x101, 0x100 ],
+                                   [ Devel::PPPort::LATIN1_TO_NATIVE(0xDF),
+                                     'SS' ],
+                                 ],
+                      'TITLE' => [ [ ord('c'), ord('C'),  ],
+                                   [ Devel::PPPort::LATIN1_TO_NATIVE(0xE2),
+                                     Devel::PPPort::LATIN1_TO_NATIVE(0xC2) ],
+                                   [ 0x103, 0x102 ],
+                                   [ Devel::PPPort::LATIN1_TO_NATIVE(0xDF),
+                                     'Ss' ],
+                                 ],
+                    );
+
+my $name;
+for $name (keys %case_changing) {
+    my @code_points_to_test = @{$case_changing{$name}};
+    my $unchanged;
+    for $unchanged (@code_points_to_test) {
+        my @pair = @$unchanged;
+        my $original = $pair[0];
+        my $changed = $pair[1];
+        my $utf8_changed = $changed;
+        my $is_cp = $utf8_changed =~ /^\d+$/;
+        my $should_be_bytes;
+        if (ivers($]) >= ivers(5.6)) {
+            if ($is_cp) {
+                $utf8_changed = Devel::PPPort::uvchr_to_utf8($changed);
+                $should_be_bytes = Devel::PPPort::UTF8_SAFE_SKIP($utf8_changed, 0);
+            }
+            else {
+                die("Test currently doesn't work for non-ASCII multi-char case changes") if eval '$utf8_changed =~ /[[:^ascii:]]/';
+                $should_be_bytes = length $utf8_changed;
+            }
+        }
+
+        my $fcn = "to${name}_uvchr";
+        my $skip = "";
+
+        if (ivers($]) < ivers(5.6)) {
+            $skip = $way_too_early_msg;
+        }
+        elsif (! $is_cp) {
+            $skip = "Can't do uvchr on a multi-char string";
+        }
+        if ($skip) {
+            skip $skip, 4;
+        }
+        else {
+            if ($is_cp) {
+                $utf8_changed = Devel::PPPort::uvchr_to_utf8($changed);
+                $should_be_bytes = Devel::PPPort::UTF8_SAFE_SKIP($utf8_changed, 0);
+            }
+            else {
+                my $non_ascii_re = (ivers($]) >= ivers(5.6)) ? '[[:^ascii:]]' : '[^\x00-\x7F]';
+                die("Test currently doesn't work for non-ASCII multi-char case changes") if eval '$utf8_changed =~ /$non_ascii_re/';
+                $should_be_bytes = length $utf8_changed;
+            }
+
+            my $ret = eval "Devel::PPPort::$fcn($original)";
+            my $fail = $@;  # Have to save $@, as it gets destroyed
+            is ($fail, "", "$fcn($original) didn't fail");
+            my $first = (ivers($]) != ivers(5.6))
+                        ? substr($utf8_changed, 0, 1)
+                        : $utf8_changed, 0, 1;
+            is($ret->[0], ord $first,
+               "ord of $fcn($original) is $changed");
+            is($ret->[1], $utf8_changed,
+               "UTF-8 of of $fcn($original) is correct");
+            is($ret->[2], $should_be_bytes,
+               "Length of $fcn($original) is $should_be_bytes");
+        }
+
+        my $truncate;
+        for $truncate (0..2) {
+            my $skip;
+            if (ivers($]) < ivers(5.6)) {
+                $skip = $way_too_early_msg;
+            }
+            elsif (! $is_cp && ivers($]) < ivers(5.7.3)) {
+                $skip = "Multi-character case change not implemented until 5.7.3";
+            }
+            elsif ($truncate == 2 && ivers($]) > ivers(5.25.8)) {
+                $skip = "Zero length inputs cause assertion failure; test dies in modern perls";
+            }
+            elsif ($truncate > 0 && length $changed > 1) {
+                $skip = "Don't test shortened multi-char case changes";
+            }
+            elsif ($truncate > 0 && Devel::PPPort::UVCHR_IS_INVARIANT($original)) {
+                $skip = "Don't try to test shortened single bytes";
+            }
+            if ($skip) {
+                skip $skip, 4;
+            }
+            else {
+                my $fcn = "to${name}_utf8_safe";
+                my $utf8 = quotemeta Devel::PPPort::uvchr_to_utf8($original);
+                my $real_truncate = ($truncate < 2)
+                                    ? $truncate : $should_be_bytes;
+                my $eval_string = "Devel::PPPort::$fcn(\"$utf8\", $real_truncate)";
+                my $ret = eval "no warnings; $eval_string" || 0;
+                my $fail = $@;  # Have to save $@, as it gets destroyed
+                if ($truncate == 0) {
+                    is ($fail, "", "Didn't fail on full length input");
+                    my $first = (ivers($]) != ivers(5.6))
+                                ? substr($utf8_changed, 0, 1)
+                                : $utf8_changed, 0, 1;
+                    is($ret->[0], ord $first,
+                       "ord of $fcn($original) is $changed");
+                    is($ret->[1], $utf8_changed,
+                       "UTF-8 of of $fcn($original) is correct");
+                    is($ret->[2], $should_be_bytes,
+                    "Length of $fcn($original) is $should_be_bytes");
+                }
+                else {
+                    is ($fail, eval 'qr/Malformed UTF-8 character/',
+                        "Gave appropriate error for short char: $original");
+                    skip("Expected failure means remaining tests for"
+                       . " this aren't relevant", 3);
+                }
+            }
+        }
+    }
+}
 
-ok(&Devel::PPPort::av_top_index([1,2,3]), 2);
-ok(&Devel::PPPort::av_tindex([1,2,3,4]), 3);
+is(&Devel::PPPort::av_top_index([1,2,3]), 2);
+is(&Devel::PPPort::av_tindex([1,2,3,4]), 3);
index 336a8e0..fe0a6ce 100644 (file)
 
 newCONSTSUB
 
+=dontwarn
+
+NEED_newCONSTSUB    /* Because we define this weirdly */
+
 =implementation
 
 /* Hint: newCONSTSUB
@@ -22,6 +26,11 @@ newCONSTSUB
 
 /* newCONSTSUB from IO.xs is in the core starting with 5.004_63 */
 #if { VERSION < 5.004_63 } && { VERSION != 5.004_05 }
+
+/* And before that, we need to make sure this gets compiled for the functions
+ * that rely on it */
+#define NEED_newCONSTSUB
+
 #if { NEED newCONSTSUB }
 
 /* This is just a trick to avoid a dependency of newCONSTSUB on PL_parser */
@@ -43,13 +52,7 @@ newCONSTSUB(HV *stash, const char *name, SV *sv)
 
         newSUB(
 
-#if   { VERSION <  5.003_22 }
-                start_subparse(),
-#elif { VERSION == 5.003_22 }
-                start_subparse(0),
-#else  /* 5.003_23  onwards */
                 start_subparse(FALSE, 0),
-#endif
 
                 newSVOP(OP_CONST, 0, newSVpv((char *) name, 0)),
                 newSVOP(OP_CONST, 0, &PL_sv_no),   /* SvPV(&PL_sv_no) == "" -- GMB */
@@ -95,10 +98,10 @@ call_newCONSTSUB_3()
 =tests plan => 3
 
 &Devel::PPPort::call_newCONSTSUB_1();
-ok(&Devel::PPPort::test_value_1(), 1);
+is(&Devel::PPPort::test_value_1(), 1);
 
 &Devel::PPPort::call_newCONSTSUB_2();
-ok(&Devel::PPPort::test_value_2(), 2);
+is(&Devel::PPPort::test_value_2(), 2);
 
 &Devel::PPPort::call_newCONSTSUB_3();
-ok(&Devel::PPPort::test_value_3(), 3);
+is(&Devel::PPPort::test_value_3(), 3);
index 6db6dfc..6be9ca5 100644 (file)
@@ -19,21 +19,13 @@ newRV_noinc
 __UNDEFINED__  newRV_inc(sv)  newRV(sv)   /* Replace */
 
 #ifndef newRV_noinc
-#if { NEED newRV_noinc }
-SV *
-newRV_noinc(SV *sv)
-{
-  SV *rv = (SV *)newRV(sv);
-  SvREFCNT_dec(sv);
-  return rv;
-}
+#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
+#  define newRV_noinc(sv) ({ SV *_sv = (SV *)newRV((sv)); SvREFCNT_dec((sv)); _sv; })
+#else
+#  define newRV_noinc(sv) ((PL_Sv = (SV *)newRV((sv))), SvREFCNT_dec((sv)), PL_Sv)
 #endif
 #endif
 
-=xsinit
-
-#define NEED_newRV_noinc
-
 =xsubs
 
 U32
@@ -63,5 +55,5 @@ newRV_noinc_REFCNT()
 
 =tests plan => 2
 
-ok(&Devel::PPPort::newRV_inc_REFCNT, 1);
-ok(&Devel::PPPort::newRV_noinc_REFCNT, 1);
+is(&Devel::PPPort::newRV_inc_REFCNT, 1);
+is(&Devel::PPPort::newRV_noinc_REFCNT, 1);
index 039f801..4b17419 100644 (file)
@@ -16,25 +16,13 @@ newSV_type
 =implementation
 
 #ifndef newSV_type
-
-#if { NEED newSV_type }
-
-SV*
-newSV_type(pTHX_ svtype const t)
-{
-  SV* const sv = newSV(0);
-  sv_upgrade(sv, t);
-  return sv;
-}
-
+#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
+#  define newSV_type(t) ({ SV *_sv = newSV(0); sv_upgrade(_sv, (t)); _sv; })
+#else
+#  define newSV_type(t) ((PL_Sv = newSV(0)), sv_upgrade(PL_Sv, (t)), PL_Sv)
 #endif
-
 #endif
 
-=xsinit
-
-#define NEED_newSV_type
-
 =xsubs
 
 int
@@ -76,4 +64,4 @@ newSV_type()
 
 =tests plan => 1
 
-ok(Devel::PPPort::newSV_type(), 4);
+is(Devel::PPPort::newSV_type(), 4);
index 7dbe5d0..22e2fb6 100644 (file)
@@ -31,25 +31,13 @@ __UNDEFINED__  newSVpvn_utf8(s, len, u)  newSVpvn_flags((s), (len), (u) ? SVf_UT
 __UNDEFINED__  SVf_UTF8  0
 
 #ifndef newSVpvn_flags
-
-#if { NEED newSVpvn_flags }
-
-SV *
-newSVpvn_flags(pTHX_ const char *s, STRLEN len, U32 flags)
-{
-  SV *sv = newSVpvn(D_PPP_CONSTPV_ARG(s), len);
-  SvFLAGS(sv) |= (flags & SVf_UTF8);
-  return (flags & SVs_TEMP) ? sv_2mortal(sv) : sv;
-}
-
+#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
+# define newSVpvn_flags(s, len, flags) ({ SV *_sv = newSVpvn(D_PPP_CONSTPV_ARG((s)), (len)); SvFLAGS(_sv) |= ((flags) & SVf_UTF8); ((flags) & SVs_TEMP) ? sv_2mortal(_sv) : _sv; })
+#else
+# define newSVpvn_flags(s, len, flags) ((PL_Sv = newSVpvn(D_PPP_CONSTPV_ARG((s)), (len))), SvFLAGS(PL_Sv) |= ((flags) & SVf_UTF8), (((flags) & SVs_TEMP) ? sv_2mortal(PL_Sv) : PL_Sv))
 #endif
-
 #endif
 
-=xsinit
-
-#define NEED_newSVpvn_flags
-
 =xsubs
 
 void
@@ -82,28 +70,28 @@ newSVpvn_utf8()
 
 my @s = &Devel::PPPort::newSVpvn();
 ok(@s == 5);
-ok($s[0], "test");
-ok($s[1], "te");
-ok($s[2], "");
+is($s[0], "test");
+is($s[1], "te");
+is($s[2], "");
 ok(!defined($s[3]));
 ok(!defined($s[4]));
 
 @s = &Devel::PPPort::newSVpvn_flags();
 ok(@s == 5);
-ok($s[0], "test");
-ok($s[1], "te");
-ok($s[2], "");
+is($s[0], "test");
+is($s[1], "te");
+is($s[2], "");
 ok(!defined($s[3]));
 ok(!defined($s[4]));
 
 @s = &Devel::PPPort::newSVpvn_utf8();
 ok(@s == 1);
-ok($s[0], "test");
+is($s[0], "test");
 
 if ("$]" >= 5.008001) {
   require utf8;
   ok(utf8::is_utf8($s[0]));
 }
 else {
-  skip("skip: no is_utf8()", 0);
+  skip("skip: no is_utf8()", 1);
 }
index d7255b9..df18c3a 100644 (file)
@@ -22,11 +22,11 @@ else {
   # Try loading Test::Pod
   eval q{
     use Test::Pod;
-    $Test::Pod::VERSION >= 0.95
+    $Test::Pod::VERSION >= 1.41
         or die "Test::Pod version only $Test::Pod::VERSION";
     import Test::Pod tests => scalar @pods;
   };
-  $reason = 'Test::Pod >= 0.95 required' if $@;
+  $reason = 'Test::Pod >= 1.41 required' if $@;
 }
 
 if ($reason) {
@@ -37,7 +37,7 @@ if ($reason) {
 for (@pods) {
   print "# checking $_\n";
   if ($reason) {
-    skip("skip: $reason", 0);
+    skip("skip: $reason", 1);
   }
   else {
     pod_file_ok($_);
index 9b56eaf..975e3f6 100644 (file)
@@ -15,6 +15,8 @@
 
 use strict;
 
+BEGIN { require warnings if "$]" > '5.006' }
+
 # Disable broken TRIE-optimization
 BEGIN { eval '${^RE_TRIE_MAXBUF} = -1' if "$]" >= 5.009004 && "$]" <= 5.009005 }
 
@@ -63,26 +65,31 @@ if ($opt{version}) {
 usage() if $opt{help};
 strip() if $opt{strip};
 
-if (exists $opt{'compat-version'}) {
-  my($r,$v,$s) = eval { parse_version($opt{'compat-version'}) };
-  if ($@) {
-    die "Invalid version number format: '$opt{'compat-version'}'\n";
-  }
-  die "Only Perl 5 is supported\n" if $r != 5;
-  die "Invalid version number: $opt{'compat-version'}\n" if $v >= 1000 || $s >= 1000;
-  $opt{'compat-version'} = sprintf "%d.%03d%03d", $r, $v, $s;
-}
-else {
-  $opt{'compat-version'} = 5;
-}
+$opt{'compat-version'} = __MIN_PERL__ unless exists $opt{'compat-version'};
+$opt{'compat-version'} = int_parse_version($opt{'compat-version'});
+
+my $int_min_perl = int_parse_version(__MIN_PERL__);
 
+# Each element of this hash looks something like:
+# 'Poison' => {
+#                         'base' => '5.008000',
+#                         'provided' => 1,
+#                         'todo' => '5.003007'
+#             },
 my %API = map { /^(\w+)\|([^|]*)\|([^|]*)\|(\w*)$/
                 ? ( $1 => {
                       ($2                  ? ( base     => $2 ) : ()),
                       ($3                  ? ( todo     => $3 ) : ()),
                       (index($4, 'v') >= 0 ? ( varargs  => 1  ) : ()),
                       (index($4, 'p') >= 0 ? ( provided => 1  ) : ()),
-                      (index($4, 'n') >= 0 ? ( nothxarg => 1  ) : ()),
+                      (index($4, 'n') >= 0 ? ( noTHXarg => 1  ) : ()),
+                      (index($4, 'c') >= 0 ? ( core_only    => 1  ) : ()),
+                      (index($4, 'd') >= 0 ? ( deprecated   => 1  ) : ()),
+                      (index($4, 'i') >= 0 ? ( inaccessible => 1  ) : ()),
+                      (index($4, 'x') >= 0 ? ( experimental => 1  ) : ()),
+                      (index($4, 'u') >= 0 ? ( undocumented => 1  ) : ()),
+                      (index($4, 'o') >= 0 ? ( ppport_fnc => 1  ) : ()),
+                      (index($4, 'V') >= 0 ? ( unverified => 1  ) : ()),
                     } )
                 : die "invalid spec: $_" } qw(
 __PERL_API__
@@ -90,14 +97,19 @@ __PERL_API__
 
 if (exists $opt{'list-unsupported'}) {
   my $f;
-  for $f (sort { lc $a cmp lc $b } keys %API) {
+  for $f (sort dictionary_order keys %API) {
+    next if $API{$f}{core_only};
+    next if $API{$f}{beyond_depr};
+    next if $API{$f}{inaccessible};
+    next if $API{$f}{experimental};
     next unless $API{$f}{todo};
+    next if int_parse_version($API{$f}{todo}) <= $int_min_perl;
     print "$f ", '.'x(40-length($f)), " ", format_version($API{$f}{todo}), "\n";
   }
   exit 0;
 }
 
-# Scan for possible replacement candidates
+# Scan for hints, possible replacement candidates, etc.
 
 my(%replace, %need, %hints, %warnings, %depends);
 my $replace = 0;
@@ -105,6 +117,7 @@ my($hint, $define, $function);
 
 sub find_api
 {
+  BEGIN { 'warnings'->unimport('uninitialized') if "$]" > '5.006' }
   my $code = shift;
   $code =~ s{
     / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]*)
@@ -115,24 +128,65 @@ sub find_api
 
 while (<DATA>) {
   if ($hint) {
+
+    # Here, we are in the middle of accumulating a hint or warning.
+    my $end_of_hint = 0;
+
+    # A line containing a comment end marker closes the hint.  Remove that
+    # marker for processing below.
+    if (s/\s*$rcce(.*?)\s*$//) {
+        die "Nothing can follow the end of comment in '$_'\n" if length $1 > 0;
+        $end_of_hint = 1;
+    }
+
+    # Set $h to the hash of which type.
     my $h = $hint->[0] eq 'Hint' ? \%hints : \%warnings;
-    if (m{^\s*\*\s(.*?)\s*$}) {
-      for (@{$hint->[1]}) {
-        $h->{$_} ||= '';  # suppress warning with older perls
-        $h->{$_} .= "$1\n";
-      }
+
+    # Ignore any leading and trailing white space, and an optional star comment
+    # continuation marker, then place the meat of the line into $1
+    m/^\s*(?:\*\s*)?(.*?)\s*$/;
+
+    # Add the meat of this line to the hash value of each API element it
+    # applies to
+    for (@{$hint->[1]}) {
+      $h->{$_} ||= '';  # avoid the warning older perls generate
+      $h->{$_} .= "$1\n";
     }
-    else { undef $hint }
-  }
 
-  $hint = [$1, [split /,?\s+/, $2]]
-      if m{^\s*$rccs\s+(Hint|Warning):\s+(\w+(?:,?\s+\w+)*)\s*$};
+    # If the line had a comment close, we are through with this hint
+    undef $hint if $end_of_hint;
+
+    next;
+  }
 
-  if ($define) {
+  # Set up $hint if this is the beginning of a Hint: or Warning:
+  # These are from a multi-line C comment in the file, with the first line
+  # looking like (a space has been inserted because this file can't have C
+  # comment markers in it):
+  #   / * Warning: PL_expect, PL_copline, PL_rsfp
+  #
+  # $hint becomes
+  #     [
+  #      'Warning',
+  #                [
+  #                  'PL_expect',
+  #                  'PL_copline',
+  #                  'PL_rsfp',
+  #                ],
+  #     ]
+  if (m{^\s*$rccs\s+(Hint|Warning):\s+(\w+(?:,?\s+\w+)*)\s*$}) {
+      $hint = [$1, [split /,?\s+/, $2]];
+      next;
+  }
+
+  if ($define) { # If in the middle of a definition...
+
+    # append a continuation line ending with backslash.
     if ($define->[1] =~ /\\$/) {
       $define->[1] .= $_;
     }
-    else {
+    else {  # Otherwise this line ends the definition, make foo depend on bar
+            # (and what bar depends on) if its not one of ppp's own constructs
       if (exists $API{$define->[0]} && $define->[1] !~ /^DPPP_\(/) {
         my @n = find_api($define->[1]);
         push @{$depends{$define->[0]}}, @n if @n
@@ -141,6 +195,8 @@ while (<DATA>) {
     }
   }
 
+  # For '#define foo bar' or '#define foo(a,b,c) bar', $define becomes a
+  # reference to [ foo, bar ]
   $define = [$1, $2] if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(.*)};
 
   if ($function) {
@@ -158,11 +214,29 @@ while (<DATA>) {
 
   $function = [$1, ''] if m{^DPPP_\(my_(\w+)\)};
 
+  # Set $replace to the number given for lines that look like
+  # / * Replace: \d+ * /
+  # (blanks added to keep real C comments from appearing in this file)
+  # Thus setting it to 1 starts a region where replacements are automatically
+  # done, and setting it to 0 ends that region.
   $replace     = $1 if m{^\s*$rccs\s+Replace:\s+(\d+)\s+$rcce\s*$};
+
+  # Add bar => foo to %replace  for lines like '#define foo bar in a region
+  # where $replace is non-zero
   $replace{$2} = $1 if $replace and m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+)};
+
+  # Add bar => foo to %replace for lines like '#define foo bar  / * Replace * /
+  # (blanks added to keep real C comments from appearing in this file)
   $replace{$2} = $1 if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+).*$rccs\s+Replace\s+$rcce};
+
+  # Add foo => bar to %replace for lines like / * Replace foo with bar * /
+  # (blanks added to keep real C comments from appearing in this file)
   $replace{$1} = $2 if m{^\s*$rccs\s+Replace (\w+) with (\w+)\s+$rcce\s*$};
 
+  # For lines like / * foo, bar depends on baz, bat * /
+  # create a list of the elements on the rhs, and make that list apply to each
+  # element in the lhs, which becomes a key in \%depends.
+  # (blanks added to keep real C comments from appearing in this file)
   if (m{^\s*$rccs\s+(\w+(\s*,\s*\w+)*)\s+depends\s+on\s+(\w+(\s*,\s*\w+)*)\s+$rcce\s*$}) {
     my @deps = map { s/\s+//g; $_ } split /,/, $3;
     my $d;
@@ -175,43 +249,145 @@ while (<DATA>) {
 }
 
 for (values %depends) {
-  my %s;
-  $_ = [sort grep !$s{$_}++, @$_];
+  my %seen;
+  $_ = [sort dictionary_order grep !$seen{$_}++, @$_];
 }
 
 if (exists $opt{'api-info'}) {
   my $f;
   my $count = 0;
   my $match = $opt{'api-info'} =~ m!^/(.*)/$! ? $1 : "^\Q$opt{'api-info'}\E\$";
-  for $f (sort { lc $a cmp lc $b } keys %API) {
+  for $f (sort dictionary_order keys %API) {
     next unless $f =~ /$match/;
-    print "\n=== $f ===\n\n";
+    print "\n=== $f ===\n";
     my $info = 0;
-    if ($API{$f}{base} || $API{$f}{todo}) {
-      my $base = format_version($API{$f}{base} || $API{$f}{todo});
-      print "Supported at least starting from perl-$base.\n";
-      $info++;
+    my $base;
+    $base = int_parse_version($API{$f}{base}) if $API{$f}{base};
+    my $todo;
+    $todo = int_parse_version($API{$f}{todo}) if $API{$f}{todo};
+
+    # Output information if it is generally publicly usable
+    if ($base && ! $API{$f}{inaccessible} && ! $API{$f}{core_only}) {
+        my $with_or= "";
+        if (    $base <= $int_min_perl
+            || (   (! $API{$f}{provided} && ! $todo)
+                || ($todo && $todo >= $base)))
+        {
+            $with_or= " with or";
+        }
+        print "\nSupported at least since perl-",
+              format_version($base), ",$with_or without $ppport.";
+        if ($API{$f}{unverified}) {
+            print "\nThis information is based on inspection of the source code",
+                  " and has not been\n",
+                  "verified by successful compilation.";
+        }
+        print "\n";
+        $info++;
+     }
+     if ($API{$f}{provided} || $todo) {
+        print "\nThis is only supported by $ppport, and NOT by perl versions going forward.\n" unless $base;
+        if ($todo) {
+            if (! $base || $todo < $base) {
+                my $additionally = "";
+                $additionally .= " additionally" if $base;
+                print "$ppport$additionally provides support at least back to perl-",
+                    format_version($todo),
+                    ".\n";
+            }
+        }
+        elsif (! $base || $base > $int_min_perl) {
+            if (exists $depends{$f}) {
+                my $max = 0;
+                for (@{$depends{$f}}) {
+                    $max = int_parse_version($API{$_}{todo}) if $API{$_}{todo} && $API{$_}{todo} > $max;
+                    # XXX What to assume unspecified values are?  This effectively makes them MIN_PERL
+                }
+                $todo = $max if $max;
+            }
+            print "\n$ppport provides support for this, but ironically, does not",
+                  " currently know,\n",
+                  "for this report, the minimum version it supports for this";
+            if ($API{$f}{undocumented}) {
+                print " and many things\n",
+                      "it provides that are implemented as macros and aren't",
+                      " documented.  You can\n",
+                      "help by submitting a documentation patch";
+            }
+            print ".\n";
+            if ($todo) {
+                if ($todo <= $int_min_perl) {
+                    print "It may very well be supported all the way back to ",
+                          format_version(__MIN_PERL__), ".\n";
+                }
+                else {
+                    print "But given the things $f depends on, it's a good",
+                          " guess that it isn't\n",
+                          "supported prior to ", format_version($todo), ".\n";
+                }
+            }
+        }
     }
     if ($API{$f}{provided}) {
-      my $todo = $API{$f}{todo} ? format_version($API{$f}{todo}) : "__MIN_PERL__";
-      print "Support by $ppport provided back to perl-$todo.\n";
-      print "Support needs to be explicitly requested by NEED_$f.\n" if exists $need{$f};
-      print "Depends on: ", join(', ', @{$depends{$f}}), ".\n" if exists $depends{$f};
+      print "Support needs to be explicitly requested by #define NEED_$f\n",
+            "(or #define NEED_${f}_GLOBAL).\n"              if exists $need{$f};
+      $info++;
+    }
+
+    if ($base || ! $API{$f}{ppport_fnc}) {
+      my $email = "Send email to perl5-porters\@perl.org if you need to have this functionality.\n";
+      if ($API{$f}{inaccessible}) {
+        print "\nThis is not part of the public API, and may not even be accessible to XS code.\n";
+        $info++;
+      }
+      elsif ($API{$f}{core_only}) {
+        print "\nThis is not part of the public API, and should not be used by XS code.\n";
+        $info++;
+      }
+      elsif ($API{$f}{deprecated}) {
+        print "\nThis is deprecated and should not be used.  Convert existing uses.\n";
+        $info++;
+      }
+      elsif ($API{$f}{experimental}) {
+        print "\nThe API for this is unstable and should not be used by XS code.\n", $email;
+        $info++;
+      }
+      elsif ($API{$f}{undocumented}) {
+        print "\nSince this is undocumented, the API should be considered unstable.\n";
+        if ($API{$f}{provided}) {
+            print "Consider bringing this up on the list: perl5-porters\@perl.org.\n";
+        }
+        else {
+            print "It may be that this is not intended for XS use, or it may just be\n",
+                  "that no one has gotten around to documenting it.\n", $email;
+        }
+        $info++;
+      }
+      unless ($info) {
+        print "No portability information available.  Check your spelling; or",
+              " this could be\na bug in Devel::PPPort.  To report an issue:\n",
+              "https://github.com/Dual-Life/Devel-PPPort/issues/new\n";
+      }
+    }
+
+    print "\nDepends on: ", join(', ', @{$depends{$f}}), ".\n"
+                                                         if exists $depends{$f};
+    if (exists $hints{$f} || exists $warnings{$f}) {
       print "\n$hints{$f}" if exists $hints{$f};
       print "\nWARNING:\n$warnings{$f}" if exists $warnings{$f};
       $info++;
     }
-    print "No portability information available.\n" unless $info;
     $count++;
   }
-  $count or print "Found no API matching '$opt{'api-info'}'.";
+
+  $count or print "\nFound no API matching '$opt{'api-info'}'.";
   print "\n";
   exit 0;
 }
 
 if (exists $opt{'list-provided'}) {
   my $f;
-  for $f (sort { lc $a cmp lc $b } keys %API) {
+  for $f (sort dictionary_order keys %API) {
     next unless $API{$f}{provided};
     my @flags;
     push @flags, 'explicit' if exists $need{$f};
@@ -317,7 +493,9 @@ for $filename (@files) {
       $file{uses_Perl}{$func}++ if $c =~ /\bPerl_$func\b/;
       if (exists $API{$func}{provided}) {
         $file{uses_provided}{$func}++;
-        if (!exists $API{$func}{base} || $API{$func}{base} > $opt{'compat-version'}) {
+        if ( ! exists $API{$func}{base}
+            || int_parse_version($API{$func}{base}) > $opt{'compat-version'})
+        {
           $file{uses}{$func}++;
           my @deps = rec_depend($func);
           if (@deps) {
@@ -331,7 +509,9 @@ for $filename (@files) {
           }
         }
       }
-      if (exists $API{$func}{todo} && $API{$func}{todo} > $opt{'compat-version'}) {
+      if (   exists $API{$func}{todo}
+          && int_parse_version($API{$func}{todo}) > $opt{'compat-version'})
+      {
         if ($c =~ /\b$func\b/) {
           $file{uses_todo}{$func}++;
         }
@@ -382,9 +562,9 @@ for $filename (@files) {
   my $c = $file{code};
   my $warnings = 0;
 
-  for $func (sort keys %{$file{uses_Perl}}) {
+  for $func (sort dictionary_order keys %{$file{uses_Perl}}) {
     if ($API{$func}{varargs}) {
-      unless ($API{$func}{nothxarg}) {
+      unless ($API{$func}{noTHXarg}) {
         my $changes = ($c =~ s{\b(Perl_$func\s*\(\s*)(?!aTHX_?)(\)|[^\s)]*\))}
                               { $1 . ($2 eq ')' ? 'aTHX' : 'aTHX_ ') . $2 }ge);
         if ($changes) {
@@ -400,12 +580,12 @@ for $filename (@files) {
     }
   }
 
-  for $func (sort keys %{$file{uses_replace}}) {
+  for $func (sort dictionary_order keys %{$file{uses_replace}}) {
     warning("Uses $func instead of $replace{$func}");
     $file{changes} += ($c =~ s/\b$func\b/$replace{$func}/g);
   }
 
-  for $func (sort keys %{$file{uses_provided}}) {
+  for $func (sort dictionary_order keys %{$file{uses_provided}}) {
     if ($file{uses}{$func}) {
       if (exists $file{uses_deps}{$func}) {
         diag("Uses $func, which depends on ", join(', ', @{$file{uses_deps}{$func}}));
@@ -418,14 +598,15 @@ for $filename (@files) {
   }
 
   unless ($opt{quiet}) {
-    for $func (sort keys %{$file{uses_todo}}) {
+    for $func (sort dictionary_order keys %{$file{uses_todo}}) {
+      next if int_parse_version($API{$func}{todo}) <= $int_min_perl;
       print "*** WARNING: Uses $func, which may not be portable below perl ",
             format_version($API{$func}{todo}), ", even with '$ppport'\n";
       $warnings++;
     }
   }
 
-  for $func (sort keys %{$file{needed_static}}) {
+  for $func (sort dictionary_order keys %{$file{needed_static}}) {
     my $message = '';
     if (not exists $file{uses}{$func}) {
       $message = "No need to define NEED_$func if $func is never used";
@@ -439,7 +620,7 @@ for $filename (@files) {
     }
   }
 
-  for $func (sort keys %{$file{needed_global}}) {
+  for $func (sort dictionary_order keys %{$file{needed_global}}) {
     my $message = '';
     if (not exists $global{uses}{$func}) {
       $message = "No need to define NEED_${func}_GLOBAL if $func is never used";
@@ -463,7 +644,7 @@ for $filename (@files) {
   if ($file{needs_inc_ppport}) {
     my $pp = '';
 
-    for $func (sort keys %{$file{needs}}) {
+    for $func (sort dictionary_order keys %{$file{needs}}) {
       my $type = $file{needs}{$func};
       next if $type eq 'extern';
       my $suffix = $type eq 'global' ? '_GLOBAL' : '';
@@ -660,59 +841,6 @@ sub rec_depend
   grep !$s{$_}++, map { ($_, rec_depend($_, $seen)) } @{$depends{$func}};
 }
 
-sub parse_version
-{
-  my $ver = shift;
-
-  if ($ver =~ /^(\d+)\.(\d+)\.(\d+)$/) {
-    return ($1, $2, $3);
-  }
-  elsif ($ver !~ /^\d+\.[\d_]+$/) {
-    die "cannot parse version '$ver'\n";
-  }
-
-  $ver =~ s/_//g;
-  $ver =~ s/$/000000/;
-
-  my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/;
-
-  $v = int $v;
-  $s = int $s;
-
-  if ($r < 5 || ($r == 5 && $v < 6)) {
-    if ($s % 10) {
-      die "cannot parse version '$ver'\n";
-    }
-  }
-
-  return ($r, $v, $s);
-}
-
-sub format_version
-{
-  my $ver = shift;
-
-  $ver =~ s/$/000000/;
-  my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/;
-
-  $v = int $v;
-  $s = int $s;
-
-  if ($r < 5 || ($r == 5 && $v < 6)) {
-    if ($s % 10) {
-      die "invalid version '$ver'\n";
-    }
-    $s /= 10;
-
-    $ver = sprintf "%d.%03d", $r, $v;
-    $s > 0 and $ver .= sprintf "_%02d", $s;
-
-    return $ver;
-  }
-
-  return sprintf "%d.%d.%d", $r, $v, $s;
-}
-
 sub info
 {
   $opt{quiet} and return;
index 857f39e..57aa6ad 100644 (file)
@@ -290,6 +290,10 @@ to display information for all known API elements.
 
 =head1 BUGS
 
+Some of the suggested edits and/or generated patches may not compile as-is
+without tweaking manually.  This is generally due to the need for an extra
+parameter to be added to the call to prevent buffer overflow.
+
 If this version of F<ppport.h> is causing failure during
 the compilation of this module, please check if newer versions
 of either this module or C<Devel::PPPort> are available on CPAN
index 2be4331..9b13279 100644 (file)
@@ -13,9 +13,7 @@
 
 BEGIN {
   if ($ENV{'SKIP_SLOW_TESTS'}) {
-    for (1 .. 238) {
-      skip("skip: SKIP_SLOW_TESTS", 0);
-    }
+    skip("skip: SKIP_SLOW_TESTS", 238);
     exit 0;
   }
 }
@@ -59,7 +57,7 @@ END {
 ok(&Devel::PPPort::WriteFile("ppport.h"));
 
 # Check GetFileContents()
-ok(-e "ppport.h", 1);
+is(-e "ppport.h", 1);
 
 my $data;
 
@@ -69,8 +67,8 @@ while(<F>) {
 }
 close(F);
 
-ok(Devel::PPPort::GetFileContents("ppport.h"), $data);
-ok(Devel::PPPort::GetFileContents(), $data);
+is(Devel::PPPort::GetFileContents("ppport.h"), $data);
+is(Devel::PPPort::GetFileContents(), $data);
 
 sub comment
 {
@@ -168,7 +166,7 @@ for $t (@tests) {
     $err =~ s/^/# *** /mg;
     print "# *** ERROR ***\n$err\n";
   }
-  ok($@, '');
+  is($@, '');
 
   for (keys %{$t->{files}}) {
     unlink $_ or die "unlink('$_'): $!\n";
@@ -214,8 +212,8 @@ ok($o =~ /^This is.*ppport.*\d+\.\d+(?:_?\d+)?\.$/);
 $o = ppport(qw(--nochanges));
 ok($o =~ /^Scanning.*test\.xs/mi);
 ok($o =~ /Analyzing.*test\.xs/mi);
-ok(matches($o, '^Scanning', 'm'), 1);
-ok(matches($o, 'Analyzing', 'm'), 1);
+is(matches($o, '^Scanning', 'm'), 1);
+is(matches($o, 'Analyzing', 'm'), 1);
 ok($o =~ /Uses Perl_newSViv instead of newSViv/);
 
 $o = ppport(qw(--quiet --nochanges));
@@ -232,7 +230,7 @@ Perl_newSViv();
 my $o = ppport(qw(--copy=a));
 ok($o =~ /^Scanning.*MyExt\.xs/mi);
 ok($o =~ /Analyzing.*MyExt\.xs/mi);
-ok(matches($o, '^Scanning', 'm'), 1);
+is(matches($o, '^Scanning', 'm'), 1);
 ok($o =~ /^Needs to include.*ppport\.h/m);
 ok($o !~ /^Uses grok_bin/m);
 ok($o !~ /^Uses newSVpv/m);
@@ -244,7 +242,7 @@ ok(eq_files('MyExt.xsa', 'MyExt.ra'));
 $o = ppport(qw(--copy=b --cplusplus));
 ok($o =~ /^Scanning.*MyExt\.xs/mi);
 ok($o =~ /Analyzing.*MyExt\.xs/mi);
-ok(matches($o, '^Scanning', 'm'), 1);
+is(matches($o, '^Scanning', 'm'), 1);
 ok($o =~ /^Needs to include.*ppport\.h/m);
 ok($o !~ /^Uses grok_bin/m);
 ok($o !~ /^Uses newSVpv/m);
@@ -350,7 +348,6 @@ ok($o =~ /^\s*$/);
 ---------------------------- file1.xs -----------------------------------------
 
 #define NEED_newCONSTSUB
-#define NEED_sv_2pv_flags
 #define NEED_PL_parser
 #include "ppport.h"
 
@@ -367,7 +364,7 @@ mXPUSHp(foo);
 my $o = ppport(qw(--nochanges));
 ok($o =~ /^Scanning.*FooBar\.xs/mi);
 ok($o =~ /Analyzing.*FooBar\.xs/mi);
-ok(matches($o, '^Scanning', 'm'), 1);
+is(matches($o, '^Scanning', 'm'), 1);
 ok($o !~ /^Looks good/m);
 ok($o =~ /^Uses grok_bin/m);
 
@@ -387,7 +384,7 @@ ok($o =~ /Analyzing.*second\.h/mi);
 ok($o =~ /^Scanning.*sub.*third\.c/mi);
 ok($o =~ /Analyzing.*sub.*third\.c/mi);
 ok($o !~ /^Scanning.*foobar/mi);
-ok(matches($o, '^Scanning', 'm'), 3);
+is(matches($o, '^Scanning', 'm'), 3);
 
 ---------------------------- First.xs -----------------------------------------
 
@@ -423,9 +420,9 @@ for (qw(main.xs mod1.c mod2.c mod3.c mod4.c mod5.c)) {
   ok($o =~ /^Scanning.*\Q$_\E/mi);
   ok($o =~ /Analyzing.*\Q$_\E/i);
 }
-ok(matches($o, '^Scanning', 'm'), 6);
+is(matches($o, '^Scanning', 'm'), 6);
 
-ok(matches($o, '^Writing copy of', 'm'), 5);
+is(matches($o, '^Writing copy of', 'm'), 5);
 ok(!-e "mod5.cf");
 
 for (qw(main.xs mod1.c mod2.c mod3.c mod4.c)) {
@@ -522,7 +519,6 @@ call_pv();
 #define NEED_eval_pv_GLOBAL
 #define NEED_grok_hex
 #define NEED_newCONSTSUB_GLOBAL
-#define NEED_sv_2pv_flags_GLOBAL
 #include "ppport.h"
 
 newCONSTSUB();
@@ -635,7 +631,7 @@ SvPVutf8_force();
 
 my $o = ppport(qw(--nochanges));
 ok($o !~ /potentially required change/);
-ok(matches($o, '^Looks good', 'm'), 2);
+is(matches($o, '^Looks good', 'm'), 2);
 
 ---------------------------- FooBar.xs ----------------------------------------
 
@@ -658,20 +654,20 @@ call_pv();
 
 my $o = ppport(qw(--api-info=INT2PTR));
 my %found = map {($_ => 1)} $o =~ /^===\s+(\w+)\s+===/mg;
-ok(scalar keys %found, 1);
+is(scalar keys %found, 1, "found 1 key");
 ok(exists $found{INT2PTR});
-ok(matches($o, '^Supported at least starting from perl-5\.6\.0\.', 'm'), 1);
-ok(matches($o, '^Support by .*ppport.* provided back to perl-5\.003\.', 'm'), 1);
+is(matches($o, '^Supported at least since perl-5\.6\.0', 'm'), 1, "INT2PTR supported without ppport.h to 5.6.0");
+is(matches($o, '^ppport.h additionally provides support at least back to perl-5\.003', 'm'), 1, "INT2PTR supported with ppport.h to 5.003");
 
 $o = ppport(qw(--api-info=Zero));
 %found = map {($_ => 1)} $o =~ /^===\s+(\w+)\s+===/mg;
-ok(scalar keys %found, 1);
+is(scalar keys %found, 1, "found 1 key");
 ok(exists $found{Zero});
-ok(matches($o, '^No portability information available\.', 'm'), 1);
+is(matches($o, '^Supported at least since perl-5.003', 'm'), 1, "Zero supported to 5.003");
 
 $o = ppport(qw(--api-info=/Zero/));
 %found = map {($_ => 1)} $o =~ /^===\s+(\w+)\s+===/mg;
-ok(scalar keys %found, 2);
+is(scalar keys %found, 2, "found 2 keys");
 ok(exists $found{Zero});
 ok(exists $found{ZeroD});
 
@@ -688,32 +684,32 @@ for (@o) {
   $p{$name} = defined $flags ? { map { ($_ => 1) } $flags =~ /(\w+)/g } : '';
 }
 ok(@o > 100);
-ok($fail, 0);
+is($fail, 0);
 
 ok(exists $p{call_pv});
 ok(not ref $p{call_pv});
 
 ok(exists $p{grok_bin});
-ok(ref $p{grok_bin}, 'HASH');
-ok(scalar keys %{$p{grok_bin}}, 2);
+is(ref $p{grok_bin}, 'HASH');
+is(scalar keys %{$p{grok_bin}}, 2);
 ok($p{grok_bin}{explicit});
 ok($p{grok_bin}{depend});
 
 ok(exists $p{gv_stashpvn});
-ok(ref $p{gv_stashpvn}, 'HASH');
-ok(scalar keys %{$p{gv_stashpvn}}, 2);
+is(ref $p{gv_stashpvn}, 'HASH');
+is(scalar keys %{$p{gv_stashpvn}}, 2);
 ok($p{gv_stashpvn}{depend});
 ok($p{gv_stashpvn}{hint});
 
 ok(exists $p{sv_catpvf_mg});
-ok(ref $p{sv_catpvf_mg}, 'HASH');
-ok(scalar keys %{$p{sv_catpvf_mg}}, 2);
+is(ref $p{sv_catpvf_mg}, 'HASH');
+is(scalar keys %{$p{sv_catpvf_mg}}, 2);
 ok($p{sv_catpvf_mg}{explicit});
 ok($p{sv_catpvf_mg}{depend});
 
 ok(exists $p{PL_signals});
-ok(ref $p{PL_signals}, 'HASH');
-ok(scalar keys %{$p{PL_signals}}, 1);
+is(ref $p{PL_signals}, 'HASH');
+is(scalar keys %{$p{PL_signals}}, 1);
 ok($p{PL_signals}{explicit});
 
 ===============================================================================
@@ -729,13 +725,13 @@ for (@o) {
   $p{$name} = $ver;
 }
 ok(@o > 100);
-ok($fail, 0);
+is($fail, 0);
 
 ok(exists $p{utf8_distance});
-ok($p{utf8_distance}, '5.6.0');
+is($p{utf8_distance}, '5.6.0');
 
 ok(exists $p{save_generic_svref});
-ok($p{save_generic_svref}, '5.005_03');
+is($p{save_generic_svref}, '5.005_03');
 
 ===============================================================================
 
@@ -744,17 +740,17 @@ ok($p{save_generic_svref}, '5.005_03');
 my $o = ppport(qw(--nochanges));
 ok($o =~ /^Scanning.*foo\.cpp/mi);
 ok($o =~ /Analyzing.*foo\.cpp/mi);
-ok(matches($o, '^Scanning', 'm'), 1);
-ok(matches($o, 'Analyzing', 'm'), 1);
+is(matches($o, '^Scanning', 'm'), 1);
+is(matches($o, 'Analyzing', 'm'), 1);
 
 $o = ppport(qw(--nochanges foo.cpp foo.o Makefile.PL));
 ok($o =~ /Skipping the following files \(use --nofilter to avoid this\):/m);
-ok(matches($o, '^\|\s+foo\.o', 'mi'), 1);
-ok(matches($o, '^\|\s+Makefile\.PL', 'mi'), 1);
+is(matches($o, '^\|\s+foo\.o', 'mi'), 1);
+is(matches($o, '^\|\s+Makefile\.PL', 'mi'), 1);
 ok($o =~ /^Scanning.*foo\.cpp/mi);
 ok($o =~ /Analyzing.*foo\.cpp/mi);
-ok(matches($o, '^Scanning', 'm'), 1);
-ok(matches($o, 'Analyzing', 'm'), 1);
+is(matches($o, '^Scanning', 'm'), 1);
+is(matches($o, 'Analyzing', 'm'), 1);
 
 $o = ppport(qw(--nochanges --nofilter foo.cpp foo.o Makefile.PL));
 ok($o =~ /^Scanning.*foo\.cpp/mi);
@@ -763,8 +759,8 @@ ok($o =~ /^Scanning.*foo\.o/mi);
 ok($o =~ /Analyzing.*foo\.o/mi);
 ok($o =~ /^Scanning.*Makefile/mi);
 ok($o =~ /Analyzing.*Makefile/mi);
-ok(matches($o, '^Scanning', 'm'), 3);
-ok(matches($o, 'Analyzing', 'm'), 3);
+is(matches($o, '^Scanning', 'm'), 3);
+is(matches($o, 'Analyzing', 'm'), 3);
 
 ---------------------------- foo.cpp ------------------------------------------
 
@@ -879,8 +875,6 @@ for (qw(file.xs)) {
 
 ---------------------------- file.xs -----------------------------------------
 
-#define NEED_sv_2pv_flags
-#define NEED_vnewSVpvf
 #define NEED_warner
 #include "ppport.h"
 Perl_croak_nocontext("foo");
@@ -894,8 +888,6 @@ warner("foo");
 
 ---------------------------- file.xsr -----------------------------------------
 
-#define NEED_sv_2pv_flags
-#define NEED_vnewSVpvf
 #define NEED_warner
 #include "ppport.h"
 Perl_croak_nocontext("foo");
index c51d91a..c523d1c 100644 (file)
@@ -257,20 +257,28 @@ ok($uni ? "$]" >= 5.006 : "$]" < 5.008);
 my @r;
 
 @r = &Devel::PPPort::pv_pretty();
-ok($r[0], $r[1]);
-ok($r[0], "foobarbaz");
-ok($r[2], $r[3]);
-ok($r[2], '<leftpv_p\retty\nright>');
-ok($r[4], $r[5]);
-skip(ord("A") != 65 ? "Skip for non-ASCII platform" : 0,
-     $r[4], $uni ? 'N\375 Batter\355' : 'N\303\275 Batter\303');
-ok($r[6], $r[7]);
-skip(ord("A") != 65 ? "Skip for non-ASCII platform" : 0,
-     $r[6], $uni ? '\301g\346tis Byrju...' : '\303\201g\303\246t...');
+is($r[0], $r[1]);
+is($r[0], "foobarbaz");
+is($r[2], $r[3]);
+is($r[2], '<leftpv_p\retty\nright>');
+is($r[4], $r[5]);
+if(ord("A") == 65) {
+    is($r[4], $uni ? 'N\375 Batter\355' : 'N\303\275 Batter\303');
+}
+else {
+    skip("Skip for non-ASCII platform");
+}
+is($r[6], $r[7]);
+if(ord("A") == 65) {
+    is($r[6], $uni ? '\301g\346tis Byrju...' : '\303\201g\303\246t...');
+}
+else {
+    skip("Skip for non-ASCII platform");
+}
 
 @r = &Devel::PPPort::pv_display();
-ok($r[0], $r[1]);
-ok($r[0], '"foob\0rbaz"\0');
-ok($r[2], $r[3]);
+is($r[0], $r[1]);
+is($r[0], '"foob\0rbaz"\0');
+is($r[2], $r[3]);
 ok($r[2] eq '"pv_di"...\0' ||
    $r[2] eq '"pv_d"...\0');  # some perl implementations are broken... :(
index b1be87b..5720df3 100644 (file)
@@ -132,23 +132,23 @@ OUTPUT:
 
 my $x = 'foo';
 
-ok(Devel::PPPort::newSVpvs(), "newSVpvs");
-ok(Devel::PPPort::newSVpvs_flags(), "newSVpvs_flags");
-ok(Devel::PPPort::newSVpvs_share(), 3);
+is(Devel::PPPort::newSVpvs(), "newSVpvs");
+is(Devel::PPPort::newSVpvs_flags(), "newSVpvs_flags");
+is(Devel::PPPort::newSVpvs_share(), 3);
 
 Devel::PPPort::sv_catpvs($x);
-ok($x, "foosv_catpvs");
+is($x, "foosv_catpvs");
 
 Devel::PPPort::sv_setpvs($x);
-ok($x, "sv_setpvs");
+is($x, "sv_setpvs");
 
 my %h = ('hv_fetchs' => 42);
 Devel::PPPort::hv_stores(\%h, 4711);
-ok(scalar keys %h, 2);
+is(scalar keys %h, 2);
 ok(exists $h{'hv_stores'});
-ok($h{'hv_stores'}, 4711);
-ok(Devel::PPPort::hv_fetchs(\%h), 42);
-ok(Devel::PPPort::gv_fetchpvs(), \*Devel::PPPort::VERSION);
-ok(Devel::PPPort::gv_stashpvs(), \%Devel::PPPort::);
+is($h{'hv_stores'}, 4711);
+is(Devel::PPPort::hv_fetchs(\%h), 42);
+is(Devel::PPPort::gv_fetchpvs(), \*Devel::PPPort::VERSION);
+is(Devel::PPPort::gv_stashpvs(), \%Devel::PPPort::);
 
-ok(Devel::PPPort::get_cvs(), 3);
+is(Devel::PPPort::get_cvs(), 3);
index 921076f..6f87cf1 100644 (file)
@@ -27,14 +27,14 @@ __UNDEFINED__
 #if { NEED newSVpvn_share }
 
 SV *
-newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
+newSVpvn_share(pTHX_ const char *s, I32 len, U32 hash)
 {
   SV *sv;
   if (len < 0)
     len = -len;
   if (!hash)
-    PERL_HASH(hash, (char*) src, len);
-  sv = newSVpvn((char *) src, len);
+    PERL_HASH(hash, (char*) s, len);
+  sv = newSVpvn((char *) s, len);
   sv_upgrade(sv, SVt_PVIV);
   SvIVX(sv) = hash;
   SvREADONLY_on(sv);
@@ -87,4 +87,4 @@ newSVpvn_share()
 
 =tests plan => 1
 
-ok(&Devel::PPPort::newSVpvn_share(), 6);
+is(&Devel::PPPort::newSVpvn_share(), 6);
index b700d8b..f89abac 100644 (file)
@@ -59,5 +59,5 @@ my_snprintf()
 =tests plan => 2
 
 my($l, $s) = Devel::PPPort::my_snprintf();
-ok($l, 8);
-ok($s, "foobar42");
+is($l, 8);
+is($s, "foobar42");
index 8d45411..e6f7390 100644 (file)
@@ -18,6 +18,12 @@ my_sprintf
 #if !defined(my_sprintf)
 #if { NEED my_sprintf }
 
+/* Warning: my_sprintf
+   It's safer to use my_snprintf instead
+*/
+
+/* Replace my_sprintf with my_snprintf */
+
 int
 my_sprintf(char *buffer, const char* pat, ...)
 {
@@ -51,5 +57,5 @@ my_sprintf()
 =tests plan => 2
 
 my($l, $s) = Devel::PPPort::my_sprintf();
-ok($l, 8);
-ok($s, "foobar42");
+is($l, 8);
+is($s, "foobar42");
index 82b5e43..b58d5e0 100644 (file)
@@ -103,5 +103,5 @@ my @r = Devel::PPPort::my_strlfunc();
 ok(@e == @r);
 
 for (0 .. $#e) {
-  ok($r[$_], $e[$_]);
+  is($r[$_], $e[$_]);
 }
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/subparse b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/subparse
new file mode 100644 (file)
index 0000000..0729c91
--- /dev/null
@@ -0,0 +1,29 @@
+################################################################################
+##
+##  Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
+##  Version 2.x, Copyright (C) 2001, Paul Marquess.
+##  Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
+##
+##  This program is free software; you can redistribute it and/or
+##  modify it under the same terms as Perl itself.
+##
+################################################################################
+
+=provides
+
+__UNDEFINED__
+
+=implementation
+
+#if   { VERSION <= 5.003_22 }
+#  undef start_subparse
+#  if { VERSION < 5.003_22 }
+__UNDEFINED__ start_subparse(a, b) Perl_start_subparse()
+#  else
+__UNDEFINED__ start_subparse(a, b) Perl_start_subparse(b)
+#  endif
+
+#if {VERSION < 5.003_07 }
+foo
+#endif
+#endif
index 8961284..c71e805 100644 (file)
@@ -26,16 +26,10 @@ sv_vsetpvf_mg
 =implementation
 
 #if { VERSION >= 5.004 } && !defined(vnewSVpvf)
-#if { NEED vnewSVpvf }
-
-SV *
-vnewSVpvf(pTHX_ const char *pat, va_list *args)
-{
-  register SV *sv = newSV(0);
-  sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
-  return sv;
-}
-
+#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
+#  define vnewSVpvf(pat, args) ({ SV *_sv = newSV(0); sv_vsetpvfn(_sv, (pat), strlen((pat)), (args), Null(SV**), 0, Null(bool*)); _sv; })
+#else
+#  define vnewSVpvf(pat, args) ((PL_Sv = newSV(0)), sv_vsetpvfn(PL_Sv, (pat), strlen((pat)), (args), Null(SV**), 0, Null(bool*)), PL_Sv)
 #endif
 #endif
 
@@ -51,7 +45,7 @@ vnewSVpvf(pTHX_ const char *pat, va_list *args)
 #if { NEED sv_catpvf_mg }
 
 void
-sv_catpvf_mg(pTHX_ SV *sv, const char *pat, ...)
+sv_catpvf_mg(pTHX_ SV * const sv, const char * const pat, ...)
 {
   va_list args;
   va_start(args, pat);
@@ -68,7 +62,7 @@ sv_catpvf_mg(pTHX_ SV *sv, const char *pat, ...)
 #if { NEED sv_catpvf_mg_nocontext }
 
 void
-sv_catpvf_mg_nocontext(SV *sv, const char *pat, ...)
+sv_catpvf_mg_nocontext(SV * const sv, const char * const pat, ...)
 {
   dTHX;
   va_list args;
@@ -103,7 +97,7 @@ sv_catpvf_mg_nocontext(SV *sv, const char *pat, ...)
 #if { NEED sv_setpvf_mg }
 
 void
-sv_setpvf_mg(pTHX_ SV *sv, const char *pat, ...)
+sv_setpvf_mg(pTHX_ SV * const sv, const char * const pat, ...)
 {
   va_list args;
   va_start(args, pat);
@@ -120,7 +114,7 @@ sv_setpvf_mg(pTHX_ SV *sv, const char *pat, ...)
 #if { NEED sv_setpvf_mg_nocontext }
 
 void
-sv_setpvf_mg_nocontext(SV *sv, const char *pat, ...)
+sv_setpvf_mg_nocontext(SV * const sv, const char * const pat, ...)
 {
   dTHX;
   va_list args;
@@ -153,7 +147,6 @@ sv_setpvf_mg_nocontext(SV *sv, const char *pat, ...)
 
 =xsinit
 
-#define NEED_vnewSVpvf
 #define NEED_sv_catpvf_mg
 #define NEED_sv_catpvf_mg_nocontext
 #define NEED_sv_setpvf_mg
@@ -290,24 +283,24 @@ tie %h, 'Tie::StdHash';
 $h{foo} = 'foo-';
 $h{bar} = '';
 
-ok(&Devel::PPPort::vnewSVpvf(), "$]" >= 5.004 ? 'Perl-42' : '%s-%d');
-ok(&Devel::PPPort::sv_vcatpvf('1-2-3-'), "$]" >= 5.004 ? '1-2-3-Perl-42' : '1-2-3-%s-%d');
-ok(&Devel::PPPort::sv_vsetpvf('1-2-3-'), "$]" >= 5.004 ? 'Perl-42' : '%s-%d');
+is(&Devel::PPPort::vnewSVpvf(), "$]" >= 5.004 ? 'Perl-42' : '%s-%d');
+is(&Devel::PPPort::sv_vcatpvf('1-2-3-'), "$]" >= 5.004 ? '1-2-3-Perl-42' : '1-2-3-%s-%d');
+is(&Devel::PPPort::sv_vsetpvf('1-2-3-'), "$]" >= 5.004 ? 'Perl-42' : '%s-%d');
 
 &Devel::PPPort::sv_catpvf_mg($h{foo});
-ok($h{foo}, "$]" >= 5.004 ? 'foo-Perl-42' : 'foo-');
+is($h{foo}, "$]" >= 5.004 ? 'foo-Perl-42' : 'foo-');
 
 &Devel::PPPort::Perl_sv_catpvf_mg($h{foo});
-ok($h{foo}, "$]" >= 5.004 ? 'foo-Perl-42-Perl-43' : 'foo-');
+is($h{foo}, "$]" >= 5.004 ? 'foo-Perl-42-Perl-43' : 'foo-');
 
 &Devel::PPPort::sv_catpvf_mg_nocontext($h{foo});
-ok($h{foo}, "$]" >= 5.004 ? 'foo-Perl-42-Perl-43-Perl-44' : 'foo-');
+is($h{foo}, "$]" >= 5.004 ? 'foo-Perl-42-Perl-43-Perl-44' : 'foo-');
 
 &Devel::PPPort::sv_setpvf_mg($h{bar});
-ok($h{bar}, "$]" >= 5.004 ? 'mhx-42' : '');
+is($h{bar}, "$]" >= 5.004 ? 'mhx-42' : '');
 
 &Devel::PPPort::Perl_sv_setpvf_mg($h{bar});
-ok($h{bar}, "$]" >= 5.004 ? 'foo-43' : '');
+is($h{bar}, "$]" >= 5.004 ? 'foo-43' : '');
 
 &Devel::PPPort::sv_setpvf_mg_nocontext($h{bar});
-ok($h{bar}, "$]" >= 5.004 ? 'bar-44' : '');
+is($h{bar}, "$]" >= 5.004 ? 'bar-44' : '');
index 9a8f6ac..786b729 100644 (file)
@@ -21,12 +21,26 @@ dTHXR
 __UNDEFINED__  dTHR       dNOOP
 
 __UNDEFINED__  dTHX       dNOOP
+/* Hint: dTHX
+
+  For pre-5.6.0 thread compatibility, instead use dTHXR, available only through
+  ppport.h */
+
 __UNDEFINED__  dTHXa(x)   dNOOP
 
 __UNDEFINED__  pTHX       void
 __UNDEFINED__  pTHX_
 __UNDEFINED__  aTHX
+/* Hint: aTHX
+
+  For pre-5.6.0 thread compatibility, instead use aTHXR, available only through
+  ppport.h */
+
 __UNDEFINED__  aTHX_
+/* Hint: aTHX_
+
+  For pre-5.6.0 thread compatibility, instead use aTHXR_, available only
+  through ppport.h */
 
 #if { VERSION < 5.6.0 }
 #  ifdef USE_THREADS
@@ -63,6 +77,6 @@ with_THX_arg(error)
 
 =tests plan => 2
 
-ok(&Devel::PPPort::no_THX_arg("42"), 43);
+is(&Devel::PPPort::no_THX_arg("42"), 43);
 eval { &Devel::PPPort::with_THX_arg("yes\n"); };
 ok($@ =~ /^yes/);
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/utf8 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/inc/utf8
new file mode 100644 (file)
index 0000000..28f01c0
--- /dev/null
@@ -0,0 +1,926 @@
+=provides
+
+__UNDEFINED__
+SvUTF8
+UTF8f
+UTF8fARG
+utf8_to_uvchr_buf
+sv_len_utf8
+sv_len_utf8_nomg
+
+=implementation
+
+#ifdef SVf_UTF8
+__UNDEFINED__ SvUTF8(sv) (SvFLAGS(sv) & SVf_UTF8)
+#endif
+
+#if { VERSION == 5.19.1 } /* 5.19.1 does not have UTF8fARG, only broken UTF8f */
+#undef UTF8f
+#endif
+
+#ifdef SVf_UTF8
+__UNDEFINED__  UTF8f           SVf
+__UNDEFINED__  UTF8fARG(u,l,p) newSVpvn_flags((p), (l), ((u) ? SVf_UTF8 : 0) | SVs_TEMP)
+#endif
+
+#define D_PPP_MIN(a,b) (((a) <= (b)) ? (a) : (b))
+
+__UNDEFINED__ UNICODE_REPLACEMENT  0xFFFD
+
+#ifdef UTF8_MAXLEN
+__UNDEFINED__  UTF8_MAXBYTES   UTF8_MAXLEN
+#endif
+
+__UNDEF_NOT_PROVIDED__ UTF_START_MARK(len)                                   \
+                    (((len) >  7) ? 0xFF : (0xFF & (0xFE << (7-(len)))))
+
+#if { VERSION < 5.018 }     /* On non-EBCDIC was valid before this, */
+                            /* but easier to just do one check */
+#  undef UTF8_MAXBYTES_CASE
+#endif
+
+#if 'A' == 65
+#  define D_PPP_BYTE_INFO_BITS 6  /* 6 bits meaningful in continuation bytes */
+__UNDEFINED__          UTF8_MAXBYTES_CASE 13
+#else
+#  define D_PPP_BYTE_INFO_BITS 5  /* 5 bits meaningful in continuation bytes */
+__UNDEFINED__          UTF8_MAXBYTES_CASE 15
+#endif
+
+__UNDEF_NOT_PROVIDED__ UTF_ACCUMULATION_SHIFT D_PPP_BYTE_INFO_BITS
+
+#ifdef NATIVE_TO_UTF
+__UNDEF_NOT_PROVIDED__ NATIVE_UTF8_TO_I8(c)  NATIVE_TO_UTF(c)
+#else   /* System doesn't support EBCDIC */
+__UNDEF_NOT_PROVIDED__ NATIVE_UTF8_TO_I8(c)  (c)
+#endif
+
+#ifdef UTF_TO_NATIVE
+__UNDEF_NOT_PROVIDED__ I8_TO_NATIVE_UTF8(c)  UTF_TO_NATIVE(c)
+#else   /* System doesn't support EBCDIC */
+__UNDEF_NOT_PROVIDED__ I8_TO_NATIVE_UTF8(c)  (c)
+#endif
+
+__UNDEF_NOT_PROVIDED__ UTF_START_MASK(len)                                 \
+                                (((len) >= 7) ? 0x00 : (0x1F >> ((len)-2)))
+__UNDEF_NOT_PROVIDED__ UTF_IS_CONTINUATION_MASK                            \
+                                    ((U8) (0xFF << UTF_ACCUMULATION_SHIFT))
+__UNDEF_NOT_PROVIDED__ UTF_CONTINUATION_MARK                               \
+                                          (UTF_IS_CONTINUATION_MASK & 0xB0)
+__UNDEF_NOT_PROVIDED__ UTF_MIN_START_BYTE                                  \
+    ((UTF_CONTINUATION_MARK >> UTF_ACCUMULATION_SHIFT) | UTF_START_MARK(2))
+
+__UNDEF_NOT_PROVIDED__ UTF_MIN_ABOVE_LATIN1_BYTE                           \
+                    ((0x100 >> UTF_ACCUMULATION_SHIFT) | UTF_START_MARK(2))
+
+#if { VERSION < 5.007 }     /* Was the complement of what should have been */
+#  undef UTF8_IS_DOWNGRADEABLE_START
+#endif
+__UNDEF_NOT_PROVIDED__ UTF8_IS_DOWNGRADEABLE_START(c)                       \
+                inRANGE(NATIVE_UTF8_TO_I8(c),                               \
+                        UTF_MIN_START_BYTE, UTF_MIN_ABOVE_LATIN1_BYTE - 1)
+__UNDEF_NOT_PROVIDED__ UTF_CONTINUATION_MASK                                \
+                                ((U8) ((1U << UTF_ACCUMULATION_SHIFT) - 1))
+
+__UNDEF_NOT_PROVIDED__ UTF8_ACCUMULATE(base, added)                         \
+                                  (((base) << UTF_ACCUMULATION_SHIFT)       \
+                                   | ((NATIVE_UTF8_TO_I8(added))            \
+                                       & UTF_CONTINUATION_MASK))
+
+__UNDEF_NOT_PROVIDED__ UTF8_ALLOW_ANYUV                 0
+__UNDEF_NOT_PROVIDED__ UTF8_ALLOW_EMPTY            0x0001
+__UNDEF_NOT_PROVIDED__ UTF8_ALLOW_CONTINUATION     0x0002
+__UNDEF_NOT_PROVIDED__ UTF8_ALLOW_NON_CONTINUATION 0x0004
+__UNDEF_NOT_PROVIDED__ UTF8_ALLOW_SHORT            0x0008
+__UNDEF_NOT_PROVIDED__ UTF8_ALLOW_LONG             0x0010
+__UNDEF_NOT_PROVIDED__ UTF8_ALLOW_OVERFLOW         0x0080
+__UNDEF_NOT_PROVIDED__ UTF8_ALLOW_ANY  ( UTF8_ALLOW_CONTINUATION      \
+                                        |UTF8_ALLOW_NON_CONTINUATION  \
+                                        |UTF8_ALLOW_SHORT             \
+                                        |UTF8_ALLOW_LONG              \
+                                        |UTF8_ALLOW_OVERFLOW)
+
+#if defined UTF8SKIP
+
+/* Don't use official versions because they use MIN, which may not be available */
+#undef UTF8_SAFE_SKIP
+#undef UTF8_CHK_SKIP
+
+__UNDEFINED__  UTF8_SAFE_SKIP(s, e)  (                                          \
+                                      ((((e) - (s)) <= 0)                       \
+                                      ? 0                                       \
+                                      : D_PPP_MIN(((e) - (s)), UTF8SKIP(s))))
+
+__UNDEFINED__ UTF8_CHK_SKIP(s)                                                  \
+    (s[0] == '\0' ? 1 : ((U8) D_PPP_MIN(my_strnlen((char *) (s), UTF8SKIP(s)),  \
+                                      UTF8SKIP(s))))
+/* UTF8_CHK_SKIP depends on my_strnlen */
+__UNDEFINED__ UTF8_SKIP(s)  UTF8SKIP(s)
+#endif
+
+#if 'A' == 65
+__UNDEFINED__ UTF8_IS_INVARIANT(c)   isASCII(c)
+#else
+__UNDEFINED__ UTF8_IS_INVARIANT(c)  (isASCII(c) || isCNTRL_L1(c))
+#endif
+
+__UNDEFINED__ UVCHR_IS_INVARIANT(c)  UTF8_IS_INVARIANT(c)
+
+#ifdef UVCHR_IS_INVARIANT
+#  if 'A' == 65
+#    ifdef QUADKIND
+#      define D_PPP_UVCHR_SKIP_UPPER(c)                                         \
+          (WIDEST_UTYPE) (c) <                                                  \
+        (((WIDEST_UTYPE) 1) << (6 * D_PPP_BYTE_INFO_BITS)) ? 7 : 13
+#    else
+#      define D_PPP_UVCHR_SKIP_UPPER(c) 7  /* 32 bit platform */
+#    endif
+#  else
+     /* In the releases this is backported to, UTF-EBCDIC had a max of 2**31-1 */
+#    define D_PPP_UVCHR_SKIP_UPPER(c) 7
+#  endif
+
+__UNDEFINED__ UVCHR_SKIP(c)                                                     \
+          UVCHR_IS_INVARIANT(c)                                          ? 1 :  \
+          (WIDEST_UTYPE) (c) < (32 * (1U << (    D_PPP_BYTE_INFO_BITS))) ? 2 :  \
+          (WIDEST_UTYPE) (c) < (16 * (1U << (2 * D_PPP_BYTE_INFO_BITS))) ? 3 :  \
+          (WIDEST_UTYPE) (c) < ( 8 * (1U << (3 * D_PPP_BYTE_INFO_BITS))) ? 4 :  \
+          (WIDEST_UTYPE) (c) < ( 4 * (1U << (4 * D_PPP_BYTE_INFO_BITS))) ? 5 :  \
+          (WIDEST_UTYPE) (c) < ( 2 * (1U << (5 * D_PPP_BYTE_INFO_BITS))) ? 6 :  \
+          D_PPP_UVCHR_SKIP_UPPER(c)
+#endif
+
+#ifdef is_ascii_string
+__UNDEFINED__ is_invariant_string(s,l) is_ascii_string(s,l)
+__UNDEFINED__ is_utf8_invariant_string(s,l) is_ascii_string(s,l)
+
+/* Hint: is_ascii_string, is_invariant_string
+   is_utf8_invariant_string() does the same thing and is preferred because its
+   name is more accurate as to what it does */
+#endif
+
+#ifdef ibcmp_utf8
+__UNDEFINED__ foldEQ_utf8(s1,pe1,l1,u1,s2,pe2,l2,u2)                            \
+                                cBOOL(! ibcmp_utf8(s1,pe1,l1,u1,s2,pe2,l2,u2))
+#endif
+
+#if defined(is_utf8_string) && defined(UTF8SKIP)
+__UNDEFINED__ isUTF8_CHAR(s, e)    (                                            \
+    (e) <= (s) || ! is_utf8_string(s, UTF8_SAFE_SKIP(s, e))                     \
+    ? 0                                                                         \
+    : UTF8SKIP(s))
+#endif
+
+#if 'A' == 65
+__UNDEFINED__ BOM_UTF8                    "\xEF\xBB\xBF"
+__UNDEFINED__ REPLACEMENT_CHARACTER_UTF8  "\xEF\xBF\xBD"
+#elif '^' == 95
+__UNDEFINED__ BOM_UTF8                    "\xDD\x73\x66\x73"
+__UNDEFINED__ REPLACEMENT_CHARACTER_UTF8  "\xDD\x73\x73\x71"
+#elif '^' == 176
+__UNDEFINED__ BOM_UTF8                    "\xDD\x72\x65\x72"
+__UNDEFINED__ REPLACEMENT_CHARACTER_UTF8  "\xDD\x72\x72\x70"
+#else
+#  error Unknown character set
+#endif
+
+#if { VERSION < 5.31.4 }
+        /* Versions prior to this accepted things that are now considered
+         * malformations, and didn't return -1 on error with warnings enabled
+         * */
+#  undef utf8_to_uvchr_buf
+#endif
+
+/* This implementation brings modern, generally more restricted standards to
+ * utf8_to_uvchr_buf.  Some of these are security related, and clearly must
+ * be done.  But its arguable that the others need not, and hence should not.
+ * The reason they're here is that a module that intends to play with the
+ * latest perls should be able to work the same in all releases.  An example is
+ * that perl no longer accepts any UV for a code point, but limits them to
+ * IV_MAX or below.  This is for future internal use of the larger code points.
+ * If it turns out that some of these changes are breaking code that isn't
+ * intended to work with modern perls, the tighter restrictions could be
+ * relaxed.  khw thinks this is unlikely, but has been wrong in the past. */
+
+/* 5.6.0 is the first release with UTF-8, and we don't implement this function
+ * there due to its likely lack of still being in use, and the underlying
+ * implementation is very different from later ones, without the later
+ * safeguards, so would require extra work to deal with */
+#if { VERSION >= 5.6.1 } && ! defined(utf8_to_uvchr_buf)
+   /* Choose which underlying implementation to use.  At least one must be
+    * present or the perl is too early to handle this function */
+#  if defined(utf8n_to_uvchr) || defined(utf8_to_uvchr) || defined(utf8_to_uv)
+#    if defined(utf8n_to_uvchr)   /* This is the preferred implementation */
+#      define D_PPP_utf8_to_uvchr_buf_callee utf8n_to_uvchr
+#    elif /* Must be at least 5.6.1 from #if above;                             \
+             If have both regular and _simple, regular has all args */          \
+          defined(utf8_to_uv) && defined(utf8_to_uv_simple)
+#      define D_PPP_utf8_to_uvchr_buf_callee utf8_to_uv
+#    elif defined(utf8_to_uvchr)  /* The below won't work well on error input */
+#      define D_PPP_utf8_to_uvchr_buf_callee(s, curlen, retlen, flags)          \
+                                            utf8_to_uvchr((U8 *)(s), (retlen))
+#    else
+#      define D_PPP_utf8_to_uvchr_buf_callee(s, curlen, retlen, flags)          \
+                                            utf8_to_uv((U8 *)(s), (retlen))
+#    endif
+#  endif
+
+#  if { NEED utf8_to_uvchr_buf }
+
+UV
+utf8_to_uvchr_buf(pTHX_ const U8 *s, const U8 *send, STRLEN *retlen)
+{
+    UV ret;
+    STRLEN curlen;
+    bool overflows = 0;
+    const U8 *cur_s = s;
+    const bool do_warnings = ckWARN_d(WARN_UTF8);
+#    if { VERSION < 5.26.0 } && ! defined(EBCDIC)
+    STRLEN overflow_length = 0;
+#    endif
+
+    if (send > s) {
+        curlen = send - s;
+    }
+    else {
+        assert(0);  /* Modern perls die under this circumstance */
+        curlen = 0;
+        if (! do_warnings) {    /* Handle empty here if no warnings needed */
+            if (retlen) *retlen = 0;
+            return UNICODE_REPLACEMENT;
+        }
+    }
+
+#    if { VERSION < 5.26.0 } && ! defined(EBCDIC)
+
+    /* Perl did not properly detect overflow for much of its history on
+     * non-EBCDIC platforms, often returning an overlong value which may or may
+     * not have been tolerated in the call.  Also, earlier versions, when they
+     * did detect overflow, may have disallowed it completely.  Modern ones can
+     * replace it with the REPLACEMENT CHARACTER, depending on calling
+     * parameters.  Therefore detect it ourselves in  releases it was
+     * problematic in. */
+
+    if (curlen > 0 && UNLIKELY(*s >= 0xFE)) {
+
+        /* First, on a 32-bit machine the first byte being at least \xFE
+         * automatically is overflow, as it indicates something requiring more
+         * than 31 bits */
+        if (sizeof(ret) < 8) {
+            overflows = 1;
+            overflow_length = (*s == 0xFE) ? 7 : 13;
+        }
+        else {
+            const U8 highest[] =    /* 2*63-1 */
+                        "\xFF\x80\x87\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF";
+            const U8 *cur_h = highest;
+
+            for (cur_s = s; cur_s < send; cur_s++, cur_h++) {
+                if (UNLIKELY(*cur_s == *cur_h)) {
+                    continue;
+                }
+
+                /* If this byte is larger than the corresponding highest UTF-8
+                 * byte, the sequence overflows; otherwise the byte is less
+                 * than (as we handled the equality case above), and so the
+                 * sequence doesn't overflow */
+                overflows = *cur_s > *cur_h;
+                break;
+
+            }
+
+            /* Here, either we set the bool and broke out of the loop, or got
+             * to the end and all bytes are the same which indicates it doesn't
+             * overflow.  If it did overflow, it would be this number of bytes
+             * */
+            overflow_length = 13;
+        }
+    }
+
+    if (UNLIKELY(overflows)) {
+        ret = 0;
+
+        if (! do_warnings && retlen) {
+            *retlen = overflow_length;
+        }
+    }
+    else
+
+#    endif  /* < 5.26 */
+
+        /* Here, we are either in a release that properly detects overflow, or
+         * we have checked for overflow and the next statement is executing as
+         * part of the above conditional where we know we don't have overflow.
+         *
+         * The modern versions allow anything that evaluates to a legal UV, but
+         * not overlongs nor an empty input */
+        ret = D_PPP_utf8_to_uvchr_buf_callee(
+              (U8 *) /* Early perls: no const */
+                    s, curlen, retlen,   (UTF8_ALLOW_ANYUV
+                                      & ~(UTF8_ALLOW_LONG|UTF8_ALLOW_EMPTY)));
+
+#    if { VERSION >= 5.26.0 } && { VERSION < 5.28.0 }
+
+    /* But actually, more modern versions restrict the UV to being no more than
+     * what an IV can hold, so it could still have gotten it wrong about
+     * overflowing. */
+    if (UNLIKELY(ret > IV_MAX)) {
+        overflows = 1;
+    }
+
+#    endif
+
+    if (UNLIKELY(overflows)) {
+        if (! do_warnings) {
+            if (retlen) {
+                *retlen = D_PPP_MIN(*retlen, UTF8SKIP(s));
+                *retlen = D_PPP_MIN(*retlen, curlen);
+            }
+            return UNICODE_REPLACEMENT;
+        }
+        else {
+
+            /* We use the error message in use from 5.8-5.26 */
+            Perl_warner(aTHX_ packWARN(WARN_UTF8),
+                "Malformed UTF-8 character (overflow at 0x%" UVxf
+                ", byte 0x%02x, after start byte 0x%02x)",
+                ret, *cur_s, *s);
+            if (retlen) {
+                *retlen = (STRLEN) -1;
+            }
+            return 0;
+        }
+    }
+
+    /* Here, did not overflow, but if it failed for some other reason, and
+     * warnings are off, to emulate the behavior of the real utf8_to_uvchr(),
+     * try again, allowing anything.  (Note a return of 0 is ok if the input
+     * was '\0') */
+    if (UNLIKELY(ret == 0 && (curlen == 0 || *s != '\0'))) {
+
+        /* If curlen is 0, we already handled the case where warnings are
+         * disabled, so this 'if' will be true, and so later on, we know that
+         * 's' is dereferencible */
+        if (do_warnings) {
+            *retlen = (STRLEN) -1;
+        }
+        else {
+            ret = D_PPP_utf8_to_uvchr_buf_callee(
+                                     (U8 *) /* Early perls: no const */
+                                            s, curlen, retlen, UTF8_ALLOW_ANY);
+            /* Override with the REPLACEMENT character, as that is what the
+             * modern version of this function returns */
+            ret = UNICODE_REPLACEMENT;
+
+#    if { VERSION < 5.16.0 }
+
+            /* Versions earlier than this don't necessarily return the proper
+             * length.  It should not extend past the end of string, nor past
+             * what the first byte indicates the length is, nor past the
+             * continuation characters */
+            if (retlen && (IV) *retlen >= 0) {
+                unsigned int i = 1;
+
+                *retlen = D_PPP_MIN(*retlen, curlen);
+                *retlen = D_PPP_MIN(*retlen, UTF8SKIP(s));
+                do {
+#      ifdef UTF8_IS_CONTINUATION
+                    if (! UTF8_IS_CONTINUATION(s[i]))
+#      else       /* Versions without the above don't support EBCDIC anyway */
+                    if (s[i] < 0x80 || s[i] > 0xBF)
+#      endif
+                    {
+                        *retlen = i;
+                        break;
+                    }
+                } while (++i < *retlen);
+            }
+
+#    endif
+
+        }
+    }
+
+    return ret;
+}
+
+#  endif
+#endif
+
+#if defined(UTF8SKIP) && defined(utf8_to_uvchr_buf)
+#undef utf8_to_uvchr /* Always redefine this unsafe function so that it refuses
+                        to read past a NUL, making it much less likely to read
+                        off the end of the buffer.  A NUL indicates the start
+                        of the next character anyway.  If the input isn't
+                        NUL-terminated, the function remains unsafe, as it
+                        always has been. */
+
+__UNDEFINED__  utf8_to_uvchr(s, lp)                                             \
+    ((*(s) == '\0')                                                             \
+    ? utf8_to_uvchr_buf(s,((s)+1), lp) /* Handle single NUL specially */        \
+    : utf8_to_uvchr_buf(s, (s) + UTF8_CHK_SKIP(s), (lp)))
+
+#endif
+
+/* Hint: utf8_to_uvchr
+    Use utf8_to_uvchr_buf() instead.  But ONLY if you KNOW the upper bound
+    of the input string (not resorting to using UTF8SKIP, etc., to infer it).
+    The backported utf8_to_uvchr() will do a better job to prevent most cases
+    of trying to read beyond the end of the buffer */
+
+/* Replace utf8_to_uvchr with utf8_to_uvchr_buf */
+
+#ifdef sv_len_utf8
+   /* Older Perl versions have broken sv_len_utf8() when passed sv does not have SVf_UTF8 flag set */
+   /* Also note that SvGETMAGIC() may change presence of SVf_UTF8 flag */
+#  if { VERSION < 5.17.5 }
+#    undef sv_len_utf8
+#    if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
+#      define sv_len_utf8_nomg(sv) ({ SV *_sv2 = (sv); (SvUTF8(_sv2) ? Perl_sv_len_utf8(aTHX_ (!SvGMAGICAL(_sv2) ? _sv2 : sv_mortalcopy_flags(_sv2, SV_NOSTEAL))) : ({ STRLEN _len; SvPV_nomg(_sv2, _len); _len; })); })
+#      define sv_len_utf8(sv) ({ SV *_sv1 = (sv); SvGETMAGIC(_sv1); sv_len_utf8_nomg(_sv1); })
+#    else
+#      define sv_len_utf8_nomg(sv) (PL_Sv = (sv), (SvUTF8(PL_Sv) ? Perl_sv_len_utf8(aTHX_ (!SvGMAGICAL(PL_Sv) ? PL_Sv : sv_mortalcopy_flags(PL_Sv, SV_NOSTEAL))) : (SvPV_nomg(PL_Sv, PL_na), PL_na)))
+#      define sv_len_utf8(sv) (PL_Sv = (sv), SvGETMAGIC(PL_Sv), sv_len_utf8_nomg(PL_Sv))
+#    endif
+#  endif
+#  if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
+     __UNDEFINED__ sv_len_utf8_nomg(sv) ({ SV *_sv = (sv); sv_len_utf8(!SvGMAGICAL(_sv) ? _sv : sv_mortalcopy_flags(_sv, SV_NOSTEAL)); })
+#  else
+     __UNDEFINED__ sv_len_utf8_nomg(sv) ((PL_Sv = (sv)), sv_len_utf8(!SvGMAGICAL(PL_Sv) ? PL_Sv : sv_mortalcopy_flags(PL_Sv, SV_NOSTEAL)))
+#  endif
+#endif
+
+=xsinit
+
+#define NEED_utf8_to_uvchr_buf
+
+=xsubs
+
+#if defined(UTF8f) && defined(newSVpvf)
+
+void
+UTF8f(x)
+        SV *x
+        PREINIT:
+                U32 u;
+                STRLEN len;
+                char *ptr;
+        INIT:
+                ptr = SvPV(x, len);
+                u = SvUTF8(x);
+        PPCODE:
+                x = sv_2mortal(newSVpvf("[%" UTF8f "]", UTF8fARG(u, len, ptr)));
+                XPUSHs(x);
+                XSRETURN(1);
+
+#endif
+
+#if { VERSION >= 5.006 } /* This is just a helper fcn, not publicized */  \
+                         /* as being available and params not what the  */  \
+                         /* API function has; works on EBCDIC too */
+
+SV *
+uvchr_to_utf8(native)
+
+    UV native
+    PREINIT:
+        int len;
+        U8 string[UTF8_MAXBYTES+1];
+        int i;
+        UV uni;
+
+    CODE:
+       len = UVCHR_SKIP(native);
+
+        for (i = 0; i < len; i++) {
+            string[i] = '\0';
+        }
+
+        if (len <= 1) {
+            string[0] = native;
+        }
+        else {
+            i = len;
+            uni = NATIVE_TO_UNI(native);
+            while (i-- > 1) {
+                string[i] = I8_TO_NATIVE_UTF8((uni & UTF_CONTINUATION_MASK) | UTF_CONTINUATION_MARK);
+                uni >>= UTF_ACCUMULATION_SHIFT;
+            }
+            string[0] = I8_TO_NATIVE_UTF8((uni & UTF_START_MASK(len)) | UTF_START_MARK(len));
+        }
+
+        RETVAL = newSVpvn((char *) string, len);
+        SvUTF8_on(RETVAL);
+    OUTPUT:
+        RETVAL
+
+#endif
+#if defined(UTF8_SAFE_SKIP) && defined(UTF8SKIP)
+
+STRLEN
+UTF8_SAFE_SKIP(s, adjustment)
+        char * s
+        int adjustment
+        PREINIT:
+            const char *const_s;
+        CODE:
+            const_s = s;
+            /* Instead of passing in an 'e' ptr, use the real end, adjusted */
+            RETVAL = UTF8_SAFE_SKIP(const_s, s + UTF8SKIP(s) + adjustment);
+        OUTPUT:
+            RETVAL
+
+#endif
+
+#ifdef isUTF8_CHAR
+
+STRLEN
+isUTF8_CHAR(s, adjustment)
+        unsigned char * s
+        int adjustment
+        PREINIT:
+            const unsigned char *const_s;
+            const unsigned char *const_e;
+        CODE:
+            const_s = s;
+            /* Instead of passing in an 'e' ptr, use the real end, adjusted */
+            const_e = const_s + UTF8SKIP(const_s) + adjustment;
+            RETVAL = isUTF8_CHAR(const_s, const_e);
+        OUTPUT:
+            RETVAL
+
+#endif
+
+
+#ifdef foldEQ_utf8
+
+STRLEN
+foldEQ_utf8(s1, l1, u1, s2, l2, u2)
+        char *s1
+        UV l1
+        bool u1
+        char *s2
+        UV l2
+        bool u2
+        PREINIT:
+            const char *const_s1;
+            const char *const_s2;
+        CODE:
+            const_s1 = s1;
+            const_s2 = s2;
+            RETVAL = foldEQ_utf8(const_s1, NULL, l1, u1, const_s2, NULL, l2, u2);
+        OUTPUT:
+            RETVAL
+
+#endif
+
+#ifdef utf8_to_uvchr_buf
+
+AV *
+utf8_to_uvchr_buf(s, adjustment)
+        unsigned char *s
+        int adjustment
+        PREINIT:
+            AV *av;
+            STRLEN len;
+            const unsigned char *const_s;
+        CODE:
+            av = newAV();
+            const_s = s;
+            av_push(av, newSVuv(utf8_to_uvchr_buf(const_s,
+                                                  s + UTF8SKIP(s) + adjustment,
+                                                  &len)));
+            if (len == (STRLEN) -1) {
+                av_push(av, newSViv(-1));
+            }
+            else {
+                av_push(av, newSVuv(len));
+            }
+            RETVAL = av;
+        OUTPUT:
+                RETVAL
+
+#endif
+
+#ifdef utf8_to_uvchr
+
+AV *
+utf8_to_uvchr(s)
+        unsigned char *s
+        PREINIT:
+            AV *av;
+            STRLEN len;
+            const unsigned char *const_s;
+        CODE:
+            av = newAV();
+            const_s = s;
+            av_push(av, newSVuv(utf8_to_uvchr(const_s, &len)));
+            if (len == (STRLEN) -1) {
+                av_push(av, newSViv(-1));
+            }
+            else {
+                av_push(av, newSVuv(len));
+            }
+            RETVAL = av;
+        OUTPUT:
+                RETVAL
+
+#endif
+
+#ifdef sv_len_utf8
+
+STRLEN
+sv_len_utf8(sv)
+        SV *sv
+        CODE:
+                RETVAL = sv_len_utf8(sv);
+        OUTPUT:
+                RETVAL
+
+#endif
+
+#ifdef sv_len_utf8_nomg
+
+STRLEN
+sv_len_utf8_nomg(sv)
+        SV *sv
+        CODE:
+                RETVAL = sv_len_utf8_nomg(sv);
+        OUTPUT:
+                RETVAL
+
+#endif
+
+#ifdef UVCHR_IS_INVARIANT
+
+bool
+UVCHR_IS_INVARIANT(c)
+        unsigned c
+        PREINIT:
+        CODE:
+            RETVAL = UVCHR_IS_INVARIANT(c);
+        OUTPUT:
+            RETVAL
+
+#endif
+
+#ifdef UVCHR_SKIP
+
+STRLEN
+UVCHR_SKIP(c)
+        UV c
+        PREINIT:
+        CODE:
+            RETVAL = UVCHR_SKIP(c);
+        OUTPUT:
+            RETVAL
+
+#endif
+
+=tests plan => 98
+
+BEGIN {
+    # skip tests on 5.6.0 and earlier, plus 5.7.0
+    if (ivers($]) <= ivers(5.6) || ivers($]) == ivers(5.7) ) {
+        skip 'skip: broken utf8 support', 98;
+        exit;
+    }
+    require warnings;
+}
+
+is(Devel::PPPort::UTF8f(42), '[42]');
+is(Devel::PPPort::UTF8f('abc'), '[abc]');
+is(Devel::PPPort::UTF8f("\x{263a}"), "[\x{263a}]");
+
+my $str = "\x{A8}";
+if (ivers($]) >= ivers(5.8)) { eval q{utf8::upgrade($str)} }
+is(Devel::PPPort::UTF8f($str), "[\x{A8}]");
+if (ivers($]) >= ivers(5.8)) { eval q{utf8::downgrade($str)} }
+is(Devel::PPPort::UTF8f($str), "[\x{A8}]");
+
+is(&Devel::PPPort::UTF8_SAFE_SKIP("A", 0), 1);
+is(&Devel::PPPort::UTF8_SAFE_SKIP("A", -1), 0);
+
+is(&Devel::PPPort::isUTF8_CHAR("A", -1), 0);
+is(&Devel::PPPort::isUTF8_CHAR("A",  0), 1);
+is(&Devel::PPPort::isUTF8_CHAR("\x{100}",  -1), 0);
+is(&Devel::PPPort::isUTF8_CHAR("\x{100}",  0), 2);
+
+is(&Devel::PPPort::UVCHR_IS_INVARIANT(ord("A")), 1);
+ok(! &Devel::PPPort::UVCHR_IS_INVARIANT(0xb6));
+ok(! &Devel::PPPort::UVCHR_IS_INVARIANT(0x100));
+
+is(&Devel::PPPort::UVCHR_SKIP(ord("A")), 1);
+is(&Devel::PPPort::UVCHR_SKIP(0xb6),     2, "This is a test");
+is(&Devel::PPPort::UVCHR_SKIP(0x3FF),    2);
+is(&Devel::PPPort::UVCHR_SKIP(0x3FFF),   3);
+is(&Devel::PPPort::UVCHR_SKIP(0x3FFFF),  4);
+is(&Devel::PPPort::UVCHR_SKIP(0x3FFFFF), 5);
+is(&Devel::PPPort::UVCHR_SKIP(0x3FFFFFF), ord("A") == 65 ? 5 : 6);
+is(&Devel::PPPort::UVCHR_SKIP(0x4000000), ord("A") == 65 ? 6 : 7);
+if (ord("A") != 65) {
+    skip("Test not valid on EBCDIC", 1)
+}
+else {
+    is(&Devel::PPPort::UVCHR_SKIP(0xFFFFFFFF), 7);
+}
+
+if (ivers($]) < ivers(5.8)) {
+    skip("Perl version too early", 3);
+}
+else {
+    is(&Devel::PPPort::foldEQ_utf8("A\x{100}", 3, 1, "a\x{101}", 3, 1), 1);
+    is(&Devel::PPPort::foldEQ_utf8("A\x{100}", 3, 1, "a\x{102}", 3, 1), 0);
+    is(&Devel::PPPort::foldEQ_utf8("A\x{100}", 3, 1, "b\x{101}", 3, 1), 0);
+}
+
+my $ret = &Devel::PPPort::utf8_to_uvchr("A");
+is($ret->[0], ord("A"));
+is($ret->[1], 1);
+
+$ret = &Devel::PPPort::utf8_to_uvchr("\0");
+is($ret->[0], 0);
+is($ret->[1], 1);
+
+$ret = &Devel::PPPort::utf8_to_uvchr_buf("A", 0);
+is($ret->[0], ord("A"));
+is($ret->[1], 1);
+
+$ret = &Devel::PPPort::utf8_to_uvchr_buf("\0", 0);
+is($ret->[0], 0);
+is($ret->[1], 1);
+
+my @buf_tests = (
+    {
+        input      => "A",
+        adjustment => -1,
+        warning    => eval "qr/empty/",
+        no_warnings_returned_length => 0,
+    },
+    {
+        input      => "\xc4\xc5",
+        adjustment => 0,
+        warning    => eval "qr/non-continuation/",
+        no_warnings_returned_length => 1,
+    },
+    {
+        input      => "\xc4\x80",
+        adjustment => -1,
+        warning    => eval "qr/short|1 byte, need 2/",
+        no_warnings_returned_length => 1,
+    },
+    {
+        input      => "\xc0\x81",
+        adjustment => 0,
+        warning    => eval "qr/overlong|2 bytes, need 1/",
+        no_warnings_returned_length => 2,
+    },
+    {
+        input      => "\xe0\x80\x81",
+        adjustment => 0,
+        warning    => eval "qr/overlong|3 bytes, need 1/",
+        no_warnings_returned_length => 3,
+    },
+    {
+        input      => "\xf0\x80\x80\x81",
+        adjustment => 0,
+        warning    => eval "qr/overlong|4 bytes, need 1/",
+        no_warnings_returned_length => 4,
+    },
+    {                 # Old algorithm failed to detect this
+        input      => "\xff\x80\x90\x90\x90\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf",
+        adjustment => 0,
+        warning    => eval "qr/overflow/",
+        no_warnings_returned_length => 13,
+    },
+);
+
+if (ord("A") != 65) {   # tests not valid for EBCDIC
+    skip("Perl version too early", 2 + 4 + (scalar @buf_tests * 5));
+}
+else {
+    $ret = &Devel::PPPort::utf8_to_uvchr_buf("\xc4\x80", 0);
+    is($ret->[0], 0x100);
+    is($ret->[1], 2);
+
+    my @warnings;
+    local $SIG{__WARN__} = sub { push @warnings, @_; };
+
+    {
+        use warnings 'utf8';
+        $ret = &Devel::PPPort::utf8_to_uvchr("\xe0\0\x80");
+        is($ret->[0], 0);
+        is($ret->[1], -1);
+
+        no warnings 'utf8';
+        $ret = &Devel::PPPort::utf8_to_uvchr("\xe0\0\x80");
+        is($ret->[0], 0xFFFD);
+        is($ret->[1], 1);
+    }
+
+
+    # An empty input is an assertion failure on debugging builds.  It is
+    # deliberately the first test.
+    require Config; import Config;
+    use vars '%Config';
+
+    # VMS doesn't put DEBUGGING in ccflags, and Windows doesn't have
+    # $Config{config_args}.  When 5.14 or later can be assumed, use
+    # Config::non_bincompat_options(), but for now we're stuck with this.
+    if (   $Config{ccflags} =~ /-DDEBUGGING/
+        || $^O eq 'VMS' && $Config{config_args} =~ /\bDDEBUGGING\b/)
+    {
+        shift @buf_tests;
+        skip("Test not valid on DEBUGGING builds", 5);
+    }
+
+    my $test;
+    for $test (@buf_tests) {
+        my $input = $test->{'input'};
+        my $adjustment = $test->{'adjustment'};
+        my $display = 'utf8_to_uvchr_buf("';
+        my $i;
+        for ($i = 0; $i < length($input) + $adjustment; $i++) {
+            $display .= sprintf "\\x%02x", ord substr($input, $i, 1);
+        }
+
+        $display .= '")';
+        my $warning = $test->{'warning'};
+
+        undef @warnings;
+        use warnings 'utf8';
+        $ret = &Devel::PPPort::utf8_to_uvchr_buf($input, $adjustment);
+        is($ret->[0], 0,  "returned value $display; warnings enabled");
+        is($ret->[1], -1, "returned length $display; warnings enabled");
+        my $all_warnings = join "; ", @warnings;
+        my $contains = grep { $_ =~ $warning } $all_warnings;
+        is($contains, 1, $display
+                    . "; Got: '$all_warnings', which should contain '$warning'");
+
+        undef @warnings;
+        no warnings 'utf8';
+        $ret = &Devel::PPPort::utf8_to_uvchr_buf($input, $adjustment);
+        is($ret->[0], 0xFFFD,  "returned value $display; warnings disabled");
+        is($ret->[1], $test->{'no_warnings_returned_length'},
+                      "returned length $display; warnings disabled");
+    }
+}
+
+if (ivers($]) ge ivers(5.008)) {
+    BEGIN { if (ivers($]) ge ivers(5.008)) { require utf8; "utf8"->import() } }
+
+    is(Devel::PPPort::sv_len_utf8("aščť"), 4);
+    is(Devel::PPPort::sv_len_utf8_nomg("aščť"), 4);
+
+    my $str = "áíé";
+    utf8::downgrade($str);
+    is(Devel::PPPort::sv_len_utf8($str), 3);
+    utf8::downgrade($str);
+    is(Devel::PPPort::sv_len_utf8_nomg($str), 3);
+    utf8::upgrade($str);
+    is(Devel::PPPort::sv_len_utf8($str), 3);
+    utf8::upgrade($str);
+    is(Devel::PPPort::sv_len_utf8_nomg($str), 3);
+
+    tie my $scalar, 'TieScalarCounter', "é";
+
+    is(tied($scalar)->{fetch}, 0);
+    is(tied($scalar)->{store}, 0);
+    is(Devel::PPPort::sv_len_utf8($scalar), 2);
+    is(tied($scalar)->{fetch}, 1);
+    is(tied($scalar)->{store}, 0);
+    is(Devel::PPPort::sv_len_utf8($scalar), 3);
+    is(tied($scalar)->{fetch}, 2);
+    is(tied($scalar)->{store}, 0);
+    is(Devel::PPPort::sv_len_utf8($scalar), 4);
+    is(tied($scalar)->{fetch}, 3);
+    is(tied($scalar)->{store}, 0);
+    is(Devel::PPPort::sv_len_utf8_nomg($scalar), 4);
+    is(tied($scalar)->{fetch}, 3);
+    is(tied($scalar)->{store}, 0);
+    is(Devel::PPPort::sv_len_utf8_nomg($scalar), 4);
+    is(tied($scalar)->{fetch}, 3);
+    is(tied($scalar)->{store}, 0);
+} else {
+    skip 'skip: no utf8::downgrade/utf8::upgrade support', 23;
+}
+
+package TieScalarCounter;
+
+sub TIESCALAR {
+    my ($class, $value) = @_;
+    return bless { fetch => 0, store => 0, value => $value }, $class;
+}
+
+sub FETCH {
+    BEGIN { if (main::ivers($]) ge main::ivers(5.008)) { require utf8; "utf8"->import() } }
+    my ($self) = @_;
+    $self->{fetch}++;
+    return $self->{value} .= "é";
+}
+
+sub STORE {
+    my ($self, $value) = @_;
+    $self->{store}++;
+    $self->{value} = $value;
+}
index bb5f19e..96145e6 100644 (file)
 __UNDEFINED__
 my_strnlen
 SvUOK
-utf8_to_uvchr_buf
-
-=dontwarn
-
-_ppport_utf8_to_uvchr_buf_callee
-_ppport_MIN
 
 =implementation
 
-#define _ppport_MIN(a,b) (((a) <= (b)) ? (a) : (b))
-
 __UNDEFINED__  sv_setuv(sv, uv)                     \
                STMT_START {                         \
                  UV TeMpUv = uv;                    \
@@ -36,15 +28,26 @@ __UNDEFINED__  sv_setuv(sv, uv)                     \
 
 __UNDEFINED__  newSVuv(uv)     ((uv) <= IV_MAX ? newSViv((IV)uv) : newSVnv((NV)uv))
 
+#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
+__UNDEFINED__  sv_2uv(sv)      ({ SV *_sv = (sv); (UV) (SvNOK(_sv) ? SvNV(_sv) : sv_2nv(_sv)); })
+#else
 __UNDEFINED__  sv_2uv(sv)      ((PL_Sv = (sv)), (UV) (SvNOK(PL_Sv) ? SvNV(PL_Sv) : sv_2nv(PL_Sv)))
+#endif
+
 __UNDEFINED__  SvUVX(sv)       ((UV)SvIVX(sv))
 __UNDEFINED__  SvUVXx(sv)      SvUVX(sv)
 __UNDEFINED__  SvUV(sv)        (SvIOK(sv) ? SvUVX(sv) : sv_2uv(sv))
+
+#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
+__UNDEFINED__  SvUVx(sv)       ({ SV *_sv = (sv)); SvUV(_sv); })
+#else
 __UNDEFINED__  SvUVx(sv)       ((PL_Sv = (sv)), SvUV(PL_Sv))
+#endif
 
 /* Hint: sv_uv
  * Always use the SvUVx() macro instead of sv_uv().
  */
+/* Replace sv_uv with SvUVx */
 __UNDEFINED__  sv_uv(sv)       SvUVx(sv)
 
 #if !defined(SvUOK) && defined(SvIOK_UV)
@@ -57,21 +60,10 @@ __UNDEFINED__  XSRETURN_UV(v)  STMT_START { XST_mUV(0,v);  XSRETURN(1); } STMT_E
 __UNDEFINED__  PUSHu(u)        STMT_START { sv_setuv(TARG, (UV)(u)); PUSHTARG;  } STMT_END
 __UNDEFINED__  XPUSHu(u)       STMT_START { sv_setuv(TARG, (UV)(u)); XPUSHTARG; } STMT_END
 
-#if defined UTF8SKIP
-
-/* Don't use official version because it uses MIN, which may not be available */
-#undef UTF8_SAFE_SKIP
-
-__UNDEFINED__  UTF8_SAFE_SKIP(s, e)  (                                          \
-                                      ((((e) - (s)) <= 0)                       \
-                                      ? 0                                       \
-                                      : _ppport_MIN(((e) - (s)), UTF8SKIP(s))))
-#endif
-
 #if !defined(my_strnlen)
 #if { NEED my_strnlen }
 
-STRLEN
+Size_t
 my_strnlen(const char *str, Size_t maxlen)
 {
     const char *p = str;
@@ -85,212 +77,9 @@ my_strnlen(const char *str, Size_t maxlen)
 #endif
 #endif
 
-#if { VERSION < 5.31.2 }
-        /* Versions prior to this accepted things that are now considered
-         * malformations, and didn't return -1 on error with warnings enabled
-         * */
-#  undef utf8_to_uvchr_buf
-#endif
-
-/* This implementation brings modern, generally more restricted standards to
- * utf8_to_uvchr_buf.  Some of these are security related, and clearly must
- * be done.  But its arguable that the others need not, and hence should not.
- * The reason they're here is that a module that intends to play with the
- * latest perls shoud be able to work the same in all releases.  An example is
- * that perl no longer accepts any UV for a code point, but limits them to
- * IV_MAX or below.  This is for future internal use of the larger code points.
- * If it turns out that some of these changes are breaking code that isn't
- * intended to work with modern perls, the tighter restrictions could be
- * relaxed.  khw thinks this is unlikely, but has been wrong in the past. */
-
-#ifndef utf8_to_uvchr_buf
-   /* Choose which underlying implementation to use.  At least one must be
-    * present or the perl is too early to handle this function */
-#  if defined(utf8n_to_uvchr) || defined(utf8_to_uv)
-#    if defined(utf8n_to_uvchr)   /* This is the preferred implementation */
-#      define _ppport_utf8_to_uvchr_buf_callee utf8n_to_uvchr
-#    else
-#      define _ppport_utf8_to_uvchr_buf_callee utf8_to_uv
-#    endif
-
-#  endif
-
-#ifdef _ppport_utf8_to_uvchr_buf_callee
-#  if { NEED utf8_to_uvchr_buf }
-
-UV
-utf8_to_uvchr_buf(pTHX_ const U8 *s, const U8 *send, STRLEN *retlen)
-{
-    UV ret;
-    STRLEN curlen;
-    bool overflows = 0;
-    const U8 *cur_s = s;
-    const bool do_warnings = ckWARN_d(WARN_UTF8);
-
-    if (send > s) {
-        curlen = send - s;
-    }
-    else {
-        assert(0);  /* Modern perls die under this circumstance */
-        curlen = 0;
-        if (! do_warnings) {    /* Handle empty here if no warnings needed */
-            if (retlen) *retlen = 0;
-            return UNICODE_REPLACEMENT;
-        }
-    }
-
-    /* The modern version allows anything that evaluates to a legal UV, but not
-     * overlongs nor an empty input */
-    ret = _ppport_utf8_to_uvchr_buf_callee(
-                s, curlen, retlen,   (UTF8_ALLOW_ANYUV
-                                  & ~(UTF8_ALLOW_LONG|UTF8_ALLOW_EMPTY)));
-
-    /* But actually, modern versions restrict the UV to being no more than what
-     * an IV can hold */
-    if (ret > PERL_INT_MAX) {
-        overflows = 1;
-    }
-
-#    if { VERSION < 5.26.0 }
-#      ifndef EBCDIC
-
-        /* There are bugs in versions earlier than this on non-EBCDIC platforms
-         * in which it did not detect all instances of overflow, which could be
-         * a security hole.  Also, earlier versions did not allow the overflow
-         * malformation under any circumstances, and modern ones do.  So we
-         * need to check here.  */
-
-    else if (curlen > 0 && *s >= 0xFE) {
-
-        /* If the main routine detected overflow, great; it returned 0.  But if the
-         * input's first byte indicates it could overflow, we need to verify.
-         * First, on a 32-bit machine the first byte being at least \xFE
-         * automatically is overflow */
-        if (sizeof(ret) < 8) {
-            overflows = 1;
-        }
-        else {
-            const U8 highest[] =    /* 2*63-1 */
-                        "\xFF\x80\x87\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF";
-            const U8 *cur_h = highest;
-
-            for (cur_s = s; cur_s < send; cur_s++, cur_h++) {
-                if (UNLIKELY(*cur_s == *cur_h)) {
-                    continue;
-                }
-
-                /* If this byte is larger than the corresponding highest UTF-8
-                * byte, the sequence overflows; otherwise the byte is less than
-                * (as we handled the equality case above), and so the sequence
-                * doesn't overflow */
-                overflows = *cur_s > *cur_h;
-                break;
-
-            }
-
-            /* Here, either we set the bool and broke out of the loop, or got
-             * to the end and all bytes are the same which indicates it doesn't
-             * overflow. */
-        }
-    }
-
-#      endif
-#    endif  /* < 5.26 */
-
-    if (UNLIKELY(overflows)) {
-        if (! do_warnings) {
-            if (retlen) {
-                *retlen = _ppport_MIN(*retlen, UTF8SKIP(s));
-                *retlen = _ppport_MIN(*retlen, curlen);
-            }
-            return UNICODE_REPLACEMENT;
-        }
-        else {
-
-            /* On versions that correctly detect overflow, but forbid it
-             * always, 0 will be returned, but also a warning will have been
-             * raised.  Don't repeat it */
-            if (ret != 0) {
-                /* We use the error message in use from 5.8-5.14 */
-                Perl_warner(aTHX_ packWARN(WARN_UTF8),
-                    "Malformed UTF-8 character (overflow at 0x%" UVxf
-                    ", byte 0x%02x, after start byte 0x%02x)",
-                    ret, *cur_s, *s);
-            }
-            if (retlen) {
-                *retlen = (STRLEN) -1;
-            }
-            return 0;
-        }
-    }
-
-    /* If failed and warnings are off, to emulate the behavior of the real
-     * utf8_to_uvchr(), try again, allowing anything.  (Note a return of 0 is
-     * ok if the input was '\0') */
-    if (UNLIKELY(ret == 0 && (curlen == 0 || *s != '\0'))) {
-
-        /* If curlen is 0, we already handled the case where warnings are
-         * disabled, so this 'if' will be true, and we won't look at the
-         * contents of 's' */
-        if (do_warnings) {
-            *retlen = (STRLEN) -1;
-        }
-        else {
-            ret = _ppport_utf8_to_uvchr_buf_callee(
-                                            s, curlen, retlen, UTF8_ALLOW_ANY);
-            /* Override with the REPLACEMENT character, as that is what the
-             * modern version of this function returns */
-            ret = UNICODE_REPLACEMENT;
-
-#           if { VERSION < 5.16.0 }
-
-            /* Versions earlier than this don't necessarily return the proper
-             * length.  It should not extend past the end of string, nor past
-             * what the first byte indicates the length is, nor past the
-             * continuation characters */
-            if (retlen && *retlen >= 0) {
-                *retlen = _ppport_MIN(*retlen, curlen);
-                *retlen = _ppport_MIN(*retlen, UTF8SKIP(s));
-                unsigned int i = 1;
-                do {
-                    if (s[i] < 0x80 || s[i] > 0xBF) {
-                        *retlen = i;
-                        break;
-                    }
-                } while (++i < *retlen);
-            }
-
-#           endif
-
-        }
-    }
-
-    return ret;
-}
-
-#  endif
-#endif
-#endif
-
-#if defined(UTF8SKIP) && defined(utf8_to_uvchr_buf)
-#undef utf8_to_uvchr /* Always redefine this unsafe function so that it refuses
-                        to read past a NUL, making it much less likely to read
-                        off the end of the buffer.  A NUL indicates the start
-                        of the next character anyway.  If the input isn't
-                        NUL-terminated, the function remains unsafe, as it
-                        always has been. */
-
-__UNDEFINED__  utf8_to_uvchr(s, lp)                                             \
-    ((*(s) == '\0')                                                             \
-    ? utf8_to_uvchr_buf(s,((s)+1), lp) /* Handle single NUL specially */        \
-    : utf8_to_uvchr_buf(s, (s) + my_strnlen((char *) (s), UTF8SKIP(s)), (lp)))
-
-#endif
-
 =xsinit
 
 #define NEED_my_strnlen
-#define NEED_utf8_to_uvchr_buf
 
 =xsubs
 
@@ -352,16 +141,6 @@ XPUSHu()
                 XPUSHu(43);
                 XSRETURN(1);
 
-STRLEN
-UTF8_SAFE_SKIP(s, adjustment)
-        unsigned char * s
-        int adjustment
-        CODE:
-            /* Instead of passing in an 'e' ptr, use the real end, adjusted */
-            RETVAL = UTF8_SAFE_SKIP(s, s + UTF8SKIP(s) + adjustment);
-        OUTPUT:
-            RETVAL
-
 STRLEN
 my_strnlen(s, max)
         char * s
@@ -371,169 +150,18 @@ my_strnlen(s, max)
         OUTPUT:
             RETVAL
 
-AV *
-utf8_to_uvchr_buf(s, adjustment)
-        unsigned char *s
-        int adjustment
-        PREINIT:
-            AV *av;
-            STRLEN len;
-        CODE:
-            av = newAV();
-            av_push(av, newSVuv(utf8_to_uvchr_buf(s,
-                                                  s + UTF8SKIP(s) + adjustment,
-                                                  &len)));
-            if (len == (STRLEN) -1) {
-                av_push(av, newSViv(-1));
-            }
-            else {
-                av_push(av, newSVuv(len));
-            }
-            RETVAL = av;
-        OUTPUT:
-                RETVAL
-
-AV *
-utf8_to_uvchr(s)
-        unsigned char *s
-        PREINIT:
-            AV *av;
-            STRLEN len;
-        CODE:
-            av = newAV();
-            av_push(av, newSVuv(utf8_to_uvchr(s, &len)));
-            if (len == (STRLEN) -1) {
-                av_push(av, newSViv(-1));
-            }
-            else {
-                av_push(av, newSVuv(len));
-            }
-            RETVAL = av;
-        OUTPUT:
-                RETVAL
-
-=tests plan => 52
-
-ok(&Devel::PPPort::sv_setuv(42), 42);
-ok(&Devel::PPPort::newSVuv(123), 123);
-ok(&Devel::PPPort::sv_2uv("4711"), 4711);
-ok(&Devel::PPPort::sv_2uv("1735928559"), 1735928559);
-ok(&Devel::PPPort::SvUVx("1735928559"), 1735928559);
-ok(&Devel::PPPort::SvUVx(1735928559), 1735928559);
-ok(&Devel::PPPort::SvUVx(0xdeadbeef), 0xdeadbeef);
-ok(&Devel::PPPort::XSRETURN_UV(), 42);
-ok(&Devel::PPPort::PUSHu(), 42);
-ok(&Devel::PPPort::XPUSHu(), 43);
-ok(&Devel::PPPort::UTF8_SAFE_SKIP("A", 0), 1);
-ok(&Devel::PPPort::UTF8_SAFE_SKIP("A", -1), 0);
-ok(&Devel::PPPort::my_strnlen("abc\0def", 7), 3);
-
-my $ret = &Devel::PPPort::utf8_to_uvchr("A");
-ok($ret->[0], ord("A"));
-ok($ret->[1], 1);
-
-$ret = &Devel::PPPort::utf8_to_uvchr("\0");
-ok($ret->[0], 0);
-ok($ret->[1], 1);
-
-$ret = &Devel::PPPort::utf8_to_uvchr_buf("A", 0);
-ok($ret->[0], ord("A"));
-ok($ret->[1], 1);
-
-$ret = &Devel::PPPort::utf8_to_uvchr_buf("\0", 0);
-ok($ret->[0], 0);
-ok($ret->[1], 1);
-
-if (ord("A") != 65) {   # tests not valid for EBCDIC
-    ok(1, 1) for 1 .. (2 + 4 + (5 * 5));
-}
-else {
-    $ret = &Devel::PPPort::utf8_to_uvchr_buf("\xc4\x80", 0);
-    ok($ret->[0], 0x100);
-    ok($ret->[1], 2);
-
-    my @warnings;
-    local $SIG{__WARN__} = sub { push @warnings, @_; };
-
-    {
-        use warnings 'utf8';
-        $ret = &Devel::PPPort::utf8_to_uvchr("\xe0\0\x80");
-        ok($ret->[0], 0);
-        ok($ret->[1], -1);
-
-        no warnings;
-        $ret = &Devel::PPPort::utf8_to_uvchr("\xe0\0\x80");
-        ok($ret->[0], 0xFFFD);
-        ok($ret->[1], 1);
-    }
-
-    my @buf_tests = (
-        {
-            input      => "A",
-            adjustment => -1,
-            warning    => qr/empty/,
-            no_warnings_returned_length => 0,
-        },
-        {
-            input      => "\xc4\xc5",
-            adjustment => 0,
-            warning    => qr/non-continuation/,
-            no_warnings_returned_length => 1,
-        },
-        {
-            input      => "\xc4\x80",
-            adjustment => -1,
-            warning    => qr/short|1 byte, need 2/,
-            no_warnings_returned_length => 1,
-        },
-        {
-            input      => "\xc0\x81",
-            adjustment => 0,
-            warning    => qr/overlong|2 bytes, need 1/,
-            no_warnings_returned_length => 2,
-        },
-        {                 # Old algorithm supposedly failed to detect this
-            input      => "\xff\x80\x90\x90\x90\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf",
-            adjustment => 0,
-            warning    => qr/overflow/,
-            no_warnings_returned_length => 13,
-        },
-    );
-
-    # An empty input is an assertion failure on debugging builds.  It is
-    # deliberately the first test.
-    require Config; import Config;
-    use vars '%Config';
-    if ($Config{ccflags} =~ /-DDEBUGGING/) {
-        shift @buf_tests;
-        ok(1, 1) for 1..5;
-    }
-
-    for my $test (@buf_tests) {
-        my $input = $test->{'input'};
-        my $adjustment = $test->{'adjustment'};
-        my $display = 'utf8_to_uvchr_buf("';
-        for (my $i = 0; $i < length($input) + $adjustment; $i++) {
-            $display .= sprintf "\\x%02x", ord substr($input, $i, 1);
-        }
-
-        $display .= '")';
-        my $warning = $test->{'warning'};
-
-        undef @warnings;
-        use warnings 'utf8';
-        $ret = &Devel::PPPort::utf8_to_uvchr_buf($input, $adjustment);
-        ok($ret->[0], 0,  "returned value $display; warnings enabled");
-        ok($ret->[1], -1, "returned length $display; warnings enabled");
-        my $all_warnings = join "; ", @warnings;
-        my $contains = grep { $_ =~ $warning } $all_warnings;
-        ok($contains, 1, $display . "; '$all_warnings' contains '$warning'");
-
-        undef @warnings;
-        no warnings 'utf8';
-        $ret = &Devel::PPPort::utf8_to_uvchr_buf($input, $adjustment);
-        ok($ret->[0], 0xFFFD,  "returned value $display; warnings disabled");
-        ok($ret->[1], $test->{'no_warnings_returned_length'},
-                      "returned length $display; warnings disabled");
-    }
-}
+=tests plan => 11
+
+BEGIN { require warnings if "$]" > '5.006' }
+
+is(&Devel::PPPort::sv_setuv(42), 42);
+is(&Devel::PPPort::newSVuv(123), 123);
+is(&Devel::PPPort::sv_2uv("4711"), 4711);
+is(&Devel::PPPort::sv_2uv("1735928559"), 1735928559);
+is(&Devel::PPPort::SvUVx("1735928559"), 1735928559);
+is(&Devel::PPPort::SvUVx(1735928559), 1735928559);
+is(&Devel::PPPort::SvUVx(0xdeadbeef), 0xdeadbeef);
+is(&Devel::PPPort::XSRETURN_UV(), 42);
+is(&Devel::PPPort::PUSHu(), 42);
+is(&Devel::PPPort::XPUSHu(), 43);
+is(&Devel::PPPort::my_strnlen("abc\0def", 7), 3);
index 83dd5e8..cc984c8 100644 (file)
@@ -18,6 +18,7 @@ PL_DBsingle
 PL_DBsub
 PL_DBtrace
 PL_Sv
+PL_Xpv
 PL_bufend
 PL_bufptr
 PL_compiling
@@ -58,6 +59,7 @@ PL_tainted
 PL_tainting
 PL_tokenbuf
 PL_signals
+PL_mess_sv
 PERL_SIGNALS_UNSAFE_FLAG
 
 =implementation
@@ -97,6 +99,7 @@ __NEED_VAR__ U32 PL_signals = D_PPP_PERL_SIGNALS_INIT;
 #  define PL_DBsub                  DBsub
 #  define PL_DBtrace                DBtrace
 #  define PL_Sv                     Sv
+#  define PL_Xpv                    Xpv
 #  define PL_bufend                 bufend
 #  define PL_bufptr                 bufptr
 #  define PL_compiling              compiling
@@ -134,13 +137,14 @@ __NEED_VAR__ U32 PL_signals = D_PPP_PERL_SIGNALS_INIT;
 #  define PL_tainted                tainted
 #  define PL_tainting               tainting
 #  define PL_tokenbuf               tokenbuf
+#  define PL_mess_sv                mess_sv
 /* Replace: 0 */
 #endif
 
 /* Warning: PL_parser
  * For perl versions earlier than 5.9.5, this is an always
  * non-NULL dummy. Also, it cannot be dereferenced. Don't
- * use it if you can avoid is and unless you absolutely know
+ * use it if you can avoid it, and unless you absolutely know
  * what you're doing.
  * If you always check that PL_parser is non-NULL, you can
  * define DPPP_PL_parser_NO_DUMMY to avoid the creation of
@@ -438,13 +442,13 @@ ok(Devel::PPPort::compare_PL_signals());
 ok(!defined(&Devel::PPPort::PL_sv_undef()));
 ok(&Devel::PPPort::PL_sv_yes());
 ok(!&Devel::PPPort::PL_sv_no());
-ok(&Devel::PPPort::PL_na("abcd"), 4);
-ok(&Devel::PPPort::PL_Sv(), "mhx");
+is(&Devel::PPPort::PL_na("abcd"), 4);
+is(&Devel::PPPort::PL_Sv(), "mhx");
 ok(defined &Devel::PPPort::PL_tokenbuf());
 ok("$]" >= 5.009005 || &Devel::PPPort::PL_parser());
 ok(&Devel::PPPort::PL_hexdigit() =~ /^[0-9a-zA-Z]+$/);
 ok(defined &Devel::PPPort::PL_hints());
-ok(&Devel::PPPort::PL_ppaddr("mhx"), "MHX");
+is(&Devel::PPPort::PL_ppaddr("mhx"), "MHX");
 
 for (&Devel::PPPort::other_variables()) {
   ok($_ != 0);
@@ -470,7 +474,7 @@ for (&Devel::PPPort::other_variables()) {
   else {
     ok(@w == 0);
   }
-  ok($fail, 0);
+  is($fail, 0);
 }
 
 ok(&Devel::PPPort::no_dummy_parser_vars(1) >= ("$]" < 5.009005 ? 1 : 0));
@@ -478,7 +482,7 @@ ok(&Devel::PPPort::no_dummy_parser_vars(1) >= ("$]" < 5.009005 ? 1 : 0));
 eval { &Devel::PPPort::no_dummy_parser_vars(0) };
 
 if ("$]" < 5.009005) {
-  ok($@, '');
+  is($@, '');
 }
 else {
   if ($@) {
index b4a5695..32c772e 100644 (file)
@@ -159,7 +159,7 @@ ok("$]" >= 5.004 ? $warning =~ /^Perl_warner_nocontext bar:42/ : $warning eq '')
 
 $warning = '';
 Devel::PPPort::ckWARN();
-ok($warning, '');
+is($warning, '');
 
 $^W = 1;
 
index efa648f..4d34f77 100644 (file)
@@ -1,5 +1,7 @@
 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 :
+:  !!!! Do NOT edit this file directly! -- Edit devel/mkppport_fnc.pl instead. !!!!
+:
 :  Perl/Pollution/Portability
 :
 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 :  modify it under the same terms as Perl itself.
 :
 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
 :
 : This file lists all API functions/macros that are provided purely
-: by Devel::PPPort. It is in the same format as the F<embed.fnc> that
-: ships with the Perl source code.
+: by Devel::PPPort, or that are not public.  It is in the same format as the
+: F<embed.fnc> that ships with the Perl source code.
 :
+: Since these are used only to provide the argument types, it's ok to have the
+: return value be void for some where it's an issues
 
-Am      |void   |sv_magic_portable|NN SV* sv|NULLOK SV* obj|int how|NULLOK const char* name \
-                                |I32 namlen
+Amn|void|aTHXR
+Amn|void|aTHXR_
+md|int|AvFILLp|AV* av
+Amn|void|DEFSV
+Amn|void|dMY_CXT_SV
+Amn|void|dNOOP
+Amn|void|dTHXR
+Amn|void|dXSTARG
+Amn|void|END_EXTERN_C
+Amn|void|EXTERN_C
+Amn|void|GV_NOADD_MASK
+Amn|void|IN_PERL_COMPILETIME
+Amn|void|NOOP
+Amn|void|PERL_BCDVERSION
+Amn|void|Perl_eval_pv
+Amn|void|Perl_eval_sv
+Amn|void|PERL_MAGIC_glob
+Amn|void|PERL_MAGIC_mutex
+Amn|void|PERL_MAGIC_overload
+Amn|void|PERL_MAGIC_overload_elem
+Amn|void|PERL_PV_PRETTY_DUMP
+Amn|void|PERL_PV_PRETTY_NOCLEAR
+Amn|void|PERL_PV_PRETTY_REGPROP
+Amn|void|PERL_SIGNALS_UNSAFE_FLAG
+Amn|void|PERL_UINT_MIN
+Amn|void|PERL_UNUSED_CONTEXT
+Amn|void|PERL_UNUSED_DECL
+Amn|void|PERL_USE_GCC_BRACE_GROUPS
+Amn|void|PL_bufend
+Amn|void|PL_bufptr
+Amn|void|PL_compiling
+Amn|void|PL_copline
+Amn|void|PL_DBsignal
+mnd|SV *|PL_DBsingle
+mnd|GV *|PL_DBsub
+mnd|SV *|PL_DBtrace
+Amn|void|PL_debstash
+Amn|void|PL_diehook
+Amn|void|PL_dirty
+mnd|U8|PL_dowarn
+Amn|void|PL_error_count
+Amn|void|PL_expect
+Amn|void|PL_hexdigit
+Amn|void|PL_hints
+Amn|void|PL_in_my
+Amn|void|PL_in_my_stash
+Amn|void|PL_laststatval
+Amn|void|PL_lex_state
+Amn|void|PL_lex_stuff
+Amn|void|PL_linestr
+Amn|void|PL_mess_sv
+Amn|void|PL_no_modify
+Amn|void|PL_perldb
+Amn|void|PL_ppaddr
+Amn|void|PL_rsfp
+Amn|void|PL_rsfp_filters
+Amn|void|PL_stack_base
+Amn|void|PL_stack_sp
+Amn|void|PL_statcache
+Amn|void|PL_stdingv
+Amn|void|PL_Sv
+Amn|void|PL_sv_arenaroot
+Amn|void|PL_tainted
+Amn|void|PL_tainting
+Amn|void|PL_tokenbuf
+Amn|void|PL_Xpv
+Amn|void|PTRV
+Amn|void|SAVE_DEFSV
+Amn|void|START_EXTERN_C
+Amn|void|SV_CONST_RETURN
+Amn|void|SV_COW_SHARED_HASH_KEYS
+Am|void|sv_magic_portable|NN SV* sv|NULLOK SV* obj|int how|NULLOK const char* name|I32 namlen
+Amn|void|SV_MUTABLE_RETURN
+Amn|void|SV_UTF8_NO_ENCODING
+Amn|void|WARN_ASSERTIONS
+Amn|void|XSprePUSH
index e84f646..c73e2b0 100644 (file)
@@ -2,6 +2,9 @@
 #
 #  ppptools.pl -- various utility functions
 #
+#  WARNING: This will be called by old perls.  You can't use modern constructs
+#  in it.
+#
 ################################################################################
 #
 #  Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
@@ -13,6 +16,8 @@
 #
 ################################################################################
 
+require './parts/inc/inctools';
+
 sub cat_file
 {
   eval { require File::Spec };
@@ -33,6 +38,18 @@ sub all_files_in_dir
 
 sub parse_todo
 {
+  # Creates a hash with the keys being all symbols found in all the files in
+  # the input directory (default 'parts/todo'), and the values being each a
+  # subhash like so:
+  #     'utf8_hop_forward' => {
+  #                               'code' => 'U',
+  #                               'version' => '5.025007'
+  #                           },
+  #
+  # The input line that generated that was this:
+  #
+  #     utf8_hop_forward               # U
+
   my $dir = shift || 'parts/todo';
   local *TODO;
   my %todo;
@@ -40,16 +57,18 @@ sub parse_todo
 
   for $todo (all_files_in_dir($dir)) {
     open TODO, $todo or die "cannot open $todo: $!\n";
-    my $perl = <TODO>;
-    chomp $perl;
+    my $version = <TODO>;
+    chomp $version;
     while (<TODO>) {
       chomp;
-      s/#.*//;
+      s/#(?: (\w)\b)?.*//;  # 'code' is optional
+      my $code = $1;
       s/^\s+//; s/\s+$//;
       /^\s*$/ and next;
       /^\w+$/ or die "invalid identifier: $_\n";
-      exists $todo{$_} and die "duplicate identifier: $_ ($todo{$_} <=> $perl)\n";
-      $todo{$_} = $perl;
+      exists $todo{$_} and die "duplicate identifier: $_ ($todo{$_} <=> $version)\n";
+      $todo{$_}{'version'} = $version;
+      $todo{$_}{'code'} = $code if $code;
     }
     close TODO;
   }
@@ -70,6 +89,7 @@ sub parse_partspec
 {
   my $file = shift;
   my $section = 'implementation';
+
   my $vsec = join '|', qw( provides dontwarn implementation
                            xsubs xsinit xsmisc xshead xsboot tests );
   my(%data, %options);
@@ -82,7 +102,9 @@ sub parse_partspec
       m!//! && !m!(?:=~|s/).*//! && !m!(?:ht|f)tp(?:s)://!
           and warn "$file:$.: warning: potential C++ comment\n";
     }
+
     /^##/ and next;
+
     if (/^=($vsec)(?:\s+(.*))?/) {
       $section = $1;
       if (defined $2) {
@@ -103,8 +125,14 @@ sub parse_partspec
     $data{$_} = join '', @v;
   }
 
-  unless (exists $data{provides}) {
-    $data{provides} = ($file =~ /(\w+)\.?$/)[0];
+  if (! exists $data{provides}) {
+    if ($file =~ /inctools$/) { # This file is special, it doesn't 'provide'
+                                # any API, but has subs to use internally
+      $data{provides} = "";
+    }
+    else {
+      $data{provides} = ($file =~ /(\w+)\.?$/)[0];
+    }
   }
   $data{provides} = [$data{provides} =~ /(\S+)/g];
 
@@ -224,7 +252,8 @@ sub ppcond
   join " && ", @c;
 }
 
-sub trim_arg
+sub trim_arg        # Splits the argument into type and name, returning the
+                    # pair: (type, name)
 {
   my $in = shift;
   my $remove = join '|', qw( NN NULLOK VOL );
@@ -232,40 +261,45 @@ sub trim_arg
   $in eq '...' and return ($in);
 
   local $_ = $in;
-  my $id;
+  my $name;                 # Work on the name
 
-  s/[*()]/ /g;
-  s/\[[^\]]*\]/ /g;
+  s/[*()]/ /g;              # Get rid of this punctuation
+  s/ \[ [^\]]* \] / /xg;    # Get rid of dimensions
   s/\b(?:auto|const|extern|inline|register|static|volatile|restrict)\b//g;
   s/\b(?:$remove)\b//;
-  s/^\s*//; s/\s*$//;
+  s/^\s+//; s/\s+$//;       # No leading, trailing space
 
-  if( /^\b(?:struct|union|enum)\s+\w+(?:\s+(\w+))?$/ ) {
-    defined $1 and $id = $1;
+  if( /^\b (?:struct|union|enum) \s+ \w+ (?: \s+ ( \w+ ) )? $/x ) {
+    defined $1 and $name = $1;    # Extract the name for one of these declarations
   }
   else {
     if( s/\b(?:char|double|float|int|long|short|signed|unsigned|void)\b//g ) {
-      /^\s*(\w+)\s*$/ and $id = $1;
+      /^ \s* (\w+) \s* $/x and $name = $1;    # Similarly for these
+    }
+    elsif (/^ \s* " [^"]+ " \s+ (\w+) \s* $/x) { # A literal string (is special)
+        $name = $1;
     }
     else {
-      /^\s*\w+\s+(\w+)\s*$/ and $id = $1;
+      /^ \s* \w+ \s+ (\w+) \s* $/x and $name = $1; # Everything else.
     }
   }
 
-  $_ = $in;
+  $_ = $in;     # Now work on the type.
 
-  defined $id and s/\b$id\b//;
+  # Get rid of the name if we found one
+  defined $name and s/\b$name\b//;
 
-  # these don't matter at all
+  # these don't matter at all; note that const does matter
   s/\b(?:auto|extern|inline|register|static|volatile|restrict)\b//g;
   s/\b(?:$remove)\b//;
 
-  s/(?=<\*)\s+(?=\*)//g;
-  s/\s*(\*+)\s*/ $1 /g;
-  s/^\s*//; s/\s*$//;
-  s/\s+/ /g;
+  while (s/ \* \s+ \* /**/xg) {}  # No spaces within pointer sequences
+  s/ \s* ( \*+ ) \s* / $1 /xg;    # Normalize pointer sequences to be surrounded
+                                  # by a single space
+  s/^\s+//; s/\s+$//;             # No leading, trailing spacd
+  s/\s+/ /g;                      # Collapse multiple space into one
 
-  return ($_, $id);
+  return ($_, $name);
 }
 
 sub parse_embed
@@ -306,7 +340,27 @@ sub parse_embed
         my @e = split /\s*\|\s*/, $line;
         if( @e >= 3 ) {
           my($flags, $ret, $name, @args) = @e;
-          next if $flags =~ /[DM]/; # Skip entries marked as deprecated or unstable
+
+          # Skip non-name entries, like
+          #    PL_parser-E<gt>linestr
+          # which documents a struct entry rather than a function.  We retain
+          # all other entries, so that our caller has full information, and
+          # may skip things like non-public functions.
+          next if $flags =~ /N/;
+
+          # M implies m for the purposes of this module.
+          $flags .= 'm' if $flags =~ /M/;
+
+          # An entry marked 'b' is in mathoms, so is effectively deprecated,
+          # as it can be removed at anytime.  But if it also has a macro to
+          # implement it, that macro stays when mathoms is removed, so the
+          # non-'Perl_' form isn't deprecated.  embed.fnc is supposed to have
+          # already set this up, but make sure.
+          if ($flags =~ /b/ && $flags !~ /m/ && $flags !~ /D/) {
+            warn "Expecting D flag for '$name', since it is b without [Mm]";
+            $flags .= 'D';
+          }
+
           if ($name =~ /^[^\W\d]\w*$/) {
             for (@args) {
               $_ = [trim_arg($_)];
@@ -319,11 +373,7 @@ sub parse_embed
               args  => \@args,
               cond  => ppcond(\@pps),
             };
-          }
-          elsif ($name =~ /^[^\W\d]\w*-E<gt>[^\W\d]\w*$/) {
-            # silenty ignore entries of the form
-            #    PL_parser-E<gt>linestr
-            # which documents a struct entry rather than a function
+            $func[-1]{'ppport_fnc'} = 1 if $file =~ /ppport\.fnc/;
           }
           else {
             warn "mysterious name [$name] in $file, line $.\n";
@@ -335,71 +385,94 @@ sub parse_embed
     close FILE;
   }
 
-  return @func;
-}
+  # Here's what two elements of the array look like:
+  # {
+  #              'args' => [
+  #                          [
+  #                            'const nl_item',
+  #                            'item'
+  #                          ]
+  #                        ],
+  #              'cond' => '(defined(HAS_NL_LANGINFO) && defined(PERL_LANGINFO_H))',
+  #              'flags' => {
+  #                           'A' => 1,
+  #                           'T' => 1,
+  #                           'd' => 1,
+  #                           'o' => 1
+  #                         },
+  #              'name' => 'Perl_langinfo',
+  #              'ret' => 'const char *'
+  #            },
+  #            {
+  #              'args' => [
+  #                          [
+  #                            'const int',
+  #                            'item'
+  #                          ]
+  #                        ],
+  #              'cond' => '!(defined(HAS_NL_LANGINFO) && defined(PERL_LANGINFO_H))',
+  #              'flags' => {
+  #                           'A' => 1,
+  #                           'T' => 1,
+  #                           'd' => 1,
+  #                           'o' => 1
+  #                         },
+  #              'name' => 'Perl_langinfo',
+  #              'ret' => 'const char *'
+  #            },
 
-sub make_prototype
-{
-  my $f = shift;
-  my @args = map { "@$_" } @{$f->{args}};
-  my $proto;
-  my $pTHX_ = exists $f->{flags}{n} ? "" : "pTHX_ ";
-  $proto = "$f->{ret} $f->{name}" . "($pTHX_" . join(', ', @args) . ')';
-  return $proto;
+  return @func;
 }
 
-sub format_version
+sub known_but_hard_to_test_for
 {
-  my $ver = shift;
-
-  $ver =~ s/$/000000/;
-  my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/;
-
-  $v = int $v;
-  $s = int $s;
-
-  if ($r < 5 || ($r == 5 && $v < 6)) {
-    if ($s % 10) {
-      die "invalid version '$ver'\n";
+    # This returns a list of functions/symbols that are in Perl, but the tests
+    # for their existence don't work, usually as a result of them being XS,
+    # and using XS to test.  Effectively, any XS code that compiles and works
+    # is exercising most of these XS-related ones.
+    #
+    # The values for the keys are each the version that ppport.h makes them
+    # work on, and were gleaned by manually looking at the code parts/inc/*.
+    # For non-ppport.h, scanprov will automatically figure out the version
+    # they were introduced in.
+
+    my %return;
+
+    for (qw(CLASS dXSI32 items ix pTHX_ RETVAL StructCopy svtype
+            STMT_START STMT_END STR_WITH_LEN THIS XS))
+    {
+        # __MIN_PERL__ is this at the time of this commit.  This is the
+        # earliest these have been tested to at the time of the commit, but
+        # likely go back further.
+        $return{$_} = '5.003_07';
+    }
+    for (qw(_pMY_CXT pMY_CXT_)) {
+        $return{$_} = '5.9.0';
+    }
+    for (qw(XopDISABLE XopENABLE XopENTRY XopENTRYCUSTOM XopENTRY_set)) {
+        $return{$_} = '5.13.7';
+    }
+    for (qw(XS_EXTERNAL XS_INTERNAL)) {
+        $return{$_} = '5.15.2';
     }
-    $s /= 10;
-
-    $ver = sprintf "%d.%03d", $r, $v;
-    $s > 0 and $ver .= sprintf "_%02d", $s;
-
-    return $ver;
-  }
 
-  return sprintf "%d.%d.%d", $r, $v, $s;
+    return \%return;
 }
 
-sub parse_version
+sub normalize_prototype  # So that they can be compared more easily
 {
-  my $ver = shift;
-
-  if ($ver =~ /^(\d+)\.(\d+)\.(\d+)$/) {
-    return ($1, $2, $3);
-  }
-  elsif ($ver !~ /^\d+\.\d{3}(?:_\d{2})?$/) {
-    die "cannot parse version '$ver'\n";
-  }
-
-  $ver =~ s/_//g;
-  $ver =~ s/$/000000/;
-
-  my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/;
-
-  $v = int $v;
-  $s = int $s;
-
-  if ($r < 5 || ($r == 5 && $v < 6)) {
-    if ($s % 10) {
-      die "cannot parse version '$ver'\n";
-    }
-    $s /= 10;
-  }
-
-  return ($r, $v, $s);
+    my $proto = shift;
+    $proto =~ s/\s* \* \s* / * /xg;
+    return $proto;
 }
 
+sub make_prototype
+{
+  my $f = shift;
+  my @args = map { "@$_" } @{$f->{args}};
+  my $proto;
+  my $pTHX_ = exists $f->{flags}{T} ? "" : "pTHX_ ";
+  $proto = "$f->{ret} $f->{name}" . "($pTHX_" . join(', ', @args) . ')';
+  return normalize_prototype($proto);
+}
 1;
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5003007 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5003007
new file mode 100644 (file)
index 0000000..fc87a0c
--- /dev/null
@@ -0,0 +1,912 @@
+5.003007
+amagic_call                    # T
+aTHX                           # T
+aTHX_                          # T
+aTHXR                          # T
+aTHXR_                         # T
+av_clear                       # T
+av_extend                      # T
+av_fetch                       # T
+av_fill                        # T
+AvFILL                         # T
+AvFILLp                        # T
+av_len                         # T
+av_make                        # T
+av_pop                         # T
+av_push                        # T
+av_shift                       # T
+av_store                       # T
+av_tindex                      # T
+av_top_index                   # T
+av_undef                       # T
+av_unshift                     # T
+ax                             # T
+BIN                            # T
+BOM_UTF8                       # T
+boolSV                         # T
+BYTEORDER                      # T
+call_argv                      # T
+call_method                    # T
+call_pv                        # T
+call_sv                        # T
+C_ARRAY_END                    # T
+C_ARRAY_LENGTH                 # T
+CASTFLAGS                      # T
+cBOOL                          # T
+ckWARN                         # T
+Copy                           # T
+CopyD                          # T
+CPPMINUS                       # T
+CPPSTDIN                       # T
+croak                          # T
+croak_memory_wrap              # T
+croak_no_modify                # T
+croak_sv                       # T
+croak_xs_usage                 # T
+cv_clone                       # T
+cv_const_sv                    # T
+CvDEPTH                        # T
+CvGV                           # T
+CvSTASH                        # T
+cv_undef                       # T
+cxinc                          # T
+dAX                            # T
+dAXMARK                        # T
+DEFSV                          # T
+die                            # T
+die_sv                         # T
+dITEMS                         # T
+dMARK                          # T
+dNOOP                          # T
+do_close                       # T
+do_join                        # T
+do_open                        # T
+dORIGMARK                      # T
+do_sprintf                     # T
+dounwind                       # T
+dowantarray                    # T
+dSP                            # T
+dTHR                           # T
+dTHX                           # T
+dTHXR                          # T
+dUNDERBAR                      # T
+dVAR                           # T
+dXCPT                          # T
+dXSARGS                        # T
+dXSTARG                        # T
+END_EXTERN_C                   # T
+ENTER                          # T
+ERRSV                          # T
+eval_pv                        # T
+eval_sv                        # T
+EXTEND                         # T
+EXTERN_C                       # T
+filter_add                     # T
+filter_del                     # T
+filter_read                    # T
+free_tmps                      # T
+FREETMPS                       # T
+G_ARRAY                        # T
+G_DISCARD                      # T
+get_av                         # T
+get_cv                         # T
+get_cvn_flags                  # T
+get_hv                         # T
+get_sv                         # T
+G_EVAL                         # T
+GIMME                          # T
+G_METHOD                       # T
+G_NOARGS                       # T
+gp_free                        # T
+gp_ref                         # T
+G_RETHROW                      # T
+grok_bin                       # T
+grok_hex                       # T
+grok_number                    # T
+GROK_NUMERIC_RADIX             # T
+grok_numeric_radix             # T
+grok_oct                       # T
+G_SCALAR                       # T
+GV_ADD                         # T
+GV_ADDMULTI                    # T
+GvAV                           # T
+gv_AVadd                       # T
+gv_check                       # T
+GvCV                           # T
+gv_efullname                   # T
+gv_efullname3                  # T
+gv_fetchfile                   # T
+gv_fetchmeth                   # T
+gv_fetchmethod                 # T
+gv_fetchpv                     # T
+gv_fetchpvn_flags              # T
+gv_fetchsv                     # T
+gv_fullname                    # T
+gv_fullname3                   # T
+GvHV                           # T
+gv_HVadd                       # T
+gv_init                        # T
+gv_init_pvn                    # T
+gv_IOadd                       # T
+GV_NOADD_MASK                  # T
+gv_stashpv                     # T
+gv_stashpvn                    # T
+gv_stashpvs                    # T
+gv_stashsv                     # T
+GvSV                           # T
+HEf_SVKEY                      # T
+HeHASH                         # T
+HeKEY                          # T
+HeKLEN                         # T
+HeSVKEY                        # T
+HeSVKEY_force                  # T
+HeVAL                          # T
+hv_clear                       # T
+hv_delete                      # T
+hv_delete_ent                  # T
+hv_exists                      # T
+hv_exists_ent                  # T
+hv_fetch                       # T
+hv_fetch_ent                   # T
+hv_fetchs                      # T
+HvFILL                         # T
+hv_iterinit                    # T
+hv_iterkey                     # T
+hv_iterkeysv                   # T
+hv_iternext                    # T
+hv_iternextsv                  # T
+hv_iterval                     # T
+hv_ksplit                      # T
+hv_magic                       # T
+HvNAME                         # T
+hv_store                       # T
+hv_store_ent                   # T
+hv_stores                      # T
+hv_undef                       # T
+ibcmp                          # T
+IN_PERL_COMPILETIME            # T
+instr                          # T
+INT2PTR                        # T
+INTSIZE                        # T
+isALNUM                        # T
+isALNUM_A                      # T
+isALNUMC                       # T
+isALNUMC_A                     # T
+isALNUMC_L1                    # T
+isALPHA                        # T
+isALPHA_A                      # T
+isALPHA_L1                     # T
+isALPHANUMERIC                 # T
+isALPHANUMERIC_A               # T
+isALPHANUMERIC_L1              # T
+isASCII                        # T
+isASCII_A                      # T
+isASCII_L1                     # T
+isASCII_LC                     # T
+isASCII_utf8_safe              # T
+isASCII_uvchr                  # T
+isBLANK                        # T
+isBLANK_A                      # T
+isBLANK_L1                     # T
+isBLANK_LC                     # T
+isCNTRL                        # T
+isCNTRL_A                      # T
+isCNTRL_L1                     # T
+isDIGIT                        # T
+isDIGIT_A                      # T
+isDIGIT_L1                     # T
+isGRAPH                        # T
+isGRAPH_A                      # T
+isGRAPH_L1                     # T
+isIDCONT                       # T
+isIDCONT_A                     # T
+isIDCONT_L1                    # T
+isIDFIRST                      # T
+isIDFIRST_A                    # T
+isIDFIRST_L1                   # T
+isLOWER                        # T
+isLOWER_A                      # T
+isLOWER_L1                     # T
+IS_NUMBER_GREATER_THAN_UV_MAX  # T
+IS_NUMBER_INFINITY             # T
+IS_NUMBER_IN_UV                # T
+IS_NUMBER_NAN                  # T
+IS_NUMBER_NEG                  # T
+IS_NUMBER_NOT_INT              # T
+isOCTAL                        # T
+isOCTAL_A                      # T
+isOCTAL_L1                     # T
+isPRINT                        # T
+isPRINT_A                      # T
+isPRINT_L1                     # T
+isPSXSPC                       # T
+isPSXSPC_A                     # T
+isPSXSPC_L1                    # T
+isPUNCT                        # T
+isPUNCT_A                      # T
+isPUNCT_L1                     # T
+isSPACE                        # T
+isSPACE_A                      # T
+isSPACE_L1                     # T
+isUPPER                        # T
+isUPPER_A                      # T
+isUPPER_L1                     # T
+isWORDCHAR                     # T
+isWORDCHAR_A                   # T
+isWORDCHAR_L1                  # T
+isXDIGIT                       # T
+isXDIGIT_A                     # T
+isXDIGIT_L1                    # T
+isXDIGIT_LC                    # T
+IVdf                           # T
+IVSIZE                         # T
+IVTYPE                         # T
+LATIN1_TO_NATIVE               # T
+LEAVE                          # T
+leave_scope                    # T
+LIKELY                         # T
+load_module                    # T
+LONGSIZE                       # T
+looks_like_number              # T
+MARK                           # T
+memCHRs                        # T
+memEQ                          # T
+memEQs                         # T
+memNE                          # T
+memNEs                         # T
+mg_clear                       # T
+mg_copy                        # T
+mg_find                        # T
+mg_findext                     # T
+mg_free                        # T
+mg_get                         # T
+mg_magical                     # T
+mg_set                         # T
+moreswitches                   # T
+Move                           # T
+MoveD                          # T
+mPUSHi                         # T
+mPUSHn                         # T
+mPUSHp                         # T
+mPUSHs                         # T
+mPUSHu                         # T
+mXPUSHi                        # T
+mXPUSHn                        # T
+mXPUSHp                        # T
+mXPUSHs                        # T
+mXPUSHu                        # T
+my_exit                        # T
+my_pclose                      # T
+my_popen                       # T
+my_setenv                      # T
+my_snprintf                    # T
+my_sprintf                     # T
+my_strlcat                     # T
+my_strlcpy                     # T
+my_strnlen                     # T
+NATIVE_TO_LATIN1               # T
+NATIVE_TO_UNI                  # T
+newANONHASH                    # T
+newANONLIST                    # T
+newANONSUB                     # T
+newASSIGNOP                    # T
+newAV                          # T
+newAVREF                       # T
+newBINOP                       # T
+newCONDOP                      # T
+newCONSTSUB                    # T
+newCVREF                       # T
+newFORM                        # T
+newGVgen                       # T
+newGVOP                        # T
+newGVREF                       # T
+newHV                          # T
+newHVREF                       # T
+newIO                          # T
+newLISTOP                      # T
+newLOGOP                       # T
+newLOOPEX                      # T
+newLOOPOP                      # T
+newNULLLIST                    # T
+newOP                          # T
+newPMOP                        # T
+newPROG                        # T
+newPVOP                        # T
+newRANGE                       # T
+newRV                          # T
+newRV_inc                      # T
+newRV_noinc                    # T
+newSLICEOP                     # T
+newSTATEOP                     # T
+newSUB                         # T
+newSV                          # T
+newSViv                        # T
+newSVnv                        # T
+newSVOP                        # T
+newSVpv                        # T
+newSVpvn                       # T
+newSVpvn_flags                 # T
+newSVpvn_share                 # T
+newSVpvn_utf8                  # T
+newSVpvs                       # T
+newSVpvs_flags                 # T
+newSVpvs_share                 # T
+newSVREF                       # T
+newSVrv                        # T
+newSVsv                        # T
+newSVsv_flags                  # T
+newSVsv_nomg                   # T
+newSV_type                     # T
+newSVuv                        # T
+newUNOP                        # T
+Newx                           # T
+Newxc                          # T
+Newxz                          # T
+ninstr                         # T
+NOOP                           # T
+Nullav                         # T
+Nullch                         # T
+Nullcv                         # T
+Nullhv                         # T
+Nullsv                         # T
+NVef                           # T
+NVff                           # T
+NVgf                           # T
+NVTYPE                         # T
+OPf_KIDS                       # T
+op_free                        # T
+OpHAS_SIBLING                  # T
+OpLASTSIB_set                  # T
+OpMAYBESIB_set                 # T
+OpMORESIB_set                  # T
+OPpENTERSUB_AMPER              # T
+OpSIBLING                      # T
+ORIGMARK                       # T
+OSNAME                         # T
+pad_alloc                      # T
+PERL_ABS                       # T
+perl_alloc                     # T
+PERL_BCDVERSION                # T
+perl_construct                 # T
+Perl_eval_pv                   # T
+Perl_eval_sv                   # T
+perl_free                      # T
+PERL_HASH                      # T
+PERL_INT_MAX                   # T
+PERL_INT_MIN                   # T
+PerlIO_canset_cnt              # T
+PerlIO_exportFILE              # T
+PerlIO_fast_gets               # T
+PerlIO_fdopen                  # T
+PerlIO_findFILE                # T
+PerlIO_getc                    # T
+PerlIO_getpos                  # T
+PerlIO_has_base                # T
+PerlIO_has_cntptr              # T
+PerlIO_importFILE              # T
+PerlIO_open                    # T
+PerlIO_printf                  # T
+PerlIO_putc                    # T
+PerlIO_puts                    # T
+PerlIO_releaseFILE             # T
+PerlIO_reopen                  # T
+PerlIO_rewind                  # T
+PerlIO_setpos                  # T
+PerlIO_stdoutf                 # T
+PerlIO_ungetc                  # T
+PerlIO_vprintf                 # T
+PERL_LOADMOD_DENY              # T
+PERL_LOADMOD_IMPORT_OPS        # T
+PERL_LOADMOD_NOIMPORT          # T
+PERL_LONG_MAX                  # T
+PERL_LONG_MIN                  # T
+PERL_MAGIC_arylen              # T
+PERL_MAGIC_backref             # T
+PERL_MAGIC_bm                  # T
+PERL_MAGIC_collxfrm            # T
+PERL_MAGIC_dbfile              # T
+PERL_MAGIC_dbline              # T
+PERL_MAGIC_defelem             # T
+PERL_MAGIC_env                 # T
+PERL_MAGIC_envelem             # T
+PERL_MAGIC_ext                 # T
+PERL_MAGIC_fm                  # T
+PERL_MAGIC_glob                # T
+PERL_MAGIC_isa                 # T
+PERL_MAGIC_isaelem             # T
+PERL_MAGIC_mutex               # T
+PERL_MAGIC_nkeys               # T
+PERL_MAGIC_overload            # T
+PERL_MAGIC_overload_elem       # T
+PERL_MAGIC_overload_table      # T
+PERL_MAGIC_pos                 # T
+PERL_MAGIC_qr                  # T
+PERL_MAGIC_regdata             # T
+PERL_MAGIC_regdatum            # T
+PERL_MAGIC_regex_global        # T
+PERL_MAGIC_shared              # T
+PERL_MAGIC_shared_scalar       # T
+PERL_MAGIC_sig                 # T
+PERL_MAGIC_sigelem             # T
+PERL_MAGIC_substr              # T
+PERL_MAGIC_sv                  # T
+PERL_MAGIC_taint               # T
+PERL_MAGIC_tied                # T
+PERL_MAGIC_tiedelem            # T
+PERL_MAGIC_tiedscalar          # T
+PERL_MAGIC_utf8                # T
+PERL_MAGIC_uvar                # T
+PERL_MAGIC_uvar_elem           # T
+PERL_MAGIC_vec                 # T
+PERL_MAGIC_vstring             # T
+PERL_PV_ESCAPE_ALL             # T
+PERL_PV_ESCAPE_FIRSTCHAR       # T
+PERL_PV_ESCAPE_NOBACKSLASH     # T
+PERL_PV_ESCAPE_NOCLEAR         # T
+PERL_PV_ESCAPE_QUOTE           # T
+PERL_PV_ESCAPE_RE              # T
+PERL_PV_ESCAPE_UNI             # T
+PERL_PV_ESCAPE_UNI_DETECT      # T
+PERL_PV_PRETTY_DUMP            # T
+PERL_PV_PRETTY_ELLIPSES        # T
+PERL_PV_PRETTY_LTGT            # T
+PERL_PV_PRETTY_NOCLEAR         # T
+PERL_PV_PRETTY_QUOTE           # T
+PERL_PV_PRETTY_REGPROP         # T
+PERL_QUAD_MAX                  # T
+PERL_QUAD_MIN                  # T
+PERL_REVISION                  # T
+perl_run                       # T
+PERL_SCAN_ALLOW_UNDERSCORES    # T
+PERL_SCAN_DISALLOW_PREFIX      # T
+PERL_SCAN_GREATER_THAN_UV_MAX  # T
+PERL_SCAN_SILENT_ILLDIGIT      # T
+PERL_SHORT_MAX                 # T
+PERL_SHORT_MIN                 # T
+PERL_SIGNALS_UNSAFE_FLAG       # T
+PERL_SUBVERSION                # T
+PERL_SYS_INIT                  # T
+PERL_SYS_TERM                  # T
+PERL_UCHAR_MAX                 # T
+PERL_UCHAR_MIN                 # T
+PERL_UINT_MAX                  # T
+PERL_UINT_MIN                  # T
+PERL_ULONG_MAX                 # T
+PERL_ULONG_MIN                 # T
+PERL_UNUSED_CONTEXT            # T
+PERL_UNUSED_DECL               # T
+PERL_UQUAD_MAX                 # T
+PERL_UQUAD_MIN                 # T
+PERL_USHORT_MAX                # T
+PERL_USHORT_MIN                # T
+PERL_VERSION                   # T
+PL_bufend                      # T
+PL_bufptr                      # T
+PL_compiling                   # T
+PL_copline                     # T
+PL_curcop                      # T
+PL_curstash                    # T
+PL_DBsignal                    # T
+PL_DBsingle                    # T
+PL_DBsub                       # T
+PL_DBtrace                     # T
+PL_debstash                    # T
+PL_defgv                       # T
+PL_diehook                     # T
+PL_dirty                       # T
+PL_dowarn                      # T
+PL_errgv                       # T
+PL_error_count                 # T
+PL_expect                      # T
+PL_hexdigit                    # T
+PL_hints                       # T
+PL_in_my                       # T
+PL_laststatval                 # T
+PL_lex_state                   # T
+PL_lex_stuff                   # T
+PL_linestr                     # T
+PL_na                          # T
+PL_no_modify                   # T
+PL_parser                      # T
+PL_perldb                      # T
+PL_perl_destruct_level         # T
+PL_ppaddr                      # T
+PL_rsfp                        # T
+PL_rsfp_filters                # T
+PL_stack_base                  # T
+PL_stack_sp                    # T
+PL_statcache                   # T
+PL_stdingv                     # T
+PL_Sv                          # T
+PL_sv_arenaroot                # T
+PL_sv_no                       # T
+PL_sv_undef                    # T
+PL_sv_yes                      # T
+PL_tainted                     # T
+PL_tainting                    # T
+PL_tokenbuf                    # T
+PL_Xpv                         # T
+Poison                         # T
+PoisonFree                     # T
+PoisonNew                      # T
+PoisonWith                     # T
+POPi                           # T
+POPl                           # T
+POPn                           # T
+POPp                           # T
+POPs                           # T
+pop_scope                      # T
+pregexec                       # T
+pregfree                       # T
+PRIVLIB                        # T
+pTHX                           # T
+PTR2IV                         # T
+PTR2NV                         # T
+PTR2UV                         # T
+PTRV                           # T
+PUSHi                          # T
+PUSHMARK                       # T
+PUSHmortal                     # T
+PUSHn                          # T
+PUSHp                          # T
+PUSHs                          # T
+push_scope                     # T
+PUSHu                          # T
+PUTBACK                        # T
+pv_display                     # T
+pv_escape                      # T
+pv_pretty                      # T
+RANDBITS                       # T
+Renew                          # T
+Renewc                         # T
+repeatcpy                      # T
+REPLACEMENT_CHARACTER_UTF8     # T
+rninstr                        # T
+Safefree                       # T
+save_aptr                      # T
+save_ary                       # T
+save_clearsv                   # T
+SAVE_DEFSV                     # T
+save_delete                    # T
+save_freepv                    # T
+save_freesv                    # T
+save_hash                      # T
+save_hptr                      # T
+save_I32                       # T
+save_int                       # T
+save_item                      # T
+save_list                      # T
+save_long                      # T
+save_nogv                      # T
+save_pptr                      # T
+savepv                         # T
+savepvn                        # T
+save_scalar                    # T
+save_sptr                      # T
+savestack_grow                 # T
+save_svref                     # T
+SAVETMPS                       # T
+scan_hex                       # T
+scan_oct                       # T
+setdefout                      # T
+SITELIB                        # T
+SP                             # T
+SPAGAIN                        # T
+ST                             # T
+stack_grow                     # T
+START_EXTERN_C                 # T
+STARTPERL                      # T
+start_subparse                 # T
+STDCHAR                        # T
+strEQ                          # T
+strGE                          # T
+strGT                          # T
+strLE                          # T
+strLT                          # T
+strNE                          # T
+strnEQ                         # T
+strnNE                         # T
+sv_2bool                       # T
+sv_2cv                         # T
+sv_2io                         # T
+sv_2iv                         # T
+sv_2mortal                     # T
+sv_2pv                         # T
+sv_2pvbyte                     # T
+sv_2pvbyte_nolen               # T
+sv_2pv_flags                   # T
+sv_2pv_nolen                   # T
+sv_2uv                         # T
+sv_backoff                     # T
+sv_bless                       # T
+sv_catpv                       # T
+sv_catpv_mg                    # T
+sv_catpvn                      # T
+sv_catpvn_mg                   # T
+sv_catpvn_nomg                 # T
+sv_catpvs                      # T
+sv_catsv                       # T
+sv_catsv_mg                    # T
+sv_catsv_nomg                  # T
+sv_chop                        # T
+sv_clear                       # T
+sv_cmp                         # T
+SV_CONST_RETURN                # T
+SV_COW_DROP_PV                 # T
+SV_COW_SHARED_HASH_KEYS        # T
+SvCUR                          # T
+SvCUR_set                      # T
+sv_dec                         # T
+sv_dump                        # T
+SvEND                          # T
+sv_eq                          # T
+SVf                            # T
+SVfARG                         # T
+sv_free                        # T
+SVf_UTF8                       # T
+SvGETMAGIC                     # T
+sv_gets                        # T
+SV_GMAGIC                      # T
+sv_grow                        # T
+SvGROW                         # T
+SV_HAS_TRAILING_NUL            # T
+SV_IMMEDIATE_UNREF             # T
+sv_inc                         # T
+sv_insert                      # T
+SvIOK                          # T
+SvIOK_off                      # T
+SvIOK_on                       # T
+SvIOK_only                     # T
+SvIOKp                         # T
+sv_isa                         # T
+sv_isobject                    # T
+SvIV                           # T
+SvIV_nomg                      # T
+SvIV_set                       # T
+SvIVX                          # T
+SvIVx                          # T
+sv_len                         # T
+SvLEN                          # T
+SvLEN_set                      # T
+sv_magic                       # T
+SvMAGIC_set                    # T
+sv_mortalcopy                  # T
+sv_mortalcopy_flags            # T
+SV_MUTABLE_RETURN              # T
+sv_newmortal                   # T
+sv_newref                      # T
+SvNIOK                         # T
+SvNIOK_off                     # T
+SvNIOKp                        # T
+SvNOK                          # T
+SvNOK_off                      # T
+SvNOK_on                       # T
+SvNOK_only                     # T
+SvNOKp                         # T
+SV_NOSTEAL                     # T
+SvNV                           # T
+SvNV_nomg                      # T
+SvNV_set                       # T
+SvNVX                          # T
+SvNVx                          # T
+SvOK                           # T
+SvOOK                          # T
+SvPOK                          # T
+SvPOK_off                      # T
+SvPOK_on                       # T
+SvPOK_only                     # T
+SvPOKp                         # T
+SvPV                           # T
+SvPVbyte                       # T
+SvPV_force                     # T
+SvPV_force_nomg                # T
+sv_pvn_force                   # T
+sv_pvn_force_flags             # T
+SvPV_nolen                     # T
+SvPV_nomg                      # T
+SvPV_nomg_nolen                # T
+SvPV_set                       # T
+SvPVX                          # T
+SvPVx                          # T
+SvREADONLY                     # T
+SvREADONLY_off                 # T
+SvREADONLY_on                  # T
+SvREFCNT                       # T
+SvREFCNT_dec                   # T
+SvREFCNT_inc                   # T
+SvREFCNT_inc_NN                # T
+SvREFCNT_inc_simple            # T
+SvREFCNT_inc_simple_NN         # T
+SvREFCNT_inc_simple_void       # T
+SvREFCNT_inc_simple_void_NN    # T
+SvREFCNT_inc_void              # T
+SvREFCNT_inc_void_NN           # T
+sv_reftype                     # T
+sv_replace                     # T
+sv_report_used                 # T
+sv_reset                       # T
+SvROK                          # T
+SvROK_off                      # T
+SvROK_on                       # T
+SvRV                           # T
+SvRV_set                       # T
+SvRX                           # T
+SvRXOK                         # T
+sv_setiv                       # T
+sv_setiv_mg                    # T
+SvSETMAGIC                     # T
+sv_setnv                       # T
+sv_setnv_mg                    # T
+sv_setpv                       # T
+sv_setpv_mg                    # T
+sv_setpvn                      # T
+sv_setpvn_mg                   # T
+sv_setpvs                      # T
+sv_setref_iv                   # T
+sv_setref_nv                   # T
+sv_setref_pv                   # T
+sv_setref_pvn                  # T
+sv_setsv                       # T
+SvSetSV                        # T
+sv_setsv_flags                 # T
+sv_setsv_mg                    # T
+sv_setsv_nomg                  # T
+sv_setuv                       # T
+sv_setuv_mg                    # T
+SV_SMAGIC                      # T
+SvSTASH                        # T
+SvSTASH_set                    # T
+SVs_TEMP                       # T
+SvTAINT                        # T
+SVt_IV                         # T
+SVt_NULL                       # T
+SVt_NV                         # T
+SVt_PV                         # T
+SVt_PVAV                       # T
+SVt_PVCV                       # T
+SVt_PVFM                       # T
+SVt_PVGV                       # T
+SVt_PVHV                       # T
+SVt_PVIO                       # T
+SVt_PVIV                       # T
+SVt_PVLV                       # T
+SVt_PVMG                       # T
+SVt_PVNV                       # T
+SvTRUE                         # T
+SvTRUE_nomg                    # T
+SvTRUEx                        # T
+SvTYPE                         # T
+sv_unmagic                     # T
+sv_unmagicext                  # T
+sv_unref                       # T
+sv_upgrade                     # T
+SvUPGRADE                      # T
+sv_usepvn                      # T
+sv_usepvn_mg                   # T
+SvUTF8                         # T
+SV_UTF8_NO_ENCODING            # T
+sv_uv                          # T
+SvUV                           # T
+SvUV_nomg                      # T
+SvUV_set                       # T
+SvUVX                          # T
+SvUVx                          # T
+SvUVXx                         # T
+switch_to_global_locale        # T
+sync_locale                    # T
+taint_env                      # T
+taint_proper                   # T
+toLOWER                        # T
+toUPPER                        # T
+UNDERBAR                       # T
+UNICODE_REPLACEMENT            # T
+UNI_TO_NATIVE                  # T
+UNLIKELY                       # T
+unsharepvn                     # T
+UTF8f                          # T
+UTF8fARG                       # T
+UTF8_IS_INVARIANT              # T
+UTF8_MAXBYTES_CASE             # T
+UVCHR_IS_INVARIANT             # T
+UVCHR_SKIP                     # T
+UVof                           # T
+UVSIZE                         # T
+UVTYPE                         # T
+UVuf                           # T
+UVxf                           # T
+vload_module                   # T
+warn                           # T
+WARN_ALL                       # T
+WARN_AMBIGUOUS                 # T
+WARN_ASSERTIONS                # T
+WARN_BAREWORD                  # T
+WARN_CLOSED                    # T
+WARN_CLOSURE                   # T
+WARN_DEBUGGING                 # T
+WARN_DEPRECATED                # T
+WARN_DIGIT                     # T
+WARN_EXEC                      # T
+WARN_EXITING                   # T
+WARN_GLOB                      # T
+WARN_INPLACE                   # T
+WARN_INTERNAL                  # T
+WARN_IO                        # T
+WARN_LAYER                     # T
+WARN_MALLOC                    # T
+WARN_MISC                      # T
+WARN_NEWLINE                   # T
+WARN_NUMERIC                   # T
+WARN_ONCE                      # T
+WARN_OVERFLOW                  # T
+WARN_PACK                      # T
+WARN_PARENTHESIS               # T
+WARN_PIPE                      # T
+WARN_PORTABLE                  # T
+WARN_PRECEDENCE                # T
+WARN_PRINTF                    # T
+WARN_PROTOTYPE                 # T
+WARN_QW                        # T
+WARN_RECURSION                 # T
+WARN_REDEFINE                  # T
+WARN_REGEXP                    # T
+WARN_RESERVED                  # T
+WARN_SEMICOLON                 # T
+WARN_SEVERE                    # T
+WARN_SIGNAL                    # T
+WARN_SUBSTR                    # T
+warn_sv                        # T
+WARN_SYNTAX                    # T
+WARN_TAINT                     # T
+WARN_THREADS                   # T
+WARN_UNINITIALIZED             # T
+WARN_UNOPENED                  # T
+WARN_UNPACK                    # T
+WARN_UNTIE                     # T
+WARN_UTF8                      # T
+WARN_VOID                      # T
+whichsig                       # T
+WIDEST_UTYPE                   # T
+XCPT_CATCH                     # T
+XCPT_RETHROW                   # T
+XCPT_TRY_END                   # T
+XCPT_TRY_START                 # T
+XPUSHi                         # T
+XPUSHmortal                    # T
+XPUSHn                         # T
+XPUSHp                         # T
+XPUSHs                         # T
+XPUSHu                         # T
+XSprePUSH                      # T
+XSRETURN                       # T
+XSRETURN_EMPTY                 # T
+XSRETURN_IV                    # T
+XSRETURN_NO                    # T
+XSRETURN_NV                    # T
+XSRETURN_PV                    # T
+XSRETURN_UNDEF                 # T
+XSRETURN_UV                    # T
+XSRETURN_YES                   # T
+XST_mIV                        # T
+XST_mNO                        # T
+XST_mNV                        # T
+XST_mPV                        # T
+XST_mUNDEF                     # T
+XST_mUV                        # T
+XST_mYES                       # T
+XS_VERSION                     # T
+XS_VERSION_BOOTCHECK           # T
+Zero                           # T
+ZeroD                          # T
+CLASS                          # X added by devel/scanprov
+dXSI32                         # X added by devel/scanprov
+items                          # X added by devel/scanprov
+ix                             # X added by devel/scanprov
+pTHX_                          # X added by devel/scanprov
+RETVAL                         # X added by devel/scanprov
+STMT_END                       # X added by devel/scanprov
+STMT_START                     # X added by devel/scanprov
+StructCopy                     # X added by devel/scanprov
+STR_WITH_LEN                   # X added by devel/scanprov
+svtype                         # X added by devel/scanprov
+THIS                           # X added by devel/scanprov
+XS                             # X added by devel/scanprov
index ec87e88..ec16188 100644 (file)
@@ -1,44 +1,63 @@
 5.004000
-GIMME_V                        # E
-G_VOID                         # E
-HePV                           # A
-HeSVKEY_set                    # U
-POPu                           # E
-SvSetMagicSV                   # U
-SvSetMagicSV_nosteal           # U
-SvSetSV_nosteal                # U
-SvTAINTED                      # U
-SvTAINTED_off                  # U
-SvTAINTED_on                   # U
+ARCHNAME                       # E
 block_end                      # E (Perl_block_end)
 block_gimme                    # U
 block_start                    # E (Perl_block_start)
 call_list                      # U
 delimcpy                       # U
 form                           # U
+GIMME_V                        # E
 gv_autoload4                   # U
 gv_fetchmethod_autoload        # U
+G_VOID                         # E
+HePV                           # A
+HeSVKEY_set                    # U
 hv_delayfree_ent               # U
 hv_free_ent                    # U
 ibcmp_locale                   # U
+IN_LOCALE                      # E
+IN_LOCALE_COMPILETIME          # E
+IN_LOCALE_RUNTIME              # E
 intro_my                       # U
+isALNUM_LC                     # U
+isALPHA_LC                     # U
+isALPHANUMERIC_LC              # U
+isDIGIT_LC                     # U
+isIDCONT_LC                    # U
+isIDFIRST_LC                   # U
+isLOWER_LC                     # U
+isPRINT_LC                     # U
+isSPACE_LC                     # U
+isUPPER_LC                     # U
+isWORDCHAR_LC                  # U
+mess                           # E (Perl_mess)
+mess_sv                        # U
 my_failure_exit                # U
 newSVpvf                       # U
+PERL_USE_GCC_BRACE_GROUPS      # E
+PL_mess_sv                     # E
+POPu                           # E
 rsignal                        # E
 rsignal_state                  # E
-save_I16                       # U
 save_gp                        # U
+save_I16                       # U
 share_hek                      # E
-start_subparse                 # E (Perl_start_subparse)
+SHORTSIZE                      # E
 sv_catpvf                      # U
 sv_catpvf_mg                   # U
 sv_cmp_locale                  # U
 sv_derived_from                # U
 sv_magic_portable              # U
+SvSetMagicSV                   # U
+SvSetMagicSV_nosteal           # U
 sv_setpvf                      # U
 sv_setpvf_mg                   # U
+SvSetSV_nosteal                # U
 sv_taint                       # U
 sv_tainted                     # U
+SvTAINTED                      # U
+SvTAINTED_off                  # U
+SvTAINTED_on                   # U
 sv_untaint                     # U
 sv_vcatpvf                     # U
 sv_vcatpvf_mg                  # U
@@ -47,5 +66,6 @@ sv_vsetpvf                     # U
 sv_vsetpvf_mg                  # U
 sv_vsetpvfn                    # U
 toLOWER_LC                     # U
+vmess                          # U
 vnewSVpvf                      # U
 warner                         # U
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5004001 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5004001
new file mode 100644 (file)
index 0000000..299810f
--- /dev/null
@@ -0,0 +1 @@
+5.004001
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5004002 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5004002
new file mode 100644 (file)
index 0000000..88ea401
--- /dev/null
@@ -0,0 +1 @@
+5.004002
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5004003 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5004003
new file mode 100644 (file)
index 0000000..42ff9a8
--- /dev/null
@@ -0,0 +1 @@
+5.004003
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5004004 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5004004
new file mode 100644 (file)
index 0000000..45a1649
--- /dev/null
@@ -0,0 +1 @@
+5.004004
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5004005 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5004005
new file mode 100644 (file)
index 0000000..fe3666b
--- /dev/null
@@ -0,0 +1,5 @@
+5.004005
+do_binmode                     # U
+GV_NOINIT                      # E
+save_aelem                     # U
+save_helem                     # U
index df29b02..216f581 100644 (file)
@@ -1,24 +1,27 @@
 5.005000
-PL_curpad                      # E
-PL_modglobal                   # E
 cx_dump                        # U
 debop                          # U
 debprofdump                    # U
+DOUBLESIZE                     # E
 fbm_compile                    # E (Perl_fbm_compile)
 fbm_instr                      # E (Perl_fbm_instr)
 get_op_descs                   # U
 get_op_names                   # U
 init_stacks                    # U
+mg_length                      # U
 mg_size                        # U
 newHVhv                        # U
 new_stackinfo                  # E
+PL_curpad                      # E
+PL_in_my_stash                 # E
+PL_modglobal                   # E
+PTRSIZE                        # E
 regdump                        # U
 regexec_flags                  # U
 regnext                        # E (Perl_regnext)
 runops_debug                   # U
 runops_standard                # U
 save_iv                        # U (save_iv)
-save_op                        # U
 sv_iv                          # U
 sv_nv                          # U
 sv_peek                        # U
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5005001 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5005001
new file mode 100644 (file)
index 0000000..9eb326e
--- /dev/null
@@ -0,0 +1 @@
+5.005001
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5005002 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5005002
new file mode 100644 (file)
index 0000000..35d08b2
--- /dev/null
@@ -0,0 +1 @@
+5.005002
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5005003 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5005003
new file mode 100644 (file)
index 0000000..fb824cc
--- /dev/null
@@ -0,0 +1,4 @@
+5.005003
+get_vtbl                       # U
+POPpx                          # E
+save_generic_svref             # U
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5005004 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5005004
new file mode 100644 (file)
index 0000000..6494a6d
--- /dev/null
@@ -0,0 +1 @@
+5.005004
index 2d95331..7785939 100644 (file)
@@ -1,25 +1,4 @@
 5.006000
-DO_UTF8                        # U
-PERL_SYS_INIT3                 # U
-PL_check                       # E
-POPul                          # E
-SvIOK_UV                       # U
-SvIOK_notUV                    # U
-SvIOK_only_UV                  # U
-SvPOK_only_UTF8                # U
-SvPVbyte_nolen                 # U
-SvPVbytex                      # U
-SvPVbytex_force                # U
-SvPVutf8                       # U
-SvPVutf8_force                 # U
-SvPVutf8_nolen                 # U
-SvPVutf8x                      # U
-SvPVutf8x_force                # U
-SvUOK                          # U
-SvUTF8                         # U
-SvUTF8_off                     # U
-SvUTF8_on                      # U
-UTF8SKIP                       # U
 av_delete                      # U
 av_exists                      # U
 call_atexit                    # E
@@ -28,6 +7,11 @@ cast_i32                       # U (cast_i32)
 cast_iv                        # U (cast_iv)
 cast_ulong                     # U
 cast_uv                        # U (cast_uv)
+ckWARN2                        # U
+ckWARN2_d                      # U
+ckWARN_d                       # U
+CPPLAST                        # E
+CPPRUN                         # E
 do_gv_dump                     # U
 do_gvgv_dump                   # U
 do_hv_dump                     # U
@@ -36,6 +20,7 @@ do_op_dump                     # U
 do_open9                       # U
 do_pmop_dump                   # U
 do_sv_dump                     # U
+DO_UTF8                        # U
 dump_all                       # U
 dump_eval                      # U
 dump_form                      # U
@@ -46,6 +31,66 @@ dump_vindent                   # U
 get_context                    # U
 get_ppaddr                     # E
 gv_dump                        # U
+I16SIZE                        # E
+I16TYPE                        # E
+I32SIZE                        # E
+I32TYPE                        # E
+I8SIZE                         # E
+I8TYPE                         # E
+isALNUMC_LC                    # U
+isALPHA_LC_utf8_safe           # U
+isALPHANUMERIC_LC_utf8_safe    # U
+isALPHANUMERIC_utf8_safe       # U
+isALPHANUMERIC_uvchr           # U
+isALPHA_utf8_safe              # U
+isALPHA_uvchr                  # U
+isBLANK_LC_utf8_safe           # U
+isBLANK_utf8_safe              # U
+isBLANK_uvchr                  # U
+isCNTRL_LC                     # U
+isCNTRL_LC_utf8_safe           # U
+isCNTRL_utf8_safe              # U
+isCNTRL_uvchr                  # U
+isDIGIT_LC_utf8_safe           # U
+isDIGIT_utf8_safe              # U
+isDIGIT_uvchr                  # U
+isGRAPH_LC                     # U
+isGRAPH_LC_utf8_safe           # U
+isGRAPH_utf8_safe              # U
+isGRAPH_uvchr                  # U
+isIDCONT_LC_utf8_safe          # U
+isIDCONT_utf8_safe             # U
+isIDCONT_uvchr                 # U
+isIDFIRST_LC_utf8_safe         # U
+isIDFIRST_utf8_safe            # U
+isIDFIRST_uvchr                # U
+isLOWER_LC_utf8_safe           # U
+isLOWER_utf8_safe              # U
+isLOWER_uvchr                  # U
+isPRINT_LC_utf8_safe           # U
+isPRINT_utf8_safe              # U
+isPRINT_uvchr                  # U
+isPSXSPC_LC_utf8_safe          # U
+isPSXSPC_utf8_safe             # U
+isPSXSPC_uvchr                 # U
+isPUNCT_LC                     # U
+isPUNCT_LC_utf8_safe           # U
+isPUNCT_utf8_safe              # U
+isPUNCT_uvchr                  # U
+isSPACE_LC_utf8_safe           # U
+isSPACE_utf8_safe              # U
+isSPACE_uvchr                  # U
+isUPPER_LC_utf8_safe           # U
+isUPPER_utf8_safe              # U
+isUPPER_uvchr                  # U
+is_utf8_char                   # U
+isWORDCHAR_LC_utf8_safe        # U
+isWORDCHAR_utf8_safe           # U
+isWORDCHAR_uvchr               # U
+isXDIGIT_LC_utf8_safe          # U
+isXDIGIT_utf8_safe             # U
+isXDIGIT_uvchr                 # U
+LSEEKSIZE                      # E
 magic_dump                     # U
 my_atof                        # U
 my_fflush_all                  # U
@@ -54,46 +99,86 @@ newATTRSUB                     # U
 newXS                          # E (Perl_newXS)
 newXSproto                     # E
 op_dump                        # U
+OPpEARLY_CV                    # E
+PERL_EXIT_EXPECTED             # E
 perl_parse                     # E (perl_parse)
+PERL_SYS_INIT3                 # U
+PL_check                       # E
+PL_exit_flags                  # E
+PL_runops                      # E
 pmop_dump                      # U
-re_intuit_string               # U
+POPul                          # E
 reginitcolors                  # U
 require_pv                     # U (perl_require_pv)
 safesyscalloc                  # U
 safesysfree                    # U
 safesysmalloc                  # U
 safesysrealloc                 # U
-save_I8                        # U
 save_alloc                     # U
 save_destructor                # E (Perl_save_destructor)
 save_destructor_x              # E
+save_I8                        # U
 save_re_context                # U
 save_vptr                      # U
 scan_bin                       # U
 set_context                    # U
-set_numeric_local              # U (perl_set_numeric_local)
-set_numeric_radix              # U
-set_numeric_standard           # U (perl_set_numeric_standard)
+Strtol                         # U
+Strtoul                        # U
 str_to_version                 # U
 sv_2pvutf8                     # U
 sv_2pvutf8_nolen               # U
 sv_force_normal                # U
+SvIOK_notUV                    # U
+SvIOK_only_UV                  # U
+SvIOK_UV                       # U
 sv_len_utf8                    # U
+SvPOK_only_UTF8                # U
 sv_pos_b2u                     # U
 sv_pos_u2b                     # U
 sv_pv                          # U
 sv_pvbyte                      # U
 sv_pvbyten                     # U
 sv_pvbyten_force               # U
+SvPVbyte_nolen                 # U
+SvPVbytex                      # U
+SvPVbytex_force                # U
 sv_pvutf8                      # U
+SvPVutf8                       # U
+SvPVutf8_force                 # U
 sv_pvutf8n                     # U
 sv_pvutf8n_force               # U
+SvPVutf8_nolen                 # U
+SvPVutf8x                      # U
+SvPVutf8x_force                # U
 sv_rvweaken                    # U
+SvUOK                          # U
+sv_utf8_decode                 # U
+sv_utf8_downgrade              # U
 sv_utf8_encode                 # U
+SvUTF8_off                     # U
+SvUTF8_on                      # U
+toFOLD_utf8_safe               # U
+toFOLD_uvchr                   # U
+toLOWER_utf8_safe              # U
+toLOWER_uvchr                  # U
+toTITLE_utf8_safe              # U
+toTITLE_uvchr                  # U
+toUPPER_utf8_safe              # U
+toUPPER_uvchr                  # U
+U16SIZE                        # E
+U16TYPE                        # E
+U32SIZE                        # E
+U32TYPE                        # E
+U8SIZE                         # E
+U8TYPE                         # E
+UTF8_CHK_SKIP                  # U
 utf8_distance                  # U
 utf8_hop                       # U
+UTF8_MAXBYTES                  # E
+UTF8_SAFE_SKIP                 # U
+UTF8_SKIP                      # U
+UTF8SKIP                       # U
 vcroak                         # U
 vform                          # U
-vmess                          # U
 vwarn                          # U
 vwarner                        # U
index 67fae30..bb08876 100644 (file)
@@ -1,8 +1,14 @@
 5.006001
-SvGAMAGIC                      # U
+apply_attrs_string             # U
+bytes_to_utf8                  # U
 gv_efullname4                  # U
 gv_fullname4                   # U
+isPSXSPC_LC                    # U
+isUTF8_CHAR                    # U
 is_utf8_string                 # U
+NVSIZE                         # E
 save_generic_pvref             # U
-utf16_to_utf8                  # E (Perl_utf16_to_utf8)
-utf16_to_utf8_reversed         # E (Perl_utf16_to_utf8_reversed)
+SvGAMAGIC                      # U
+utf8_to_bytes                  # U
+utf8_to_uvchr                  # U
+utf8_to_uvchr_buf              # U
index 50909c3..de1e84e 100644 (file)
@@ -1,18 +1,34 @@
 5.007001
-POPpbytex                      # E
+bytes_from_utf8                # U
 despatch_signals               # U
 do_openn                       # U
 gv_handler                     # U
+isALNUM_LC_uvchr               # U
+isALPHA_LC_uvchr               # U
+isCNTRL_LC_uvchr               # U
+isDIGIT_LC_uvchr               # U
+isGRAPH_LC_uvchr               # U
+isIDFIRST_LC_uvchr             # U
+isLOWER_LC_uvchr               # U
 is_lvalue_sub                  # U
+isPRINT_LC_uvchr               # U
+isPUNCT_LC_uvchr               # U
+isSPACE_LC_uvchr               # U
+isUPPER_LC_uvchr               # U
 my_popen_list                  # U
+PerlIO_apply_layers            # U
+PerlIO_binmode                 # U
+PerlIO_debug                   # U
+POPpbytex                      # E
+printf_nocontext               # U
 save_mortalizesv               # U
-scan_num                       # E (Perl_scan_num)
+scan_num                       # A
 sv_force_normal_flags          # U
 sv_setref_uv                   # U
 sv_unref_flags                 # U
 sv_utf8_upgrade                # E (Perl_sv_utf8_upgrade)
+UTF8_CHECK_ONLY                # E
 utf8_length                    # U
 utf8n_to_uvchr                 # U
-utf8n_to_uvuni                 # U
 uvchr_to_utf8                  # U
-uvuni_to_utf8                  # U
+UVXf                           # E
index 40e6b5a..e763ce3 100644 (file)
@@ -1,16 +1,17 @@
 5.007002
+atfork_lock                    # U
+atfork_unlock                  # U
 calloc                         # U
 getcwd_sv                      # U
 init_tm                        # U
 malloc                         # U
 mfree                          # U
 mini_mktime                    # U
-my_atof2                       # U
 my_strftime                    # U
 op_null                        # U
+OSVERS                         # E
 realloc                        # U
 sv_catpvn_flags                # U
 sv_catsv_flags                 # U
-sv_setsv_flags                 # U
 sv_utf8_upgrade_flags          # U
 sv_utf8_upgrade_nomg           # U
index 89a05a0..164ecfd 100644 (file)
@@ -1,7 +1,28 @@
 5.007003
+ckWARN3                        # U
+ckWARN3_d                      # U
+ckWARN4                        # U
+ckWARN4_d                      # U
+custom_op_desc                 # U
+custom_op_name                 # U
+cx_dup                         # E (Perl_cx_dup)
+deb                            # U
+deb_nocontext                  # U
+debstack                       # U
+debstackptrs                   # U
+foldEQ_utf8                    # U
+fp_dup                         # A
+gp_dup                         # E (Perl_gp_dup)
+gv_fetchmeth_autoload          # U
+he_dup                         # E (Perl_he_dup)
+ibcmp_utf8                     # U
+mg_dup                         # E (Perl_mg_dup)
+my_fork                        # U
+my_socketpair                  # U
 OP_DESC                        # U
 OP_NAME                        # U
-PL_peepp                       # E
+perl_destruct                  # E (perl_destruct)
+PERL_EXIT_DESTRUCT_END         # E
 PerlIO_clearerr                # U (PerlIO_clearerr)
 PerlIO_close                   # U (PerlIO_close)
 PerlIO_eof                     # U (PerlIO_eof)
@@ -16,40 +37,33 @@ PerlIO_get_ptr                 # U (PerlIO_get_ptr)
 PerlIO_read                    # U (PerlIO_read)
 PerlIO_seek                    # U (PerlIO_seek)
 PerlIO_set_cnt                 # U (PerlIO_set_cnt)
-PerlIO_set_ptrcnt              # U (PerlIO_set_ptrcnt)
 PerlIO_setlinebuf              # U (PerlIO_setlinebuf)
+PerlIO_set_ptrcnt              # U (PerlIO_set_ptrcnt)
 PerlIO_stderr                  # U (PerlIO_stderr)
 PerlIO_stdin                   # U (PerlIO_stdin)
 PerlIO_stdout                  # U (PerlIO_stdout)
 PerlIO_tell                    # U (PerlIO_tell)
 PerlIO_unread                  # U (PerlIO_unread)
 PerlIO_write                   # U (PerlIO_write)
-SvLOCK                         # U
-SvSHARE                        # U
-SvUNLOCK                       # U
-atfork_lock                    # U
-atfork_unlock                  # U
-custom_op_desc                 # U
-custom_op_name                 # U
-deb                            # U
-debstack                       # U
-debstackptrs                   # U
-gv_fetchmeth_autoload          # U
-ibcmp_utf8                     # U
-my_fork                        # U
-my_socketpair                  # U
-pack_cat                       # U
-perl_destruct                  # E (perl_destruct)
+PL_peepp                       # E
 pv_uni_display                 # U
-save_shared_pvref              # U
+rvpv_dup                       # E
 savesharedpv                   # U
+save_shared_pvref              # U
+si_dup                         # E (Perl_si_dup)
 sortsv                         # U
+ss_dup                         # E (Perl_ss_dup)
+sv_copypv                      # U
+sv_dup                         # E (Perl_sv_dup)
+SvLOCK                         # U
 sv_magicext                    # U
 sv_nolocking                   # U
 sv_nosharing                   # U
+sv_nounlocking                 # U
 sv_recode_to_utf8              # U
+SvSHARE                        # U
 sv_uni_display                 # U
+SvUNLOCK                       # U
 unpack_str                     # U
 uvchr_to_utf8_flags            # U
-uvuni_to_utf8_flags            # U
 vdeb                           # U
index e3ee16f..13cc7f2 100644 (file)
@@ -1,3 +1,6 @@
 5.008000
 HeUTF8                         # U
+hv_iternext_flags              # U
+HV_ITERNEXT_WANTPLACEHOLDERS   # E
+hv_store_flags                 # U
 nothreadhook                   # U
index c600b20..97164b7 100644 (file)
@@ -1,17 +1,19 @@
 5.008001
 CvPADLIST                      # E
-PL_comppad                     # E
-SvVOK                          # U
 doing_taint                    # U
 find_runcv                     # U
 is_utf8_string_loc             # U
 packlist                       # U
 pad_add_anon                   # U
 pad_new                        # E
+pad_setsv                      # U
+pad_tidy                       # E
+PL_comppad                     # E
 save_bool                      # U
 savestack_grow_cnt             # U
 seed                           # U
 sv_cat_decode                  # U
 sv_setpviv                     # U
 sv_setpviv_mg                  # U
+SvVOK                          # U
 unpackstring                   # U
index 28bc859..ecbaf1d 100644 (file)
@@ -1,6 +1,21 @@
 5.009000
+_aMY_CXT                       # E
+aMY_CXT                        # E
+aMY_CXT_                       # E
+dMY_CXT                        # E
+hek_dup                        # U
+MY_CXT                         # E
+MY_CXT_CLONE                   # E
+MY_CXT_INIT                    # E
+my_cxt_init                    # U
 new_version                    # U
+parser_dup                     # U
+pMY_CXT                        # E
+regdupe_internal               # U
 save_set_svflags               # U
+SVs_PADSTALE                   # E
 vcmp                           # U
 vnumify                        # U
 vstringify                     # U
+_pMY_CXT                       # X added by devel/scanprov
+pMY_CXT_                       # X added by devel/scanprov
index 231f057..dd5fe83 100644 (file)
@@ -1,6 +1,7 @@
 5.009002
-SvPVbyte_force                 # U
+find_rundefsvoffset            # U
 op_refcnt_lock                 # U
 op_refcnt_unlock               # U
 savesvpv                       # U
+SvPVbyte_force                 # U
 vnormal                        # U
index 5b9c10a..529dc08 100644 (file)
@@ -2,10 +2,11 @@
 av_arylen_p                    # U
 ckwarn                         # U
 ckwarn_d                       # U
-csighandler                    # E (Perl_csighandler)
 dMULTICALL                     # E
 doref                          # U
 gv_const_sv                    # U
+GV_NOADD_NOINIT                # E
+GV_NOEXPAND                    # E
 hv_eiter_p                     # U
 hv_eiter_set                   # U
 hv_name_set                    # U
@@ -14,10 +15,13 @@ hv_placeholders_set            # U
 hv_riter_p                     # U
 hv_riter_set                   # U
 is_utf8_string_loclen          # U
+MULTICALL                      # E
 newGIVENOP                     # U
 newSVhek                       # U
-newWHENOP                      # U
-pad_compname_type              # U
+PERL_MAGIC_arylen_p            # E
+PERL_MAGIC_rhash               # E
+PERL_MAGIC_symtab              # E
+POP_MULTICALL                  # E
 savepvs                        # U
 sortsv_flags                   # U
 vverify                        # U
index 12714ad..d100ab9 100644 (file)
@@ -1,7 +1,10 @@
 5.009004
-PerlIO_context_layers          # U
 gv_name_set                    # U
 hv_copy_hints_hv               # U
 my_vsnprintf                   # U
+newXS_flags                    # U
+PerlIO_context_layers          # U
+PERL_MAGIC_hints               # E
+PERL_MAGIC_hintselem           # E
 sv_does                        # U
 sv_usepvn_flags                # U
index 9bc974f..38949ef 100644 (file)
@@ -1,22 +1,28 @@
 5.009005
+av_create_and_push             # U
+av_create_and_unshift_one      # U
+CopLABEL                       # U
 gv_fetchfile_flags             # U
+lex_start                      # E (Perl_lex_start)
 mro_get_linear_isa             # U
 mro_method_changed_in          # U
 my_dirfd                       # U
+Perl_signbit                   # U
 pregcomp                       # E (Perl_pregcomp)
+ptr_table_clear                # U
 ptr_table_fetch                # U
 ptr_table_free                 # U
 ptr_table_new                  # U
 ptr_table_split                # U
 ptr_table_store                # U
 re_compile                     # U
+regfree_internal               # U
 reg_named_buff_all             # U
 reg_named_buff_exists          # U
 reg_named_buff_fetch           # U
 reg_named_buff_firstkey        # U
 reg_named_buff_nextkey         # U
 reg_named_buff_scalar          # U
-regfree_internal               # U
 savesharedpvn                  # U
 scan_vstring                   # E (Perl_scan_vstring)
 upg_version                    # E (Perl_upg_version)
index 737f374..0778e3e 100644 (file)
@@ -1,6 +1,11 @@
 5.010000
 hv_common                      # U
 hv_common_key_len              # U
+reentrant_free                 # U
+reentrant_init                 # U
+reentrant_retry                # U
+reentrant_size                 # U
+START_MY_CXT                   # E
 sv_destroyable                 # U
 sys_init                       # U
 sys_init3                      # U
index 15f4091..2c80afc 100644 (file)
@@ -4,7 +4,9 @@ mro_get_private_data           # U
 mro_register                   # U
 mro_set_mro                    # U
 mro_set_private_data           # U
+save_freeop                    # U (Perl_save_freeop)
 save_hints                     # U
+save_op                        # U (Perl_save_op)
 save_padsv_and_mortalize       # U
 save_pushi32ptr                # U
 save_pushptr                   # U
index 805d8b1..cbeace0 100644 (file)
@@ -1,14 +1,19 @@
 5.011000
-Gv_AMupdate                    # E (Perl_Gv_AMupdate)
-PL_opfreehook                  # E
-SVt_REGEXP                     # E
-SvOOK_offset                   # U
 av_iter_p                      # U
 gv_add_by_type                 # U
+Gv_AMupdate                    # A
 is_ascii_string                # U
+is_invariant_string            # U
+is_utf8_invariant_string       # U
+PL_opfreehook                  # E
 pregfree2                      # U
+PUSH_MULTICALL                 # U
+re_dup_guts                    # U
 save_adelete                   # U
 save_aelem_flags               # U
 save_hdelete                   # U
 save_helem_flags               # U
+SvOOK_offset                   # U
+SVt_REGEXP                     # E
 sv_utf8_upgrade_flags_grow     # U
+WARN_IMPRECISION               # E
index 910a552..906e256 100644 (file)
@@ -1,2 +1,18 @@
 5.011002
+CHARBITS                       # E
+ENTER_with_name                # U
+LEAVE_with_name                # U
+lex_bufutf8                    # U
+lex_discard_to                 # U
+lex_grow_linestr               # U
+LEX_KEEP_PREVIOUS              # E
+lex_next_chunk                 # U
+lex_peek_unichar               # U
+lex_read_space                 # U
+lex_read_to                    # U
+lex_read_unichar               # U
+lex_stuff_pvn                  # U
+lex_stuff_sv                   # U
+LEX_STUFF_UTF8                 # E
+lex_unstuff                    # U
 PL_keyword_plugin              # E
index 86c1fce..281d71f 100644 (file)
@@ -1,2 +1,3 @@
 5.011004
 prescan_version                # U
+WARN_ILLEGALPROTO              # E
index fa6d99b..8bf194d 100644 (file)
@@ -1,9 +1,10 @@
 5.013002
-SvNV_nomg                      # U
+clone_params_del               # U
+clone_params_new               # U
 find_rundefsv                  # U
 foldEQ                         # U
 foldEQ_locale                  # U
-foldEQ_utf8                    # U
 hv_fill                        # U
 sv_dec_nomg                    # U
+sv_dup_inc                     # U
 sv_inc_nomg                    # U
index dd4730e..c7b67e1 100644 (file)
@@ -1,4 +1,4 @@
 5.013005
-PL_rpeepp                      # E
-isOCTAL                        # U
 lex_stuff_pvs                  # U
+parse_fullstmt                 # U
+PL_rpeepp                      # E
index 596c1ad..49dbd43 100644 (file)
@@ -1,12 +1,11 @@
 5.013006
-LINKLIST                       # U
-SvTRUE_nomg                    # U
 ck_entersub_args_list          # U
 ck_entersub_args_proto         # U
 ck_entersub_args_proto_or_list # U
 cv_get_call_checker            # E
 cv_set_call_checker            # E
-isWORDCHAR                     # U
+lex_stuff_pv                   # U
+LINKLIST                       # U
 mg_free_type                   # U
 newSVpv_share                  # U
 op_append_elem                 # U
@@ -14,7 +13,11 @@ op_append_list                 # U
 op_contextualize               # U
 op_linklist                    # U
 op_prepend_elem                # U
+parse_stmtseq                  # U
+PERL_MAGIC_checkcall           # E
 rv2cv_op_cv                    # U
+RV2CVOPCV_MARK_EARLY           # E
+RV2CVOPCV_RETURN_NAME_GV       # E
 savesharedpvs                  # U
 savesharedsvpv                 # U
 sv_2bool_flags                 # U
@@ -28,3 +31,4 @@ sv_cmp_locale_flags            # U
 sv_collxfrm_flags              # U
 sv_eq_flags                    # U
 sv_setpvs_mg                   # U
+sv_setref_pvs                  # U
index 2131264..8b9162e 100644 (file)
@@ -1,14 +1,6 @@
 5.013007
-HvENAME                        # U
-OP_CLASS                       # U
-XopFLAGS                       # E
 amagic_deref_call              # U
 bytes_cmp_utf8                 # U
-cop_hints_2hv                  # A
-cop_hints_fetch_pv             # U
-cop_hints_fetch_pvn            # U
-cop_hints_fetch_pvs            # U
-cop_hints_fetch_sv             # U
 cophh_2hv                      # E
 cophh_copy                     # E
 cophh_delete_pv                # E
@@ -20,11 +12,33 @@ cophh_fetch_pvn                # E
 cophh_fetch_pvs                # E
 cophh_fetch_sv                 # E
 cophh_free                     # E
+COPHH_KEY_UTF8                 # E
+cophh_new_empty                # E
 cophh_store_pv                 # E
 cophh_store_pvn                # E
 cophh_store_pvs                # E
 cophh_store_sv                 # E
+cop_hints_2hv                  # A
+cop_hints_fetch_pv             # U
+cop_hints_fetch_pvn            # U
+cop_hints_fetch_pvs            # U
+cop_hints_fetch_sv             # U
 custom_op_register             # E
-custom_op_xop                  # E
+dirp_dup                       # A
+HvENAME                        # U
 newFOROP                       # A
 newWHILEOP                     # A
+OP_CLASS                       # U
+op_lvalue                      # U
+op_scope                       # U
+parse_barestmt                 # U
+parse_block                    # U
+parse_label                    # U
+PARSE_OPTIONAL                 # E
+PL_phase                       # E
+XopFLAGS                       # E
+XopDISABLE                     # X added by devel/scanprov
+XopENABLE                      # X added by devel/scanprov
+XopENTRY                       # X added by devel/scanprov
+XopENTRYCUSTOM                 # X added by devel/scanprov
+XopENTRY_set                   # X added by devel/scanprov
index 8716748..8e95c5d 100644 (file)
@@ -1,2 +1,6 @@
 5.013008
 foldEQ_latin1                  # U
+parse_arithexpr                # U
+parse_fullexpr                 # U
+parse_listexpr                 # U
+parse_termexpr                 # U
index 51160ae..45c9725 100644 (file)
@@ -1 +1,10 @@
 5.013009
+PERL_PV_ESCAPE_NONASCII        # E
+UTF8_DISALLOW_ILLEGAL_INTERCHANGE # E
+UTF8_DISALLOW_NONCHAR          # E
+UTF8_DISALLOW_SUPER            # E
+UTF8_DISALLOW_SURROGATE        # E
+UTF8_WARN_ILLEGAL_INTERCHANGE  # E
+UTF8_WARN_NONCHAR              # E
+UTF8_WARN_SUPER                # E
+UTF8_WARN_SURROGATE            # E
index 467ea46..2f1a546 100644 (file)
@@ -1 +1,4 @@
 5.013010
+WARN_NONCHAR                   # E
+WARN_NON_UNICODE               # E
+WARN_SURROGATE                 # E
index c886418..144926b 100644 (file)
@@ -1,4 +1,6 @@
 5.015001
+cop_fetch_label                # U
+cop_store_label                # U
 pad_add_name_pv                # U
 pad_add_name_pvn               # U
 pad_add_name_pvs               # U
index 0674128..4e1069b 100644 (file)
@@ -1 +1,3 @@
 5.015002
+XS_EXTERNAL                    # X added by devel/scanprov
+XS_INTERNAL                    # X added by devel/scanprov
index dd2360d..d900cd1 100644 (file)
@@ -1,11 +1,10 @@
 5.015004
-HvENAMELEN                     # U
-HvENAMEUTF8                    # U
-HvNAMELEN                      # U
-HvNAMEUTF8                     # U
 gv_autoload_pv                 # U
 gv_autoload_pvn                # U
 gv_autoload_sv                 # U
+gv_fetchmethod_pv_flags        # U
+gv_fetchmethod_pvn_flags       # U
+gv_fetchmethod_sv_flags        # U
 gv_fetchmeth_pv                # U
 gv_fetchmeth_pv_autoload       # U
 gv_fetchmeth_pvn               # U
@@ -14,6 +13,10 @@ gv_fetchmeth_sv                # U
 gv_fetchmeth_sv_autoload       # U
 gv_init_pv                     # U
 gv_init_sv                     # U
+HvENAMELEN                     # U
+HvENAMEUTF8                    # U
+HvNAMELEN                      # U
+HvNAMEUTF8                     # U
 newGVgen_flags                 # U
 sv_derived_from_pv             # U
 sv_derived_from_pvn            # U
index ce90789..b02b431 100644 (file)
@@ -1,8 +1 @@
 5.015007
-toLOWER_utf8                   # U
-toTITLE_utf8                   # U
-toUPPER_utf8                   # U
-to_utf8_fold                   # U
-to_utf8_lower                  # U
-to_utf8_title                  # U
-to_utf8_upper                  # U
index 3bd46b7..dfc51d5 100644 (file)
@@ -1 +1,3 @@
 5.016000
+CopLABEL_len                   # U
+CopLABEL_len_flags             # U
index 0202125..477da49 100644 (file)
@@ -1,5 +1,20 @@
 5.017004
-PL_comppad_name                # E
-PadlistREFCNT                  # U
+GV_SUPER                       # E
 newMYSUB                       # E (Perl_newMYSUB)
 newSVpadname                   # E
+PadARRAY                       # U
+PadlistARRAY                   # U
+PadlistMAX                     # U
+PadlistNAMES                   # E
+PadlistNAMESARRAY              # E
+PadlistNAMESMAX                # U
+PadlistREFCNT                  # U
+PadMAX                         # U
+PadnameLEN                     # E
+PadnamelistARRAY               # E
+PadnamelistMAX                 # E
+PadnamePV                      # E
+PadnameSV                      # E
+PadnameUTF8                    # E
+PL_comppad_name                # E
+WARN_EXPERIMENTAL              # E
index 6d97dff..ecfffd7 100644 (file)
@@ -1,2 +1,8 @@
 5.017007
+isALNUMC_LC_uvchr              # U
+isASCII_LC_uvchr               # U
+isBLANK_LC_uvchr               # U
+isPSXSPC_LC_uvchr              # U
+isWORDCHAR_LC_uvchr            # U
+isXDIGIT_LC_uvchr              # U
 SvREFCNT_dec_NN                # U
index de67457..009d5d2 100644 (file)
@@ -1,3 +1,4 @@
 5.017008
-isALPHANUMERIC                 # U
-isIDCONT                       # U
+isALPHANUMERIC_LC_uvchr        # U
+isIDCONT_LC_uvchr              # U
+WARN_EXPERIMENTAL__REGEX_SETS  # E
index fd72827..1791d3e 100644 (file)
@@ -1,3 +1 @@
 5.017009
-av_tindex                      # U
-av_top_index                   # U
index 803ad9a..06927ae 100644 (file)
@@ -1,6 +1,4 @@
 5.019001
-re_intuit_start                # A
 toFOLD                         # U
-toFOLD_utf8                    # U
 toLOWER_L1                     # U
 toTITLE                        # U
index 5af71fb..9fcc71e 100644 (file)
@@ -1,2 +1,2 @@
 5.019002
-SVt_INVLIST                    # E
+G_METHOD_NAMED                 # E
index 4bcc1d1..a6403ca 100644 (file)
@@ -1,2 +1,4 @@
 5.019003
+PERL_EXIT_ABORT                # E
+PERL_EXIT_WARN                 # E
 sv_pos_b2u_flags               # U
index a24caa7..8e224b9 100644 (file)
@@ -1,3 +1,4 @@
 5.019004
+IS_SAFE_SYSCALL                # U
 is_safe_syscall                # U
-uvoffuni_to_utf8_flags         # U
+WARN_SYSCALLS                  # E
index 07868ed..bc5a72e 100644 (file)
@@ -1,3 +1,3 @@
 5.021001
-isUTF8_CHAR                    # U
 markstack_grow                 # E (Perl_markstack_grow)
+WARN_EXPERIMENTAL__WIN32_PERLIO # E
index abe5ac1..218c304 100644 (file)
@@ -1,3 +1,6 @@
 5.021002
 grok_number_flags              # U
 op_sibling_splice              # U
+PERL_SCAN_TRAILING             # E
+WARN_MISSING                   # E
+WARN_REDUNDANT                 # E
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5021003 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5021003
new file mode 100644 (file)
index 0000000..93ef7dd
--- /dev/null
@@ -0,0 +1 @@
+5.021003
index 3a62526..4a209c3 100644 (file)
@@ -1,5 +1,5 @@
 5.021004
+CALL_CHECKER_REQUIRE_GV        # E
 cv_set_call_checker_flags      # U
 grok_infnan                    # U
 isinfnan                       # U
-sync_locale                    # U
index 2a02ad2..2e5af87 100644 (file)
@@ -1,4 +1,10 @@
 5.021005
 cv_name                        # A
+CV_NAME_NOTQUAL                # E
 newMETHOP                      # U
 newMETHOP_named                # U
+PERL_MAGIC_debugvar            # E
+PERL_MAGIC_lvref               # E
+SV_CATBYTES                    # E
+SV_CATUTF8                     # E
+WARN_EXPERIMENTAL__REFALIASING # E
index fbefd16..d3f7e99 100644 (file)
@@ -1,3 +1,5 @@
 5.021006
+DOUBLEKIND                     # E
 newDEFSVOP                     # U
 op_convert_list                # U
+WARN_LOCALE                    # E
index 1aa1e34..485119b 100644 (file)
@@ -1,4 +1,12 @@
 5.021007
-PadnameUTF8                    # E
-is_invariant_string            # U
+newPADNAMELIST                 # U
+newPADNAMEouter                # U
+newPADNAMEpvn                  # U
 newUNOP_AUX                    # E
+padnamelist_fetch              # U
+PadnamelistREFCNT              # U
+PadnamelistREFCNT_dec          # U
+padnamelist_store              # U
+PadnameREFCNT                  # U
+PadnameREFCNT_dec              # U
+PADNAMEt_OUTER                 # E
index 06633ee..6276dfd 100644 (file)
@@ -1 +1,4 @@
 5.021008
+sv_get_backrefs                # U
+WARN_EXPERIMENTAL__CONST_ATTR  # E
+WARN_EXPERIMENTAL__RE_STRICT   # E
index 821a8fb..247b2a7 100644 (file)
@@ -1,2 +1,5 @@
 5.021010
 DECLARATION_FOR_LC_NUMERIC_MANIPULATION # E
+RESTORE_LC_NUMERIC             # E
+STORE_LC_NUMERIC_FORCE_TO_UNDERLYING # E
+STORE_LC_NUMERIC_SET_TO_NEEDED # E
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5022002 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5022002
new file mode 100644 (file)
index 0000000..5a429a1
--- /dev/null
@@ -0,0 +1 @@
+5.022002
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5022003 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5022003
new file mode 100644 (file)
index 0000000..ad46f70
--- /dev/null
@@ -0,0 +1 @@
+5.022003
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5022004 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5022004
new file mode 100644 (file)
index 0000000..3974ff3
--- /dev/null
@@ -0,0 +1 @@
+5.022004
index e461a32..50ed05a 100644 (file)
@@ -1 +1,8 @@
 5.023000
+DOUBLEINFBYTES                 # E
+DOUBLEMANTBITS                 # E
+DOUBLENANBYTES                 # E
+LONGDBLINFBYTES                # E
+LONGDBLMANTBITS                # E
+LONGDBLNANBYTES                # E
+NVMANTBITS                     # E
index 2060466..5f67a83 100644 (file)
@@ -1 +1,4 @@
 5.023002
+UTF8_IS_NONCHAR                # U
+UTF8_IS_SUPER                  # A
+UTF8_IS_SURROGATE              # A
index 91f6164..938c65b 100644 (file)
@@ -1,2 +1,18 @@
 5.023008
 clear_defarray                 # U
+cx_popblock                    # U
+cx_popeval                     # U
+cx_popformat                   # U
+cx_poploop                     # U
+cx_popsub                      # U
+cx_popsub_args                 # U
+cx_popsub_common               # U
+cx_pushblock                   # U
+cx_pusheval                    # U
+cx_pushformat                  # U
+cx_pushloop_for                # U
+cx_pushloop_plain              # U
+cx_pushsub                     # U
+cx_topblock                    # U
+leave_adjust_stacks            # U
+savetmps                       # U
index 336b09a..55a21b0 100644 (file)
@@ -1,5 +1 @@
 5.023009
-toFOLD_uvchr                   # U
-toLOWER_uvchr                  # U
-toTITLE_uvchr                  # U
-toUPPER_uvchr                  # U
index 6a5e248..bcdf8cf 100644 (file)
@@ -1,45 +1 @@
 5.024000
-BhkDISABLE                     # E
-BhkENABLE                      # E
-BhkENTRY_set                   # E
-MULTICALL                      # E
-PERL_SYS_TERM                  # E
-POP_MULTICALL                  # E
-PUSH_MULTICALL                 # E
-PadARRAY                       # E
-PadMAX                         # E
-PadlistARRAY                   # E
-PadlistMAX                     # E
-PadlistNAMES                   # E
-PadlistNAMESARRAY              # E
-PadlistNAMESMAX                # E
-PadnameLEN                     # E
-PadnamePV                      # E
-PadnameREFCNT                  # E
-PadnameREFCNT_dec              # E
-PadnameSV                      # E
-PadnamelistARRAY               # E
-PadnamelistMAX                 # E
-PadnamelistREFCNT              # E
-PadnamelistREFCNT_dec          # E
-RESTORE_LC_NUMERIC             # E
-STORE_LC_NUMERIC_FORCE_TO_UNDERLYING # E
-STORE_LC_NUMERIC_SET_TO_NEEDED # E
-XS_APIVERSION_BOOTCHECK        # E
-XS_EXTERNAL                    # E
-XS_INTERNAL                    # E
-XS_VERSION_BOOTCHECK           # E
-XopDISABLE                     # E
-XopENABLE                      # E
-XopENTRY                       # E
-XopENTRYCUSTOM                 # E
-XopENTRY_set                   # E
-cophh_new_empty                # E
-my_lstat                       # U (Perl_my_lstat)
-my_stat                        # U (Perl_my_stat)
-reentrant_free                 # U
-reentrant_init                 # U
-reentrant_retry                # U
-reentrant_size                 # U
-ref                            # U (Perl_ref)
-sv_setref_pvs                  # A
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5024001 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5024001
new file mode 100644 (file)
index 0000000..e5a806c
--- /dev/null
@@ -0,0 +1 @@
+5.024001
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5024002 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5024002
new file mode 100644 (file)
index 0000000..21641ad
--- /dev/null
@@ -0,0 +1 @@
+5.024002
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5024003 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5024003
new file mode 100644 (file)
index 0000000..e7ab7b6
--- /dev/null
@@ -0,0 +1 @@
+5.024003
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5024004 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5024004
new file mode 100644 (file)
index 0000000..590396c
--- /dev/null
@@ -0,0 +1 @@
+5.024004
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025000 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025000
new file mode 100644 (file)
index 0000000..da02bb4
--- /dev/null
@@ -0,0 +1 @@
+5.025000
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025001 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025001
new file mode 100644 (file)
index 0000000..398001b
--- /dev/null
@@ -0,0 +1,2 @@
+5.025001
+op_parent                      # U
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025002 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025002
new file mode 100644 (file)
index 0000000..693dd9e
--- /dev/null
@@ -0,0 +1 @@
+5.025002
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025003 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025003
new file mode 100644 (file)
index 0000000..df0fb4b
--- /dev/null
@@ -0,0 +1,3 @@
+5.025003
+hv_bucket_ratio                # U
+WARN_EXPERIMENTAL__DECLARED_REFS # E
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025004 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025004
new file mode 100644 (file)
index 0000000..e7daf26
--- /dev/null
@@ -0,0 +1 @@
+5.025004
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025005 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025005
new file mode 100644 (file)
index 0000000..ab5b700
--- /dev/null
@@ -0,0 +1,8 @@
+5.025005
+isC9_STRICT_UTF8_CHAR          # U
+isSTRICT_UTF8_CHAR             # U
+isUTF8_CHAR_flags              # U
+is_utf8_valid_partial_char     # U
+is_utf8_valid_partial_char_flags # U
+UTF8_DISALLOW_ILLEGAL_C9_INTERCHANGE # E
+UTF8_WARN_ILLEGAL_C9_INTERCHANGE # E
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025006 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025006
new file mode 100644 (file)
index 0000000..2a276f9
--- /dev/null
@@ -0,0 +1,16 @@
+5.025006
+is_c9strict_utf8_string        # U
+is_c9strict_utf8_string_loc    # U
+is_c9strict_utf8_string_loclen # U
+is_strict_utf8_string          # U
+is_strict_utf8_string_loc      # U
+is_strict_utf8_string_loclen   # U
+is_utf8_fixed_width_buf_flags  # U
+is_utf8_fixed_width_buf_loc_flags # U
+is_utf8_fixed_width_buf_loclen_flags # U
+is_utf8_string_flags           # U
+is_utf8_string_loc_flags       # U
+is_utf8_string_loclen_flags    # U
+SvPVCLEAR                      # U
+sv_setpv_bufsize               # U
+utf8n_to_uvchr_error           # U
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025007 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025007
new file mode 100644 (file)
index 0000000..e925218
--- /dev/null
@@ -0,0 +1,5 @@
+5.025007
+CLEAR_ERRSV                    # E
+utf8_hop_back                  # U
+utf8_hop_forward               # U
+utf8_hop_safe                  # U
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025008 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025008
new file mode 100644 (file)
index 0000000..4ca9b58
--- /dev/null
@@ -0,0 +1,2 @@
+5.025008
+sv_set_undef                   # U
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025009 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025009
new file mode 100644 (file)
index 0000000..e62cc8c
--- /dev/null
@@ -0,0 +1,2 @@
+5.025009
+isASCII_LC_utf8_safe           # U
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025010 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025010
new file mode 100644 (file)
index 0000000..aec4f56
--- /dev/null
@@ -0,0 +1,2 @@
+5.025010
+op_class                       # E
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025011 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025011
new file mode 100644 (file)
index 0000000..ebbab42
--- /dev/null
@@ -0,0 +1 @@
+5.025011
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025012 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5025012
new file mode 100644 (file)
index 0000000..c1d9e63
--- /dev/null
@@ -0,0 +1 @@
+5.025012
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5026000 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5026000
new file mode 100644 (file)
index 0000000..00a1a0d
--- /dev/null
@@ -0,0 +1 @@
+5.026000
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5026001 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5026001
new file mode 100644 (file)
index 0000000..f6e8b9f
--- /dev/null
@@ -0,0 +1 @@
+5.026001
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5026002 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5026002
new file mode 100644 (file)
index 0000000..b3537a4
--- /dev/null
@@ -0,0 +1 @@
+5.026002
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5026003 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5026003
new file mode 100644 (file)
index 0000000..6b87dfd
--- /dev/null
@@ -0,0 +1 @@
+5.026003
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027000 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027000
new file mode 100644 (file)
index 0000000..fc48745
--- /dev/null
@@ -0,0 +1 @@
+5.027000
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027001 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027001
new file mode 100644 (file)
index 0000000..ca76169
--- /dev/null
@@ -0,0 +1,3 @@
+5.027001
+bytes_from_utf8_loc            # U
+is_utf8_invariant_string_loc   # U
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027002 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027002
new file mode 100644 (file)
index 0000000..4e50dae
--- /dev/null
@@ -0,0 +1,4 @@
+5.027002
+Perl_setlocale                 # U
+UTF8_DISALLOW_PERL_EXTENDED    # E
+UTF8_WARN_PERL_EXTENDED        # E
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027003 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027003
new file mode 100644 (file)
index 0000000..18f7692
--- /dev/null
@@ -0,0 +1,4 @@
+5.027003
+cv_get_call_checker_flags      # U
+PL_sv_zero                     # E
+sv_string_from_errnum          # U
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027004 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027004
new file mode 100644 (file)
index 0000000..1ad395e
--- /dev/null
@@ -0,0 +1,4 @@
+5.027004
+mg_freeext                     # U
+Perl_langinfo                  # U
+sv_rvunweaken                  # U
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027005 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027005
new file mode 100644 (file)
index 0000000..e36214c
--- /dev/null
@@ -0,0 +1 @@
+5.027005
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027006 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027006
new file mode 100644 (file)
index 0000000..ab5a48e
--- /dev/null
@@ -0,0 +1,2 @@
+5.027006
+wrap_keyword_plugin            # U
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027007 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027007
new file mode 100644 (file)
index 0000000..457e330
--- /dev/null
@@ -0,0 +1,2 @@
+5.027007
+WARN_SHADOW                    # E
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027008 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027008
new file mode 100644 (file)
index 0000000..d8981f7
--- /dev/null
@@ -0,0 +1,7 @@
+5.027008
+cx_popgiven                    # U
+cx_popwhen                     # U
+cx_pushgiven                   # U
+cx_pushwhen                    # U
+newWHENOP                      # U
+WARN_EXPERIMENTAL__SCRIPT_RUN  # E
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027009 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027009
new file mode 100644 (file)
index 0000000..c609557
--- /dev/null
@@ -0,0 +1,7 @@
+5.027009
+PERL_MAGIC_nonelem             # E
+thread_locale_init             # U
+thread_locale_term             # U
+utf8n_to_uvchr_msgs            # U
+uvchr_to_utf8_flags_msgs       # U
+WARN_EXPERIMENTAL__ALPHA_ASSERTIONS # E
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027010 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027010
new file mode 100644 (file)
index 0000000..180b065
--- /dev/null
@@ -0,0 +1 @@
+5.027010
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027011 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5027011
new file mode 100644 (file)
index 0000000..445cdc8
--- /dev/null
@@ -0,0 +1 @@
+5.027011
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5028000 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5028000
new file mode 100644 (file)
index 0000000..83f8de5
--- /dev/null
@@ -0,0 +1 @@
+5.028000
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5028001 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5028001
new file mode 100644 (file)
index 0000000..3a0bfa3
--- /dev/null
@@ -0,0 +1 @@
+5.028001
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5029000 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5029000
new file mode 100644 (file)
index 0000000..8d50429
--- /dev/null
@@ -0,0 +1 @@
+5.029000
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5029001 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5029001
new file mode 100644 (file)
index 0000000..8c1b1e9
--- /dev/null
@@ -0,0 +1 @@
+5.029001
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5029002 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5029002
new file mode 100644 (file)
index 0000000..0224de7
--- /dev/null
@@ -0,0 +1 @@
+5.029002
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5029003 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5029003
new file mode 100644 (file)
index 0000000..f426ffc
--- /dev/null
@@ -0,0 +1 @@
+5.029003
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5029004 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5029004
new file mode 100644 (file)
index 0000000..127df5e
--- /dev/null
@@ -0,0 +1 @@
+5.029004
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5029005 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5029005
new file mode 100644 (file)
index 0000000..fe97581
--- /dev/null
@@ -0,0 +1 @@
+5.029005
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5029006 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5029006
new file mode 100644 (file)
index 0000000..564c6be
--- /dev/null
@@ -0,0 +1 @@
+5.029006
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5029007 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5029007
new file mode 100644 (file)
index 0000000..360a30e
--- /dev/null
@@ -0,0 +1 @@
+5.029007
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5029008 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5029008
new file mode 100644 (file)
index 0000000..79d020c
--- /dev/null
@@ -0,0 +1 @@
+5.029008
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5029009 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5029009
new file mode 100644 (file)
index 0000000..1e765c1
--- /dev/null
@@ -0,0 +1,4 @@
+5.029009
+WARN_EXPERIMENTAL__PRIVATE_USE # E
+WARN_EXPERIMENTAL__UNIPROP_WILDCARDS # E
+WARN_EXPERIMENTAL__VLB         # E
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5029010 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5029010
new file mode 100644 (file)
index 0000000..0c02979
--- /dev/null
@@ -0,0 +1,3 @@
+5.029010
+my_strtod                      # U
+Strtod                         # U
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5030000 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5030000
new file mode 100644 (file)
index 0000000..2860a42
--- /dev/null
@@ -0,0 +1 @@
+5.030000
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5031001 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5031001
new file mode 100644 (file)
index 0000000..ebbae0b
--- /dev/null
@@ -0,0 +1 @@
+5.031001
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5031002 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5031002
new file mode 100644 (file)
index 0000000..f334acf
--- /dev/null
@@ -0,0 +1 @@
+5.031002
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5031003 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5031003
new file mode 100644 (file)
index 0000000..acfe51d
--- /dev/null
@@ -0,0 +1,6 @@
+5.031003
+parse_subsignature             # U
+SANE_ERRSV                     # U
+STORE_LC_NUMERIC_SET_TO_NEEDED_IN # U
+WITH_LC_NUMERIC_SET_TO_NEEDED  # E
+WITH_LC_NUMERIC_SET_TO_NEEDED_IN # E
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5031004 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5031004
new file mode 100644 (file)
index 0000000..0b6ecca
--- /dev/null
@@ -0,0 +1,13 @@
+5.031004
+sv_2pvbyte_flags               # U
+sv_2pvutf8_flags               # U
+SvAMAGIC_off                   # U
+SvAMAGIC_on                    # U
+SvPVbyte_nomg                  # U
+SvPVbyte_or_null               # U
+SvPVbyte_or_null_nomg          # U
+SvPVutf8_nomg                  # U
+SvPVutf8_or_null               # U
+SvPVutf8_or_null_nomg          # U
+sv_utf8_downgrade_flags        # U
+sv_utf8_downgrade_nomg         # U
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5031005 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5031005
new file mode 100644 (file)
index 0000000..fc93346
--- /dev/null
@@ -0,0 +1,23 @@
+5.031005
+gimme_V                        # U
+isALPHANUMERIC_utf8            # A
+isALPHA_utf8                   # A
+isASCII_utf8                   # A
+isBLANK_utf8                   # A
+isCNTRL_utf8                   # A
+isDIGIT_utf8                   # A
+isGRAPH_utf8                   # A
+isIDCONT_utf8                  # A
+isIDFIRST_utf8                 # A
+isLOWER_utf8                   # A
+isPRINT_utf8                   # A
+isPSXSPC_utf8                  # A
+isPUNCT_utf8                   # A
+isSPACE_utf8                   # A
+isUPPER_utf8                   # A
+isWORDCHAR_utf8                # A
+isXDIGIT_utf8                  # A
+toFOLD_utf8                    # A
+toLOWER_utf8                   # A
+toTITLE_utf8                   # A
+toUPPER_utf8                   # A
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5031006 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5031006
new file mode 100644 (file)
index 0000000..0923569
--- /dev/null
@@ -0,0 +1 @@
+5.031006
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5031007 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5031007
new file mode 100644 (file)
index 0000000..0cd061b
--- /dev/null
@@ -0,0 +1,7 @@
+5.031007
+csighandler                    # E (Perl_csighandler)
+csighandler1                   # U
+csighandler3                   # E
+perly_sighandler               # E
+sv_isa_sv                      # U
+WARN_EXPERIMENTAL__ISA         # E
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5031008 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5031008
new file mode 100644 (file)
index 0000000..f24c040
--- /dev/null
@@ -0,0 +1 @@
+5.031008
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/t/01_test.t b/gnu/usr.bin/perl/dist/Devel-PPPort/t/01_test.t
new file mode 100644 (file)
index 0000000..0215f90
--- /dev/null
@@ -0,0 +1,57 @@
+################################################################################
+#
+#            !!!!!   Do NOT edit this file directly!   !!!!!
+#
+#            Edit mktests.PL and/or parts/inc/01_test instead.
+#
+#  This file was automatically generated from the definition files in the
+#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
+#  works, please read the F<HACKERS> file that came with this distribution.
+#
+################################################################################
+
+use FindBin ();
+
+BEGIN {
+  if ($ENV{'PERL_CORE'}) {
+    chdir 't' if -d 't';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
+    require Config; import Config;
+    use vars '%Config';
+    if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
+      print "1..0 # Skip -- Perl configured without Devel::PPPort module\n";
+      exit 0;
+    }
+  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
+
+  sub load {
+    require 'testutil.pl';
+    require 'inctools';
+  }
+
+  if (1) {
+    load();
+    plan(tests => 1);
+  }
+}
+
+use Devel::PPPort;
+use strict;
+BEGIN { $^W = 1; }
+
+package Devel::PPPort;
+use vars '@ISA';
+require DynaLoader;
+@ISA = qw(DynaLoader);
+bootstrap Devel::PPPort;
+
+package main;
+
+# This test file is used as target dependency for Makefile
+ok 1;
+
index 6bf39f1..f0212e0 100644 (file)
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -21,13 +23,15 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
   if (4) {
@@ -38,7 +42,7 @@ BEGIN {
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
@@ -48,9 +52,9 @@ bootstrap Devel::PPPort;
 
 package main;
 
-ok(Devel::PPPort::HvNAME_get(\%Devel::PPPort::), 'Devel::PPPort');
+is(Devel::PPPort::HvNAME_get(\%Devel::PPPort::), 'Devel::PPPort');
 ok(!defined Devel::PPPort::HvNAME_get({}));
 
-ok(Devel::PPPort::HvNAMELEN_get(\%Devel::PPPort::), length('Devel::PPPort'));
-ok(Devel::PPPort::HvNAMELEN_get({}), 0);
+is(Devel::PPPort::HvNAMELEN_get(\%Devel::PPPort::), length('Devel::PPPort'));
+is(Devel::PPPort::HvNAMELEN_get({}), 0);
 
index a94bd38..7a7ce39 100644 (file)
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -21,13 +23,15 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
   if (3) {
@@ -38,7 +42,7 @@ BEGIN {
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
index 392a0cc..7da38e2 100644 (file)
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -21,13 +23,15 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
   if (49) {
@@ -38,7 +42,7 @@ BEGIN {
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
@@ -50,71 +54,71 @@ package main;
 
 my $mhx = "mhx";
 
-ok(&Devel::PPPort::SvPVbyte($mhx), 3);
+is(&Devel::PPPort::SvPVbyte($mhx), 3);
 
 my $i = 42;
 
-ok(&Devel::PPPort::SvPV_nolen($mhx), $i++);
-ok(&Devel::PPPort::SvPV_const($mhx), $i++);
-ok(&Devel::PPPort::SvPV_mutable($mhx), $i++);
-ok(&Devel::PPPort::SvPV_flags($mhx), $i++);
-ok(&Devel::PPPort::SvPV_flags_const($mhx), $i++);
-
-ok(&Devel::PPPort::SvPV_flags_const_nolen($mhx), $i++);
-ok(&Devel::PPPort::SvPV_flags_mutable($mhx), $i++);
-ok(&Devel::PPPort::SvPV_force($mhx), $i++);
-ok(&Devel::PPPort::SvPV_force_nolen($mhx), $i++);
-ok(&Devel::PPPort::SvPV_force_mutable($mhx), $i++);
-
-ok(&Devel::PPPort::SvPV_force_nomg($mhx), $i++);
-ok(&Devel::PPPort::SvPV_force_nomg_nolen($mhx), $i++);
-ok(&Devel::PPPort::SvPV_force_flags($mhx), $i++);
-ok(&Devel::PPPort::SvPV_force_flags_nolen($mhx), $i++);
-ok(&Devel::PPPort::SvPV_force_flags_mutable($mhx), $i++);
-
-ok(&Devel::PPPort::SvPV_nolen_const($mhx), $i++);
-ok(&Devel::PPPort::SvPV_nomg($mhx), $i++);
-ok(&Devel::PPPort::SvPV_nomg_const($mhx), $i++);
-ok(&Devel::PPPort::SvPV_nomg_const_nolen($mhx), $i++);
-ok(&Devel::PPPort::SvPV_nomg_nolen($mhx), $i++);
-
-$mhx = 42; ok(&Devel::PPPort::SvPV_nolen($mhx), 0);
-$mhx = 42; ok(&Devel::PPPort::SvPV_const($mhx), 2);
-$mhx = 42; ok(&Devel::PPPort::SvPV_mutable($mhx), 2);
-$mhx = 42; ok(&Devel::PPPort::SvPV_flags($mhx), 2);
-$mhx = 42; ok(&Devel::PPPort::SvPV_flags_const($mhx), 2);
-
-$mhx = 42; ok(&Devel::PPPort::SvPV_flags_const_nolen($mhx), 0);
-$mhx = 42; ok(&Devel::PPPort::SvPV_flags_mutable($mhx), 2);
-$mhx = 42; ok(&Devel::PPPort::SvPV_force($mhx), 2);
-$mhx = 42; ok(&Devel::PPPort::SvPV_force_nolen($mhx), 0);
-$mhx = 42; ok(&Devel::PPPort::SvPV_force_mutable($mhx), 2);
-
-$mhx = 42; ok(&Devel::PPPort::SvPV_force_nomg($mhx), 2);
-$mhx = 42; ok(&Devel::PPPort::SvPV_force_nomg_nolen($mhx), 0);
-$mhx = 42; ok(&Devel::PPPort::SvPV_force_flags($mhx), 2);
-$mhx = 42; ok(&Devel::PPPort::SvPV_force_flags_nolen($mhx), 0);
-$mhx = 42; ok(&Devel::PPPort::SvPV_force_flags_mutable($mhx), 2);
-
-$mhx = 42; ok(&Devel::PPPort::SvPV_nolen_const($mhx), 0);
-$mhx = 42; ok(&Devel::PPPort::SvPV_nomg($mhx), 2);
-$mhx = 42; ok(&Devel::PPPort::SvPV_nomg_const($mhx), 2);
-$mhx = 42; ok(&Devel::PPPort::SvPV_nomg_const_nolen($mhx), 0);
-$mhx = 42; ok(&Devel::PPPort::SvPV_nomg_nolen($mhx), 0);
+is(&Devel::PPPort::SvPV_nolen($mhx), $i++);
+is(&Devel::PPPort::SvPV_const($mhx), $i++);
+is(&Devel::PPPort::SvPV_mutable($mhx), $i++);
+is(&Devel::PPPort::SvPV_flags($mhx), $i++);
+is(&Devel::PPPort::SvPV_flags_const($mhx), $i++);
+
+is(&Devel::PPPort::SvPV_flags_const_nolen($mhx), $i++);
+is(&Devel::PPPort::SvPV_flags_mutable($mhx), $i++);
+is(&Devel::PPPort::SvPV_force($mhx), $i++);
+is(&Devel::PPPort::SvPV_force_nolen($mhx), $i++);
+is(&Devel::PPPort::SvPV_force_mutable($mhx), $i++);
+
+is(&Devel::PPPort::SvPV_force_nomg($mhx), $i++);
+is(&Devel::PPPort::SvPV_force_nomg_nolen($mhx), $i++);
+is(&Devel::PPPort::SvPV_force_flags($mhx), $i++);
+is(&Devel::PPPort::SvPV_force_flags_nolen($mhx), $i++);
+is(&Devel::PPPort::SvPV_force_flags_mutable($mhx), $i++);
+
+is(&Devel::PPPort::SvPV_nolen_const($mhx), $i++);
+is(&Devel::PPPort::SvPV_nomg($mhx), $i++);
+is(&Devel::PPPort::SvPV_nomg_const($mhx), $i++);
+is(&Devel::PPPort::SvPV_nomg_const_nolen($mhx), $i++);
+is(&Devel::PPPort::SvPV_nomg_nolen($mhx), $i++);
+
+$mhx = 42; is(&Devel::PPPort::SvPV_nolen($mhx), 0);
+$mhx = 42; is(&Devel::PPPort::SvPV_const($mhx), 2);
+$mhx = 42; is(&Devel::PPPort::SvPV_mutable($mhx), 2);
+$mhx = 42; is(&Devel::PPPort::SvPV_flags($mhx), 2);
+$mhx = 42; is(&Devel::PPPort::SvPV_flags_const($mhx), 2);
+
+$mhx = 42; is(&Devel::PPPort::SvPV_flags_const_nolen($mhx), 0);
+$mhx = 42; is(&Devel::PPPort::SvPV_flags_mutable($mhx), 2);
+$mhx = 42; is(&Devel::PPPort::SvPV_force($mhx), 2);
+$mhx = 42; is(&Devel::PPPort::SvPV_force_nolen($mhx), 0);
+$mhx = 42; is(&Devel::PPPort::SvPV_force_mutable($mhx), 2);
+
+$mhx = 42; is(&Devel::PPPort::SvPV_force_nomg($mhx), 2);
+$mhx = 42; is(&Devel::PPPort::SvPV_force_nomg_nolen($mhx), 0);
+$mhx = 42; is(&Devel::PPPort::SvPV_force_flags($mhx), 2);
+$mhx = 42; is(&Devel::PPPort::SvPV_force_flags_nolen($mhx), 0);
+$mhx = 42; is(&Devel::PPPort::SvPV_force_flags_mutable($mhx), 2);
+
+$mhx = 42; is(&Devel::PPPort::SvPV_nolen_const($mhx), 0);
+$mhx = 42; is(&Devel::PPPort::SvPV_nomg($mhx), 2);
+$mhx = 42; is(&Devel::PPPort::SvPV_nomg_const($mhx), 2);
+$mhx = 42; is(&Devel::PPPort::SvPV_nomg_const_nolen($mhx), 0);
+$mhx = 42; is(&Devel::PPPort::SvPV_nomg_nolen($mhx), 0);
 
 my $str = "";
 &Devel::PPPort::SvPV_force($str);
 my($s2, $before, $after) = &Devel::PPPort::SvPV_renew($str, 81, "x"x80);
-ok($str, "x"x80);
-ok($s2, "x"x80);
+is($str, "x"x80);
+is($s2, "x"x80);
 ok($before < 81);
-ok($after, 81);
+is($after, 81);
 
 $str = "x"x400;
 &Devel::PPPort::SvPV_force($str);
 ($s2, $before, $after) = &Devel::PPPort::SvPV_renew($str, 41, "x"x40);
-ok($str, "x"x40);
-ok($s2, "x"x40);
+is($str, "x"x40);
+is($s2, "x"x40);
 ok($before > 41);
-ok($after, 41);
+is($after, 41);
 
index 0b46a51..d918e2b 100644 (file)
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -21,13 +23,15 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
   if (14) {
@@ -38,7 +42,7 @@ BEGIN {
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
index 77a7a86..821cf01 100644 (file)
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -21,24 +23,26 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
-  if (5) {
+  if (15) {
     load();
-    plan(tests => 5);
+    plan(tests => 15);
   }
 }
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
@@ -49,17 +53,59 @@ bootstrap Devel::PPPort;
 package main;
 
 my $foo = 5;
-ok(&Devel::PPPort::TestSvUV_set($foo, 12345), 42);
-ok(&Devel::PPPort::TestSvPVX_const("mhx"), 43);
-ok(&Devel::PPPort::TestSvPVX_mutable("mhx"), 44);
+is(&Devel::PPPort::TestSvUV_set($foo, 12345), 42);
+is(&Devel::PPPort::TestSvPVX_const("mhx"), 43);
+is(&Devel::PPPort::TestSvPVX_mutable("mhx"), 44);
 
 my $bar = [];
 
 bless $bar, 'foo';
-ok($bar->x(), 'foobar');
+is($bar->x(), 'foobar');
 
 Devel::PPPort::TestSvSTASH_set($bar, 'bar');
-ok($bar->x(), 'hacker');
+is($bar->x(), 'hacker');
+
+    if (ivers($]) != ivers(5.7.2)) {
+        ok(Devel::PPPort::Test_sv_setsv_SV_NOSTEAL());
+    }
+    else {
+        skip("7.2 broken for NOSTEAL", 1);
+    }
+
+    tie my $scalar, 'TieScalarCounter', 'string';
+
+    is tied($scalar)->{fetch}, 0;
+    is tied($scalar)->{store}, 0;
+    my $copy = Devel::PPPort::newSVsv_nomg($scalar);
+    is tied($scalar)->{fetch}, 0;
+    is tied($scalar)->{store}, 0;
+
+    my $fetch = $scalar;
+    is tied($scalar)->{fetch}, 1;
+    is tied($scalar)->{store}, 0;
+    my $copy2 = Devel::PPPort::newSVsv_nomg($scalar);
+    is tied($scalar)->{fetch}, 1;
+    is tied($scalar)->{store}, 0;
+    is $copy2, 'string';
+
+package TieScalarCounter;
+
+sub TIESCALAR {
+    my ($class, $value) = @_;
+    return bless { fetch => 0, store => 0, value => $value }, $class;
+}
+
+sub FETCH {
+    my ($self) = @_;
+    $self->{fetch}++;
+    return $self->{value};
+}
+
+sub STORE {
+    my ($self, $value) = @_;
+    $self->{store}++;
+    $self->{value} = $value;
+}
 
 package foo;
 
index 4d3e80e..c26a5a6 100644 (file)
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -21,24 +23,26 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
-  if (52) {
+  if (88) {
     load();
-    plan(tests => 52);
+    plan(tests => 88);
   }
 }
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
@@ -48,12 +52,6 @@ bootstrap Devel::PPPort;
 
 package main;
 
-sub eq_array
-{
-  my($a, $b) = @_;
-  join(':', @$a) eq join(':', @$b);
-}
-
 sub f
 {
   shift;
@@ -98,10 +96,70 @@ for $test (
     ok(eq_array( [ &Devel::PPPort::call_sv_G_METHOD('meth', $flags, $obj, @$args) ], $expected));
 };
 
-ok(&Devel::PPPort::eval_pv('f()', 0), 'y');
-ok(&Devel::PPPort::eval_pv('f(qw(a b c))', 0), 'y');
+is(&Devel::PPPort::eval_pv('f()', 0), 'y');
+is(&Devel::PPPort::eval_pv('f(qw(a b c))', 0), 'y');
 
-ok(!defined $::{'less::'}, 1, "Hadn't loaded less yet");
+is(!defined $::{'less::'}, 1, "Hadn't loaded less yet");
 Devel::PPPort::load_module(0, "less", undef);
-ok(defined $::{'less::'}, 1, "Have now loaded less");
+is(defined $::{'less::'}, 1, "Have now loaded less");
+
+ok(eval { Devel::PPPort::eval_pv('die', 0); 1 });
+ok(!eval { Devel::PPPort::eval_pv('die', 1); 1 });
+ok($@ =~ /^Died at \(eval [0-9]+\) line 1\.\n$/);
+ok(eval { $@ = 'string1'; Devel::PPPort::eval_pv('', 0); 1 });
+ok(eval { $@ = 'string1'; Devel::PPPort::eval_pv('', 1); 1 });
+ok(eval { $@ = 'string1'; Devel::PPPort::eval_pv('$@ = "string2"', 0); 1 });
+ok(eval { $@ = 'string1'; Devel::PPPort::eval_pv('$@ = "string2"', 1); 1 });
+ok(eval { $@ = 'string1'; Devel::PPPort::eval_pv('$@ = "string2"; die "string3"', 0); 1 });
+ok(!eval { $@ = 'string1'; Devel::PPPort::eval_pv('$@ = "string2"; die "string3"', 1); 1 });
+ok($@ =~ /^string3 at \(eval [0-9]+\) line 1\.\n$/);
+ok(!eval { Devel::PPPort::eval_pv('die False->new', 1); 1 }, 'check false value is rethrown');
+
+if ("$]" >= '5.007003' or ("$]" >= '5.006001' and "$]" < '5.007')) {
+    my $hashref = { key => 'value' };
+    is(eval { Devel::PPPort::eval_pv('die $hashref', 1); 1 }, undef, 'check plain hashref is rethrown');
+    is(ref($@), 'HASH', 'check $@ is hashref') and
+        is($@->{key}, 'value', 'check $@ hashref has correct value');
+
+    my $false = False->new;
+    ok(!$false);
+    is(eval { Devel::PPPort::eval_pv('die $false', 1); 1 }, undef, 'check false objects are rethrown');
+    is(ref($@), 'False', 'check that $@ contains False object');
+    is("$@", "$false", 'check we got the expected object');
+} else {
+    skip 'skip: no support for references in $@', 7;
+}
+
+ok(eval { Devel::PPPort::eval_sv('die', 0); 1 });
+ok(!eval { Devel::PPPort::eval_sv('die', &Devel::PPPort::G_RETHROW); 1 });
+ok($@ =~ /^Died at \(eval [0-9]+\) line 1\.\n$/);
+ok(eval { $@ = 'string1'; Devel::PPPort::eval_sv('', 0); 1 });
+ok(eval { $@ = 'string1'; Devel::PPPort::eval_sv('', &Devel::PPPort::G_RETHROW); 1 });
+ok(eval { $@ = 'string1'; Devel::PPPort::eval_sv('$@ = "string2"', 0); 1 });
+ok(eval { $@ = 'string1'; Devel::PPPort::eval_sv('$@ = "string2"', &Devel::PPPort::G_RETHROW); 1 });
+ok(eval { $@ = 'string1'; Devel::PPPort::eval_sv('$@ = "string2"; die "string3"', 0); 1 });
+ok(!eval { $@ = 'string1'; Devel::PPPort::eval_sv('$@ = "string2"; die "string3"', &Devel::PPPort::G_RETHROW); 1 });
+ok($@ =~ /^string3 at \(eval [0-9]+\) line 1\.\n$/);
+ok(!eval { Devel::PPPort::eval_sv('die False->new', &Devel::PPPort::G_RETHROW); 1 }, 'check false value is rethrown');
+
+if ("$]" >= '5.007003' or ("$]" >= '5.006001' and "$]" < '5.007')) {
+    my $hashref = { key => 'value' };
+    is(eval { Devel::PPPort::eval_sv('die $hashref', &Devel::PPPort::G_RETHROW); 1 }, undef, 'check plain hashref is rethrown');
+    is(ref($@), 'HASH', 'check $@ is hashref') and
+        is($@->{key}, 'value', 'check $@ hashref has correct value');
+
+    my $false = False->new;
+    ok(!$false);
+    is(eval { Devel::PPPort::eval_sv('die $false', &Devel::PPPort::G_RETHROW); 1 }, undef, 'check false objects are rethrown');
+    is(ref($@), 'False', 'check that $@ contains False object');
+    is("$@", "$false", 'check we got the expected object');
+} else {
+    skip 'skip: no support for references in $@', 7;
+}
+
+{
+    package False;
+    use overload bool => sub { 0 }, '""' => sub { 'Foo' };
+    sub new { bless {}, shift }
+}
 
index 1a981cb..649b45d 100644 (file)
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -21,24 +23,26 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
-  if (28) {
+  if (8) {
     load();
-    plan(tests => 28);
+    plan(tests => 8);
   }
 }
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
@@ -54,7 +58,7 @@ my $package;
   $package = &Devel::PPPort::CopSTASHPV();
 }
 print "# $package\n";
-ok($package, "MyPackage");
+is($package, "MyPackage");
 
 my $file = &Devel::PPPort::CopFILE();
 print "# $file\n";
@@ -62,10 +66,7 @@ ok($file =~ /cop/i);
 
 BEGIN {
   if ("$]" < 5.006000) {
-    # Skip
-    for (1..28) {
-      ok(1, 1);
-    }
+    skip("Perl version too early", 8);
     exit;
   }
 }
@@ -102,9 +103,6 @@ for (
 ) {
     my ($sub, $arg, @want) = @$_;
     my @got = $sub->($arg);
-    ok(@got, @want);
-    for (0..$#want) {
-        ok($got[$_], $want[$_]);
-    }
+    ok(eq_array(\@got, \@want));
 }
 
index c432df6..0963363 100644 (file)
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -21,13 +23,15 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
   if (7) {
@@ -38,7 +42,7 @@ BEGIN {
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
@@ -53,15 +57,15 @@ my $rv;
 $Devel::PPPort::exception_caught = undef;
 
 $rv = eval { &Devel::PPPort::exception(0) };
-ok($@, '');
+is($@, '');
 ok(defined $rv);
-ok($rv, 42);
-ok($Devel::PPPort::exception_caught, 0);
+is($rv, 42);
+is($Devel::PPPort::exception_caught, 0);
 
 $Devel::PPPort::exception_caught = undef;
 
 $rv = eval { &Devel::PPPort::exception(1) };
-ok($@, "boo\n");
+is($@, "boo\n");
 ok(not defined $rv);
-ok($Devel::PPPort::exception_caught, 1);
+is($Devel::PPPort::exception_caught, 1);
 
index a25ede5..ef471e0 100644 (file)
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -21,24 +23,26 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
-  if (1) {
+  if (5) {
     load();
-    plan(tests => 1);
+    plan(tests => 5);
   }
 }
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
@@ -48,8 +52,29 @@ bootstrap Devel::PPPort;
 
 package main;
 
+use Config;
+
+if ("$]" < '5.004') {
+    skip 'skip: No newSVpvf support', 5;
+    exit;
+}
+
 my $num = 1.12345678901234567890;
 
 eval { Devel::PPPort::croak_NVgf($num) };
 ok($@ =~ /^1.1234567890/);
 
+is(Devel::PPPort::sprintf_iv(-8), 'XX_-8_XX');
+is(Devel::PPPort::sprintf_uv(15), 'XX_15_XX');
+
+my $ivsize = $Config::Config{ivsize};
+if ($ivsize && ($ivsize == 4 || $ivsize == 8)) {
+    my $ivmax = ($ivsize == 4) ? '2147483647' : '9223372036854775807';
+    my $uvmax = ($ivsize == 4) ? '4294967295' : '18446744073709551615';
+    is(Devel::PPPort::sprintf_ivmax(), $ivmax);
+    is(Devel::PPPort::sprintf_uvmax(), $uvmax);
+}
+else {
+    skip 'skip: unknown ivsize', 2;
+}
+
index b807ce8..98c54a4 100644 (file)
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -21,13 +23,15 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
   if (10) {
@@ -38,7 +42,7 @@ BEGIN {
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
@@ -48,15 +52,15 @@ bootstrap Devel::PPPort;
 
 package main;
 
-ok(&Devel::PPPort::grok_number("42"), 42);
+is(&Devel::PPPort::grok_number("42"), 42);
 ok(!defined(&Devel::PPPort::grok_number("A")));
-ok(&Devel::PPPort::grok_bin("10000001"), 129);
-ok(&Devel::PPPort::grok_hex("deadbeef"), 0xdeadbeef);
-ok(&Devel::PPPort::grok_oct("377"), 255);
+is(&Devel::PPPort::grok_bin("10000001"), 129);
+is(&Devel::PPPort::grok_hex("deadbeef"), 0xdeadbeef);
+is(&Devel::PPPort::grok_oct("377"), 255);
 
-ok(&Devel::PPPort::Perl_grok_number("42"), 42);
+is(&Devel::PPPort::Perl_grok_number("42"), 42);
 ok(!defined(&Devel::PPPort::Perl_grok_number("A")));
-ok(&Devel::PPPort::Perl_grok_bin("10000001"), 129);
-ok(&Devel::PPPort::Perl_grok_hex("deadbeef"), 0xdeadbeef);
-ok(&Devel::PPPort::Perl_grok_oct("377"), 255);
+is(&Devel::PPPort::Perl_grok_bin("10000001"), 129);
+is(&Devel::PPPort::Perl_grok_hex("deadbeef"), 0xdeadbeef);
+is(&Devel::PPPort::Perl_grok_oct("377"), 255);
 
index 06dfed1..6e80768 100644 (file)
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -21,13 +23,15 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
   if (7) {
@@ -38,7 +42,7 @@ BEGIN {
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
@@ -48,16 +52,16 @@ bootstrap Devel::PPPort;
 
 package main;
 
-ok(Devel::PPPort::GvSVn(), 1);
+is(Devel::PPPort::GvSVn(), 1);
 
-ok(Devel::PPPort::isGV_with_GP(), 2);
+is(Devel::PPPort::isGV_with_GP(), 2);
 
-ok(Devel::PPPort::get_cvn_flags(), 3);
+is(Devel::PPPort::get_cvn_flags(), 3);
 
-ok(Devel::PPPort::gv_fetchpvn_flags(), \*Devel::PPPort::VERSION);
+is(Devel::PPPort::gv_fetchpvn_flags(), \*Devel::PPPort::VERSION);
 
-ok(Devel::PPPort::gv_fetchsv("Devel::PPPort::VERSION"), \*Devel::PPPort::VERSION);
+is(Devel::PPPort::gv_fetchsv("Devel::PPPort::VERSION"), \*Devel::PPPort::VERSION);
 
-ok(Devel::PPPort::gv_init_type("sanity_check", 0, 0), "*main::sanity_check");
+is(Devel::PPPort::gv_init_type("sanity_check", 0, 0), "*main::sanity_check");
 ok($::{sanity_check});
 
index ed1cb2e..d2dfc7f 100644 (file)
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -21,13 +23,15 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
   if (4) {
@@ -38,7 +42,7 @@ BEGIN {
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/t/locale.t b/gnu/usr.bin/perl/dist/Devel-PPPort/t/locale.t
new file mode 100644 (file)
index 0000000..67929c4
--- /dev/null
@@ -0,0 +1,67 @@
+################################################################################
+#
+#            !!!!!   Do NOT edit this file directly!   !!!!!
+#
+#            Edit mktests.PL and/or parts/inc/locale instead.
+#
+#  This file was automatically generated from the definition files in the
+#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
+#  works, please read the F<HACKERS> file that came with this distribution.
+#
+################################################################################
+
+use FindBin ();
+
+BEGIN {
+  if ($ENV{'PERL_CORE'}) {
+    chdir 't' if -d 't';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
+    require Config; import Config;
+    use vars '%Config';
+    if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
+      print "1..0 # Skip -- Perl configured without Devel::PPPort module\n";
+      exit 0;
+    }
+  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
+
+  sub load {
+    require 'testutil.pl';
+    require 'inctools';
+  }
+
+  if (1) {
+    load();
+    plan(tests => 1);
+  }
+}
+
+use Devel::PPPort;
+use strict;
+BEGIN { $^W = 1; }
+
+package Devel::PPPort;
+use vars '@ISA';
+require DynaLoader;
+@ISA = qw(DynaLoader);
+bootstrap Devel::PPPort;
+
+package main;
+
+use Config;
+
+  # We don't know for sure that we are in the global locale for testing.  But
+  # if this is unthreaded, it almost certainly is.  But Configure can be called
+  # to force POSIX locales on unthreaded systems.  If this becomes a problem
+  # this check could be beefed up.
+  if ($Config{usethreads}) {
+    ok(1);
+}
+else {
+    ok(&Devel::PPPort::sync_locale());
+}
+
index 2f38276..fd4b499 100644 (file)
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -21,13 +23,15 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
   if (10) {
@@ -38,7 +42,7 @@ BEGIN {
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
@@ -48,15 +52,15 @@ bootstrap Devel::PPPort;
 
 package main;
 
-ok(join(':', &Devel::PPPort::mPUSHs()), "foo:bar:42");
-ok(join(':', &Devel::PPPort::mPUSHp()), "one:two:three");
-ok(join(':', &Devel::PPPort::mPUSHn()), "0.5:-0.25:0.125");
-ok(join(':', &Devel::PPPort::mPUSHi()), "-1:2:-3");
-ok(join(':', &Devel::PPPort::mPUSHu()), "1:2:3");
-
-ok(join(':', &Devel::PPPort::mXPUSHs()), "foo:bar:42");
-ok(join(':', &Devel::PPPort::mXPUSHp()), "one:two:three");
-ok(join(':', &Devel::PPPort::mXPUSHn()), "0.5:-0.25:0.125");
-ok(join(':', &Devel::PPPort::mXPUSHi()), "-1:2:-3");
-ok(join(':', &Devel::PPPort::mXPUSHu()), "1:2:3");
+is(join(':', &Devel::PPPort::mPUSHs()), "foo:bar:42");
+is(join(':', &Devel::PPPort::mPUSHp()), "one:two:three");
+is(join(':', &Devel::PPPort::mPUSHn()), "0.5:-0.25:0.125");
+is(join(':', &Devel::PPPort::mPUSHi()), "-1:2:-3");
+is(join(':', &Devel::PPPort::mPUSHu()), "1:2:3");
+
+is(join(':', &Devel::PPPort::mXPUSHs()), "foo:bar:42");
+is(join(':', &Devel::PPPort::mXPUSHp()), "one:two:three");
+is(join(':', &Devel::PPPort::mXPUSHn()), "0.5:-0.25:0.125");
+is(join(':', &Devel::PPPort::mXPUSHi()), "-1:2:-3");
+is(join(':', &Devel::PPPort::mXPUSHu()), "1:2:3");
 
index ed74dff..471c485 100644 (file)
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -21,24 +23,26 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
-  if (23) {
+  if (63) {
     load();
-    plan(tests => 23);
+    plan(tests => 63);
   }
 }
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
@@ -50,27 +54,27 @@ package main;
 
 # Find proper magic
 ok(my $obj1 = Devel::PPPort->new_with_mg());
-ok(Devel::PPPort::as_string($obj1), 'hello');
+is(Devel::PPPort::as_string($obj1), 'hello');
 
 # Find with no magic
 my $obj = bless {}, 'Fake::Class';
-ok(Devel::PPPort::as_string($obj), "Sorry, your princess is in another castle.");
+is(Devel::PPPort::as_string($obj), "Sorry, your princess is in another castle.");
 
 # Find with other magic (not the magic we are looking for)
 ok($obj = Devel::PPPort->new_with_other_mg());
-ok(Devel::PPPort::as_string($obj), "Sorry, your princess is in another castle.");
+is(Devel::PPPort::as_string($obj), "Sorry, your princess is in another castle.");
 
 # Okay, attempt to remove magic that isn't there
 Devel::PPPort::remove_other_magic($obj1);
-ok(Devel::PPPort::as_string($obj1), 'hello');
+is(Devel::PPPort::as_string($obj1), 'hello');
 
 # Remove magic that IS there
 Devel::PPPort::remove_null_magic($obj1);
-ok(Devel::PPPort::as_string($obj1), "Sorry, your princess is in another castle.");
+is(Devel::PPPort::as_string($obj1), "Sorry, your princess is in another castle.");
 
 # Removing when no magic present
 Devel::PPPort::remove_null_magic($obj1);
-ok(Devel::PPPort::as_string($obj1), "Sorry, your princess is in another castle.");
+is(Devel::PPPort::as_string($obj1), "Sorry, your princess is in another castle.");
 
 use Tie::Hash;
 my %h;
@@ -79,34 +83,34 @@ $h{foo} = 'foo';
 $h{bar} = '';
 
 &Devel::PPPort::sv_catpv_mg($h{foo}, 'bar');
-ok($h{foo}, 'foobar');
+is($h{foo}, 'foobar');
 
 &Devel::PPPort::sv_catpvn_mg($h{bar}, 'baz');
-ok($h{bar}, 'baz');
+is($h{bar}, 'baz');
 
 &Devel::PPPort::sv_catsv_mg($h{foo}, '42');
-ok($h{foo}, 'foobar42');
+is($h{foo}, 'foobar42');
 
 &Devel::PPPort::sv_setiv_mg($h{bar}, 42);
-ok($h{bar}, 42);
+is($h{bar}, 42);
 
 &Devel::PPPort::sv_setnv_mg($h{PI}, 3.14159);
 ok(abs($h{PI} - 3.14159) < 0.01);
 
 &Devel::PPPort::sv_setpv_mg($h{mhx}, 'mhx');
-ok($h{mhx}, 'mhx');
+is($h{mhx}, 'mhx');
 
 &Devel::PPPort::sv_setpvn_mg($h{mhx}, 'Marcus');
-ok($h{mhx}, 'Marcus');
+is($h{mhx}, 'Marcus');
 
 &Devel::PPPort::sv_setsv_mg($h{sv}, 'SV');
-ok($h{sv}, 'SV');
+is($h{sv}, 'SV');
 
 &Devel::PPPort::sv_setuv_mg($h{sv}, 4711);
-ok($h{sv}, 4711);
+is($h{sv}, 4711);
 
 &Devel::PPPort::sv_usepvn_mg($h{sv}, 'Perl');
-ok($h{sv}, 'Perl');
+is($h{sv}, 'Perl');
 
 # v1 is treated as a bareword in older perls...
 my $ver = do { local $SIG{'__WARN__'} = sub {}; eval qq[v1.2.0] };
@@ -118,3 +122,108 @@ my $foo = 'bar';
 ok(Devel::PPPort::sv_magic_portable($foo));
 ok($foo eq 'bar');
 
+    tie my $scalar, 'TieScalarCounter', 10;
+    my $fetch = $scalar;
+
+    is tied($scalar)->{fetch}, 1;
+    is tied($scalar)->{store}, 0;
+    is Devel::PPPort::magic_SvIV_nomg($scalar), 10;
+    is tied($scalar)->{fetch}, 1;
+    is tied($scalar)->{store}, 0;
+    is Devel::PPPort::magic_SvUV_nomg($scalar), 10;
+    is tied($scalar)->{fetch}, 1;
+    is tied($scalar)->{store}, 0;
+    is Devel::PPPort::magic_SvNV_nomg($scalar), 10;
+    is tied($scalar)->{fetch}, 1;
+    is tied($scalar)->{store}, 0;
+    is Devel::PPPort::magic_SvPV_nomg_nolen($scalar), 10;
+    is tied($scalar)->{fetch}, 1;
+    is tied($scalar)->{store}, 0;
+    ok Devel::PPPort::magic_SvTRUE_nomg($scalar);
+    is tied($scalar)->{fetch}, 1;
+    is tied($scalar)->{store}, 0;
+
+    my $object = OverloadedObject->new('string', 5.5, 0);
+
+    is Devel::PPPort::magic_SvIV_nomg($object), 5;
+    is Devel::PPPort::magic_SvUV_nomg($object), 5;
+    is Devel::PPPort::magic_SvNV_nomg($object), 5.5;
+    is Devel::PPPort::magic_SvPV_nomg_nolen($object), 'string';
+    ok !Devel::PPPort::magic_SvTRUE_nomg($object);
+
+tie my $negative, 'TieScalarCounter', -1;
+$fetch = $negative;
+
+is tied($negative)->{fetch}, 1;
+is tied($negative)->{store}, 0;
+is Devel::PPPort::magic_SvIV_nomg($negative), -1;
+if (ivers($]) >= ivers(5.6)) {
+    ok !Devel::PPPort::SVf_IVisUV($negative);
+} else {
+    skip 'SVf_IVisUV is unsupported', 1;
+}
+is tied($negative)->{fetch}, 1;
+is tied($negative)->{store}, 0;
+Devel::PPPort::magic_SvUV_nomg($negative);
+if (ivers($]) >= ivers(5.6)) {
+    ok !Devel::PPPort::SVf_IVisUV($negative);
+} else {
+    skip 'SVf_IVisUV is unsupported', 1;
+}
+is tied($negative)->{fetch}, 1;
+is tied($negative)->{store}, 0;
+
+tie my $big, 'TieScalarCounter', Devel::PPPort::above_IV_MAX();
+$fetch = $big;
+
+is tied($big)->{fetch}, 1;
+is tied($big)->{store}, 0;
+Devel::PPPort::magic_SvIV_nomg($big);
+if (ivers($]) >= ivers(5.6)) {
+    ok Devel::PPPort::SVf_IVisUV($big);
+} else {
+    skip 'SVf_IVisUV is unsupported', 1;
+}
+is tied($big)->{fetch}, 1;
+is tied($big)->{store}, 0;
+is Devel::PPPort::magic_SvUV_nomg($big), Devel::PPPort::above_IV_MAX();
+if (ivers($]) >= ivers(5.6)) {
+    ok Devel::PPPort::SVf_IVisUV($big);
+} else {
+    skip 'SVf_IVisUV is unsupported', 1;
+}
+is tied($big)->{fetch}, 1;
+is tied($big)->{store}, 0;
+
+package TieScalarCounter;
+
+sub TIESCALAR {
+    my ($class, $value) = @_;
+    return bless { fetch => 0, store => 0, value => $value }, $class;
+}
+
+sub FETCH {
+    my ($self) = @_;
+    $self->{fetch}++;
+    return $self->{value};
+}
+
+sub STORE {
+    my ($self, $value) = @_;
+    $self->{store}++;
+    $self->{value} = $value;
+}
+
+package OverloadedObject;
+
+sub new {
+    my ($class, $str, $num, $bool) = @_;
+    return bless { str => $str, num => $num, bool => $bool }, $class;
+}
+
+use overload
+    '""' => sub { $_[0]->{str} },
+    '0+' => sub { $_[0]->{num} },
+    'bool' => sub { $_[0]->{bool} },
+    ;
+
index 74ecb99..45bda3b 100644 (file)
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -21,13 +23,15 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
   if (1) {
@@ -38,7 +42,7 @@ BEGIN {
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
@@ -48,5 +52,5 @@ bootstrap Devel::PPPort;
 
 package main;
 
-ok(Devel::PPPort::checkmem(), 6);
+is(Devel::PPPort::checkmem(), 6);
 
index 9a9822a..986d79b 100644 (file)
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -21,24 +23,26 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
-  if (93) {
+  if (102) {
     load();
-    plan(tests => 93);
+    plan(tests => 102);
   }
 }
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
@@ -48,7 +52,7 @@ bootstrap Devel::PPPort;
 
 package main;
 
-BEGIN { if ($] lt '5.006') { $^W = 0; } }
+BEGIN { if ("$]" < '5.006') { $^W = 0; } }
 
 my $warn;
 my $die;
@@ -62,13 +66,13 @@ my $obj = bless {}, 'Package';
 
 undef $die;
 ok !defined eval { Devel::PPPort::croak_sv("\xE1\n") };
-ok $@, "\xE1\n";
-ok $die, "\xE1\n";
+is $@, "\xE1\n";
+is $die, "\xE1\n";
 
 undef $die;
 ok !defined eval { Devel::PPPort::croak_sv(10) };
-ok $@ =~ /^10 at $0 line /;
-ok $die =~ /^10 at $0 line /;
+ok $@ =~ /^10 at \Q$0\E line /;
+ok $die =~ /^10 at \Q$0\E line /;
 
 undef $die;
 $@ = 'should not be visible (1)';
@@ -76,8 +80,8 @@ ok !defined eval {
     $@ = 'should not be visible (2)';
     Devel::PPPort::croak_sv('');
 };
-ok $@ =~ /^ at $0 line /;
-ok $die =~ /^ at $0 line /;
+ok $@ =~ /^ at \Q$0\E line /;
+ok $die =~ /^ at \Q$0\E line /;
 
 undef $die;
 $@ = 'should not be visible';
@@ -85,8 +89,8 @@ ok !defined eval {
     $@ = 'this must be visible';
     Devel::PPPort::croak_sv($@)
 };
-ok $@ =~ /^this must be visible at $0 line /;
-ok $die =~ /^this must be visible at $0 line /;
+ok $@ =~ /^this must be visible at \Q$0\E line /;
+ok $die =~ /^this must be visible at \Q$0\E line /;
 
 undef $die;
 $@ = 'should not be visible';
@@ -94,125 +98,159 @@ ok !defined eval {
     $@ = "this must be visible\n";
     Devel::PPPort::croak_sv($@)
 };
-ok $@, "this must be visible\n";
-ok $die, "this must be visible\n";
+is $@, "this must be visible\n";
+is $die, "this must be visible\n";
+
+undef $die;
+$@ = 'should not be visible';
+ok !defined eval {
+    $@ = 'this must be visible';
+    Devel::PPPort::croak_sv_errsv()
+};
+ok $@ =~ /^this must be visible at \Q$0\E line /;
+ok $die =~ /^this must be visible at \Q$0\E line /;
+
+undef $die;
+$@ = 'should not be visible';
+ok !defined eval {
+    $@ = "this must be visible\n";
+    Devel::PPPort::croak_sv_errsv()
+};
+is $@, "this must be visible\n";
+is $die, "this must be visible\n";
+
+undef $die;
+ok !defined eval { Devel::PPPort::croak_sv_with_counter("message\n") };
+is $@, "message\n";
+is Devel::PPPort::get_counter(), 1;
 
 undef $die;
 ok !defined eval { Devel::PPPort::croak_sv('') };
-ok $@ =~ /^ at $0 line /;
-ok $die =~ /^ at $0 line /;
+ok $@ =~ /^ at \Q$0\E line /;
+ok $die =~ /^ at \Q$0\E line /;
 
 undef $die;
 ok !defined eval { Devel::PPPort::croak_sv("\xE1") };
-ok $@ =~ /^\xE1 at $0 line /;
-ok $die =~ /^\xE1 at $0 line /;
+ok $@ =~ /^\xE1 at \Q$0\E line /;
+ok $die =~ /^\xE1 at \Q$0\E line /;
 
 undef $die;
 ok !defined eval { Devel::PPPort::croak_sv("\xC3\xA1") };
-ok $@ =~ /^\xC3\xA1 at $0 line /;
-ok $die =~ /^\xC3\xA1 at $0 line /;
+ok $@ =~ /^\xC3\xA1 at \Q$0\E line /;
+ok $die =~ /^\xC3\xA1 at \Q$0\E line /;
 
 undef $warn;
 Devel::PPPort::warn_sv("\xE1\n");
-ok $warn, "\xE1\n";
+is $warn, "\xE1\n";
 
 undef $warn;
 Devel::PPPort::warn_sv(10);
-ok $warn =~ /^10 at $0 line /;
+ok $warn =~ /^10 at \Q$0\E line /;
 
 undef $warn;
 Devel::PPPort::warn_sv('');
-ok $warn =~ /^ at $0 line /;
+ok $warn =~ /^ at \Q$0\E line /;
 
 undef $warn;
 Devel::PPPort::warn_sv("\xE1");
-ok $warn =~ /^\xE1 at $0 line /;
+ok $warn =~ /^\xE1 at \Q$0\E line /;
 
 undef $warn;
 Devel::PPPort::warn_sv("\xC3\xA1");
-ok $warn =~ /^\xC3\xA1 at $0 line /;
+ok $warn =~ /^\xC3\xA1 at \Q$0\E line /;
 
-ok Devel::PPPort::mess_sv("\xE1\n", 0), "\xE1\n";
-ok Devel::PPPort::mess_sv(do {my $tmp = "\xE1\n"}, 1), "\xE1\n";
+is Devel::PPPort::mess_sv("\xE1\n", 0), "\xE1\n";
+is Devel::PPPort::mess_sv(do {my $tmp = "\xE1\n"}, 1), "\xE1\n";
 
-ok Devel::PPPort::mess_sv(10, 0) =~ /^10 at $0 line /;
-ok Devel::PPPort::mess_sv(do {my $tmp = 10}, 1) =~ /^10 at $0 line /;
+ok Devel::PPPort::mess_sv(10, 0) =~ /^10 at \Q$0\E line /;
+ok Devel::PPPort::mess_sv(do {my $tmp = 10}, 1) =~ /^10 at \Q$0\E line /;
 
-ok Devel::PPPort::mess_sv('', 0) =~ /^ at $0 line /;
-ok Devel::PPPort::mess_sv(do {my $tmp = ''}, 1) =~ /^ at $0 line /;
+ok Devel::PPPort::mess_sv('', 0) =~ /^ at \Q$0\E line /;
+ok Devel::PPPort::mess_sv(do {my $tmp = ''}, 1) =~ /^ at \Q$0\E line /;
 
-ok Devel::PPPort::mess_sv("\xE1", 0) =~ /^\xE1 at $0 line /;
-ok Devel::PPPort::mess_sv(do {my $tmp = "\xE1"}, 1) =~ /^\xE1 at $0 line /;
+ok Devel::PPPort::mess_sv("\xE1", 0) =~ /^\xE1 at \Q$0\E line /;
+ok Devel::PPPort::mess_sv(do {my $tmp = "\xE1"}, 1) =~ /^\xE1 at \Q$0\E line /;
 
-ok Devel::PPPort::mess_sv("\xC3\xA1", 0) =~ /^\xC3\xA1 at $0 line /;
-ok Devel::PPPort::mess_sv(do {my $tmp = "\xC3\xA1"}, 1) =~ /^\xC3\xA1 at $0 line /;
+ok Devel::PPPort::mess_sv("\xC3\xA1", 0) =~ /^\xC3\xA1 at \Q$0\E line /;
+ok Devel::PPPort::mess_sv(do {my $tmp = "\xC3\xA1"}, 1) =~ /^\xC3\xA1 at \Q$0\E line /;
 
-if ($] ge '5.006') {
-    BEGIN { if ($] ge '5.006' && $] lt '5.008') { require utf8; utf8->import(); } }
+if ("$]" >= '5.006') {
+    BEGIN { if ("$]" >= '5.006' && "$]" < '5.008') { require utf8; utf8->import(); } }
 
     undef $die;
     ok !defined eval { Devel::PPPort::croak_sv("\x{100}\n") };
-    ok $@, "\x{100}\n";
-    if ($] ne '5.008') {
-        ok $die, "\x{100}\n";
+    if ("$]" < '5.007001' || "$]" > '5.007003') {
+        is $@, "\x{100}\n";
     } else {
-        skip 'skip: broken utf8 support in die hook', 0;
+        skip 'skip: broken utf8 support in die hook', 1;
+    }
+    if ("$]" < '5.007001' || "$]" > '5.008') {
+        is $die, "\x{100}\n";
+    } else {
+        skip 'skip: broken utf8 support in die hook', 1;
     }
 
     undef $die;
     ok !defined eval { Devel::PPPort::croak_sv("\x{100}") };
-    ok $@ =~ /^\x{100} at $0 line /;
-    if ($] ne '5.008') {
-        ok $die =~ /^\x{100} at $0 line /;
+    if ("$]" < '5.007001' || "$]" > '5.007003') {
+        ok $@ =~ /^\x{100} at \Q$0\E line /;
+    } else {
+        skip 'skip: broken utf8 support in die hook', 1;
+    }
+    if ("$]" < '5.007001' || "$]" > '5.008') {
+        ok $die =~ /^\x{100} at \Q$0\E line /;
     } else {
-        skip 'skip: broken utf8 support in die hook', 0;
+        skip 'skip: broken utf8 support in die hook', 1;
     }
 
-    if ($] ne '5.008') {
+    if ("$]" < '5.007001' || "$]" > '5.008') {
         undef $warn;
         Devel::PPPort::warn_sv("\x{100}\n");
-        ok $warn, "\x{100}\n";
+        is $warn, "\x{100}\n";
 
         undef $warn;
         Devel::PPPort::warn_sv("\x{100}");
-        ok (my $tmp = $warn) =~ /^\x{100} at $0 line /;
+        ok (my $tmp = $warn) =~ /^\x{100} at \Q$0\E line /;
     } else {
-        skip 'skip: broken utf8 support in warn hook', 0 for 1..2;
+        skip 'skip: broken utf8 support in warn hook', 2;
     }
 
-    ok Devel::PPPort::mess_sv("\x{100}\n", 0), "\x{100}\n";
-    ok Devel::PPPort::mess_sv(do {my $tmp = "\x{100}\n"}, 1), "\x{100}\n";
+    is Devel::PPPort::mess_sv("\x{100}\n", 0), "\x{100}\n";
+    is Devel::PPPort::mess_sv(do {my $tmp = "\x{100}\n"}, 1), "\x{100}\n";
 
-    ok Devel::PPPort::mess_sv("\x{100}", 0) =~ /^\x{100} at $0 line /;
-    ok Devel::PPPort::mess_sv(do {my $tmp = "\x{100}"}, 1) =~ /^\x{100} at $0 line /;
+    ok Devel::PPPort::mess_sv("\x{100}", 0) =~ /^\x{100} at \Q$0\E line /;
+    ok Devel::PPPort::mess_sv(do {my $tmp = "\x{100}"}, 1) =~ /^\x{100} at \Q$0\E line /;
 } else {
-    skip 'skip: no utf8 support', 0 for 1..12;
+    skip 'skip: no utf8 support', 12;
 }
 
 if (ord('A') != 65) {
-    skip 'skip: no ASCII support', 0 for 1..24;
-} elsif ($] ge '5.008' && $] ne '5.012000') {
+    skip 'skip: no ASCII support', 24;
+} elsif (      "$]" >= '5.008'
+         &&    "$]" != '5.013000'     # Broken in these ranges
+         && ! ("$]" >= '5.011005' && "$]" <= '5.012000'))
+{
     undef $die;
     ok !defined eval { Devel::PPPort::croak_sv(eval '"\N{U+E1}\n"') };
-    ok $@, "\xE1\n";
-    ok $die, "\xE1\n";
+    is $@, "\xE1\n";
+    is $die, "\xE1\n";
 
     undef $die;
     ok !defined eval { Devel::PPPort::croak_sv(eval '"\N{U+E1}"') };
-    ok $@ =~ /^\xE1 at $0 line /;
-    ok $die =~ /^\xE1 at $0 line /;
+    ok $@ =~ /^\xE1 at \Q$0\E line /;
+    ok $die =~ /^\xE1 at \Q$0\E line /;
 
     {
         undef $die;
         my $expect = eval '"\N{U+C3}\N{U+A1}\n"';
         ok !defined eval { Devel::PPPort::croak_sv("\xC3\xA1\n") };
-        ok $@, $expect;
-        ok $die, $expect;
+        is $@, $expect;
+        is $die, $expect;
     }
 
     {
         undef $die;
-        my $expect = eval 'qr/^\N{U+C3}\N{U+A1} at $0 line /';
+        my $expect = eval 'qr/^\N{U+C3}\N{U+A1} at \Q$0\E line /';
         ok !defined eval { Devel::PPPort::croak_sv("\xC3\xA1") };
         ok $@ =~ $expect;
         ok $die =~ $expect;
@@ -220,36 +258,41 @@ if (ord('A') != 65) {
 
     undef $warn;
     Devel::PPPort::warn_sv(eval '"\N{U+E1}\n"');
-    ok $warn, "\xE1\n";
+    is $warn, "\xE1\n";
 
     undef $warn;
     Devel::PPPort::warn_sv(eval '"\N{U+E1}"');
-    ok $warn =~ /^\xE1 at $0 line /;
+    ok $warn =~ /^\xE1 at \Q$0\E line /;
 
     undef $warn;
     Devel::PPPort::warn_sv("\xC3\xA1\n");
-    ok $warn, eval '"\N{U+C3}\N{U+A1}\n"';
+    is $warn, eval '"\N{U+C3}\N{U+A1}\n"';
 
     undef $warn;
     Devel::PPPort::warn_sv("\xC3\xA1");
-    ok $warn =~ eval 'qr/^\N{U+C3}\N{U+A1} at $0 line /';
+    ok $warn =~ eval 'qr/^\N{U+C3}\N{U+A1} at \Q$0\E line /';
 
-    ok Devel::PPPort::mess_sv(eval('"\N{U+E1}\n"'), 0), eval '"\N{U+E1}\n"';
-    ok Devel::PPPort::mess_sv(do {my $tmp = eval '"\N{U+E1}\n"'}, 1), eval '"\N{U+E1}\n"';
+    if ("$]" < '5.004') {
+        skip 'skip: no support for mess_sv', 8;
+    }
+    else {
+      is Devel::PPPort::mess_sv(eval('"\N{U+E1}\n"'), 0), eval '"\N{U+E1}\n"';
+      is Devel::PPPort::mess_sv(do {my $tmp = eval '"\N{U+E1}\n"'}, 1), eval '"\N{U+E1}\n"';
 
-    ok Devel::PPPort::mess_sv(eval('"\N{U+E1}"'), 0) =~ eval 'qr/^\N{U+E1} at $0 line /';
-    ok Devel::PPPort::mess_sv(do {my $tmp = eval '"\N{U+E1}"'}, 1) =~ eval 'qr/^\N{U+E1} at $0 line /';
+      ok Devel::PPPort::mess_sv(eval('"\N{U+E1}"'), 0) =~ eval 'qr/^\N{U+E1} at \Q$0\E line /';
+      ok Devel::PPPort::mess_sv(do {my $tmp = eval '"\N{U+E1}"'}, 1) =~ eval 'qr/^\N{U+E1} at \Q$0\E line /';
 
-    ok Devel::PPPort::mess_sv("\xC3\xA1\n", 0), eval '"\N{U+C3}\N{U+A1}\n"';
-    ok Devel::PPPort::mess_sv(do {my $tmp = "\xC3\xA1\n"}, 1), eval '"\N{U+C3}\N{U+A1}\n"';
+      is Devel::PPPort::mess_sv("\xC3\xA1\n", 0), eval '"\N{U+C3}\N{U+A1}\n"';
+      is Devel::PPPort::mess_sv(do {my $tmp = "\xC3\xA1\n"}, 1), eval '"\N{U+C3}\N{U+A1}\n"';
 
-    ok Devel::PPPort::mess_sv("\xC3\xA1", 0) =~ eval 'qr/^\N{U+C3}\N{U+A1} at $0 line /';
-    ok Devel::PPPort::mess_sv(do {my $tmp = "\xC3\xA1"}, 1) =~ eval 'qr/^\N{U+C3}\N{U+A1} at $0 line /';
+      ok Devel::PPPort::mess_sv("\xC3\xA1", 0) =~ eval 'qr/^\N{U+C3}\N{U+A1} at \Q$0\E line /';
+      ok Devel::PPPort::mess_sv(do {my $tmp = "\xC3\xA1"}, 1) =~ eval 'qr/^\N{U+C3}\N{U+A1} at \Q$0\E line /';
+    }
 } else {
-    skip 'skip: no support for \N{U+..} syntax', 0 for 1..24;
+    skip 'skip: no support for \N{U+..} syntax', 24;
 }
 
-if ($] ge '5.007003' or ($] ge '5.006001' and $] lt '5.007')) {
+if ("$]" >= '5.007003' or ("$]" >= '5.006001' and "$]" < '5.007')) {
     undef $die;
     ok !defined eval { Devel::PPPort::croak_sv($scalar_ref) };
     ok $@ == $scalar_ref;
@@ -270,15 +313,15 @@ if ($] ge '5.007003' or ($] ge '5.006001' and $] lt '5.007')) {
     ok $@ == $obj;
     ok $die == $obj;
 } else {
-    skip 'skip: no support for exceptions', 0 for 1..12;
+    skip 'skip: no support for exceptions', 12;
 }
 
 ok !defined eval { Devel::PPPort::croak_no_modify() };
-ok $@ =~ /^Modification of a read-only value attempted at $0 line /;
+ok $@ =~ /^Modification of a read-only value attempted at \Q$0\E line /;
 
 ok !defined eval { Devel::PPPort::croak_memory_wrap() };
-ok $@ =~ /^panic: memory wrap at $0 line /;
+ok $@ =~ /^panic: memory wrap at \Q$0\E line /;
 
 ok !defined eval { Devel::PPPort::croak_xs_usage("params") };
-ok $@ =~ /^Usage: Devel::PPPort::croak_xs_usage\(params\) at $0 line /;
+ok $@ =~ /^Usage: Devel::PPPort::croak_xs_usage\(params\) at \Q$0\E line /;
 
index 7fbd3e9..6901a19 100644 (file)
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -21,24 +23,26 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
-  if (128) {
+  if (26826) {
     load();
-    plan(tests => 128);
+    plan(tests => 26826);
   }
 }
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
@@ -50,40 +54,40 @@ package main;
 
 use vars qw($my_sv @my_av %my_hv);
 
-ok(&Devel::PPPort::boolSV(1));
-ok(!&Devel::PPPort::boolSV(0));
+ok(&Devel::PPPort::boolSV(1), "Verify boolSV(1) is true");
+ok(!&Devel::PPPort::boolSV(0), "Verify boolSV(0) is false");
 
 $_ = "Fred";
-ok(&Devel::PPPort::DEFSV(), "Fred");
-ok(&Devel::PPPort::UNDERBAR(), "Fred");
+is(&Devel::PPPort::DEFSV(), "Fred", '$_ is FRED; Verify DEFSV is FRED');
+is(&Devel::PPPort::UNDERBAR(), "Fred", 'And verify UNDERBAR is FRED');
 
-if ("$]" >= 5.009002 && "$]" < 5.023 && "$]" < 5.023004) {
+if (ivers($]) >= ivers(5.9.2) && ivers($]) < ivers(5.23)) {
   eval q{
     no warnings "deprecated";
-    no if $^V > v5.17.9, warnings => "experimental::lexical_topic";
+    no if $^V >= v5.17.9, warnings => "experimental::lexical_topic";
     my $_ = "Tony";
-    ok(&Devel::PPPort::DEFSV(), "Fred");
-    ok(&Devel::PPPort::UNDERBAR(), "Tony");
+    is(&Devel::PPPort::DEFSV(), "Fred", 'lexical_topic eval: $_ is Tony; Verify DEFSV is Fred');
+    is(&Devel::PPPort::UNDERBAR(), "Tony", 'And verify UNDERBAR is Tony');
   };
+  die __FILE__ . __LINE__ . ": $@" if $@;
 }
 else {
-  ok(1);
-  ok(1);
+  skip("perl version outside testing range of lexical_topic", 2);
 }
 
 my @r = &Devel::PPPort::DEFSV_modify();
 
-ok(@r == 3);
-ok($r[0], 'Fred');
-ok($r[1], 'DEFSV');
-ok($r[2], 'Fred');
+ok(@r == 3, "Verify got 3 elements");
+is($r[0], 'Fred');
+is($r[1], 'DEFSV');
+is($r[2], 'Fred');
 
-ok(&Devel::PPPort::DEFSV(), "Fred");
+is(&Devel::PPPort::DEFSV(), "Fred");
 
 eval { 1 };
-ok(!&Devel::PPPort::ERRSV());
+ok(!&Devel::PPPort::ERRSV(), "Verify ERRSV on true is false");
 eval { cannot_call_this_one() };
-ok(&Devel::PPPort::ERRSV());
+ok(&Devel::PPPort::ERRSV(), "Verify ERRSV on false is true");
 
 ok(&Devel::PPPort::gv_stashpvn('Devel::PPPort', 0));
 ok(!&Devel::PPPort::gv_stashpvn('does::not::exist', 0));
@@ -109,178 +113,387 @@ ok(&Devel::PPPort::get_cv('my_cv', 0));
 ok(!&Devel::PPPort::get_cv('not_my_cv', 0));
 ok(&Devel::PPPort::get_cv('not_my_cv', 1));
 
-ok(Devel::PPPort::dXSTARG(42), 43);
-ok(Devel::PPPort::dAXMARK(4711), 4710);
+is(Devel::PPPort::dXSTARG(42), 43);
+is(Devel::PPPort::dAXMARK(4711), 4710);
 
-ok(Devel::PPPort::prepush(), 42);
+is(Devel::PPPort::prepush(), 42);
 
-ok(join(':', Devel::PPPort::xsreturn(0)), 'test1');
-ok(join(':', Devel::PPPort::xsreturn(1)), 'test1:test2');
+is(join(':', Devel::PPPort::xsreturn(0)), 'test1');
+is(join(':', Devel::PPPort::xsreturn(1)), 'test1:test2');
 
-ok(Devel::PPPort::PERL_ABS(42), 42);
-ok(Devel::PPPort::PERL_ABS(-13), 13);
+is(Devel::PPPort::PERL_ABS(42), 42, "Verify PERL_ABS(42) is 42");
+is(Devel::PPPort::PERL_ABS(-13), 13, "Verify PERL_ABS(-13) is 13");
 
-ok(Devel::PPPort::SVf(42), "$]" >= 5.004 ? '[42]' : '42');
-ok(Devel::PPPort::SVf('abc'), "$]" >= 5.004 ? '[abc]' : 'abc');
+is(Devel::PPPort::SVf(42), ivers($]) >= ivers(5.4) ? '[42]' : '42');
+is(Devel::PPPort::SVf('abc'), ivers($]) >= ivers(5.4) ? '[abc]' : 'abc');
 
-ok(&Devel::PPPort::Perl_ppaddr_t("FOO"), "foo");
+is(&Devel::PPPort::Perl_ppaddr_t("FOO"), "foo");
 
-ok(&Devel::PPPort::ptrtests(), 63);
+is(&Devel::PPPort::ptrtests(), 63);
 
-ok(&Devel::PPPort::OpSIBLING_tests(), 0);
+is(&Devel::PPPort::OpSIBLING_tests(), 0);
 
-if ("$]" >= 5.009000) {
+if (ivers($]) >= ivers(5.9)) {
   eval q{
-    ok(&Devel::PPPort::check_HeUTF8("hello"), "norm");
-    ok(&Devel::PPPort::check_HeUTF8("\N{U+263a}"), "utf8");
+    is(&Devel::PPPort::check_HeUTF8("hello"), "norm");
+    is(&Devel::PPPort::check_HeUTF8("\N{U+263a}"), "utf8");
   };
 } else {
-  ok(1, 1);
-  ok(1, 1);
+  skip("Too early perl version", 2);
 }
 
 @r = &Devel::PPPort::check_c_array();
-ok($r[0], 4);
-ok($r[1], "13");
+is($r[0], 4);
+is($r[1], "13");
 
 ok(!Devel::PPPort::SvRXOK(""));
 ok(!Devel::PPPort::SvRXOK(bless [], "Regexp"));
 
-if ("$]" < 5.005) {
-        skip 'no qr// objects in this perl', 0;
-        skip 'no qr// objects in this perl', 0;
+if (ivers($]) < ivers(5.5)) {
+        skip 'no qr// objects in this perl', 2;
 } else {
         my $qr = eval 'qr/./';
-        ok(Devel::PPPort::SvRXOK($qr));
+        ok(Devel::PPPort::SvRXOK($qr), "SVRXOK(qr) is true");
         ok(Devel::PPPort::SvRXOK(bless $qr, "Surprise"));
 }
 
-ok(  Devel::PPPort::test_isBLANK(ord(" ")));
-ok(! Devel::PPPort::test_isBLANK(ord("\n")));
-
-ok(  Devel::PPPort::test_isBLANK_A(ord("\t")));
-ok(! Devel::PPPort::test_isBLANK_A(ord("\r")));
-
-ok(  Devel::PPPort::test_isUPPER(ord("A")));
-ok(! Devel::PPPort::test_isUPPER(ord("a")));
-
-ok(  Devel::PPPort::test_isUPPER_A(ord("Z")));
-
-# One of these two is uppercase in EBCDIC; the other in Latin1, but neither are
-# ASCII uppercase.
-ok(! Devel::PPPort::test_isUPPER_A(ord(0xDC)));
-ok(! Devel::PPPort::test_isUPPER_A(ord(0xFC)));
-
-ok(  Devel::PPPort::test_isLOWER(ord("b")));
-ok(! Devel::PPPort::test_isLOWER(ord("B")));
-
-ok(  Devel::PPPort::test_isLOWER_A(ord("y")));
-
-# One of these two is lowercase in EBCDIC; the other in Latin1, but neither are
-# ASCII lowercase.
-ok(! Devel::PPPort::test_isLOWER_A(ord(0xDC)));
-ok(! Devel::PPPort::test_isLOWER_A(ord(0xFC)));
-
-ok(  Devel::PPPort::test_isALPHA(ord("C")));
-ok(! Devel::PPPort::test_isALPHA(ord("1")));
-
-ok(  Devel::PPPort::test_isALPHA_A(ord("x")));
-ok(! Devel::PPPort::test_isALPHA_A(0xDC));
-
-ok(  Devel::PPPort::test_isWORDCHAR(ord("_")));
-ok(! Devel::PPPort::test_isWORDCHAR(ord("@")));
-
-ok(  Devel::PPPort::test_isWORDCHAR_A(ord("2")));
-ok(! Devel::PPPort::test_isWORDCHAR_A(0xFC));
-
-ok(  Devel::PPPort::test_isALPHANUMERIC(ord("4")));
-ok(! Devel::PPPort::test_isALPHANUMERIC(ord("_")));
-
-ok(  Devel::PPPort::test_isALPHANUMERIC_A(ord("l")));
-ok(! Devel::PPPort::test_isALPHANUMERIC_A(0xDC));
-
-ok(  Devel::PPPort::test_isALNUM(ord("c")));
-ok(! Devel::PPPort::test_isALNUM(ord("}")));
-
-ok(  Devel::PPPort::test_isALNUM_A(ord("5")));
-ok(! Devel::PPPort::test_isALNUM_A(0xFC));
-
-ok(  Devel::PPPort::test_isDIGIT(ord("6")));
-ok(! Devel::PPPort::test_isDIGIT(ord("_")));
-
-ok(  Devel::PPPort::test_isDIGIT_A(ord("7")));
-ok(! Devel::PPPort::test_isDIGIT_A(0xDC));
-
-ok(  Devel::PPPort::test_isOCTAL(ord("7")));
-ok(! Devel::PPPort::test_isOCTAL(ord("8")));
-
-ok(  Devel::PPPort::test_isOCTAL_A(ord("0")));
-ok(! Devel::PPPort::test_isOCTAL_A(ord("9")));
-
-ok(  Devel::PPPort::test_isIDFIRST(ord("D")));
-ok(! Devel::PPPort::test_isIDFIRST(ord("1")));
-
-ok(  Devel::PPPort::test_isIDFIRST_A(ord("_")));
-ok(! Devel::PPPort::test_isIDFIRST_A(0xFC));
-
-ok(  Devel::PPPort::test_isIDCONT(ord("e")));
-ok(! Devel::PPPort::test_isIDCONT(ord("@")));
-
-ok(  Devel::PPPort::test_isIDCONT_A(ord("2")));
-ok(! Devel::PPPort::test_isIDCONT_A(0xDC));
-
-ok(  Devel::PPPort::test_isSPACE(ord(" ")));
-ok(! Devel::PPPort::test_isSPACE(ord("_")));
+ok( Devel::PPPort::NATIVE_TO_LATIN1(0xB6) == 0xB6);
+ok( Devel::PPPort::NATIVE_TO_LATIN1(0x1) == 0x1);
+ok( Devel::PPPort::NATIVE_TO_LATIN1(ord("A")) == 0x41);
+ok( Devel::PPPort::NATIVE_TO_LATIN1(ord("0")) == 0x30);
 
-ok(  Devel::PPPort::test_isSPACE_A(ord("\cK")));
-ok(! Devel::PPPort::test_isSPACE_A(ord("F")));
-
-# This stresses the edge for ASCII machines, but happens to work on EBCDIC as
-# well
-ok(  Devel::PPPort::test_isASCII(0x7F));
-ok(! Devel::PPPort::test_isASCII(0x80));
-
-ok(  Devel::PPPort::test_isASCII_A(ord("9")));
-
-# B6 is the PARAGRAPH SIGN in ASCII and EBCDIC
-ok(! Devel::PPPort::test_isASCII_A(0xB6));
-
-ok(  Devel::PPPort::test_isCNTRL(ord("\e")));
-ok(! Devel::PPPort::test_isCNTRL(ord(" ")));
-
-ok(  Devel::PPPort::test_isCNTRL_A(ord("\a")));
-ok(! Devel::PPPort::test_isCNTRL_A(0xB6));
-
-ok(  Devel::PPPort::test_isPRINT(ord(" ")));
-ok(! Devel::PPPort::test_isPRINT(ord("\n")));
-
-ok(  Devel::PPPort::test_isPRINT_A(ord("G")));
-ok(! Devel::PPPort::test_isPRINT_A(0xB6));
-
-ok(  Devel::PPPort::test_isGRAPH(ord("h")));
-ok(! Devel::PPPort::test_isGRAPH(ord(" ")));
-
-ok(  Devel::PPPort::test_isGRAPH_A(ord("i")));
-ok(! Devel::PPPort::test_isGRAPH_A(0xB6));
-
-ok(  Devel::PPPort::test_isPUNCT(ord("#")));
-ok(! Devel::PPPort::test_isPUNCT(ord(" ")));
+ok( Devel::PPPort::LATIN1_TO_NATIVE(0xB6) == 0xB6, "Verify LATIN1_TO_NATIVE(0xB6) is 0xB6");
+if (ord("A") == 65) {
+    ok( Devel::PPPort::LATIN1_TO_NATIVE(0x41) == 0x41);
+    ok( Devel::PPPort::LATIN1_TO_NATIVE(0x30) == 0x30);
+}
+else {
+    ok( Devel::PPPort::LATIN1_TO_NATIVE(0x41) == 0xC1);
+    ok( Devel::PPPort::LATIN1_TO_NATIVE(0x30) == 0xF0);
+}
 
-ok(  Devel::PPPort::test_isPUNCT_A(ord("*")));
-ok(! Devel::PPPort::test_isPUNCT_A(0xB6));
+ok(  Devel::PPPort::isALNUMC_L1(ord("5")));
+ok(  Devel::PPPort::isALNUMC_L1(0xFC));
+ok(! Devel::PPPort::isALNUMC_L1(0xB6));
+
+ok(  Devel::PPPort::isOCTAL(ord("7")), "Verify '7' is OCTAL");
+ok(! Devel::PPPort::isOCTAL(ord("8")), "Verify '8' isn't OCTAL");
+
+ok(  Devel::PPPort::isOCTAL_A(ord("0")), "Verify '0' is OCTAL_A");
+ok(! Devel::PPPort::isOCTAL_A(ord("9")), "Verify '9' isn't OCTAL_A");
+
+ok(  Devel::PPPort::isOCTAL_L1(ord("2")), "Verify '2' is OCTAL_L1");
+ok(! Devel::PPPort::isOCTAL_L1(ord("8")), "Verify '8' isn't OCTAL_L1");
+
+my $way_too_early_msg = 'UTF-8 not implemented on this perl';
+
+# For the other properties, we test every code point from 0.255, and a
+# smattering of higher ones.  First populate a hash with keys like '65:ALPHA'
+# to indicate that the code point there is alphabetic
+my $i;
+my %types;
+for $i (0x41..0x5A, 0x61..0x7A, 0xAA, 0xB5, 0xBA, 0xC0..0xD6, 0xD8..0xF6,
+        0xF8..0x101)
+{
+    my $native = Devel::PPPort::LATIN1_TO_NATIVE($i);
+    $types{"$native:ALPHA"} = 1;
+    $types{"$native:ALPHANUMERIC"} = 1;
+    $types{"$native:IDFIRST"} = 1;
+    $types{"$native:IDCONT"} = 1;
+    $types{"$native:PRINT"} = 1;
+    $types{"$native:WORDCHAR"} = 1;
+}
+for $i (0x30..0x39, 0x660, 0xFF19) {
+    my $native = Devel::PPPort::LATIN1_TO_NATIVE($i);
+    $types{"$native:ALPHANUMERIC"} = 1;
+    $types{"$native:DIGIT"} = 1;
+    $types{"$native:IDCONT"} = 1;
+    $types{"$native:WORDCHAR"} = 1;
+    $types{"$native:GRAPH"} = 1;
+    $types{"$native:PRINT"} = 1;
+    $types{"$native:XDIGIT"} = 1 if $i < 255 || ($i >= 0xFF10 && $i <= 0xFF19);
+}
 
-ok(  Devel::PPPort::test_isXDIGIT(ord("A")));
-ok(! Devel::PPPort::test_isXDIGIT(ord("_")));
+for $i (0..0x7F) {
+    my $native = Devel::PPPort::LATIN1_TO_NATIVE($i);
+    $types{"$native:ASCII"} = 1;
+}
+for $i (0..0x1f, 0x7F..0x9F) {
+    my $native = Devel::PPPort::LATIN1_TO_NATIVE($i);
+    $types{"$native:CNTRL"} = 1;
+}
+for $i (0x21..0x7E, 0xA1..0x101, 0x660) {
+    my $native = Devel::PPPort::LATIN1_TO_NATIVE($i);
+    $types{"$native:GRAPH"} = 1;
+    $types{"$native:PRINT"} = 1;
+}
+for $i (0x09, 0x20, 0xA0) {
+    my $native = Devel::PPPort::LATIN1_TO_NATIVE($i);
+    $types{"$native:BLANK"} = 1;
+    $types{"$native:SPACE"} = 1;
+    $types{"$native:PSXSPC"} = 1;
+    $types{"$native:PRINT"} = 1 if $i > 0x09;
+}
+for $i (0x09..0x0D, 0x85, 0x2029) {
+    my $native = Devel::PPPort::LATIN1_TO_NATIVE($i);
+    $types{"$native:SPACE"} = 1;
+    $types{"$native:PSXSPC"} = 1;
+}
+for $i (0x41..0x5A, 0xC0..0xD6, 0xD8..0xDE, 0x100) {
+    my $native = Devel::PPPort::LATIN1_TO_NATIVE($i);
+    $types{"$native:UPPER"} = 1;
+    $types{"$native:XDIGIT"} = 1 if $i < 0x47;
+}
+for $i (0x61..0x7A, 0xAA, 0xB5, 0xBA, 0xDF..0xF6, 0xF8..0xFF, 0x101) {
+    my $native = Devel::PPPort::LATIN1_TO_NATIVE($i);
+    $types{"$native:LOWER"} = 1;
+    $types{"$native:XDIGIT"} = 1 if $i < 0x67;
+}
+for $i (0x21..0x2F, 0x3A..0x40, 0x5B..0x60, 0x7B..0x7E, 0xB6, 0xA1, 0xA7, 0xAB,
+        0xB7, 0xBB, 0xBF, 0x5BE)
+{
+    my $native = Devel::PPPort::LATIN1_TO_NATIVE($i);
+    $types{"$native:PUNCT"} = 1;
+    $types{"$native:GRAPH"} = 1;
+    $types{"$native:PRINT"} = 1;
+}
 
-ok(  Devel::PPPort::test_isXDIGIT_A(ord("9")));
-ok(! Devel::PPPort::test_isXDIGIT_A(0xDC));
+$i = ord('_');
+$types{"$i:WORDCHAR"} = 1;
+$types{"$i:IDFIRST"} = 1;
+$types{"$i:IDCONT"} = 1;
+
+# Now find all the unique code points included above.
+my %code_points_to_test;
+my $key;
+for $key (keys %types) {
+    $key =~ s/:.*//;
+    $code_points_to_test{$key} = 1;
+}
 
-ok(  Devel::PPPort::test_isPSXSPC(ord(" ")));
-ok(! Devel::PPPort::test_isPSXSPC(ord("k")));
+# And test each one
+for $i (sort { $a <=> $b } keys %code_points_to_test) {
+    my $native = Devel::PPPort::LATIN1_TO_NATIVE($i);
+    my $hex = sprintf("0x%02X", $native);
+
+    # And for each code point test each of the classes
+    my $class;
+    for $class (qw(ALPHA ALPHANUMERIC ASCII BLANK CNTRL DIGIT GRAPH IDCONT
+                   IDFIRST LOWER PRINT PSXSPC PUNCT SPACE UPPER WORDCHAR
+                   XDIGIT))
+    {
+        if ($i < 256) {  # For the ones that can fit in a byte, test each of
+                         # three macros.
+            my $suffix;
+            for $suffix ("", "_A", "_L1", "_uvchr") {
+                my $should_be = ($i > 0x7F && $suffix !~ /_(uvchr|L1)/)
+                                ? 0     # Fail on non-ASCII unless unicode
+                                : ($types{"$native:$class"} || 0);
+                if (ivers($]) < ivers(5.6) && $suffix eq '_uvchr') {
+                    skip("No UTF-8 on this perl", 1);
+                    next;
+                }
+
+                my $eval_string = "Devel::PPPort::is${class}$suffix($hex)";
+                local $SIG{__WARN__} = sub {};
+                my $is = eval $eval_string || 0;
+                die "eval 'For $i: $eval_string' gave $@" if $@;
+                is($is, $should_be, "'$eval_string'");
+            }
+        }
+
+        # For all code points, test the '_utf8' macros
+        my $sub_fcn;
+        for $sub_fcn ("", "_LC") {
+            my $skip = "";
+            if (ivers($]) < ivers(5.6)) {
+                $skip = $way_too_early_msg;
+            }
+            elsif (ivers($]) < ivers(5.7) && $native > 255) {
+                $skip = "Perls earlier than 5.7 give wrong answers for above Latin1 code points";
+            }
+            elsif (ivers($]) <= ivers(5.11.3) && $native == 0x2029 && ($class eq 'PRINT' || $class eq 'GRAPH')) {
+                $skip = "Perls earlier than 5.11.3 considered high space characters as isPRINT and isGRAPH";
+            }
+            elsif ($sub_fcn eq '_LC' && $i < 256) {
+                $skip = "Testing of code points whose results depend on locale is skipped ";
+            }
+            my $fcn = "Devel::PPPort::is${class}${sub_fcn}_utf8_safe";
+            my $utf8;
+
+            if ($skip) {
+                skip $skip, 1;
+            }
+            else {
+                $utf8 = quotemeta Devel::PPPort::uvchr_to_utf8($native);
+                my $should_be = $types{"$native:$class"} || 0;
+                my $eval_string = "$fcn(\"$utf8\", 0)";
+                local $SIG{__WARN__} = sub {};
+                my $is = eval $eval_string || 0;
+                die "eval 'For $i, $eval_string' gave $@" if $@;
+                is($is, $should_be, sprintf("For U+%04X '%s'", $native, $eval_string));
+            }
+
+            # And for the high code points, test that a too short malformation (the
+            # -1) causes it to fail
+            if ($i > 255) {
+                if ($skip) {
+                    skip $skip, 1;
+                }
+                elsif (ivers($]) >= ivers(5.25.9)) {
+                    skip("Prints an annoying error message that khw doesn't know how to easily suppress", 1);
+                }
+                else {
+                    my $eval_string = "$fcn(\"$utf8\", -1)";
+                    local $SIG{__WARN__} = sub {};
+                    my $is = eval "$eval_string" || 0;
+                    die "eval '$eval_string' gave $@" if $@;
+                    is($is, 0, sprintf("For U+%04X '%s'", $native, $eval_string));
+                }
+            }
+        }
+    }
+}
 
-ok(  Devel::PPPort::test_isPSXSPC_A(ord("\cK")));
-ok(! Devel::PPPort::test_isPSXSPC_A(0xFC));
+my %case_changing = ( 'LOWER' => [ [ ord('A'), ord('a') ],
+                                   [ Devel::PPPort::LATIN1_TO_NATIVE(0xC0),
+                                     Devel::PPPort::LATIN1_TO_NATIVE(0xE0) ],
+                                   [ 0x100, 0x101 ],
+                                 ],
+                      'FOLD'  => [ [ ord('C'), ord('c') ],
+                                   [ Devel::PPPort::LATIN1_TO_NATIVE(0xC0),
+                                     Devel::PPPort::LATIN1_TO_NATIVE(0xE0) ],
+                                   [ 0x104, 0x105 ],
+                                   [ Devel::PPPort::LATIN1_TO_NATIVE(0xDF),
+                                     'ss' ],
+                                 ],
+                      'UPPER' => [ [ ord('a'), ord('A'),  ],
+                                   [ Devel::PPPort::LATIN1_TO_NATIVE(0xE0),
+                                     Devel::PPPort::LATIN1_TO_NATIVE(0xC0) ],
+                                   [ 0x101, 0x100 ],
+                                   [ Devel::PPPort::LATIN1_TO_NATIVE(0xDF),
+                                     'SS' ],
+                                 ],
+                      'TITLE' => [ [ ord('c'), ord('C'),  ],
+                                   [ Devel::PPPort::LATIN1_TO_NATIVE(0xE2),
+                                     Devel::PPPort::LATIN1_TO_NATIVE(0xC2) ],
+                                   [ 0x103, 0x102 ],
+                                   [ Devel::PPPort::LATIN1_TO_NATIVE(0xDF),
+                                     'Ss' ],
+                                 ],
+                    );
+
+my $name;
+for $name (keys %case_changing) {
+    my @code_points_to_test = @{$case_changing{$name}};
+    my $unchanged;
+    for $unchanged (@code_points_to_test) {
+        my @pair = @$unchanged;
+        my $original = $pair[0];
+        my $changed = $pair[1];
+        my $utf8_changed = $changed;
+        my $is_cp = $utf8_changed =~ /^\d+$/;
+        my $should_be_bytes;
+        if (ivers($]) >= ivers(5.6)) {
+            if ($is_cp) {
+                $utf8_changed = Devel::PPPort::uvchr_to_utf8($changed);
+                $should_be_bytes = Devel::PPPort::UTF8_SAFE_SKIP($utf8_changed, 0);
+            }
+            else {
+                die("Test currently doesn't work for non-ASCII multi-char case changes") if eval '$utf8_changed =~ /[[:^ascii:]]/';
+                $should_be_bytes = length $utf8_changed;
+            }
+        }
+
+        my $fcn = "to${name}_uvchr";
+        my $skip = "";
+
+        if (ivers($]) < ivers(5.6)) {
+            $skip = $way_too_early_msg;
+        }
+        elsif (! $is_cp) {
+            $skip = "Can't do uvchr on a multi-char string";
+        }
+        if ($skip) {
+            skip $skip, 4;
+        }
+        else {
+            if ($is_cp) {
+                $utf8_changed = Devel::PPPort::uvchr_to_utf8($changed);
+                $should_be_bytes = Devel::PPPort::UTF8_SAFE_SKIP($utf8_changed, 0);
+            }
+            else {
+                my $non_ascii_re = (ivers($]) >= ivers(5.6)) ? '[[:^ascii:]]' : '[^\x00-\x7F]';
+                die("Test currently doesn't work for non-ASCII multi-char case changes") if eval '$utf8_changed =~ /$non_ascii_re/';
+                $should_be_bytes = length $utf8_changed;
+            }
+
+            my $ret = eval "Devel::PPPort::$fcn($original)";
+            my $fail = $@;  # Have to save $@, as it gets destroyed
+            is ($fail, "", "$fcn($original) didn't fail");
+            my $first = (ivers($]) != ivers(5.6))
+                        ? substr($utf8_changed, 0, 1)
+                        : $utf8_changed, 0, 1;
+            is($ret->[0], ord $first,
+               "ord of $fcn($original) is $changed");
+            is($ret->[1], $utf8_changed,
+               "UTF-8 of of $fcn($original) is correct");
+            is($ret->[2], $should_be_bytes,
+               "Length of $fcn($original) is $should_be_bytes");
+        }
+
+        my $truncate;
+        for $truncate (0..2) {
+            my $skip;
+            if (ivers($]) < ivers(5.6)) {
+                $skip = $way_too_early_msg;
+            }
+            elsif (! $is_cp && ivers($]) < ivers(5.7.3)) {
+                $skip = "Multi-character case change not implemented until 5.7.3";
+            }
+            elsif ($truncate == 2 && ivers($]) > ivers(5.25.8)) {
+                $skip = "Zero length inputs cause assertion failure; test dies in modern perls";
+            }
+            elsif ($truncate > 0 && length $changed > 1) {
+                $skip = "Don't test shortened multi-char case changes";
+            }
+            elsif ($truncate > 0 && Devel::PPPort::UVCHR_IS_INVARIANT($original)) {
+                $skip = "Don't try to test shortened single bytes";
+            }
+            if ($skip) {
+                skip $skip, 4;
+            }
+            else {
+                my $fcn = "to${name}_utf8_safe";
+                my $utf8 = quotemeta Devel::PPPort::uvchr_to_utf8($original);
+                my $real_truncate = ($truncate < 2)
+                                    ? $truncate : $should_be_bytes;
+                my $eval_string = "Devel::PPPort::$fcn(\"$utf8\", $real_truncate)";
+                my $ret = eval "no warnings; $eval_string" || 0;
+                my $fail = $@;  # Have to save $@, as it gets destroyed
+                if ($truncate == 0) {
+                    is ($fail, "", "Didn't fail on full length input");
+                    my $first = (ivers($]) != ivers(5.6))
+                                ? substr($utf8_changed, 0, 1)
+                                : $utf8_changed, 0, 1;
+                    is($ret->[0], ord $first,
+                       "ord of $fcn($original) is $changed");
+                    is($ret->[1], $utf8_changed,
+                       "UTF-8 of of $fcn($original) is correct");
+                    is($ret->[2], $should_be_bytes,
+                    "Length of $fcn($original) is $should_be_bytes");
+                }
+                else {
+                    is ($fail, eval 'qr/Malformed UTF-8 character/',
+                        "Gave appropriate error for short char: $original");
+                    skip("Expected failure means remaining tests for"
+                       . " this aren't relevant", 3);
+                }
+            }
+        }
+    }
+}
 
-ok(&Devel::PPPort::av_top_index([1,2,3]), 2);
-ok(&Devel::PPPort::av_tindex([1,2,3,4]), 3);
+is(&Devel::PPPort::av_top_index([1,2,3]), 2);
+is(&Devel::PPPort::av_tindex([1,2,3,4]), 3);
 
index cb207a4..f279875 100644 (file)
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -21,13 +23,15 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
   if (3) {
@@ -38,7 +42,7 @@ BEGIN {
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
@@ -49,11 +53,11 @@ bootstrap Devel::PPPort;
 package main;
 
 &Devel::PPPort::call_newCONSTSUB_1();
-ok(&Devel::PPPort::test_value_1(), 1);
+is(&Devel::PPPort::test_value_1(), 1);
 
 &Devel::PPPort::call_newCONSTSUB_2();
-ok(&Devel::PPPort::test_value_2(), 2);
+is(&Devel::PPPort::test_value_2(), 2);
 
 &Devel::PPPort::call_newCONSTSUB_3();
-ok(&Devel::PPPort::test_value_3(), 3);
+is(&Devel::PPPort::test_value_3(), 3);
 
index 731a62b..211cdd6 100644 (file)
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -21,13 +23,15 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
   if (2) {
@@ -38,7 +42,7 @@ BEGIN {
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
@@ -48,6 +52,6 @@ bootstrap Devel::PPPort;
 
 package main;
 
-ok(&Devel::PPPort::newRV_inc_REFCNT, 1);
-ok(&Devel::PPPort::newRV_noinc_REFCNT, 1);
+is(&Devel::PPPort::newRV_inc_REFCNT, 1);
+is(&Devel::PPPort::newRV_noinc_REFCNT, 1);
 
index 1b3233e..1f82d4a 100644 (file)
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -21,13 +23,15 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
   if (1) {
@@ -38,7 +42,7 @@ BEGIN {
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
@@ -48,5 +52,5 @@ bootstrap Devel::PPPort;
 
 package main;
 
-ok(Devel::PPPort::newSV_type(), 4);
+is(Devel::PPPort::newSV_type(), 4);
 
index e9fee35..a0a54e0 100644 (file)
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -21,13 +23,15 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
   if (15) {
@@ -38,7 +42,7 @@ BEGIN {
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
@@ -50,29 +54,29 @@ package main;
 
 my @s = &Devel::PPPort::newSVpvn();
 ok(@s == 5);
-ok($s[0], "test");
-ok($s[1], "te");
-ok($s[2], "");
+is($s[0], "test");
+is($s[1], "te");
+is($s[2], "");
 ok(!defined($s[3]));
 ok(!defined($s[4]));
 
 @s = &Devel::PPPort::newSVpvn_flags();
 ok(@s == 5);
-ok($s[0], "test");
-ok($s[1], "te");
-ok($s[2], "");
+is($s[0], "test");
+is($s[1], "te");
+is($s[2], "");
 ok(!defined($s[3]));
 ok(!defined($s[4]));
 
 @s = &Devel::PPPort::newSVpvn_utf8();
 ok(@s == 1);
-ok($s[0], "test");
+is($s[0], "test");
 
 if ("$]" >= 5.008001) {
   require utf8;
   ok(utf8::is_utf8($s[0]));
 }
 else {
-  skip("skip: no is_utf8()", 0);
+  skip("skip: no is_utf8()", 1);
 }
 
index c1a35b2..73173b4 100644 (file)
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -21,13 +23,15 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
   if (0) {
@@ -38,7 +42,7 @@ BEGIN {
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
@@ -59,11 +63,11 @@ else {
   # Try loading Test::Pod
   eval q{
     use Test::Pod;
-    $Test::Pod::VERSION >= 0.95
+    $Test::Pod::VERSION >= 1.41
         or die "Test::Pod version only $Test::Pod::VERSION";
     import Test::Pod tests => scalar @pods;
   };
-  $reason = 'Test::Pod >= 0.95 required' if $@;
+  $reason = 'Test::Pod >= 1.41 required' if $@;
 }
 
 if ($reason) {
@@ -74,7 +78,7 @@ if ($reason) {
 for (@pods) {
   print "# checking $_\n";
   if ($reason) {
-    skip("skip: $reason", 0);
+    skip("skip: $reason", 1);
   }
   else {
     pod_file_ok($_);
index af2db3f..70a1b44 100644 (file)
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -21,13 +23,15 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
   if (238) {
@@ -38,7 +42,7 @@ BEGIN {
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
@@ -50,9 +54,7 @@ package main;
 
 BEGIN {
   if ($ENV{'SKIP_SLOW_TESTS'}) {
-    for (1 .. 238) {
-      skip("skip: SKIP_SLOW_TESTS", 0);
-    }
+    skip("skip: SKIP_SLOW_TESTS", 238);
     exit 0;
   }
 }
@@ -96,7 +98,7 @@ END {
 ok(&Devel::PPPort::WriteFile("ppport.h"));
 
 # Check GetFileContents()
-ok(-e "ppport.h", 1);
+is(-e "ppport.h", 1);
 
 my $data;
 
@@ -106,8 +108,8 @@ while(<F>) {
 }
 close(F);
 
-ok(Devel::PPPort::GetFileContents("ppport.h"), $data);
-ok(Devel::PPPort::GetFileContents(), $data);
+is(Devel::PPPort::GetFileContents("ppport.h"), $data);
+is(Devel::PPPort::GetFileContents(), $data);
 
 sub comment
 {
@@ -205,7 +207,7 @@ for $t (@tests) {
     $err =~ s/^/# *** /mg;
     print "# *** ERROR ***\n$err\n";
   }
-  ok($@, '');
+  is($@, '');
 
   for (keys %{$t->{files}}) {
     unlink $_ or die "unlink('$_'): $!\n";
@@ -251,8 +253,8 @@ ok($o =~ /^This is.*ppport.*\d+\.\d+(?:_?\d+)?\.$/);
 $o = ppport(qw(--nochanges));
 ok($o =~ /^Scanning.*test\.xs/mi);
 ok($o =~ /Analyzing.*test\.xs/mi);
-ok(matches($o, '^Scanning', 'm'), 1);
-ok(matches($o, 'Analyzing', 'm'), 1);
+is(matches($o, '^Scanning', 'm'), 1);
+is(matches($o, 'Analyzing', 'm'), 1);
 ok($o =~ /Uses Perl_newSViv instead of newSViv/);
 
 $o = ppport(qw(--quiet --nochanges));
@@ -269,7 +271,7 @@ Perl_newSViv();
 my $o = ppport(qw(--copy=a));
 ok($o =~ /^Scanning.*MyExt\.xs/mi);
 ok($o =~ /Analyzing.*MyExt\.xs/mi);
-ok(matches($o, '^Scanning', 'm'), 1);
+is(matches($o, '^Scanning', 'm'), 1);
 ok($o =~ /^Needs to include.*ppport\.h/m);
 ok($o !~ /^Uses grok_bin/m);
 ok($o !~ /^Uses newSVpv/m);
@@ -281,7 +283,7 @@ ok(eq_files('MyExt.xsa', 'MyExt.ra'));
 $o = ppport(qw(--copy=b --cplusplus));
 ok($o =~ /^Scanning.*MyExt\.xs/mi);
 ok($o =~ /Analyzing.*MyExt\.xs/mi);
-ok(matches($o, '^Scanning', 'm'), 1);
+is(matches($o, '^Scanning', 'm'), 1);
 ok($o =~ /^Needs to include.*ppport\.h/m);
 ok($o !~ /^Uses grok_bin/m);
 ok($o !~ /^Uses newSVpv/m);
@@ -387,7 +389,6 @@ ok($o =~ /^\s*$/);
 ---------------------------- file1.xs -----------------------------------------
 
 #define NEED_newCONSTSUB
-#define NEED_sv_2pv_flags
 #define NEED_PL_parser
 #include "ppport.h"
 
@@ -404,7 +405,7 @@ mXPUSHp(foo);
 my $o = ppport(qw(--nochanges));
 ok($o =~ /^Scanning.*FooBar\.xs/mi);
 ok($o =~ /Analyzing.*FooBar\.xs/mi);
-ok(matches($o, '^Scanning', 'm'), 1);
+is(matches($o, '^Scanning', 'm'), 1);
 ok($o !~ /^Looks good/m);
 ok($o =~ /^Uses grok_bin/m);
 
@@ -424,7 +425,7 @@ ok($o =~ /Analyzing.*second\.h/mi);
 ok($o =~ /^Scanning.*sub.*third\.c/mi);
 ok($o =~ /Analyzing.*sub.*third\.c/mi);
 ok($o !~ /^Scanning.*foobar/mi);
-ok(matches($o, '^Scanning', 'm'), 3);
+is(matches($o, '^Scanning', 'm'), 3);
 
 ---------------------------- First.xs -----------------------------------------
 
@@ -460,9 +461,9 @@ for (qw(main.xs mod1.c mod2.c mod3.c mod4.c mod5.c)) {
   ok($o =~ /^Scanning.*\Q$_\E/mi);
   ok($o =~ /Analyzing.*\Q$_\E/i);
 }
-ok(matches($o, '^Scanning', 'm'), 6);
+is(matches($o, '^Scanning', 'm'), 6);
 
-ok(matches($o, '^Writing copy of', 'm'), 5);
+is(matches($o, '^Writing copy of', 'm'), 5);
 ok(!-e "mod5.cf");
 
 for (qw(main.xs mod1.c mod2.c mod3.c mod4.c)) {
@@ -559,7 +560,6 @@ call_pv();
 #define NEED_eval_pv_GLOBAL
 #define NEED_grok_hex
 #define NEED_newCONSTSUB_GLOBAL
-#define NEED_sv_2pv_flags_GLOBAL
 #include "ppport.h"
 
 newCONSTSUB();
@@ -672,7 +672,7 @@ SvPVutf8_force();
 
 my $o = ppport(qw(--nochanges));
 ok($o !~ /potentially required change/);
-ok(matches($o, '^Looks good', 'm'), 2);
+is(matches($o, '^Looks good', 'm'), 2);
 
 ---------------------------- FooBar.xs ----------------------------------------
 
@@ -695,20 +695,20 @@ call_pv();
 
 my $o = ppport(qw(--api-info=INT2PTR));
 my %found = map {($_ => 1)} $o =~ /^===\s+(\w+)\s+===/mg;
-ok(scalar keys %found, 1);
+is(scalar keys %found, 1, "found 1 key");
 ok(exists $found{INT2PTR});
-ok(matches($o, '^Supported at least starting from perl-5\.6\.0\.', 'm'), 1);
-ok(matches($o, '^Support by .*ppport.* provided back to perl-5\.003\.', 'm'), 1);
+is(matches($o, '^Supported at least since perl-5\.6\.0', 'm'), 1, "INT2PTR supported without ppport.h to 5.6.0");
+is(matches($o, '^ppport.h additionally provides support at least back to perl-5\.003', 'm'), 1, "INT2PTR supported with ppport.h to 5.003");
 
 $o = ppport(qw(--api-info=Zero));
 %found = map {($_ => 1)} $o =~ /^===\s+(\w+)\s+===/mg;
-ok(scalar keys %found, 1);
+is(scalar keys %found, 1, "found 1 key");
 ok(exists $found{Zero});
-ok(matches($o, '^No portability information available\.', 'm'), 1);
+is(matches($o, '^Supported at least since perl-5.003', 'm'), 1, "Zero supported to 5.003");
 
 $o = ppport(qw(--api-info=/Zero/));
 %found = map {($_ => 1)} $o =~ /^===\s+(\w+)\s+===/mg;
-ok(scalar keys %found, 2);
+is(scalar keys %found, 2, "found 2 keys");
 ok(exists $found{Zero});
 ok(exists $found{ZeroD});
 
@@ -725,32 +725,32 @@ for (@o) {
   $p{$name} = defined $flags ? { map { ($_ => 1) } $flags =~ /(\w+)/g } : '';
 }
 ok(@o > 100);
-ok($fail, 0);
+is($fail, 0);
 
 ok(exists $p{call_pv});
 ok(not ref $p{call_pv});
 
 ok(exists $p{grok_bin});
-ok(ref $p{grok_bin}, 'HASH');
-ok(scalar keys %{$p{grok_bin}}, 2);
+is(ref $p{grok_bin}, 'HASH');
+is(scalar keys %{$p{grok_bin}}, 2);
 ok($p{grok_bin}{explicit});
 ok($p{grok_bin}{depend});
 
 ok(exists $p{gv_stashpvn});
-ok(ref $p{gv_stashpvn}, 'HASH');
-ok(scalar keys %{$p{gv_stashpvn}}, 2);
+is(ref $p{gv_stashpvn}, 'HASH');
+is(scalar keys %{$p{gv_stashpvn}}, 2);
 ok($p{gv_stashpvn}{depend});
 ok($p{gv_stashpvn}{hint});
 
 ok(exists $p{sv_catpvf_mg});
-ok(ref $p{sv_catpvf_mg}, 'HASH');
-ok(scalar keys %{$p{sv_catpvf_mg}}, 2);
+is(ref $p{sv_catpvf_mg}, 'HASH');
+is(scalar keys %{$p{sv_catpvf_mg}}, 2);
 ok($p{sv_catpvf_mg}{explicit});
 ok($p{sv_catpvf_mg}{depend});
 
 ok(exists $p{PL_signals});
-ok(ref $p{PL_signals}, 'HASH');
-ok(scalar keys %{$p{PL_signals}}, 1);
+is(ref $p{PL_signals}, 'HASH');
+is(scalar keys %{$p{PL_signals}}, 1);
 ok($p{PL_signals}{explicit});
 
 ===============================================================================
@@ -766,13 +766,13 @@ for (@o) {
   $p{$name} = $ver;
 }
 ok(@o > 100);
-ok($fail, 0);
+is($fail, 0);
 
 ok(exists $p{utf8_distance});
-ok($p{utf8_distance}, '5.6.0');
+is($p{utf8_distance}, '5.6.0');
 
 ok(exists $p{save_generic_svref});
-ok($p{save_generic_svref}, '5.005_03');
+is($p{save_generic_svref}, '5.005_03');
 
 ===============================================================================
 
@@ -781,17 +781,17 @@ ok($p{save_generic_svref}, '5.005_03');
 my $o = ppport(qw(--nochanges));
 ok($o =~ /^Scanning.*foo\.cpp/mi);
 ok($o =~ /Analyzing.*foo\.cpp/mi);
-ok(matches($o, '^Scanning', 'm'), 1);
-ok(matches($o, 'Analyzing', 'm'), 1);
+is(matches($o, '^Scanning', 'm'), 1);
+is(matches($o, 'Analyzing', 'm'), 1);
 
 $o = ppport(qw(--nochanges foo.cpp foo.o Makefile.PL));
 ok($o =~ /Skipping the following files \(use --nofilter to avoid this\):/m);
-ok(matches($o, '^\|\s+foo\.o', 'mi'), 1);
-ok(matches($o, '^\|\s+Makefile\.PL', 'mi'), 1);
+is(matches($o, '^\|\s+foo\.o', 'mi'), 1);
+is(matches($o, '^\|\s+Makefile\.PL', 'mi'), 1);
 ok($o =~ /^Scanning.*foo\.cpp/mi);
 ok($o =~ /Analyzing.*foo\.cpp/mi);
-ok(matches($o, '^Scanning', 'm'), 1);
-ok(matches($o, 'Analyzing', 'm'), 1);
+is(matches($o, '^Scanning', 'm'), 1);
+is(matches($o, 'Analyzing', 'm'), 1);
 
 $o = ppport(qw(--nochanges --nofilter foo.cpp foo.o Makefile.PL));
 ok($o =~ /^Scanning.*foo\.cpp/mi);
@@ -800,8 +800,8 @@ ok($o =~ /^Scanning.*foo\.o/mi);
 ok($o =~ /Analyzing.*foo\.o/mi);
 ok($o =~ /^Scanning.*Makefile/mi);
 ok($o =~ /Analyzing.*Makefile/mi);
-ok(matches($o, '^Scanning', 'm'), 3);
-ok(matches($o, 'Analyzing', 'm'), 3);
+is(matches($o, '^Scanning', 'm'), 3);
+is(matches($o, 'Analyzing', 'm'), 3);
 
 ---------------------------- foo.cpp ------------------------------------------
 
@@ -916,8 +916,6 @@ for (qw(file.xs)) {
 
 ---------------------------- file.xs -----------------------------------------
 
-#define NEED_sv_2pv_flags
-#define NEED_vnewSVpvf
 #define NEED_warner
 #include "ppport.h"
 Perl_croak_nocontext("foo");
@@ -931,8 +929,6 @@ warner("foo");
 
 ---------------------------- file.xsr -----------------------------------------
 
-#define NEED_sv_2pv_flags
-#define NEED_vnewSVpvf
 #define NEED_warner
 #include "ppport.h"
 Perl_croak_nocontext("foo");
index f79a15a..d887eea 100644 (file)
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -21,13 +23,15 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
   if (13) {
@@ -38,7 +42,7 @@ BEGIN {
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
@@ -56,21 +60,29 @@ ok($uni ? "$]" >= 5.006 : "$]" < 5.008);
 my @r;
 
 @r = &Devel::PPPort::pv_pretty();
-ok($r[0], $r[1]);
-ok($r[0], "foobarbaz");
-ok($r[2], $r[3]);
-ok($r[2], '<leftpv_p\retty\nright>');
-ok($r[4], $r[5]);
-skip(ord("A") != 65 ? "Skip for non-ASCII platform" : 0,
-     $r[4], $uni ? 'N\375 Batter\355' : 'N\303\275 Batter\303');
-ok($r[6], $r[7]);
-skip(ord("A") != 65 ? "Skip for non-ASCII platform" : 0,
-     $r[6], $uni ? '\301g\346tis Byrju...' : '\303\201g\303\246t...');
+is($r[0], $r[1]);
+is($r[0], "foobarbaz");
+is($r[2], $r[3]);
+is($r[2], '<leftpv_p\retty\nright>');
+is($r[4], $r[5]);
+if(ord("A") == 65) {
+    is($r[4], $uni ? 'N\375 Batter\355' : 'N\303\275 Batter\303');
+}
+else {
+    skip("Skip for non-ASCII platform");
+}
+is($r[6], $r[7]);
+if(ord("A") == 65) {
+    is($r[6], $uni ? '\301g\346tis Byrju...' : '\303\201g\303\246t...');
+}
+else {
+    skip("Skip for non-ASCII platform");
+}
 
 @r = &Devel::PPPort::pv_display();
-ok($r[0], $r[1]);
-ok($r[0], '"foob\0rbaz"\0');
-ok($r[2], $r[3]);
+is($r[0], $r[1]);
+is($r[0], '"foob\0rbaz"\0');
+is($r[2], $r[3]);
 ok($r[2] eq '"pv_di"...\0' ||
    $r[2] eq '"pv_d"...\0');  # some perl implementations are broken... :(
 
index ff4d3e0..7b96bb5 100644 (file)
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -21,13 +23,15 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
   if (12) {
@@ -38,7 +42,7 @@ BEGIN {
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
@@ -50,24 +54,24 @@ package main;
 
 my $x = 'foo';
 
-ok(Devel::PPPort::newSVpvs(), "newSVpvs");
-ok(Devel::PPPort::newSVpvs_flags(), "newSVpvs_flags");
-ok(Devel::PPPort::newSVpvs_share(), 3);
+is(Devel::PPPort::newSVpvs(), "newSVpvs");
+is(Devel::PPPort::newSVpvs_flags(), "newSVpvs_flags");
+is(Devel::PPPort::newSVpvs_share(), 3);
 
 Devel::PPPort::sv_catpvs($x);
-ok($x, "foosv_catpvs");
+is($x, "foosv_catpvs");
 
 Devel::PPPort::sv_setpvs($x);
-ok($x, "sv_setpvs");
+is($x, "sv_setpvs");
 
 my %h = ('hv_fetchs' => 42);
 Devel::PPPort::hv_stores(\%h, 4711);
-ok(scalar keys %h, 2);
+is(scalar keys %h, 2);
 ok(exists $h{'hv_stores'});
-ok($h{'hv_stores'}, 4711);
-ok(Devel::PPPort::hv_fetchs(\%h), 42);
-ok(Devel::PPPort::gv_fetchpvs(), \*Devel::PPPort::VERSION);
-ok(Devel::PPPort::gv_stashpvs(), \%Devel::PPPort::);
+is($h{'hv_stores'}, 4711);
+is(Devel::PPPort::hv_fetchs(\%h), 42);
+is(Devel::PPPort::gv_fetchpvs(), \*Devel::PPPort::VERSION);
+is(Devel::PPPort::gv_stashpvs(), \%Devel::PPPort::);
 
-ok(Devel::PPPort::get_cvs(), 3);
+is(Devel::PPPort::get_cvs(), 3);
 
index eac79c6..c705b18 100644 (file)
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -21,13 +23,15 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
   if (1) {
@@ -38,7 +42,7 @@ BEGIN {
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
@@ -48,5 +52,5 @@ bootstrap Devel::PPPort;
 
 package main;
 
-ok(&Devel::PPPort::newSVpvn_share(), 6);
+is(&Devel::PPPort::newSVpvn_share(), 6);
 
index 0b90004..5e6bb33 100644 (file)
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -21,13 +23,15 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
   if (2) {
@@ -38,7 +42,7 @@ BEGIN {
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
@@ -49,6 +53,6 @@ bootstrap Devel::PPPort;
 package main;
 
 my($l, $s) = Devel::PPPort::my_snprintf();
-ok($l, 8);
-ok($s, "foobar42");
+is($l, 8);
+is($s, "foobar42");
 
index 8b0d51f..51a42b0 100644 (file)
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -21,13 +23,15 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
   if (2) {
@@ -38,7 +42,7 @@ BEGIN {
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
@@ -49,6 +53,6 @@ bootstrap Devel::PPPort;
 package main;
 
 my($l, $s) = Devel::PPPort::my_sprintf();
-ok($l, 8);
-ok($s, "foobar42");
+is($l, 8);
+is($s, "foobar42");
 
index c817547..dee840c 100644 (file)
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -21,13 +23,15 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
   if (13) {
@@ -38,7 +42,7 @@ BEGIN {
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
@@ -60,6 +64,6 @@ my @r = Devel::PPPort::my_strlfunc();
 ok(@e == @r);
 
 for (0 .. $#e) {
-  ok($r[$_], $e[$_]);
+  is($r[$_], $e[$_]);
 }
 
index 4091986..3ab10c9 100644 (file)
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -21,13 +23,15 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
   if (9) {
@@ -38,7 +42,7 @@ BEGIN {
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
@@ -54,25 +58,25 @@ tie %h, 'Tie::StdHash';
 $h{foo} = 'foo-';
 $h{bar} = '';
 
-ok(&Devel::PPPort::vnewSVpvf(), "$]" >= 5.004 ? 'Perl-42' : '%s-%d');
-ok(&Devel::PPPort::sv_vcatpvf('1-2-3-'), "$]" >= 5.004 ? '1-2-3-Perl-42' : '1-2-3-%s-%d');
-ok(&Devel::PPPort::sv_vsetpvf('1-2-3-'), "$]" >= 5.004 ? 'Perl-42' : '%s-%d');
+is(&Devel::PPPort::vnewSVpvf(), "$]" >= 5.004 ? 'Perl-42' : '%s-%d');
+is(&Devel::PPPort::sv_vcatpvf('1-2-3-'), "$]" >= 5.004 ? '1-2-3-Perl-42' : '1-2-3-%s-%d');
+is(&Devel::PPPort::sv_vsetpvf('1-2-3-'), "$]" >= 5.004 ? 'Perl-42' : '%s-%d');
 
 &Devel::PPPort::sv_catpvf_mg($h{foo});
-ok($h{foo}, "$]" >= 5.004 ? 'foo-Perl-42' : 'foo-');
+is($h{foo}, "$]" >= 5.004 ? 'foo-Perl-42' : 'foo-');
 
 &Devel::PPPort::Perl_sv_catpvf_mg($h{foo});
-ok($h{foo}, "$]" >= 5.004 ? 'foo-Perl-42-Perl-43' : 'foo-');
+is($h{foo}, "$]" >= 5.004 ? 'foo-Perl-42-Perl-43' : 'foo-');
 
 &Devel::PPPort::sv_catpvf_mg_nocontext($h{foo});
-ok($h{foo}, "$]" >= 5.004 ? 'foo-Perl-42-Perl-43-Perl-44' : 'foo-');
+is($h{foo}, "$]" >= 5.004 ? 'foo-Perl-42-Perl-43-Perl-44' : 'foo-');
 
 &Devel::PPPort::sv_setpvf_mg($h{bar});
-ok($h{bar}, "$]" >= 5.004 ? 'mhx-42' : '');
+is($h{bar}, "$]" >= 5.004 ? 'mhx-42' : '');
 
 &Devel::PPPort::Perl_sv_setpvf_mg($h{bar});
-ok($h{bar}, "$]" >= 5.004 ? 'foo-43' : '');
+is($h{bar}, "$]" >= 5.004 ? 'foo-43' : '');
 
 &Devel::PPPort::sv_setpvf_mg_nocontext($h{bar});
-ok($h{bar}, "$]" >= 5.004 ? 'bar-44' : '');
+is($h{bar}, "$]" >= 5.004 ? 'bar-44' : '');
 
index 4fc7d66..981b659 100644 (file)
-{
-  my $__ntest;
-  my $__total;
-
-  sub plan {
-    @_ == 2 or die "usage: plan(tests => count)";
-    my $what = shift;
-    $what eq 'tests' or die "cannot plan anything but tests";
-    $__total = shift;
-    defined $__total && $__total > 0 or die "need a positive number of tests";
-    print "1..$__total\n";
-  }
+#
+# t/test.pl - most of Test::More functionality without the fuss
 
-  sub skip {
-    my $reason = shift;
-    ++$__ntest;
-    print "ok $__ntest # skip: $reason\n"
-  }
 
-  sub ok ($;$$) {
-    local($\,$,);
-    my $ok = 0;
-    my $result = shift;
-    if (@_ == 0) {
-      $ok = $result;
+# NOTE:
+#
+# Do not rely on features found only in more modern Perls here, as some CPAN
+# distributions copy this file and must operate on older Perls. Similarly, keep
+# things, simple as this may be run under fairly broken circumstances. For
+# example, increment ($x++) has a certain amount of cleverness for things like
+#
+#   $x = 'zz';
+#   $x++; # $x eq 'aaa';
+#
+# This stands more chance of breaking than just a simple
+#
+#   $x = $x + 1
+#
+# In this file, we use the latter "Baby Perl" approach, and increment
+# will be worked over by t/op/inc.t
+
+$| = 1;
+$Level = 1;
+my $test = 1;
+my $planned;
+my $noplan;
+
+# Fatalize warnings, so that we don't introduce new warnings.  But on early
+# perls the burden of avoiding warnings becomes too large, and someone still
+# trying to use such outmoded versions should be willing to accept warnings in
+# our test suite.
+$SIG{__WARN__} = sub { die "Fatalized: $_[0]" } if $] ge "5.6.0";
+
+# This defines ASCII/UTF-8 vs EBCDIC/UTF-EBCDIC
+$::IS_ASCII  = ord 'A' ==  65;
+
+$TODO = 0;
+$NO_ENDING = 0;
+$Tests_Are_Passing = 1;
+
+# Use this instead of print to avoid interference while testing globals.
+sub _print {
+    local($\, $", $,) = (undef, ' ', '') if "$]" >= 5.004;
+    print STDOUT @_;
+}
+
+sub _print_stderr {
+    local($\, $", $,) = (undef, ' ', '') if "$]" >= 5.004;
+    print STDERR @_;
+}
+
+sub plan {
+    my $n;
+    if (@_ == 1) {
+       $n = shift;
+       if ($n eq 'no_plan') {
+         undef $n;
+         $noplan = 1;
+       }
     } else {
-      $expected = shift;
-      if (!defined $expected) {
-        $ok = !defined $result;
-      } elsif (!defined $result) {
-        $ok = 0;
-      } elsif (ref($expected) eq 'Regexp') {
-        die "using regular expression objects is not backwards compatible";
-      } else {
-        $ok = $result eq $expected;
-      }
+       my %plan = @_;
+       $plan{skip_all} and skip_all($plan{skip_all});
+       $n = $plan{tests};
     }
-    ++$__ntest;
-    if ($ok) {
-      print "ok $__ntest\n"
+    _print "1..$n\n" unless $noplan;
+    $planned = $n;
+}
+
+
+# Set the plan at the end.  See Test::More::done_testing.
+sub done_testing {
+    my $n = $test - 1;
+    $n = shift if @_;
+
+    _print "1..$n\n";
+    $planned = $n;
+}
+
+
+END {
+    my $ran = $test - 1;
+    if (!$NO_ENDING) {
+       if (defined $planned && $planned != $ran) {
+           _print_stderr
+               "# Looks like you planned $planned tests but ran $ran.\n";
+       } elsif ($noplan) {
+           _print "1..$ran\n";
+       }
+    }
+}
+
+sub _diag {
+    return unless @_;
+    my @mess = _comment(@_);
+    $TODO ? _print(@mess) : _print_stderr(@mess);
+}
+
+# Use this instead of "print STDERR" when outputting failure diagnostic
+# messages
+sub diag {
+    _diag(@_);
+}
+
+# Use this instead of "print" when outputting informational messages
+sub note {
+    return unless @_;
+    _print( _comment(@_) );
+}
+
+sub _comment {
+    return map { /^#/ ? "$_\n" : "# $_\n" }
+           map { split /\n/ } @_;
+}
+
+sub _have_dynamic_extension {
+    my $extension = shift;
+    unless (eval {require Config; 1}) {
+       warn "test.pl had problems loading Config: $@";
+       return 1;
+    }
+    $extension =~ s!::!/!g;
+    return 1 if ($Config::Config{extensions} =~ /\b$extension\b/);
+}
+
+sub skip_all {
+    if (@_) {
+        _print "1..0 # Skip @_\n";
+    } else {
+       _print "1..0\n";
+    }
+    exit(0);
+}
+
+sub BAIL_OUT {
+    my ($reason) = @_;
+    _print("Bail out!  $reason\n");
+    exit 255;
+}
+
+sub _ok {
+    my ($pass, $where, $name, @mess) = @_;
+    # Do not try to microoptimize by factoring out the "not ".
+    # VMS will avenge.
+    my $out;
+    if ($name) {
+        # escape out '#' or it will interfere with '# skip' and such
+        $name =~ s/#/\\#/g;
+       $out = $pass ? "ok $test - $name" : "not ok $test - $name";
+    } else {
+       $out = $pass ? "ok $test" : "not ok $test";
+    }
+
+    if ($TODO) {
+       $out = $out . " # TODO $TODO";
+    } else {
+       $Tests_Are_Passing = 0 unless $pass;
+    }
+
+    _print "$out\n";
+
+    if ($pass) {
+       note @mess; # Ensure that the message is properly escaped.
     }
     else {
-      print "not ok $__ntest\n"
+       my $msg = "# Failed test $test - ";
+       $msg.= "$name " if $name;
+       $msg .= "$where\n";
+       _diag $msg;
+       _diag @mess;
     }
+
+    $test = $test + 1; # don't use ++
+
+    return $pass;
+}
+
+sub _where {
+    my @caller = caller($Level);
+    return "at $caller[1] line $caller[2]";
+}
+
+sub ok ($@) {
+    my ($pass, $name, @mess) = @_;
+    _ok($pass, _where(), $name, @mess);
+}
+
+sub _q {
+    my $x = shift;
+    return 'undef' unless defined $x;
+    my $q = $x;
+    $q =~ s/\\/\\\\/g;
+    $q =~ s/'/\\'/g;
+    return "'$q'";
+}
+
+sub _qq {
+    my $x = shift;
+    return defined $x ? '"' . display ($x) . '"' : 'undef';
+};
+
+# Support pre-5.10 Perls, for the benefit of CPAN dists that copy this file.
+# Note that chr(90) exists in both ASCII ("Z") and EBCDIC ("!").
+my $chars_template = defined(eval { pack "W*", 90 }) ? "W*" : defined(eval { pack "U*", 90 }) ? "U*" : "C*";
+eval 'sub re::is_regexp { ref($_[0]) eq "Regexp" }'
+    if !defined &re::is_regexp;
+
+# keys are the codes \n etc map to, values are 2 char strings such as \n
+my %backslash_escape;
+my $x;
+foreach $x (split //, 'nrtfa\\\'"') {
+    $backslash_escape{ord eval "\"\\$x\""} = "\\$x";
+}
+# A way to display scalars containing control characters and Unicode.
+# Trying to avoid setting $_, or relying on local $_ to work.
+sub display {
+    my @result;
+    my $x;
+    foreach $x (@_) {
+        if (defined $x and not ref $x) {
+            my $y = '';
+            my $c;
+            foreach $c (unpack($chars_template, $x)) {
+                if ($c > 255) {
+                    $y = $y . sprintf "\\x{%x}", $c;
+                } elsif ($backslash_escape{$c}) {
+                    $y = $y . $backslash_escape{$c};
+                } elsif ($c < ord " ") {
+                    # Use octal for characters with small ordinals that are
+                    # traditionally expressed as octal: the controls below
+                    # space, which on EBCDIC are almost all the controls, but
+                    # on ASCII don't include DEL nor the C1 controls.
+                    $y = $y . sprintf "\\%03o", $c;
+                } elsif ($::IS_ASCII && $c <= ord('~')) {
+                    $y = $y . chr $c;
+                } elsif ( ! $::IS_ASCII
+                         && eval 'chr $c =~ /[^[:^print:][:^ascii:]]/')
+                        # The pattern above is equivalent (by de Morgan's
+                        # laws) to:
+                        #     $z =~ /(?[ [:print:] & [:ascii:] ])/
+                        # or, $z is an ascii printable character
+                        # The /a modifier doesn't go back so far.
+                {
+                    $y = $y . chr $c;
+                }
+                elsif ($@) { # Should only be an error on platforms too
+                             # early to have the [:posix:] syntax, which
+                             # also should be ASCII ones
+                    die __FILE__ . __LINE__
+                      . ": Unexpected non-ASCII platform; $@";
+                }
+                else {
+                    $y = $y . sprintf "\\x%02X", $c;
+                }
+            }
+            $x = $y;
+        }
+        return $x unless wantarray;
+        push @result, $x;
+    }
+    return @result;
+}
+
+sub is ($$@) {
+    my ($got, $expected, $name, @mess) = @_;
+
+    my $pass;
+    if( !defined $got || !defined $expected ) {
+        # undef only matches undef
+        $pass = !defined $got && !defined $expected;
+    }
+    else {
+        $pass = $got eq $expected;
+    }
+
+    unless ($pass) {
+       unshift(@mess, "#      got "._qq($got)."\n",
+                      "# expected "._qq($expected)."\n");
+    }
+    _ok($pass, _where(), $name, @mess);
+}
+
+sub isnt ($$@) {
+    my ($got, $isnt, $name, @mess) = @_;
+
+    my $pass;
+    if( !defined $got || !defined $isnt ) {
+        # undef only matches undef
+        $pass = defined $got || defined $isnt;
+    }
+    else {
+        $pass = $got ne $isnt;
+    }
+
+    unless( $pass ) {
+        unshift(@mess, "# it should not be "._qq($got)."\n",
+                       "# but it is.\n");
+    }
+    _ok($pass, _where(), $name, @mess);
+}
+
+sub cmp_ok ($$$@) {
+    my($got, $type, $expected, $name, @mess) = @_;
+
+    my $pass;
+    {
+        local $^W = 0;
+        local($@,$!);   # don't interfere with $@
+                        # eval() sometimes resets $!
+        $pass = eval "\$got $type \$expected";
+    }
+    unless ($pass) {
+        # It seems Irix long doubles can have 2147483648 and 2147483648
+        # that stringify to the same thing but are actually numerically
+        # different. Display the numbers if $type isn't a string operator,
+        # and the numbers are stringwise the same.
+        # (all string operators have alphabetic names, so tr/a-z// is true)
+        # This will also show numbers for some unneeded cases, but will
+        # definitely be helpful for things such as == and <= that fail
+        if ($got eq $expected and $type !~ tr/a-z//) {
+            unshift @mess, "# $got - $expected = " . ($got - $expected) . "\n";
+        }
+        unshift(@mess, "#      got "._qq($got)."\n",
+                       "# expected $type "._qq($expected)."\n");
+    }
+    _ok($pass, _where(), $name, @mess);
+}
+
+# Check that $got is within $range of $expected
+# if $range is 0, then check it's exact
+# else if $expected is 0, then $range is an absolute value
+# otherwise $range is a fractional error.
+# Here $range must be numeric, >= 0
+# Non numeric ranges might be a useful future extension. (eg %)
+sub within ($$$@) {
+    my ($got, $expected, $range, $name, @mess) = @_;
+    my $pass;
+    if (!defined $got or !defined $expected or !defined $range) {
+        # This is a fail, but doesn't need extra diagnostics
+    } elsif ($got !~ tr/0-9// or $expected !~ tr/0-9// or $range !~ tr/0-9//) {
+        # This is a fail
+        unshift @mess, "# got, expected and range must be numeric\n";
+    } elsif ($range < 0) {
+        # This is also a fail
+        unshift @mess, "# range must not be negative\n";
+    } elsif ($range == 0) {
+        # Within 0 is ==
+        $pass = $got == $expected;
+    } elsif ($expected == 0) {
+        # If expected is 0, treat range as absolute
+        $pass = ($got <= $range) && ($got >= - $range);
+    } else {
+        my $diff = $got - $expected;
+        $pass = abs ($diff / $expected) < $range;
+    }
+    unless ($pass) {
+        if ($got eq $expected) {
+            unshift @mess, "# $got - $expected = " . ($got - $expected) . "\n";
+        }
+       unshift@mess, "#      got "._qq($got)."\n",
+                     "# expected "._qq($expected)." (within "._qq($range).")\n";
+    }
+    _ok($pass, _where(), $name, @mess);
+}
+
+sub pass {
+    _ok(1, '', @_);
+}
+
+sub fail {
+    _ok(0, _where(), @_);
+}
+
+sub curr_test {
+    $test = shift if @_;
+    return $test;
+}
+
+sub next_test {
+  my $retval = $test;
+  $test = $test + 1; # don't use ++
+  $retval;
+}
+
+# Note: can't pass multipart messages since we try to
+# be compatible with Test::More::skip().
+sub skip {
+    my $why = shift;
+    my $n   = @_ ? shift : 1;
+    my $bad_swap;
+    my $both_zero;
+    {
+      local $^W = 0;
+      $bad_swap = $why > 0 && $n == 0;
+      $both_zero = $why == 0 && $n == 0;
+    }
+    if ($bad_swap || $both_zero || @_) {
+      my $arg = "'$why', '$n'";
+      if (@_) {
+        $arg .= join(", ", '', map { qq['$_'] } @_);
+      }
+      die qq[$0: expected skip(why, count), got skip($arg)\n];
+    }
+    for (1..$n) {
+        _print "ok $test # skip $why\n";
+        $test = $test + 1;
+    }
+    local $^W = 0;
+    #last SKIP;
+}
+
+sub eq_array {
+    my ($ra, $rb) = @_;
+    return 0 unless $#$ra == $#$rb;
+    my $i;
+    for $i (0..$#$ra) {
+       next     if !defined $ra->[$i] && !defined $rb->[$i];
+       return 0 if !defined $ra->[$i];
+       return 0 if !defined $rb->[$i];
+       return 0 unless $ra->[$i] eq $rb->[$i];
+    }
+    return 1;
+}
+
+sub eq_hash {
+  my ($orig, $suspect) = @_;
+  my $fail;
+  while (my ($key, $value) = each %$suspect) {
+    # Force a hash recompute if this perl's internals can cache the hash key.
+    $key = "" . $key;
+    if (exists $orig->{$key}) {
+      if (
+        defined $orig->{$key} != defined $value
+        || (defined $value && $orig->{$key} ne $value)
+      ) {
+        _print "# key ", _qq($key), " was ", _qq($orig->{$key}),
+                     " now ", _qq($value), "\n";
+        $fail = 1;
+      }
+    } else {
+      _print "# key ", _qq($key), " is ", _qq($value),
+                   ", not in original.\n";
+      $fail = 1;
+    }
+  }
+  foreach (keys %$orig) {
+    # Force a hash recompute if this perl's internals can cache the hash key.
+    $_ = "" . $_;
+    next if (exists $suspect->{$_});
+    _print "# key ", _qq($_), " was ", _qq($orig->{$_}), " now missing.\n";
+    $fail = 1;
   }
+  !$fail;
 }
 
 1;
index a1c8caa..0e16cc7 100644 (file)
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -21,13 +23,15 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
   if (2) {
@@ -38,7 +42,7 @@ BEGIN {
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
@@ -48,7 +52,7 @@ bootstrap Devel::PPPort;
 
 package main;
 
-ok(&Devel::PPPort::no_THX_arg("42"), 43);
+is(&Devel::PPPort::no_THX_arg("42"), 43);
 eval { &Devel::PPPort::with_THX_arg("yes\n"); };
 ok($@ =~ /^yes/);
 
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/t/utf8.t b/gnu/usr.bin/perl/dist/Devel-PPPort/t/utf8.t
new file mode 100644 (file)
index 0000000..12a593e
--- /dev/null
@@ -0,0 +1,300 @@
+################################################################################
+#
+#            !!!!!   Do NOT edit this file directly!   !!!!!
+#
+#            Edit mktests.PL and/or parts/inc/utf8 instead.
+#
+#  This file was automatically generated from the definition files in the
+#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this
+#  works, please read the F<HACKERS> file that came with this distribution.
+#
+################################################################################
+
+use FindBin ();
+
+BEGIN {
+  if ($ENV{'PERL_CORE'}) {
+    chdir 't' if -d 't';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
+    require Config; import Config;
+    use vars '%Config';
+    if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
+      print "1..0 # Skip -- Perl configured without Devel::PPPort module\n";
+      exit 0;
+    }
+  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
+
+  sub load {
+    require 'testutil.pl';
+    require 'inctools';
+  }
+
+  if (98) {
+    load();
+    plan(tests => 98);
+  }
+}
+
+use Devel::PPPort;
+use strict;
+BEGIN { $^W = 1; }
+
+package Devel::PPPort;
+use vars '@ISA';
+require DynaLoader;
+@ISA = qw(DynaLoader);
+bootstrap Devel::PPPort;
+
+package main;
+
+BEGIN {
+    # skip tests on 5.6.0 and earlier, plus 5.7.0
+    if (ivers($]) <= ivers(5.6) || ivers($]) == ivers(5.7) ) {
+        skip 'skip: broken utf8 support', 98;
+        exit;
+    }
+    require warnings;
+}
+
+is(Devel::PPPort::UTF8f(42), '[42]');
+is(Devel::PPPort::UTF8f('abc'), '[abc]');
+is(Devel::PPPort::UTF8f("\x{263a}"), "[\x{263a}]");
+
+my $str = "\x{A8}";
+if (ivers($]) >= ivers(5.8)) { eval q{utf8::upgrade($str)} }
+is(Devel::PPPort::UTF8f($str), "[\x{A8}]");
+if (ivers($]) >= ivers(5.8)) { eval q{utf8::downgrade($str)} }
+is(Devel::PPPort::UTF8f($str), "[\x{A8}]");
+
+is(&Devel::PPPort::UTF8_SAFE_SKIP("A", 0), 1);
+is(&Devel::PPPort::UTF8_SAFE_SKIP("A", -1), 0);
+
+is(&Devel::PPPort::isUTF8_CHAR("A", -1), 0);
+is(&Devel::PPPort::isUTF8_CHAR("A",  0), 1);
+is(&Devel::PPPort::isUTF8_CHAR("\x{100}",  -1), 0);
+is(&Devel::PPPort::isUTF8_CHAR("\x{100}",  0), 2);
+
+is(&Devel::PPPort::UVCHR_IS_INVARIANT(ord("A")), 1);
+ok(! &Devel::PPPort::UVCHR_IS_INVARIANT(0xb6));
+ok(! &Devel::PPPort::UVCHR_IS_INVARIANT(0x100));
+
+is(&Devel::PPPort::UVCHR_SKIP(ord("A")), 1);
+is(&Devel::PPPort::UVCHR_SKIP(0xb6),     2, "This is a test");
+is(&Devel::PPPort::UVCHR_SKIP(0x3FF),    2);
+is(&Devel::PPPort::UVCHR_SKIP(0x3FFF),   3);
+is(&Devel::PPPort::UVCHR_SKIP(0x3FFFF),  4);
+is(&Devel::PPPort::UVCHR_SKIP(0x3FFFFF), 5);
+is(&Devel::PPPort::UVCHR_SKIP(0x3FFFFFF), ord("A") == 65 ? 5 : 6);
+is(&Devel::PPPort::UVCHR_SKIP(0x4000000), ord("A") == 65 ? 6 : 7);
+if (ord("A") != 65) {
+    skip("Test not valid on EBCDIC", 1)
+}
+else {
+    is(&Devel::PPPort::UVCHR_SKIP(0xFFFFFFFF), 7);
+}
+
+if (ivers($]) < ivers(5.8)) {
+    skip("Perl version too early", 3);
+}
+else {
+    is(&Devel::PPPort::foldEQ_utf8("A\x{100}", 3, 1, "a\x{101}", 3, 1), 1);
+    is(&Devel::PPPort::foldEQ_utf8("A\x{100}", 3, 1, "a\x{102}", 3, 1), 0);
+    is(&Devel::PPPort::foldEQ_utf8("A\x{100}", 3, 1, "b\x{101}", 3, 1), 0);
+}
+
+my $ret = &Devel::PPPort::utf8_to_uvchr("A");
+is($ret->[0], ord("A"));
+is($ret->[1], 1);
+
+$ret = &Devel::PPPort::utf8_to_uvchr("\0");
+is($ret->[0], 0);
+is($ret->[1], 1);
+
+$ret = &Devel::PPPort::utf8_to_uvchr_buf("A", 0);
+is($ret->[0], ord("A"));
+is($ret->[1], 1);
+
+$ret = &Devel::PPPort::utf8_to_uvchr_buf("\0", 0);
+is($ret->[0], 0);
+is($ret->[1], 1);
+
+my @buf_tests = (
+    {
+        input      => "A",
+        adjustment => -1,
+        warning    => eval "qr/empty/",
+        no_warnings_returned_length => 0,
+    },
+    {
+        input      => "\xc4\xc5",
+        adjustment => 0,
+        warning    => eval "qr/non-continuation/",
+        no_warnings_returned_length => 1,
+    },
+    {
+        input      => "\xc4\x80",
+        adjustment => -1,
+        warning    => eval "qr/short|1 byte, need 2/",
+        no_warnings_returned_length => 1,
+    },
+    {
+        input      => "\xc0\x81",
+        adjustment => 0,
+        warning    => eval "qr/overlong|2 bytes, need 1/",
+        no_warnings_returned_length => 2,
+    },
+    {
+        input      => "\xe0\x80\x81",
+        adjustment => 0,
+        warning    => eval "qr/overlong|3 bytes, need 1/",
+        no_warnings_returned_length => 3,
+    },
+    {
+        input      => "\xf0\x80\x80\x81",
+        adjustment => 0,
+        warning    => eval "qr/overlong|4 bytes, need 1/",
+        no_warnings_returned_length => 4,
+    },
+    {                 # Old algorithm failed to detect this
+        input      => "\xff\x80\x90\x90\x90\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf",
+        adjustment => 0,
+        warning    => eval "qr/overflow/",
+        no_warnings_returned_length => 13,
+    },
+);
+
+if (ord("A") != 65) {   # tests not valid for EBCDIC
+    skip("Perl version too early", 2 + 4 + (scalar @buf_tests * 5));
+}
+else {
+    $ret = &Devel::PPPort::utf8_to_uvchr_buf("\xc4\x80", 0);
+    is($ret->[0], 0x100);
+    is($ret->[1], 2);
+
+    my @warnings;
+    local $SIG{__WARN__} = sub { push @warnings, @_; };
+
+    {
+        use warnings 'utf8';
+        $ret = &Devel::PPPort::utf8_to_uvchr("\xe0\0\x80");
+        is($ret->[0], 0);
+        is($ret->[1], -1);
+
+        no warnings 'utf8';
+        $ret = &Devel::PPPort::utf8_to_uvchr("\xe0\0\x80");
+        is($ret->[0], 0xFFFD);
+        is($ret->[1], 1);
+    }
+
+
+    # An empty input is an assertion failure on debugging builds.  It is
+    # deliberately the first test.
+    require Config; import Config;
+    use vars '%Config';
+
+    # VMS doesn't put DEBUGGING in ccflags, and Windows doesn't have
+    # $Config{config_args}.  When 5.14 or later can be assumed, use
+    # Config::non_bincompat_options(), but for now we're stuck with this.
+    if (   $Config{ccflags} =~ /-DDEBUGGING/
+        || $^O eq 'VMS' && $Config{config_args} =~ /\bDDEBUGGING\b/)
+    {
+        shift @buf_tests;
+        skip("Test not valid on DEBUGGING builds", 5);
+    }
+
+    my $test;
+    for $test (@buf_tests) {
+        my $input = $test->{'input'};
+        my $adjustment = $test->{'adjustment'};
+        my $display = 'utf8_to_uvchr_buf("';
+        my $i;
+        for ($i = 0; $i < length($input) + $adjustment; $i++) {
+            $display .= sprintf "\\x%02x", ord substr($input, $i, 1);
+        }
+
+        $display .= '")';
+        my $warning = $test->{'warning'};
+
+        undef @warnings;
+        use warnings 'utf8';
+        $ret = &Devel::PPPort::utf8_to_uvchr_buf($input, $adjustment);
+        is($ret->[0], 0,  "returned value $display; warnings enabled");
+        is($ret->[1], -1, "returned length $display; warnings enabled");
+        my $all_warnings = join "; ", @warnings;
+        my $contains = grep { $_ =~ $warning } $all_warnings;
+        is($contains, 1, $display
+                    . "; Got: '$all_warnings', which should contain '$warning'");
+
+        undef @warnings;
+        no warnings 'utf8';
+        $ret = &Devel::PPPort::utf8_to_uvchr_buf($input, $adjustment);
+        is($ret->[0], 0xFFFD,  "returned value $display; warnings disabled");
+        is($ret->[1], $test->{'no_warnings_returned_length'},
+                      "returned length $display; warnings disabled");
+    }
+}
+
+if (ivers($]) ge ivers(5.008)) {
+    BEGIN { if (ivers($]) ge ivers(5.008)) { require utf8; "utf8"->import() } }
+
+    is(Devel::PPPort::sv_len_utf8("aščť"), 4);
+    is(Devel::PPPort::sv_len_utf8_nomg("aščť"), 4);
+
+    my $str = "áíé";
+    utf8::downgrade($str);
+    is(Devel::PPPort::sv_len_utf8($str), 3);
+    utf8::downgrade($str);
+    is(Devel::PPPort::sv_len_utf8_nomg($str), 3);
+    utf8::upgrade($str);
+    is(Devel::PPPort::sv_len_utf8($str), 3);
+    utf8::upgrade($str);
+    is(Devel::PPPort::sv_len_utf8_nomg($str), 3);
+
+    tie my $scalar, 'TieScalarCounter', "é";
+
+    is(tied($scalar)->{fetch}, 0);
+    is(tied($scalar)->{store}, 0);
+    is(Devel::PPPort::sv_len_utf8($scalar), 2);
+    is(tied($scalar)->{fetch}, 1);
+    is(tied($scalar)->{store}, 0);
+    is(Devel::PPPort::sv_len_utf8($scalar), 3);
+    is(tied($scalar)->{fetch}, 2);
+    is(tied($scalar)->{store}, 0);
+    is(Devel::PPPort::sv_len_utf8($scalar), 4);
+    is(tied($scalar)->{fetch}, 3);
+    is(tied($scalar)->{store}, 0);
+    is(Devel::PPPort::sv_len_utf8_nomg($scalar), 4);
+    is(tied($scalar)->{fetch}, 3);
+    is(tied($scalar)->{store}, 0);
+    is(Devel::PPPort::sv_len_utf8_nomg($scalar), 4);
+    is(tied($scalar)->{fetch}, 3);
+    is(tied($scalar)->{store}, 0);
+} else {
+    skip 'skip: no utf8::downgrade/utf8::upgrade support', 23;
+}
+
+package TieScalarCounter;
+
+sub TIESCALAR {
+    my ($class, $value) = @_;
+    return bless { fetch => 0, store => 0, value => $value }, $class;
+}
+
+sub FETCH {
+    BEGIN { if (main::ivers($]) ge main::ivers(5.008)) { require utf8; "utf8"->import() } }
+    my ($self) = @_;
+    $self->{fetch}++;
+    return $self->{value} .= "é";
+}
+
+sub STORE {
+    my ($self, $value) = @_;
+    $self->{store}++;
+    $self->{value} = $value;
+}
+
index 7f5d78b..e915cfd 100644 (file)
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -21,24 +23,26 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
-  if (52) {
+  if (11) {
     load();
-    plan(tests => 52);
+    plan(tests => 11);
   }
 }
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
@@ -48,127 +52,17 @@ bootstrap Devel::PPPort;
 
 package main;
 
-ok(&Devel::PPPort::sv_setuv(42), 42);
-ok(&Devel::PPPort::newSVuv(123), 123);
-ok(&Devel::PPPort::sv_2uv("4711"), 4711);
-ok(&Devel::PPPort::sv_2uv("1735928559"), 1735928559);
-ok(&Devel::PPPort::SvUVx("1735928559"), 1735928559);
-ok(&Devel::PPPort::SvUVx(1735928559), 1735928559);
-ok(&Devel::PPPort::SvUVx(0xdeadbeef), 0xdeadbeef);
-ok(&Devel::PPPort::XSRETURN_UV(), 42);
-ok(&Devel::PPPort::PUSHu(), 42);
-ok(&Devel::PPPort::XPUSHu(), 43);
-ok(&Devel::PPPort::UTF8_SAFE_SKIP("A", 0), 1);
-ok(&Devel::PPPort::UTF8_SAFE_SKIP("A", -1), 0);
-ok(&Devel::PPPort::my_strnlen("abc\0def", 7), 3);
-
-my $ret = &Devel::PPPort::utf8_to_uvchr("A");
-ok($ret->[0], ord("A"));
-ok($ret->[1], 1);
-
-$ret = &Devel::PPPort::utf8_to_uvchr("\0");
-ok($ret->[0], 0);
-ok($ret->[1], 1);
-
-$ret = &Devel::PPPort::utf8_to_uvchr_buf("A", 0);
-ok($ret->[0], ord("A"));
-ok($ret->[1], 1);
-
-$ret = &Devel::PPPort::utf8_to_uvchr_buf("\0", 0);
-ok($ret->[0], 0);
-ok($ret->[1], 1);
-
-if (ord("A") != 65) {   # tests not valid for EBCDIC
-    ok(1, 1) for 1 .. (2 + 4 + (5 * 5));
-}
-else {
-    $ret = &Devel::PPPort::utf8_to_uvchr_buf("\xc4\x80", 0);
-    ok($ret->[0], 0x100);
-    ok($ret->[1], 2);
-
-    my @warnings;
-    local $SIG{__WARN__} = sub { push @warnings, @_; };
-
-    {
-        use warnings 'utf8';
-        $ret = &Devel::PPPort::utf8_to_uvchr("\xe0\0\x80");
-        ok($ret->[0], 0);
-        ok($ret->[1], -1);
-
-        no warnings;
-        $ret = &Devel::PPPort::utf8_to_uvchr("\xe0\0\x80");
-        ok($ret->[0], 0xFFFD);
-        ok($ret->[1], 1);
-    }
-
-    my @buf_tests = (
-        {
-            input      => "A",
-            adjustment => -1,
-            warning    => qr/empty/,
-            no_warnings_returned_length => 0,
-        },
-        {
-            input      => "\xc4\xc5",
-            adjustment => 0,
-            warning    => qr/non-continuation/,
-            no_warnings_returned_length => 1,
-        },
-        {
-            input      => "\xc4\x80",
-            adjustment => -1,
-            warning    => qr/short|1 byte, need 2/,
-            no_warnings_returned_length => 1,
-        },
-        {
-            input      => "\xc0\x81",
-            adjustment => 0,
-            warning    => qr/overlong|2 bytes, need 1/,
-            no_warnings_returned_length => 2,
-        },
-        {                 # Old algorithm supposedly failed to detect this
-            input      => "\xff\x80\x90\x90\x90\xbf\xbf\xbf\xbf\xbf\xbf\xbf\xbf",
-            adjustment => 0,
-            warning    => qr/overflow/,
-            no_warnings_returned_length => 13,
-        },
-    );
-
-    # An empty input is an assertion failure on debugging builds.  It is
-    # deliberately the first test.
-    require Config; import Config;
-    use vars '%Config';
-    if ($Config{ccflags} =~ /-DDEBUGGING/) {
-        shift @buf_tests;
-        ok(1, 1) for 1..5;
-    }
-
-    for my $test (@buf_tests) {
-        my $input = $test->{'input'};
-        my $adjustment = $test->{'adjustment'};
-        my $display = 'utf8_to_uvchr_buf("';
-        for (my $i = 0; $i < length($input) + $adjustment; $i++) {
-            $display .= sprintf "\\x%02x", ord substr($input, $i, 1);
-        }
-
-        $display .= '")';
-        my $warning = $test->{'warning'};
-
-        undef @warnings;
-        use warnings 'utf8';
-        $ret = &Devel::PPPort::utf8_to_uvchr_buf($input, $adjustment);
-        ok($ret->[0], 0,  "returned value $display; warnings enabled");
-        ok($ret->[1], -1, "returned length $display; warnings enabled");
-        my $all_warnings = join "; ", @warnings;
-        my $contains = grep { $_ =~ $warning } $all_warnings;
-        ok($contains, 1, $display . "; '$all_warnings' contains '$warning'");
-
-        undef @warnings;
-        no warnings 'utf8';
-        $ret = &Devel::PPPort::utf8_to_uvchr_buf($input, $adjustment);
-        ok($ret->[0], 0xFFFD,  "returned value $display; warnings disabled");
-        ok($ret->[1], $test->{'no_warnings_returned_length'},
-                      "returned length $display; warnings disabled");
-    }
-}
+BEGIN { require warnings if "$]" > '5.006' }
+
+is(&Devel::PPPort::sv_setuv(42), 42);
+is(&Devel::PPPort::newSVuv(123), 123);
+is(&Devel::PPPort::sv_2uv("4711"), 4711);
+is(&Devel::PPPort::sv_2uv("1735928559"), 1735928559);
+is(&Devel::PPPort::SvUVx("1735928559"), 1735928559);
+is(&Devel::PPPort::SvUVx(1735928559), 1735928559);
+is(&Devel::PPPort::SvUVx(0xdeadbeef), 0xdeadbeef);
+is(&Devel::PPPort::XSRETURN_UV(), 42);
+is(&Devel::PPPort::PUSHu(), 42);
+is(&Devel::PPPort::XPUSHu(), 43);
+is(&Devel::PPPort::my_strnlen("abc\0def", 7), 3);
 
index 55da5a8..fb836f1 100644 (file)
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -21,13 +23,15 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
   if (52) {
@@ -38,7 +42,7 @@ BEGIN {
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
@@ -53,13 +57,13 @@ ok(Devel::PPPort::compare_PL_signals());
 ok(!defined(&Devel::PPPort::PL_sv_undef()));
 ok(&Devel::PPPort::PL_sv_yes());
 ok(!&Devel::PPPort::PL_sv_no());
-ok(&Devel::PPPort::PL_na("abcd"), 4);
-ok(&Devel::PPPort::PL_Sv(), "mhx");
+is(&Devel::PPPort::PL_na("abcd"), 4);
+is(&Devel::PPPort::PL_Sv(), "mhx");
 ok(defined &Devel::PPPort::PL_tokenbuf());
 ok("$]" >= 5.009005 || &Devel::PPPort::PL_parser());
 ok(&Devel::PPPort::PL_hexdigit() =~ /^[0-9a-zA-Z]+$/);
 ok(defined &Devel::PPPort::PL_hints());
-ok(&Devel::PPPort::PL_ppaddr("mhx"), "MHX");
+is(&Devel::PPPort::PL_ppaddr("mhx"), "MHX");
 
 for (&Devel::PPPort::other_variables()) {
   ok($_ != 0);
@@ -85,7 +89,7 @@ for (&Devel::PPPort::other_variables()) {
   else {
     ok(@w == 0);
   }
-  ok($fail, 0);
+  is($fail, 0);
 }
 
 ok(&Devel::PPPort::no_dummy_parser_vars(1) >= ("$]" < 5.009005 ? 1 : 0));
@@ -93,7 +97,7 @@ ok(&Devel::PPPort::no_dummy_parser_vars(1) >= ("$]" < 5.009005 ? 1 : 0));
 eval { &Devel::PPPort::no_dummy_parser_vars(0) };
 
 if ("$]" < 5.009005) {
-  ok($@, '');
+  is($@, '');
 }
 else {
   if ($@) {
index 33900e9..734332a 100644 (file)
 #
 ################################################################################
 
+use FindBin ();
+
 BEGIN {
   if ($ENV{'PERL_CORE'}) {
     chdir 't' if -d 't';
-    @INC = ('../lib', '../ext/Devel-PPPort/t') if -d '../lib' && -d '../ext';
+    unshift @INC, '../lib' if -d '../lib' && -d '../ext';
     require Config; import Config;
     use vars '%Config';
     if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
@@ -21,13 +23,15 @@ BEGIN {
       exit 0;
     }
   }
-  else {
-    unshift @INC, 't';
-  }
+
+  use lib "$FindBin::Bin";
+  use lib "$FindBin::Bin/../parts/inc";
+
+  die qq[Cannot find "$FindBin::Bin/../parts/inc"] unless -d "$FindBin::Bin/../parts/inc";
 
   sub load {
-    eval "use Test";
-    require 'testutil.pl' if $@;
+    require 'testutil.pl';
+    require 'inctools';
   }
 
   if (5) {
@@ -38,7 +42,7 @@ BEGIN {
 
 use Devel::PPPort;
 use strict;
-$^W = 1;
+BEGIN { $^W = 1; }
 
 package Devel::PPPort;
 use vars '@ISA';
@@ -68,7 +72,7 @@ ok("$]" >= 5.004 ? $warning =~ /^Perl_warner_nocontext bar:42/ : $warning eq '')
 
 $warning = '';
 Devel::PPPort::ckWARN();
-ok($warning, '');
+is($warning, '');
 
 $^W = 1;
 
diff --git a/gnu/usr.bin/perl/dist/Dumpvalue/t/extend-coverage.t b/gnu/usr.bin/perl/dist/Dumpvalue/t/extend-coverage.t
new file mode 100644 (file)
index 0000000..760c339
--- /dev/null
@@ -0,0 +1,443 @@
+BEGIN {
+    require Config;
+    if (($Config::Config{'extensions'} !~ m!\bList/Util\b!) ){
+        print "1..0 # Skip -- Perl configured without List::Util module\n";
+        exit 0;
+    }
+
+    # `make test` in the CPAN version of this module runs us with -w, but
+    # Dumpvalue.pm relies on all sorts of things that can cause warnings. I
+    # don't think that's worth fixing, so we just turn off all warnings
+    # during testing.
+    $^W = 0;
+}
+
+use strict;
+use warnings;
+use lib ("./t/lib");
+use TieOut;
+use Test::More qw(no_plan); # tests => 17;
+use List::Util qw( sum );
+use File::Temp qw( tempfile tempdir );
+use File::Spec;
+
+use_ok( 'Dumpvalue' );
+
+my $out = tie *OUT, 'TieOut';
+select(OUT);
+
+{
+    my $d = Dumpvalue->new( dumpReused => 1 );
+    ok( $d, 'create a new Dumpvalue object' );
+    is( $d->get('globPrint'), 0, 'get a single (default) option correctly' );
+    my @attributes = (qw|globPrint printUndef tick unctrl|);
+    my @rv = $d->get(@attributes);
+    my $expected = [ 0, 1, "auto", 'quote' ];
+    is_deeply( \@rv, $expected, "get multiple (default) options correctly" );
+}
+
+{
+    my $d;
+    ok( $d = Dumpvalue->new(), 'create a new Dumpvalue object' );
+    my @foobar = ('foo', 'bar');
+    my @bazlow = ('baz', 'low');
+    {
+        local $@;
+        eval { $d->dumpValue([@foobar], [@bazlow]); };
+        like $@, qr/^usage: \$dumper->dumpValue\(value\)/,
+            "dumpValue() takes only 1 argument";
+    }
+}
+
+{
+    my $d;
+    ok( $d = Dumpvalue->new(), 'create a new Dumpvalue object' );
+    #is( $d->stringify(), 'undef', 'stringify handles undef okay' );
+    # Need to create a "stringify-overloaded object", then test with
+    # non-default value 'bareStringify = 0'.
+}
+
+
+{
+    my (@x, @y);
+
+    my $d = Dumpvalue->new( dumpReused => 1, quoteHighBit => '', unctrl => 'quote' );
+    ok( $d, 'create a new Dumpvalue object: quoteHighBit explicitly off' );
+    $x[0] = $d->stringify("\N{U+266}");
+    is ($x[0], "'\N{U+266}'" , 'quoteHighBit off' );
+
+    my $e = Dumpvalue->new( dumpReused => 1, quoteHighBit => 1, unctrl => 'quote' );
+    ok( $e, 'create a new Dumpvalue object: quoteHighBit on' );
+    $y[0] = $e->stringify("\N{U+266}");
+    is( $y[0], q|'\1146'|, "quoteHighBit on");
+
+    my $f = Dumpvalue->new( dumpReused => 1, quoteHighBit => '', unctrl => 'unctrl' );
+    ok( $f, 'create a new Dumpvalue object: quoteHighBit explicitly off, unctrl' );
+    $x[1] = $f->stringify("\N{U+266}");
+    is ($x[1], "'\N{U+266}'" , 'quoteHighBit off' );
+
+    my $g = Dumpvalue->new( dumpReused => 1, quoteHighBit => '', unctrl => 'unctrl' );
+    ok( $g, 'create a new Dumpvalue object: quoteHighBit explicitly off, unctrl' );
+    $y[1] = $g->stringify("\N{U+266}");
+    is ($y[1], "'\N{U+266}'" , 'quoteHighBit off' );
+
+    my $h = Dumpvalue->new( dumpReused => 1, quoteHighBit => '', tick => '"' );
+    ok( $h, 'create a new Dumpvalue object: quoteHighBit explicitly off, tick quote' );
+    $x[2] = $h->stringify("\N{U+266}");
+    is ($x[2], q|"| . "\N{U+266}" . q|"| , 'quoteHighBit off' );
+
+    my $i = Dumpvalue->new( dumpReused => 1, quoteHighBit => 1, tick => '"' );
+    ok( $i, 'create a new Dumpvalue object: quoteHighBit on, tick quote' );
+    $y[2] = $i->stringify("\N{U+266}");
+    is( $y[2], q|"\1146"|, "quoteHighBit on");
+
+    my $j = Dumpvalue->new( dumpReused => 1, quoteHighBit => 1, unctrl => 'quote' );
+    ok( $j, 'create a new Dumpvalue object: quoteHighBit on' );
+    $x[3] = $j->stringify("abc");
+    is( $x[3], q|'abc'|, "quoteHighBit on, unctrl quote, asciii-only text");
+
+    my $k = Dumpvalue->new( dumpReused => 1, quoteHighBit => 1, unctrl => 'unctrl' );
+    ok( $k, 'create a new Dumpvalue object: quoteHighBit on' );
+    $y[3] = $k->stringify("\N{U+266}abc");
+    is( $y[3], q|'\1146abc'|, "quoteHighBit on, unctrl unctrl, mixed text");
+
+    my $l = Dumpvalue->new( dumpReused => 1, quoteHighBit => '', unctrl => 'quote' );
+    ok( $l, 'create a new Dumpvalue object: quoteHighBit off' );
+    $x[4] = $l->stringify("abc");
+    is( $x[4], q|'abc'|, "quoteHighBit off, unctrl quote, asciii-only text");
+
+    my $m = Dumpvalue->new( dumpReused => 1, quoteHighBit => '', unctrl => 'unctrl' );
+    ok( $m, 'create a new Dumpvalue object: quoteHighBit off' );
+    $y[4] = $m->stringify("\N{U+266}abc");
+    #is( $y[4], q|'\1146abc'|, "quoteHighBit off, unctrl unctrl, mixed text");
+    is( $y[4], qq|'\N{U+266}abc'|, "quoteHighBit off, unctrl unctrl, mixed text");
+
+}
+
+{
+    my (@x, @y);
+
+    my $d = Dumpvalue->new( dumpReused => 1, veryCompact => '' );
+    ok( $d, 'create a new Dumpvalue object: veryCompact explicitly off' );
+    $d->DumpElem([1, 2, 3]);
+    $x[0] = $out->read;
+    like( $x[0], qr/^ARRAY\([^)]+\)\n0\s+1\n1\s+2\n2\s+3/,
+        "DumpElem worked as expected with veryCompact explicitly off");
+
+    my $e = Dumpvalue->new( dumpReused => 1, veryCompact => 1 );
+    ok( $e, 'create a new Dumpvalue object: veryCompact on' );
+    $e->DumpElem([1, 2, 3]);
+    $y[0] = $out->read;
+    like( $y[0], qr/^0\.\.2\s+1 2 3/,
+        "DumpElem worked as expected with veryCompact on");
+
+    my $f = Dumpvalue->new( dumpReused => 1, veryCompact => '' );
+    $f->DumpElem({ a => 1, b => 2, c => 3 });
+    $x[1] = $out->read;
+    like( $x[1], qr/^HASH\([^)]+\)\n'a'\s=>\s1\n'b'\s=>\s2\n'c'\s=>\s3/,
+        "DumpElem worked as expected with veryCompact explicitly off: hashref");
+
+    my $g = Dumpvalue->new( dumpReused => 1, veryCompact => 1 );
+    ok( $g, 'create a new Dumpvalue object: veryCompact on' );
+    $g->DumpElem({ a => 1, b => 2, c => 3 });
+    $y[1] = $out->read;
+    like( $y[1], qr/^'a'\s=>\s1,\s'b'\s=>\s2,\s'c'\s=>\s3/,
+        "DumpElem worked as expected with veryCompact on: hashref");
+
+    my $h = Dumpvalue->new( dumpReused => 1, veryCompact => '' );
+    ok( $h, 'create a new Dumpvalue object: veryCompact explicitly off' );
+    $h->DumpElem([1, 2, ['a']]);
+    $x[2] = $out->read;
+    like( $x[2], qr/^ARRAY\([^)]+\)\n0\s+1\n1\s+2\n2\s+ARRAY\([^)]+\)\n\s+0\s+'a'/,
+        "DumpElem worked as expected with veryCompact explicitly off:  array contains ref");
+
+    my $i = Dumpvalue->new( dumpReused => 1, veryCompact => 1 );
+    ok( $i, 'create a new Dumpvalue object: veryCompact on' );
+    $i->DumpElem([1, 2, ['a']]);
+    $y[2] = $out->read;
+    like( $y[2], qr/^ARRAY\([^)]+\)\n0\s+1\n1\s+2\n2\s+0\.\.0\s+'a'/,
+        "DumpElem worked as expected with veryCompact on: array contains ref");
+
+    my $j = Dumpvalue->new( dumpReused => 1, veryCompact => '' );
+    ok( $j, 'create a new Dumpvalue object: veryCompact explicitly off' );
+    $j->DumpElem({ a => 1, b => 2, c => ['a'] });
+    $x[3] = $out->read;
+    like( $x[3], qr/^HASH\([^)]+\)\n'a'\s=>\s1\n'b'\s=>\s2\n'c'\s=>\sARRAY\([^)]+\)\n\s+0\s+'a'/,
+        "DumpElem worked as expected with veryCompact explicitly off:  hash contains ref");
+
+    my $k = Dumpvalue->new( dumpReused => 1, veryCompact => 1 );
+    ok( $k, 'create a new Dumpvalue object: veryCompact on' );
+    $k->DumpElem({ a => 1, b => 2, c => ['a'] });
+    $y[3] = $out->read;
+    like( $y[3], qr/^HASH\([^)]+\)\n'a'\s=>\s1\n'b'\s=>\s2\n'c'\s=>\s0\.\.0\s+'a'/,
+        "DumpElem worked as expected with veryCompact on:  hash contains ref");
+
+    my $l = Dumpvalue->new( dumpReused => 1, veryCompact => '', hashDepth => 2 );
+    $l->DumpElem({ a => 1, b => 2, c => 3 });
+    $x[4] = $out->read;
+    like( $x[4], qr/^HASH\([^)]+\)\n'a'\s=>\s1\n'b'\s=>\s2\n\.{4}/,
+        "DumpElem worked as expected with veryCompact explicitly off: hashref hashdepth");
+
+    my $m = Dumpvalue->new( dumpReused => 1, veryCompact => 1, hashDepth => 2 );
+    ok( $m, 'create a new Dumpvalue object: veryCompact on' );
+    $m->DumpElem({ a => 1, b => 2, c => 3 });
+    $y[4] = $out->read;
+    like( $y[4], qr/^'a'\s=>\s1,\s'b'\s=>\s2\s\.+/,
+        "DumpElem worked as expected with veryCompact on: hashref hashdepth");
+
+    my $n = Dumpvalue->new( dumpReused => 1, veryCompact => '', hashDepth => 4 );
+    ok( $n, 'create a new Dumpvalue object: veryCompact off' );
+    $n->DumpElem({ a => 1, b => 2, c => 3 });
+    $x[5] = $out->read;
+    like( $x[5], qr/^HASH\([^)]+\)\n'a'\s=>\s1\n'b'\s=>\s2\n'c'\s+=>\s+3/,
+        "DumpElem worked as expected with veryCompact explicitly off: hashref hashdepth");
+
+    my $o = Dumpvalue->new( dumpReused => 1, veryCompact => 1, hashDepth => 4 );
+    ok( $o, 'create a new Dumpvalue object: veryCompact on' );
+    $o->DumpElem({ a => 1, b => 2, c => 3 });
+    $y[5] = $out->read;
+    like( $y[5], qr/^'a'\s=>\s1,\s+'b'\s=>\s2,\s+'c'\s+=>\s+3/,
+        "DumpElem worked as expected with veryCompact on: hashref hashdepth");
+}
+
+{
+    my (@x, @y);
+
+    my $five = '12345';
+    my $six = '123456';
+    my $alt = '78901';
+    my @arr = ($six, $alt);
+    my %two = (first => $six, notthefirst => $alt);
+
+    my $d = Dumpvalue->new( dumpReused => 1, usageOnly => '' );
+    ok( $d, 'create a new Dumpvalue object: usageOnly explicitly off' );
+    $x[0] = $d->scalarUsage($five);
+    is( $x[0], length($five), 'scalarUsage reports length correctly' );
+
+    my $e = Dumpvalue->new( dumpReused => 1, usageOnly => 1 );
+    ok( $e, 'create a new Dumpvalue object: usageOnly on' );
+    $y[0] = $e->scalarUsage($five);
+    is( $y[0], length($five), 'scalarUsage reports length correctly' );
+
+    my $f = Dumpvalue->new( dumpReused => 1, usageOnly => '' );
+    ok( $f, 'create a new Dumpvalue object: usageOnly explicitly off' );
+    $x[1] = $f->scalarUsage($six, '7890');
+    is ($x[1], length($six), 'scalarUsage reports length of first element correctly' );
+
+    my $g = Dumpvalue->new( dumpReused => 1, usageOnly => 1 );
+    ok( $g, 'create a new Dumpvalue object: usageOnly on' );
+    $y[1] = $g->scalarUsage($six, '7890');
+    is ($y[1], length($six), 'scalarUsage reports length of first element correctly' );
+
+    my $h = Dumpvalue->new( dumpReused => 1, usageOnly => '' );
+    ok( $h, 'create a new Dumpvalue object: usageOnly explicitly off' );
+    $x[2] = $h->scalarUsage( [ @arr ] );
+    is ($x[2], sum( map { length($_) } @arr ),
+        'scalarUsage reports sum of length of array elements correctly' );
+
+    my $i = Dumpvalue->new( dumpReused => 1, usageOnly => 1 );
+    ok( $i, 'create a new Dumpvalue object: usageOnly on' );
+    $y[2] = $i->scalarUsage( [ @arr ] );
+    is ($y[2], sum( map { length($_) } @arr ),
+        'scalarUsage reports length of first element correctly' );
+
+    my $j = Dumpvalue->new( dumpReused => 1, usageOnly => '' );
+    ok( $j, 'create a new Dumpvalue object: usageOnly explicitly off' );
+    $x[3] = $j->scalarUsage( { %two } );
+    is ($x[3], sum( ( map { length($_) } keys %two ), ( map { length($_) } values %two ), ),
+        'scalarUsage reports sum of length of hash keys and values correctly' );
+
+    my $k = Dumpvalue->new( dumpReused => 1, usageOnly => 1 );
+    ok( $k, 'create a new Dumpvalue object: usageOnly on' );
+    $y[3] = $k->scalarUsage( { %two } );
+    is ($y[3], sum( ( map { length($_) } keys %two ), ( map { length($_) } values %two ), ),
+        'scalarUsage reports sum of length of hash keys and values correctly' );
+}
+
+{
+    my (@x, @y);
+
+    my $d = Dumpvalue->new( dumpReused => 1, usageOnly => 1 );
+    ok( $d, 'create a new Dumpvalue object, usageOnly on' );
+    $d->dumpvars( 'Fake', 'veryfake' );
+    like( $out->read, qr/^String space:/, 'printed usage message fine' );
+
+    my $e = Dumpvalue->new( dumpReused => 1, usageOnly => '' );
+    ok( $e, 'create a new Dumpvalue object, usageOnly explicitly off' );
+    $e->dumpvars( 'Fake', 'veryfake' );
+    is( $out->read, '', 'printed usage message fine' );
+
+    my $f = Dumpvalue->new( dumpReused => 1, usageOnly => 1 );
+    ok( $f, 'create a new Dumpvalue object, usageOnly on' );
+    $f->dumpvars( 'main', 'INC' );
+    like( $out->read, qr/\@INC =/, 'dumped variables from a package' );
+
+    my $g = Dumpvalue->new( dumpReused => 1, usageOnly => '' );
+    ok( $g, 'create a new Dumpvalue object, usageOnly explicitly off' );
+    $g->dumpvars( 'main', 'INC' );
+    like( $out->read, qr/\@INC =/, 'dumped variables from a package' );
+
+    # return if $DB::signal and $self->{stopDbSignal};
+
+    {
+        note("DB::signal off");
+        local $DB::signal = 0;
+
+        my $h = Dumpvalue->new( dumpReused => 1, stopDbSignal => '' );
+        ok( $h, 'create a new Dumpvalue object, stopDbSignal explicitly off' );
+        $h->dumpvars( 'main', 'INC' );
+        like( $out->read, qr/\@INC =/, 'dumped variables from a package' );
+
+        my $i = Dumpvalue->new( dumpReused => 1, stopDbSignal => 1 );
+        ok( $i, 'create a new Dumpvalue object, stopDbSignal on' );
+        $i->dumpvars( 'main', 'INC' );
+        like( $out->read, qr/\@INC =/, 'dumped variables from a package' );
+    }
+
+    {
+        note("DB::signal on");
+        local $DB::signal = 1;
+
+        my $j = Dumpvalue->new( dumpReused => 1, stopDbSignal => '' );
+        ok( $j, 'create a new Dumpvalue object, stopDbSignal explicitly off' );
+        $j->dumpvars( 'main', 'INC' );
+        like( $out->read, qr/\@INC =/, 'dumped variables from a package' );
+
+        my $k = Dumpvalue->new( dumpReused => 1, stopDbSignal => 1 );
+        ok( $k, 'create a new Dumpvalue object, stopDbSignal on' );
+        $k->dumpvars( 'main', 'INC' );
+        is( $out->read, '', 'return false' );
+
+        my $l = Dumpvalue->new( dumpReused => 1, stopDbSignal => 1 );
+        ok( $l, 'create a new Dumpvalue object, stopDbSignal on' );
+        $l->dumpvars( 'main::', 'INC' );
+        is( $out->read, '', 'XXX: return false' );
+    }
+}
+
+{
+    my (@x, @y);
+
+    my $d = Dumpvalue->new( dumpReused => 1, compactDump => 1 );
+    ok( $d, 'create a new Dumpvalue object, compactDump' );
+    $d->unwrap([]);
+    $x[0] = $out->read;
+    like( $x[0], qr/\s*empty array\n/, "unwrap() reported empty array");
+
+    my $e = Dumpvalue->new( dumpReused => 1, compactDump => 0 );
+    ok( $e, 'create a new Dumpvalue object, compactDump explicitly off' );
+    $e->unwrap([ qw| alpha beta gamma | ]);
+    $y[0] = $out->read;
+    like( $y[0], qr/0\s+'alpha'\n1\s+'beta'\n2\s+'gamma'/,
+        "unwrap() with compactDump explicitly off");
+
+    my $f = Dumpvalue->new( dumpReused => 1 );
+    ok( $f, 'create a new Dumpvalue object' );
+    $f->veryCompact(0);
+    $f->unwrap([ qw| alpha beta gamma | ]);
+    $x[1] = $out->read;
+    like( $x[1], qr/0\s+'alpha'\n1\s+'beta'\n2\s+'gamma'/,
+        "unwrap() after veryCompact method call with arg 0");
+
+    my $g = Dumpvalue->new( dumpReused => 1 );
+    ok( $g, 'create a new Dumpvalue object' );
+    $g->veryCompact();
+    $g->unwrap([ qw| alpha beta gamma | ]);
+    $y[1] = $out->read;
+    like( $y[1], qr/0\s+'alpha'\n1\s+'beta'\n2\s+'gamma'/,
+        "unwrap() after veryCompact method call with explicitly off");
+
+    my $h = Dumpvalue->new( dumpReused => 1 );
+    ok( $h, 'create a new Dumpvalue object' );
+    $h->compactDump(1);
+    $h->veryCompact(0);
+    $h->unwrap([ qw| alpha beta gamma | ]);
+    $x[2] = $out->read;
+    like( $x[2], qr/0\.\.2\s+'alpha'\s+'beta'\s+'gamma'/,
+        "unwrap() after compactDump(1) and veryCompact(0) method calls");
+
+    my $i = Dumpvalue->new( dumpReused => 1 );
+    ok( $i, 'create a new Dumpvalue object' );
+    $i->compactDump(0);
+    $i->unwrap([ qw| alpha beta gamma | ]);
+    $y[2] = $out->read;
+    like( $y[1], qr/0\s+'alpha'\n1\s+'beta'\n2\s+'gamma'/,
+        "unwrap() after compactDump(0) method call");
+
+}
+
+{
+    no warnings 'once';
+
+    my (@x, @y);
+
+    my $d = Dumpvalue->new( dumpReused => 1 );
+    ok( $d, 'create a new Dumpvalue object' );
+    $d->unwrap(\*BAR);
+    $x[0] = $out->read;
+    is( $x[0], "-> *main::BAR\n", "unwrap reported ref to typeglob");
+
+    my $e = Dumpvalue->new( dumpReused => 1, globPrint => 1 );
+    ok( $e, 'create a new Dumpvalue object, globPrint' );
+    $e->unwrap(\*RQP);
+    $y[0] = $out->read;
+    is( $y[0], "-> *main::RQP\n", "unwrap reported ref to typeglob");
+
+    my $tdir = tempdir( CLEANUP => 1 );
+    my $tempfile = File::Spec->catfile($tdir, 'foo.txt');
+    open FH, '>', $tempfile or die "Unable to open tempfile for writing";
+    print FH "\n";
+    my $f = Dumpvalue->new( dumpReused => 1 );
+    ok( $f, 'create a new Dumpvalue object' );
+    $f->unwrap(\*FH);
+    $x[1] = $out->read;
+    like( $x[1],
+        qr/->\s\*main::FH\n\s*FileHandle\(\{\*main::FH\}\)\s+=>\s+fileno\(\d+\)\n/,
+        "unwrap reported ref to typeglob");
+    close FH or die "Unable to close tempfile after writing";
+}
+
+{
+    my (@x, @y);
+
+    my $d = Dumpvalue->new( dumpReused => 1, quoteHighBit => '' );
+    ok( $d, 'create a new Dumpvalue object' );
+    $d->set_unctrl('unctrl');
+    $d->unwrap([ "bo\007nd", qw| alpha beta gamma | ]);
+    $x[0] = $out->read;
+    like( $x[0], qr/0\s+"bo\^.nd"\n1\s+'alpha'\n2\s+'beta'\n3\s+'gamma'/,
+        "unwrap() with set_unctrl('unctrl') method call" );
+
+    my $e = Dumpvalue->new( dumpReused => 1, quoteHighBit => 1 );
+    ok( $e, 'create a new Dumpvalue object' );
+    $e->set_unctrl('unctrl');
+    $e->unwrap([ "bo\007nd", qw| alpha beta gamma | ]);
+    $x[1] = $out->read;
+    like( $x[1], qr/0\s+"bo\^.nd"\n1\s+'alpha'\n2\s+'beta'\n3\s+'gamma'/,
+        "unwrap() with set_unctrl('unctrl') method call" );
+}
+
+{
+    my (@x, @y);
+
+    my $d = Dumpvalue->new( dumpReused => 1 );
+    ok( $d, 'create a new Dumpvalue object' );
+    $x[0] = $d->dumpsub( '', 'TieOut::read' );
+    like( $x[0], qr/&TieOut::read in/, 'dumpsub found sub fine' );
+
+    my $e = Dumpvalue->new( dumpReused => 1 );
+    ok( $e, 'create a new Dumpvalue object' );
+    $y[0] = $e->dumpsub( 5, 'TieOut::read' );
+    like( $y[0], qr/\s{5}&TieOut::read in/, 'dumpsub found sub fine, leading whitespace' );
+
+    my $f = Dumpvalue->new( dumpReused => 1 );
+    ok( $f, 'create a new Dumpvalue object' );
+    $x[1] = $f->dumpsub( '', "{*ABC}" );
+    like( $x[1], qr/&ABC in \?{3}/, 'dumpsub found sub (ref) fine' );
+
+}
+
+__END__
+    print STDERR "AAA: $x[0]\n";
+    print STDERR "AAA: $y[0]\n";
+
diff --git a/gnu/usr.bin/perl/dist/Dumpvalue/t/lib/TieOut.pm b/gnu/usr.bin/perl/dist/Dumpvalue/t/lib/TieOut.pm
new file mode 100644 (file)
index 0000000..568caed
--- /dev/null
@@ -0,0 +1,20 @@
+package TieOut;
+use overload '"' => sub { "overloaded!" };
+
+sub TIEHANDLE {
+       my $class = shift;
+       bless(\( my $ref), $class);
+}
+
+sub PRINT {
+       my $self = shift;
+       $$self .= join('', @_);
+}
+
+sub read {
+       my $self = shift;
+       return substr($$self, 0, length($$self), '');
+}
+
+1;
+
diff --git a/gnu/usr.bin/perl/dist/Dumpvalue/t/rt-134441-dumpvalue.t b/gnu/usr.bin/perl/dist/Dumpvalue/t/rt-134441-dumpvalue.t
new file mode 100644 (file)
index 0000000..324845d
--- /dev/null
@@ -0,0 +1,86 @@
+BEGIN {
+       require Config;
+       if (($Config::Config{'extensions'} !~ m!\bList/Util\b!) ){
+           print "1..0 # Skip -- Perl configured without List::Util module\n";
+           exit 0;
+       }
+
+       # `make test` in the CPAN version of this module runs us with -w, but
+       # Dumpvalue.pm relies on all sorts of things that can cause warnings. I
+       # don't think that's worth fixing, so we just turn off all warnings
+       # during testing.
+       $^W = 0;
+}
+
+use lib ("./t/lib");
+use TieOut;
+use Test::More tests => 17;
+
+use_ok( 'Dumpvalue' );
+
+my $d;
+ok( $d = Dumpvalue->new(), 'create a new Dumpvalue object' );
+
+my $out = tie *OUT, 'TieOut';
+select(OUT);
+
+my (@foobar, $x, $y);
+
+@foobar = ('foo', 'bar');
+$d->dumpValue([@foobar]);
+$x = $out->read;
+is( $x, "0  'foo'\n1  'bar'\n", 'dumpValue worked on array ref' );
+$d->dumpValues(@foobar);
+$y = $out->read;
+is( $y, "0  'foo'\n1  'bar'\n", 'dumpValues worked on array' );
+is( $y, $x,
+    "dumpValues called on array returns same as dumpValue on array ref");
+
+@foobar = (undef, 'bar');
+$d->dumpValue([@foobar]);
+$x = $out->read;
+is( $x, "0  empty slot\n1  'bar'\n",
+    'dumpValue worked on array ref, first element undefined' );
+$d->dumpValues(@foobar);
+$y = $out->read;
+is( $y, "0  empty slot\n1  'bar'\n",
+    'dumpValues worked on array, first element undefined' );
+is( $y, $x,
+    "dumpValues called on array returns same as dumpValue on array ref, first element undefined");
+
+@foobar = ('bar', undef);
+$d->dumpValue([@foobar]);
+$x = $out->read;
+is( $x, "0  'bar'\n1  empty slot\n",
+    'dumpValue worked on array ref, last element undefined' );
+$d->dumpValues(@foobar);
+$y = $out->read;
+is( $y, "0  'bar'\n1  empty slot\n",
+    'dumpValues worked on array, last element undefined' );
+is( $y, $x,
+    "dumpValues called on array returns same as dumpValue on array ref, last element undefined");
+
+@foobar = ('', 'bar');
+$d->dumpValue([@foobar]);
+$x = $out->read;
+is( $x, "0  ''\n1  'bar'\n",
+    'dumpValue worked on array ref, first element empty string' );
+$d->dumpValues(@foobar);
+$y = $out->read;
+is( $y, "0  ''\n1  'bar'\n",
+    'dumpValues worked on array, first element empty string' );
+is( $y, $x,
+    "dumpValues called on array returns same as dumpValue on array ref, first element empty string");
+
+@foobar = ('bar', '');
+$d->dumpValue([@foobar]);
+$x = $out->read;
+is( $x, "0  'bar'\n1  ''\n",
+    'dumpValue worked on array ref, last element empty string' );
+$d->dumpValues(@foobar);
+$y = $out->read;
+is( $y, "0  'bar'\n1  ''\n",
+    'dumpValues worked on array, last element empty string' );
+is( $y, $x,
+    "dumpValues called on array returns same as dumpValue on array ref, last element empty string");
+
index 21b67c1..004815e 100644 (file)
@@ -148,7 +148,7 @@ sub heavy_export {
                    if (!$export_cache->{$sym}) {
                        # accumulate the non-exports
                        push @carp,
-                         qq["$sym" is not exported by the $pkg module\n];
+                         qq["$sym" is not exported by the $pkg module];
                        $oops++;
                    }
                }
@@ -156,7 +156,7 @@ sub heavy_export {
        }
        if ($oops) {
            require Carp;
-           Carp::croak("@{carp}Can't continue after import errors");
+           Carp::croak(join("\n", @carp, "Can't continue after import errors"));
        }
     }
     else {
index d6ac63f..0518080 100644 (file)
@@ -18,7 +18,7 @@ sub ok ($;$) {
 
 BEGIN {
     $test = 1;
-    print "1..31\n";
+    print "1..33\n";
     require Exporter;
     ok( 1, 'Exporter compiled' );
 }
@@ -129,6 +129,16 @@ Testing->import(@tags);
     'import by tags' );
 
 
+package Err;
+my @missing = qw(first second);
+eval { Testing->import(@missing) };
+
+for my $func (@missing) {
+    ::ok( $@ =~ /^"$func" is not exported by the Testing module$/m,
+          "$func is not exported error message" );
+}
+
+
 package Arrr;
 Testing->import(qw(!lifejacket));
 
index 57f1086..cd86707 100755 (executable)
@@ -4,7 +4,7 @@ BEGIN {
 
 use Filter::Simple::FilterOnlyTest qr/not ok/ => "ok", 
                                    "bad" => "ok", fail => "die";
-print "1..9\n";
+print "1..11\n";
 
 sub fail { print "ok ", $_[0], "\n" }
 sub ok { print "ok ", $_[0], "\n" }
@@ -41,3 +41,20 @@ print "ok 8\n";
 
 print "not " unless "bad" =~ /bad/;
 print "ok 9\n";
+
+use Filter::Simple::ExeNoComments;
+
+=for us
+
+shromplex
+
+=cut
+
+# shromplex
+
+# test the difference from code*
+my $x = "ABC";
+
+print $x eq "TEST" ? "" : "not ", "ok 10 # check strings processed\n";
+
+print "ok 11 # executable_no_comments\n";
diff --git a/gnu/usr.bin/perl/dist/Filter-Simple/t/lib/Filter/Simple/ExeNoComments.pm b/gnu/usr.bin/perl/dist/Filter-Simple/t/lib/Filter/Simple/ExeNoComments.pm
new file mode 100644 (file)
index 0000000..3eaa454
--- /dev/null
@@ -0,0 +1,11 @@
+package Filter::Simple::ExeNoComments;
+
+use Filter::Simple;
+
+FILTER_ONLY
+  executable_no_comments => sub {
+            $_ =~ /shromplex/ and die "We wants no shromplexes!";
+            s/ABC/TEST/g;
+       };
+
+1;
diff --git a/gnu/usr.bin/perl/dist/FindBin/lib/FindBin.pm b/gnu/usr.bin/perl/dist/FindBin/lib/FindBin.pm
new file mode 100644 (file)
index 0000000..cf6ecf2
--- /dev/null
@@ -0,0 +1,170 @@
+# FindBin.pm
+#
+# Copyright (c) 1995 Graham Barr & Nick Ing-Simmons. All rights reserved.
+# This program is free software; you can redistribute it and/or modify it
+# under the same terms as Perl itself.
+
+=head1 NAME
+
+FindBin - Locate directory of original perl script
+
+=head1 SYNOPSIS
+
+ use FindBin;
+ use lib "$FindBin::Bin/../lib";
+
+ or
+
+ use FindBin qw($Bin);
+ use lib "$Bin/../lib";
+
+=head1 DESCRIPTION
+
+Locates the full path to the script bin directory to allow the use
+of paths relative to the bin directory.
+
+This allows a user to setup a directory tree for some software with
+directories C<< <root>/bin >> and C<< <root>/lib >>, and then the above
+example will allow the use of modules in the lib directory without knowing
+where the software tree is installed.
+
+If perl is invoked using the B<-e> option or the perl script is read from
+C<STDIN> then FindBin sets both C<$Bin> and C<$RealBin> to the current
+directory.
+
+=head1 EXPORTABLE VARIABLES
+
+ $Bin         - path to bin directory from where script was invoked
+ $Script      - basename of script from which perl was invoked
+ $RealBin     - $Bin with all links resolved
+ $RealScript  - $Script with all links resolved
+
+=head1 KNOWN ISSUES
+
+If there are two modules using C<FindBin> from different directories
+under the same interpreter, this won't work. Since C<FindBin> uses a
+C<BEGIN> block, it'll be executed only once, and only the first caller
+will get it right. This is a problem under mod_perl and other persistent
+Perl environments, where you shouldn't use this module. Which also means
+that you should avoid using C<FindBin> in modules that you plan to put
+on CPAN. To make sure that C<FindBin> will work is to call the C<again>
+function:
+
+  use FindBin;
+  FindBin::again(); # or FindBin->again;
+
+In former versions of FindBin there was no C<again> function. The
+workaround was to force the C<BEGIN> block to be executed again:
+
+  delete $INC{'FindBin.pm'};
+  require FindBin;
+
+=head1 AUTHORS
+
+FindBin is supported as part of the core perl distribution. Please send bug
+reports to E<lt>F<perlbug@perl.org>E<gt> using the perlbug program
+included with perl.
+
+Graham Barr E<lt>F<gbarr@pobox.com>E<gt>
+Nick Ing-Simmons E<lt>F<nik@tiuk.ti.com>E<gt>
+
+=head1 COPYRIGHT
+
+Copyright (c) 1995 Graham Barr & Nick Ing-Simmons. All rights reserved.
+This program is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+=cut
+
+package FindBin;
+use Carp;
+require 5.000;
+require Exporter;
+use Cwd qw(getcwd cwd abs_path);
+use File::Basename;
+use File::Spec;
+
+@EXPORT_OK = qw($Bin $Script $RealBin $RealScript $Dir $RealDir);
+%EXPORT_TAGS = (ALL => [qw($Bin $Script $RealBin $RealScript $Dir $RealDir)]);
+@ISA = qw(Exporter);
+
+$VERSION = "1.51";
+
+
+# needed for VMS-specific filename translation
+if( $^O eq 'VMS' ) {
+    require VMS::Filespec;
+    VMS::Filespec->import;
+}
+
+sub cwd2 {
+   my $cwd = getcwd();
+   # getcwd might fail if it hasn't access to the current directory.
+   # try harder.
+   defined $cwd or $cwd = cwd();
+   $cwd;
+}
+
+sub init
+{
+ *Dir = \$Bin;
+ *RealDir = \$RealBin;
+
+ if($0 eq '-e' || $0 eq '-')
+  {
+   # perl invoked with -e or script is on C<STDIN>
+   $Script = $RealScript = $0;
+   $Bin    = $RealBin    = cwd2();
+   $Bin = VMS::Filespec::unixify($Bin) if $^O eq 'VMS';
+  }
+ else
+  {
+   my $script = $0;
+
+   if ($^O eq 'VMS')
+    {
+     ($Bin,$Script) = VMS::Filespec::rmsexpand($0) =~ /(.*[\]>\/]+)(.*)/s;
+     # C<use disk:[dev]/lib> isn't going to work, so unixify first
+     ($Bin = VMS::Filespec::unixify($Bin)) =~ s/\/\z//;
+     ($RealBin,$RealScript) = ($Bin,$Script);
+    }
+   else
+    {
+     croak("Cannot find current script '$0'") unless(-f $script);
+
+     # Ensure $script contains the complete path in case we C<chdir>
+
+     $script = File::Spec->catfile(cwd2(), $script)
+       unless File::Spec->file_name_is_absolute($script);
+
+     ($Script,$Bin) = fileparse($script);
+
+     # Resolve $script if it is a link
+     while(1)
+      {
+       my $linktext = readlink($script);
+
+       ($RealScript,$RealBin) = fileparse($script);
+       last unless defined $linktext;
+
+       $script = (File::Spec->file_name_is_absolute($linktext))
+                  ? $linktext
+                  : File::Spec->catfile($RealBin, $linktext);
+      }
+
+     # Get absolute paths to directories
+     if ($Bin) {
+      my $BinOld = $Bin;
+      $Bin = abs_path($Bin);
+      defined $Bin or $Bin = File::Spec->canonpath($BinOld);
+     }
+     $RealBin = abs_path($RealBin) if($RealBin);
+    }
+  }
+}
+
+BEGIN { init }
+
+*again = \&init;
+
+1; # Keep require happy
diff --git a/gnu/usr.bin/perl/dist/FindBin/t/FindBin.t b/gnu/usr.bin/perl/dist/FindBin/t/FindBin.t
new file mode 100644 (file)
index 0000000..043802b
--- /dev/null
@@ -0,0 +1,15 @@
+#!./perl
+
+print "1..2\n";
+
+use FindBin qw($Bin);
+
+print "# $Bin\n";
+print "not " unless $Bin =~ m,[/.]t\]?$,;
+print "ok 1\n";
+
+$0 = "-";
+FindBin::again();
+
+print "not " if $FindBin::Script ne "-";
+print "ok 2\n";
index 4101627..5ed2b46 100644 (file)
@@ -1,3 +1,26 @@
+IO 1.42 - Jan 20 2020 - Todd Rinaldo
+  * Point IO support to perl/perl5 not dual-life/IO
+
+IO 1.41 - Jan 20 2020 - Todd Rinaldo
+  * Switch pre-release testing to github actions.
+  * Update MANIFEST with new test.
+
+IO 1.41_50 -- Dec 16 2019 - Ricardo Signes
+  * [ TRIAL RELEASE ]
+  * Loading IO is now threadsafe, avoiding the core bug reported as GH #14816.
+    Implemented by converting getline() and getlines() to XS code.
+
+IO 1.41 -- Dec 12 2019 - Ricardo Signes
+  * [ TRIAL RELEASE ]
+  * import the latest from blead, so some changes may be in intermediate
+    versions found only in releases of perl5
+  * (perl #133936) make send() a bit saner
+  * (perl #133936) document differences between IO::Socket::* and builtin
+  * (perl #133936) ensure TO is honoured for UDP $sock->send()
+  * Remove vestiges of mpeix support (removed in 5.17.x)
+  * Documentation formatting fixes
+  * Improve isolation of tests as they run
+
 IO 1.38 -- Apr 19 2018 - Todd Rinaldo
   * Remove pre 5.8 logic from code base.
   * Bump all IO modules to 1.38 and set required Perl to 5.8.1
index 0fd0331..327bb27 100644 (file)
@@ -9,35 +9,44 @@ my $PERL_CORE = grep { $_ eq 'PERL_CORE=1' } @ARGV;
 
 my $define = "";
 
-unless ($PERL_CORE or exists $Config{'i_poll'}) {
-  my @inc = split(/\s+/, join(" ", $Config{'usrinc'}, $Config{'incpth'}, $Config{'locincpth'}));
-  foreach $path (@inc) {
-    if (-f $path . "/poll.h") {
-      $define .= "-DI_POLL ";
-      last;
+unless ( $PERL_CORE or exists $Config{'i_poll'} ) {
+    my @inc = split( /\s+/, join( " ", $Config{'usrinc'}, $Config{'incpth'}, $Config{'locincpth'} ) );
+    foreach $path (@inc) {
+        if ( -f $path . "/poll.h" ) {
+            $define .= "-DI_POLL ";
+            last;
+        }
     }
-  }
 }
 
 #--- Write the Makefile
 
 WriteMakefile(
-  VERSION_FROM => "IO.pm",
-  NAME         => "IO",
-  OBJECT       => '$(O_FILES)',
-  ABSTRACT     => 'Perl core IO modules',
-  AUTHOR       => 'Graham Barr <gbarr@cpan.org>',
-  PREREQ_PM    => {
-    'Test::More' => 0,
-    'File::Temp' => '0.15',
-  },
-  ( $PERL_CORE
-    ? ()
-    : (
-      INSTALLDIRS => ($] < 5.011 ? 'perl' : 'site'),
-      clean       => {FILES => 'typemap'},
-    )
-  ),
-  ($define                                    ? (DEFINE    => $define) : ()),
-  ((ExtUtils::MakeMaker->VERSION() gt '6.30') ? ('LICENSE' => 'perl')  : ()),
+    VERSION_FROM => "IO.pm",
+    NAME         => "IO",
+    OBJECT       => '$(O_FILES)',
+    ABSTRACT     => 'Perl core IO modules',
+    AUTHOR       => 'Perl5 Porters <perl5-porters@perl.org>',
+    PREREQ_PM    => {
+        'Test::More' => 0,
+        'File::Temp' => '0.15',
+    },
+    (
+        $PERL_CORE
+        ? ()
+        : (
+            INSTALLDIRS => ( $] < 5.011 ? 'perl' : 'site' ),
+            clean       => { FILES => 'typemap' },
+        )
+    ),
+    ( $define                                      ? ( DEFINE    => $define ) : () ),
+    ( ( ExtUtils::MakeMaker->VERSION() gt '6.30' ) ? ( 'LICENSE' => 'perl' )  : () ),
+    META_MERGE => {
+        resources => {
+            license     => 'http://dev.perl.org/licenses/',
+            bugtracker  => 'https://github.com/perl/perl5/issues',
+            repository  => 'https://github.com/Perl/perl5/tree/blead/dist/IO',
+            MailingList => 'http://lists.perl.org/list/perl5-porters.html',
+        },
+    },
 );
index 3783750..5457a63 100644 (file)
@@ -24,4 +24,3 @@ To build, test and install this distribution type:
 
 Share and Enjoy!
 Graham Barr <gbarr@pobox.com>
-
index b9104bb..f59c133 100644 (file)
@@ -9,7 +9,7 @@ use Socket;
 use Test::More;
 use Config;
 
-plan tests => 8;
+plan tests => 9;
 
 my $listener = IO::Socket::INET->new(Listen => 1,
                                      LocalAddr => '127.0.0.1',
@@ -26,7 +26,7 @@ my $s = $listener->socktype();
 ok(defined($s), 'type defined');
 
 SKIP: {
-    skip "fork not available", 4
+    skip "fork not available", 5
        unless $Config{d_fork} || $Config{d_pseudofork};
 
     my $cpid = fork();
@@ -36,6 +36,14 @@ SKIP: {
        my $connector = IO::Socket::INET->new(PeerAddr => '127.0.0.1',
                                              PeerPort => $port,
                                              Proto => 'tcp');
+        if ($connector) {
+            my $buf;
+            # wait for parent to close its end
+            $connector->read($buf, 1);
+        }
+        else {
+            diag "child failed to connect to parent: $@";
+        }
        exit(0);
     } else {;
            ok(defined($cpid), 'spawned a child');
@@ -43,6 +51,9 @@ SKIP: {
 
     my $new = $listener->accept();
 
+    ok($new, "got a socket from accept")
+      or diag "accept failed: $@";
+
     is($new->sockdomain(), $d, 'domain match');
   SKIP: {
       skip "no Socket::SO_PROTOCOL", 1 if !defined(eval { Socket::SO_PROTOCOL });
@@ -52,6 +63,7 @@ SKIP: {
       skip "no Socket::SO_TYPE", 1 if !defined(eval { Socket::SO_TYPE });
       is($new->socktype(), $s, 'type match');
     }
+    $new->close;
 
     wait();
 }
diff --git a/gnu/usr.bin/perl/dist/IO/t/gh17447.t b/gnu/usr.bin/perl/dist/IO/t/gh17447.t
new file mode 100644 (file)
index 0000000..bcdec4b
--- /dev/null
@@ -0,0 +1,29 @@
+#!/usr/bin/perl
+
+# Regression test for https://github.com/Perl/perl5/issues/17447
+
+use strict;
+use warnings;
+
+use Test::More tests => 2;
+
+use IO::Select;
+use IO::Handle;
+
+pipe( my $rd, my $wr ) or die "Cannot pipe() - $!";
+binmode $rd;
+binmode $wr;
+$wr->syswrite("data\n");
+
+my $select = IO::Select->new();
+$select->add($rd);
+
+is( scalar $select->handles, 1, '$select has 1 handle' );
+
+# close first, then remove afterwards
+$rd->close;
+$select->remove($rd);
+
+is( scalar $select->handles, 0, '$select has 0 handles' );
+
+exit;
diff --git a/gnu/usr.bin/perl/dist/IO/t/io_getline.t b/gnu/usr.bin/perl/dist/IO/t/io_getline.t
new file mode 100644 (file)
index 0000000..22361e6
--- /dev/null
@@ -0,0 +1,117 @@
+#!./perl -w
+use strict;
+
+use Test::More tests => 37;
+
+my $File = 'README';
+
+use IO::File;
+
+my $io = IO::File->new($File);
+isa_ok($io, 'IO::File', "Opening $File");
+
+my $line = $io->getline();
+like($line, qr/^This is the/, "Read first line");
+
+my ($list, $context) = $io->getline();
+is($list, "\n", "Read second line");
+is($context, undef, "Did not read third line with getline() in list context");
+
+$line = $io->getline();
+like($line, qr/^This distribution/, "Read third line");
+
+my @lines = $io->getlines();
+cmp_ok(@lines, '>', 3, "getlines reads lots of lines");
+like($lines[-2], qr/^Share and Enjoy!/, "Share and Enjoy!");
+
+$line = $io->getline();
+is($line, undef, "geline reads no more at EOF");
+
+@lines = $io->getlines();
+is(@lines, 0, "gelines reads no more at EOF");
+
+# And again
+$io = IO::File->new($File);
+isa_ok($io, 'IO::File', "Opening $File");
+
+$line = $io->getline();
+like($line, qr/^This is the/, "Read first line again");
+
+is(eval {
+    $line = $io->getline("Boom");
+    1;
+   }, undef, "eval caught an exception");
+like($@, qr/^usage.*getline\(\) at .*\bio_getline\.t line /, 'getline usage');
+like($line, qr/^This is the/, '$line unchanged');
+
+is(eval {
+    ($list, $context) = $io->getlines("Boom");
+    1;
+   }, undef, "eval caught an exception");
+like($@, qr/^usage.*getlines\(\) at .*\bio_getline\.t line /, 'getlines usage');
+is($list, "\n", '$list unchanged');
+
+is(eval {
+    $line = $io->getlines();
+    1;
+   }, undef, "eval caught an exception");
+like($@, qr/^Can't call .*getlines in a scalar context.* at .*\bio_getline\.t line /,
+     'getlines in scalar context croaks');
+like($line, qr/^This is the/, '$line unchanged');
+
+is(eval {
+    $io->getlines();
+    1;
+   }, undef, "eval caught an exception");
+like($@, qr/^Can't call .*getlines in a scalar context.* at .*\bio_getline\.t line /,
+     'getlines in void context croaks');
+like($line, qr/^This is the/, '$line unchanged');
+
+($list, $context) = $io->getlines();
+is($list, "\n", "Read second line");
+like($context, qr/^This distribution/, "Read third line");
+
+{
+    package TiedHandle;
+
+    sub TIEHANDLE {
+        return bless ["Tick", "tick", "tick"];
+    }
+
+    sub READLINE {
+        my $fh = shift;
+        die "Boom!"
+            unless @$fh;
+        return shift @$fh
+            unless wantarray;
+        return splice @$fh;
+    }
+}
+
+tie *FH, 'TiedHandle';
+
+is(*FH->getline(), "Tick", "tied handle read works");
+($list, $context) = *FH->getline();
+is($list, "tick", "tied handle read works in list context 0");
+is($context, undef, "tied handle read works in list context 1");
+is(*FH->getline(), "tick", "tied handle read works again");
+is(eval {
+    $line = *FH->getline();
+    1;
+   }, undef, "eval on tied handle caught an exception");
+like($@, qr/^Boom!/,
+     'getline on tied handle propagates exception');
+like($line, qr/^This is the/, '$line unchanged');
+
+tie *FH, 'TiedHandle';
+
+($list, $context) = *FH->getlines();
+is($list, "Tick", "tied handle read works in list context 2");
+is($context, "tick", "tied handle read works in list context 3");
+is(eval {
+    ($list, $context) = *FH->getlines();
+    1;
+   }, undef, "eval on tied handle caught an exception again");
+like($@, qr/^Boom!/,
+     'getlines on tied handle propagates exception');
+is($list, "Tick", '$line unchanged');
index d7e95a8..2adc6a4 100755 (executable)
@@ -15,6 +15,8 @@ BEGIN {
     skip_all($reason) if $reason;
 }
 
+use strict;
+
 sub compare_addr {
     no utf8;
     my $a = shift;
@@ -36,18 +38,18 @@ sub compare_addr {
     "$a[0]$a[1]" eq "$b[0]$b[1]";
 }
 
-plan(7);
+plan(15);
 watchdog(15);
 
 use Socket;
 use IO::Socket qw(AF_INET SOCK_DGRAM INADDR_ANY);
 
-$udpa = IO::Socket::INET->new(Proto => 'udp', LocalAddr => 'localhost')
+my $udpa = IO::Socket::INET->new(Proto => 'udp', LocalAddr => 'localhost')
      || IO::Socket::INET->new(Proto => 'udp', LocalAddr => '127.0.0.1')
     or die "$! (maybe your system does not have a localhost at all, 'localhost' or 127.0.0.1)";
 ok(1);
 
-$udpb = IO::Socket::INET->new(Proto => 'udp', LocalAddr => 'localhost')
+my $udpb = IO::Socket::INET->new(Proto => 'udp', LocalAddr => 'localhost')
      || IO::Socket::INET->new(Proto => 'udp', LocalAddr => '127.0.0.1')
     or die "$! (maybe your system does not have a localhost at all, 'localhost' or 127.0.0.1)";
 ok(1);
@@ -56,6 +58,7 @@ $udpa->send('BORK', 0, $udpb->sockname);
 
 ok(compare_addr($udpa->peername,$udpb->sockname, 'peername', 'sockname'));
 
+my $buf;
 my $where = $udpb->recv($buf="", 4);
 is($buf, 'BORK');
 
@@ -69,7 +72,32 @@ $udpb->send('FOObar', @xtra);
 $udpa->recv($buf="", 6);
 is($buf, 'FOObar');
 
-ok(! $udpa->connected);
+{
+    # check the TO parameter passed to $sock->send() is honoured for UDP sockets
+    # [perl #133936]
+    my $udpc = IO::Socket::INET->new(Proto => 'udp', LocalAddr => 'localhost')
+      || IO::Socket::INET->new(Proto => 'udp', LocalAddr => '127.0.0.1')
+      or die "$! (maybe your system does not have a localhost at all, 'localhost' or 127.0.0.1)";
+    pass("created C socket");
+
+    ok($udpc->connect($udpa->sockname), "connect C to A");
+
+    ok($udpc->connected, "connected a UDP socket");
+
+    ok($udpc->send("fromctoa"), "send to a");
+
+    ok($udpa->recv($buf = "", 8), "recv it");
+    is($buf, "fromctoa", "check value received");
+
+  SKIP:
+    {
+        $^O eq "linux"
+         or skip "This is non-portable, known to 'work' on Linux", 3;
+        ok($udpc->send("fromctob", 0, $udpb->sockname), "send to non-connected socket");
+        ok($udpb->recv($buf = "", 8), "recv it");
+        is($buf, "fromctob", "check value received");
+    }
+}
 
 exit(0);
 
index a6cd05c..93cddfb 100755 (executable)
@@ -1,9 +1,16 @@
 #!./perl
 
 use Config;
+use IO::Socket;
 
 BEGIN {
     my $reason;
+    my $can_fork = $Config{d_fork} ||
+                   (($^O eq 'MSWin32' || $^O eq 'NetWare') and
+                    $Config{useithreads} and
+                    $Config{ccflags} =~ /-DPERL_IMPLICIT_SYS/
+                   );
+
     if ($ENV{PERL_CORE} and $Config{'extensions'} !~ /\bSocket\b/) {
        $reason = 'Socket extension unavailable';
     }
@@ -11,18 +18,25 @@ BEGIN {
        $reason = 'IO extension unavailable';
     }
     elsif ($^O eq 'os2') {
-       require IO::Socket;
-
        eval {IO::Socket::pack_sockaddr_un('/foo/bar') || 1}
          or $@ !~ /not implemented/ or
            $reason = 'compiled without TCP/IP stack v4';
     }
-    elsif ($^O =~ m/^(?:qnx|nto|vos|MSWin32)$/ ) {
+    elsif ($^O =~ m/^(?:qnx|nto|vos)$/ ) {
        $reason = "UNIX domain sockets not implemented on $^O";
     }
-    elsif (! $Config{'d_fork'}) {
+    elsif (! $can_fork) {
        $reason = 'no fork';
     }
+    elsif ($^O eq 'MSWin32') {
+      if ($ENV{CONTINUOUS_INTEGRATION}) {
+         $reason = 'Skipping on Windows CI, see gh17575 and gh17429';
+      } else {
+       $reason = "AF_UNIX unavailable or disabled on this platform"
+         unless eval { socket(my $sock, PF_UNIX, SOCK_STREAM, 0) };
+      }
+    }
+
     if ($reason) {
        print "1..0 # Skip: $reason\n";
        exit 0;
@@ -50,8 +64,6 @@ unlink($PATH) or $^O eq 'os2' or die "Can't unlink $PATH: $!";
 $| = 1;
 print "1..5\n";
 
-use IO::Socket;
-
 $listen = IO::Socket::UNIX->new(Local => $PATH, Listen => 0);
 
 # Sometimes UNIX filesystems are mounted for security reasons
index 24c8f24..26be348 100644 (file)
@@ -1387,16 +1387,16 @@ L<I18N::LangTags|I18N::LangTags>.
 L<Win32::Locale|Win32::Locale>.
 
 RFC 3066, I<Tags for the Identification of Languages>,
-as at http://sunsite.dk/RFC/rfc/rfc3066.html
+as at L<http://sunsite.dk/RFC/rfc/rfc3066.html>
 
 RFC 2277, I<IETF Policy on Character Sets and Languages>
-is at http://sunsite.dk/RFC/rfc/rfc2277.html -- much of it is
+is at L<http://sunsite.dk/RFC/rfc/rfc2277.html> -- much of it is
 just things of interest to protocol designers, but it explains
 some basic concepts, like the distinction between locales and
 language-tags.
 
 The manual for GNU C<gettext>.  The gettext dist is available in
-C<ftp://prep.ai.mit.edu/pub/gnu/> -- get
+C<L<ftp://prep.ai.mit.edu/pub/gnu/>> -- get
 a recent gettext tarball and look in its "doc/" directory, there's
 an easily browsable HTML version in there.  The
 gettext documentation asks lots of questions worth thinking
index 3457f7c..51fad95 100644 (file)
@@ -68,7 +68,7 @@ should be more time expensive as an option.
 
 =head1 DECIMAL PLACES IN NUMBER FORMATTING
 
-I<After CPAN RT #36136 (https://rt.cpan.org/Ticket/Display.html?id=36136)>
+I<After CPAN RT #36136 (L<https://rt.cpan.org/Ticket/Display.html?id=36136>)>
 
 The documentation of L<Locale::Maketext> advises that 
 the standard bracket method C<numf> is limited and that
index 7025b7f..761af6c 100644 (file)
@@ -750,16 +750,16 @@ morphology and pedagogy of North American native languages.
 
 Alvestrand, Harald Tveit.  1995.  I<RFC 1766: Tags for the
 Identification of Languages.>
-C<http://www.ietf.org/rfc/rfc1766.txt>
+C<L<http://www.ietf.org/rfc/rfc1766.txt>>
 [Now see RFC 3066.]
 
 Callon, Ross, editor.  1996.  I<RFC 1925: The Twelve
 Networking Truths.>
-C<http://www.ietf.org/rfc/rfc1925.txt>
+C<L<http://www.ietf.org/rfc/rfc1925.txt>>
 
 Drepper, Ulrich, Peter Miller,
 and FranE<ccedil>ois Pinard.  1995-2001.  GNU
-C<gettext>.  Available in C<ftp://prep.ai.mit.edu/pub/gnu/>, with
+C<gettext>.  Available in C<L<ftp://prep.ai.mit.edu/pub/gnu/>>, with
 extensive docs in the distribution tarball.  [Since
 I wrote this article in 1998, I now see that the
 gettext docs are now trying more to come to terms with
index 228663f..7da4ef2 100644 (file)
@@ -1,5 +1,10 @@
 CHANGES
 -------
+2.72  Thu 28 Mar 2019 09:01:39 AM CET (rurban)
+      Features
+      - add .cirrus.yml smoker https://cirrus-ci.com/github/rurban/Net-Ping
+      Test fixes
+      - Skip failing freebsd localhost resolver tests
 
 2.71  Tue Oct 16 18:41:51 CEST 2018 (rurban)
        Features
index 6b097d7..46965b7 100644 (file)
@@ -1,11 +1,16 @@
 use warnings;
 use strict;
+use Config;
 
 BEGIN {
   unless (my $port = getservbyname('echo', 'tcp')) {
     print "1..0 \# Skip: no echo port\n";
     exit;
   }
+  unless ($Config{d_getpbyname}) {
+    print "1..0 \# Skip: no getprotobyname\n";
+    exit;
+  }
 }
 
 use Test::More qw(no_plan);
index 90a934a..c20cb8f 100644 (file)
@@ -1,11 +1,16 @@
 use warnings;
 use strict;
+use Config;
 
 BEGIN {
   unless (my $port = getservbyname('echo', 'tcp')) {
     print "1..0 \# Skip: no echo port\n";
     exit;
   }
+  unless ($Config{d_getpbyname}) {
+    print "1..0 \# Skip: no getprotobyname\n";
+    exit;
+  }
 }
 
 use Test::More tests => 2;
@@ -13,7 +18,8 @@ BEGIN {use_ok('Net::Ping')};
 
 TODO: {
     local $TODO = "Not working on os390 smoker; may be a permissions problem"
-        if $^O eq 'os390';
+      if $^O eq 'os390';
+    $TODO = "Not working on freebsd" if $^O eq 'freebsd';
     my $result = pingecho("127.0.0.1");
-    is($result, 1, "pingecho works");
+    is($result, 1, "pingecho 127.0.0.1 works");
 }
index 6c5be69..3147594 100755 (executable)
@@ -21,6 +21,10 @@ BEGIN {
     print "1..0 \# Skip: no echo port\n";
     exit;
   }
+  unless (Socket::getaddrinfo('localhost', &Socket::AF_INET())) {
+    print "1..0 \# Skip: no localhost resolver on $^O\n";
+    exit;
+  }
 }
 
 use Test::More tests => 8;
@@ -41,12 +45,17 @@ is($Net::Ping::hires, 0, 'Make sure disable works');
 $p -> hires(1);
 isnt($Net::Ping::hires, 0, 'Enable hires again');
 
-# Test on the default port
-my ($ret, $duration) = $p -> ping("localhost");
+SKIP: {
+  skip "unreliable ping localhost on $^O", 2
+    if $^O =~ /^(?:hpux|os390|irix|freebsd)$/;
 
-isnt($ret, 0, 'localhost should always be reachable');
+  # Test on the default port
+  my ($ret, $duration) = $p -> ping("localhost");
 
-# It is extremely likely that the duration contains a decimal
-# point if Time::HiRes is functioning properly, except when it
-# is fast enough to be "0", or slow enough to be exactly "1".
-like($duration, qr/\.|^[01]$/, 'returned duration is valid');
+  isnt($ret, 0, 'localhost should always be reachable');
+
+  # It is extremely likely that the duration contains a decimal
+  # point if Time::HiRes is functioning properly, except when it
+  # is fast enough to be "0", or slow enough to be exactly "1".
+  like($duration, qr/\.|^[01]$/, 'returned duration is valid');
+}
index 8750dd3..a8285b3 100755 (executable)
@@ -6,13 +6,22 @@ BEGIN {
         exit;
     }
   }
+  if ($^O eq 'freebsd') {
+    print "1..0 \# Skip: unreliable localhost resolver on $^O\n";
+    exit;
+  }
   unless (eval "require Socket") {
     print "1..0 \# Skip: no Socket\n";
     exit;
   }
   if (my $port = getservbyname('echo', 'tcp')) {
-    socket(*ECHO, &Socket::PF_INET(), &Socket::SOCK_STREAM(), (getprotobyname 'tcp')[2]);
-    unless (connect(*ECHO, scalar &Socket::sockaddr_in($port, &Socket::inet_aton("localhost")))) {
+    socket(*ECHO, &Socket::PF_INET(), &Socket::SOCK_STREAM(),
+                  (getprotobyname 'tcp')[2]);
+    unless (connect(*ECHO,
+                    scalar
+                      &Socket::sockaddr_in($port,
+                                           &Socket::inet_aton("localhost"))))
+    {
       print "1..0 \# Skip: loopback tcp echo service is off ($!)\n";
       exit;
     }
@@ -21,6 +30,10 @@ BEGIN {
     print "1..0 \# Skip: no echo port\n";
     exit;
   }
+  unless (Socket::getaddrinfo('localhost', &Socket::AF_INET)) {
+    print "1..0 \# Skip: no localhost resolver on $^O\n";
+    exit;
+  }
 }
 
 # Test of stream protocol using loopback interface.
index f974b40..9454736 100755 (executable)
@@ -20,7 +20,7 @@ SKIP: {
     skip "No udp echo port", 2 unless getservbyname('echo', 'udp');
     skip "udp ping blocked by Window's default settings", 2 if isWindowsVista();
     skip "No getprotobyname", 2 unless $Config{d_getpbyname};
-    skip "Not allowed on $^O", 2 if $^O =~ /^(hpux|irix|aix)$/;
+    skip "Not allowed on $^O", 2 if $^O =~ /^(hpux|irix|aix|freebsd)$/;
     my $p = new Net::Ping "udp";
     # message_type can't be used
     eval {
index d30b94e..5e382d9 100644 (file)
@@ -1,4 +1,3 @@
-__Storable__.pm
 ChangeLog
 hints/gnukfreebsd.pl
 hints/gnuknetbsd.pl
@@ -11,7 +10,7 @@ META.yml                      Module meta-data (added by MakeMaker)
 ppport.h
 README
 stacksize
-Storable.pm.PL
+Storable.pm
 Storable.xs
 t/attach.t
 t/attach_errors.t
index d28e238..09b173e 100644 (file)
@@ -63,7 +63,7 @@ if ($Config{ptrsize} > 4 and !$has_too_many) {
           [ 'huge array',
             sub { my @x; $x[$huge] = undef; \@x } ];
     } else {
-        diag "skip huge array, need PERL_TEST_MEMORY >= 8";
+        diag "skip huge array, need PERL_TEST_MEMORY >= 55";
     }
 }
 
@@ -78,7 +78,7 @@ if (!$has_too_many) {
           ['huge hash',
            sub { my %x = (0 .. $huge); \%x } ];
     } else {
-        diag "skip huge hash, need PERL_TEST_MEMORY >= 16";
+        diag "skip huge hash, need PERL_TEST_MEMORY >= 96";
     }
 }
 
index acf28cf..6c6b1d5 100644 (file)
@@ -37,7 +37,7 @@ while (<DATA>) {
     }
 }
 
-plan tests => 9 + 3*scalar(@tests);
+plan tests => 10 + 3*scalar(@tests);
 
 SKIP:
 {
@@ -75,6 +75,8 @@ SKIP:
     ok(!eval { dclone($re) }, "should fail to clone, even with use re 'eval'");
 }
 
+is(ref(dclone(bless qr//, "Foo")), "Foo", "check reblessed regexps");
+
 for my $test (@tests) {
     my ($code, $not, $match, $matchc, $name) = @$test;
     my $qr = eval $code;
@@ -121,7 +123,7 @@ __DATA__
 A-; qr(\x2E) ; ".", !"a" ; \x2E - hex meta
 -; qr/\./ ; "." , !"a" ; \. - backslash meta
 8- ; qr/\x{100}/ ; "\x{100}" ; simple unicode
-12- ; qr/fss/i ; "f\xDF\x{101}" ; case insensive unicode promoted
-22-; qr/fss/ui ; "f\xDF" ; case insensitive unicode SS /iu
-22-; qr/fss/aai ; !"f\xDF" ; case insensitive unicode SS /iaa
-22-; qr/f\w/a ; "fo", !"f\xff" ; simple /a flag
+A12- ; qr/fss/i ; "f\xDF\x{101}" ; case insensive unicode promoted
+A22-; qr/fss/ui ; "f\xDF" ; case insensitive unicode SS /iu
+A22-; qr/fss/aai ; !"f\xDF" ; case insensitive unicode SS /iaa
+A22-; qr/f\w/a ; "fo", !"f\xff" ; simple /a flag
index 220c701..48752fb 100755 (executable)
@@ -29,7 +29,7 @@ sub BEGIN {
 }
 
 use Test::More 'no_plan';
-use Storable qw (store retrieve freeze thaw nstore nfreeze);
+use Storable qw (store retrieve freeze thaw nstore nfreeze dclone);
 require 'testlib.pl';
 our $file;
 use strict;
@@ -143,3 +143,11 @@ foreach (@tests) {
   $stored = nfreeze $input;
   tester($stored, \&freeze_and_thaw, $testsub, 'network string');
 }
+
+{
+    # [perl #134179] sv_upgrade from type 7 down to type 1
+    my $foo = [qr//,[]];
+    weaken($foo->[1][0][0] = $foo->[1]);
+    my $out = dclone($foo); # croaked here
+    is_deeply($out, $foo, "check they match");
+}
diff --git a/gnu/usr.bin/perl/dist/Tie-File/ChangeLog b/gnu/usr.bin/perl/dist/Tie-File/ChangeLog
new file mode 100644 (file)
index 0000000..ea07935
--- /dev/null
@@ -0,0 +1,128 @@
+What's new in version 1.06
+ - Correct misleading entries in SYNOPSIS
+
+What's new in version 1.05
+ - Remove unnecessary version change test
+
+What's new in version 1.04
+ - Bump to add Changelog to source control.
+
+What's new in version 1.03
+ - Rebreak lines to achieve <80 recommended line length.
+ - Fix various pod errors.
+ - RT #116250: Fail the right number of tests on timeout.
+ - Switch most open() calls to three-argument form.
+ - Add L<> around link in pod.
+ - Use L</Foo>, not L<"Foo"> in pod.
+ - Use unique tmp filenames in test files.
+
+What's new in version 1.01:
+ - Change documentation for line numbering.
+ - Switch to github for issue tracking.
+
+What's new in version 1.00:
+ - typo fixes for Tie::File
+
+What's new in version 0.99:
+ - Minor POD link fix.
+
+What's new in version 0.98:
+ - No changes. Production release after CPAN testers cleared.
+
+What's new in version 0.97_01:
+All changes in this release are from perl 5 porters:
+ - Update address for FSF in POD
+ - z/OS: CPAN-ized ext/ and lib/
+ - Missing ; in Tie::File
+ - Typos in comments
+ - BeOS specific Updates
+ - turn the alarm off in the tests (was Re: maint @ 20617 (on VMS))
+ - fix for VMS - last if $last_read_was_short
+
+What's new in version 0.96:
+
+  Minor bug fixes only.
+
+What's new in version 0.95:
+
+  Flushing out the deferred-write buffer is now done in a single pass,
+  regardless of whether the records in the buffer are contiguous.
+
+  Various time and memory performance enhancements courtesy of Tels.
+  (<tels@bloodgate.com>)
+
+  ->flock method now discards read cache and offsets table when
+  successful.
+
+  Miscellaneous minor bugs fixes and test suite enhancements.
+
+  New ->offset method for recovering offset table data.  (Tels again.)
+
+What's new in version 0.93:
+
+  No significant changes.  (Release was mainly to correct an error in
+  one of the test files.)
+
+What's new in version 0.92:
+
+  Bug fixes:  Negative 'nrecs' argument to 'splice' is now handled
+  correctly.  Tie::File now behaves correctly even if you change $\.
+
+  More tests and (very) minor performance enhancements.
+
+What's new in version 0.91:
+
+  Tie::File now correctly handles attempts to store undefined values
+  in the array: they are silently converted to defined empty strings.
+
+  If the last record of the file is not properly terminated with the
+  record terminator string, and if the file was opened for writing,
+  Tie::File will silently repair it.  Formerly, it would mangle the file.
+
+  More unit tests.
+
+  Performance enhancements.
+
+What's new in version 0.90:
+
+  AUTODEFERMENT: Tie::File will now turn deferred writing on and off
+  automatically when it thinks it would be good to do so.  You may
+  disable this feature by calling ->autodefer(0) or by supplying the
+  'autodefer => 0' option with 'tie'.
+
+  The read cache now uses a heap instead of an array.  This yields
+  much better performance for large caches.
+
+  Other performance improvements.
+
+What's new in version 0.51:
+
+  Minor fixes in the test suite.
+
+What's new in version 0.50:
+
+  DEFERRED WRITING:  You may now use the ->defer method to request
+  that changes to the array *not* be written to the file immediately.
+  Changes will be written when the memory limit for deferred writes is
+  exceeded, or when you invoke the ->flush method.  You may discard
+  pending writes with the ->discard method.  You may set the limit of
+  discarded data with the 'dw_size' option.
+
+  The DELETE method now returns the correct values.
+
+What's new in version 0.20:
+
+  MAJOR INCOMPATIBLE CHANGE: Records read from the tied array now have
+  the record separator REMOVED by default.  This is to provide
+  do-what-I-meant behavior for expressions like
+
+        $tied[3] .= "more text";
+
+  Formerly, this would have appended "more text" *after* the newline character.
+
+  You may obtain the old behavior by supplying the 'autochomp => 0'
+  option in the 'tie' call, or by invoking the new 'autochomp'
+  accessor method.
+
+  Tests for this new feature.
+
index e9504d3..cee21c0 100644 (file)
@@ -1,7 +1,10 @@
 #!/usr/bin/perl
 
+use strict;
+use warnings;
+
 $| = 1;
-my $file = "tf$$.txt";
+my $file = "tf01-$$.txt";
 1 while unlink $file;
 
 print "1..75\n";
@@ -10,6 +13,7 @@ my $N = 1;
 use Tie::File;
 print "ok $N\n"; $N++;
 
+my @a;
 my $o = tie @a, 'Tie::File', $file, autochomp => 0, autodefer => 0;
 print $o ? "ok $N\n" : "not ok $N\n";
 $N++;
index 146a91a..2f68848 100644 (file)
@@ -1,6 +1,9 @@
 #!/usr/bin/perl
 
-my $file = "tf$$.txt";
+use strict;
+use warnings;
+
+my $file = "tf02-$$.txt";
 $: = Tie::File::_default_recsep();
 my $data = "rec1$:rec2$:rec3$:";
 
@@ -15,7 +18,7 @@ binmode F;
 print F $data;
 close F;
 
-
+my @a;
 my $o = tie @a, 'Tie::File', $file, autochomp => 0;
 print $o ? "ok $N\n" : "not ok $N\n";
 $N++;
index 63dad4f..abd497d 100644 (file)
@@ -8,7 +8,10 @@
 # (tests _fill_offsets_to() )
 #
 
-my $file = "tf$$.txt";
+use strict;
+use warnings;
+
+my $file = "tf03-$$.txt";
 $: = Tie::File::_default_recsep();
 my $data = "rec0$:rec1$:rec2$:";
 
@@ -23,7 +26,7 @@ binmode F;
 print F $data;
 close F;
 
-
+my @a;
 my $o = tie @a, 'Tie::File', $file, autochomp => 0;
 print $o ? "ok $N\n" : "not ok $N\n";
 $N++;
index 8d23c58..a2073df 100644 (file)
 # contents.
 
 
+use strict;
+use warnings;
+
 $| = 1;
-my $file = "tf$$.txt";
+my $file = "tf04-$$.txt";
 $: = Tie::File::_default_recsep();
 my $data = "rec0$:rec1$:rec2$:";
 print "1..118\n";
@@ -24,6 +27,7 @@ my $N = 1;
 use Tie::File;
 print "ok $N\n"; $N++;  # partial credit just for showing up
 
+my @a;
 my $o = tie @a, 'Tie::File', $file;
 print $o ? "ok $N\n" : "not ok $N\n";
 $N++;
index 72774c8..a8df07b 100644 (file)
@@ -4,9 +4,12 @@
 # PUSH POP SHIFT UNSHIFT
 #
 
+use strict;
+use warnings;
+
 use POSIX 'SEEK_SET';
 
-my $file = "tf$$.txt";
+my $file = "tf05-$$.txt";
 my ($o, $n);
 
 print "1..16\n";
@@ -19,6 +22,8 @@ print "ok $N\n"; $N++;
 open F, '>', $file or die $!;
 binmode F;
 close F;
+
+my @a;
 $o = tie @a, 'Tie::File', $file;
 print $o ? "ok $N\n" : "not ok $N\n";
 $N++;
index bf24be1..dc3015c 100644 (file)
@@ -1,7 +1,10 @@
 #!/usr/bin/perl
 
+use strict;
+use warnings;
+
 use POSIX 'SEEK_SET';
-my $file = "tf$$.txt";
+my $file = "tf06-$$.txt";
 $: = Tie::File::_default_recsep();
 
 print "1..5\n";
@@ -10,6 +13,7 @@ my $N = 1;
 use Tie::File;
 print "ok $N\n"; $N++;
 
+my @a;
 my $o = tie @a, 'Tie::File', $file, autodefer => 0;
 print $o ? "ok $N\n" : "not ok $N\n";
 $N++;
index 141383a..dcd4f4d 100644 (file)
@@ -4,8 +4,10 @@
 # (04_splice.t checks its effect on the file)
 #
 
+use strict;
+use warnings;
 
-my $file = "tf$$.txt";
+my $file = "tf07-$$.txt";
 $: = Tie::File::_default_recsep();
 my $data = "rec0$:rec1$:rec2$:";
 
@@ -17,6 +19,7 @@ print "ok $N\n"; $N++;  # partial credit just for showing up
 
 init_file($data);
 
+my @a;
 my $o = tie @a, 'Tie::File', $file, autochomp => 0;
 print $o ? "ok $N\n" : "not ok $N\n";
 $N++;
@@ -24,7 +27,7 @@ $N++;
 my $n;
 
 # (3-12) splicing at the beginning
-@r = splice(@a, 0, 0, "rec4");
+my @r = splice(@a, 0, 0, "rec4");
 check_result();
 @r = splice(@a, 0, 1, "rec5");       # same length
 check_result("rec4");
index a38e7fa..c212a8b 100644 (file)
@@ -3,7 +3,10 @@
 # Make sure it works to open the file in read-only mode
 #
 
-my $file = "tf$$.txt";
+use strict;
+use warnings;
+
+my $file = "tf08-$$.txt";
 $: = Tie::File::_default_recsep();
 
 print "1..13\n";
@@ -16,6 +19,7 @@ print "ok $N\n"; $N++;
 my @items = qw(Gold Frankincense Myrrh Ivory Apes Peacocks);
 init_file(join $:, @items, '');
 
+my @a;
 my $o = tie @a, 'Tie::File', $file, mode => O_RDONLY, autochomp => 0;
 print $o ? "ok $N\n" : "not ok $N\n";
 $N++;
index 88d8250..4d2918e 100644 (file)
@@ -1,6 +1,9 @@
 #!/usr/bin/perl
 
-my $file = "tf$$.txt";
+use strict;
+use warnings;
+
+my $file = "tf09-$$.txt";
 
 print "1..59\n";
 
@@ -10,7 +13,9 @@ my $N = 1;
 use Tie::File;
 print "ok $N\n"; $N++;
 
-$RECSEP = 'blah';
+my $RECSEP = 'blah';
+
+my @a;
 my $o = tie @a, 'Tie::File', $file, 
     recsep => $RECSEP, autochomp => 0, autodefer => 0;
 print $o ? "ok $N\n" : "not ok $N\n";
@@ -197,6 +202,7 @@ sub check_contents {
 
   # now check FETCH:
   my $good = 1;
+  my $msg = '';
   for (0.. $#c) {
     unless ($a[$_] eq "$c[$_]$RECSEP") {
       $msg = "expected $c[$_]$RECSEP, got $a[$_]";
index da981db..e2ad561 100644 (file)
 # Then, it checks the actual contents of the file against the expected
 # contents.
 
+use strict;
+use warnings;
+
 use POSIX 'SEEK_SET';
 
-my $file = "tf$$.txt";
+my $file = "tf10-$$.txt";
 my $data = "rec0blahrec1blahrec2blah";
 
 print "1..101\n";
@@ -23,6 +26,7 @@ print "ok $N\n"; $N++;  # partial credit just for showing up
 
 init_file($data);
 
+my @a;
 my $o = tie @a, 'Tie::File', $file, recsep => 'blah';
 print $o ? "ok $N\n" : "not ok $N\n";
 $N++;
index 2fc9f2c..4cebe1f 100644 (file)
@@ -4,7 +4,10 @@
 # (04_splice.t checks its effect on the file)
 #
 
-my $file = "tf$$.txt";
+use strict;
+use warnings;
+
+my $file = "tf11-$$.txt";
 my $data = "rec0blahrec1blahrec2blah";
 
 print "1..50\n";
@@ -15,6 +18,7 @@ print "ok $N\n"; $N++;  # partial credit just for showing up
 
 init_file($data);
 
+my @a;
 my $o = tie @a, 'Tie::File', $file, autochomp => 0, recsep => 'blah';
 print $o ? "ok $N\n" : "not ok $N\n";
 $N++;
@@ -22,7 +26,7 @@ $N++;
 my $n;
 
 # (3-12) splicing at the beginning
-@r = splice(@a, 0, 0, "rec4");
+my @r = splice(@a, 0, 0, "rec4");
 check_result();
 @r = splice(@a, 0, 1, "rec5");       # same length
 check_result("rec4");
index 4e5d57b..6fa3298 100644 (file)
@@ -6,7 +6,10 @@
 # (tests _fill_offsets_to() )
 #
 
-my $file = "tf$$.txt";
+use strict;
+use warnings;
+
+my $file = "tf12-$$.txt";
 my $data = "rec0blahrec1blahrec2blah";
 
 print "1..5\n";
@@ -20,7 +23,7 @@ binmode F;
 print F $data;
 close F;
 
-
+my @a;
 my $o = tie @a, 'Tie::File', $file, autochomp => 0, recsep => 'blah';
 print $o ? "ok $N\n" : "not ok $N\n";
 $N++;
index b2e534c..71eff4e 100644 (file)
@@ -4,9 +4,12 @@
 # PUSH POP SHIFT UNSHIFT
 #
 
+use strict;
+use warnings;
+
 use POSIX 'SEEK_SET';
 
-my $file = "tf$$.txt";
+my $file = "tf13-$$.txt";
 my $data = "rec0blahrec1blahrec2blah";
 my ($o, $n);
 
@@ -19,6 +22,8 @@ print "ok $N\n"; $N++;
 # 2-3 FETCHSIZE 0-length file
 open F, '>', $file or die $!;
 close F;
+
+my @a;
 $o = tie @a, 'Tie::File', $file, recsep => 'blah';
 print $o ? "ok $N\n" : "not ok $N\n";
 $N++;
index c523458..27af9a9 100644 (file)
@@ -8,6 +8,9 @@
 # portable test for flocking.  I checked the Perl core distribution,
 # and found that Perl doesn't test flock either!
 
+use strict;
+use warnings;
+
 BEGIN {
   eval { flock STDOUT, 0 };
   if ($@ && $@ =~ /unimplemented/) {
@@ -18,7 +21,7 @@ BEGIN {
 
 use Fcntl ':flock';             # This works at least back to 5.004_04
 
-my $file = "tf$$.txt";
+my $file = "tf14-$$.txt";
 my ($o, $n);
 my @a;
 
index 4b6d1bc..9af3292 100644 (file)
@@ -9,9 +9,12 @@
 # Then, it checks the actual contents of the file against the expected
 # contents.
 
+use strict;
+use warnings;
+
 use POSIX 'SEEK_SET';
 
-my $file = "tf$$.txt";
+my $file = "tf15-$$.txt";
 1 while unlink $file;
 $: = Tie::File::_default_recsep();
 my $data = "rec0$:rec1$:rec2$:";
@@ -22,6 +25,7 @@ my $N = 1;
 use Tie::File;
 print "ok $N\n"; $N++;  # partial credit just for showing up
 
+my @a;
 my $o = tie @a, 'Tie::File', $file, autochomp => 0;
 print $o ? "ok $N\n" : "not ok $N\n";
 $N++;
index 21a3fce..4563c40 100644 (file)
@@ -3,7 +3,10 @@
 # Basic operation, initializing the object from an already-open handle
 # instead of from a filename
 
-my $file = "tf$$.txt";
+use strict;
+use warnings;
+
+my $file = "tf16-$$.txt";
 $: = Tie::File::_default_recsep();
 
 if ($^O =~ /vms/i) {
@@ -22,6 +25,7 @@ sysopen F, $file, O_CREAT | O_RDWR
   or die "Couldn't create temp file $file: $!; aborting";
 binmode F;
 
+my @a;
 my $o = tie @a, 'Tie::File', \*F, autochomp => 0, autodefer => 0;
 print $o ? "ok $N\n" : "not ok $N\n";
 $N++;
index 020774b..e6136fd 100644 (file)
@@ -4,7 +4,11 @@
 # EXTEND, CLEAR, DELETE, EXISTS
 #
 
-my $file = "tf$$.txt";
+use strict;
+use warnings;
+
+
+my $file = "tf17-$$.txt";
 $: = Tie::File::_default_recsep();
 1 while unlink $file;
 
@@ -14,6 +18,7 @@ my $N = 1;
 use Tie::File;
 print "ok $N\n"; $N++;
 
+my @a;
 my $o = tie @a, 'Tie::File', $file, autodefer => 0;
 print $o ? "ok $N\n" : "not ok $N\n";
 $N++;
index 3c2a807..001976e 100644 (file)
@@ -1,7 +1,11 @@
 #!/usr/bin/perl
 
+use strict;
+use warnings;
+
 use POSIX 'SEEK_SET';
-my $file = "tf$$.txt";
+
+my $file = "tf18-$$.txt";
 $/ = "blah";
 
 print "1..5\n";
@@ -10,6 +14,7 @@ my $N = 1;
 use Tie::File;
 print "ok $N\n"; $N++;
 
+my @a;
 my $o = tie @a, 'Tie::File', $file, autodefer => 0;
 print $o ? "ok $N\n" : "not ok $N\n";
 $N++;
index a8b6e69..f91c9d3 100644 (file)
@@ -1,10 +1,14 @@
 #!/usr/bin/perl
+
+use strict;
+use warnings;
+
 #
 # Tests for various caching errors
 #
 
 $|=1;
-my $file = "tf$$.txt";
+my $file = "tf19-$$.txt";
 $: = Tie::File::_default_recsep();
 my $data = join $:, "rec0" .. "rec9", "";
 my $V = $ENV{INTEGRITY};        # Verbose integrity checking?
@@ -20,6 +24,7 @@ binmode F;
 print F $data;
 close F;
 
+my @a;
 my $o = tie @a, 'Tie::File', $file;
 print $o ? "ok $N\n" : "not ok $N\n";
 $N++;
index bd4d6a7..4d34a89 100644 (file)
@@ -1,9 +1,13 @@
 #!/usr/bin/perl
+
+use strict;
+use warnings;
+
 #
 # Tests for various caching errors
 #
 
-my $file = "tf$$.txt";
+my $file = "tf20-$$.txt";
 $: = Tie::File::_default_recsep();
 my $data = join $:, "record0" .. "record9", "";
 my $V = $ENV{INTEGRITY};        # Verbose integrity checking?
@@ -22,6 +26,7 @@ close F;
 # Limit cache size to 30 bytes 
 my $MAX = 30;
 #  -- that's enough space for 3 records, but not 4, on both \n and \r\n systems
+my @a;
 my $o = tie @a, 'Tie::File', $file, memory => $MAX, autodefer => 0;
 print $o ? "ok $N\n" : "not ok $N\n";
 $N++;
index 0ccf669..6904a87 100644 (file)
@@ -1,4 +1,8 @@
 #!/usr/bin/perl
+
+use strict;
+use warnings;
+
 #
 # Formerly, on a Win32 system, Tie::File would create files with
 # \n-terminated records instead of \r\n-terminated.  The tests never
@@ -7,7 +11,7 @@
 #
 # These tests (Win32 only) make sure that the file had \r\n as it should.
 
-my $file = "tf$$.txt";
+my $file = "tf21-$$.txt";
 
 unless ($^O =~ /^(MSWin32|dos)$/) {
   print "1..0\n";
@@ -21,6 +25,7 @@ my $N = 1;
 use Tie::File;
 print "ok $N\n"; $N++;
 
+my @a;
 my $o = tie @a, 'Tie::File', $file, autodefer => 0;
 print $o ? "ok $N\n" : "not ok $N\n";
 $N++;
index ebf3eac..a48de94 100644 (file)
@@ -1,6 +1,9 @@
 #!/usr/bin/perl
 
-my $file = "tf$$.txt";
+use strict;
+use warnings;
+
+my $file = "tf22-$$.txt";
 $: = Tie::File::_default_recsep();
 
 print "1..71\n";
@@ -9,6 +12,7 @@ my $N = 1;
 use Tie::File;
 print "ok $N\n"; $N++;
 
+my @a;
 my $o = tie @a, 'Tie::File', $file, autochomp => 1, autodefer => 0;
 print $o ? "ok $N\n" : "not ok $N\n";
 $N++;
@@ -92,8 +96,8 @@ my @sr;
 expect(join("-", @sr), "Gold-Frankincense");
 
 # (70-71) Didn't you forget that fetch may return an unchomped cached record?
-$a1 = $a[0];                    # populate cache
-$a2 = $a[0];
+my $a1 = $a[0];                    # populate cache
+my $a2 = $a[0];
 expect($a1, "Myrrh");
 expect($a2, "Myrrh");
 # Actually no, you didn't---_fetch might return such a record, but 
index 104045a..727b3fc 100644 (file)
@@ -4,7 +4,10 @@
 # (07_rv_splice.t checks it aith autochomping off)
 #
 
-my $file = "tf$$.txt";
+use strict;
+use warnings;
+
+my $file = "tf23-$$.txt";
 $: = Tie::File::_default_recsep();
 my $data = "rec0$:rec1$:rec2$:";
 
@@ -16,6 +19,7 @@ print "ok $N\n"; $N++;  # partial credit just for showing up
 
 init_file($data);
 
+my @a;
 my $o = tie @a, 'Tie::File', $file, autochomp => 1;
 print $o ? "ok $N\n" : "not ok $N\n";
 $N++;
@@ -23,7 +27,7 @@ $N++;
 my $n;
 
 # (3-12) splicing at the beginning
-@r = splice(@a, 0, 0, "rec4");
+my @r = splice(@a, 0, 0, "rec4");
 check_result();
 @r = splice(@a, 0, 1, "rec5");       # same length
 check_result("rec4");
index 42c002c..f45265d 100644 (file)
@@ -3,8 +3,12 @@
 # Tests for various caching errors
 #
 
+use strict;
+use warnings;
+
 use Config;
-my $file = "tf$$.txt";
+
+my $file = "tf24-$$.txt";
 unless ($Config{d_alarm}) {
   print "1..0\n"; exit;
 }
@@ -27,6 +31,7 @@ close F;
 # Limit cache size to 30 bytes 
 my $MAX = 30;
 #  -- that's enough space for 3 records, but not 4, on both \n and \r\n systems
+my @a;
 my $o = tie @a, 'Tie::File', $file, memory => $MAX, autodefer => 1;
 print $o ? "ok $N\n" : "not ok $N\n";
 $N++;
index ce55d27..3108c60 100644 (file)
@@ -1,9 +1,13 @@
 #!/usr/bin/perl
+
+use strict;
+use warnings;
+
 #
 # Regular read-write tests with caching disabled
 # (Same as 01_gen.t)
 #
-my $file = "tf$$.txt";
+my $file = "tf25-$$.txt";
 
 print "1..68\n";
 
@@ -11,6 +15,7 @@ my $N = 1;
 use Tie::File;
 print "ok $N\n"; $N++;
 
+my @a;
 my $o = tie @a, 'Tie::File', $file, autochomp => 0, autodefer => 0, memory => 0;
 print $o ? "ok $N\n" : "not ok $N\n";
 $N++;
index d827f1c..261eb8a 100644 (file)
@@ -1,4 +1,8 @@
 #!/usr/bin/perl
+
+use strict;
+use warnings;
+
 #
 # Unit tests of _twrite function
 #
@@ -11,7 +15,7 @@
 # $len == 0 is a pure insert; $len == length($data) is a simple overwrite.
 #
 
-my $file = "tf$$.txt";
+my $file = "tf26-$$.txt";
 
 print "1..181\n";
 
@@ -188,7 +192,7 @@ try(    0,     0,     0);  # old=0        , new=0        ; old = new
 
 # (115-141)
 # These tests all take place at the end of the file
-$FLEN = 40960;  # Force the file to be exactly 40960 bytes long
+my $FLEN = 40960;  # Force the file to be exactly 40960 bytes long
 try(32768,  8192,  8192);  # old=<x>      , new=<x       ; old = new
 try(32768,  8192,  4026);  # old=<x>      , new=<x       ; old > new
 try(24576, 16384,  1917);  # old=<x><x>   , new=<x       ; old > new
@@ -306,54 +310,7 @@ sub try {
 }
 
 
-
-use POSIX 'SEEK_SET';
-sub check_contents {
-  my @c = @_;
-  my $x = join $:, @c, '';
-  local *FH = $o->{fh};
-  seek FH, 0, SEEK_SET;
-#  my $open = open FH, '<', $file;
-  my $a;
-  { local $/; $a = <FH> }
-  $a = "" unless defined $a;
-  if ($a eq $x) {
-    print "ok $N\n";
-  } else {
-    ctrlfix($a, $x);
-    print "not ok $N\n# expected <$x>, got <$a>\n";
-  }
-  $N++;
-
-  # now check FETCH:
-  my $good = 1;
-  my $msg;
-  for (0.. $#c) {
-    my $aa = $a[$_];
-    unless ($aa eq "$c[$_]$:") {
-      $msg = "expected <$c[$_]$:>, got <$aa>";
-      ctrlfix($msg);
-      $good = 0;
-    }
-  }
-  print $good ? "ok $N\n" : "not ok $N # $msg\n";
-  $N++;
-
-  print $o->_check_integrity($file, $ENV{INTEGRITY}) 
-      ? "ok $N\n" : "not ok $N\n";
-  $N++;
-}
-
-sub ctrlfix {
-  for (@_) {
-    s/\n/\\n/g;
-    s/\r/\\r/g;
-  }
-}
-
 END {
-  undef $o;
-  untie @a;
   1 while unlink $file;
 }
 
index 04ad436..464f1ea 100644 (file)
@@ -1,4 +1,8 @@
 #!/usr/bin/perl
+
+use strict;
+use warnings;
+
 #
 # Unit tests of _iwrite function
 #
@@ -11,7 +15,7 @@
 # (Because we inserted $data at the beginning) we copy as much as possible
 # and return a string containing the remainder.
 
-my $file = "tf$$.txt";
+my $file = "tf27-$$.txt";
 $| = 1;
 
 print "1..203\n";
@@ -23,7 +27,7 @@ print "ok $N\n"; $N++;
 
 $: = Tie::File::_default_recsep();
 
-$FLEN = 40970;   # Use files of this length
+my $FLEN = 40970;   # Use files of this length
 $oldfile = mkrand($FLEN);
 print "# MOF tests\n";
 # (2-85) These were generated by 'gentests.pl' to cover all possible cases
index 3146369..ae493cc 100644 (file)
@@ -1,4 +1,8 @@
 #!/usr/bin/perl
+
+use strict;
+use warnings;
+
 #
 # Unit tests of _mtwrite function
 #
@@ -7,7 +11,7 @@
 # 'm' here is for 'multiple'.  This writes data $d1 at position $s1
 # over a block of space $l1, moving subsequent data up or down as necessary.
 
-my $file = "tf$$.txt";
+my $file = "tf28-$$.txt";
 $| = 1;
 
 print "1..2252\n";
@@ -20,7 +24,7 @@ print "ok $N\n"; $N++;
 $: = Tie::File::_default_recsep();
 
 # Only these are used for the triple-region tests
-@BASE_TRIES = (
+my @BASE_TRIES = (
                [10, 20, 30], 
                [10, 30, 20], 
                [100, 30, 20],
@@ -33,9 +37,9 @@ $: = Tie::File::_default_recsep();
                [200, 60, 20],
                );
 
-@TRIES = @BASE_TRIES;
+my @TRIES = @BASE_TRIES;
 
-$FLEN = 40970;   # Use files of this length
+my $FLEN = 40970;   # Use files of this length
 $oldfile = mkrand($FLEN);
 print "# MOF tests\n";
 # These were generated by 'gentests.pl' to cover all possible cases
index 793116a..a86d21f 100644 (file)
@@ -1,4 +1,8 @@
 #!/usr/bin/perl
+
+use strict;
+use warnings;
+
 #
 # Unit tests of _downcopy function
 #
@@ -10,7 +14,7 @@
 #
 #
 
-my $file = "tf$$.txt";
+my $file = "tf29-$$.txt";
 
 print "1..718\n";
 
@@ -162,7 +166,7 @@ try(    0,     0,     0);  # old=0        , new=0        ; old = new
 
 # (224-277)
 # These tests all take place at the end of the file
-$FLEN = 40960;  # Force the file to be exactly 40960 bytes long
+my $FLEN = 40960;  # Force the file to be exactly 40960 bytes long
 try(32768,  8192,  8192);  # old=<x>      , new=<x       ; old = new
 try(32768,  8192,  4026);  # old=<x>      , new=<x       ; old > new
 try(24576, 16384,  1917);  # old=<x><x>   , new=<x       ; old > new
@@ -315,54 +319,6 @@ sub try {
   }
 }
 
-
-
-use POSIX 'SEEK_SET';
-sub check_contents {
-  my @c = @_;
-  my $x = join $:, @c, '';
-  local *FH = $o->{fh};
-  seek FH, 0, SEEK_SET;
-#  my $open = open FH, '<', $file;
-  my $a;
-  { local $/; $a = <FH> }
-  $a = "" unless defined $a;
-  if ($a eq $x) {
-    print "ok $N\n";
-  } else {
-    ctrlfix($a, $x);
-    print "not ok $N\n# expected <$x>, got <$a>\n";
-  }
-  $N++;
-
-  # now check FETCH:
-  my $good = 1;
-  my $msg;
-  for (0.. $#c) {
-    my $aa = $a[$_];
-    unless ($aa eq "$c[$_]$:") {
-      $msg = "expected <$c[$_]$:>, got <$aa>";
-      ctrlfix($msg);
-      $good = 0;
-    }
-  }
-  print $good ? "ok $N\n" : "not ok $N # $msg\n";
-  $N++;
-
-  print $o->_check_integrity($file, $ENV{INTEGRITY}) 
-      ? "ok $N\n" : "not ok $N\n";
-  $N++;
-}
-
-sub ctrlfix {
-  for (@_) {
-    s/\n/\\n/g;
-    s/\r/\\r/g;
-  }
-}
-
 END {
-  undef $o;
-  untie @a;
   1 while unlink $file;
 }
index 9840af4..2c593f1 100644 (file)
@@ -1,4 +1,8 @@
 #!/usr/bin/perl
+
+use strict;
+use warnings;
+
 #
 # Unit tests of _upcopy function
 #
@@ -10,7 +14,7 @@
 # but the source and destination regions may overlap.)
 
 
-my $file = "tf$$.txt";
+my $file = "tf29a-$$.txt";
 
 print "1..55\n";
 
@@ -22,7 +26,7 @@ $: = Tie::File::_default_recsep();
 
 my @subtests = qw(x <x x> x><x <x> <x><x x><x> <x><x> <x><x><x> 0);
 
-$FLEN = 40970;  # 2410 records of 17 chars each
+my $FLEN = 40970;  # 2410 records of 17 chars each
 
 # (2-7) Trivial non-moves at start of file
 try(0, 0, 0);
@@ -157,45 +161,6 @@ sub try {
   $N++;
 }
 
-
-
-use POSIX 'SEEK_SET';
-sub check_contents {
-  my @c = @_;
-  my $x = join $:, @c, '';
-  local *FH = $o->{fh};
-  seek FH, 0, SEEK_SET;
-#  my $open = open FH, '<', $file;
-  my $a;
-  { local $/; $a = <FH> }
-  $a = "" unless defined $a;
-  if ($a eq $x) {
-    print "ok $N\n";
-  } else {
-    ctrlfix($a, $x);
-    print "not ok $N\n# expected <$x>, got <$a>\n";
-  }
-  $N++;
-
-  # now check FETCH:
-  my $good = 1;
-  my $msg;
-  for (0.. $#c) {
-    my $aa = $a[$_];
-    unless ($aa eq "$c[$_]$:") {
-      $msg = "expected <$c[$_]$:>, got <$aa>";
-      ctrlfix($msg);
-      $good = 0;
-    }
-  }
-  print $good ? "ok $N\n" : "not ok $N # $msg\n";
-  $N++;
-
-  print $o->_check_integrity($file, $ENV{INTEGRITY}) 
-      ? "ok $N\n" : "not ok $N\n";
-  $N++;
-}
-
 sub ctrlfix {
   for (@_) {
     s/\n/\\n/g;
@@ -204,8 +169,6 @@ sub ctrlfix {
 }
 
 END {
-  undef $o;
-  untie @a;
   1 while unlink $file;
 }
 
index 975cdfb..8ef908b 100644 (file)
@@ -1,4 +1,8 @@
 #!/usr/bin/perl
+
+use strict;
+use warnings;
+
 #
 # Check ->defer and ->flush methods
 #
@@ -8,7 +12,7 @@
 #
 
 use POSIX 'SEEK_SET';
-my $file = "tf$$.txt";
+my $file = "tf30-$$.txt";
 $: = Tie::File::_default_recsep();
 my $data = "rec0$:rec1$:rec2$:";
 my ($o, $n);
@@ -23,6 +27,8 @@ open F, '>', $file or die $!;
 binmode F;
 print F $data;
 close F;
+
+my @a;
 $o = tie @a, 'Tie::File', $file;
 print $o ? "ok $N\n" : "not ok $N\n";
 $N++;
index baf72c2..0e8f52c 100644 (file)
@@ -1,4 +1,8 @@
 #!/usr/bin/perl
+
+use strict;
+use warnings;
+
 #
 # Check behavior of 'autodefer' feature
 # Mostly this isn't implemented yet
@@ -8,7 +12,7 @@
 
 use POSIX 'SEEK_SET';
 
-my $file = "tf$$.txt";
+my $file = "tf31-$$.txt";
 $: = Tie::File::_default_recsep();
 my $data = "rec0$:rec1$:rec2$:";
 my ($o, $n, @a);
index f4ee110..940f1b7 100644 (file)
@@ -1,4 +1,8 @@
 #!/usr/bin/perl
+
+use strict;
+use warnings;
+
 #
 # Check interactions of deferred writing
 # with miscellaneous methods like DELETE, EXISTS,
@@ -6,7 +10,7 @@
 #
 
 use POSIX 'SEEK_SET';
-my $file = "tf$$.txt";
+my $file = "tf32-$$.txt";
 $: = Tie::File::_default_recsep();
 my $data = "rec0$:rec1$:rec2$:";
 my ($o, $n);
@@ -21,6 +25,8 @@ open F, '>', $file or die $!;
 binmode F;
 print F $data;
 close F;
+
+my @a;
 $o = tie @a, 'Tie::File', $file;
 print $o ? "ok $N\n" : "not ok $N\n";
 $N++;
index b68541c..7538345 100644 (file)
@@ -1,4 +1,8 @@
 #!/usr/bin/perl
+
+use strict;
+use warnings;
+
 #
 # Deferred caching of varying size records
 #
@@ -9,7 +13,7 @@
 #
 
 use POSIX 'SEEK_SET';
-my $file = "tf$$.txt";
+my $file = "tf33-$$.txt";
 # print "1..0\n"; exit;
 $: = Tie::File::_default_recsep();
 my $data = "$:1$:22$:";
@@ -25,6 +29,8 @@ open F, '>', $file or die $!;
 binmode F;
 print F $data;
 close F;
+
+my @a;
 $o = tie @a, 'Tie::File', $file;
 print $o ? "ok $N\n" : "not ok $N\n";
 $N++;
@@ -66,7 +72,7 @@ check_contents("55555$:1$:aaaaaaaaaa$:$:7777777$:");
 
 # (23-26) Now two long batches
 $o->defer;
-%l = qw(0 2  1 3  2 4  4 5  5 4  6 3);
+my %l = qw(0 2  1 3  2 4  4 5  5 4  6 3);
 for (0..2, 4..6) {
   $a[$_] = $_ x $l{$_};
 }
index 137c9bb..7e9612d 100644 (file)
@@ -1,4 +1,8 @@
 #!/usr/bin/perl
+
+use strict;
+use warnings;
+
 #
 # Unit tests for abstract cache implementation
 #
@@ -58,14 +62,14 @@ for (1..10) {
 for (1..10) {
   push @R, $h->expire;
 }
-$iota = iota('a',9);
+my $iota = iota('a',9);
 print "@R" eq $iota
   ? "ok $N\n" : "not ok $N \# expected ($iota), got (@R)\n";
 $N++;
 check($h);
 
 # (6-7) Remove from empty heap
-$n = $h->expire;
+my $n = $h->expire;
 print ! defined $n ? "ok $N\n" : "not ok $N \# expected UNDEF, got $n";
 $N++;
 check($h);
index 9e7ad25..0ed3fe7 100644 (file)
@@ -1,4 +1,8 @@
 #!/usr/bin/perl
+
+use strict;
+use warnings;
+
 #
 # Unit tests for heap implementation
 #
index 8c62832..5a76c66 100644 (file)
@@ -2,12 +2,14 @@
 
 # 2003-04-09 Tels: test the offset method from 0.94
 
-use Test::More;
 use strict;
+use warnings;
+
+use Test::More;
 use File::Spec;
 
 use POSIX 'SEEK_SET';
-my $file = "tf$$.txt";
+my $file = "tf42-$$.txt";
 
 BEGIN
   {
diff --git a/gnu/usr.bin/perl/dist/Tie-File/t/43_synopsis.t b/gnu/usr.bin/perl/dist/Tie-File/t/43_synopsis.t
new file mode 100644 (file)
index 0000000..904d9cd
--- /dev/null
@@ -0,0 +1,205 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+# Demonstrate correctness of SYNOPSIS in documentation
+$| = 1;
+my $file = "tf42-$$.txt";
+my $dupe = "ft42-$$.txt";
+1 while unlink $file;
+1 while unlink $dupe;
+
+print "1..21\n";
+
+my $MAX = 42;
+open my $F, ">", $file or die "Unable to open $file for writing: $!";
+for my $i (0..$MAX) {
+    print $F "PERL-${i}\n";
+}
+close $F or die "Unable to close $file after writing: $!";
+
+my $N = 1;
+use Tie::File;
+print "ok $N - use Tie::File\n"; $N++;
+
+my $desc = 'Tie::File';
+
+my @array;
+my $o = tie @array, 'Tie::File', $file;
+defined ($o)
+    ? print "ok $N - $desc\n"
+    : print "not ok $N - $desc\n";
+$N++;
+
+    $desc = "first element in array corresponds to first line of file";
+    ($array[0] eq "PERL-0")
+        ? print "ok $N - $desc\n"
+        : print "not ok $N - $desc\n";
+    $N++;
+
+    $desc = "last element in array corresponds to last line of file";
+    ($array[$MAX] eq "PERL-$MAX")
+        ? print "ok $N - $desc\n"
+        : print "not ok $N - $desc\n";
+    $N++;
+
+    $desc = "got expected amount of records in file";
+    my $n_recs = @array;
+    ($n_recs == $MAX + 1)
+        ? print "ok $N - $desc\n"
+        : print "not ok $N - $desc\n";
+    $N++;
+
+    my $chop = 2;
+    $#array -= $chop;
+    $desc = "chop records off end of file";
+    $n_recs = @array;
+    ($n_recs == $MAX + 1 - $chop)
+        ? print "ok $N - $desc\n"
+        : print "not ok $N - $desc\n";
+    $N++;
+
+    $desc = "replace PERL with Perl everywhere in the file";
+for (@array) { s/PERL/Perl/g; }
+my $exp = "Perl-" . ($MAX - 2);
+($array[-1] eq $exp)
+    ? print "ok $N - $desc\n"
+    : print "not ok $N - $desc\n";
+$N++;
+
+# push @array, new recs...;
+# my $r1 = pop @array;
+# unshift @array, new recs...;
+# my $r2 = shift @array;
+# @old_recs = splice @array, 3, 7, new recs...;
+# Demonstrate that the tied file has changed in the way we expect
+
+$desc = "push new records onto end of file";
+my @end_recs = (qw| alpha beta gamma |);
+push @array, @end_recs;
+$n_recs = @array;
+($n_recs == $MAX + 1 - $chop + @end_recs)
+    ? print "ok $N - $desc\n"
+    : print "not ok $N - $desc\n";
+$N++;
+
+$desc = "last element in array corresponds to last line of file";
+($array[-1] eq $end_recs[-1])
+    ? print "ok $N - $desc\n"
+    : print "not ok $N - $desc\n";
+$N++;
+
+$desc = "pop last record off";
+my $r1 = pop @array;
+($array[-1] eq $end_recs[-2])
+    ? print "ok $N - $desc\n"
+    : print "not ok $N - $desc\n";
+$N++;
+
+$desc = "unshift new records onto beginning of file";
+my @start_recs = (qw| albemarle beverly cortelyou |);
+unshift @array, @start_recs;
+$n_recs = @array;
+$exp = $MAX + 1 - $chop + @end_recs - 1 + @start_recs;
+($n_recs == $exp)
+    ? print "ok $N - $desc\n"
+    : print "not ok $N - $desc\n";
+$N++;
+
+$desc = "first element in array corresponds to first line of file";
+($array[0] eq $start_recs[0])
+    ? print "ok $N - $desc\n"
+    : print "not ok $N - $desc\n";
+$N++;
+
+$desc = "shift one record off beginning of file";
+my $r2 = shift @array;
+$n_recs = @array;
+$exp = $MAX + 1 - $chop + @end_recs - 1 + @start_recs - 1;
+($n_recs == $exp)
+    ? print "ok $N - $desc\n"
+    : print "not ok $N - $desc\n";
+$N++;
+
+$desc = "new first element in array";
+($array[0] eq $start_recs[1])
+    ? print "ok $N - $desc\n"
+    : print "not ok $N - $desc\n";
+$N++;
+
+my @splice_in = (qw| delta epsilon zeta eta theta |);
+my $offset = 2;
+my $length = 3;
+$desc = "splice out $length elements and splice in " . @splice_in . " new elements";
+my @old_recs = splice @array, $offset, $length, @splice_in;
+$n_recs = @array;
+$exp = $MAX + 1 - $chop + @end_recs - 1 + @start_recs - 1 - 3 + @splice_in;
+($n_recs == $exp)
+    ? print "ok $N - $desc\n"
+    : print "not ok $N - $desc\n";
+$N++;
+
+$desc = "got expected element";
+($array[6] eq $splice_in[4])
+    ? print "ok $N - $desc\n"
+    : print "not ok $N - $desc\n";
+$N++;
+
+$o = undef;  # destroy Tie::File object holding file open
+# Untie the first file
+my $u = untie @array;
+# TODO: perldoc -f untie does not specify return value for untie
+
+open my $G, "<", $file or die "Unable to open $file for reading: $!";
+open my $H, ">", $dupe or die "Unable to open $dupe for writing: $!";
+while (my $l = <$G>) {
+    chomp $l;
+    print $H "$l\n";
+}
+close $H or die "Unable to close $dupe after writing: $!";
+close $G or die "Unable to close $file after reading: $!";
+
+$desc = 'tie to dupe file';
+my @dupe;
+my $p = tie @dupe, 'Tie::File', $file;
+defined ($p)
+    ? print "ok $N - $desc\n"
+    : print "not ok $N - $desc\n";
+$N++;
+
+$desc = "same number of records in dupe file as in original file";
+my $o_recs = @dupe;
+($o_recs == $n_recs)
+    ? print "ok $N - $desc\n"
+    : print "not ok $N - $desc\n";
+$N++;
+
+$desc = "first element in dupe array corresponds to first line of dupe file";
+($dupe[0] eq $start_recs[1])
+    ? print "ok $N - $desc\n"
+    : print "not ok $N - $desc\n";
+$N++;
+
+$exp = $splice_in[4];
+$desc = "got expected element $exp";
+($dupe[6] eq $exp)
+    ? print "ok $N - $desc\n"
+    : print "not ok $N - $desc\n";
+$N++;
+
+$desc = "last element in dupe array corresponds to last line of dupe file";
+($dupe[-1] eq $end_recs[-2])
+    ? print "ok $N - $desc\n"
+    : print "not ok $N - $desc\n";
+$N++;
+
+END {
+    undef $o;
+    undef $p;
+    untie @array;
+    untie @dupe;
+    1 while unlink $file;
+    1 while unlink $dupe;
+}
+
index adf3db5..d06fb8b 100644 (file)
@@ -16,7 +16,7 @@ use Carp;
 
 no warnings 'utf8';
 
-our $VERSION = '1.26';
+our $VERSION = '1.27';
 our $PACKAGE = __PACKAGE__;
 
 our @EXPORT = qw( NFC NFD NFKC NFKD );
@@ -606,27 +606,27 @@ and/or modify it under the same terms as Perl itself.
 
 =over 4
 
-=item http://www.unicode.org/reports/tr15/
+=item L<http://www.unicode.org/reports/tr15/>
 
 Unicode Normalization Forms - UAX #15
 
-=item http://www.unicode.org/Public/UNIDATA/CompositionExclusions.txt
+=item L<http://www.unicode.org/Public/UNIDATA/CompositionExclusions.txt>
 
 Composition Exclusion Table
 
-=item http://www.unicode.org/Public/UNIDATA/DerivedNormalizationProps.txt
+=item L<http://www.unicode.org/Public/UNIDATA/DerivedNormalizationProps.txt>
 
 Derived Normalization Properties
 
-=item http://www.unicode.org/Public/UNIDATA/NormalizationCorrections.txt
+=item L<http://www.unicode.org/Public/UNIDATA/NormalizationCorrections.txt>
 
 Normalization Corrections
 
-=item http://www.unicode.org/review/pr-29.html
+=item L<http://www.unicode.org/review/pr-29.html>
 
 Public Review Issue #29: Normalization Issue
 
-=item http://www.unicode.org/notes/tn5/
+=item L<http://www.unicode.org/notes/tn5/>
 
 Canonical Equivalence in Applications - UTN #5
 
index a807316..43afacc 100644 (file)
@@ -152,14 +152,14 @@ checkOptree ( name        => 'myyes() as coderef',
              strip_open_hints => 1,
              expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
 # 6  <@> leave[1 ref] vKP/REFC ->(end)
-# 1     <0> enter ->2
+# 1     <0> enter ->2
 # 2     <;> nextstate(main 2 -e:1) v:>,<,%,{ ->3
 # 5     <@> print vK ->6
 # 3        <0> pushmark s ->4
 # 4        <$> const[SPECIAL sv_yes] s*/FOLD ->5
 EOT_EOT
 # 6  <@> leave[1 ref] vKP/REFC ->(end)
-# 1     <0> enter ->2
+# 1     <0> enter ->2
 # 2     <;> nextstate(main 2 -e:1) v:>,<,%,{ ->3
 # 5     <@> print vK ->6
 # 3        <0> pushmark s ->4
@@ -176,14 +176,14 @@ checkOptree ( name        => 'myno() as coderef',
              strip_open_hints => 1,
              expect    => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
 # 6  <@> leave[1 ref] vKP/REFC ->(end)
-# 1     <0> enter ->2
+# 1     <0> enter ->2
 # 2     <;> nextstate(main 2 -e:1) v:>,<,%,{ ->3
 # 5     <@> print vK ->6
 # 3        <0> pushmark s ->4
 # 4        <$> const[SPECIAL sv_no] s*/FOLD ->5
 EOT_EOT
 # 6  <@> leave[1 ref] vKP/REFC ->(end)
-# 1     <0> enter ->2
+# 1     <0> enter ->2
 # 2     <;> nextstate(main 2 -e:1) v:>,<,%,{ ->3
 # 5     <@> print vK ->6
 # 3        <0> pushmark s ->4
diff --git a/gnu/usr.bin/perl/ext/B/t/perlstring.t b/gnu/usr.bin/perl/ext/B/t/perlstring.t
new file mode 100644 (file)
index 0000000..107a8d7
--- /dev/null
@@ -0,0 +1,41 @@
+#!./perl
+
+BEGIN {
+    unshift @INC, 't';
+    require Config;
+    if (($Config::Config{'extensions'} !~ /\bB\b/) ){
+        print "1..0 # Skip -- Perl configured without B module\n";
+        exit 0;
+    }
+}
+
+$|  = 1;
+use warnings;
+use strict;
+BEGIN  {
+    eval { require threads; threads->import; }
+}
+use Test::More;
+
+BEGIN { use_ok( 'B' ); }
+
+for my $do_utf8 (""," utf8") {
+    my $max = $do_utf8 ? 1024  : 255;
+    my @bad;
+    for my $cp ( 0 .. $max ) {
+        my $char= chr($cp);
+        utf8::upgrade($char);
+        my $escaped= B::perlstring($char);
+        my $evalled= eval $escaped;
+        push @bad, [ $cp, $evalled, $char, $escaped ] if $evalled ne $char;
+    }
+    is(0+@bad, 0, "Check if any$do_utf8 codepoints fail to round trip through B::perlstring()");
+    if (@bad) {
+        foreach my $tuple (@bad) {
+            my ( $cp, $evalled, $char, $escaped ) = @$tuple;
+            is($evalled, $char, "check if B::perlstring of$do_utf8 codepoint $cp round trips ($escaped)");
+        }
+    }
+}
+
+done_testing();
index 1d42dd5..e7a39b1 100644 (file)
@@ -42,7 +42,7 @@ my $victim = sub {
 
 is (B::walkoptree_debug, 0, 'walkoptree_debug() is 0');
 B::walkoptree(B::svref_2object($victim)->ROOT, "pie");
-foreach (qw(substcont split split leavesub)) {
+foreach (qw(substcont split leavesub)) {
     is ($seen{$_}, 1, "Our victim had a $_ OP");
 }
 is_deeply ([keys %debug], [], 'walkoptree_debug was not called');
@@ -52,7 +52,7 @@ is (B::walkoptree_debug, 1, 'walkoptree_debug() is 1');
 %seen = ();
 
 B::walkoptree(B::svref_2object($victim)->ROOT, "pie");
-foreach (qw(substcont split split leavesub)) {
+foreach (qw(substcont split leavesub)) {
     is ($seen{$_}, 1, "Our victim had a $_ OP");
 }
 is_deeply (\%debug, \%seen, 'walkoptree_debug was called correctly');
index 174e91a..d23ec74 100755 (executable)
@@ -44,14 +44,13 @@ if (opendir(D, ".")) {
    @correct = grep { !/^\./ } sort readdir(D);
    closedir D;
 }
-{
-    local $@;
-    my $expect =
-        qr/File::Glob::glob\(\) was removed in perl 5\.30\. Use File::Glob::bsd_glob\(\) instead/;
-    eval { File::Glob::glob("*", 0); };
-    like $@, $expect,
-        "Got expected error message for removal of File::Glob::glob()";
-}
+
+is(
+    File::Glob->can('glob'),
+    undef,
+    'Did not find glob() function in File::Glob',
+);
+
 chdir '..' or die "chdir .. $!";
 
 # look up the user's home directory
index 9e27144..cd33050 100644 (file)
@@ -6,7 +6,7 @@ our ($VERSION, @ISA, @EXPORT);
 require 5.000;
 require Exporter;
 
-$VERSION       = 1.04;
+$VERSION       = 1.05;
 @ISA           = qw(Exporter);
 @EXPORT                = qw(open2);
 
@@ -18,38 +18,42 @@ IPC::Open2 - open a process for both reading and writing using open2()
 
     use IPC::Open2;
 
-    $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'some cmd and args');
-      # or without using the shell
-    $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'some', 'cmd', 'and', 'args');
+    my $pid = open2(my $chld_out, my $chld_in,
+      'some', 'cmd', 'and', 'args');
+    # or passing the command through the shell
+    my $pid = open2(my $chld_out, my $chld_in, 'some cmd and args');
 
-    # or with handle autovivification
-    my($chld_out, $chld_in);
-    $pid = open2($chld_out, $chld_in, 'some cmd and args');
-      # or without using the shell
-    $pid = open2($chld_out, $chld_in, 'some', 'cmd', 'and', 'args');
+    # read from parent STDIN and write to already open handle
+    open my $outfile, '>', 'outfile.txt' or die "open failed: $!";
+    my $pid = open2($outfile, '<&STDIN', 'some', 'cmd', 'and', 'args');
 
+    # read from already open handle and write to parent STDOUT
+    open my $infile, '<', 'infile.txt' or die "open failed: $!";
+    my $pid = open2('>&STDOUT', $infile, 'some', 'cmd', 'and', 'args');
+
+    # reap zombie and retrieve exit status
     waitpid( $pid, 0 );
     my $child_exit_status = $? >> 8;
 
 =head1 DESCRIPTION
 
-The open2() function runs the given $cmd and connects $chld_out for
+The open2() function runs the given command and connects $chld_out for
 reading and $chld_in for writing.  It's what you think should work 
 when you try
 
-    $pid = open(HANDLE, "|cmd args|");
+    my $pid = open(my $fh, "|cmd args|");
 
-The write filehandle will have autoflush turned on.
+The $chld_in filehandle will have autoflush turned on.
 
 If $chld_out is a string (that is, a bareword filehandle rather than a glob
 or a reference) and it begins with C<< >& >>, then the child will send output
 directly to that file handle.  If $chld_in is a string that begins with
 C<< <& >>, then $chld_in will be closed in the parent, and the child will
-read from it directly.  In both cases, there will be a dup(2) instead of a
-pipe(2) made.
+read from it directly.  In both cases, there will be a L<dup(2)> instead of a
+L<pipe(2)> made.
 
-If either reader or writer is the null string, this will be replaced
-by an autogenerated filehandle.  If so, you must pass a valid lvalue
+If either reader or writer is the empty string or undefined, this will be
+replaced by an autogenerated filehandle.  If so, you must pass a valid lvalue
 in the parameter slot so it can be overwritten in the caller, or
 an exception will be raised.
 
@@ -66,10 +70,10 @@ Failing to do this can result in an accumulation of defunct or "zombie"
 processes.  See L<perlfunc/waitpid> for more information.
 
 This whole affair is quite dangerous, as you may block forever.  It
-assumes it's going to talk to something like B<bc>, both writing
+assumes it's going to talk to something like L<bc(1)>, both writing
 to it and reading from it.  This is presumably safe because you
-"know" that commands like B<bc> will read a line at a time and
-output a line at a time.  Programs like B<sort> that read their
+"know" that commands like L<bc(1)> will read a line at a time and
+output a line at a time.  Programs like L<sort(1)> that read their
 entire input stream first, however, are quite apt to cause deadlock.
 
 The big problem with this approach is that if you don't have control 
@@ -77,8 +81,8 @@ over source code being run in the child process, you can't control
 what it does with pipe buffering.  Thus you can't just open a pipe to
 C<cat -v> and continually read and write a line from it.
 
-The IO::Pty and Expect modules from CPAN can help with this, as they
-provide a real tty (well, a pseudo-tty, actually), which gets you
+The L<IO::Pty> and L<Expect> modules from CPAN can help with this, as
+they provide a real tty (well, a pseudo-tty, actually), which gets you
 back to line buffering in the invoked command again.
 
 =head1 WARNING 
index 053693e..84d477f 100644 (file)
@@ -19,24 +19,29 @@ BEGIN {
     require 'test.pl';
 }
 
-plan tests => 4;
+my $utf8_locale = find_utf8_ctype_locale();
+
+plan tests => 13;
 
 use POSIX qw();
 
 SKIP: {
-    skip("mblen() not present", 4) unless $Config{d_mblen};
+    skip("mblen() not present", 7) unless $Config{d_mblen};
 
-    is(&POSIX::mblen("a", &POSIX::MB_CUR_MAX), 1, 'mblen() basically works');
+    is(&POSIX::mblen("a", &POSIX::MB_CUR_MAX), 1, 'mblen() works on ASCII input');
+    is(&POSIX::mblen("b"), 1, '... and the 2nd parameter is optional');
 
-    skip("LC_CTYPE locale support not available", 3)
+    skip("LC_CTYPE locale support not available", 4)
       unless locales_enabled('LC_CTYPE');
 
-    my $utf8_locale = find_utf8_ctype_locale();
-    skip("no utf8 locale available", 3) unless $utf8_locale;
-
+    skip("no utf8 locale available", 4) unless $utf8_locale;
+    # Here we need to influence LC_CTYPE, but it's not enough to just
+    # set this because LC_ALL could override it. It's also not enough
+    # to delete LC_ALL because it could be used to override other
+    # variables such as LANG in the underlying test environment.
+    # Continue to set LC_CTYPE just in case...
     local $ENV{LC_CTYPE} = $utf8_locale;
-    local $ENV{LC_ALL};
-    delete $ENV{LC_ALL};
+    local $ENV{LC_ALL} = $utf8_locale;
 
     fresh_perl_like(
         'use POSIX; print &POSIX::MB_CUR_MAX',
@@ -44,17 +49,100 @@ SKIP: {
 
   SKIP: {
     my ($major, $minor, $rest) = $Config{osvers} =~ / (\d+) \. (\d+) .* /x;
-    skip("mblen() broken (at least for c.utf8) on early HP-UX", 2)
+    skip("mblen() broken (at least for c.utf8) on early HP-UX", 3)
         if   $Config{osname} eq 'hpux'
           && $major < 11 || ($major == 11 && $minor < 31);
+
     fresh_perl_is(
-        'use POSIX; print &POSIX::mblen("'
+        'use POSIX; &POSIX::mblen(undef,0); print &POSIX::mblen("'
       . I8_to_native("\x{c3}\x{28}")
       . '", 2)',
       -1, {}, 'mblen() recognizes invalid multibyte characters');
 
     fresh_perl_is(
-     'use POSIX; print &POSIX::mblen("\N{GREEK SMALL LETTER SIGMA}", 2)',
+     'use POSIX; &POSIX::mblen(undef,0);
+      my $sigma = "\N{GREEK SMALL LETTER SIGMA}";
+      utf8::encode($sigma);
+      print &POSIX::mblen($sigma, 2)',
      2, {}, 'mblen() works on UTF-8 characters');
+
+    fresh_perl_is(
+     'use POSIX; &POSIX::mblen(undef,0);
+      my $wide; print &POSIX::mblen("\N{GREEK SMALL LETTER SIGMA}", 1);',
+     -1, {}, 'mblen() returns -1 when input length is too short');
+  }
+}
+
+SKIP: {
+    skip("mbtowc() not present", 5) unless $Config{d_mbtowc};
+
+    my $wide;
+
+    is(&POSIX::mbtowc($wide, "a"), 1, 'mbtowc() returns correct length on ASCII input');
+    is($wide , ord "a", 'mbtowc() returns correct ordinal on ASCII input');
+
+    skip("LC_CTYPE locale support not available", 3)
+      unless locales_enabled('LC_CTYPE');
+
+    skip("no utf8 locale available", 3) unless $utf8_locale;
+
+    local $ENV{LC_CTYPE} = $utf8_locale;
+    local $ENV{LC_ALL} = $utf8_locale;
+    local $ENV{PERL_UNICODE};
+    delete $ENV{PERL_UNICODE};
+
+  SKIP: {
+    my ($major, $minor, $rest) = $Config{osvers} =~ / (\d+) \. (\d+) .* /x;
+    skip("mbtowc() broken (at least for c.utf8) on early HP-UX", 3)
+        if   $Config{osname} eq 'hpux'
+          && $major < 11 || ($major == 11 && $minor < 31);
+
+    fresh_perl_is(
+        'use POSIX; &POSIX::mbtowc(undef, undef,0); my $wide; print &POSIX::mbtowc($wide, "'
+      . I8_to_native("\x{c3}\x{28}")
+      . '", 2)',
+      -1, {}, 'mbtowc() recognizes invalid multibyte characters');
+
+    fresh_perl_is(
+     'use POSIX; &POSIX::mbtowc(undef,undef,0);
+      my $sigma = "\N{GREEK SMALL LETTER SIGMA}";
+      utf8::encode($sigma);
+      my $wide; my $len = &POSIX::mbtowc($wide, $sigma, 2);
+      print "$len:$wide"',
+     "2:963", {}, 'mbtowc() works on UTF-8 characters');
+
+    fresh_perl_is(
+     'use POSIX; &POSIX::mbtowc(undef,undef,0);
+      my $wide; print &POSIX::mbtowc($wide, "\N{GREEK SMALL LETTER SIGMA}", 1);',
+     -1, {}, 'mbtowc() returns -1 when input length is too short');
+  }
+}
+
+SKIP: {
+    skip("mbtowc or wctomb() not present", 2) unless $Config{d_mbtowc} && $Config{d_wctomb};
+
+    fresh_perl_is('use POSIX; &POSIX::wctomb(undef,0); my $string; my $len = &POSIX::wctomb($string, ord "A"); print "$len:$string"',
+      "1:A", {}, 'wctomb() works on ASCII input');
+
+    skip("LC_CTYPE locale support not available", 1)
+      unless locales_enabled('LC_CTYPE');
+
+    skip("no utf8 locale available", 1) unless $utf8_locale;
+
+    local $ENV{LC_CTYPE} = $utf8_locale;
+    local $ENV{LC_ALL} = $utf8_locale;
+    local $ENV{PERL_UNICODE};
+    delete $ENV{PERL_UNICODE};
+
+  SKIP: {
+    my ($major, $minor, $rest) = $Config{osvers} =~ / (\d+) \. (\d+) .* /x;
+    skip("wctomb() broken (at least for c.utf8) on early HP-UX", 1)
+        if   $Config{osname} eq 'hpux'
+          && $major < 11 || ($major == 11 && $minor < 31);
+
+    fresh_perl_is('use POSIX; &POSIX::wctomb(undef,0); my $string; my $len = &POSIX::wctomb($string, 0x100); print "$len:$string"',
+      "2:" . I8_to_native("\x{c4}\x{80}"),
+      {}, 'wctomb() works on UTF-8 characters');
+
   }
 }
index e65e407..807aa3a 100644 (file)
@@ -93,4 +93,23 @@ foreach ([$signo[0]],
     expected_signals($sigset, "new(@$_)", @$_);
 }
 
+SKIP:
+{
+    # CID 244386
+    # linux and freebsd do validate for positive and very large signal numbers
+    # darwin uses a macro that simply ignores large signals and shifts by
+    # a negative number for negative signals, always succeeding
+    #
+    # since the idea is to validate our code rather than the implementation
+    # of sigaddset, just test the platforms we know can fail
+    skip "Not all systems validate the signal number", 2
+      unless $^O =~ /^(linux|freebsd)$/;
+    my $badsig = -1;
+    note "badsig $badsig";
+    ok(!eval{ POSIX::SigSet->new($badsig); 1 },
+       "POSIX::SigSet->new should throw on large signal number");
+    like($@."", qr/POSIX::Sigset->new: failed to add signal $badsig/,
+         "check message");
+}
+
 done_testing();
index dfafbe9..ea335b0 100644 (file)
@@ -26,8 +26,10 @@ convert_n_test("feature2", "misc pod-html features 2",
 
 like($warn,
     qr(
-       \Acaching\ directories\ for\ later\ use\n
-       Converting\ input\ file\ \S+[/\\\]]feature2\.pod\n\z    
+    \Acaching\ directories\ for\ later\ use\n
+    Converting\ input\ file\ \S+[/\\\]]feature2\.pod\n
+    Cannot\ find\ file\ "crossref\.\*"\ directly\ under\ podpath,\ cannot\ find
+    \ suitable\ replacement:\ link\ remains\ unresolved\.\n\z
     )x,
     "misc pod-html --verbose warnings");
 
index a8c259d..99f9e56 100755 (executable)
@@ -10,7 +10,7 @@ BEGIN {
 
 use Sys::Hostname;
 
-use Test::More tests => 4;
+use Test::More tests => 2;
 
 SKIP:
 {
@@ -23,15 +23,10 @@ SKIP:
 }
 
 {
-    use warnings;
-    my $warn;
-    local $SIG{__WARN__} = sub { $warn = "@_" };
-    eval { hostname("dummy") };
-    ok($warn, "warns with an argument");
-    like($warn, qr/hostname\(\) doesn't accept any arguments/,
-         "appropriate message");
-    no warnings "deprecated";
-    undef $warn;
-    eval { hostname("dummy") };
-    is($warn, undef, "no warning when disabled");
+    local $@;
+    eval { hostname("dummy"); };
+    like($@,
+        qr/hostname\(\) does not accepts arguments \(it used to silently discard any provided\)/,
+        "hostname no longer accepts arguments"
+    );
 }
index 32a0029..95f355a 100644 (file)
@@ -1,10 +1,7 @@
 use strict;
 package Tie::Hash::NamedCapture;
 
-our $VERSION = "0.10";
-
-require XSLoader;
-XSLoader::load(); # This returns true, which makes require happy.
+our $VERSION = "0.13";
 
 __END__
 
@@ -41,6 +38,9 @@ The keys of C<%->-like hashes correspond to all buffer names found in the
 regular expression; the keys of C<%+>-like hashes list only the names of
 buffers that have captured (and that are thus associated to defined values).
 
+This implementation has been moved into the core executable, but you
+can still load this module for backward compatibility.
+
 =head1 SEE ALSO
 
 L<perlreapi>, L<re>, L<perlmodlib/Pragmatic Modules>, L<perlvar/"%+">,
index 3ebc81a..cca0527 100644 (file)
@@ -3,7 +3,15 @@ use strict;
 
 use Test::More;
 
-my %hashes = ('+' => \%+, '-' => \%-);
+# this would break the hash magic setup [perl #134193]
+my ($ca, $c) = ( \@{^CAPTURE_ALL}, \@{^CAPTURE} );
+
+my %hashes = (
+    '+' => \%+,
+    '-' => \%-,
+    '{^CAPTURE}' => \%{^CAPTURE},
+    '{^CAPTURE_ALL}' => \%{^CAPTURE_ALL},
+);
 
 foreach (['plus1'],
         ['minus1', all => 1],
@@ -20,12 +28,12 @@ foreach (['plus1'],
 is("abcdef" =~ /(?<foo>[ab])*(?<bar>c)(?<foo>d)(?<bar>[ef]*)/, 1,
    "We matched");
 
-foreach my $name (qw(+ plus1 plus2 plus3)) {
+foreach my $name (qw(+ {^CAPTURE} plus1 plus2 plus3)) {
     my $hash = $hashes{$name};
     is_deeply($hash, { foo => 'b', bar => 'c' }, "%$name is as expected");
 }
 
-foreach my $name (qw(- minus1 minus2)) {
+foreach my $name (qw(- {^CAPTURE_ALL} minus1 minus2)) {
     my $hash = $hashes{$name};
     is_deeply($hash, { foo => [qw(b d)], bar => [qw(c ef)] },
              "%$name is as expected");
index 02ba866..53c5f30 100644 (file)
@@ -12,7 +12,7 @@ use Carp '&croak';
 use DynaLoader ();
 use Exporter ();
 
-our $VERSION = '2.44';
+our $VERSION = '2.45';
 our @ISA = qw( Exporter DynaLoader IO::File );
 our @EXPORT = qw( &O_APPEND &O_CREAT &O_EXCL  &O_NDELAY &O_NOWAIT
               &O_RDONLY &O_RDWR  &O_TRUNC &O_WRONLY );
index 64e1ef3..953f82c 100644 (file)
@@ -137,7 +137,7 @@ binmode(fh)
           io = sv_2io(fh);
            fp = io ? IoOFP(io) : NULL;
           iotype = io ? IoTYPE(io) : '\0';
-           if (fp == NULL || strchr(">was+-|",iotype) == NULL) {
+           if (fp == NULL || memCHRs(">was+-|",iotype) == NULL) {
              set_errno(EBADF); set_vaxc_errno(SS$_IVCHAN); XSRETURN_UNDEF;
            }
            if (!PerlIO_getname(fp,filespec)) XSRETURN_UNDEF;
@@ -432,7 +432,7 @@ writeof(mysv)
            struct dsc$descriptor devdsc = {0, DSC$K_DTYPE_T, DSC$K_CLASS_S, devnam};
            IO *io = sv_2io(mysv);
            PerlIO *fp = io ? IoOFP(io) : NULL;
-           if (fp == NULL || strchr(">was+-|",IoTYPE(io)) == NULL) {
+           if (fp == NULL || memCHRs(">was+-|",IoTYPE(io)) == NULL) {
              set_errno(EBADF); set_vaxc_errno(SS$_IVCHAN); XSRETURN_UNDEF;
            }
            if (PerlIO_getname(fp,devnam) == NULL) { ST(0) = &PL_sv_undef; XSRETURN(1); }
index 7e8194e..a85bf23 100644 (file)
@@ -162,8 +162,6 @@ local $SIG{__WARN__} = sub { push @warnings, @_ };
 my %utf8_param_code = (
                         "_safe"                 =>  0,
                         "_safe, malformed"      =>  1,
-                        "deprecated unsafe"     => -1,
-                        "deprecated mathoms"    => -2,
                       );
 
 # This test is split into this number of files.
@@ -330,7 +328,6 @@ foreach my $name (sort keys %properties, 'octal') {
 
                     foreach my $utf8_param("_safe",
                                            "_safe, malformed",
-                                           "deprecated unsafe"
                                           )
                     {
                         my $utf8_param_code = $utf8_param_code{$utf8_param};
@@ -555,8 +552,6 @@ foreach my $name (sort keys %to_properties) {
         $char = quotemeta $char if $char eq '\\' || $char eq "'";
         foreach my $utf8_param("_safe",
                                 "_safe, malformed",
-                                "deprecated unsafe",
-                                "deprecated mathoms",
                                 )
         {
             use Config;
diff --git a/gnu/usr.bin/perl/ext/XS-APItest/t/hv_macro.t b/gnu/usr.bin/perl/ext/XS-APItest/t/hv_macro.t
new file mode 100644 (file)
index 0000000..aee8671
--- /dev/null
@@ -0,0 +1,223 @@
+#!perl -w
+
+use strict;
+use warnings;
+use Test::More;
+use Devel::Peek;
+use Config;
+
+BEGIN { use_ok('XS::APItest') }
+
+my $is_wide = $Config{ivsize} == 8;
+
+sub test_rot {
+    my ( $fnc, $n, $r, $max ) = @_;
+    my %seen;
+    my @seq;
+    while ( @seq < $max and !$seen{$n}++ ) {
+        push @seq, $n;
+        $n = $fnc->( $n, $r );
+    }
+    return \@seq;
+}
+
+for my $test (
+    [
+        # source string:
+        "\x{12}\x{34}\x{56}\x{78}\x{9A}\x{BC}\x{DE}\x{F0}" x 2,
+
+        #results:
+        #16         32              64
+        "0x3412", "0x78563412", "0xf0debc9a78563412",
+        "0x5634", "0x9A785634", "0x12f0debc9a785634",
+        "0x7856", "0xBC9A7856", "0x3412f0debc9a7856",
+        "0x9A78", "0xDEBC9A78", "0x563412f0debc9a78",
+        "0xBC9A", "0xF0DEBC9A", "0x78563412f0debc9a",
+        "0xDEBC", "0x12F0DEBC", "0x9a78563412f0debc",
+        "0xF0DE", "0x3412F0DE", "0xbc9a78563412f0de",
+        "0x12F0", "0x563412F0", "0xdebc9a78563412f0",
+    ],
+    [
+        # source string:
+        "\x{F0}\x{E1}\x{D2}\x{C3}\x{B4}\x{A5}\x{96}\x{87}" x 2,
+
+        #results:
+        #16         32              64
+        "0xe1f0", "0xc3d2e1f0", "0x8796a5b4c3d2e1f0",
+        "0xd2e1", "0xb4c3d2e1", "0xf08796a5b4c3d2e1",
+        "0xc3d2", "0xa5b4c3d2", "0xe1f08796a5b4c3d2",
+        "0xb4c3", "0x96a5b4c3", "0xd2e1f08796a5b4c3",
+        "0xa5b4", "0x8796a5b4", "0xc3d2e1f08796a5b4",
+        "0x96a5", "0xf08796a5", "0xb4c3d2e1f08796a5",
+        "0x8796", "0xe1f08796", "0xa5b4c3d2e1f08796",
+        "0xf087", "0xd2e1f087", "0x96a5b4c3d2e1f087",
+    ],
+  )
+{
+    my $str = $test->[0];
+    for my $ofs ( 0 .. 7 ) {
+        my $n = ( $ofs * 3 ) + 1;
+        my ( $want16, $want32, $want64 ) = @{$test}[ $n .. ( $n + 2 ) ];
+        my $input = join " ", map { sprintf "%02x", ord($_) } split //,
+          substr $str, $ofs, 8;
+        my $hex16 = sprintf "0x%04x",
+          XS::APItest::HvMacro::u8_to_u16_le( $str, $ofs );
+        is( $hex16, lc($want16),
+                "U8TO16_LE works as expected (hex bytes:"
+              . substr( $input, 0, 4 + 1 )
+              . ")" );
+        my $hex32 = sprintf "0x%08x",
+          XS::APItest::HvMacro::u8_to_u32_le( $str, $ofs );
+        is( $hex32, lc($want32),
+                "U8TO32_LE works as expected (hex bytes:"
+              . substr( $input, 0, 8 + 3 )
+              . ")" );
+        next unless $is_wide;
+        my $hex64 = sprintf "0x%016x",
+          XS::APItest::HvMacro::u8_to_u64_le( $str, $ofs );
+        is( $hex64, lc($want64),
+                "U8TO64_LE works as expected (hex bytes:"
+              . substr( $input, 0, 16 + 7 )
+              . ")" );
+    }
+}
+{
+    my $seq_l32 = test_rot( \&XS::APItest::HvMacro::rotl32, 1, 1, 33 );
+    is( 0 + @$seq_l32, 32, "rotl32(n,1) works as expected" );
+    is_deeply(
+        $seq_l32,
+        [
+            1,         2,         4,          8,
+            16,        32,        64,         128,
+            256,       512,       1024,       2048,
+            4096,      8192,      16384,      32768,
+            65536,     131072,    262144,     524288,
+            1048576,   2097152,   4194304,    8388608,
+            16777216,  33554432,  67108864,   134217728,
+            268435456, 536870912, 1073741824, 2147483648
+        ],
+        "rotl32(n,1) returned expected results"
+    );
+    my $seq_r32 = test_rot( \&XS::APItest::HvMacro::rotr32, 1, 1, 33 );
+    is( 0 + @$seq_r32, 32, "rotr32(n,1) works as expected" );
+    is_deeply(
+        $seq_r32,
+        [
+            1,         2147483648, 1073741824, 536870912,
+            268435456, 134217728,  67108864,   33554432,
+            16777216,  8388608,    4194304,    2097152,
+            1048576,   524288,     262144,     131072,
+            65536,     32768,      16384,      8192,
+            4096,      2048,       1024,       512,
+            256,       128,        64,         32,
+            16,        8,          4,          2
+        ],
+        "rotr32(n,1) returned expected"
+    );
+    isnt( "@$seq_l32", "@$seq_r32",
+        "rotl32(n,1) and rotr32(n,1) return different results" );
+}
+if ($is_wide) {
+    my $seq_l64 = test_rot( \&XS::APItest::HvMacro::rotl64, 1, 1, 65 );
+    is( 0 + @$seq_l64, 64, "rotl64(n,1) works as expected" );
+    is_deeply(
+        $seq_l64,
+        [
+            1,                     2,
+            4,                     8,
+            16,                    32,
+            64,                    128,
+            256,                   512,
+            1024,                  2048,
+            4096,                  8192,
+            16384,                 32768,
+            65536,                 131072,
+            262144,                524288,
+            1048576,               2097152,
+            4194304,               8388608,
+            16777216,              33554432,
+            67108864,              134217728,
+            268435456,             536870912,
+            1073741824,            2147483648,
+            4294967296,            8589934592,
+            '17179869184',         '34359738368',
+            '68719476736',         '137438953472',
+            '274877906944',        '549755813888',
+            '1099511627776',       '2199023255552',
+            '4398046511104',       '8796093022208',
+            '17592186044416',      '35184372088832',
+            '70368744177664',      '140737488355328',
+            '281474976710656',     '562949953421312',
+            '1125899906842624',    '2251799813685248',
+            '4503599627370496',    '9007199254740992',
+            '18014398509481984',   '36028797018963968',
+            '72057594037927936',   '144115188075855872',
+            '288230376151711744',  '576460752303423488',
+            '1152921504606846976', '2305843009213693952',
+            '4611686018427387904', '9223372036854775808'
+        ],
+        "rotl64(n,1) returned expected results"
+    );
+    my $seq_r64 = test_rot( \&XS::APItest::HvMacro::rotr64, 1, 1, 65 );
+    is( 0 + @$seq_r64, 64, "rotr64(n,1) works as expected" );
+    is_deeply(
+        $seq_r64,
+        [
+            1,                     '9223372036854775808',
+            '4611686018427387904', '2305843009213693952',
+            '1152921504606846976', '576460752303423488',
+            '288230376151711744',  '144115188075855872',
+            '72057594037927936',   '36028797018963968',
+            '18014398509481984',   '9007199254740992',
+            '4503599627370496',    '2251799813685248',
+            '1125899906842624',    '562949953421312',
+            '281474976710656',     '140737488355328',
+            '70368744177664',      '35184372088832',
+            '17592186044416',      '8796093022208',
+            '4398046511104',       '2199023255552',
+            '1099511627776',       '549755813888',
+            '274877906944',        '137438953472',
+            '68719476736',         '34359738368',
+            '17179869184',         8589934592,
+            4294967296,            2147483648,
+            1073741824,            536870912,
+            268435456,             134217728,
+            67108864,              33554432,
+            16777216,              8388608,
+            4194304,               2097152,
+            1048576,               524288,
+            262144,                131072,
+            65536,                 32768,
+            16384,                 8192,
+            4096,                  2048,
+            1024,                  512,
+            256,                   128,
+            64,                    32,
+            16,                    8,
+            4,                     2
+        ],
+        "rotr64(n,1) returned expected results"
+    );
+    isnt( "@$seq_l64", "@$seq_r64",
+        "rotl64(n,1) and rotr64(n,1) return different results" );
+}
+if ($is_wide) {
+    my $seed  = "perl is for good";
+    my $state = XS::APItest::HvMacro::siphash_seed_state($seed);
+    is(
+        sprintf( "%016x",
+            XS::APItest::HvMacro::siphash24( $state, "Larry wall is BDFL" ) ),
+        "71a11e065cefc12c",
+        "Siphash24 seems to work"
+    );
+    is(
+        sprintf( "%016x",
+            XS::APItest::HvMacro::siphash13( $state, "Larry wall is BDFL" ) ),
+        "adee71f47e49757a",
+        "Siphash13 seems to work"
+    );
+    is( XS::APItest::HvMacro::test_siphash24(), 0, "siphash24 test vectors check" );
+    is( XS::APItest::HvMacro::test_siphash13(), 0, "siphash13 test vectors check" );
+}
+done_testing();
+
diff --git a/gnu/usr.bin/perl/ext/XS-APItest/t/subsignature.t b/gnu/usr.bin/perl/ext/XS-APItest/t/subsignature.t
new file mode 100644 (file)
index 0000000..f7d0e25
--- /dev/null
@@ -0,0 +1,29 @@
+use warnings;
+use strict;
+
+use Test::More;
+
+BEGIN { $^H |= 0x20000; }
+
+my @t;
+
+@t = ();
+eval q{
+       use experimental 'signatures';
+       use XS::APItest qw(subsignature);
+       push @t, (subsignature $x, $y);
+       push @t, (subsignature $z, $);
+       push @t, (subsignature @rest);
+       push @t, (subsignature %rest);
+       push @t, (subsignature $one = 1);
+};
+is $@, "";
+is_deeply \@t, [
+       ['nextstate:4', 'argcheck:2:0:-', 'argelem:$x', 'argelem:$y'],
+       ['nextstate:5', 'argcheck:2:0:-', 'argelem:$z',],
+       ['nextstate:6', 'argcheck:0:0:@', 'argelem:@rest'],
+       ['nextstate:7', 'argcheck:0:0:%', 'argelem:%rest'],
+       ['nextstate:8', 'argcheck:1:1:-', 'argelem:$one:d'],
+];
+
+done_testing;
index 4602891..09159bc 100644 (file)
@@ -1,6 +1,8 @@
 #!perl -w
 
-use Test::More tests => 19;
+BEGIN { require 'charset_tools.pl'; }
+
+use Test::More tests => 35;
 
 use XS::APItest;
 
@@ -18,6 +20,36 @@ for my $func ('SvPVbyte', 'SvPVutf8') {
  is ref\$^V, 'REF', "$func(\$ro_ref) does not flatten the ref";
 }
 
+my $B6 = byte_utf8a_to_utf8n("\xC2\xB6");
+my $individual_B6_utf8_bytes = ($::IS_ASCII)
+                               ? "\xC3\x82\xC2\xB6"
+                               : I8_to_native("\xC6\xB8\xC6\xA1");
+my $data_bin = $B6;
+utf8::downgrade($data_bin);
+tie my $scalar_bin, 'TieScalarCounter', $data_bin;
+do { my $fetch = $scalar_bin };
+is tied($scalar_bin)->{fetch}, 1;
+is tied($scalar_bin)->{store}, 0;
+is SvPVutf8_nomg($scalar_bin), $individual_B6_utf8_bytes;
+is tied($scalar_bin)->{fetch}, 1;
+is tied($scalar_bin)->{store}, 0;
+is SvPVbyte_nomg($scalar_bin), $B6;
+is tied($scalar_bin)->{fetch}, 1;
+is tied($scalar_bin)->{store}, 0;
+
+my $data_uni = $B6;
+utf8::upgrade($data_uni);
+tie my $scalar_uni, 'TieScalarCounter', $data_uni;
+do { my $fetch = $scalar_uni };
+is tied($scalar_uni)->{fetch}, 1;
+is tied($scalar_uni)->{store}, 0;
+is SvPVbyte_nomg($scalar_uni), $B6;
+is tied($scalar_uni)->{fetch}, 1;
+is tied($scalar_uni)->{store}, 0;
+is SvPVutf8_nomg($scalar_uni), $individual_B6_utf8_bytes;
+is tied($scalar_uni)->{fetch}, 1;
+is tied($scalar_uni)->{store}, 0;
+
 eval 'SvPVbyte(*{chr 256})';
 like $@, qr/^Wide character/, 'SvPVbyte fails on Unicode glob';
 package r { use overload '""' => sub { substr "\x{100}\xff", -1 } }
@@ -29,3 +61,22 @@ sub FETCH { ${ +shift } }
 tie $tyre, main => bless [], r::;
 is SvPVbyte($tyre), "\xff",
   'SvPVbyte on tie returning ref that returns downgradable utf8 string';
+
+package TieScalarCounter;
+
+sub TIESCALAR {
+    my ($class, $value) = @_;
+    return bless { fetch => 0, store => 0, value => $value }, $class;
+}
+
+sub FETCH {
+    my ($self) = @_;
+    $self->{fetch}++;
+    return $self->{value};
+}
+
+sub STORE {
+    my ($self, $value) = @_;
+    $self->{store}++;
+    $self->{value} = $value;
+}
index 3bb78d4..8ebe1e3 100755 (executable)
@@ -4,6 +4,8 @@ use strict;
 use Test::More;
 use Encode;
 
+plan skip_all => 'Unclear how EBCIDC should behave' if ord "A" != 65;
+
 use XS::APItest qw(utf16_to_utf8 utf16_to_utf8_reversed);
 
 for my $ord (0, 10, 13, 78, 255, 256, 0xD7FF, 0xE000, 0xFFFD,
index 2359ca7..0a18df0 100644 (file)
@@ -584,7 +584,7 @@ sub flags_to_text($$)
 }
 
 # Possible flag returns from utf8n_to_uvchr_error().  These should have G_,
-# instead of A_, D_, but the prefixes will be used in a later commit, so
+# instead of A_, D_, but the prefixes will be used in a later commit, so
 # minimize churn by having them here.
 my @utf8n_flags_to_text =  ( qw(
         A_EMPTY
@@ -699,19 +699,20 @@ sub do_warnings_test(@)
     return $succeeded;
 }
 
-my $min_cont = (isASCII) ? 0x80 : 0xA0;
+my $min_cont = $::lowest_continuation;
 my $continuation_shift = (isASCII) ? 6 : 5;
 my $continuation_mask = (1 << $continuation_shift) - 1;
 
-sub isUTF8_CHAR($$) {   # Uses first principals to determine if this is legal
-                        # (Doesn't work if overflows)
-    my ($string, $length) = @_;
+sub isUTF8_CHAR($$) {   # Uses first principals to determine if this I8 input
+                        # is legal.  (Doesn't work if overflows)
+    my ($native, $length) = @_;
+    my $i8 = native_to_I8($native);
 
-    # Uses first principals to calculate if $string is legal
+    # Uses first principals to calculate if $i8 is legal
 
     return 0 if $length <= 0;
 
-    my $first = ord substr($string, 0, 1);
+    my $first = ord substr($i8, 0, 1);
 
     # Invariant
     return 1 if $length == 1 && $first < $min_cont;
@@ -728,12 +729,12 @@ sub isUTF8_CHAR($$) {   # Uses first principals to determine if this is legal
 
     return 0 if $utf8skip != $length;
 
-    # Acuumulate the $code point.  The remaining bits in the start byte count
+    # Accumulate the $code point.  The remaining bits in the start byte count
     # towards it
     my $cp = $bits >> $utf8skip;
 
     for my $i (1 .. $length - 1) {
-        my $ord = ord substr($string, $i, 1);
+        my $ord = ord substr($i8, $i, 1);
 
         # Wrong if not a continuation
         return 0 if $ord < $min_cont || $ord >= 0xC0;
@@ -745,12 +746,18 @@ sub isUTF8_CHAR($$) {   # Uses first principals to determine if this is legal
     # If the calculated value can be expressed in fewer bytes than were passed
     # in, is an illegal overlong.  XXX if 'chr' is not working properly, this
     # may not be right
-    my $chr = chr $cp;
+    my $chr = uni_to_native(chr $cp);
     utf8::upgrade($chr);
 
     use bytes;
     return 0 if length $chr < $length;
 
+    # Also, its possible on EBCDIC platforms that have more illegal start
+    # bytes than ASCII ones (like C3, C4) for something to have the same
+    # length but still be overlong.  We make sure the first byte isn't smaller
+    # than the first byte of the real representation.
+    return 0 if substr($native, 0, 1) lt substr($chr, 0, 1);
+
     return 1;
 }
 
@@ -786,16 +793,17 @@ if ($::TEST_CHUNK == 0
 && $ENV{PERL_DEBUG_FULL_TEST}
 && $ENV{PERL_DEBUG_FULL_TEST} == 97)
 {
+    # We construct UTF-8 (I8 on EBCDIC platforms converted later to native)
+
     my $min_cont_mask = $min_cont | 0xF;
     my @bytes = (   0,  # Placeholder to signify to use an empty string ""
-                ord 'A',# We assume that all the invariant characters are
+                 0x41,  # We assume that all the invariant characters are
                         # properly in the same class, so this is an exemplar
                         # character
                 $min_cont .. 0xFF   # But test every non-invariant individually
                 );
-    my $shift = (isASCII) ? 6 : 5;
     my $mark = $min_cont;
-    my $mask = (1 << $shift) - 1;
+    my $mask = (1 << $continuation_shift) - 1;
     for my $byte1 (@bytes) {
         for my $byte2 (@bytes) {
             last if $byte2 && ! $byte1;      # Don't test empty preceding byte
@@ -876,34 +884,31 @@ if ($::TEST_CHUNK == 0
 
                             my $should_be_string;
                             if ($length == 1) {
-                                $should_be_string = chr $cp;
+                                $should_be_string = native_to_I8(chr $cp);
                             }
                             else {
 
                                 # Starting with the code point, use first
-                                # principals to find the equivalen UTF-8
-                                # string
+                                # principals to find the equivalent I8 string
                                 my @bytes;
-                                my $uv = $cp;
+                                my $uv = ord native_to_uni(chr $cp);
                                 for (my $i = $length - 1; $i > 0; $i--) {
-                                    $bytes[$i] = chr I8_to_native(($uv & $mask)
-                                                                  | $mark);
-                                    $uv >>= $shift;
+                                    $bytes[$i] = chr (($uv & $mask) | $mark);
+                                    $uv >>= $continuation_shift;
                                 }
-                                $bytes[0] = chr I8_to_native((   $uv
-                                                        & start_mask($length))
+                                $bytes[0] = chr ($uv & start_mask($length)
                                             | start_mark($length));
                                 $should_be_string = join "", @bytes;
                             }
 
                             # If the original string and the inverse are the
                             # same, it worked.
-                            if (is($native, $should_be_string,
-                                    "utf8n_to_uvchr_msgs("
-                                 .  display_bytes($native)
-                                 . ") returns correct uv=0x"
-                                 . sprintf ("%x", $cp)))
-                            {
+                            my $test_name = "utf8n_to_uvchr_msgs("
+                                          . display_bytes($native)
+                                          . ") yields "
+                                          . sprintf ("0x%x", $cp)
+                                          . "; does its I8 eq original";
+                            if (is($should_be_string, $string, $test_name)) {
                                 my $is_surrogate = $cp >= 0xD800
                                                 && $cp <= 0xDFFF;
                                 my $got_surrogate
@@ -1410,7 +1415,7 @@ foreach my $test (@tests) {
               $allow_flags |= $::UTF8_ALLOW_OVERFLOW if $malformed_allow_type;
           }
 
-          # And we can create the malformation-related text for the the test
+          # And we can create the malformation-related text for the test
           # names we eventually will generate.
           my $malformations_name = "";
           if (@malformation_names) {
@@ -1640,7 +1645,7 @@ foreach my $test (@tests) {
 
               # We classify the warnings into certain "interesting" types,
               # described later
-              foreach my $warning_type (0..4) {
+              foreach my $warning_type (0..5) {
                 next if $skip_most_tests && $warning_type != 1;
                 foreach my $use_warn_flag (0, 1) {
                     if ($use_warn_flag) {
@@ -1704,8 +1709,9 @@ foreach my $test (@tests) {
                             = $controlling_warning_category eq 'non_unicode';
                         $expect_warnings_for_malformed = $which_func;
                     }
-                    elsif ($warning_type == 4) {  # Like type 3, but uses the
-                                                  # PERL_EXTENDED flags
+                    elsif ($warning_type =~ /^[45]$/) {
+                        # Like type 3, but uses the PERL_EXTENDED flags, and 5
+                        # uses PORTABLE warnings;
                         # The complement flags were set up so that the
                         # PERL_EXTENDED flags have been tested that they don't
                         # trigger wrongly for too small code points.  And the
@@ -1715,7 +1721,13 @@ foreach my $test (@tests) {
                         # trigger the PERL_EXTENDED flags.
                         next if ! requires_extended_utf8($allowed_uv);
                         next if $controlling_warning_category ne 'non_unicode';
-                        $eval_warn = "no warnings; use warnings 'non_unicode'";
+                        $eval_warn = "no warnings;";
+                        if ($warning_type == 4) {
+                            $eval_warn .= " use warnings 'non_unicode'";
+                        }
+                        else {
+                            $eval_warn .= " use warnings 'portable'";
+                        }
                         $expect_regular_warnings = 1;
                         $expect_warnings_for_overflow = 1;
                         $expect_warnings_for_malformed = 0;
index 8966aef..38928d1 100644 (file)
@@ -77,3 +77,13 @@ EOCBU
 case "$usemallocwrap" in
 '') usemallocwrap='define' ;;
 esac
+
+test "$optimize" || optimize='-O2'
+
+# Configure can't find dlopen() when using g++
+# linux, freebsd and solaris hints have the same workaround
+case "$cc" in
+*g++*)
+  d_dlopen='define'
+  ;;
+esac
index 77a4c84..fa8c312 100644 (file)
@@ -5,8 +5,17 @@
 #define CAN64BITHASH
 #endif
 
+#ifdef CAN64BITHASH
+  #ifndef U64TYPE
+  /* This probably isn't going to work, but failing with a compiler error due to
+   lack of uint64_t is no worse than failing right now with an #error.  */
+  #define U64 uint64_t
+  #endif
+#endif
+
+
 /*-----------------------------------------------------------------------------
- * Endianess, misalignment capabilities and util macros
+ * Endianess and util macros
  *
  * The following 3 macros are defined in this section. The other macros defined
  * are only needed to help derive these 3.
  * ROTR64(x,r)      Rotate x right by r bits
  */
 
-#ifndef U32_ALIGNMENT_REQUIRED
-  #if (BYTEORDER == 0x1234 || BYTEORDER == 0x12345678)
-    #define U8TO16_LE(ptr)   (*((const U16*)(ptr)))
-    #define U8TO32_LE(ptr)   (*((const U32*)(ptr)))
-    #define U8TO64_LE(ptr)   (*((const U64*)(ptr)))
-  #elif (BYTEORDER == 0x4321 || BYTEORDER == 0x87654321)
-    #if defined(__GNUC__) && (__GNUC__>4 || (__GNUC__==4 && __GNUC_MINOR__>=3))
-      #define U8TO16_LE(ptr)   (__builtin_bswap16(*((U16*)(ptr))))
-      #define U8TO32_LE(ptr)   (__builtin_bswap32(*((U32*)(ptr))))
-      #define U8TO64_LE(ptr)   (__builtin_bswap64(*((U64*)(ptr))))
-    #endif
-  #endif
-#endif
-
 #ifndef U8TO16_LE
-    /* Without a known fast bswap32 we're just as well off doing this */
-  #define U8TO16_LE(ptr)   ((U32)(ptr)[0]|(U32)(ptr)[1]<<8)
-  #define U8TO32_LE(ptr)   ((U32)(ptr)[0]|(U32)(ptr)[1]<<8|(U32)(ptr)[2]<<16|(U32)(ptr)[3]<<24)
-  #define U8TO64_LE(ptr)   ((U64)(ptr)[0]|(U64)(ptr)[1]<<8|(U64)(ptr)[2]<<16|(U64)(ptr)[3]<<24|\
-                            (U64)(ptr)[4]<<32|(U64)(ptr)[5]<<40|\
-                            (U64)(ptr)[6]<<48|(U64)(ptr)[7]<<56)
-#endif
+  #define _shifted_octet(type,ptr,idx,shift) (((type)(((U8*)(ptr))[(idx)]))<<(shift))
+    #ifdef USE_UNALIGNED_PTR_DEREF
+        #define U8TO16_LE(ptr)   (*((const U16*)(ptr)))
+        #define U8TO32_LE(ptr)   (*((const U32*)(ptr)))
+        #define U8TO64_LE(ptr)   (*((const U64*)(ptr)))
+    #else
+        #define U8TO16_LE(ptr)   (_shifted_octet(U16,(ptr),0, 0)|\
+                                  _shifted_octet(U16,(ptr),1, 8))
 
-#ifdef CAN64BITHASH
-  #ifndef U64TYPE
-  /* This probably isn't going to work, but failing with a compiler error due to
-   lack of uint64_t is no worse than failing right now with an #error.  */
-  #define U64 uint64_t
-  #endif
+        #define U8TO32_LE(ptr)   (_shifted_octet(U32,(ptr),0, 0)|\
+                                  _shifted_octet(U32,(ptr),1, 8)|\
+                                  _shifted_octet(U32,(ptr),2,16)|\
+                                  _shifted_octet(U32,(ptr),3,24))
+
+        #define U8TO64_LE(ptr)   (_shifted_octet(U64,(ptr),0, 0)|\
+                                  _shifted_octet(U64,(ptr),1, 8)|\
+                                  _shifted_octet(U64,(ptr),2,16)|\
+                                  _shifted_octet(U64,(ptr),3,24)|\
+                                  _shifted_octet(U64,(ptr),4,32)|\
+                                  _shifted_octet(U64,(ptr),5,40)|\
+                                  _shifted_octet(U64,(ptr),6,48)|\
+                                  _shifted_octet(U64,(ptr),7,56))
+    #endif
 #endif
 
 /* Find best way to ROTL32/ROTL64 */
index 7658ce4..85dd083 100644 (file)
@@ -1,6 +1,6 @@
 package PerlIO;
 
-our $VERSION = '1.10';
+our $VERSION = '1.11';
 
 # Map layer name to package that defines it
 our %alias;
@@ -35,14 +35,19 @@ PerlIO - On demand loader for PerlIO layers and root of PerlIO::* name space
 
 =head1 SYNOPSIS
 
-  open($fh, "<:crlf", "my.txt"); # support platform-native and 
-                                 # CRLF text files
+  # support platform-native and CRLF text files
+  open(my $fh, "<:crlf", "my.txt") or die "open failed: $!";
 
-  open($fh, "<", "his.jpg"); # portably open a binary file for reading
-  binmode($fh);
+  # append UTF-8 encoded text
+  open(my $fh, ">>:encoding(UTF-8)", "some.log")
+    or die "open failed: $!";
+
+  # portably open a binary file for reading
+  open(my $fh, "<", "his.jpg") or die "open failed: $!";
+  binmode($fh) or die "binmode failed: $!";
 
   Shell:
-    PERLIO=perlio perl ....
+    PERLIO=:perlio perl ....
 
 =head1 DESCRIPTION
 
@@ -51,13 +56,52 @@ C<binmode> layer specification then C code performs the equivalent of:
 
   use PerlIO 'foo';
 
-The perl code in PerlIO.pm then attempts to locate a layer by doing
+The Perl code in PerlIO.pm then attempts to locate a layer by doing
 
   require PerlIO::foo;
 
 Otherwise the C<PerlIO> package is a place holder for additional
 PerlIO related functions.
 
+=head2 Layers
+
+Generally speaking, PerlIO layers (previously sometimes referred to as
+"disciplines") are an ordered stack applied to a filehandle (specified as
+a space- or colon-separated list, conventionally written with a leading
+colon).  Each layer performs some operation on any input or output, except
+when bypassed such as with C<sysread> or C<syswrite>.  Read operations go
+through the stack in the order they are set (left to right), and write
+operations in the reverse order.
+
+There are also layers which actually just set flags on lower layers, or
+layers that modify the current stack but don't persist on the stack
+themselves; these are referred to as pseudo-layers.
+
+When opening a handle, it will be opened with any layers specified
+explicitly in the open() call (or the platform defaults, if specified as
+a colon with no following layers).
+
+If layers are not explicitly specified, the handle will be opened with the
+layers specified by the L<${^OPEN}|perlvar/"${^OPEN}"> variable (usually
+set by using the L<open> pragma for a lexical scope, or the C<-C>
+command-line switch or C<PERL_UNICODE> environment variable for the main
+program scope).
+
+If layers are not specified in the open() call or C<${^OPEN}> variable,
+the handle will be opened with the default layer stack configured for that
+architecture; see L</"Defaults and how to override them">.
+
+Some layers will automatically insert required lower level layers if not
+present; for example C<:perlio> will insert C<:unix> below itself for low
+level IO, and C<:encoding> will insert the platform defaults for buffered
+IO.
+
+The C<binmode> function can be called on an opened handle to push
+additional layers onto the stack, which may also modify the existing
+layers.  C<binmode> called with no layers will remove or unset any
+existing layers which transform the byte stream, making the handle
+suitable for binary data.
+
 The following layers are currently defined:
 
 =over 4
@@ -67,17 +111,21 @@ The following layers are currently defined:
 Lowest level layer which provides basic PerlIO operations in terms of
 UNIX/POSIX numeric file descriptor calls
 (open(), read(), write(), lseek(), close()).
+It is used even on non-Unix architectures, and most other layers operate on
+top of it.
 
 =item :stdio
 
 Layer which calls C<fread>, C<fwrite> and C<fseek>/C<ftell> etc.  Note
 that as this is "real" stdio it will ignore any layers beneath it and
 go straight to the operating system via the C library as usual.
+This layer implements both low level IO and buffering, but is rarely used
+on modern architectures.
 
 =item :perlio
 
 A from scratch implementation of buffering for PerlIO. Provides fast
-access to the buffer for C<sv_gets> which implements perl's readline/E<lt>E<gt>
+access to the buffer for C<sv_gets> which implements Perl's readline/E<lt>E<gt>
 and in general attempts to minimize data copying.
 
 C<:perlio> will insert a C<:unix> layer below itself to do low level IO.
@@ -92,81 +140,98 @@ refuse to be pushed on top of itself.
 It currently does I<not> mimic MS-DOS as far as treating of Control-Z
 as being an end-of-file marker.
 
-Based on the C<:perlio> layer.
-
-=item :utf8
-
-Declares that the stream accepts perl's I<internal> encoding of
-characters.  (Which really is UTF-8 on ASCII machines, but is
-UTF-EBCDIC on EBCDIC machines.)  This allows any character perl can
-represent to be read from or written to the stream. The UTF-X encoding
-is chosen to render simple text parts (i.e.  non-accented letters,
-digits and common punctuation) human readable in the encoded file.
-
-(B<CAUTION>: This layer does not validate byte sequences.  For reading input,
-you should instead use C<:encoding(UTF-8)> instead of bare C<:utf8>.)
-
-Here is how to write your native data out using UTF-8 (or UTF-EBCDIC)
-and then read it back in.
+On DOS/Windows like architectures where this layer is part of the defaults,
+it also acts like the C<:perlio> layer, and removing the CRLF translation
+(such as with C<:raw>) will only unset the CRLF translation flag.  Since
+Perl 5.14, you can also apply another C<:crlf> layer later, such as when
+the CRLF translation must occur after an encoding layer.  On other
+architectures, it is a mundane CRLF translation layer and can be added and
+removed normally.
 
-       open(F, ">:utf8", "data.utf");
-       print F $out;
-       close(F);
+    # translate CRLF after encoding on Perl 5.14 or newer
+    binmode $fh, ":raw:encoding(UTF-16LE):crlf"
+      or die "binmode failed: $!";
 
-       open(F, "<:utf8", "data.utf");
-       $in = <F>;
-       close(F);
+=item :utf8
 
+Pseudo-layer that declares that the stream accepts Perl's I<internal>
+upgraded encoding of characters, which is approximately UTF-8 on ASCII
+machines, but UTF-EBCDIC on EBCDIC machines.  This allows any character
+Perl can represent to be read from or written to the stream.
+
+This layer (which actually sets a flag on the preceding layer, and is
+implicitly set by any C<:encoding> layer) does not translate or validate
+byte sequences.  It instead indicates that the byte stream will have been
+arranged by other layers to be provided in Perl's internal upgraded
+encoding, which Perl code (and correctly written XS code) will interpret
+as decoded Unicode characters.
+
+B<CAUTION>: Do not use this layer to translate from UTF-8 bytes, as
+invalid UTF-8 or binary data will result in malformed Perl strings.  It is
+unlikely to produce invalid UTF-8 when used for output, though it will
+instead produce UTF-EBCDIC on EBCDIC systems.  The C<:encoding(UTF-8)>
+layer (hyphen is significant) is preferred as it will ensure translation
+between valid UTF-8 bytes and valid Unicode characters.
 
 =item :bytes
 
-This is the inverse of the C<:utf8> layer. It turns off the flag
+This is the inverse of the C<:utf8> pseudo-layer.  It turns off the flag
 on the layer below so that data read from it is considered to
-be "octets" i.e. characters in the range 0..255 only. Likewise
-on output perl will warn if a "wide" character is written
-to a such a stream.
+be Perl's internal downgraded encoding, thus interpreted as the native
+single-byte encoding of Latin-1 or EBCDIC.  Likewise on output Perl will
+warn if a "wide" character (a codepoint not in the range 0..255) is
+written to a such a stream.
+
+This is very dangerous to push on a handle using an C<:encoding> layer,
+as such a layer assumes to be working with Perl's internal upgraded
+encoding, so you will likely get a mangled result.  Instead use C<:raw> or
+C<:pop> to remove encoding layers.
 
 =item :raw
 
-The C<:raw> layer is I<defined> as being identical to calling
+The C<:raw> pseudo-layer is I<defined> as being identical to calling
 C<binmode($fh)> - the stream is made suitable for passing binary data,
-i.e. each byte is passed as-is. The stream will still be
-buffered.
+i.e. each byte is passed as-is. The stream will still be buffered
+(but this was not always true before Perl 5.14).
 
-In Perl 5.6 and some books the C<:raw> layer (previously sometimes also
-referred to as a "discipline") is documented as the inverse of the
-C<:crlf> layer. That is no longer the case - other layers which would
-alter the binary nature of the stream are also disabled.  If you want UNIX
-line endings on a platform that normally does CRLF translation, but still
-want UTF-8 or encoding defaults, the appropriate thing to do is to add
-C<:perlio> to the PERLIO environment variable.
+In Perl 5.6 and some books the C<:raw> layer is documented as the inverse
+of the C<:crlf> layer. That is no longer the case - other layers which
+would alter the binary nature of the stream are also disabled.  If you
+want UNIX line endings on a platform that normally does CRLF translation,
+but still want UTF-8 or encoding defaults, the appropriate thing to do is
+to add C<:perlio> to the PERLIO environment variable, or open the handle
+explicitly with that layer, to replace the platform default of C<:crlf>.
 
 The implementation of C<:raw> is as a pseudo-layer which when "pushed"
-pops itself and then any layers which do not declare themselves as suitable
-for binary data. (Undoing :utf8 and :crlf are implemented by clearing
-flags rather than popping layers but that is an implementation detail.)
+pops itself and then any layers which would modify the binary data stream.
+(Undoing C<:utf8> and C<:crlf> may be implemented by clearing flags
+rather than popping layers but that is an implementation detail.)
 
 As a consequence of the fact that C<:raw> normally pops layers,
 it usually only makes sense to have it as the only or first element in
 a layer specification.  When used as the first element it provides
 a known base on which to build e.g.
 
-    open($fh,":raw:utf8",...)
+    open(my $fh,">:raw:encoding(UTF-8)",...)
+      or die "open failed: $!";
 
-will construct a "binary" stream, but then enable UTF-8 translation.
+will construct a "binary" stream regardless of the platform defaults,
+but then enable UTF-8 translation.
 
 =item :pop
 
-A pseudo layer that removes the top-most layer. Gives perl code a
+A pseudo-layer that removes the top-most layer. Gives Perl code a
 way to manipulate the layer stack.  Note that C<:pop> only works on
-real layers and will not undo the effects of pseudo layers like
-C<:utf8>.  An example of a possible use might be:
+real layers and will not undo the effects of pseudo-layers or flags
+like C<:utf8>.  An example of a possible use might be:
 
-    open($fh,...)
+    open(my $fh,...) or die "open failed: $!";
     ...
-    binmode($fh,":encoding(...)");  # next chunk is encoded
+    binmode($fh,":encoding(...)") or die "binmode failed: $!";
+    # next chunk is encoded
     ...
-    binmode($fh,":pop");            # back to un-encoded
+    binmode($fh,":pop") or die "binmode failed: $!";
+    # back to un-encoded
 
 A more elegant (and safer) interface is needed.
 
@@ -174,25 +239,24 @@ A more elegant (and safer) interface is needed.
 
 On Win32 platforms this I<experimental> layer uses the native "handle" IO
 rather than the unix-like numeric file descriptor layer. Known to be
-buggy as of perl 5.8.2.
+buggy as of Perl 5.8.2.
 
 =back
 
 =head2 Custom Layers
 
 It is possible to write custom layers in addition to the above builtin
-ones, both in C/XS and Perl.  Two such layers (and one example written
-in Perl using the latter) come with the Perl distribution.
+ones, both in C/XS and Perl, as a module named C<< PerlIO::<layer name> >>.
+Some custom layers come with the Perl distribution.
 
 =over 4
 
 =item :encoding
 
-Use C<:encoding(ENCODING)> either in open() or binmode() to install
-a layer that transparently does character set and encoding transformations,
-for example from Shift-JIS to Unicode.  Note that under C<stdio>
-an C<:encoding> also enables C<:utf8>.  See L<PerlIO::encoding>
-for more information.
+Use C<:encoding(ENCODING)> to transparently do character set and encoding
+transformations, for example from Shift-JIS to Unicode.  Note that an
+C<:encoding> also enables C<:utf8>.  See L<PerlIO::encoding> for more
+information.
 
 =item :mmap
 
@@ -207,64 +271,81 @@ layer. Writes also behave like the C<:perlio> layer, as C<mmap()> for write
 needs extra house-keeping (to extend the file) which negates any advantage.
 
 The C<:mmap> layer will not exist if the platform does not support C<mmap()>.
+See L<PerlIO::mmap> for more information.
 
 =item :via
 
-Use C<:via(MODULE)> either in open() or binmode() to install a layer
-that does whatever transformation (for example compression /
-decompression, encryption / decryption) to the filehandle.
+C<:via(MODULE)> allows a transformation to be applied by an arbitrary Perl
+module, for example compression / decompression, encryption / decryption.
 See L<PerlIO::via> for more information.
 
+=item :scalar
+
+A layer implementing "in memory" files using scalar variables,
+automatically used in place of the platform defaults for IO when opening
+such a handle.  As such, the scalar is expected to act like a file, only
+containing or storing bytes.  See L<PerlIO::scalar> for more information.
+
 =back
 
 =head2 Alternatives to raw
 
 To get a binary stream an alternate method is to use:
 
-    open($fh,"whatever")
-    binmode($fh);
+    open(my $fh,"<","whatever") or die "open failed: $!";
+    binmode($fh) or die "binmode failed: $!";
 
-this has the advantage of being backward compatible with how such things have
-had to be coded on some platforms for years.
+This has the advantage of being backward compatible with older versions
+of Perl that did not use PerlIO or where C<:raw> was buggy (as it was
+before Perl 5.14).
 
 To get an unbuffered stream specify an unbuffered layer (e.g. C<:unix>)
 in the open call:
 
-    open($fh,"<:unix",$path)
+    open(my $fh,"<:unix",$path) or die "open failed: $!";
 
 =head2 Defaults and how to override them
 
 If the platform is MS-DOS like and normally does CRLF to "\n"
-translation for text files then the default layers are :
+translation for text files then the default layers are:
 
-  unix crlf
-
-(The low level "unix" layer may be replaced by a platform specific low
-level layer.)
+  :unix:crlf
 
 Otherwise if C<Configure> found out how to do "fast" IO using the system's
-stdio, then the default layers are:
+stdio (not common on modern architectures), then the default layers are:
 
-  unix stdio
+  :stdio
 
 Otherwise the default layers are
 
-  unix perlio
-
-These defaults may change once perlio has been better tested and tuned.
+  :unix:perlio
 
-The default can be overridden by setting the environment variable
-PERLIO to a space separated list of layers (C<unix> or platform low
-level layer is always pushed first).
+Note that the "default stack" depends on the operating system and on the
+Perl version, and both the compile-time and runtime configurations of
+Perl.  The default can be overridden by setting the environment variable
+PERLIO to a space or colon separated list of layers, however this cannot
+be used to set layers that require loading modules like C<:encoding>.
 
 This can be used to see the effect of/bugs in the various layers e.g.
 
   cd .../perl/t
-  PERLIO=stdio  ./perl harness
-  PERLIO=perlio ./perl harness
+  PERLIO=:stdio  ./perl harness
+  PERLIO=:perlio ./perl harness
 
 For the various values of PERLIO see L<perlrun/PERLIO>.
 
+The following table summarizes the default layers on UNIX-like and
+DOS-like platforms and depending on the setting of C<$ENV{PERLIO}>:
+
+ PERLIO     UNIX-like                   DOS-like
+ ------     ---------                   --------
+ unset / "" :unix:perlio / :stdio [1]   :unix:crlf
+ :stdio     :stdio                      :stdio
+ :perlio    :unix:perlio                :unix:perlio
+
+ # [1] ":stdio" if Configure found out how to do "fast stdio" (depends
+ # on the stdio implementation) and in Perl 5.8, else ":unix:perlio"
+
 =head2 Querying the layers of filehandles
 
 The following returns the B<names> of the PerlIO layers on a filehandle.
@@ -272,21 +353,7 @@ The following returns the B<names> of the PerlIO layers on a filehandle.
    my @layers = PerlIO::get_layers($fh); # Or FH, *FH, "FH".
 
 The layers are returned in the order an open() or binmode() call would
-use them.  Note that the "default stack" depends on the operating
-system and on the Perl version, and both the compile-time and
-runtime configurations of Perl.
-
-The following table summarizes the default layers on UNIX-like and
-DOS-like platforms and depending on the setting of C<$ENV{PERLIO}>:
-
- PERLIO     UNIX-like                   DOS-like
- ------     ---------                   --------
- unset / "" unix perlio / stdio [1]     unix crlf
- stdio      unix perlio / stdio [1]     stdio
- perlio     unix perlio                 unix perlio
-
- # [1] "stdio" if Configure found out how to do "fast stdio" (depends
- # on the stdio implementation) and in Perl 5.8, otherwise "unix perlio"
+use them, and without colons.
 
 By default the layers from the input side of the filehandle are
 returned; to get the output side, use the optional C<output> argument:
@@ -294,8 +361,7 @@ returned; to get the output side, use the optional C<output> argument:
    my @layers = PerlIO::get_layers($fh, output => 1);
 
 (Usually the layers are identical on either side of a filehandle but
-for example with sockets there may be differences, or if you have
-been using the C<open> pragma.)
+for example with sockets there may be differences.)
 
 There is no set_layers(), nor does get_layers() return a tied array
 mirroring the stack, or anything fancy like that.  This is not
@@ -306,7 +372,7 @@ You are supposed to use open() and binmode() to manipulate the stack.
 B<Implementation details follow, please close your eyes.>
 
 The arguments to layers are by default returned in parentheses after
-the name of the layer, and certain layers (like C<utf8>) are not real
+the name of the layer, and certain layers (like C<:utf8>) are not real
 layers but instead flags on real layers; to get all of these returned
 separately, use the optional C<details> argument:
 
index dbe0719..70bcac3 100644 (file)
@@ -4,7 +4,7 @@ use strict;
 use warnings;
 no warnings 'redefine';
 
-our $VERSION = '3.04';
+our $VERSION = '3.05';
 $VERSION = eval $VERSION;
 
 BEGIN {
@@ -117,7 +117,7 @@ C<new> starts a new thread of execution in the referenced subroutine. The
 optional list is passed as parameters to the subroutine. Execution
 continues in both the subroutine and the code after the C<new> call.
 
-C<Thread-&gt;new> returns a thread object representing the newly created
+C<< Thread->new >> returns a thread object representing the newly created
 thread.
 
 =item lock VARIABLE
@@ -148,7 +148,7 @@ C<lock(\$a)> is equivalent to C<lock($a)>, while C<lock(\\$a)> is not.
 
 C<async> creates a thread to execute the block immediately following
 it.  This block is treated as an anonymous sub, and so must have a
-semi-colon after the closing brace. Like C<Thread-&gt;new>, C<async>
+semi-colon after the closing brace. Like C<< Thread->new >>, C<async>
 returns a thread object.
 
 =item Thread->self
index d2f04bc..6c20d90 100644 (file)
@@ -5,7 +5,7 @@ BEGIN {
     @INC = '../lib';
 }
 
-use Test::More tests => 27;
+use Test::More tests => 29;
 
 use_ok('Tie::StdHandle');
 
@@ -72,6 +72,17 @@ is($b, "rhubarbX\n", "b eq rhubarbX");
 $b = <$f>;
 is($b, "89\n", "b eq 89");
 
+# binmode should pass through layer argument
+
+binmode $f, ':raw';
+ok !grep( $_ eq 'utf8', PerlIO::get_layers(tied(*$f)) ),
+    'no utf8 in layers after binmode :raw';
+binmode $f, ':utf8';
+ok grep( $_ eq 'utf8', PerlIO::get_layers(tied(*$f)) ),
+    'utf8 is in layers after binmode :utf8';
+
+# finish up
+
 ok(eof($f), "eof");
 ok(close($f), "close");
 
index dfb8663..fb79a98 100644 (file)
@@ -4,7 +4,7 @@ use strict;
 
 use Tie::Handle;
 our @ISA = 'Tie::Handle';
-our $VERSION = '4.5';
+our $VERSION = '4.6';
 
 =head1 NAME
 
@@ -48,7 +48,7 @@ sub TELL    { tell($_[0]) }
 sub FILENO  { fileno($_[0]) }
 sub SEEK    { seek($_[0],$_[1],$_[2]) }
 sub CLOSE   { close($_[0]) }
-sub BINMODE { binmode($_[0]) }
+sub BINMODE { &CORE::binmode(shift, @_) }
 
 sub OPEN
 {
index ca3cf7b..3e21381 100644 (file)
@@ -1,7 +1,7 @@
 package open;
 use warnings;
 
-our $VERSION = '1.11';
+our $VERSION = '1.12';
 
 require 5.008001; # for PerlIO::get_layers()
 
@@ -147,103 +147,101 @@ open - perl pragma to set default PerlIO layers for input and output
 
 =head1 SYNOPSIS
 
-    use open IN  => ":crlf", OUT => ":bytes";
-    use open OUT => ':utf8';
-    use open IO  => ":encoding(iso-8859-7)";
+    use open IN  => ':crlf', OUT => ':raw';
+    open my $in, '<', 'foo.txt' or die "open failed: $!";
+    my $line = <$in>; # CRLF translated
+    close $in;
+    open my $out, '>', 'bar.txt' or die "open failed: $!";
+    print $out $line; # no translation of bytes
+    close $out;
+
+    use open OUT => ':encoding(UTF-8)';
+    use open IN  => ':encoding(iso-8859-7)';
 
     use open IO  => ':locale';
 
+    # IO implicit only for :utf8, :encoding, :locale
     use open ':encoding(UTF-8)';
-    use open ':locale';
     use open ':encoding(iso-8859-7)';
+    use open ':locale';
 
-    use open ':std';
+    # with :std, also affect global standard handles
+    use open ':std', ':encoding(UTF-8)';
+    use open ':std', OUT => ':encoding(cp1252)';
+    use open ':std', IO => ':raw :encoding(UTF-16LE)';
 
 =head1 DESCRIPTION
 
 Full-fledged support for I/O layers is now implemented provided
-Perl is configured to use PerlIO as its IO system (which is now the
-default).
+Perl is configured to use PerlIO as its IO system (which has been the
+default since 5.8, and the only supported configuration since 5.16).
 
 The C<open> pragma serves as one of the interfaces to declare default
-"layers" (also known as "disciplines") for all I/O. Any two-argument
-open(), readpipe() (aka qx//) and similar operators found within the
-lexical scope of this pragma will use the declared defaults.
-Even three-argument opens may be affected by this pragma
-when they don't specify IO layers in MODE.
+"layers" (previously known as "disciplines") for all I/O. Any open(),
+readpipe() (aka qx//) and similar operators found within the
+lexical scope of this pragma will use the declared defaults via the
+L<C<${^OPEN}>|perlvar/${^OPEN}> variable.
+
+Layers are specified with a leading colon by convention. You can
+specify a stack of multiple layers as a space-separated string.
+See L<PerlIO> for more information on the available layers.
 
 With the C<IN> subpragma you can declare the default layers
 of input streams, and with the C<OUT> subpragma you can declare
-the default layers of output streams.  With the C<IO>  subpragma
-you can control both input and output streams simultaneously.
+the default layers of output streams.  With the C<IO> subpragma
+(may be omitted for C<:utf8>, C<:locale>, or C<:encoding>) you
+can control both input and output streams simultaneously.
 
-If you have a legacy encoding, you can use the C<:encoding(...)> tag.
+When open() is given an explicit list of layers (with the three-arg
+syntax), they override the list declared using this pragma.  open() can
+also be given a single colon (:) for a layer name, to override this pragma
+and use the default as detailed in
+L<PerlIO/Defaults and how to override them>.
+
+To translate from and to an arbitrary text encoding, use the C<:encoding>
+layer.  The matching of encoding names in C<:encoding> is loose: case does
+not matter, and many encodings have several aliases.  See
+L<Encode::Supported> for details and the list of supported locales.
 
 If you want to set your encoding layers based on your
-locale environment variables, you can use the C<:locale> tag.
+locale environment variables, you can use the C<:locale> pseudo-layer.
 For example:
 
     $ENV{LANG} = 'ru_RU.KOI8-R';
     # the :locale will probe the locale environment variables like LANG
     use open OUT => ':locale';
-    open(O, ">koi8");
-    print O chr(0x430); # Unicode CYRILLIC SMALL LETTER A = KOI8-R 0xc1
-    close O;
-    open(I, "<koi8");
-    printf "%#x\n", ord(<I>), "\n"; # this should print 0xc1
-    close I;
-
-These are equivalent
-
-    use open ':encoding(UTF-8)';
-    use open IO => ':encoding(UTF-8)';
-
-as are these
-
-    use open ':locale';
-    use open IO => ':locale';
-
-and these
-
-    use open ':encoding(iso-8859-7)';
-    use open IO => ':encoding(iso-8859-7)';
-
-The matching of encoding names is loose: case does not matter, and
-many encodings have several aliases.  See L<Encode::Supported> for
-details and the list of supported locales.
-
-When open() is given an explicit list of layers (with the three-arg
-syntax), they override the list declared using this pragma.  open() can
-also be given a single colon (:) for a layer name, to override this pragma
-and use the default (C<:raw> on Unix, C<:crlf> on Windows).
-
-The C<:std> subpragma on its own has no effect, but if combined with
-the C<:utf8> or C<:encoding> subpragmas, it converts the standard
-filehandles (STDIN, STDOUT, STDERR) to comply with encoding selected
-for input/output handles.  For example, if both input and out are
-chosen to be C<:encoding(UTF-8)>, a C<:std> will mean that STDIN, STDOUT,
-and STDERR are also in C<:encoding(UTF-8)>.  On the other hand, if only
-output is chosen to be in C<< :encoding(koi8r) >>, a C<:std> will cause
-only the STDOUT and STDERR to be in C<koi8r>.  The C<:locale> subpragma
-implicitly turns on C<:std>.
-
-The logic of C<:locale> is described in full in L<encoding>,
+    open(my $out, '>', 'koi8') or die "open failed: $!";
+    print $out chr(0x430); # CYRILLIC SMALL LETTER A = KOI8-R 0xc1
+    close $out;
+    open(my $in, '<', 'koi8') or die "open failed: $!";
+    printf "%#x\n", ord(<$in>); # this should print 0xc1
+    close $in;
+
+The logic of C<:locale> is described in full in
+L<encoding/The C<:locale> sub-pragma>,
 but in short it is first trying nl_langinfo(CODESET) and then
 guessing from the LC_ALL and LANG locale environment variables.
-
-Directory handles may also support PerlIO layers in the future.
-
-=head1 NONPERLIO FUNCTIONALITY
-
-If Perl is not built to use PerlIO as its IO system then only the two
-pseudo-layers C<:bytes> and C<:crlf> are available.
-
-The C<:bytes> layer corresponds to "binary mode" and the C<:crlf>
-layer corresponds to "text mode" on platforms that distinguish
-between the two modes when opening files (which is many DOS-like
-platforms, including Windows).  These two layers are no-ops on
-platforms where binmode() is a no-op, but perform their functions
-everywhere if PerlIO is enabled.
+C<:locale> also implicitly turns on C<:std>.
+
+C<:std> is not a layer but an additional subpragma.  When specified in the
+import list, it activates an additional functionality of pushing the
+layers selected for input/output handles to the standard filehandles
+(STDIN, STDOUT, STDERR).  If the new layers and existing layer stack both
+end with an C<:encoding> layer, the existing C<:encoding> layer will also
+be removed.
+
+For example, if both input and out are chosen to be C<:encoding(UTF-8)>, a
+C<:std> will mean that STDIN, STDOUT, and STDERR will also have
+C<:encoding(UTF-8)> set.  On the other hand, if only output is chosen to
+be in C<:encoding(koi8r)>, a C<:std> will cause only the STDOUT and STDERR
+to be in C<koi8r>.
+
+The effect of C<:std> is not lexical as it modifies the layer stack of the
+global handles.  If you wish to apply only this global effect and not the
+effect on handles that are opened in that scope, you can isolate the call
+to this pragma in its own lexical scope.
+
+    { use open ':std', IO => ':encoding(UTF-8)' }
 
 =head1 IMPLEMENTATION DETAILS
 
diff --git a/gnu/usr.bin/perl/lib/perl5db/t/gh-17660 b/gnu/usr.bin/perl/lib/perl5db/t/gh-17660
new file mode 100644 (file)
index 0000000..a818f79
--- /dev/null
@@ -0,0 +1,14 @@
+#!perl
+
+package Bar;
+our $VERSION = "2.000";
+
+sub f {}
+
+package Foo;
+our @ISA = qw(Bar);
+our $VERSION = "1.000";
+
+package main;
+Foo->f();
+
index bb6180b..08c34d9 100644 (file)
@@ -69,7 +69,7 @@ like($result, qr/Please use perlbug interactively./,
 # test -okay (mostly noninteractive)
 $result = runperl( progfile => $extracted_program,
                    args     => ['-okay', '-F', $testreport] );
-like($result, qr/Message saved/, 'build report saved');
+like($result, qr/Report saved/, 'build report saved');
 like(_slurp($testreport), qr/Perl reported to build OK on this system/,
      'build report looks sane');
 unlink $testreport;
@@ -82,7 +82,7 @@ $result = runperl( progfile => $extracted_program,
                                 '-nokay',
                                 '-e', 'file',
                                 '-F', $testreport] );
-like($result, qr/Message saved/, 'build failure report saved');
+like($result, qr/Report saved/, 'build failure report saved');
 like(_slurp($testreport), qr/This is a build failure report for perl/,
      'build failure report looks sane');
 unlink $testreport;
@@ -104,7 +104,7 @@ $result = runperl( progfile => $extracted_program,
                                 '-b', 'testreportbody',
                                 '-e', 'file',
                                 '-F', $testreport] );
-like($result, qr/Message saved/, 'fake bug report saved');
+like($result, qr/Report saved/, 'fake bug report saved');
 my $contents = _slurp($testreport);
 like($contents, qr/Subject: testingperlbug/,
      'Subject included in fake bug report');
@@ -136,7 +136,7 @@ $result = runperl( progfile => $extracted_program,
                                 '-p', $attachment,
                                 '-e', 'file',
                                 '-F', $testreport] );
-like($result, qr/Message saved/, 'fake bug report saved');
+like($result, qr/Report saved/, 'fake bug report saved');
 my $contents = _slurp($testreport);
 unlink $testreport, $body, $attachment;
 like($contents, qr/Subject: testing perlbug/,
index 52e3359..98dc294 100644 (file)
@@ -1,5 +1,5 @@
-# EquivalentUnifiedIdeograph-12.1.0.txt
-# Date: 2019-03-08, 23:59:00 GMT [KL, KW]
+# EquivalentUnifiedIdeograph-13.0.0.txt
+# Date: 2019-09-09, 19:41:00 GMT [KL, KW]
 # © 2019 Unicode®, Inc.
 # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
 # For terms of use, see http://www.unicode.org/terms_of_use.html
diff --git a/gnu/usr.bin/perl/lib/unicore/IdStatus.txt b/gnu/usr.bin/perl/lib/unicore/IdStatus.txt
new file mode 100644 (file)
index 0000000..e699176
--- /dev/null
@@ -0,0 +1,561 @@
+# IdentifierStatus.txt
+# Date: 2020-02-07, 22:02:47 GMT
+# © 2020 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
+# Unicode Security Mechanisms for UTS #39
+# Version: 13.0.0
+#
+# For documentation and usage, see http://www.unicode.org/reports/tr39
+#
+# Format
+#
+# Field 0: code point
+# Field 1: Identifier_Status value (see Table 1 of http://www.unicode.org/reports/tr39)
+#
+# Any missing code points have the Identifier_Status value Restricted
+#
+# For the purpose of regular expressions, the property Identifier_Status is defined as
+# an enumerated property of code points.
+# The short name of Identifier_Status is the same as the long name.
+# The possible values are:
+#   Allowed, Restricted
+# The short name of each value is the same as its long name.
+# The default property value for all Unicode code points U+0000..U+10FFFF
+# not mentioned in this data file is Restricted.
+
+
+#      Identifier_Status:      Allowed
+
+0027          ; Allowed    # 1.1        APOSTROPHE
+002D..002E    ; Allowed    # 1.1    [2] HYPHEN-MINUS..FULL STOP
+0030..003A    ; Allowed    # 1.1   [11] DIGIT ZERO..COLON
+0041..005A    ; Allowed    # 1.1   [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
+005F          ; Allowed    # 1.1        LOW LINE
+0061..007A    ; Allowed    # 1.1   [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
+00B7          ; Allowed    # 1.1        MIDDLE DOT
+00C0..00D6    ; Allowed    # 1.1   [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8..00F6    ; Allowed    # 1.1   [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS
+00F8..0131    ; Allowed    # 1.1   [58] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER DOTLESS I
+0134..013E    ; Allowed    # 1.1   [11] LATIN CAPITAL LETTER J WITH CIRCUMFLEX..LATIN SMALL LETTER L WITH CARON
+0141..0148    ; Allowed    # 1.1    [8] LATIN CAPITAL LETTER L WITH STROKE..LATIN SMALL LETTER N WITH CARON
+014A..017E    ; Allowed    # 1.1   [53] LATIN CAPITAL LETTER ENG..LATIN SMALL LETTER Z WITH CARON
+018F          ; Allowed    # 1.1        LATIN CAPITAL LETTER SCHWA
+01A0..01A1    ; Allowed    # 1.1    [2] LATIN CAPITAL LETTER O WITH HORN..LATIN SMALL LETTER O WITH HORN
+01AF..01B0    ; Allowed    # 1.1    [2] LATIN CAPITAL LETTER U WITH HORN..LATIN SMALL LETTER U WITH HORN
+01CD..01DC    ; Allowed    # 1.1   [16] LATIN CAPITAL LETTER A WITH CARON..LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+01DE..01E3    ; Allowed    # 1.1    [6] LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON..LATIN SMALL LETTER AE WITH MACRON
+01E6..01F0    ; Allowed    # 1.1   [11] LATIN CAPITAL LETTER G WITH CARON..LATIN SMALL LETTER J WITH CARON
+01F4..01F5    ; Allowed    # 1.1    [2] LATIN CAPITAL LETTER G WITH ACUTE..LATIN SMALL LETTER G WITH ACUTE
+01F8..01F9    ; Allowed    # 3.0    [2] LATIN CAPITAL LETTER N WITH GRAVE..LATIN SMALL LETTER N WITH GRAVE
+01FA..0217    ; Allowed    # 1.1   [30] LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE..LATIN SMALL LETTER U WITH INVERTED BREVE
+0218..021B    ; Allowed    # 3.0    [4] LATIN CAPITAL LETTER S WITH COMMA BELOW..LATIN SMALL LETTER T WITH COMMA BELOW
+021E..021F    ; Allowed    # 3.0    [2] LATIN CAPITAL LETTER H WITH CARON..LATIN SMALL LETTER H WITH CARON
+0226..0233    ; Allowed    # 3.0   [14] LATIN CAPITAL LETTER A WITH DOT ABOVE..LATIN SMALL LETTER Y WITH MACRON
+0259          ; Allowed    # 1.1        LATIN SMALL LETTER SCHWA
+02BB..02BC    ; Allowed    # 1.1    [2] MODIFIER LETTER TURNED COMMA..MODIFIER LETTER APOSTROPHE
+02EC          ; Allowed    # 3.0        MODIFIER LETTER VOICING
+0300..0304    ; Allowed    # 1.1    [5] COMBINING GRAVE ACCENT..COMBINING MACRON
+0306..030C    ; Allowed    # 1.1    [7] COMBINING BREVE..COMBINING CARON
+030F..0311    ; Allowed    # 1.1    [3] COMBINING DOUBLE GRAVE ACCENT..COMBINING INVERTED BREVE
+0313..0314    ; Allowed    # 1.1    [2] COMBINING COMMA ABOVE..COMBINING REVERSED COMMA ABOVE
+031B          ; Allowed    # 1.1        COMBINING HORN
+0323..0328    ; Allowed    # 1.1    [6] COMBINING DOT BELOW..COMBINING OGONEK
+032D..032E    ; Allowed    # 1.1    [2] COMBINING CIRCUMFLEX ACCENT BELOW..COMBINING BREVE BELOW
+0330..0331    ; Allowed    # 1.1    [2] COMBINING TILDE BELOW..COMBINING MACRON BELOW
+0335          ; Allowed    # 1.1        COMBINING SHORT STROKE OVERLAY
+0338..0339    ; Allowed    # 1.1    [2] COMBINING LONG SOLIDUS OVERLAY..COMBINING RIGHT HALF RING BELOW
+0342          ; Allowed    # 1.1        COMBINING GREEK PERISPOMENI
+0345          ; Allowed    # 1.1        COMBINING GREEK YPOGEGRAMMENI
+0375          ; Allowed    # 1.1        GREEK LOWER NUMERAL SIGN
+037B..037D    ; Allowed    # 5.0    [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+0386          ; Allowed    # 1.1        GREEK CAPITAL LETTER ALPHA WITH TONOS
+0388..038A    ; Allowed    # 1.1    [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C          ; Allowed    # 1.1        GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..03A1    ; Allowed    # 1.1   [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO
+03A3..03CE    ; Allowed    # 1.1   [44] GREEK CAPITAL LETTER SIGMA..GREEK SMALL LETTER OMEGA WITH TONOS
+03FC..03FF    ; Allowed    # 4.1    [4] GREEK RHO WITH STROKE SYMBOL..GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
+0400          ; Allowed    # 3.0        CYRILLIC CAPITAL LETTER IE WITH GRAVE
+0401..040C    ; Allowed    # 1.1   [12] CYRILLIC CAPITAL LETTER IO..CYRILLIC CAPITAL LETTER KJE
+040D          ; Allowed    # 3.0        CYRILLIC CAPITAL LETTER I WITH GRAVE
+040E..044F    ; Allowed    # 1.1   [66] CYRILLIC CAPITAL LETTER SHORT U..CYRILLIC SMALL LETTER YA
+0450          ; Allowed    # 3.0        CYRILLIC SMALL LETTER IE WITH GRAVE
+0451..045C    ; Allowed    # 1.1   [12] CYRILLIC SMALL LETTER IO..CYRILLIC SMALL LETTER KJE
+045D          ; Allowed    # 3.0        CYRILLIC SMALL LETTER I WITH GRAVE
+045E..045F    ; Allowed    # 1.1    [2] CYRILLIC SMALL LETTER SHORT U..CYRILLIC SMALL LETTER DZHE
+048A..048B    ; Allowed    # 3.2    [2] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER SHORT I WITH TAIL
+048C..048F    ; Allowed    # 3.0    [4] CYRILLIC CAPITAL LETTER SEMISOFT SIGN..CYRILLIC SMALL LETTER ER WITH TICK
+0490..04C4    ; Allowed    # 1.1   [53] CYRILLIC CAPITAL LETTER GHE WITH UPTURN..CYRILLIC SMALL LETTER KA WITH HOOK
+04C5..04C6    ; Allowed    # 3.2    [2] CYRILLIC CAPITAL LETTER EL WITH TAIL..CYRILLIC SMALL LETTER EL WITH TAIL
+04C7..04C8    ; Allowed    # 1.1    [2] CYRILLIC CAPITAL LETTER EN WITH HOOK..CYRILLIC SMALL LETTER EN WITH HOOK
+04C9..04CA    ; Allowed    # 3.2    [2] CYRILLIC CAPITAL LETTER EN WITH TAIL..CYRILLIC SMALL LETTER EN WITH TAIL
+04CB..04CC    ; Allowed    # 1.1    [2] CYRILLIC CAPITAL LETTER KHAKASSIAN CHE..CYRILLIC SMALL LETTER KHAKASSIAN CHE
+04CD..04CE    ; Allowed    # 3.2    [2] CYRILLIC CAPITAL LETTER EM WITH TAIL..CYRILLIC SMALL LETTER EM WITH TAIL
+04CF          ; Allowed    # 5.0        CYRILLIC SMALL LETTER PALOCHKA
+04D0..04EB    ; Allowed    # 1.1   [28] CYRILLIC CAPITAL LETTER A WITH BREVE..CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
+04EC..04ED    ; Allowed    # 3.0    [2] CYRILLIC CAPITAL LETTER E WITH DIAERESIS..CYRILLIC SMALL LETTER E WITH DIAERESIS
+04EE..04F5    ; Allowed    # 1.1    [8] CYRILLIC CAPITAL LETTER U WITH MACRON..CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+04F6..04F7    ; Allowed    # 4.1    [2] CYRILLIC CAPITAL LETTER GHE WITH DESCENDER..CYRILLIC SMALL LETTER GHE WITH DESCENDER
+04F8..04F9    ; Allowed    # 1.1    [2] CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS..CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+04FA..04FF    ; Allowed    # 5.0    [6] CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK..CYRILLIC SMALL LETTER HA WITH STROKE
+0510..0513    ; Allowed    # 5.0    [4] CYRILLIC CAPITAL LETTER REVERSED ZE..CYRILLIC SMALL LETTER EL WITH HOOK
+0514..0523    ; Allowed    # 5.1   [16] CYRILLIC CAPITAL LETTER LHA..CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK
+0524..0525    ; Allowed    # 5.2    [2] CYRILLIC CAPITAL LETTER PE WITH DESCENDER..CYRILLIC SMALL LETTER PE WITH DESCENDER
+0526..0527    ; Allowed    # 6.0    [2] CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER..CYRILLIC SMALL LETTER SHHA WITH DESCENDER
+0528..0529    ; Allowed    # 7.0    [2] CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK..CYRILLIC SMALL LETTER EN WITH LEFT HOOK
+052E..052F    ; Allowed    # 7.0    [2] CYRILLIC CAPITAL LETTER EL WITH DESCENDER..CYRILLIC SMALL LETTER EL WITH DESCENDER
+0531..0556    ; Allowed    # 1.1   [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
+0559          ; Allowed    # 1.1        ARMENIAN MODIFIER LETTER LEFT HALF RING
+0561..0586    ; Allowed    # 1.1   [38] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LETTER FEH
+058A          ; Allowed    # 3.0        ARMENIAN HYPHEN
+05B4          ; Allowed    # 1.1        HEBREW POINT HIRIQ
+05D0..05EA    ; Allowed    # 1.1   [27] HEBREW LETTER ALEF..HEBREW LETTER TAV
+05EF          ; Allowed    # 11.0       HEBREW YOD TRIANGLE
+05F0..05F4    ; Allowed    # 1.1    [5] HEBREW LIGATURE YIDDISH DOUBLE VAV..HEBREW PUNCTUATION GERSHAYIM
+0620          ; Allowed    # 6.0        ARABIC LETTER KASHMIRI YEH
+0621..063A    ; Allowed    # 1.1   [26] ARABIC LETTER HAMZA..ARABIC LETTER GHAIN
+063B..063F    ; Allowed    # 5.1    [5] ARABIC LETTER KEHEH WITH TWO DOTS ABOVE..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
+0641..0652    ; Allowed    # 1.1   [18] ARABIC LETTER FEH..ARABIC SUKUN
+0653..0655    ; Allowed    # 3.0    [3] ARABIC MADDAH ABOVE..ARABIC HAMZA BELOW
+0660..0669    ; Allowed    # 1.1   [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE
+0670..0672    ; Allowed    # 1.1    [3] ARABIC LETTER SUPERSCRIPT ALEF..ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE
+0674          ; Allowed    # 1.1        ARABIC LETTER HIGH HAMZA
+0679..068D    ; Allowed    # 1.1   [21] ARABIC LETTER TTEH..ARABIC LETTER DDAHAL
+068F..06A0    ; Allowed    # 1.1   [18] ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS..ARABIC LETTER AIN WITH THREE DOTS ABOVE
+06A2..06B7    ; Allowed    # 1.1   [22] ARABIC LETTER FEH WITH DOT MOVED BELOW..ARABIC LETTER LAM WITH THREE DOTS ABOVE
+06B8..06B9    ; Allowed    # 3.0    [2] ARABIC LETTER LAM WITH THREE DOTS BELOW..ARABIC LETTER NOON WITH DOT BELOW
+06BA..06BE    ; Allowed    # 1.1    [5] ARABIC LETTER NOON GHUNNA..ARABIC LETTER HEH DOACHASHMEE
+06BF          ; Allowed    # 3.0        ARABIC LETTER TCHEH WITH DOT ABOVE
+06C0..06CE    ; Allowed    # 1.1   [15] ARABIC LETTER HEH WITH YEH ABOVE..ARABIC LETTER YEH WITH SMALL V
+06CF          ; Allowed    # 3.0        ARABIC LETTER WAW WITH DOT ABOVE
+06D0..06D3    ; Allowed    # 1.1    [4] ARABIC LETTER E..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+06D5          ; Allowed    # 1.1        ARABIC LETTER AE
+06E5..06E6    ; Allowed    # 1.1    [2] ARABIC SMALL WAW..ARABIC SMALL YEH
+06EE..06EF    ; Allowed    # 4.0    [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V
+06F0..06F9    ; Allowed    # 1.1   [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE
+06FA..06FE    ; Allowed    # 3.0    [5] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC SIGN SINDHI POSTPOSITION MEN
+06FF          ; Allowed    # 4.0        ARABIC LETTER HEH WITH INVERTED V
+0750..076D    ; Allowed    # 4.1   [30] ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW..ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE
+076E..077F    ; Allowed    # 5.1   [18] ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH BELOW..ARABIC LETTER KAF WITH TWO DOTS ABOVE
+0780..07B0    ; Allowed    # 3.0   [49] THAANA LETTER HAA..THAANA SUKUN
+07B1          ; Allowed    # 3.2        THAANA LETTER NAA
+08A0          ; Allowed    # 6.1        ARABIC LETTER BEH WITH SMALL V BELOW
+08A1          ; Allowed    # 7.0        ARABIC LETTER BEH WITH HAMZA ABOVE
+08A2..08AC    ; Allowed    # 6.1   [11] ARABIC LETTER JEEM WITH TWO DOTS ABOVE..ARABIC LETTER ROHINGYA YEH
+08B2          ; Allowed    # 7.0        ARABIC LETTER ZAIN WITH INVERTED V ABOVE
+08B6..08BD    ; Allowed    # 9.0    [8] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER AFRICAN NOON
+08BE..08C7    ; Allowed    # 13.0  [10] ARABIC LETTER PEH WITH SMALL V..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE
+0901..0903    ; Allowed    # 1.1    [3] DEVANAGARI SIGN CANDRABINDU..DEVANAGARI SIGN VISARGA
+0904          ; Allowed    # 4.0        DEVANAGARI LETTER SHORT A
+0905..0939    ; Allowed    # 1.1   [53] DEVANAGARI LETTER A..DEVANAGARI LETTER HA
+093A..093B    ; Allowed    # 6.0    [2] DEVANAGARI VOWEL SIGN OE..DEVANAGARI VOWEL SIGN OOE
+093C..094D    ; Allowed    # 1.1   [18] DEVANAGARI SIGN NUKTA..DEVANAGARI SIGN VIRAMA
+094F          ; Allowed    # 6.0        DEVANAGARI VOWEL SIGN AW
+0950          ; Allowed    # 1.1        DEVANAGARI OM
+0956..0957    ; Allowed    # 6.0    [2] DEVANAGARI VOWEL SIGN UE..DEVANAGARI VOWEL SIGN UUE
+0960..0963    ; Allowed    # 1.1    [4] DEVANAGARI LETTER VOCALIC RR..DEVANAGARI VOWEL SIGN VOCALIC LL
+0966..096F    ; Allowed    # 1.1   [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE
+0971..0972    ; Allowed    # 5.1    [2] DEVANAGARI SIGN HIGH SPACING DOT..DEVANAGARI LETTER CANDRA A
+0973..0977    ; Allowed    # 6.0    [5] DEVANAGARI LETTER OE..DEVANAGARI LETTER UUE
+0979..097A    ; Allowed    # 5.2    [2] DEVANAGARI LETTER ZHA..DEVANAGARI LETTER HEAVY YA
+097B..097C    ; Allowed    # 5.0    [2] DEVANAGARI LETTER GGA..DEVANAGARI LETTER JJA
+097D          ; Allowed    # 4.1        DEVANAGARI LETTER GLOTTAL STOP
+097E..097F    ; Allowed    # 5.0    [2] DEVANAGARI LETTER DDDA..DEVANAGARI LETTER BBA
+0981..0983    ; Allowed    # 1.1    [3] BENGALI SIGN CANDRABINDU..BENGALI SIGN VISARGA
+0985..098C    ; Allowed    # 1.1    [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L
+098F..0990    ; Allowed    # 1.1    [2] BENGALI LETTER E..BENGALI LETTER AI
+0993..09A8    ; Allowed    # 1.1   [22] BENGALI LETTER O..BENGALI LETTER NA
+09AA..09B0    ; Allowed    # 1.1    [7] BENGALI LETTER PA..BENGALI LETTER RA
+09B2          ; Allowed    # 1.1        BENGALI LETTER LA
+09B6..09B9    ; Allowed    # 1.1    [4] BENGALI LETTER SHA..BENGALI LETTER HA
+09BC          ; Allowed    # 1.1        BENGALI SIGN NUKTA
+09BD          ; Allowed    # 4.0        BENGALI SIGN AVAGRAHA
+09BE..09C4    ; Allowed    # 1.1    [7] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN VOCALIC RR
+09C7..09C8    ; Allowed    # 1.1    [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
+09CB..09CD    ; Allowed    # 1.1    [3] BENGALI VOWEL SIGN O..BENGALI SIGN VIRAMA
+09CE          ; Allowed    # 4.1        BENGALI LETTER KHANDA TA
+09D7          ; Allowed    # 1.1        BENGALI AU LENGTH MARK
+09E0..09E3    ; Allowed    # 1.1    [4] BENGALI LETTER VOCALIC RR..BENGALI VOWEL SIGN VOCALIC LL
+09E6..09F1    ; Allowed    # 1.1   [12] BENGALI DIGIT ZERO..BENGALI LETTER RA WITH LOWER DIAGONAL
+09FE          ; Allowed    # 11.0       BENGALI SANDHI MARK
+0A01          ; Allowed    # 4.0        GURMUKHI SIGN ADAK BINDI
+0A02          ; Allowed    # 1.1        GURMUKHI SIGN BINDI
+0A03          ; Allowed    # 4.0        GURMUKHI SIGN VISARGA
+0A05..0A0A    ; Allowed    # 1.1    [6] GURMUKHI LETTER A..GURMUKHI LETTER UU
+0A0F..0A10    ; Allowed    # 1.1    [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI
+0A13..0A28    ; Allowed    # 1.1   [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA
+0A2A..0A30    ; Allowed    # 1.1    [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA
+0A32          ; Allowed    # 1.1        GURMUKHI LETTER LA
+0A35          ; Allowed    # 1.1        GURMUKHI LETTER VA
+0A38..0A39    ; Allowed    # 1.1    [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA
+0A3C          ; Allowed    # 1.1        GURMUKHI SIGN NUKTA
+0A3E..0A42    ; Allowed    # 1.1    [5] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN UU
+0A47..0A48    ; Allowed    # 1.1    [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
+0A4B..0A4D    ; Allowed    # 1.1    [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA
+0A5C          ; Allowed    # 1.1        GURMUKHI LETTER RRA
+0A66..0A74    ; Allowed    # 1.1   [15] GURMUKHI DIGIT ZERO..GURMUKHI EK ONKAR
+0A81..0A83    ; Allowed    # 1.1    [3] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN VISARGA
+0A85..0A8B    ; Allowed    # 1.1    [7] GUJARATI LETTER A..GUJARATI LETTER VOCALIC R
+0A8C          ; Allowed    # 4.0        GUJARATI LETTER VOCALIC L
+0A8D          ; Allowed    # 1.1        GUJARATI VOWEL CANDRA E
+0A8F..0A91    ; Allowed    # 1.1    [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O
+0A93..0AA8    ; Allowed    # 1.1   [22] GUJARATI LETTER O..GUJARATI LETTER NA
+0AAA..0AB0    ; Allowed    # 1.1    [7] GUJARATI LETTER PA..GUJARATI LETTER RA
+0AB2..0AB3    ; Allowed    # 1.1    [2] GUJARATI LETTER LA..GUJARATI LETTER LLA
+0AB5..0AB9    ; Allowed    # 1.1    [5] GUJARATI LETTER VA..GUJARATI LETTER HA
+0ABC..0AC5    ; Allowed    # 1.1   [10] GUJARATI SIGN NUKTA..GUJARATI VOWEL SIGN CANDRA E
+0AC7..0AC9    ; Allowed    # 1.1    [3] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN CANDRA O
+0ACB..0ACD    ; Allowed    # 1.1    [3] GUJARATI VOWEL SIGN O..GUJARATI SIGN VIRAMA
+0AD0          ; Allowed    # 1.1        GUJARATI OM
+0AE0          ; Allowed    # 1.1        GUJARATI LETTER VOCALIC RR
+0AE1..0AE3    ; Allowed    # 4.0    [3] GUJARATI LETTER VOCALIC LL..GUJARATI VOWEL SIGN VOCALIC LL
+0AE6..0AEF    ; Allowed    # 1.1   [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE
+0AFA..0AFF    ; Allowed    # 10.0   [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE
+0B01..0B03    ; Allowed    # 1.1    [3] ORIYA SIGN CANDRABINDU..ORIYA SIGN VISARGA
+0B05..0B0C    ; Allowed    # 1.1    [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L
+0B0F..0B10    ; Allowed    # 1.1    [2] ORIYA LETTER E..ORIYA LETTER AI
+0B13..0B28    ; Allowed    # 1.1   [22] ORIYA LETTER O..ORIYA LETTER NA
+0B2A..0B30    ; Allowed    # 1.1    [7] ORIYA LETTER PA..ORIYA LETTER RA
+0B32..0B33    ; Allowed    # 1.1    [2] ORIYA LETTER LA..ORIYA LETTER LLA
+0B35          ; Allowed    # 4.0        ORIYA LETTER VA
+0B36..0B39    ; Allowed    # 1.1    [4] ORIYA LETTER SHA..ORIYA LETTER HA
+0B3C..0B43    ; Allowed    # 1.1    [8] ORIYA SIGN NUKTA..ORIYA VOWEL SIGN VOCALIC R
+0B47..0B48    ; Allowed    # 1.1    [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
+0B4B..0B4D    ; Allowed    # 1.1    [3] ORIYA VOWEL SIGN O..ORIYA SIGN VIRAMA
+0B55          ; Allowed    # 13.0       ORIYA SIGN OVERLINE
+0B56..0B57    ; Allowed    # 1.1    [2] ORIYA AI LENGTH MARK..ORIYA AU LENGTH MARK
+0B5F..0B61    ; Allowed    # 1.1    [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
+0B66..0B6F    ; Allowed    # 1.1   [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE
+0B71          ; Allowed    # 4.0        ORIYA LETTER WA
+0B82..0B83    ; Allowed    # 1.1    [2] TAMIL SIGN ANUSVARA..TAMIL SIGN VISARGA
+0B85..0B8A    ; Allowed    # 1.1    [6] TAMIL LETTER A..TAMIL LETTER UU
+0B8E..0B90    ; Allowed    # 1.1    [3] TAMIL LETTER E..TAMIL LETTER AI
+0B92..0B95    ; Allowed    # 1.1    [4] TAMIL LETTER O..TAMIL LETTER KA
+0B99..0B9A    ; Allowed    # 1.1    [2] TAMIL LETTER NGA..TAMIL LETTER CA
+0B9C          ; Allowed    # 1.1        TAMIL LETTER JA
+0B9E..0B9F    ; Allowed    # 1.1    [2] TAMIL LETTER NYA..TAMIL LETTER TTA
+0BA3..0BA4    ; Allowed    # 1.1    [2] TAMIL LETTER NNA..TAMIL LETTER TA
+0BA8..0BAA    ; Allowed    # 1.1    [3] TAMIL LETTER NA..TAMIL LETTER PA
+0BAE..0BB5    ; Allowed    # 1.1    [8] TAMIL LETTER MA..TAMIL LETTER VA
+0BB6          ; Allowed    # 4.1        TAMIL LETTER SHA
+0BB7..0BB9    ; Allowed    # 1.1    [3] TAMIL LETTER SSA..TAMIL LETTER HA
+0BBE..0BC2    ; Allowed    # 1.1    [5] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN UU
+0BC6..0BC8    ; Allowed    # 1.1    [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI
+0BCA..0BCD    ; Allowed    # 1.1    [4] TAMIL VOWEL SIGN O..TAMIL SIGN VIRAMA
+0BD0          ; Allowed    # 5.1        TAMIL OM
+0BD7          ; Allowed    # 1.1        TAMIL AU LENGTH MARK
+0BE6          ; Allowed    # 4.1        TAMIL DIGIT ZERO
+0BE7..0BEF    ; Allowed    # 1.1    [9] TAMIL DIGIT ONE..TAMIL DIGIT NINE
+0C01..0C03    ; Allowed    # 1.1    [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
+0C04          ; Allowed    # 11.0       TELUGU SIGN COMBINING ANUSVARA ABOVE
+0C05..0C0C    ; Allowed    # 1.1    [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L
+0C0E..0C10    ; Allowed    # 1.1    [3] TELUGU LETTER E..TELUGU LETTER AI
+0C12..0C28    ; Allowed    # 1.1   [23] TELUGU LETTER O..TELUGU LETTER NA
+0C2A..0C33    ; Allowed    # 1.1   [10] TELUGU LETTER PA..TELUGU LETTER LLA
+0C35..0C39    ; Allowed    # 1.1    [5] TELUGU LETTER VA..TELUGU LETTER HA
+0C3D          ; Allowed    # 5.1        TELUGU SIGN AVAGRAHA
+0C3E..0C44    ; Allowed    # 1.1    [7] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN VOCALIC RR
+0C46..0C48    ; Allowed    # 1.1    [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
+0C4A..0C4D    ; Allowed    # 1.1    [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA
+0C55..0C56    ; Allowed    # 1.1    [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
+0C60..0C61    ; Allowed    # 1.1    [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
+0C66..0C6F    ; Allowed    # 1.1   [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE
+0C80          ; Allowed    # 9.0        KANNADA SIGN SPACING CANDRABINDU
+0C82..0C83    ; Allowed    # 1.1    [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
+0C85..0C8C    ; Allowed    # 1.1    [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
+0C8E..0C90    ; Allowed    # 1.1    [3] KANNADA LETTER E..KANNADA LETTER AI
+0C92..0CA8    ; Allowed    # 1.1   [23] KANNADA LETTER O..KANNADA LETTER NA
+0CAA..0CB3    ; Allowed    # 1.1   [10] KANNADA LETTER PA..KANNADA LETTER LLA
+0CB5..0CB9    ; Allowed    # 1.1    [5] KANNADA LETTER VA..KANNADA LETTER HA
+0CBC..0CBD    ; Allowed    # 4.0    [2] KANNADA SIGN NUKTA..KANNADA SIGN AVAGRAHA
+0CBE..0CC4    ; Allowed    # 1.1    [7] KANNADA VOWEL SIGN AA..KANNADA VOWEL SIGN VOCALIC RR
+0CC6..0CC8    ; Allowed    # 1.1    [3] KANNADA VOWEL SIGN E..KANNADA VOWEL SIGN AI
+0CCA..0CCD    ; Allowed    # 1.1    [4] KANNADA VOWEL SIGN O..KANNADA SIGN VIRAMA
+0CD5..0CD6    ; Allowed    # 1.1    [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
+0CE0..0CE1    ; Allowed    # 1.1    [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
+0CE2..0CE3    ; Allowed    # 5.0    [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
+0CE6..0CEF    ; Allowed    # 1.1   [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
+0CF1..0CF2    ; Allowed    # 5.0    [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
+0D00          ; Allowed    # 10.0       MALAYALAM SIGN COMBINING ANUSVARA ABOVE
+0D02..0D03    ; Allowed    # 1.1    [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
+0D05..0D0C    ; Allowed    # 1.1    [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
+0D0E..0D10    ; Allowed    # 1.1    [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
+0D12..0D28    ; Allowed    # 1.1   [23] MALAYALAM LETTER O..MALAYALAM LETTER NA
+0D29          ; Allowed    # 6.0        MALAYALAM LETTER NNNA
+0D2A..0D39    ; Allowed    # 1.1   [16] MALAYALAM LETTER PA..MALAYALAM LETTER HA
+0D3A          ; Allowed    # 6.0        MALAYALAM LETTER TTTA
+0D3D          ; Allowed    # 5.1        MALAYALAM SIGN AVAGRAHA
+0D3E..0D43    ; Allowed    # 1.1    [6] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN VOCALIC R
+0D46..0D48    ; Allowed    # 1.1    [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
+0D4A..0D4D    ; Allowed    # 1.1    [4] MALAYALAM VOWEL SIGN O..MALAYALAM SIGN VIRAMA
+0D4E          ; Allowed    # 6.0        MALAYALAM LETTER DOT REPH
+0D54..0D56    ; Allowed    # 9.0    [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL
+0D57          ; Allowed    # 1.1        MALAYALAM AU LENGTH MARK
+0D60..0D61    ; Allowed    # 1.1    [2] MALAYALAM LETTER VOCALIC RR..MALAYALAM LETTER VOCALIC LL
+0D66..0D6F    ; Allowed    # 1.1   [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE
+0D7A..0D7F    ; Allowed    # 5.1    [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
+0D82..0D83    ; Allowed    # 3.0    [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
+0D85..0D8E    ; Allowed    # 3.0   [10] SINHALA LETTER AYANNA..SINHALA LETTER IRUUYANNA
+0D91..0D96    ; Allowed    # 3.0    [6] SINHALA LETTER EYANNA..SINHALA LETTER AUYANNA
+0D9A..0DA5    ; Allowed    # 3.0   [12] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA
+0DA7..0DB1    ; Allowed    # 3.0   [11] SINHALA LETTER ALPAPRAANA TTAYANNA..SINHALA LETTER DANTAJA NAYANNA
+0DB3..0DBB    ; Allowed    # 3.0    [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA
+0DBD          ; Allowed    # 3.0        SINHALA LETTER DANTAJA LAYANNA
+0DC0..0DC6    ; Allowed    # 3.0    [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA
+0DCA          ; Allowed    # 3.0        SINHALA SIGN AL-LAKUNA
+0DCF..0DD4    ; Allowed    # 3.0    [6] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
+0DD6          ; Allowed    # 3.0        SINHALA VOWEL SIGN DIGA PAA-PILLA
+0DD8..0DDE    ; Allowed    # 3.0    [7] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA
+0DF2          ; Allowed    # 3.0        SINHALA VOWEL SIGN DIGA GAETTA-PILLA
+0E01..0E32    ; Allowed    # 1.1   [50] THAI CHARACTER KO KAI..THAI CHARACTER SARA AA
+0E34..0E3A    ; Allowed    # 1.1    [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
+0E40..0E4E    ; Allowed    # 1.1   [15] THAI CHARACTER SARA E..THAI CHARACTER YAMAKKAN
+0E50..0E59    ; Allowed    # 1.1   [10] THAI DIGIT ZERO..THAI DIGIT NINE
+0E81..0E82    ; Allowed    # 1.1    [2] LAO LETTER KO..LAO LETTER KHO SUNG
+0E84          ; Allowed    # 1.1        LAO LETTER KHO TAM
+0E86          ; Allowed    # 12.0       LAO LETTER PALI GHA
+0E87..0E88    ; Allowed    # 1.1    [2] LAO LETTER NGO..LAO LETTER CO
+0E89          ; Allowed    # 12.0       LAO LETTER PALI CHA
+0E8A          ; Allowed    # 1.1        LAO LETTER SO TAM
+0E8C          ; Allowed    # 12.0       LAO LETTER PALI JHA
+0E8D          ; Allowed    # 1.1        LAO LETTER NYO
+0E8E..0E93    ; Allowed    # 12.0   [6] LAO LETTER PALI NYA..LAO LETTER PALI NNA
+0E94..0E97    ; Allowed    # 1.1    [4] LAO LETTER DO..LAO LETTER THO TAM
+0E98          ; Allowed    # 12.0       LAO LETTER PALI DHA
+0E99..0E9F    ; Allowed    # 1.1    [7] LAO LETTER NO..LAO LETTER FO SUNG
+0EA0          ; Allowed    # 12.0       LAO LETTER PALI BHA
+0EA1..0EA3    ; Allowed    # 1.1    [3] LAO LETTER MO..LAO LETTER LO LING
+0EA5          ; Allowed    # 1.1        LAO LETTER LO LOOT
+0EA7          ; Allowed    # 1.1        LAO LETTER WO
+0EA8..0EA9    ; Allowed    # 12.0   [2] LAO LETTER SANSKRIT SHA..LAO LETTER SANSKRIT SSA
+0EAA..0EAB    ; Allowed    # 1.1    [2] LAO LETTER SO SUNG..LAO LETTER HO SUNG
+0EAC          ; Allowed    # 12.0       LAO LETTER PALI LLA
+0EAD..0EB2    ; Allowed    # 1.1    [6] LAO LETTER O..LAO VOWEL SIGN AA
+0EB4..0EB9    ; Allowed    # 1.1    [6] LAO VOWEL SIGN I..LAO VOWEL SIGN UU
+0EBA          ; Allowed    # 12.0       LAO SIGN PALI VIRAMA
+0EBB..0EBD    ; Allowed    # 1.1    [3] LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN NYO
+0EC0..0EC4    ; Allowed    # 1.1    [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI
+0EC6          ; Allowed    # 1.1        LAO KO LA
+0EC8..0ECD    ; Allowed    # 1.1    [6] LAO TONE MAI EK..LAO NIGGAHITA
+0ED0..0ED9    ; Allowed    # 1.1   [10] LAO DIGIT ZERO..LAO DIGIT NINE
+0EDE..0EDF    ; Allowed    # 6.1    [2] LAO LETTER KHMU GO..LAO LETTER KHMU NYO
+0F00          ; Allowed    # 2.0        TIBETAN SYLLABLE OM
+0F0B          ; Allowed    # 2.0        TIBETAN MARK INTERSYLLABIC TSHEG
+0F20..0F29    ; Allowed    # 2.0   [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE
+0F35          ; Allowed    # 2.0        TIBETAN MARK NGAS BZUNG NYI ZLA
+0F37          ; Allowed    # 2.0        TIBETAN MARK NGAS BZUNG SGOR RTAGS
+0F3E..0F42    ; Allowed    # 2.0    [5] TIBETAN SIGN YAR TSHES..TIBETAN LETTER GA
+0F44..0F47    ; Allowed    # 2.0    [4] TIBETAN LETTER NGA..TIBETAN LETTER JA
+0F49..0F4C    ; Allowed    # 2.0    [4] TIBETAN LETTER NYA..TIBETAN LETTER DDA
+0F4E..0F51    ; Allowed    # 2.0    [4] TIBETAN LETTER NNA..TIBETAN LETTER DA
+0F53..0F56    ; Allowed    # 2.0    [4] TIBETAN LETTER NA..TIBETAN LETTER BA
+0F58..0F5B    ; Allowed    # 2.0    [4] TIBETAN LETTER MA..TIBETAN LETTER DZA
+0F5D..0F68    ; Allowed    # 2.0   [12] TIBETAN LETTER WA..TIBETAN LETTER A
+0F6A          ; Allowed    # 3.0        TIBETAN LETTER FIXED-FORM RA
+0F6B..0F6C    ; Allowed    # 5.1    [2] TIBETAN LETTER KKA..TIBETAN LETTER RRA
+0F71..0F72    ; Allowed    # 2.0    [2] TIBETAN VOWEL SIGN AA..TIBETAN VOWEL SIGN I
+0F74          ; Allowed    # 2.0        TIBETAN VOWEL SIGN U
+0F7A..0F80    ; Allowed    # 2.0    [7] TIBETAN VOWEL SIGN E..TIBETAN VOWEL SIGN REVERSED I
+0F82..0F84    ; Allowed    # 2.0    [3] TIBETAN SIGN NYI ZLA NAA DA..TIBETAN MARK HALANTA
+0F86..0F8B    ; Allowed    # 2.0    [6] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN GRU MED RGYINGS
+0F8C..0F8F    ; Allowed    # 6.0    [4] TIBETAN SIGN INVERTED MCHU CAN..TIBETAN SUBJOINED SIGN INVERTED MCHU CAN
+0F90..0F92    ; Allowed    # 2.0    [3] TIBETAN SUBJOINED LETTER KA..TIBETAN SUBJOINED LETTER GA
+0F94..0F95    ; Allowed    # 2.0    [2] TIBETAN SUBJOINED LETTER NGA..TIBETAN SUBJOINED LETTER CA
+0F96          ; Allowed    # 3.0        TIBETAN SUBJOINED LETTER CHA
+0F97          ; Allowed    # 2.0        TIBETAN SUBJOINED LETTER JA
+0F99..0F9C    ; Allowed    # 2.0    [4] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER DDA
+0F9E..0FA1    ; Allowed    # 2.0    [4] TIBETAN SUBJOINED LETTER NNA..TIBETAN SUBJOINED LETTER DA
+0FA3..0FA6    ; Allowed    # 2.0    [4] TIBETAN SUBJOINED LETTER NA..TIBETAN SUBJOINED LETTER BA
+0FA8..0FAB    ; Allowed    # 2.0    [4] TIBETAN SUBJOINED LETTER MA..TIBETAN SUBJOINED LETTER DZA
+0FAD          ; Allowed    # 2.0        TIBETAN SUBJOINED LETTER WA
+0FAE..0FB0    ; Allowed    # 3.0    [3] TIBETAN SUBJOINED LETTER ZHA..TIBETAN SUBJOINED LETTER -A
+0FB1..0FB7    ; Allowed    # 2.0    [7] TIBETAN SUBJOINED LETTER YA..TIBETAN SUBJOINED LETTER HA
+0FB8          ; Allowed    # 3.0        TIBETAN SUBJOINED LETTER A
+0FBA..0FBC    ; Allowed    # 3.0    [3] TIBETAN SUBJOINED LETTER FIXED-FORM WA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
+0FC6          ; Allowed    # 3.0        TIBETAN SYMBOL PADMA GDAN
+1000..1021    ; Allowed    # 3.0   [34] MYANMAR LETTER KA..MYANMAR LETTER A
+1022          ; Allowed    # 5.1        MYANMAR LETTER SHAN A
+1023..1027    ; Allowed    # 3.0    [5] MYANMAR LETTER I..MYANMAR LETTER E
+1028          ; Allowed    # 5.1        MYANMAR LETTER MON E
+1029..102A    ; Allowed    # 3.0    [2] MYANMAR LETTER O..MYANMAR LETTER AU
+102B          ; Allowed    # 5.1        MYANMAR VOWEL SIGN TALL AA
+102C..1032    ; Allowed    # 3.0    [7] MYANMAR VOWEL SIGN AA..MYANMAR VOWEL SIGN AI
+1033..1035    ; Allowed    # 5.1    [3] MYANMAR VOWEL SIGN MON II..MYANMAR VOWEL SIGN E ABOVE
+1036..1039    ; Allowed    # 3.0    [4] MYANMAR SIGN ANUSVARA..MYANMAR SIGN VIRAMA
+103A..103F    ; Allowed    # 5.1    [6] MYANMAR SIGN ASAT..MYANMAR LETTER GREAT SA
+1040..1049    ; Allowed    # 3.0   [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE
+1050..1059    ; Allowed    # 3.0   [10] MYANMAR LETTER SHA..MYANMAR VOWEL SIGN VOCALIC LL
+105A..1099    ; Allowed    # 5.1   [64] MYANMAR LETTER MON NGA..MYANMAR SHAN DIGIT NINE
+109A..109D    ; Allowed    # 5.2    [4] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON AI
+10C7          ; Allowed    # 6.1        GEORGIAN CAPITAL LETTER YN
+10CD          ; Allowed    # 6.1        GEORGIAN CAPITAL LETTER AEN
+10D0..10F0    ; Allowed    # 1.1   [33] GEORGIAN LETTER AN..GEORGIAN LETTER HAE
+10F7..10F8    ; Allowed    # 3.2    [2] GEORGIAN LETTER YN..GEORGIAN LETTER ELIFI
+10F9..10FA    ; Allowed    # 4.1    [2] GEORGIAN LETTER TURNED GAN..GEORGIAN LETTER AIN
+10FD..10FF    ; Allowed    # 6.1    [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN
+1200..1206    ; Allowed    # 3.0    [7] ETHIOPIC SYLLABLE HA..ETHIOPIC SYLLABLE HO
+1207          ; Allowed    # 4.1        ETHIOPIC SYLLABLE HOA
+1208..1246    ; Allowed    # 3.0   [63] ETHIOPIC SYLLABLE LA..ETHIOPIC SYLLABLE QO
+1247          ; Allowed    # 4.1        ETHIOPIC SYLLABLE QOA
+1248          ; Allowed    # 3.0        ETHIOPIC SYLLABLE QWA
+124A..124D    ; Allowed    # 3.0    [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE
+1250..1256    ; Allowed    # 3.0    [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO
+1258          ; Allowed    # 3.0        ETHIOPIC SYLLABLE QHWA
+125A..125D    ; Allowed    # 3.0    [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE
+1260..1286    ; Allowed    # 3.0   [39] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XO
+1287          ; Allowed    # 4.1        ETHIOPIC SYLLABLE XOA
+1288          ; Allowed    # 3.0        ETHIOPIC SYLLABLE XWA
+128A..128D    ; Allowed    # 3.0    [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE
+1290..12AE    ; Allowed    # 3.0   [31] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KO
+12AF          ; Allowed    # 4.1        ETHIOPIC SYLLABLE KOA
+12B0          ; Allowed    # 3.0        ETHIOPIC SYLLABLE KWA
+12B2..12B5    ; Allowed    # 3.0    [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE
+12B8..12BE    ; Allowed    # 3.0    [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO
+12C0          ; Allowed    # 3.0        ETHIOPIC SYLLABLE KXWA
+12C2..12C5    ; Allowed    # 3.0    [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE
+12C8..12CE    ; Allowed    # 3.0    [7] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE WO
+12CF          ; Allowed    # 4.1        ETHIOPIC SYLLABLE WOA
+12D0..12D6    ; Allowed    # 3.0    [7] ETHIOPIC SYLLABLE PHARYNGEAL A..ETHIOPIC SYLLABLE PHARYNGEAL O
+12D8..12EE    ; Allowed    # 3.0   [23] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE YO
+12EF          ; Allowed    # 4.1        ETHIOPIC SYLLABLE YOA
+12F0..130E    ; Allowed    # 3.0   [31] ETHIOPIC SYLLABLE DA..ETHIOPIC SYLLABLE GO
+130F          ; Allowed    # 4.1        ETHIOPIC SYLLABLE GOA
+1310          ; Allowed    # 3.0        ETHIOPIC SYLLABLE GWA
+1312..1315    ; Allowed    # 3.0    [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
+1318..131E    ; Allowed    # 3.0    [7] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE GGO
+131F          ; Allowed    # 4.1        ETHIOPIC SYLLABLE GGWAA
+1320..1346    ; Allowed    # 3.0   [39] ETHIOPIC SYLLABLE THA..ETHIOPIC SYLLABLE TZO
+1347          ; Allowed    # 4.1        ETHIOPIC SYLLABLE TZOA
+1348..135A    ; Allowed    # 3.0   [19] ETHIOPIC SYLLABLE FA..ETHIOPIC SYLLABLE FYA
+135D..135E    ; Allowed    # 6.0    [2] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING VOWEL LENGTH MARK
+135F          ; Allowed    # 4.1        ETHIOPIC COMBINING GEMINATION MARK
+1380..138F    ; Allowed    # 4.1   [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE
+1780..17A2    ; Allowed    # 3.0   [35] KHMER LETTER KA..KHMER LETTER QA
+17A5..17A7    ; Allowed    # 3.0    [3] KHMER INDEPENDENT VOWEL QI..KHMER INDEPENDENT VOWEL QU
+17A9..17B3    ; Allowed    # 3.0   [11] KHMER INDEPENDENT VOWEL QUU..KHMER INDEPENDENT VOWEL QAU
+17B6..17CA    ; Allowed    # 3.0   [21] KHMER VOWEL SIGN AA..KHMER SIGN TRIISAP
+17D2          ; Allowed    # 3.0        KHMER SIGN COENG
+17D7          ; Allowed    # 3.0        KHMER SIGN LEK TOO
+17DC          ; Allowed    # 3.0        KHMER SIGN AVAKRAHASANYA
+17E0..17E9    ; Allowed    # 3.0   [10] KHMER DIGIT ZERO..KHMER DIGIT NINE
+1C90..1CBA    ; Allowed    # 11.0  [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN
+1CBD..1CBF    ; Allowed    # 11.0   [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN
+1E00..1E99    ; Allowed    # 1.1  [154] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER Y WITH RING ABOVE
+1E9E          ; Allowed    # 5.1        LATIN CAPITAL LETTER SHARP S
+1EA0..1EF9    ; Allowed    # 1.1   [90] LATIN CAPITAL LETTER A WITH DOT BELOW..LATIN SMALL LETTER Y WITH TILDE
+1F00..1F15    ; Allowed    # 1.1   [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18..1F1D    ; Allowed    # 1.1    [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F45    ; Allowed    # 1.1   [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48..1F4D    ; Allowed    # 1.1    [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57    ; Allowed    # 1.1    [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59          ; Allowed    # 1.1        GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B          ; Allowed    # 1.1        GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D          ; Allowed    # 1.1        GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F..1F70    ; Allowed    # 1.1   [18] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER ALPHA WITH VARIA
+1F72          ; Allowed    # 1.1        GREEK SMALL LETTER EPSILON WITH VARIA
+1F74          ; Allowed    # 1.1        GREEK SMALL LETTER ETA WITH VARIA
+1F76          ; Allowed    # 1.1        GREEK SMALL LETTER IOTA WITH VARIA
+1F78          ; Allowed    # 1.1        GREEK SMALL LETTER OMICRON WITH VARIA
+1F7A          ; Allowed    # 1.1        GREEK SMALL LETTER UPSILON WITH VARIA
+1F7C          ; Allowed    # 1.1        GREEK SMALL LETTER OMEGA WITH VARIA
+1F80..1FB4    ; Allowed    # 1.1   [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FBA    ; Allowed    # 1.1    [5] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH VARIA
+1FBC          ; Allowed    # 1.1        GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FC2..1FC4    ; Allowed    # 1.1    [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FC8    ; Allowed    # 1.1    [3] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER EPSILON WITH VARIA
+1FCA          ; Allowed    # 1.1        GREEK CAPITAL LETTER ETA WITH VARIA
+1FCC          ; Allowed    # 1.1        GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FD0..1FD2    ; Allowed    # 1.1    [3] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
+1FD6..1FDA    ; Allowed    # 1.1    [5] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH VARIA
+1FE0..1FE2    ; Allowed    # 1.1    [3] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
+1FE4..1FEA    ; Allowed    # 1.1    [7] GREEK SMALL LETTER RHO WITH PSILI..GREEK CAPITAL LETTER UPSILON WITH VARIA
+1FEC          ; Allowed    # 1.1        GREEK CAPITAL LETTER RHO WITH DASIA
+1FF2..1FF4    ; Allowed    # 1.1    [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FF8    ; Allowed    # 1.1    [3] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMICRON WITH VARIA
+1FFA          ; Allowed    # 1.1        GREEK CAPITAL LETTER OMEGA WITH VARIA
+1FFC          ; Allowed    # 1.1        GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+200C..200D    ; Allowed    # 1.1    [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER
+2010          ; Allowed    # 1.1        HYPHEN
+2019          ; Allowed    # 1.1        RIGHT SINGLE QUOTATION MARK
+2027          ; Allowed    # 1.1        HYPHENATION POINT
+2D27          ; Allowed    # 6.1        GEORGIAN SMALL LETTER YN
+2D2D          ; Allowed    # 6.1        GEORGIAN SMALL LETTER AEN
+2D80..2D96    ; Allowed    # 4.1   [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE
+2DA0..2DA6    ; Allowed    # 4.1    [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO
+2DA8..2DAE    ; Allowed    # 4.1    [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO
+2DB0..2DB6    ; Allowed    # 4.1    [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO
+2DB8..2DBE    ; Allowed    # 4.1    [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO
+2DC0..2DC6    ; Allowed    # 4.1    [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO
+2DC8..2DCE    ; Allowed    # 4.1    [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO
+2DD0..2DD6    ; Allowed    # 4.1    [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO
+2DD8..2DDE    ; Allowed    # 4.1    [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO
+3005..3007    ; Allowed    # 1.1    [3] IDEOGRAPHIC ITERATION MARK..IDEOGRAPHIC NUMBER ZERO
+3041..3094    ; Allowed    # 1.1   [84] HIRAGANA LETTER SMALL A..HIRAGANA LETTER VU
+3095..3096    ; Allowed    # 3.2    [2] HIRAGANA LETTER SMALL KA..HIRAGANA LETTER SMALL KE
+3099..309A    ; Allowed    # 1.1    [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309D..309E    ; Allowed    # 1.1    [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
+30A0          ; Allowed    # 3.2        KATAKANA-HIRAGANA DOUBLE HYPHEN
+30A1..30FE    ; Allowed    # 1.1   [94] KATAKANA LETTER SMALL A..KATAKANA VOICED ITERATION MARK
+3105..312C    ; Allowed    # 1.1   [40] BOPOMOFO LETTER B..BOPOMOFO LETTER GN
+312D          ; Allowed    # 5.1        BOPOMOFO LETTER IH
+312F          ; Allowed    # 11.0       BOPOMOFO LETTER NN
+31A0..31B7    ; Allowed    # 3.0   [24] BOPOMOFO LETTER BU..BOPOMOFO FINAL LETTER H
+31B8..31BA    ; Allowed    # 6.0    [3] BOPOMOFO LETTER GH..BOPOMOFO LETTER ZY
+31BB..31BF    ; Allowed    # 13.0   [5] BOPOMOFO FINAL LETTER G..BOPOMOFO LETTER AH
+3400..4DB5    ; Allowed    # 3.0 [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
+4DB6..4DBF    ; Allowed    # 13.0  [10] CJK UNIFIED IDEOGRAPH-4DB6..CJK UNIFIED IDEOGRAPH-4DBF
+4E00..9FA5    ; Allowed    # 1.1 [20902] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FA5
+9FA6..9FBB    ; Allowed    # 4.1   [22] CJK UNIFIED IDEOGRAPH-9FA6..CJK UNIFIED IDEOGRAPH-9FBB
+9FBC..9FC3    ; Allowed    # 5.1    [8] CJK UNIFIED IDEOGRAPH-9FBC..CJK UNIFIED IDEOGRAPH-9FC3
+9FC4..9FCB    ; Allowed    # 5.2    [8] CJK UNIFIED IDEOGRAPH-9FC4..CJK UNIFIED IDEOGRAPH-9FCB
+9FCC          ; Allowed    # 6.1        CJK UNIFIED IDEOGRAPH-9FCC
+9FCD..9FD5    ; Allowed    # 8.0    [9] CJK UNIFIED IDEOGRAPH-9FCD..CJK UNIFIED IDEOGRAPH-9FD5
+9FD6..9FEA    ; Allowed    # 10.0  [21] CJK UNIFIED IDEOGRAPH-9FD6..CJK UNIFIED IDEOGRAPH-9FEA
+9FEB..9FEF    ; Allowed    # 11.0   [5] CJK UNIFIED IDEOGRAPH-9FEB..CJK UNIFIED IDEOGRAPH-9FEF
+9FF0..9FFC    ; Allowed    # 13.0  [13] CJK UNIFIED IDEOGRAPH-9FF0..CJK UNIFIED IDEOGRAPH-9FFC
+A67F          ; Allowed    # 5.1        CYRILLIC PAYEROK
+A717..A71A    ; Allowed    # 5.0    [4] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOWER RIGHT CORNER ANGLE
+A71B..A71F    ; Allowed    # 5.1    [5] MODIFIER LETTER RAISED UP ARROW..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
+A788          ; Allowed    # 5.1        MODIFIER LETTER LOW CIRCUMFLEX ACCENT
+A78D          ; Allowed    # 6.0        LATIN CAPITAL LETTER TURNED H
+A792..A793    ; Allowed    # 6.1    [2] LATIN CAPITAL LETTER C WITH BAR..LATIN SMALL LETTER C WITH BAR
+A7AA          ; Allowed    # 6.1        LATIN CAPITAL LETTER H WITH HOOK
+A7AE          ; Allowed    # 9.0        LATIN CAPITAL LETTER SMALL CAPITAL I
+A7B8..A7B9    ; Allowed    # 11.0   [2] LATIN CAPITAL LETTER U WITH STROKE..LATIN SMALL LETTER U WITH STROKE
+A7C2..A7C6    ; Allowed    # 12.0   [5] LATIN CAPITAL LETTER ANGLICANA W..LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+A7C7..A7CA    ; Allowed    # 13.0   [4] LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A9E7..A9FE    ; Allowed    # 7.0   [24] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING BHA
+AA60..AA76    ; Allowed    # 5.2   [23] MYANMAR LETTER KHAMTI GA..MYANMAR LOGOGRAM KHAMTI HM
+AA7A..AA7B    ; Allowed    # 5.2    [2] MYANMAR LETTER AITON RA..MYANMAR SIGN PAO KAREN TONE
+AA7C..AA7F    ; Allowed    # 7.0    [4] MYANMAR SIGN TAI LAING TONE-2..MYANMAR LETTER SHWE PALAUNG SHA
+AB01..AB06    ; Allowed    # 6.0    [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO
+AB09..AB0E    ; Allowed    # 6.0    [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO
+AB11..AB16    ; Allowed    # 6.0    [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO
+AB20..AB26    ; Allowed    # 6.0    [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO
+AB28..AB2E    ; Allowed    # 6.0    [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
+AB66..AB67    ; Allowed    # 12.0   [2] LATIN SMALL LETTER DZ DIGRAPH WITH RETROFLEX HOOK..LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK
+AC00..D7A3    ; Allowed    # 2.0 [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
+FA0E..FA0F    ; Allowed    # 1.1    [2] CJK COMPATIBILITY IDEOGRAPH-FA0E..CJK COMPATIBILITY IDEOGRAPH-FA0F
+FA11          ; Allowed    # 1.1        CJK COMPATIBILITY IDEOGRAPH-FA11
+FA13..FA14    ; Allowed    # 1.1    [2] CJK COMPATIBILITY IDEOGRAPH-FA13..CJK COMPATIBILITY IDEOGRAPH-FA14
+FA1F          ; Allowed    # 1.1        CJK COMPATIBILITY IDEOGRAPH-FA1F
+FA21          ; Allowed    # 1.1        CJK COMPATIBILITY IDEOGRAPH-FA21
+FA23..FA24    ; Allowed    # 1.1    [2] CJK COMPATIBILITY IDEOGRAPH-FA23..CJK COMPATIBILITY IDEOGRAPH-FA24
+FA27..FA29    ; Allowed    # 1.1    [3] CJK COMPATIBILITY IDEOGRAPH-FA27..CJK COMPATIBILITY IDEOGRAPH-FA29
+11301         ; Allowed    # 7.0        GRANTHA SIGN CANDRABINDU
+11303         ; Allowed    # 7.0        GRANTHA SIGN VISARGA
+1133B         ; Allowed    # 11.0       COMBINING BINDU BELOW
+1133C         ; Allowed    # 7.0        GRANTHA SIGN NUKTA
+16FF0..16FF1  ; Allowed    # 13.0   [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY
+1B150..1B152  ; Allowed    # 12.0   [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO
+1B164..1B167  ; Allowed    # 12.0   [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N
+20000..2A6D6  ; Allowed    # 3.1 [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
+2A6D7..2A6DD  ; Allowed    # 13.0   [7] CJK UNIFIED IDEOGRAPH-2A6D7..CJK UNIFIED IDEOGRAPH-2A6DD
+2A700..2B734  ; Allowed    # 5.2 [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
+2B740..2B81D  ; Allowed    # 6.0  [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
+2B820..2CEA1  ; Allowed    # 8.0 [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
+2CEB0..2EBE0  ; Allowed    # 10.0 [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
+30000..3134A  ; Allowed    # 13.0 [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
+
+# Total code points: 107835
diff --git a/gnu/usr.bin/perl/lib/unicore/IdType.txt b/gnu/usr.bin/perl/lib/unicore/IdType.txt
new file mode 100644 (file)
index 0000000..f717174
--- /dev/null
@@ -0,0 +1,2371 @@
+# IdentifierType.txt
+# Date: 2020-02-07, 22:02:47 GMT
+# © 2020 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
+# Unicode Security Mechanisms for UTS #39
+# Version: 13.0.0
+#
+# For documentation and usage, see http://www.unicode.org/reports/tr39
+#
+# Format
+#
+# Field 0: code point
+# Field 1: set of Identifier_Type values (see Table 1 of http://www.unicode.org/reports/tr39)
+#
+# Any missing code points have the Identifier_Type value Not_Character
+#
+# For the purpose of regular expressions, the property Identifier_Type is defined as
+# mapping each code point to a set of enumerated values.
+# The short name of Identifier_Type is the same as the long name.
+# The possible values are:
+#   Not_Character, Deprecated, Default_Ignorable, Not_NFKC, Not_XID,
+#   Exclusion, Obsolete, Technical, Uncommon_Use, Limited_Use, Inclusion, Recommended
+# The short name of each value is the same as its long name.
+# The default property value for all Unicode code points U+0000..U+10FFFF
+# not mentioned in this data file is Not_Character.
+# As usual, sets are unordered, with no duplicate values.
+
+
+#      Identifier_Type:        Recommended
+
+0030..0039    ; Recommended                    # 1.1   [10] DIGIT ZERO..DIGIT NINE
+0041..005A    ; Recommended                    # 1.1   [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
+005F          ; Recommended                    # 1.1        LOW LINE
+0061..007A    ; Recommended                    # 1.1   [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
+00C0..00D6    ; Recommended                    # 1.1   [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8..00F6    ; Recommended                    # 1.1   [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS
+00F8..0131    ; Recommended                    # 1.1   [58] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER DOTLESS I
+0134..013E    ; Recommended                    # 1.1   [11] LATIN CAPITAL LETTER J WITH CIRCUMFLEX..LATIN SMALL LETTER L WITH CARON
+0141..0148    ; Recommended                    # 1.1    [8] LATIN CAPITAL LETTER L WITH STROKE..LATIN SMALL LETTER N WITH CARON
+014A..017E    ; Recommended                    # 1.1   [53] LATIN CAPITAL LETTER ENG..LATIN SMALL LETTER Z WITH CARON
+018F          ; Recommended                    # 1.1        LATIN CAPITAL LETTER SCHWA
+01A0..01A1    ; Recommended                    # 1.1    [2] LATIN CAPITAL LETTER O WITH HORN..LATIN SMALL LETTER O WITH HORN
+01AF..01B0    ; Recommended                    # 1.1    [2] LATIN CAPITAL LETTER U WITH HORN..LATIN SMALL LETTER U WITH HORN
+01CD..01DC    ; Recommended                    # 1.1   [16] LATIN CAPITAL LETTER A WITH CARON..LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+01DE..01E3    ; Recommended                    # 1.1    [6] LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON..LATIN SMALL LETTER AE WITH MACRON
+01E6..01F0    ; Recommended                    # 1.1   [11] LATIN CAPITAL LETTER G WITH CARON..LATIN SMALL LETTER J WITH CARON
+01F4..01F5    ; Recommended                    # 1.1    [2] LATIN CAPITAL LETTER G WITH ACUTE..LATIN SMALL LETTER G WITH ACUTE
+01F8..01F9    ; Recommended                    # 3.0    [2] LATIN CAPITAL LETTER N WITH GRAVE..LATIN SMALL LETTER N WITH GRAVE
+01FA..0217    ; Recommended                    # 1.1   [30] LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE..LATIN SMALL LETTER U WITH INVERTED BREVE
+0218..021B    ; Recommended                    # 3.0    [4] LATIN CAPITAL LETTER S WITH COMMA BELOW..LATIN SMALL LETTER T WITH COMMA BELOW
+021E..021F    ; Recommended                    # 3.0    [2] LATIN CAPITAL LETTER H WITH CARON..LATIN SMALL LETTER H WITH CARON
+0226..0233    ; Recommended                    # 3.0   [14] LATIN CAPITAL LETTER A WITH DOT ABOVE..LATIN SMALL LETTER Y WITH MACRON
+0259          ; Recommended                    # 1.1        LATIN SMALL LETTER SCHWA
+02BB..02BC    ; Recommended                    # 1.1    [2] MODIFIER LETTER TURNED COMMA..MODIFIER LETTER APOSTROPHE
+02EC          ; Recommended                    # 3.0        MODIFIER LETTER VOICING
+0300..0304    ; Recommended                    # 1.1    [5] COMBINING GRAVE ACCENT..COMBINING MACRON
+0306..030C    ; Recommended                    # 1.1    [7] COMBINING BREVE..COMBINING CARON
+030F..0311    ; Recommended                    # 1.1    [3] COMBINING DOUBLE GRAVE ACCENT..COMBINING INVERTED BREVE
+0313..0314    ; Recommended                    # 1.1    [2] COMBINING COMMA ABOVE..COMBINING REVERSED COMMA ABOVE
+031B          ; Recommended                    # 1.1        COMBINING HORN
+0323..0328    ; Recommended                    # 1.1    [6] COMBINING DOT BELOW..COMBINING OGONEK
+032D..032E    ; Recommended                    # 1.1    [2] COMBINING CIRCUMFLEX ACCENT BELOW..COMBINING BREVE BELOW
+0330..0331    ; Recommended                    # 1.1    [2] COMBINING TILDE BELOW..COMBINING MACRON BELOW
+0335          ; Recommended                    # 1.1        COMBINING SHORT STROKE OVERLAY
+0338..0339    ; Recommended                    # 1.1    [2] COMBINING LONG SOLIDUS OVERLAY..COMBINING RIGHT HALF RING BELOW
+0342          ; Recommended                    # 1.1        COMBINING GREEK PERISPOMENI
+0345          ; Recommended                    # 1.1        COMBINING GREEK YPOGEGRAMMENI
+037B..037D    ; Recommended                    # 5.0    [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+0386          ; Recommended                    # 1.1        GREEK CAPITAL LETTER ALPHA WITH TONOS
+0388..038A    ; Recommended                    # 1.1    [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C          ; Recommended                    # 1.1        GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..03A1    ; Recommended                    # 1.1   [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO
+03A3..03CE    ; Recommended                    # 1.1   [44] GREEK CAPITAL LETTER SIGMA..GREEK SMALL LETTER OMEGA WITH TONOS
+03FC..03FF    ; Recommended                    # 4.1    [4] GREEK RHO WITH STROKE SYMBOL..GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
+0400          ; Recommended                    # 3.0        CYRILLIC CAPITAL LETTER IE WITH GRAVE
+0401..040C    ; Recommended                    # 1.1   [12] CYRILLIC CAPITAL LETTER IO..CYRILLIC CAPITAL LETTER KJE
+040D          ; Recommended                    # 3.0        CYRILLIC CAPITAL LETTER I WITH GRAVE
+040E..044F    ; Recommended                    # 1.1   [66] CYRILLIC CAPITAL LETTER SHORT U..CYRILLIC SMALL LETTER YA
+0450          ; Recommended                    # 3.0        CYRILLIC SMALL LETTER IE WITH GRAVE
+0451..045C    ; Recommended                    # 1.1   [12] CYRILLIC SMALL LETTER IO..CYRILLIC SMALL LETTER KJE
+045D          ; Recommended                    # 3.0        CYRILLIC SMALL LETTER I WITH GRAVE
+045E..045F    ; Recommended                    # 1.1    [2] CYRILLIC SMALL LETTER SHORT U..CYRILLIC SMALL LETTER DZHE
+048A..048B    ; Recommended                    # 3.2    [2] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER SHORT I WITH TAIL
+048C..048F    ; Recommended                    # 3.0    [4] CYRILLIC CAPITAL LETTER SEMISOFT SIGN..CYRILLIC SMALL LETTER ER WITH TICK
+0490..04C4    ; Recommended                    # 1.1   [53] CYRILLIC CAPITAL LETTER GHE WITH UPTURN..CYRILLIC SMALL LETTER KA WITH HOOK
+04C5..04C6    ; Recommended                    # 3.2    [2] CYRILLIC CAPITAL LETTER EL WITH TAIL..CYRILLIC SMALL LETTER EL WITH TAIL
+04C7..04C8    ; Recommended                    # 1.1    [2] CYRILLIC CAPITAL LETTER EN WITH HOOK..CYRILLIC SMALL LETTER EN WITH HOOK
+04C9..04CA    ; Recommended                    # 3.2    [2] CYRILLIC CAPITAL LETTER EN WITH TAIL..CYRILLIC SMALL LETTER EN WITH TAIL
+04CB..04CC    ; Recommended                    # 1.1    [2] CYRILLIC CAPITAL LETTER KHAKASSIAN CHE..CYRILLIC SMALL LETTER KHAKASSIAN CHE
+04CD..04CE    ; Recommended                    # 3.2    [2] CYRILLIC CAPITAL LETTER EM WITH TAIL..CYRILLIC SMALL LETTER EM WITH TAIL
+04CF          ; Recommended                    # 5.0        CYRILLIC SMALL LETTER PALOCHKA
+04D0..04EB    ; Recommended                    # 1.1   [28] CYRILLIC CAPITAL LETTER A WITH BREVE..CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
+04EC..04ED    ; Recommended                    # 3.0    [2] CYRILLIC CAPITAL LETTER E WITH DIAERESIS..CYRILLIC SMALL LETTER E WITH DIAERESIS
+04EE..04F5    ; Recommended                    # 1.1    [8] CYRILLIC CAPITAL LETTER U WITH MACRON..CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+04F6..04F7    ; Recommended                    # 4.1    [2] CYRILLIC CAPITAL LETTER GHE WITH DESCENDER..CYRILLIC SMALL LETTER GHE WITH DESCENDER
+04F8..04F9    ; Recommended                    # 1.1    [2] CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS..CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+04FA..04FF    ; Recommended                    # 5.0    [6] CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK..CYRILLIC SMALL LETTER HA WITH STROKE
+0510..0513    ; Recommended                    # 5.0    [4] CYRILLIC CAPITAL LETTER REVERSED ZE..CYRILLIC SMALL LETTER EL WITH HOOK
+0514..0523    ; Recommended                    # 5.1   [16] CYRILLIC CAPITAL LETTER LHA..CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK
+0524..0525    ; Recommended                    # 5.2    [2] CYRILLIC CAPITAL LETTER PE WITH DESCENDER..CYRILLIC SMALL LETTER PE WITH DESCENDER
+0526..0527    ; Recommended                    # 6.0    [2] CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER..CYRILLIC SMALL LETTER SHHA WITH DESCENDER
+0528..0529    ; Recommended                    # 7.0    [2] CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK..CYRILLIC SMALL LETTER EN WITH LEFT HOOK
+052E..052F    ; Recommended                    # 7.0    [2] CYRILLIC CAPITAL LETTER EL WITH DESCENDER..CYRILLIC SMALL LETTER EL WITH DESCENDER
+0531..0556    ; Recommended                    # 1.1   [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
+0559          ; Recommended                    # 1.1        ARMENIAN MODIFIER LETTER LEFT HALF RING
+0561..0586    ; Recommended                    # 1.1   [38] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LETTER FEH
+05B4          ; Recommended                    # 1.1        HEBREW POINT HIRIQ
+05D0..05EA    ; Recommended                    # 1.1   [27] HEBREW LETTER ALEF..HEBREW LETTER TAV
+05EF          ; Recommended                    # 11.0       HEBREW YOD TRIANGLE
+05F0..05F2    ; Recommended                    # 1.1    [3] HEBREW LIGATURE YIDDISH DOUBLE VAV..HEBREW LIGATURE YIDDISH DOUBLE YOD
+0620          ; Recommended                    # 6.0        ARABIC LETTER KASHMIRI YEH
+0621..063A    ; Recommended                    # 1.1   [26] ARABIC LETTER HAMZA..ARABIC LETTER GHAIN
+063B..063F    ; Recommended                    # 5.1    [5] ARABIC LETTER KEHEH WITH TWO DOTS ABOVE..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
+0641..0652    ; Recommended                    # 1.1   [18] ARABIC LETTER FEH..ARABIC SUKUN
+0653..0655    ; Recommended                    # 3.0    [3] ARABIC MADDAH ABOVE..ARABIC HAMZA BELOW
+0660..0669    ; Recommended                    # 1.1   [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE
+0670..0672    ; Recommended                    # 1.1    [3] ARABIC LETTER SUPERSCRIPT ALEF..ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE
+0674          ; Recommended                    # 1.1        ARABIC LETTER HIGH HAMZA
+0679..068D    ; Recommended                    # 1.1   [21] ARABIC LETTER TTEH..ARABIC LETTER DDAHAL
+068F..06A0    ; Recommended                    # 1.1   [18] ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS..ARABIC LETTER AIN WITH THREE DOTS ABOVE
+06A2..06B7    ; Recommended                    # 1.1   [22] ARABIC LETTER FEH WITH DOT MOVED BELOW..ARABIC LETTER LAM WITH THREE DOTS ABOVE
+06B8..06B9    ; Recommended                    # 3.0    [2] ARABIC LETTER LAM WITH THREE DOTS BELOW..ARABIC LETTER NOON WITH DOT BELOW
+06BA..06BE    ; Recommended                    # 1.1    [5] ARABIC LETTER NOON GHUNNA..ARABIC LETTER HEH DOACHASHMEE
+06BF          ; Recommended                    # 3.0        ARABIC LETTER TCHEH WITH DOT ABOVE
+06C0..06CE    ; Recommended                    # 1.1   [15] ARABIC LETTER HEH WITH YEH ABOVE..ARABIC LETTER YEH WITH SMALL V
+06CF          ; Recommended                    # 3.0        ARABIC LETTER WAW WITH DOT ABOVE
+06D0..06D3    ; Recommended                    # 1.1    [4] ARABIC LETTER E..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+06D5          ; Recommended                    # 1.1        ARABIC LETTER AE
+06E5..06E6    ; Recommended                    # 1.1    [2] ARABIC SMALL WAW..ARABIC SMALL YEH
+06EE..06EF    ; Recommended                    # 4.0    [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V
+06F0..06F9    ; Recommended                    # 1.1   [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE
+06FA..06FC    ; Recommended                    # 3.0    [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW
+06FF          ; Recommended                    # 4.0        ARABIC LETTER HEH WITH INVERTED V
+0750..076D    ; Recommended                    # 4.1   [30] ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW..ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE
+076E..077F    ; Recommended                    # 5.1   [18] ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH BELOW..ARABIC LETTER KAF WITH TWO DOTS ABOVE
+0780..07B0    ; Recommended                    # 3.0   [49] THAANA LETTER HAA..THAANA SUKUN
+07B1          ; Recommended                    # 3.2        THAANA LETTER NAA
+08A0          ; Recommended                    # 6.1        ARABIC LETTER BEH WITH SMALL V BELOW
+08A1          ; Recommended                    # 7.0        ARABIC LETTER BEH WITH HAMZA ABOVE
+08A2..08AC    ; Recommended                    # 6.1   [11] ARABIC LETTER JEEM WITH TWO DOTS ABOVE..ARABIC LETTER ROHINGYA YEH
+08B2          ; Recommended                    # 7.0        ARABIC LETTER ZAIN WITH INVERTED V ABOVE
+08B6..08BD    ; Recommended                    # 9.0    [8] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER AFRICAN NOON
+08BE..08C7    ; Recommended                    # 13.0  [10] ARABIC LETTER PEH WITH SMALL V..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE
+0901..0903    ; Recommended                    # 1.1    [3] DEVANAGARI SIGN CANDRABINDU..DEVANAGARI SIGN VISARGA
+0904          ; Recommended                    # 4.0        DEVANAGARI LETTER SHORT A
+0905..0939    ; Recommended                    # 1.1   [53] DEVANAGARI LETTER A..DEVANAGARI LETTER HA
+093A..093B    ; Recommended                    # 6.0    [2] DEVANAGARI VOWEL SIGN OE..DEVANAGARI VOWEL SIGN OOE
+093C..094D    ; Recommended                    # 1.1   [18] DEVANAGARI SIGN NUKTA..DEVANAGARI SIGN VIRAMA
+094F          ; Recommended                    # 6.0        DEVANAGARI VOWEL SIGN AW
+0950          ; Recommended                    # 1.1        DEVANAGARI OM
+0956..0957    ; Recommended                    # 6.0    [2] DEVANAGARI VOWEL SIGN UE..DEVANAGARI VOWEL SIGN UUE
+0960..0963    ; Recommended                    # 1.1    [4] DEVANAGARI LETTER VOCALIC RR..DEVANAGARI VOWEL SIGN VOCALIC LL
+0966..096F    ; Recommended                    # 1.1   [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE
+0971..0972    ; Recommended                    # 5.1    [2] DEVANAGARI SIGN HIGH SPACING DOT..DEVANAGARI LETTER CANDRA A
+0973..0977    ; Recommended                    # 6.0    [5] DEVANAGARI LETTER OE..DEVANAGARI LETTER UUE
+0979..097A    ; Recommended                    # 5.2    [2] DEVANAGARI LETTER ZHA..DEVANAGARI LETTER HEAVY YA
+097B..097C    ; Recommended                    # 5.0    [2] DEVANAGARI LETTER GGA..DEVANAGARI LETTER JJA
+097D          ; Recommended                    # 4.1        DEVANAGARI LETTER GLOTTAL STOP
+097E..097F    ; Recommended                    # 5.0    [2] DEVANAGARI LETTER DDDA..DEVANAGARI LETTER BBA
+0981..0983    ; Recommended                    # 1.1    [3] BENGALI SIGN CANDRABINDU..BENGALI SIGN VISARGA
+0985..098C    ; Recommended                    # 1.1    [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L
+098F..0990    ; Recommended                    # 1.1    [2] BENGALI LETTER E..BENGALI LETTER AI
+0993..09A8    ; Recommended                    # 1.1   [22] BENGALI LETTER O..BENGALI LETTER NA
+09AA..09B0    ; Recommended                    # 1.1    [7] BENGALI LETTER PA..BENGALI LETTER RA
+09B2          ; Recommended                    # 1.1        BENGALI LETTER LA
+09B6..09B9    ; Recommended                    # 1.1    [4] BENGALI LETTER SHA..BENGALI LETTER HA
+09BC          ; Recommended                    # 1.1        BENGALI SIGN NUKTA
+09BD          ; Recommended                    # 4.0        BENGALI SIGN AVAGRAHA
+09BE..09C4    ; Recommended                    # 1.1    [7] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN VOCALIC RR
+09C7..09C8    ; Recommended                    # 1.1    [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
+09CB..09CD    ; Recommended                    # 1.1    [3] BENGALI VOWEL SIGN O..BENGALI SIGN VIRAMA
+09CE          ; Recommended                    # 4.1        BENGALI LETTER KHANDA TA
+09D7          ; Recommended                    # 1.1        BENGALI AU LENGTH MARK
+09E0..09E3    ; Recommended                    # 1.1    [4] BENGALI LETTER VOCALIC RR..BENGALI VOWEL SIGN VOCALIC LL
+09E6..09F1    ; Recommended                    # 1.1   [12] BENGALI DIGIT ZERO..BENGALI LETTER RA WITH LOWER DIAGONAL
+09FE          ; Recommended                    # 11.0       BENGALI SANDHI MARK
+0A01          ; Recommended                    # 4.0        GURMUKHI SIGN ADAK BINDI
+0A02          ; Recommended                    # 1.1        GURMUKHI SIGN BINDI
+0A03          ; Recommended                    # 4.0        GURMUKHI SIGN VISARGA
+0A05..0A0A    ; Recommended                    # 1.1    [6] GURMUKHI LETTER A..GURMUKHI LETTER UU
+0A0F..0A10    ; Recommended                    # 1.1    [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI
+0A13..0A28    ; Recommended                    # 1.1   [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA
+0A2A..0A30    ; Recommended                    # 1.1    [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA
+0A32          ; Recommended                    # 1.1        GURMUKHI LETTER LA
+0A35          ; Recommended                    # 1.1        GURMUKHI LETTER VA
+0A38..0A39    ; Recommended                    # 1.1    [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA
+0A3C          ; Recommended                    # 1.1        GURMUKHI SIGN NUKTA
+0A3E..0A42    ; Recommended                    # 1.1    [5] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN UU
+0A47..0A48    ; Recommended                    # 1.1    [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
+0A4B..0A4D    ; Recommended                    # 1.1    [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA
+0A5C          ; Recommended                    # 1.1        GURMUKHI LETTER RRA
+0A66..0A74    ; Recommended                    # 1.1   [15] GURMUKHI DIGIT ZERO..GURMUKHI EK ONKAR
+0A81..0A83    ; Recommended                    # 1.1    [3] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN VISARGA
+0A85..0A8B    ; Recommended                    # 1.1    [7] GUJARATI LETTER A..GUJARATI LETTER VOCALIC R
+0A8C          ; Recommended                    # 4.0        GUJARATI LETTER VOCALIC L
+0A8D          ; Recommended                    # 1.1        GUJARATI VOWEL CANDRA E
+0A8F..0A91    ; Recommended                    # 1.1    [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O
+0A93..0AA8    ; Recommended                    # 1.1   [22] GUJARATI LETTER O..GUJARATI LETTER NA
+0AAA..0AB0    ; Recommended                    # 1.1    [7] GUJARATI LETTER PA..GUJARATI LETTER RA
+0AB2..0AB3    ; Recommended                    # 1.1    [2] GUJARATI LETTER LA..GUJARATI LETTER LLA
+0AB5..0AB9    ; Recommended                    # 1.1    [5] GUJARATI LETTER VA..GUJARATI LETTER HA
+0ABC..0AC5    ; Recommended                    # 1.1   [10] GUJARATI SIGN NUKTA..GUJARATI VOWEL SIGN CANDRA E
+0AC7..0AC9    ; Recommended                    # 1.1    [3] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN CANDRA O
+0ACB..0ACD    ; Recommended                    # 1.1    [3] GUJARATI VOWEL SIGN O..GUJARATI SIGN VIRAMA
+0AD0          ; Recommended                    # 1.1        GUJARATI OM
+0AE0          ; Recommended                    # 1.1        GUJARATI LETTER VOCALIC RR
+0AE1..0AE3    ; Recommended                    # 4.0    [3] GUJARATI LETTER VOCALIC LL..GUJARATI VOWEL SIGN VOCALIC LL
+0AE6..0AEF    ; Recommended                    # 1.1   [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE
+0AFA..0AFF    ; Recommended                    # 10.0   [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE
+0B01..0B03    ; Recommended                    # 1.1    [3] ORIYA SIGN CANDRABINDU..ORIYA SIGN VISARGA
+0B05..0B0C    ; Recommended                    # 1.1    [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L
+0B0F..0B10    ; Recommended                    # 1.1    [2] ORIYA LETTER E..ORIYA LETTER AI
+0B13..0B28    ; Recommended                    # 1.1   [22] ORIYA LETTER O..ORIYA LETTER NA
+0B2A..0B30    ; Recommended                    # 1.1    [7] ORIYA LETTER PA..ORIYA LETTER RA
+0B32..0B33    ; Recommended                    # 1.1    [2] ORIYA LETTER LA..ORIYA LETTER LLA
+0B35          ; Recommended                    # 4.0        ORIYA LETTER VA
+0B36..0B39    ; Recommended                    # 1.1    [4] ORIYA LETTER SHA..ORIYA LETTER HA
+0B3C..0B43    ; Recommended                    # 1.1    [8] ORIYA SIGN NUKTA..ORIYA VOWEL SIGN VOCALIC R
+0B47..0B48    ; Recommended                    # 1.1    [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
+0B4B..0B4D    ; Recommended                    # 1.1    [3] ORIYA VOWEL SIGN O..ORIYA SIGN VIRAMA
+0B55          ; Recommended                    # 13.0       ORIYA SIGN OVERLINE
+0B56..0B57    ; Recommended                    # 1.1    [2] ORIYA AI LENGTH MARK..ORIYA AU LENGTH MARK
+0B5F..0B61    ; Recommended                    # 1.1    [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
+0B66..0B6F    ; Recommended                    # 1.1   [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE
+0B71          ; Recommended                    # 4.0        ORIYA LETTER WA
+0B82..0B83    ; Recommended                    # 1.1    [2] TAMIL SIGN ANUSVARA..TAMIL SIGN VISARGA
+0B85..0B8A    ; Recommended                    # 1.1    [6] TAMIL LETTER A..TAMIL LETTER UU
+0B8E..0B90    ; Recommended                    # 1.1    [3] TAMIL LETTER E..TAMIL LETTER AI
+0B92..0B95    ; Recommended                    # 1.1    [4] TAMIL LETTER O..TAMIL LETTER KA
+0B99..0B9A    ; Recommended                    # 1.1    [2] TAMIL LETTER NGA..TAMIL LETTER CA
+0B9C          ; Recommended                    # 1.1        TAMIL LETTER JA
+0B9E..0B9F    ; Recommended                    # 1.1    [2] TAMIL LETTER NYA..TAMIL LETTER TTA
+0BA3..0BA4    ; Recommended                    # 1.1    [2] TAMIL LETTER NNA..TAMIL LETTER TA
+0BA8..0BAA    ; Recommended                    # 1.1    [3] TAMIL LETTER NA..TAMIL LETTER PA
+0BAE..0BB5    ; Recommended                    # 1.1    [8] TAMIL LETTER MA..TAMIL LETTER VA
+0BB6          ; Recommended                    # 4.1        TAMIL LETTER SHA
+0BB7..0BB9    ; Recommended                    # 1.1    [3] TAMIL LETTER SSA..TAMIL LETTER HA
+0BBE..0BC2    ; Recommended                    # 1.1    [5] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN UU
+0BC6..0BC8    ; Recommended                    # 1.1    [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI
+0BCA..0BCD    ; Recommended                    # 1.1    [4] TAMIL VOWEL SIGN O..TAMIL SIGN VIRAMA
+0BD0          ; Recommended                    # 5.1        TAMIL OM
+0BD7          ; Recommended                    # 1.1        TAMIL AU LENGTH MARK
+0BE6          ; Recommended                    # 4.1        TAMIL DIGIT ZERO
+0BE7..0BEF    ; Recommended                    # 1.1    [9] TAMIL DIGIT ONE..TAMIL DIGIT NINE
+0C01..0C03    ; Recommended                    # 1.1    [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
+0C04          ; Recommended                    # 11.0       TELUGU SIGN COMBINING ANUSVARA ABOVE
+0C05..0C0C    ; Recommended                    # 1.1    [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L
+0C0E..0C10    ; Recommended                    # 1.1    [3] TELUGU LETTER E..TELUGU LETTER AI
+0C12..0C28    ; Recommended                    # 1.1   [23] TELUGU LETTER O..TELUGU LETTER NA
+0C2A..0C33    ; Recommended                    # 1.1   [10] TELUGU LETTER PA..TELUGU LETTER LLA
+0C35..0C39    ; Recommended                    # 1.1    [5] TELUGU LETTER VA..TELUGU LETTER HA
+0C3D          ; Recommended                    # 5.1        TELUGU SIGN AVAGRAHA
+0C3E..0C44    ; Recommended                    # 1.1    [7] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN VOCALIC RR
+0C46..0C48    ; Recommended                    # 1.1    [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
+0C4A..0C4D    ; Recommended                    # 1.1    [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA
+0C55..0C56    ; Recommended                    # 1.1    [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
+0C60..0C61    ; Recommended                    # 1.1    [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
+0C66..0C6F    ; Recommended                    # 1.1   [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE
+0C80          ; Recommended                    # 9.0        KANNADA SIGN SPACING CANDRABINDU
+0C82..0C83    ; Recommended                    # 1.1    [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
+0C85..0C8C    ; Recommended                    # 1.1    [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
+0C8E..0C90    ; Recommended                    # 1.1    [3] KANNADA LETTER E..KANNADA LETTER AI
+0C92..0CA8    ; Recommended                    # 1.1   [23] KANNADA LETTER O..KANNADA LETTER NA
+0CAA..0CB3    ; Recommended                    # 1.1   [10] KANNADA LETTER PA..KANNADA LETTER LLA
+0CB5..0CB9    ; Recommended                    # 1.1    [5] KANNADA LETTER VA..KANNADA LETTER HA
+0CBC..0CBD    ; Recommended                    # 4.0    [2] KANNADA SIGN NUKTA..KANNADA SIGN AVAGRAHA
+0CBE..0CC4    ; Recommended                    # 1.1    [7] KANNADA VOWEL SIGN AA..KANNADA VOWEL SIGN VOCALIC RR
+0CC6..0CC8    ; Recommended                    # 1.1    [3] KANNADA VOWEL SIGN E..KANNADA VOWEL SIGN AI
+0CCA..0CCD    ; Recommended                    # 1.1    [4] KANNADA VOWEL SIGN O..KANNADA SIGN VIRAMA
+0CD5..0CD6    ; Recommended                    # 1.1    [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
+0CE0..0CE1    ; Recommended                    # 1.1    [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
+0CE2..0CE3    ; Recommended                    # 5.0    [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
+0CE6..0CEF    ; Recommended                    # 1.1   [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
+0CF1..0CF2    ; Recommended                    # 5.0    [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
+0D00          ; Recommended                    # 10.0       MALAYALAM SIGN COMBINING ANUSVARA ABOVE
+0D02..0D03    ; Recommended                    # 1.1    [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
+0D05..0D0C    ; Recommended                    # 1.1    [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
+0D0E..0D10    ; Recommended                    # 1.1    [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
+0D12..0D28    ; Recommended                    # 1.1   [23] MALAYALAM LETTER O..MALAYALAM LETTER NA
+0D29          ; Recommended                    # 6.0        MALAYALAM LETTER NNNA
+0D2A..0D39    ; Recommended                    # 1.1   [16] MALAYALAM LETTER PA..MALAYALAM LETTER HA
+0D3A          ; Recommended                    # 6.0        MALAYALAM LETTER TTTA
+0D3D          ; Recommended                    # 5.1        MALAYALAM SIGN AVAGRAHA
+0D3E..0D43    ; Recommended                    # 1.1    [6] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN VOCALIC R
+0D46..0D48    ; Recommended                    # 1.1    [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
+0D4A..0D4D    ; Recommended                    # 1.1    [4] MALAYALAM VOWEL SIGN O..MALAYALAM SIGN VIRAMA
+0D4E          ; Recommended                    # 6.0        MALAYALAM LETTER DOT REPH
+0D54..0D56    ; Recommended                    # 9.0    [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL
+0D57          ; Recommended                    # 1.1        MALAYALAM AU LENGTH MARK
+0D60..0D61    ; Recommended                    # 1.1    [2] MALAYALAM LETTER VOCALIC RR..MALAYALAM LETTER VOCALIC LL
+0D66..0D6F    ; Recommended                    # 1.1   [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE
+0D7A..0D7F    ; Recommended                    # 5.1    [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
+0D82..0D83    ; Recommended                    # 3.0    [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
+0D85..0D8E    ; Recommended                    # 3.0   [10] SINHALA LETTER AYANNA..SINHALA LETTER IRUUYANNA
+0D91..0D96    ; Recommended                    # 3.0    [6] SINHALA LETTER EYANNA..SINHALA LETTER AUYANNA
+0D9A..0DA5    ; Recommended                    # 3.0   [12] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA
+0DA7..0DB1    ; Recommended                    # 3.0   [11] SINHALA LETTER ALPAPRAANA TTAYANNA..SINHALA LETTER DANTAJA NAYANNA
+0DB3..0DBB    ; Recommended                    # 3.0    [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA
+0DBD          ; Recommended                    # 3.0        SINHALA LETTER DANTAJA LAYANNA
+0DC0..0DC6    ; Recommended                    # 3.0    [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA
+0DCA          ; Recommended                    # 3.0        SINHALA SIGN AL-LAKUNA
+0DCF..0DD4    ; Recommended                    # 3.0    [6] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
+0DD6          ; Recommended                    # 3.0        SINHALA VOWEL SIGN DIGA PAA-PILLA
+0DD8..0DDE    ; Recommended                    # 3.0    [7] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA
+0DF2          ; Recommended                    # 3.0        SINHALA VOWEL SIGN DIGA GAETTA-PILLA
+0E01..0E32    ; Recommended                    # 1.1   [50] THAI CHARACTER KO KAI..THAI CHARACTER SARA AA
+0E34..0E3A    ; Recommended                    # 1.1    [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
+0E40..0E4E    ; Recommended                    # 1.1   [15] THAI CHARACTER SARA E..THAI CHARACTER YAMAKKAN
+0E50..0E59    ; Recommended                    # 1.1   [10] THAI DIGIT ZERO..THAI DIGIT NINE
+0E81..0E82    ; Recommended                    # 1.1    [2] LAO LETTER KO..LAO LETTER KHO SUNG
+0E84          ; Recommended                    # 1.1        LAO LETTER KHO TAM
+0E86          ; Recommended                    # 12.0       LAO LETTER PALI GHA
+0E87..0E88    ; Recommended                    # 1.1    [2] LAO LETTER NGO..LAO LETTER CO
+0E89          ; Recommended                    # 12.0       LAO LETTER PALI CHA
+0E8A          ; Recommended                    # 1.1        LAO LETTER SO TAM
+0E8C          ; Recommended                    # 12.0       LAO LETTER PALI JHA
+0E8D          ; Recommended                    # 1.1        LAO LETTER NYO
+0E8E..0E93    ; Recommended                    # 12.0   [6] LAO LETTER PALI NYA..LAO LETTER PALI NNA
+0E94..0E97    ; Recommended                    # 1.1    [4] LAO LETTER DO..LAO LETTER THO TAM
+0E98          ; Recommended                    # 12.0       LAO LETTER PALI DHA
+0E99..0E9F    ; Recommended                    # 1.1    [7] LAO LETTER NO..LAO LETTER FO SUNG
+0EA0          ; Recommended                    # 12.0       LAO LETTER PALI BHA
+0EA1..0EA3    ; Recommended                    # 1.1    [3] LAO LETTER MO..LAO LETTER LO LING
+0EA5          ; Recommended                    # 1.1        LAO LETTER LO LOOT
+0EA7          ; Recommended                    # 1.1        LAO LETTER WO
+0EA8..0EA9    ; Recommended                    # 12.0   [2] LAO LETTER SANSKRIT SHA..LAO LETTER SANSKRIT SSA
+0EAA..0EAB    ; Recommended                    # 1.1    [2] LAO LETTER SO SUNG..LAO LETTER HO SUNG
+0EAC          ; Recommended                    # 12.0       LAO LETTER PALI LLA
+0EAD..0EB2    ; Recommended                    # 1.1    [6] LAO LETTER O..LAO VOWEL SIGN AA
+0EB4..0EB9    ; Recommended                    # 1.1    [6] LAO VOWEL SIGN I..LAO VOWEL SIGN UU
+0EBA          ; Recommended                    # 12.0       LAO SIGN PALI VIRAMA
+0EBB..0EBD    ; Recommended                    # 1.1    [3] LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN NYO
+0EC0..0EC4    ; Recommended                    # 1.1    [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI
+0EC6          ; Recommended                    # 1.1        LAO KO LA
+0EC8..0ECD    ; Recommended                    # 1.1    [6] LAO TONE MAI EK..LAO NIGGAHITA
+0ED0..0ED9    ; Recommended                    # 1.1   [10] LAO DIGIT ZERO..LAO DIGIT NINE
+0EDE..0EDF    ; Recommended                    # 6.1    [2] LAO LETTER KHMU GO..LAO LETTER KHMU NYO
+0F00          ; Recommended                    # 2.0        TIBETAN SYLLABLE OM
+0F20..0F29    ; Recommended                    # 2.0   [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE
+0F35          ; Recommended                    # 2.0        TIBETAN MARK NGAS BZUNG NYI ZLA
+0F37          ; Recommended                    # 2.0        TIBETAN MARK NGAS BZUNG SGOR RTAGS
+0F3E..0F42    ; Recommended                    # 2.0    [5] TIBETAN SIGN YAR TSHES..TIBETAN LETTER GA
+0F44..0F47    ; Recommended                    # 2.0    [4] TIBETAN LETTER NGA..TIBETAN LETTER JA
+0F49..0F4C    ; Recommended                    # 2.0    [4] TIBETAN LETTER NYA..TIBETAN LETTER DDA
+0F4E..0F51    ; Recommended                    # 2.0    [4] TIBETAN LETTER NNA..TIBETAN LETTER DA
+0F53..0F56    ; Recommended                    # 2.0    [4] TIBETAN LETTER NA..TIBETAN LETTER BA
+0F58..0F5B    ; Recommended                    # 2.0    [4] TIBETAN LETTER MA..TIBETAN LETTER DZA
+0F5D..0F68    ; Recommended                    # 2.0   [12] TIBETAN LETTER WA..TIBETAN LETTER A
+0F6A          ; Recommended                    # 3.0        TIBETAN LETTER FIXED-FORM RA
+0F6B..0F6C    ; Recommended                    # 5.1    [2] TIBETAN LETTER KKA..TIBETAN LETTER RRA
+0F71..0F72    ; Recommended                    # 2.0    [2] TIBETAN VOWEL SIGN AA..TIBETAN VOWEL SIGN I
+0F74          ; Recommended                    # 2.0        TIBETAN VOWEL SIGN U
+0F7A..0F80    ; Recommended                    # 2.0    [7] TIBETAN VOWEL SIGN E..TIBETAN VOWEL SIGN REVERSED I
+0F82..0F84    ; Recommended                    # 2.0    [3] TIBETAN SIGN NYI ZLA NAA DA..TIBETAN MARK HALANTA
+0F86..0F8B    ; Recommended                    # 2.0    [6] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN GRU MED RGYINGS
+0F8C..0F8F    ; Recommended                    # 6.0    [4] TIBETAN SIGN INVERTED MCHU CAN..TIBETAN SUBJOINED SIGN INVERTED MCHU CAN
+0F90..0F92    ; Recommended                    # 2.0    [3] TIBETAN SUBJOINED LETTER KA..TIBETAN SUBJOINED LETTER GA
+0F94..0F95    ; Recommended                    # 2.0    [2] TIBETAN SUBJOINED LETTER NGA..TIBETAN SUBJOINED LETTER CA
+0F96          ; Recommended                    # 3.0        TIBETAN SUBJOINED LETTER CHA
+0F97          ; Recommended                    # 2.0        TIBETAN SUBJOINED LETTER JA
+0F99..0F9C    ; Recommended                    # 2.0    [4] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER DDA
+0F9E..0FA1    ; Recommended                    # 2.0    [4] TIBETAN SUBJOINED LETTER NNA..TIBETAN SUBJOINED LETTER DA
+0FA3..0FA6    ; Recommended                    # 2.0    [4] TIBETAN SUBJOINED LETTER NA..TIBETAN SUBJOINED LETTER BA
+0FA8..0FAB    ; Recommended                    # 2.0    [4] TIBETAN SUBJOINED LETTER MA..TIBETAN SUBJOINED LETTER DZA
+0FAD          ; Recommended                    # 2.0        TIBETAN SUBJOINED LETTER WA
+0FAE..0FB0    ; Recommended                    # 3.0    [3] TIBETAN SUBJOINED LETTER ZHA..TIBETAN SUBJOINED LETTER -A
+0FB1..0FB7    ; Recommended                    # 2.0    [7] TIBETAN SUBJOINED LETTER YA..TIBETAN SUBJOINED LETTER HA
+0FB8          ; Recommended                    # 3.0        TIBETAN SUBJOINED LETTER A
+0FBA..0FBC    ; Recommended                    # 3.0    [3] TIBETAN SUBJOINED LETTER FIXED-FORM WA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
+0FC6          ; Recommended                    # 3.0        TIBETAN SYMBOL PADMA GDAN
+1000..1021    ; Recommended                    # 3.0   [34] MYANMAR LETTER KA..MYANMAR LETTER A
+1022          ; Recommended                    # 5.1        MYANMAR LETTER SHAN A
+1023..1027    ; Recommended                    # 3.0    [5] MYANMAR LETTER I..MYANMAR LETTER E
+1028          ; Recommended                    # 5.1        MYANMAR LETTER MON E
+1029..102A    ; Recommended                    # 3.0    [2] MYANMAR LETTER O..MYANMAR LETTER AU
+102B          ; Recommended                    # 5.1        MYANMAR VOWEL SIGN TALL AA
+102C..1032    ; Recommended                    # 3.0    [7] MYANMAR VOWEL SIGN AA..MYANMAR VOWEL SIGN AI
+1033..1035    ; Recommended                    # 5.1    [3] MYANMAR VOWEL SIGN MON II..MYANMAR VOWEL SIGN E ABOVE
+1036..1039    ; Recommended                    # 3.0    [4] MYANMAR SIGN ANUSVARA..MYANMAR SIGN VIRAMA
+103A..103F    ; Recommended                    # 5.1    [6] MYANMAR SIGN ASAT..MYANMAR LETTER GREAT SA
+1040..1049    ; Recommended                    # 3.0   [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE
+1050..1059    ; Recommended                    # 3.0   [10] MYANMAR LETTER SHA..MYANMAR VOWEL SIGN VOCALIC LL
+105A..1099    ; Recommended                    # 5.1   [64] MYANMAR LETTER MON NGA..MYANMAR SHAN DIGIT NINE
+109A..109D    ; Recommended                    # 5.2    [4] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON AI
+10C7          ; Recommended                    # 6.1        GEORGIAN CAPITAL LETTER YN
+10CD          ; Recommended                    # 6.1        GEORGIAN CAPITAL LETTER AEN
+10D0..10F0    ; Recommended                    # 1.1   [33] GEORGIAN LETTER AN..GEORGIAN LETTER HAE
+10F7..10F8    ; Recommended                    # 3.2    [2] GEORGIAN LETTER YN..GEORGIAN LETTER ELIFI
+10F9..10FA    ; Recommended                    # 4.1    [2] GEORGIAN LETTER TURNED GAN..GEORGIAN LETTER AIN
+10FD..10FF    ; Recommended                    # 6.1    [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN
+1200..1206    ; Recommended                    # 3.0    [7] ETHIOPIC SYLLABLE HA..ETHIOPIC SYLLABLE HO
+1207          ; Recommended                    # 4.1        ETHIOPIC SYLLABLE HOA
+1208..1246    ; Recommended                    # 3.0   [63] ETHIOPIC SYLLABLE LA..ETHIOPIC SYLLABLE QO
+1247          ; Recommended                    # 4.1        ETHIOPIC SYLLABLE QOA
+1248          ; Recommended                    # 3.0        ETHIOPIC SYLLABLE QWA
+124A..124D    ; Recommended                    # 3.0    [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE
+1250..1256    ; Recommended                    # 3.0    [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO
+1258          ; Recommended                    # 3.0        ETHIOPIC SYLLABLE QHWA
+125A..125D    ; Recommended                    # 3.0    [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE
+1260..1286    ; Recommended                    # 3.0   [39] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XO
+1287          ; Recommended                    # 4.1        ETHIOPIC SYLLABLE XOA
+1288          ; Recommended                    # 3.0        ETHIOPIC SYLLABLE XWA
+128A..128D    ; Recommended                    # 3.0    [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE
+1290..12AE    ; Recommended                    # 3.0   [31] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KO
+12AF          ; Recommended                    # 4.1        ETHIOPIC SYLLABLE KOA
+12B0          ; Recommended                    # 3.0        ETHIOPIC SYLLABLE KWA
+12B2..12B5    ; Recommended                    # 3.0    [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE
+12B8..12BE    ; Recommended                    # 3.0    [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO
+12C0          ; Recommended                    # 3.0        ETHIOPIC SYLLABLE KXWA
+12C2..12C5    ; Recommended                    # 3.0    [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE
+12C8..12CE    ; Recommended                    # 3.0    [7] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE WO
+12CF          ; Recommended                    # 4.1        ETHIOPIC SYLLABLE WOA
+12D0..12D6    ; Recommended                    # 3.0    [7] ETHIOPIC SYLLABLE PHARYNGEAL A..ETHIOPIC SYLLABLE PHARYNGEAL O
+12D8..12EE    ; Recommended                    # 3.0   [23] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE YO
+12EF          ; Recommended                    # 4.1        ETHIOPIC SYLLABLE YOA
+12F0..130E    ; Recommended                    # 3.0   [31] ETHIOPIC SYLLABLE DA..ETHIOPIC SYLLABLE GO
+130F          ; Recommended                    # 4.1        ETHIOPIC SYLLABLE GOA
+1310          ; Recommended                    # 3.0        ETHIOPIC SYLLABLE GWA
+1312..1315    ; Recommended                    # 3.0    [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
+1318..131E    ; Recommended                    # 3.0    [7] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE GGO
+131F          ; Recommended                    # 4.1        ETHIOPIC SYLLABLE GGWAA
+1320..1346    ; Recommended                    # 3.0   [39] ETHIOPIC SYLLABLE THA..ETHIOPIC SYLLABLE TZO
+1347          ; Recommended                    # 4.1        ETHIOPIC SYLLABLE TZOA
+1348..135A    ; Recommended                    # 3.0   [19] ETHIOPIC SYLLABLE FA..ETHIOPIC SYLLABLE FYA
+135D..135E    ; Recommended                    # 6.0    [2] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING VOWEL LENGTH MARK
+135F          ; Recommended                    # 4.1        ETHIOPIC COMBINING GEMINATION MARK
+1380..138F    ; Recommended                    # 4.1   [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE
+1780..17A2    ; Recommended                    # 3.0   [35] KHMER LETTER KA..KHMER LETTER QA
+17A5..17A7    ; Recommended                    # 3.0    [3] KHMER INDEPENDENT VOWEL QI..KHMER INDEPENDENT VOWEL QU
+17A9..17B3    ; Recommended                    # 3.0   [11] KHMER INDEPENDENT VOWEL QUU..KHMER INDEPENDENT VOWEL QAU
+17B6..17CA    ; Recommended                    # 3.0   [21] KHMER VOWEL SIGN AA..KHMER SIGN TRIISAP
+17D2          ; Recommended                    # 3.0        KHMER SIGN COENG
+17D7          ; Recommended                    # 3.0        KHMER SIGN LEK TOO
+17DC          ; Recommended                    # 3.0        KHMER SIGN AVAKRAHASANYA
+17E0..17E9    ; Recommended                    # 3.0   [10] KHMER DIGIT ZERO..KHMER DIGIT NINE
+1C90..1CBA    ; Recommended                    # 11.0  [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN
+1CBD..1CBF    ; Recommended                    # 11.0   [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN
+1E00..1E99    ; Recommended                    # 1.1  [154] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER Y WITH RING ABOVE
+1E9E          ; Recommended                    # 5.1        LATIN CAPITAL LETTER SHARP S
+1EA0..1EF9    ; Recommended                    # 1.1   [90] LATIN CAPITAL LETTER A WITH DOT BELOW..LATIN SMALL LETTER Y WITH TILDE
+1F00..1F15    ; Recommended                    # 1.1   [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+1F18..1F1D    ; Recommended                    # 1.1    [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+1F20..1F45    ; Recommended                    # 1.1   [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+1F48..1F4D    ; Recommended                    # 1.1    [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+1F50..1F57    ; Recommended                    # 1.1    [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+1F59          ; Recommended                    # 1.1        GREEK CAPITAL LETTER UPSILON WITH DASIA
+1F5B          ; Recommended                    # 1.1        GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+1F5D          ; Recommended                    # 1.1        GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+1F5F..1F70    ; Recommended                    # 1.1   [18] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER ALPHA WITH VARIA
+1F72          ; Recommended                    # 1.1        GREEK SMALL LETTER EPSILON WITH VARIA
+1F74          ; Recommended                    # 1.1        GREEK SMALL LETTER ETA WITH VARIA
+1F76          ; Recommended                    # 1.1        GREEK SMALL LETTER IOTA WITH VARIA
+1F78          ; Recommended                    # 1.1        GREEK SMALL LETTER OMICRON WITH VARIA
+1F7A          ; Recommended                    # 1.1        GREEK SMALL LETTER UPSILON WITH VARIA
+1F7C          ; Recommended                    # 1.1        GREEK SMALL LETTER OMEGA WITH VARIA
+1F80..1FB4    ; Recommended                    # 1.1   [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+1FB6..1FBA    ; Recommended                    # 1.1    [5] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH VARIA
+1FBC          ; Recommended                    # 1.1        GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+1FC2..1FC4    ; Recommended                    # 1.1    [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+1FC6..1FC8    ; Recommended                    # 1.1    [3] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER EPSILON WITH VARIA
+1FCA          ; Recommended                    # 1.1        GREEK CAPITAL LETTER ETA WITH VARIA
+1FCC          ; Recommended                    # 1.1        GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+1FD0..1FD2    ; Recommended                    # 1.1    [3] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
+1FD6..1FDA    ; Recommended                    # 1.1    [5] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH VARIA
+1FE0..1FE2    ; Recommended                    # 1.1    [3] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
+1FE4..1FEA    ; Recommended                    # 1.1    [7] GREEK SMALL LETTER RHO WITH PSILI..GREEK CAPITAL LETTER UPSILON WITH VARIA
+1FEC          ; Recommended                    # 1.1        GREEK CAPITAL LETTER RHO WITH DASIA
+1FF2..1FF4    ; Recommended                    # 1.1    [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+1FF6..1FF8    ; Recommended                    # 1.1    [3] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMICRON WITH VARIA
+1FFA          ; Recommended                    # 1.1        GREEK CAPITAL LETTER OMEGA WITH VARIA
+1FFC          ; Recommended                    # 1.1        GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+2D27          ; Recommended                    # 6.1        GEORGIAN SMALL LETTER YN
+2D2D          ; Recommended                    # 6.1        GEORGIAN SMALL LETTER AEN
+2D80..2D96    ; Recommended                    # 4.1   [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE
+2DA0..2DA6    ; Recommended                    # 4.1    [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO
+2DA8..2DAE    ; Recommended                    # 4.1    [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO
+2DB0..2DB6    ; Recommended                    # 4.1    [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO
+2DB8..2DBE    ; Recommended                    # 4.1    [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO
+2DC0..2DC6    ; Recommended                    # 4.1    [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO
+2DC8..2DCE    ; Recommended                    # 4.1    [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO
+2DD0..2DD6    ; Recommended                    # 4.1    [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO
+2DD8..2DDE    ; Recommended                    # 4.1    [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO
+3005..3007    ; Recommended                    # 1.1    [3] IDEOGRAPHIC ITERATION MARK..IDEOGRAPHIC NUMBER ZERO
+3041..3094    ; Recommended                    # 1.1   [84] HIRAGANA LETTER SMALL A..HIRAGANA LETTER VU
+3095..3096    ; Recommended                    # 3.2    [2] HIRAGANA LETTER SMALL KA..HIRAGANA LETTER SMALL KE
+3099..309A    ; Recommended                    # 1.1    [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309D..309E    ; Recommended                    # 1.1    [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
+30A1..30FA    ; Recommended                    # 1.1   [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO
+30FC..30FE    ; Recommended                    # 1.1    [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK
+3105..312C    ; Recommended                    # 1.1   [40] BOPOMOFO LETTER B..BOPOMOFO LETTER GN
+312D          ; Recommended                    # 5.1        BOPOMOFO LETTER IH
+312F          ; Recommended                    # 11.0       BOPOMOFO LETTER NN
+31A0..31B7    ; Recommended                    # 3.0   [24] BOPOMOFO LETTER BU..BOPOMOFO FINAL LETTER H
+31B8..31BA    ; Recommended                    # 6.0    [3] BOPOMOFO LETTER GH..BOPOMOFO LETTER ZY
+31BB..31BF    ; Recommended                    # 13.0   [5] BOPOMOFO FINAL LETTER G..BOPOMOFO LETTER AH
+3400..4DB5    ; Recommended                    # 3.0 [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
+4DB6..4DBF    ; Recommended                    # 13.0  [10] CJK UNIFIED IDEOGRAPH-4DB6..CJK UNIFIED IDEOGRAPH-4DBF
+4E00..9FA5    ; Recommended                    # 1.1 [20902] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FA5
+9FA6..9FBB    ; Recommended                    # 4.1   [22] CJK UNIFIED IDEOGRAPH-9FA6..CJK UNIFIED IDEOGRAPH-9FBB
+9FBC..9FC3    ; Recommended                    # 5.1    [8] CJK UNIFIED IDEOGRAPH-9FBC..CJK UNIFIED IDEOGRAPH-9FC3
+9FC4..9FCB    ; Recommended                    # 5.2    [8] CJK UNIFIED IDEOGRAPH-9FC4..CJK UNIFIED IDEOGRAPH-9FCB
+9FCC          ; Recommended                    # 6.1        CJK UNIFIED IDEOGRAPH-9FCC
+9FCD..9FD5    ; Recommended                    # 8.0    [9] CJK UNIFIED IDEOGRAPH-9FCD..CJK UNIFIED IDEOGRAPH-9FD5
+9FD6..9FEA    ; Recommended                    # 10.0  [21] CJK UNIFIED IDEOGRAPH-9FD6..CJK UNIFIED IDEOGRAPH-9FEA
+9FEB..9FEF    ; Recommended                    # 11.0   [5] CJK UNIFIED IDEOGRAPH-9FEB..CJK UNIFIED IDEOGRAPH-9FEF
+9FF0..9FFC    ; Recommended                    # 13.0  [13] CJK UNIFIED IDEOGRAPH-9FF0..CJK UNIFIED IDEOGRAPH-9FFC
+A67F          ; Recommended                    # 5.1        CYRILLIC PAYEROK
+A717..A71A    ; Recommended                    # 5.0    [4] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOWER RIGHT CORNER ANGLE
+A71B..A71F    ; Recommended                    # 5.1    [5] MODIFIER LETTER RAISED UP ARROW..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
+A788          ; Recommended                    # 5.1        MODIFIER LETTER LOW CIRCUMFLEX ACCENT
+A78D          ; Recommended                    # 6.0        LATIN CAPITAL LETTER TURNED H
+A792..A793    ; Recommended                    # 6.1    [2] LATIN CAPITAL LETTER C WITH BAR..LATIN SMALL LETTER C WITH BAR
+A7AA          ; Recommended                    # 6.1        LATIN CAPITAL LETTER H WITH HOOK
+A7AE          ; Recommended                    # 9.0        LATIN CAPITAL LETTER SMALL CAPITAL I
+A7B8..A7B9    ; Recommended                    # 11.0   [2] LATIN CAPITAL LETTER U WITH STROKE..LATIN SMALL LETTER U WITH STROKE
+A7C2..A7C6    ; Recommended                    # 12.0   [5] LATIN CAPITAL LETTER ANGLICANA W..LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+A7C7..A7CA    ; Recommended                    # 13.0   [4] LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A9E7..A9FE    ; Recommended                    # 7.0   [24] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING BHA
+AA60..AA76    ; Recommended                    # 5.2   [23] MYANMAR LETTER KHAMTI GA..MYANMAR LOGOGRAM KHAMTI HM
+AA7A..AA7B    ; Recommended                    # 5.2    [2] MYANMAR LETTER AITON RA..MYANMAR SIGN PAO KAREN TONE
+AA7C..AA7F    ; Recommended                    # 7.0    [4] MYANMAR SIGN TAI LAING TONE-2..MYANMAR LETTER SHWE PALAUNG SHA
+AB01..AB06    ; Recommended                    # 6.0    [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO
+AB09..AB0E    ; Recommended                    # 6.0    [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO
+AB11..AB16    ; Recommended                    # 6.0    [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO
+AB20..AB26    ; Recommended                    # 6.0    [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO
+AB28..AB2E    ; Recommended                    # 6.0    [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
+AB66..AB67    ; Recommended                    # 12.0   [2] LATIN SMALL LETTER DZ DIGRAPH WITH RETROFLEX HOOK..LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK
+AC00..D7A3    ; Recommended                    # 2.0 [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
+FA0E..FA0F    ; Recommended                    # 1.1    [2] CJK COMPATIBILITY IDEOGRAPH-FA0E..CJK COMPATIBILITY IDEOGRAPH-FA0F
+FA11          ; Recommended                    # 1.1        CJK COMPATIBILITY IDEOGRAPH-FA11
+FA13..FA14    ; Recommended                    # 1.1    [2] CJK COMPATIBILITY IDEOGRAPH-FA13..CJK COMPATIBILITY IDEOGRAPH-FA14
+FA1F          ; Recommended                    # 1.1        CJK COMPATIBILITY IDEOGRAPH-FA1F
+FA21          ; Recommended                    # 1.1        CJK COMPATIBILITY IDEOGRAPH-FA21
+FA23..FA24    ; Recommended                    # 1.1    [2] CJK COMPATIBILITY IDEOGRAPH-FA23..CJK COMPATIBILITY IDEOGRAPH-FA24
+FA27..FA29    ; Recommended                    # 1.1    [3] CJK COMPATIBILITY IDEOGRAPH-FA27..CJK COMPATIBILITY IDEOGRAPH-FA29
+11301         ; Recommended                    # 7.0        GRANTHA SIGN CANDRABINDU
+11303         ; Recommended                    # 7.0        GRANTHA SIGN VISARGA
+1133B         ; Recommended                    # 11.0       COMBINING BINDU BELOW
+1133C         ; Recommended                    # 7.0        GRANTHA SIGN NUKTA
+16FF0..16FF1  ; Recommended                    # 13.0   [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY
+1B150..1B152  ; Recommended                    # 12.0   [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO
+1B164..1B167  ; Recommended                    # 12.0   [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N
+20000..2A6D6  ; Recommended                    # 3.1 [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
+2A6D7..2A6DD  ; Recommended                    # 13.0   [7] CJK UNIFIED IDEOGRAPH-2A6D7..CJK UNIFIED IDEOGRAPH-2A6DD
+2A700..2B734  ; Recommended                    # 5.2 [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
+2B740..2B81D  ; Recommended                    # 6.0  [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
+2B820..2CEA1  ; Recommended                    # 8.0 [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
+2CEB0..2EBE0  ; Recommended                    # 10.0 [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
+30000..3134A  ; Recommended                    # 13.0 [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
+
+# Total code points: 107816
+
+#      Identifier_Type:        Inclusion
+
+0027          ; Inclusion                      # 1.1        APOSTROPHE
+002D..002E    ; Inclusion                      # 1.1    [2] HYPHEN-MINUS..FULL STOP
+003A          ; Inclusion                      # 1.1        COLON
+00B7          ; Inclusion                      # 1.1        MIDDLE DOT
+0375          ; Inclusion                      # 1.1        GREEK LOWER NUMERAL SIGN
+058A          ; Inclusion                      # 3.0        ARMENIAN HYPHEN
+05F3..05F4    ; Inclusion                      # 1.1    [2] HEBREW PUNCTUATION GERESH..HEBREW PUNCTUATION GERSHAYIM
+06FD..06FE    ; Inclusion                      # 3.0    [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN
+0F0B          ; Inclusion                      # 2.0        TIBETAN MARK INTERSYLLABIC TSHEG
+200C..200D    ; Inclusion                      # 1.1    [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER
+2010          ; Inclusion                      # 1.1        HYPHEN
+2019          ; Inclusion                      # 1.1        RIGHT SINGLE QUOTATION MARK
+2027          ; Inclusion                      # 1.1        HYPHENATION POINT
+30A0          ; Inclusion                      # 3.2        KATAKANA-HIRAGANA DOUBLE HYPHEN
+30FB          ; Inclusion                      # 1.1        KATAKANA MIDDLE DOT
+
+# Total code points: 19
+
+#      Identifier_Type:        Limited_Use
+
+0710..072C    ; Limited_Use                    # 3.0   [29] SYRIAC LETTER ALAPH..SYRIAC LETTER TAW
+072D..072F    ; Limited_Use                    # 4.0    [3] SYRIAC LETTER PERSIAN BHETH..SYRIAC LETTER PERSIAN DHALATH
+0730..073F    ; Limited_Use                    # 3.0   [16] SYRIAC PTHAHA ABOVE..SYRIAC RWAHA
+074D..074F    ; Limited_Use                    # 4.0    [3] SYRIAC LETTER SOGDIAN ZHAIN..SYRIAC LETTER SOGDIAN FE
+07C0..07E7    ; Limited_Use                    # 5.0   [40] NKO DIGIT ZERO..NKO LETTER NYA WOLOSO
+07EB..07F5    ; Limited_Use                    # 5.0   [11] NKO COMBINING SHORT HIGH TONE..NKO LOW TONE APOSTROPHE
+07FD          ; Limited_Use                    # 11.0       NKO DANTAYALAN
+0840..085B    ; Limited_Use                    # 6.0   [28] MANDAIC LETTER HALQA..MANDAIC GEMINATION MARK
+0860..086A    ; Limited_Use                    # 10.0  [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
+13A0..13F4    ; Limited_Use                    # 3.0   [85] CHEROKEE LETTER A..CHEROKEE LETTER YV
+13F5          ; Limited_Use                    # 8.0        CHEROKEE LETTER MV
+13F8..13FD    ; Limited_Use                    # 8.0    [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV
+1401..166C    ; Limited_Use                    # 3.0  [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA
+166F..1676    ; Limited_Use                    # 3.0    [8] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS NNGAA
+1677..167F    ; Limited_Use                    # 5.2    [9] CANADIAN SYLLABICS WOODS-CREE THWEE..CANADIAN SYLLABICS BLACKFOOT W
+18B0..18F5    ; Limited_Use                    # 5.2   [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S
+1900..191C    ; Limited_Use                    # 4.0   [29] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER HA
+191D..191E    ; Limited_Use                    # 7.0    [2] LIMBU LETTER GYAN..LIMBU LETTER TRA
+1920..192B    ; Limited_Use                    # 4.0   [12] LIMBU VOWEL SIGN A..LIMBU SUBJOINED LETTER WA
+1930..193B    ; Limited_Use                    # 4.0   [12] LIMBU SMALL LETTER KA..LIMBU SIGN SA-I
+1946..196D    ; Limited_Use                    # 4.0   [40] LIMBU DIGIT ZERO..TAI LE LETTER AI
+1970..1974    ; Limited_Use                    # 4.0    [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6
+1980..19A9    ; Limited_Use                    # 4.1   [42] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW XVA
+19AA..19AB    ; Limited_Use                    # 5.2    [2] NEW TAI LUE LETTER HIGH SUA..NEW TAI LUE LETTER LOW SUA
+19B0..19C9    ; Limited_Use                    # 4.1   [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2
+19D0..19D9    ; Limited_Use                    # 4.1   [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE
+19DA          ; Limited_Use                    # 5.2        NEW TAI LUE THAM DIGIT ONE
+1A20..1A5E    ; Limited_Use                    # 5.2   [63] TAI THAM LETTER HIGH KA..TAI THAM CONSONANT SIGN SA
+1A60..1A7C    ; Limited_Use                    # 5.2   [29] TAI THAM SIGN SAKOT..TAI THAM SIGN KHUEN-LUE KARAN
+1A7F..1A89    ; Limited_Use                    # 5.2   [11] TAI THAM COMBINING CRYPTOGRAMMIC DOT..TAI THAM HORA DIGIT NINE
+1A90..1A99    ; Limited_Use                    # 5.2   [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE
+1AA7          ; Limited_Use                    # 5.2        TAI THAM SIGN MAI YAMOK
+1B00..1B4B    ; Limited_Use                    # 5.0   [76] BALINESE SIGN ULU RICEM..BALINESE LETTER ASYURA SASAK
+1B50..1B59    ; Limited_Use                    # 5.0   [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE
+1B6B..1B73    ; Limited_Use                    # 5.0    [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG
+1B80..1BAA    ; Limited_Use                    # 5.1   [43] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PAMAAEH
+1BAB..1BAD    ; Limited_Use                    # 6.1    [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA
+1BAE..1BB9    ; Limited_Use                    # 5.1   [12] SUNDANESE LETTER KHA..SUNDANESE DIGIT NINE
+1BBA..1BBF    ; Limited_Use                    # 6.1    [6] SUNDANESE AVAGRAHA..SUNDANESE LETTER FINAL M
+1BC0..1BF3    ; Limited_Use                    # 6.0   [52] BATAK LETTER A..BATAK PANONGONAN
+1C00..1C37    ; Limited_Use                    # 5.1   [56] LEPCHA LETTER KA..LEPCHA SIGN NUKTA
+1C40..1C49    ; Limited_Use                    # 5.1   [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE
+1C4D..1C7D    ; Limited_Use                    # 5.1   [49] LEPCHA LETTER TTA..OL CHIKI AHAD
+2D30..2D65    ; Limited_Use                    # 4.1   [54] TIFINAGH LETTER YA..TIFINAGH LETTER YAZZ
+2D66..2D67    ; Limited_Use                    # 6.1    [2] TIFINAGH LETTER YE..TIFINAGH LETTER YO
+2D7F          ; Limited_Use                    # 6.0        TIFINAGH CONSONANT JOINER
+A000..A48C    ; Limited_Use                    # 3.0 [1165] YI SYLLABLE IT..YI SYLLABLE YYR
+A4D0..A4FD    ; Limited_Use                    # 5.2   [46] LISU LETTER BA..LISU LETTER TONE MYA JEU
+A500..A60C    ; Limited_Use                    # 5.1  [269] VAI SYLLABLE EE..VAI SYLLABLE LENGTHENER
+A613..A629    ; Limited_Use                    # 5.1   [23] VAI SYMBOL FEENG..VAI DIGIT NINE
+A6A0..A6F1    ; Limited_Use                    # 5.2   [82] BAMUM LETTER A..BAMUM COMBINING MARK TUKWENTIS
+A800..A827    ; Limited_Use                    # 4.1   [40] SYLOTI NAGRI LETTER A..SYLOTI NAGRI VOWEL SIGN OO
+A82C          ; Limited_Use                    # 13.0       SYLOTI NAGRI SIGN ALTERNATE HASANTA
+A880..A8C4    ; Limited_Use                    # 5.1   [69] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VIRAMA
+A8C5          ; Limited_Use                    # 9.0        SAURASHTRA SIGN CANDRABINDU
+A8D0..A8D9    ; Limited_Use                    # 5.1   [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE
+A900..A92D    ; Limited_Use                    # 5.1   [46] KAYAH LI DIGIT ZERO..KAYAH LI TONE CALYA PLOPHU
+A980..A9C0    ; Limited_Use                    # 5.2   [65] JAVANESE SIGN PANYANGGA..JAVANESE PANGKON
+A9D0..A9D9    ; Limited_Use                    # 5.2   [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE
+AA00..AA36    ; Limited_Use                    # 5.1   [55] CHAM LETTER A..CHAM CONSONANT SIGN WA
+AA40..AA4D    ; Limited_Use                    # 5.1   [14] CHAM LETTER FINAL K..CHAM CONSONANT SIGN FINAL H
+AA50..AA59    ; Limited_Use                    # 5.1   [10] CHAM DIGIT ZERO..CHAM DIGIT NINE
+AA80..AAC2    ; Limited_Use                    # 5.2   [67] TAI VIET LETTER LOW KO..TAI VIET TONE MAI SONG
+AADB..AADD    ; Limited_Use                    # 5.2    [3] TAI VIET SYMBOL KON..TAI VIET SYMBOL SAM
+AAE0..AAEF    ; Limited_Use                    # 6.1   [16] MEETEI MAYEK LETTER E..MEETEI MAYEK VOWEL SIGN AAU
+AAF2..AAF6    ; Limited_Use                    # 6.1    [5] MEETEI MAYEK ANJI..MEETEI MAYEK VIRAMA
+AB70..ABBF    ; Limited_Use                    # 8.0   [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
+ABC0..ABEA    ; Limited_Use                    # 5.2   [43] MEETEI MAYEK LETTER KOK..MEETEI MAYEK VOWEL SIGN NUNG
+ABEC..ABED    ; Limited_Use                    # 5.2    [2] MEETEI MAYEK LUM IYEK..MEETEI MAYEK APUN IYEK
+ABF0..ABF9    ; Limited_Use                    # 5.2   [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE
+104B0..104D3  ; Limited_Use                    # 9.0   [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA
+104D8..104FB  ; Limited_Use                    # 9.0   [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA
+10D00..10D27  ; Limited_Use                    # 11.0  [40] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA SIGN TASSI
+10D30..10D39  ; Limited_Use                    # 11.0  [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE
+11100..11134  ; Limited_Use                    # 6.1   [53] CHAKMA SIGN CANDRABINDU..CHAKMA MAAYYAA
+11136..1113F  ; Limited_Use                    # 6.1   [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE
+11144..11146  ; Limited_Use                    # 11.0   [3] CHAKMA LETTER LHAA..CHAKMA VOWEL SIGN EI
+11147         ; Limited_Use                    # 13.0       CHAKMA LETTER VAA
+11400..1144A  ; Limited_Use                    # 9.0   [75] NEWA LETTER A..NEWA SIDDHI
+11450..11459  ; Limited_Use                    # 9.0   [10] NEWA DIGIT ZERO..NEWA DIGIT NINE
+1145E         ; Limited_Use                    # 11.0       NEWA SANDHI MARK
+1145F         ; Limited_Use                    # 12.0       NEWA LETTER VEDIC ANUSVARA
+11460..11461  ; Limited_Use                    # 13.0   [2] NEWA SIGN JIHVAMULIYA..NEWA SIGN UPADHMANIYA
+11D60..11D65  ; Limited_Use                    # 11.0   [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU
+11D67..11D68  ; Limited_Use                    # 11.0   [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI
+11D6A..11D8E  ; Limited_Use                    # 11.0  [37] GUNJALA GONDI LETTER OO..GUNJALA GONDI VOWEL SIGN UU
+11D90..11D91  ; Limited_Use                    # 11.0   [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI
+11D93..11D98  ; Limited_Use                    # 11.0   [6] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI OM
+11DA0..11DA9  ; Limited_Use                    # 11.0  [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE
+11FB0         ; Limited_Use                    # 13.0       LISU LETTER YHA
+16800..16A38  ; Limited_Use                    # 6.0  [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ
+16F00..16F44  ; Limited_Use                    # 6.1   [69] MIAO LETTER PA..MIAO LETTER HHA
+16F45..16F4A  ; Limited_Use                    # 12.0   [6] MIAO LETTER BRI..MIAO LETTER RTE
+16F4F         ; Limited_Use                    # 12.0       MIAO SIGN CONSONANT MODIFIER BAR
+16F50..16F7E  ; Limited_Use                    # 6.1   [47] MIAO LETTER NASALIZATION..MIAO VOWEL SIGN NG
+16F7F..16F87  ; Limited_Use                    # 12.0   [9] MIAO VOWEL SIGN UOG..MIAO VOWEL SIGN UI
+16F8F..16F9F  ; Limited_Use                    # 6.1   [17] MIAO TONE RIGHT..MIAO LETTER REFORMED TONE-8
+1E100..1E12C  ; Limited_Use                    # 12.0  [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W
+1E130..1E13D  ; Limited_Use                    # 12.0  [14] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER
+1E140..1E149  ; Limited_Use                    # 12.0  [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE
+1E14E         ; Limited_Use                    # 12.0       NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ
+1E2C0..1E2F9  ; Limited_Use                    # 12.0  [58] WANCHO LETTER AA..WANCHO DIGIT NINE
+1E900..1E94A  ; Limited_Use                    # 9.0   [75] ADLAM CAPITAL LETTER ALIF..ADLAM NUKTA
+1E94B         ; Limited_Use                    # 12.0       ADLAM NASALIZATION MARK
+1E950..1E959  ; Limited_Use                    # 9.0   [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE
+
+# Total code points: 5025
+
+#      Identifier_Type:        Limited_Use Technical
+
+0740..074A    ; Limited_Use Technical          # 3.0   [11] SYRIAC FEMININE DOT..SYRIAC BARREKH
+
+# Total code points: 11
+
+#      Identifier_Type:        Limited_Use Exclusion
+
+A9CF          ; Limited_Use Exclusion          # 5.2        JAVANESE PANGRANGKEP
+
+# Total code points: 1
+
+#      Identifier_Type:        Limited_Use Obsolete
+
+07E8..07EA    ; Limited_Use Obsolete           # 5.0    [3] NKO LETTER JONA JA..NKO LETTER JONA RA
+07FA          ; Limited_Use Obsolete           # 5.0        NKO LAJANYALAN
+A610..A612    ; Limited_Use Obsolete           # 5.1    [3] VAI SYLLABLE NDOLE FA..VAI SYLLABLE NDOLE SOO
+A62A..A62B    ; Limited_Use Obsolete           # 5.1    [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO
+
+# Total code points: 9
+
+#      Identifier_Type:        Limited_Use Not_XID
+
+0700..070D    ; Limited_Use Not_XID            # 3.0   [14] SYRIAC END OF PARAGRAPH..SYRIAC HARKLEAN ASTERISCUS
+070F          ; Limited_Use Not_XID            # 3.0        SYRIAC ABBREVIATION MARK
+07F6..07F9    ; Limited_Use Not_XID            # 5.0    [4] NKO SYMBOL OO DENNEN..NKO EXCLAMATION MARK
+07FE..07FF    ; Limited_Use Not_XID            # 11.0   [2] NKO DOROME SIGN..NKO TAMAN SIGN
+085E          ; Limited_Use Not_XID            # 6.0        MANDAIC PUNCTUATION
+1400          ; Limited_Use Not_XID            # 5.2        CANADIAN SYLLABICS HYPHEN
+166D..166E    ; Limited_Use Not_XID            # 3.0    [2] CANADIAN SYLLABICS CHI SIGN..CANADIAN SYLLABICS FULL STOP
+1940          ; Limited_Use Not_XID            # 4.0        LIMBU SIGN LOO
+1944..1945    ; Limited_Use Not_XID            # 4.0    [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK
+19DE..19DF    ; Limited_Use Not_XID            # 4.1    [2] NEW TAI LUE SIGN LAE..NEW TAI LUE SIGN LAEV
+1AA0..1AA6    ; Limited_Use Not_XID            # 5.2    [7] TAI THAM SIGN WIANG..TAI THAM SIGN REVERSED ROTATED RANA
+1AA8..1AAD    ; Limited_Use Not_XID            # 5.2    [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG
+1B5A..1B6A    ; Limited_Use Not_XID            # 5.0   [17] BALINESE PANTI..BALINESE MUSICAL SYMBOL DANG GEDE
+1B74..1B7C    ; Limited_Use Not_XID            # 5.0    [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING
+1BFC..1BFF    ; Limited_Use Not_XID            # 6.0    [4] BATAK SYMBOL BINDU NA METEK..BATAK SYMBOL BINDU PANGOLAT
+1C3B..1C3F    ; Limited_Use Not_XID            # 5.1    [5] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION TSHOOK
+1C7E..1C7F    ; Limited_Use Not_XID            # 5.1    [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD
+1CC0..1CC7    ; Limited_Use Not_XID            # 6.1    [8] SUNDANESE PUNCTUATION BINDU SURYA..SUNDANESE PUNCTUATION BINDU BA SATANGA
+2D70          ; Limited_Use Not_XID            # 6.0        TIFINAGH SEPARATOR MARK
+A490..A4A1    ; Limited_Use Not_XID            # 3.0   [18] YI RADICAL QOT..YI RADICAL GA
+A4A2..A4A3    ; Limited_Use Not_XID            # 3.2    [2] YI RADICAL ZUP..YI RADICAL CYT
+A4A4..A4B3    ; Limited_Use Not_XID            # 3.0   [16] YI RADICAL DDUR..YI RADICAL JO
+A4B4          ; Limited_Use Not_XID            # 3.2        YI RADICAL NZUP
+A4B5..A4C0    ; Limited_Use Not_XID            # 3.0   [12] YI RADICAL JJY..YI RADICAL SHAT
+A4C1          ; Limited_Use Not_XID            # 3.2        YI RADICAL ZUR
+A4C2..A4C4    ; Limited_Use Not_XID            # 3.0    [3] YI RADICAL SHOP..YI RADICAL ZZIET
+A4C5          ; Limited_Use Not_XID            # 3.2        YI RADICAL NBIE
+A4C6          ; Limited_Use Not_XID            # 3.0        YI RADICAL KE
+A4FE..A4FF    ; Limited_Use Not_XID            # 5.2    [2] LISU PUNCTUATION COMMA..LISU PUNCTUATION FULL STOP
+A60D..A60F    ; Limited_Use Not_XID            # 5.1    [3] VAI COMMA..VAI QUESTION MARK
+A6F2..A6F7    ; Limited_Use Not_XID            # 5.2    [6] BAMUM NJAEMLI..BAMUM QUESTION MARK
+A828..A82B    ; Limited_Use Not_XID            # 4.1    [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4
+A8CE..A8CF    ; Limited_Use Not_XID            # 5.1    [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA
+A92F          ; Limited_Use Not_XID            # 5.1        KAYAH LI SIGN SHYA
+A9C1..A9CD    ; Limited_Use Not_XID            # 5.2   [13] JAVANESE LEFT RERENGGAN..JAVANESE TURNED PADA PISELEH
+A9DE..A9DF    ; Limited_Use Not_XID            # 5.2    [2] JAVANESE PADA TIRTA TUMETES..JAVANESE PADA ISEN-ISEN
+AA5C..AA5F    ; Limited_Use Not_XID            # 5.1    [4] CHAM PUNCTUATION SPIRAL..CHAM PUNCTUATION TRIPLE DANDA
+AADE..AADF    ; Limited_Use Not_XID            # 5.2    [2] TAI VIET SYMBOL HO HOI..TAI VIET SYMBOL KOI KOI
+AAF0..AAF1    ; Limited_Use Not_XID            # 6.1    [2] MEETEI MAYEK CHEIKHAN..MEETEI MAYEK AHANG KHUDAM
+ABEB          ; Limited_Use Not_XID            # 5.2        MEETEI MAYEK CHEIKHEI
+11140..11143  ; Limited_Use Not_XID            # 6.1    [4] CHAKMA SECTION MARK..CHAKMA QUESTION MARK
+1144B..1144F  ; Limited_Use Not_XID            # 9.0    [5] NEWA DANDA..NEWA ABBREVIATION SIGN
+1145A         ; Limited_Use Not_XID            # 13.0       NEWA DOUBLE COMMA
+1145B         ; Limited_Use Not_XID            # 9.0        NEWA PLACEHOLDER MARK
+1145D         ; Limited_Use Not_XID            # 9.0        NEWA INSERTION SIGN
+1E14F         ; Limited_Use Not_XID            # 12.0       NYIAKENG PUACHUE HMONG CIRCLED CA
+1E2FF         ; Limited_Use Not_XID            # 12.0       WANCHO NGUN SIGN
+1E95E..1E95F  ; Limited_Use Not_XID            # 9.0    [2] ADLAM INITIAL EXCLAMATION MARK..ADLAM INITIAL QUESTION MARK
+
+# Total code points: 202
+
+#      Identifier_Type:        Uncommon_Use
+
+0181..018C    ; Uncommon_Use                   # 1.1   [12] LATIN CAPITAL LETTER B WITH HOOK..LATIN SMALL LETTER D WITH TOPBAR
+018E          ; Uncommon_Use                   # 1.1        LATIN CAPITAL LETTER REVERSED E
+0190..019F    ; Uncommon_Use                   # 1.1   [16] LATIN CAPITAL LETTER OPEN E..LATIN CAPITAL LETTER O WITH MIDDLE TILDE
+01A2..01A9    ; Uncommon_Use                   # 1.1    [8] LATIN CAPITAL LETTER OI..LATIN CAPITAL LETTER ESH
+01AC..01AE    ; Uncommon_Use                   # 1.1    [3] LATIN CAPITAL LETTER T WITH HOOK..LATIN CAPITAL LETTER T WITH RETROFLEX HOOK
+01B1..01B8    ; Uncommon_Use                   # 1.1    [8] LATIN CAPITAL LETTER UPSILON..LATIN CAPITAL LETTER EZH REVERSED
+01BC..01BD    ; Uncommon_Use                   # 1.1    [2] LATIN CAPITAL LETTER TONE FIVE..LATIN SMALL LETTER TONE FIVE
+01DD          ; Uncommon_Use                   # 1.1        LATIN SMALL LETTER TURNED E
+01E4..01E5    ; Uncommon_Use                   # 1.1    [2] LATIN CAPITAL LETTER G WITH STROKE..LATIN SMALL LETTER G WITH STROKE
+0220          ; Uncommon_Use                   # 3.2        LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
+0221          ; Uncommon_Use                   # 4.0        LATIN SMALL LETTER D WITH CURL
+0222..0225    ; Uncommon_Use                   # 3.0    [4] LATIN CAPITAL LETTER OU..LATIN SMALL LETTER Z WITH HOOK
+0237..0241    ; Uncommon_Use                   # 4.1   [11] LATIN SMALL LETTER DOTLESS J..LATIN CAPITAL LETTER GLOTTAL STOP
+0242..024F    ; Uncommon_Use                   # 5.0   [14] LATIN SMALL LETTER GLOTTAL STOP..LATIN SMALL LETTER Y WITH STROKE
+0305          ; Uncommon_Use                   # 1.1        COMBINING OVERLINE
+030D          ; Uncommon_Use                   # 1.1        COMBINING VERTICAL LINE ABOVE
+0316          ; Uncommon_Use                   # 1.1        COMBINING GRAVE ACCENT BELOW
+0321..0322    ; Uncommon_Use                   # 1.1    [2] COMBINING PALATALIZED HOOK BELOW..COMBINING RETROFLEX HOOK BELOW
+0332          ; Uncommon_Use                   # 1.1        COMBINING LOW LINE
+0334          ; Uncommon_Use                   # 1.1        COMBINING TILDE OVERLAY
+0336          ; Uncommon_Use                   # 1.1        COMBINING LONG STROKE OVERLAY
+0358          ; Uncommon_Use                   # 4.1        COMBINING DOT ABOVE RIGHT
+0591..05A1    ; Uncommon_Use                   # 2.0   [17] HEBREW ACCENT ETNAHTA..HEBREW ACCENT PAZER
+05A3..05AF    ; Uncommon_Use                   # 2.0   [13] HEBREW ACCENT MUNAH..HEBREW MARK MASORA CIRCLE
+05B0..05B3    ; Uncommon_Use                   # 1.1    [4] HEBREW POINT SHEVA..HEBREW POINT HATAF QAMATS
+05B5..05B9    ; Uncommon_Use                   # 1.1    [5] HEBREW POINT TSERE..HEBREW POINT HOLAM
+05BA          ; Uncommon_Use                   # 5.0        HEBREW POINT HOLAM HASER FOR VAV
+05BB..05BD    ; Uncommon_Use                   # 1.1    [3] HEBREW POINT QUBUTS..HEBREW POINT METEG
+05BF          ; Uncommon_Use                   # 1.1        HEBREW POINT RAFE
+05C1..05C2    ; Uncommon_Use                   # 1.1    [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
+05C4          ; Uncommon_Use                   # 2.0        HEBREW MARK UPPER DOT
+0610..0615    ; Uncommon_Use                   # 4.0    [6] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL HIGH TAH
+0616..061A    ; Uncommon_Use                   # 5.1    [5] ARABIC SMALL HIGH LIGATURE ALEF WITH LAM WITH YEH..ARABIC SMALL KASRA
+0656..0658    ; Uncommon_Use                   # 4.0    [3] ARABIC SUBSCRIPT ALEF..ARABIC MARK NOON GHUNNA
+0659..065E    ; Uncommon_Use                   # 4.1    [6] ARABIC ZWARAKAY..ARABIC FATHA WITH TWO DOTS
+065F          ; Uncommon_Use                   # 6.0        ARABIC WAVY HAMZA BELOW
+06D6..06DC    ; Uncommon_Use                   # 1.1    [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
+06DF..06E4    ; Uncommon_Use                   # 1.1    [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA
+06E7..06E8    ; Uncommon_Use                   # 1.1    [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
+06EA..06ED    ; Uncommon_Use                   # 1.1    [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM
+08B3..08B4    ; Uncommon_Use                   # 8.0    [2] ARABIC LETTER AIN WITH THREE DOTS BELOW..ARABIC LETTER KAF WITH DOT BELOW
+08D3          ; Uncommon_Use                   # 11.0       ARABIC SMALL LOW WAW
+08D4..08E1    ; Uncommon_Use                   # 9.0   [14] ARABIC SMALL HIGH WORD AR-RUB..ARABIC SMALL HIGH SIGN SAFHA
+08E3          ; Uncommon_Use                   # 8.0        ARABIC TURNED DAMMA BELOW
+08E4..08FE    ; Uncommon_Use                   # 6.1   [27] ARABIC CURLY FATHA..ARABIC DAMMA WITH DOT
+08FF          ; Uncommon_Use                   # 7.0        ARABIC MARK SIDEWAYS NOON GHUNNA
+0900          ; Uncommon_Use                   # 5.2        DEVANAGARI SIGN INVERTED CANDRABINDU
+0955          ; Uncommon_Use                   # 5.2        DEVANAGARI VOWEL SIGN CANDRA LONG E
+0A51          ; Uncommon_Use                   # 5.1        GURMUKHI SIGN UDAAT
+0A75          ; Uncommon_Use                   # 5.1        GURMUKHI SIGN YAKASH
+0AF9          ; Uncommon_Use                   # 8.0        GUJARATI LETTER ZHA
+0B44          ; Uncommon_Use                   # 5.1        ORIYA VOWEL SIGN VOCALIC RR
+0B62..0B63    ; Uncommon_Use                   # 5.1    [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
+0C5A          ; Uncommon_Use                   # 8.0        TELUGU LETTER RRRA
+0C62..0C63    ; Uncommon_Use                   # 5.1    [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL
+0D44          ; Uncommon_Use                   # 5.1        MALAYALAM VOWEL SIGN VOCALIC RR
+0D62..0D63    ; Uncommon_Use                   # 5.1    [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
+0F39          ; Uncommon_Use                   # 2.0        TIBETAN MARK TSA -PHRU
+2054          ; Uncommon_Use                   # 4.0        INVERTED UNDERTIE
+2C68..2C6C    ; Uncommon_Use                   # 5.0    [5] LATIN SMALL LETTER H WITH DESCENDER..LATIN SMALL LETTER Z WITH DESCENDER
+A66F          ; Uncommon_Use                   # 5.1        COMBINING CYRILLIC VZMET
+A67C..A67D    ; Uncommon_Use                   # 5.1    [2] COMBINING CYRILLIC KAVYKA..COMBINING CYRILLIC PAYEROK
+A78B..A78C    ; Uncommon_Use                   # 5.1    [2] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER SALTILLO
+A78F          ; Uncommon_Use                   # 8.0        LATIN LETTER SINOLOGICAL DOT
+A7B2..A7B7    ; Uncommon_Use                   # 8.0    [6] LATIN CAPITAL LETTER J WITH CROSSED-TAIL..LATIN SMALL LETTER OMEGA
+AB60..AB63    ; Uncommon_Use                   # 8.0    [4] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER UO
+
+# Total code points: 263
+
+#      Identifier_Type:        Uncommon_Use Technical
+
+0253..0254    ; Uncommon_Use Technical         # 1.1    [2] LATIN SMALL LETTER B WITH HOOK..LATIN SMALL LETTER OPEN O
+0256..0257    ; Uncommon_Use Technical         # 1.1    [2] LATIN SMALL LETTER D WITH TAIL..LATIN SMALL LETTER D WITH HOOK
+025B          ; Uncommon_Use Technical         # 1.1        LATIN SMALL LETTER OPEN E
+0263          ; Uncommon_Use Technical         # 1.1        LATIN SMALL LETTER GAMMA
+0268..0269    ; Uncommon_Use Technical         # 1.1    [2] LATIN SMALL LETTER I WITH STROKE..LATIN SMALL LETTER IOTA
+0272          ; Uncommon_Use Technical         # 1.1        LATIN SMALL LETTER N WITH LEFT HOOK
+0289          ; Uncommon_Use Technical         # 1.1        LATIN SMALL LETTER U BAR
+0292          ; Uncommon_Use Technical         # 1.1        LATIN SMALL LETTER EZH
+05C7          ; Uncommon_Use Technical         # 4.1        HEBREW POINT QAMATS QATAN
+0D8F..0D90    ; Uncommon_Use Technical         # 3.0    [2] SINHALA LETTER ILUYANNA..SINHALA LETTER ILUUYANNA
+0DA6          ; Uncommon_Use Technical         # 3.0        SINHALA LETTER SANYAKA JAYANNA
+0DDF          ; Uncommon_Use Technical         # 3.0        SINHALA VOWEL SIGN GAYANUKITTA
+0DF3          ; Uncommon_Use Technical         # 3.0        SINHALA VOWEL SIGN DIGA GAYANUKITTA
+FB1E          ; Uncommon_Use Technical         # 1.1        HEBREW POINT JUDEO-SPANISH VARIKA
+FE2E..FE2F    ; Uncommon_Use Technical         # 8.0    [2] COMBINING CYRILLIC TITLO LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF
+
+# Total code points: 20
+
+#      Identifier_Type:        Uncommon_Use Technical Not_XID
+
+1D1DE..1D1E8  ; Uncommon_Use Technical Not_XID # 8.0   [11] MUSICAL SYMBOL KIEVAN C CLEF..MUSICAL SYMBOL KIEVAN FLAT SIGN
+
+# Total code points: 11
+
+#      Identifier_Type:        Uncommon_Use Exclusion
+
+18A9          ; Uncommon_Use Exclusion         # 3.0        MONGOLIAN LETTER ALI GALI DAGALGA
+16A40..16A5E  ; Uncommon_Use Exclusion         # 7.0   [31] MRO LETTER TA..MRO LETTER TEK
+16A60..16A69  ; Uncommon_Use Exclusion         # 7.0   [10] MRO DIGIT ZERO..MRO DIGIT NINE
+
+# Total code points: 42
+
+#      Identifier_Type:        Uncommon_Use Obsolete
+
+05A2          ; Uncommon_Use Obsolete          # 4.1        HEBREW ACCENT ATNAH HAFUKH
+05C5          ; Uncommon_Use Obsolete          # 4.1        HEBREW MARK LOWER DOT
+A69E          ; Uncommon_Use Obsolete          # 8.0        COMBINING CYRILLIC LETTER EF
+A8FD          ; Uncommon_Use Obsolete          # 8.0        DEVANAGARI JAIN OM
+
+# Total code points: 4
+
+#      Identifier_Type:        Uncommon_Use Obsolete Not_XID
+
+A8FC          ; Uncommon_Use Obsolete Not_XID  # 8.0        DEVANAGARI SIGN SIDDHAM
+
+# Total code points: 1
+
+#      Identifier_Type:        Uncommon_Use Not_XID
+
+218A..218B    ; Uncommon_Use Not_XID           # 8.0    [2] TURNED DIGIT TWO..TURNED DIGIT THREE
+2BEC..2BEF    ; Uncommon_Use Not_XID           # 8.0    [4] LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS..DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS
+1F54F         ; Uncommon_Use Not_XID           # 8.0        BOWL OF HYGIEIA
+
+# Total code points: 7
+
+#      Identifier_Type:        Technical
+
+0180          ; Technical                      # 1.1        LATIN SMALL LETTER B WITH STROKE
+01C0..01C3    ; Technical                      # 1.1    [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK
+0234..0236    ; Technical                      # 4.0    [3] LATIN SMALL LETTER L WITH CURL..LATIN SMALL LETTER T WITH CURL
+0250..0252    ; Technical                      # 1.1    [3] LATIN SMALL LETTER TURNED A..LATIN SMALL LETTER TURNED ALPHA
+0255          ; Technical                      # 1.1        LATIN SMALL LETTER C WITH CURL
+0258          ; Technical                      # 1.1        LATIN SMALL LETTER REVERSED E
+025A          ; Technical                      # 1.1        LATIN SMALL LETTER SCHWA WITH HOOK
+025C..0262    ; Technical                      # 1.1    [7] LATIN SMALL LETTER REVERSED OPEN E..LATIN LETTER SMALL CAPITAL G
+0264..0267    ; Technical                      # 1.1    [4] LATIN SMALL LETTER RAMS HORN..LATIN SMALL LETTER HENG WITH HOOK
+026A..0271    ; Technical                      # 1.1    [8] LATIN LETTER SMALL CAPITAL I..LATIN SMALL LETTER M WITH HOOK
+0273..0276    ; Technical                      # 1.1    [4] LATIN SMALL LETTER N WITH RETROFLEX HOOK..LATIN LETTER SMALL CAPITAL OE
+0278..027B    ; Technical                      # 1.1    [4] LATIN SMALL LETTER PHI..LATIN SMALL LETTER TURNED R WITH HOOK
+027D..0288    ; Technical                      # 1.1   [12] LATIN SMALL LETTER R WITH TAIL..LATIN SMALL LETTER T WITH RETROFLEX HOOK
+028A..0291    ; Technical                      # 1.1    [8] LATIN SMALL LETTER UPSILON..LATIN SMALL LETTER Z WITH CURL
+0293..029D    ; Technical                      # 1.1   [11] LATIN SMALL LETTER EZH WITH CURL..LATIN SMALL LETTER J WITH CROSSED-TAIL
+029F..02A8    ; Technical                      # 1.1   [10] LATIN LETTER SMALL CAPITAL L..LATIN SMALL LETTER TC DIGRAPH WITH CURL
+02A9..02AD    ; Technical                      # 3.0    [5] LATIN SMALL LETTER FENG DIGRAPH..LATIN LETTER BIDENTAL PERCUSSIVE
+02AE..02AF    ; Technical                      # 4.0    [2] LATIN SMALL LETTER TURNED H WITH FISHHOOK..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+02B9..02BA    ; Technical                      # 1.1    [2] MODIFIER LETTER PRIME..MODIFIER LETTER DOUBLE PRIME
+02BD..02C1    ; Technical                      # 1.1    [5] MODIFIER LETTER REVERSED COMMA..MODIFIER LETTER REVERSED GLOTTAL STOP
+02C6..02D1    ; Technical                      # 1.1   [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON
+02EE          ; Technical                      # 3.0        MODIFIER LETTER DOUBLE APOSTROPHE
+030E          ; Technical                      # 1.1        COMBINING DOUBLE VERTICAL LINE ABOVE
+0312          ; Technical                      # 1.1        COMBINING TURNED COMMA ABOVE
+0315          ; Technical                      # 1.1        COMBINING COMMA ABOVE RIGHT
+0317..031A    ; Technical                      # 1.1    [4] COMBINING ACUTE ACCENT BELOW..COMBINING LEFT ANGLE ABOVE
+031C..0320    ; Technical                      # 1.1    [5] COMBINING LEFT HALF RING BELOW..COMBINING MINUS SIGN BELOW
+0329..032C    ; Technical                      # 1.1    [4] COMBINING VERTICAL LINE BELOW..COMBINING CARON BELOW
+032F          ; Technical                      # 1.1        COMBINING INVERTED BREVE BELOW
+0333          ; Technical                      # 1.1        COMBINING DOUBLE LOW LINE
+0337          ; Technical                      # 1.1        COMBINING SHORT SOLIDUS OVERLAY
+033A..033F    ; Technical                      # 1.1    [6] COMBINING INVERTED BRIDGE BELOW..COMBINING DOUBLE OVERLINE
+0346..034E    ; Technical                      # 3.0    [9] COMBINING BRIDGE ABOVE..COMBINING UPWARDS ARROW BELOW
+0350..0357    ; Technical                      # 4.0    [8] COMBINING RIGHT ARROWHEAD ABOVE..COMBINING RIGHT HALF RING ABOVE
+0359..035C    ; Technical                      # 4.1    [4] COMBINING ASTERISK BELOW..COMBINING DOUBLE BREVE BELOW
+035D..035F    ; Technical                      # 4.0    [3] COMBINING DOUBLE BREVE..COMBINING DOUBLE MACRON BELOW
+0360..0361    ; Technical                      # 1.1    [2] COMBINING DOUBLE TILDE..COMBINING DOUBLE INVERTED BREVE
+0362          ; Technical                      # 3.0        COMBINING DOUBLE RIGHTWARDS ARROW BELOW
+03CF          ; Technical                      # 5.1        GREEK CAPITAL KAI SYMBOL
+03D7          ; Technical                      # 3.0        GREEK KAI SYMBOL
+0560          ; Technical                      # 11.0       ARMENIAN SMALL LETTER TURNED AYB
+0588          ; Technical                      # 11.0       ARMENIAN SMALL LETTER YI WITH STROKE
+0953..0954    ; Technical                      # 1.1    [2] DEVANAGARI GRAVE ACCENT..DEVANAGARI ACUTE ACCENT
+0D81          ; Technical                      # 13.0       SINHALA SIGN CANDRABINDU
+0F18..0F19    ; Technical                      # 2.0    [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+17CB..17D0    ; Technical                      # 3.0    [6] KHMER SIGN BANTOC..KHMER SIGN SAMYOK SANNYA
+1ABF..1AC0    ; Technical                      # 13.0   [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW
+1D00..1D2B    ; Technical                      # 4.0   [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL
+1D2F          ; Technical                      # 4.0        MODIFIER LETTER CAPITAL BARRED B
+1D3B          ; Technical                      # 4.0        MODIFIER LETTER CAPITAL REVERSED N
+1D4E          ; Technical                      # 4.0        MODIFIER LETTER SMALL TURNED I
+1D6B          ; Technical                      # 4.0        LATIN SMALL LETTER UE
+1D6C..1D77    ; Technical                      # 4.1   [12] LATIN SMALL LETTER B WITH MIDDLE TILDE..LATIN SMALL LETTER TURNED G
+1D79..1D9A    ; Technical                      # 4.1   [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+1DC4..1DCA    ; Technical                      # 5.0    [7] COMBINING MACRON-ACUTE..COMBINING LATIN SMALL LETTER R BELOW
+1DCB..1DCD    ; Technical                      # 5.1    [3] COMBINING BREVE-MACRON..COMBINING DOUBLE CIRCUMFLEX ABOVE
+1DCF..1DD0    ; Technical                      # 5.1    [2] COMBINING ZIGZAG BELOW..COMBINING IS BELOW
+1DE7..1DF5    ; Technical                      # 7.0   [15] COMBINING LATIN SMALL LETTER ALPHA..COMBINING UP TACK ABOVE
+1DF6..1DF9    ; Technical                      # 10.0   [4] COMBINING KAVYKA ABOVE RIGHT..COMBINING WIDE INVERTED BRIDGE BELOW
+1DFB          ; Technical                      # 9.0        COMBINING DELETION MARK
+1DFC          ; Technical                      # 6.0        COMBINING DOUBLE INVERTED BREVE BELOW
+1DFD          ; Technical                      # 5.2        COMBINING ALMOST EQUAL TO BELOW
+1DFE..1DFF    ; Technical                      # 5.0    [2] COMBINING LEFT ARROWHEAD ABOVE..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
+1E9C..1E9D    ; Technical                      # 5.1    [2] LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE..LATIN SMALL LETTER LONG S WITH HIGH STROKE
+1E9F          ; Technical                      # 5.1        LATIN SMALL LETTER DELTA
+1EFA..1EFF    ; Technical                      # 5.1    [6] LATIN CAPITAL LETTER MIDDLE-WELSH LL..LATIN SMALL LETTER Y WITH LOOP
+203F..2040    ; Technical                      # 1.1    [2] UNDERTIE..CHARACTER TIE
+20D0..20DC    ; Technical                      # 1.1   [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
+20E1          ; Technical                      # 1.1        COMBINING LEFT RIGHT ARROW ABOVE
+20E5..20EA    ; Technical                      # 3.2    [6] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING LEFTWARDS ARROW OVERLAY
+20EB          ; Technical                      # 4.1        COMBINING LONG DOUBLE SOLIDUS OVERLAY
+20EC..20EF    ; Technical                      # 5.0    [4] COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS..COMBINING RIGHT ARROW BELOW
+20F0          ; Technical                      # 5.1        COMBINING ASTERISK ABOVE
+2118          ; Technical                      # 1.1        SCRIPT CAPITAL P
+212E          ; Technical                      # 1.1        ESTIMATED SYMBOL
+2C60..2C67    ; Technical                      # 5.0    [8] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN CAPITAL LETTER H WITH DESCENDER
+2C77          ; Technical                      # 5.0        LATIN SMALL LETTER TAILLESS PHI
+2C78..2C7B    ; Technical                      # 5.1    [4] LATIN SMALL LETTER E WITH NOTCH..LATIN LETTER SMALL CAPITAL TURNED E
+3021..302D    ; Technical                      # 1.1   [13] HANGZHOU NUMERAL ONE..IDEOGRAPHIC ENTERING TONE MARK
+3031..3035    ; Technical                      # 1.1    [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
+303B..303C    ; Technical                      # 3.2    [2] VERTICAL IDEOGRAPHIC ITERATION MARK..MASU MARK
+31F0..31FF    ; Technical                      # 3.2   [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
+A78E          ; Technical                      # 6.0        LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
+A7AF          ; Technical                      # 11.0       LATIN LETTER SMALL CAPITAL Q
+A7BA..A7BF    ; Technical                      # 12.0   [6] LATIN CAPITAL LETTER GLOTTAL A..LATIN SMALL LETTER GLOTTAL U
+A7FA          ; Technical                      # 6.0        LATIN LETTER SMALL CAPITAL TURNED M
+AB68          ; Technical                      # 13.0       LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
+FE20..FE23    ; Technical                      # 1.1    [4] COMBINING LIGATURE LEFT HALF..COMBINING DOUBLE TILDE RIGHT HALF
+FE24..FE26    ; Technical                      # 5.1    [3] COMBINING MACRON LEFT HALF..COMBINING CONJOINING MACRON
+FE27..FE2D    ; Technical                      # 7.0    [7] COMBINING LIGATURE LEFT HALF BELOW..COMBINING CONJOINING MACRON BELOW
+FE73          ; Technical                      # 3.2        ARABIC TAIL FRAGMENT
+1D165..1D169  ; Technical                      # 3.1    [5] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING TREMOLO-3
+1D16D..1D172  ; Technical                      # 3.1    [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5
+1D17B..1D182  ; Technical                      # 3.1    [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
+1D185..1D18B  ; Technical                      # 3.1    [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
+1D1AA..1D1AD  ; Technical                      # 3.1    [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
+
+# Total code points: 451
+
+#      Identifier_Type:        Technical Exclusion
+
+2CF0..2CF1    ; Technical Exclusion            # 5.2    [2] COPTIC COMBINING SPIRITUS ASPER..COPTIC COMBINING SPIRITUS LENIS
+
+# Total code points: 2
+
+#      Identifier_Type:        Technical Obsolete
+
+018D          ; Technical Obsolete             # 1.1        LATIN SMALL LETTER TURNED DELTA
+01AA..01AB    ; Technical Obsolete             # 1.1    [2] LATIN LETTER REVERSED ESH LOOP..LATIN SMALL LETTER T WITH PALATAL HOOK
+01BA..01BB    ; Technical Obsolete             # 1.1    [2] LATIN SMALL LETTER EZH WITH TAIL..LATIN LETTER TWO WITH STROKE
+01BE          ; Technical Obsolete             # 1.1        LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE
+0277          ; Technical Obsolete             # 1.1        LATIN SMALL LETTER CLOSED OMEGA
+027C          ; Technical Obsolete             # 1.1        LATIN SMALL LETTER R WITH LONG LEG
+029E          ; Technical Obsolete             # 1.1        LATIN SMALL LETTER TURNED K
+03F3          ; Technical Obsolete             # 1.1        GREEK LETTER YOT
+0484..0486    ; Technical Obsolete             # 1.1    [3] COMBINING CYRILLIC PALATALIZATION..COMBINING CYRILLIC PSILI PNEUMATA
+0487          ; Technical Obsolete             # 5.1        COMBINING CYRILLIC POKRYTIE
+0D04          ; Technical Obsolete             # 13.0       MALAYALAM LETTER VEDIC ANUSVARA
+17D1          ; Technical Obsolete             # 3.0        KHMER SIGN VIRIAM
+17DD          ; Technical Obsolete             # 4.0        KHMER SIGN ATTHACAN
+1DC0..1DC3    ; Technical Obsolete             # 4.1    [4] COMBINING DOTTED GRAVE ACCENT..COMBINING SUSPENSION MARK
+1DCE          ; Technical Obsolete             # 5.1        COMBINING OGONEK ABOVE
+1DD1..1DE6    ; Technical Obsolete             # 5.1   [22] COMBINING UR ABOVE..COMBINING LATIN SMALL LETTER Z
+2180..2182    ; Technical Obsolete             # 1.1    [3] ROMAN NUMERAL ONE THOUSAND C D..ROMAN NUMERAL TEN THOUSAND
+2183          ; Technical Obsolete             # 3.0        ROMAN NUMERAL REVERSED ONE HUNDRED
+302E..302F    ; Technical Obsolete             # 1.1    [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK
+A722..A72F    ; Technical Obsolete             # 5.1   [14] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CUATRILLO WITH COMMA
+1D242..1D244  ; Technical Obsolete             # 4.1    [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME
+
+# Total code points: 67
+
+#      Identifier_Type:        Technical Obsolete Not_XID
+
+2E00..2E0D    ; Technical Obsolete Not_XID     # 4.1   [14] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT RAISED OMISSION BRACKET
+
+# Total code points: 14
+
+#      Identifier_Type:        Technical Not_XID
+
+20DD..20E0    ; Technical Not_XID              # 1.1    [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH
+20E2..20E3    ; Technical Not_XID              # 3.0    [2] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING KEYCAP
+20E4          ; Technical Not_XID              # 3.2        COMBINING ENCLOSING UPWARD POINTING TRIANGLE
+24EB..24FE    ; Technical Not_XID              # 3.2   [20] NEGATIVE CIRCLED NUMBER ELEVEN..DOUBLE CIRCLED NUMBER TEN
+24FF          ; Technical Not_XID              # 4.0        NEGATIVE CIRCLED DIGIT ZERO
+2800..28FF    ; Technical Not_XID              # 3.0  [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678
+327F          ; Technical Not_XID              # 1.1        KOREAN STANDARD SYMBOL
+4DC0..4DFF    ; Technical Not_XID              # 4.0   [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION
+A708..A716    ; Technical Not_XID              # 4.1   [15] MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR
+FBB2..FBC1    ; Technical Not_XID              # 6.0   [16] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL SMALL TAH BELOW
+FD3E..FD3F    ; Technical Not_XID              # 1.1    [2] ORNATE LEFT PARENTHESIS..ORNATE RIGHT PARENTHESIS
+FDFD          ; Technical Not_XID              # 4.0        ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM
+FE45..FE46    ; Technical Not_XID              # 3.2    [2] SESAME DOT..WHITE SESAME DOT
+1D000..1D0F5  ; Technical Not_XID              # 3.1  [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO
+1D100..1D126  ; Technical Not_XID              # 3.1   [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2
+1D129         ; Technical Not_XID              # 5.1        MUSICAL SYMBOL MULTIPLE MEASURE REST
+1D12A..1D15D  ; Technical Not_XID              # 3.1   [52] MUSICAL SYMBOL DOUBLE SHARP..MUSICAL SYMBOL WHOLE NOTE
+1D16A..1D16C  ; Technical Not_XID              # 3.1    [3] MUSICAL SYMBOL FINGERED TREMOLO-1..MUSICAL SYMBOL FINGERED TREMOLO-3
+1D183..1D184  ; Technical Not_XID              # 3.1    [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN
+1D18C..1D1A9  ; Technical Not_XID              # 3.1   [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH
+1D1AE..1D1BA  ; Technical Not_XID              # 3.1   [13] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL SEMIBREVIS BLACK
+1D1C1..1D1DD  ; Technical Not_XID              # 3.1   [29] MUSICAL SYMBOL LONGA PERFECTA REST..MUSICAL SYMBOL PES SUBPUNCTIS
+1D300..1D356  ; Technical Not_XID              # 4.0   [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING
+
+# Total code points: 887
+
+#      Identifier_Type:        Exclusion
+
+03E2..03EF    ; Exclusion                      # 1.1   [14] COPTIC CAPITAL LETTER SHEI..COPTIC SMALL LETTER DEI
+0800..082D    ; Exclusion                      # 5.2   [46] SAMARITAN LETTER ALAF..SAMARITAN MARK NEQUDAA
+1681..169A    ; Exclusion                      # 3.0   [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH
+16A0..16EA    ; Exclusion                      # 3.0   [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X
+16EE..16F0    ; Exclusion                      # 3.0    [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL
+16F1..16F8    ; Exclusion                      # 7.0    [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC
+1700..170C    ; Exclusion                      # 3.2   [13] TAGALOG LETTER A..TAGALOG LETTER YA
+170E..1714    ; Exclusion                      # 3.2    [7] TAGALOG LETTER LA..TAGALOG SIGN VIRAMA
+1720..1734    ; Exclusion                      # 3.2   [21] HANUNOO LETTER A..HANUNOO SIGN PAMUDPOD
+1740..1753    ; Exclusion                      # 3.2   [20] BUHID LETTER A..BUHID VOWEL SIGN U
+1760..176C    ; Exclusion                      # 3.2   [13] TAGBANWA LETTER A..TAGBANWA LETTER YA
+176E..1770    ; Exclusion                      # 3.2    [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA
+1772..1773    ; Exclusion                      # 3.2    [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U
+1810..1819    ; Exclusion                      # 3.0   [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE
+1820..1877    ; Exclusion                      # 3.0   [88] MONGOLIAN LETTER A..MONGOLIAN LETTER MANCHU ZHA
+1878          ; Exclusion                      # 11.0       MONGOLIAN LETTER CHA WITH TWO DOTS
+1880..18A8    ; Exclusion                      # 3.0   [41] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER MANCHU ALI GALI BHA
+18AA          ; Exclusion                      # 5.1        MONGOLIAN LETTER MANCHU ALI GALI LHA
+1A00..1A1B    ; Exclusion                      # 4.1   [28] BUGINESE LETTER KA..BUGINESE VOWEL SIGN AE
+1CFA          ; Exclusion                      # 12.0       VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA
+2C00..2C2E    ; Exclusion                      # 4.1   [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+2C30..2C5E    ; Exclusion                      # 4.1   [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE
+2C80..2CE4    ; Exclusion                      # 4.1  [101] COPTIC CAPITAL LETTER ALFA..COPTIC SYMBOL KAI
+2CEB..2CEF    ; Exclusion                      # 5.2    [5] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC COMBINING NI ABOVE
+2CF2..2CF3    ; Exclusion                      # 6.1    [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI
+A840..A873    ; Exclusion                      # 5.0   [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU
+A930..A953    ; Exclusion                      # 5.1   [36] REJANG LETTER KA..REJANG VIRAMA
+10000..1000B  ; Exclusion                      # 4.0   [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE
+1000D..10026  ; Exclusion                      # 4.0   [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO
+10028..1003A  ; Exclusion                      # 4.0   [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO
+1003C..1003D  ; Exclusion                      # 4.0    [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE
+1003F..1004D  ; Exclusion                      # 4.0   [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO
+10050..1005D  ; Exclusion                      # 4.0   [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089
+10080..100FA  ; Exclusion                      # 4.0  [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305
+10280..1029C  ; Exclusion                      # 5.1   [29] LYCIAN LETTER A..LYCIAN LETTER X
+102A0..102D0  ; Exclusion                      # 5.1   [49] CARIAN LETTER A..CARIAN LETTER UUU3
+10300..1031E  ; Exclusion                      # 3.1   [31] OLD ITALIC LETTER A..OLD ITALIC LETTER UU
+1031F         ; Exclusion                      # 7.0        OLD ITALIC LETTER ESS
+1032D..1032F  ; Exclusion                      # 10.0   [3] OLD ITALIC LETTER YE..OLD ITALIC LETTER SOUTHERN TSE
+10330..1034A  ; Exclusion                      # 3.1   [27] GOTHIC LETTER AHSA..GOTHIC LETTER NINE HUNDRED
+10350..1037A  ; Exclusion                      # 7.0   [43] OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII
+10380..1039D  ; Exclusion                      # 4.0   [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU
+103A0..103C3  ; Exclusion                      # 4.1   [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA
+103C8..103CF  ; Exclusion                      # 4.1    [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH
+103D1..103D5  ; Exclusion                      # 4.1    [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED
+10400..10425  ; Exclusion                      # 3.1   [38] DESERET CAPITAL LETTER LONG I..DESERET CAPITAL LETTER ENG
+10426..10427  ; Exclusion                      # 4.0    [2] DESERET CAPITAL LETTER OI..DESERET CAPITAL LETTER EW
+10428..1044D  ; Exclusion                      # 3.1   [38] DESERET SMALL LETTER LONG I..DESERET SMALL LETTER ENG
+1044E..1049D  ; Exclusion                      # 4.0   [80] DESERET SMALL LETTER OI..OSMANYA LETTER OO
+104A0..104A9  ; Exclusion                      # 4.0   [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE
+10500..10527  ; Exclusion                      # 7.0   [40] ELBASAN LETTER A..ELBASAN LETTER KHE
+10530..10563  ; Exclusion                      # 7.0   [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW
+10600..10736  ; Exclusion                      # 7.0  [311] LINEAR A SIGN AB001..LINEAR A SIGN A664
+10740..10755  ; Exclusion                      # 7.0   [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE
+10760..10767  ; Exclusion                      # 7.0    [8] LINEAR A SIGN A800..LINEAR A SIGN A807
+10800..10805  ; Exclusion                      # 4.0    [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA
+10808         ; Exclusion                      # 4.0        CYPRIOT SYLLABLE JO
+1080A..10835  ; Exclusion                      # 4.0   [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO
+10837..10838  ; Exclusion                      # 4.0    [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE
+1083C         ; Exclusion                      # 4.0        CYPRIOT SYLLABLE ZA
+1083F         ; Exclusion                      # 4.0        CYPRIOT SYLLABLE ZO
+10840..10855  ; Exclusion                      # 5.2   [22] IMPERIAL ARAMAIC LETTER ALEPH..IMPERIAL ARAMAIC LETTER TAW
+10860..10876  ; Exclusion                      # 7.0   [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW
+10880..1089E  ; Exclusion                      # 7.0   [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW
+108E0..108F2  ; Exclusion                      # 8.0   [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH
+108F4..108F5  ; Exclusion                      # 8.0    [2] HATRAN LETTER SHIN..HATRAN LETTER TAW
+10900..10915  ; Exclusion                      # 5.0   [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU
+10920..10939  ; Exclusion                      # 5.1   [26] LYDIAN LETTER A..LYDIAN LETTER C
+10980..109B7  ; Exclusion                      # 6.1   [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA
+109BE..109BF  ; Exclusion                      # 6.1    [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN
+10A00..10A03  ; Exclusion                      # 4.1    [4] KHAROSHTHI LETTER A..KHAROSHTHI VOWEL SIGN VOCALIC R
+10A05..10A06  ; Exclusion                      # 4.1    [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O
+10A0C..10A13  ; Exclusion                      # 4.1    [8] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI LETTER GHA
+10A15..10A17  ; Exclusion                      # 4.1    [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA
+10A19..10A33  ; Exclusion                      # 4.1   [27] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER TTTHA
+10A34..10A35  ; Exclusion                      # 11.0   [2] KHAROSHTHI LETTER TTTA..KHAROSHTHI LETTER VHA
+10A38..10A3A  ; Exclusion                      # 4.1    [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW
+10A3F         ; Exclusion                      # 4.1        KHAROSHTHI VIRAMA
+10A60..10A7C  ; Exclusion                      # 5.2   [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH
+10A80..10A9C  ; Exclusion                      # 7.0   [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH
+10AC0..10AC7  ; Exclusion                      # 7.0    [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW
+10AC9..10AE6  ; Exclusion                      # 7.0   [30] MANICHAEAN LETTER ZAYIN..MANICHAEAN ABBREVIATION MARK BELOW
+10B00..10B35  ; Exclusion                      # 5.2   [54] AVESTAN LETTER A..AVESTAN LETTER HE
+10B40..10B55  ; Exclusion                      # 5.2   [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW
+10B60..10B72  ; Exclusion                      # 5.2   [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW
+10B80..10B91  ; Exclusion                      # 7.0   [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW
+10C00..10C48  ; Exclusion                      # 5.2   [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH
+10C80..10CB2  ; Exclusion                      # 8.0   [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US
+10CC0..10CF2  ; Exclusion                      # 8.0   [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US
+10E80..10EA9  ; Exclusion                      # 13.0  [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET
+10EAB..10EAC  ; Exclusion                      # 13.0   [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK
+10EB0..10EB1  ; Exclusion                      # 13.0   [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
+10F00..10F1C  ; Exclusion                      # 11.0  [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
+10F27         ; Exclusion                      # 11.0       OLD SOGDIAN LIGATURE AYIN-DALETH
+10F30..10F50  ; Exclusion                      # 11.0  [33] SOGDIAN LETTER ALEPH..SOGDIAN COMBINING STROKE BELOW
+10FB0..10FC4  ; Exclusion                      # 13.0  [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW
+10FE0..10FF6  ; Exclusion                      # 12.0  [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH
+11000..11046  ; Exclusion                      # 6.0   [71] BRAHMI SIGN CANDRABINDU..BRAHMI VIRAMA
+11066..1106F  ; Exclusion                      # 6.0   [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE
+1107F         ; Exclusion                      # 7.0        BRAHMI NUMBER JOINER
+11080..110BA  ; Exclusion                      # 5.2   [59] KAITHI SIGN CANDRABINDU..KAITHI SIGN NUKTA
+110D0..110E8  ; Exclusion                      # 6.1   [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE
+110F0..110F9  ; Exclusion                      # 6.1   [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE
+11150..11173  ; Exclusion                      # 7.0   [36] MAHAJANI LETTER A..MAHAJANI SIGN NUKTA
+11176         ; Exclusion                      # 7.0        MAHAJANI LIGATURE SHRI
+11180..111C4  ; Exclusion                      # 6.1   [69] SHARADA SIGN CANDRABINDU..SHARADA OM
+111C9..111CC  ; Exclusion                      # 8.0    [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK
+111CE..111CF  ; Exclusion                      # 13.0   [2] SHARADA VOWEL SIGN PRISHTHAMATRA E..SHARADA SIGN INVERTED CANDRABINDU
+111D0..111D9  ; Exclusion                      # 6.1   [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE
+111DA         ; Exclusion                      # 7.0        SHARADA EKAM
+111DC         ; Exclusion                      # 8.0        SHARADA HEADSTROKE
+11200..11211  ; Exclusion                      # 7.0   [18] KHOJKI LETTER A..KHOJKI LETTER JJA
+11213..11237  ; Exclusion                      # 7.0   [37] KHOJKI LETTER NYA..KHOJKI SIGN SHADDA
+1123E         ; Exclusion                      # 9.0        KHOJKI SIGN SUKUN
+11280..11286  ; Exclusion                      # 8.0    [7] MULTANI LETTER A..MULTANI LETTER GA
+11288         ; Exclusion                      # 8.0        MULTANI LETTER GHA
+1128A..1128D  ; Exclusion                      # 8.0    [4] MULTANI LETTER CA..MULTANI LETTER JJA
+1128F..1129D  ; Exclusion                      # 8.0   [15] MULTANI LETTER NYA..MULTANI LETTER BA
+1129F..112A8  ; Exclusion                      # 8.0   [10] MULTANI LETTER BHA..MULTANI LETTER RHA
+112B0..112EA  ; Exclusion                      # 7.0   [59] KHUDAWADI LETTER A..KHUDAWADI SIGN VIRAMA
+112F0..112F9  ; Exclusion                      # 7.0   [10] KHUDAWADI DIGIT ZERO..KHUDAWADI DIGIT NINE
+11300         ; Exclusion                      # 8.0        GRANTHA SIGN COMBINING ANUSVARA ABOVE
+11302         ; Exclusion                      # 7.0        GRANTHA SIGN ANUSVARA
+11305..1130C  ; Exclusion                      # 7.0    [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L
+1130F..11310  ; Exclusion                      # 7.0    [2] GRANTHA LETTER EE..GRANTHA LETTER AI
+11313..11328  ; Exclusion                      # 7.0   [22] GRANTHA LETTER OO..GRANTHA LETTER NA
+1132A..11330  ; Exclusion                      # 7.0    [7] GRANTHA LETTER PA..GRANTHA LETTER RA
+11332..11333  ; Exclusion                      # 7.0    [2] GRANTHA LETTER LA..GRANTHA LETTER LLA
+11335..11339  ; Exclusion                      # 7.0    [5] GRANTHA LETTER VA..GRANTHA LETTER HA
+1133D..11344  ; Exclusion                      # 7.0    [8] GRANTHA SIGN AVAGRAHA..GRANTHA VOWEL SIGN VOCALIC RR
+11347..11348  ; Exclusion                      # 7.0    [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI
+1134B..1134D  ; Exclusion                      # 7.0    [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA
+11350         ; Exclusion                      # 8.0        GRANTHA OM
+11357         ; Exclusion                      # 7.0        GRANTHA AU LENGTH MARK
+1135D..11363  ; Exclusion                      # 7.0    [7] GRANTHA SIGN PLUTA..GRANTHA VOWEL SIGN VOCALIC LL
+11366..1136C  ; Exclusion                      # 7.0    [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX
+11370..11374  ; Exclusion                      # 7.0    [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA
+11480..114C5  ; Exclusion                      # 7.0   [70] TIRHUTA ANJI..TIRHUTA GVANG
+114C7         ; Exclusion                      # 7.0        TIRHUTA OM
+114D0..114D9  ; Exclusion                      # 7.0   [10] TIRHUTA DIGIT ZERO..TIRHUTA DIGIT NINE
+11580..115B5  ; Exclusion                      # 7.0   [54] SIDDHAM LETTER A..SIDDHAM VOWEL SIGN VOCALIC RR
+115B8..115C0  ; Exclusion                      # 7.0    [9] SIDDHAM VOWEL SIGN E..SIDDHAM SIGN NUKTA
+115D8..115DD  ; Exclusion                      # 8.0    [6] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM VOWEL SIGN ALTERNATE UU
+11600..11640  ; Exclusion                      # 7.0   [65] MODI LETTER A..MODI SIGN ARDHACANDRA
+11644         ; Exclusion                      # 7.0        MODI SIGN HUVA
+11650..11659  ; Exclusion                      # 7.0   [10] MODI DIGIT ZERO..MODI DIGIT NINE
+11680..116B7  ; Exclusion                      # 6.1   [56] TAKRI LETTER A..TAKRI SIGN NUKTA
+116B8         ; Exclusion                      # 12.0       TAKRI LETTER ARCHAIC KHA
+116C0..116C9  ; Exclusion                      # 6.1   [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE
+11700..11719  ; Exclusion                      # 8.0   [26] AHOM LETTER KA..AHOM LETTER JHA
+1171A         ; Exclusion                      # 11.0       AHOM LETTER ALTERNATE BA
+1171D..1172B  ; Exclusion                      # 8.0   [15] AHOM CONSONANT SIGN MEDIAL LA..AHOM SIGN KILLER
+11730..11739  ; Exclusion                      # 8.0   [10] AHOM DIGIT ZERO..AHOM DIGIT NINE
+11800..1183A  ; Exclusion                      # 11.0  [59] DOGRA LETTER A..DOGRA SIGN NUKTA
+118A0..118E9  ; Exclusion                      # 7.0   [74] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI DIGIT NINE
+118FF         ; Exclusion                      # 7.0        WARANG CITI OM
+11900..11906  ; Exclusion                      # 13.0   [7] DIVES AKURU LETTER A..DIVES AKURU LETTER E
+11909         ; Exclusion                      # 13.0       DIVES AKURU LETTER O
+1190C..11913  ; Exclusion                      # 13.0   [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA
+11915..11916  ; Exclusion                      # 13.0   [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA
+11918..11935  ; Exclusion                      # 13.0  [30] DIVES AKURU LETTER DDA..DIVES AKURU VOWEL SIGN E
+11937..11938  ; Exclusion                      # 13.0   [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O
+1193B..11943  ; Exclusion                      # 13.0   [9] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN NUKTA
+11950..11959  ; Exclusion                      # 13.0  [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE
+119A0..119A7  ; Exclusion                      # 12.0   [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR
+119AA..119D7  ; Exclusion                      # 12.0  [46] NANDINAGARI LETTER E..NANDINAGARI VOWEL SIGN VOCALIC RR
+119DA..119E1  ; Exclusion                      # 12.0   [8] NANDINAGARI VOWEL SIGN E..NANDINAGARI SIGN AVAGRAHA
+119E3..119E4  ; Exclusion                      # 12.0   [2] NANDINAGARI HEADSTROKE..NANDINAGARI VOWEL SIGN PRISHTHAMATRA E
+11A00..11A3E  ; Exclusion                      # 10.0  [63] ZANABAZAR SQUARE LETTER A..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA
+11A47         ; Exclusion                      # 10.0       ZANABAZAR SQUARE SUBJOINER
+11A50..11A83  ; Exclusion                      # 10.0  [52] SOYOMBO LETTER A..SOYOMBO LETTER KSSA
+11A84..11A85  ; Exclusion                      # 12.0   [2] SOYOMBO SIGN JIHVAMULIYA..SOYOMBO SIGN UPADHMANIYA
+11A86..11A99  ; Exclusion                      # 10.0  [20] SOYOMBO CLUSTER-INITIAL LETTER RA..SOYOMBO SUBJOINER
+11A9D         ; Exclusion                      # 11.0       SOYOMBO MARK PLUTA
+11AC0..11AF8  ; Exclusion                      # 7.0   [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL
+11C00..11C08  ; Exclusion                      # 9.0    [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L
+11C0A..11C36  ; Exclusion                      # 9.0   [45] BHAIKSUKI LETTER E..BHAIKSUKI VOWEL SIGN VOCALIC L
+11C38..11C40  ; Exclusion                      # 9.0    [9] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN AVAGRAHA
+11C50..11C59  ; Exclusion                      # 9.0   [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE
+11C72..11C8F  ; Exclusion                      # 9.0   [30] MARCHEN LETTER KA..MARCHEN LETTER A
+11C92..11CA7  ; Exclusion                      # 9.0   [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA
+11CA9..11CB6  ; Exclusion                      # 9.0   [14] MARCHEN SUBJOINED LETTER YA..MARCHEN SIGN CANDRABINDU
+11D00..11D06  ; Exclusion                      # 10.0   [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E
+11D08..11D09  ; Exclusion                      # 10.0   [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O
+11D0B..11D36  ; Exclusion                      # 10.0  [44] MASARAM GONDI LETTER AU..MASARAM GONDI VOWEL SIGN VOCALIC R
+11D3A         ; Exclusion                      # 10.0       MASARAM GONDI VOWEL SIGN E
+11D3C..11D3D  ; Exclusion                      # 10.0   [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O
+11D3F..11D47  ; Exclusion                      # 10.0   [9] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI RA-KARA
+11D50..11D59  ; Exclusion                      # 10.0  [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE
+11EE0..11EF6  ; Exclusion                      # 11.0  [23] MAKASAR LETTER KA..MAKASAR VOWEL SIGN O
+12000..1236E  ; Exclusion                      # 5.0  [879] CUNEIFORM SIGN A..CUNEIFORM SIGN ZUM
+1236F..12398  ; Exclusion                      # 7.0   [42] CUNEIFORM SIGN KAP ELAMITE..CUNEIFORM SIGN UM TIMES ME
+12399         ; Exclusion                      # 8.0        CUNEIFORM SIGN U U
+12400..12462  ; Exclusion                      # 5.0   [99] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER
+12463..1246E  ; Exclusion                      # 7.0   [12] CUNEIFORM NUMERIC SIGN ONE QUARTER GUR..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM
+12480..12543  ; Exclusion                      # 8.0  [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
+13000..1342E  ; Exclusion                      # 5.2 [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032
+14400..14646  ; Exclusion                      # 8.0  [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530
+16AD0..16AED  ; Exclusion                      # 7.0   [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I
+16AF0..16AF4  ; Exclusion                      # 7.0    [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE
+16B00..16B36  ; Exclusion                      # 7.0   [55] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG MARK CIM TAUM
+16B40..16B43  ; Exclusion                      # 7.0    [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM
+16B50..16B59  ; Exclusion                      # 7.0   [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE
+16B63..16B77  ; Exclusion                      # 7.0   [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS
+16B7D..16B8F  ; Exclusion                      # 7.0   [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ
+16E40..16E7F  ; Exclusion                      # 11.0  [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y
+16FE0         ; Exclusion                      # 9.0        TANGUT ITERATION MARK
+16FE1         ; Exclusion                      # 10.0       NUSHU ITERATION MARK
+16FE4         ; Exclusion                      # 13.0       KHITAN SMALL SCRIPT FILLER
+17000..187EC  ; Exclusion                      # 9.0 [6125] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187EC
+187ED..187F1  ; Exclusion                      # 11.0   [5] TANGUT IDEOGRAPH-187ED..TANGUT IDEOGRAPH-187F1
+187F2..187F7  ; Exclusion                      # 12.0   [6] TANGUT IDEOGRAPH-187F2..TANGUT IDEOGRAPH-187F7
+18800..18AF2  ; Exclusion                      # 9.0  [755] TANGUT COMPONENT-001..TANGUT COMPONENT-755
+18AF3..18CD5  ; Exclusion                      # 13.0 [483] TANGUT COMPONENT-756..KHITAN SMALL SCRIPT CHARACTER-18CD5
+18D00..18D08  ; Exclusion                      # 13.0   [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08
+1B170..1B2FB  ; Exclusion                      # 10.0 [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB
+1BC00..1BC6A  ; Exclusion                      # 7.0  [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M
+1BC70..1BC7C  ; Exclusion                      # 7.0   [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK
+1BC80..1BC88  ; Exclusion                      # 7.0    [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL
+1BC90..1BC99  ; Exclusion                      # 7.0   [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW
+1BC9D..1BC9E  ; Exclusion                      # 7.0    [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK
+1DA00..1DA36  ; Exclusion                      # 8.0   [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN
+1DA3B..1DA6C  ; Exclusion                      # 8.0   [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT
+1DA75         ; Exclusion                      # 8.0        SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS
+1DA84         ; Exclusion                      # 8.0        SIGNWRITING LOCATION HEAD NECK
+1DA9B..1DA9F  ; Exclusion                      # 8.0    [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6
+1DAA1..1DAAF  ; Exclusion                      # 8.0   [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16
+1E000..1E006  ; Exclusion                      # 9.0    [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE
+1E008..1E018  ; Exclusion                      # 9.0   [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU
+1E01B..1E021  ; Exclusion                      # 9.0    [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI
+1E023..1E024  ; Exclusion                      # 9.0    [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS
+1E026..1E02A  ; Exclusion                      # 9.0    [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA
+1E800..1E8C4  ; Exclusion                      # 7.0  [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON
+1E8D0..1E8D6  ; Exclusion                      # 7.0    [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS
+
+# Total code points: 15602
+
+#      Identifier_Type:        Exclusion Not_XID
+
+0830..083E    ; Exclusion Not_XID              # 5.2   [15] SAMARITAN PUNCTUATION NEQUDAA..SAMARITAN PUNCTUATION ANNAAU
+1680          ; Exclusion Not_XID              # 3.0        OGHAM SPACE MARK
+169B..169C    ; Exclusion Not_XID              # 3.0    [2] OGHAM FEATHER MARK..OGHAM REVERSED FEATHER MARK
+1735..1736    ; Exclusion Not_XID              # 3.2    [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION
+1800..180A    ; Exclusion Not_XID              # 3.0   [11] MONGOLIAN BIRGA..MONGOLIAN NIRUGU
+1A1E..1A1F    ; Exclusion Not_XID              # 4.1    [2] BUGINESE PALLAWA..BUGINESE END OF SECTION
+2CE5..2CEA    ; Exclusion Not_XID              # 4.1    [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA
+2CF9..2CFF    ; Exclusion Not_XID              # 4.1    [7] COPTIC OLD NUBIAN FULL STOP..COPTIC MORPHOLOGICAL DIVIDER
+A874..A877    ; Exclusion Not_XID              # 5.0    [4] PHAGS-PA SINGLE HEAD MARK..PHAGS-PA MARK DOUBLE SHAD
+A95F          ; Exclusion Not_XID              # 5.1        REJANG SECTION MARK
+10100..10102  ; Exclusion Not_XID              # 4.0    [3] AEGEAN WORD SEPARATOR LINE..AEGEAN CHECK MARK
+10107..10133  ; Exclusion Not_XID              # 4.0   [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND
+10137..1013F  ; Exclusion Not_XID              # 4.0    [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT
+10320..10323  ; Exclusion Not_XID              # 3.1    [4] OLD ITALIC NUMERAL ONE..OLD ITALIC NUMERAL FIFTY
+1039F         ; Exclusion Not_XID              # 4.0        UGARITIC WORD DIVIDER
+103D0         ; Exclusion Not_XID              # 4.1        OLD PERSIAN WORD DIVIDER
+1056F         ; Exclusion Not_XID              # 7.0        CAUCASIAN ALBANIAN CITATION MARK
+10857..1085F  ; Exclusion Not_XID              # 5.2    [9] IMPERIAL ARAMAIC SECTION SIGN..IMPERIAL ARAMAIC NUMBER TEN THOUSAND
+10877..1087F  ; Exclusion Not_XID              # 7.0    [9] PALMYRENE LEFT-POINTING FLEURON..PALMYRENE NUMBER TWENTY
+108A7..108AF  ; Exclusion Not_XID              # 7.0    [9] NABATAEAN NUMBER ONE..NABATAEAN NUMBER ONE HUNDRED
+108FB..108FF  ; Exclusion Not_XID              # 8.0    [5] HATRAN NUMBER ONE..HATRAN NUMBER ONE HUNDRED
+10916..10919  ; Exclusion Not_XID              # 5.0    [4] PHOENICIAN NUMBER ONE..PHOENICIAN NUMBER ONE HUNDRED
+1091A..1091B  ; Exclusion Not_XID              # 5.2    [2] PHOENICIAN NUMBER TWO..PHOENICIAN NUMBER THREE
+1091F         ; Exclusion Not_XID              # 5.0        PHOENICIAN WORD SEPARATOR
+1093F         ; Exclusion Not_XID              # 5.1        LYDIAN TRIANGULAR MARK
+109BC..109BD  ; Exclusion Not_XID              # 8.0    [2] MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS..MEROITIC CURSIVE FRACTION ONE HALF
+109C0..109CF  ; Exclusion Not_XID              # 8.0   [16] MEROITIC CURSIVE NUMBER ONE..MEROITIC CURSIVE NUMBER SEVENTY
+109D2..109FF  ; Exclusion Not_XID              # 8.0   [46] MEROITIC CURSIVE NUMBER ONE HUNDRED..MEROITIC CURSIVE FRACTION TEN TWELFTHS
+10A40..10A47  ; Exclusion Not_XID              # 4.1    [8] KHAROSHTHI DIGIT ONE..KHAROSHTHI NUMBER ONE THOUSAND
+10A48         ; Exclusion Not_XID              # 11.0       KHAROSHTHI FRACTION ONE HALF
+10A50..10A58  ; Exclusion Not_XID              # 4.1    [9] KHAROSHTHI PUNCTUATION DOT..KHAROSHTHI PUNCTUATION LINES
+10A7D..10A7F  ; Exclusion Not_XID              # 5.2    [3] OLD SOUTH ARABIAN NUMBER ONE..OLD SOUTH ARABIAN NUMERIC INDICATOR
+10A9D..10A9F  ; Exclusion Not_XID              # 7.0    [3] OLD NORTH ARABIAN NUMBER ONE..OLD NORTH ARABIAN NUMBER TWENTY
+10AC8         ; Exclusion Not_XID              # 7.0        MANICHAEAN SIGN UD
+10AEB..10AF6  ; Exclusion Not_XID              # 7.0   [12] MANICHAEAN NUMBER ONE..MANICHAEAN PUNCTUATION LINE FILLER
+10B39..10B3F  ; Exclusion Not_XID              # 5.2    [7] AVESTAN ABBREVIATION MARK..LARGE ONE RING OVER TWO RINGS PUNCTUATION
+10B58..10B5F  ; Exclusion Not_XID              # 5.2    [8] INSCRIPTIONAL PARTHIAN NUMBER ONE..INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND
+10B78..10B7F  ; Exclusion Not_XID              # 5.2    [8] INSCRIPTIONAL PAHLAVI NUMBER ONE..INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND
+10B99..10B9C  ; Exclusion Not_XID              # 7.0    [4] PSALTER PAHLAVI SECTION MARK..PSALTER PAHLAVI FOUR DOTS WITH DOT
+10BA9..10BAF  ; Exclusion Not_XID              # 7.0    [7] PSALTER PAHLAVI NUMBER ONE..PSALTER PAHLAVI NUMBER ONE HUNDRED
+10CFA..10CFF  ; Exclusion Not_XID              # 8.0    [6] OLD HUNGARIAN NUMBER ONE..OLD HUNGARIAN NUMBER ONE THOUSAND
+10EAD         ; Exclusion Not_XID              # 13.0       YEZIDI HYPHENATION MARK
+10F1D..10F26  ; Exclusion Not_XID              # 11.0  [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF
+10F51..10F59  ; Exclusion Not_XID              # 11.0   [9] SOGDIAN NUMBER ONE..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT
+10FC5..10FCB  ; Exclusion Not_XID              # 13.0   [7] CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED
+11047..1104D  ; Exclusion Not_XID              # 6.0    [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS
+11052..11065  ; Exclusion Not_XID              # 6.0   [20] BRAHMI NUMBER ONE..BRAHMI NUMBER ONE THOUSAND
+110BB..110BC  ; Exclusion Not_XID              # 5.2    [2] KAITHI ABBREVIATION SIGN..KAITHI ENUMERATION SIGN
+110BD         ; Exclusion Not_XID              # 5.2        KAITHI NUMBER SIGN
+110BE..110C1  ; Exclusion Not_XID              # 5.2    [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA
+110CD         ; Exclusion Not_XID              # 11.0       KAITHI NUMBER SIGN ABOVE
+11174..11175  ; Exclusion Not_XID              # 7.0    [2] MAHAJANI ABBREVIATION SIGN..MAHAJANI SECTION MARK
+111C5..111C8  ; Exclusion Not_XID              # 6.1    [4] SHARADA DANDA..SHARADA SEPARATOR
+111CD         ; Exclusion Not_XID              # 7.0        SHARADA SUTRA MARK
+111DB         ; Exclusion Not_XID              # 8.0        SHARADA SIGN SIDDHAM
+111DD..111DF  ; Exclusion Not_XID              # 8.0    [3] SHARADA CONTINUATION SIGN..SHARADA SECTION MARK-2
+11238..1123D  ; Exclusion Not_XID              # 7.0    [6] KHOJKI DANDA..KHOJKI ABBREVIATION SIGN
+112A9         ; Exclusion Not_XID              # 8.0        MULTANI SECTION MARK
+114C6         ; Exclusion Not_XID              # 7.0        TIRHUTA ABBREVIATION SIGN
+115C1..115C9  ; Exclusion Not_XID              # 7.0    [9] SIDDHAM SIGN SIDDHAM..SIDDHAM END OF TEXT MARK
+115CA..115D7  ; Exclusion Not_XID              # 8.0   [14] SIDDHAM SECTION MARK WITH TRIDENT AND U-SHAPED ORNAMENTS..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES
+11641..11643  ; Exclusion Not_XID              # 7.0    [3] MODI DANDA..MODI ABBREVIATION SIGN
+11660..1166C  ; Exclusion Not_XID              # 9.0   [13] MONGOLIAN BIRGA WITH ORNAMENT..MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT
+1173A..1173F  ; Exclusion Not_XID              # 8.0    [6] AHOM NUMBER TEN..AHOM SYMBOL VI
+1183B         ; Exclusion Not_XID              # 11.0       DOGRA ABBREVIATION SIGN
+118EA..118F2  ; Exclusion Not_XID              # 7.0    [9] WARANG CITI NUMBER TEN..WARANG CITI NUMBER NINETY
+11944..11946  ; Exclusion Not_XID              # 13.0   [3] DIVES AKURU DOUBLE DANDA..DIVES AKURU END OF TEXT MARK
+119E2         ; Exclusion Not_XID              # 12.0       NANDINAGARI SIGN SIDDHAM
+11A3F..11A46  ; Exclusion Not_XID              # 10.0   [8] ZANABAZAR SQUARE INITIAL HEAD MARK..ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK
+11A9A..11A9C  ; Exclusion Not_XID              # 10.0   [3] SOYOMBO MARK TSHEG..SOYOMBO MARK DOUBLE SHAD
+11A9E..11AA2  ; Exclusion Not_XID              # 10.0   [5] SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO TERMINAL MARK-2
+11C41..11C45  ; Exclusion Not_XID              # 9.0    [5] BHAIKSUKI DANDA..BHAIKSUKI GAP FILLER-2
+11C5A..11C6C  ; Exclusion Not_XID              # 9.0   [19] BHAIKSUKI NUMBER ONE..BHAIKSUKI HUNDREDS UNIT MARK
+11C70..11C71  ; Exclusion Not_XID              # 9.0    [2] MARCHEN HEAD MARK..MARCHEN MARK SHAD
+11EF7..11EF8  ; Exclusion Not_XID              # 11.0   [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION
+12470..12473  ; Exclusion Not_XID              # 5.0    [4] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON
+12474         ; Exclusion Not_XID              # 7.0        CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON
+13430..13438  ; Exclusion Not_XID              # 12.0   [9] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END SEGMENT
+16A6E..16A6F  ; Exclusion Not_XID              # 7.0    [2] MRO DANDA..MRO DOUBLE DANDA
+16AF5         ; Exclusion Not_XID              # 7.0        BASSA VAH FULL STOP
+16B37..16B3F  ; Exclusion Not_XID              # 7.0    [9] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN XYEEM FAIB
+16B44..16B45  ; Exclusion Not_XID              # 7.0    [2] PAHAWH HMONG SIGN XAUS..PAHAWH HMONG SIGN CIM TSOV ROG
+16B5B..16B61  ; Exclusion Not_XID              # 7.0    [7] PAHAWH HMONG NUMBER TENS..PAHAWH HMONG NUMBER TRILLIONS
+16E80..16E9A  ; Exclusion Not_XID              # 11.0  [27] MEDEFAIDRIN DIGIT ZERO..MEDEFAIDRIN EXCLAMATION OH
+1BC9C         ; Exclusion Not_XID              # 7.0        DUPLOYAN SIGN O WITH CROSS
+1BC9F         ; Exclusion Not_XID              # 7.0        DUPLOYAN PUNCTUATION CHINOOK FULL STOP
+1D800..1D9FF  ; Exclusion Not_XID              # 8.0  [512] SIGNWRITING HAND-FIST INDEX..SIGNWRITING HEAD
+1DA37..1DA3A  ; Exclusion Not_XID              # 8.0    [4] SIGNWRITING AIR BLOW SMALL ROTATIONS..SIGNWRITING BREATH EXHALE
+1DA6D..1DA74  ; Exclusion Not_XID              # 8.0    [8] SIGNWRITING SHOULDER HIP SPINE..SIGNWRITING TORSO-FLOORPLANE TWISTING
+1DA76..1DA83  ; Exclusion Not_XID              # 8.0   [14] SIGNWRITING LIMB COMBINATION..SIGNWRITING LOCATION DEPTH
+1DA85..1DA8B  ; Exclusion Not_XID              # 8.0    [7] SIGNWRITING LOCATION TORSO..SIGNWRITING PARENTHESIS
+1E8C7..1E8CF  ; Exclusion Not_XID              # 7.0    [9] MENDE KIKAKUI DIGIT ONE..MENDE KIKAKUI DIGIT NINE
+
+# Total code points: 1098
+
+#      Identifier_Type:        Obsolete
+
+01B9          ; Obsolete                       # 1.1        LATIN SMALL LETTER EZH REVERSED
+01BF          ; Obsolete                       # 1.1        LATIN LETTER WYNN
+01F6..01F7    ; Obsolete                       # 3.0    [2] LATIN CAPITAL LETTER HWAIR..LATIN CAPITAL LETTER WYNN
+021C..021D    ; Obsolete                       # 3.0    [2] LATIN CAPITAL LETTER YOGH..LATIN SMALL LETTER YOGH
+0363..036F    ; Obsolete                       # 3.2   [13] COMBINING LATIN SMALL LETTER A..COMBINING LATIN SMALL LETTER X
+0370..0373    ; Obsolete                       # 5.1    [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI
+0376..0377    ; Obsolete                       # 5.1    [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
+037F          ; Obsolete                       # 7.0        GREEK CAPITAL LETTER YOT
+03D8..03D9    ; Obsolete                       # 3.2    [2] GREEK LETTER ARCHAIC KOPPA..GREEK SMALL LETTER ARCHAIC KOPPA
+03DA          ; Obsolete                       # 1.1        GREEK LETTER STIGMA
+03DB          ; Obsolete                       # 3.0        GREEK SMALL LETTER STIGMA
+03DC          ; Obsolete                       # 1.1        GREEK LETTER DIGAMMA
+03DD          ; Obsolete                       # 3.0        GREEK SMALL LETTER DIGAMMA
+03DE          ; Obsolete                       # 1.1        GREEK LETTER KOPPA
+03DF          ; Obsolete                       # 3.0        GREEK SMALL LETTER KOPPA
+03E0          ; Obsolete                       # 1.1        GREEK LETTER SAMPI
+03E1          ; Obsolete                       # 3.0        GREEK SMALL LETTER SAMPI
+03F7..03F8    ; Obsolete                       # 4.0    [2] GREEK CAPITAL LETTER SHO..GREEK SMALL LETTER SHO
+03FA..03FB    ; Obsolete                       # 4.0    [2] GREEK CAPITAL LETTER SAN..GREEK SMALL LETTER SAN
+0460..0481    ; Obsolete                       # 1.1   [34] CYRILLIC CAPITAL LETTER OMEGA..CYRILLIC SMALL LETTER KOPPA
+0483          ; Obsolete                       # 1.1        COMBINING CYRILLIC TITLO
+0500..050F    ; Obsolete                       # 3.2   [16] CYRILLIC CAPITAL LETTER KOMI DE..CYRILLIC SMALL LETTER KOMI TJE
+052A..052D    ; Obsolete                       # 7.0    [4] CYRILLIC CAPITAL LETTER DZZHE..CYRILLIC SMALL LETTER DCHE
+0640          ; Obsolete                       # 1.1        ARABIC TATWEEL
+066E..066F    ; Obsolete                       # 3.2    [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF
+068E          ; Obsolete                       # 1.1        ARABIC LETTER DUL
+06A1          ; Obsolete                       # 1.1        ARABIC LETTER DOTLESS FEH
+08AD..08B1    ; Obsolete                       # 7.0    [5] ARABIC LETTER LOW ALEF..ARABIC LETTER STRAIGHT WAW
+094E          ; Obsolete                       # 5.2        DEVANAGARI VOWEL SIGN PRISHTHAMATRA E
+0951..0952    ; Obsolete                       # 1.1    [2] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI STRESS SIGN ANUDATTA
+0978          ; Obsolete                       # 7.0        DEVANAGARI LETTER MARWARI DDA
+0980          ; Obsolete                       # 7.0        BENGALI ANJI
+09FC          ; Obsolete                       # 10.0       BENGALI LETTER VEDIC ANUSVARA
+0C00          ; Obsolete                       # 7.0        TELUGU SIGN COMBINING CANDRABINDU ABOVE
+0C34          ; Obsolete                       # 7.0        TELUGU LETTER LLLA
+0C58..0C59    ; Obsolete                       # 5.1    [2] TELUGU LETTER TSA..TELUGU LETTER DZA
+0C81          ; Obsolete                       # 7.0        KANNADA SIGN CANDRABINDU
+0CDE          ; Obsolete                       # 1.1        KANNADA LETTER FA
+0D01          ; Obsolete                       # 7.0        MALAYALAM SIGN CANDRABINDU
+0D3B..0D3C    ; Obsolete                       # 10.0   [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA
+0D5F          ; Obsolete                       # 8.0        MALAYALAM LETTER ARCHAIC II
+0DE6..0DEF    ; Obsolete                       # 7.0   [10] SINHALA LITH DIGIT ZERO..SINHALA LITH DIGIT NINE
+10A0..10C5    ; Obsolete                       # 1.1   [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
+10F1..10F6    ; Obsolete                       # 1.1    [6] GEORGIAN LETTER HE..GEORGIAN LETTER FI
+1100..1159    ; Obsolete                       # 1.1   [90] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG YEORINHIEUH
+115A..115E    ; Obsolete                       # 5.2    [5] HANGUL CHOSEONG KIYEOK-TIKEUT..HANGUL CHOSEONG TIKEUT-RIEUL
+1161..11A2    ; Obsolete                       # 1.1   [66] HANGUL JUNGSEONG A..HANGUL JUNGSEONG SSANGARAEA
+11A3..11A7    ; Obsolete                       # 5.2    [5] HANGUL JUNGSEONG A-EU..HANGUL JUNGSEONG O-YAE
+11A8..11F9    ; Obsolete                       # 1.1   [82] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG YEORINHIEUH
+11FA..11FF    ; Obsolete                       # 5.2    [6] HANGUL JONGSEONG KIYEOK-NIEUN..HANGUL JONGSEONG SSANGNIEUN
+1369..1371    ; Obsolete                       # 3.0    [9] ETHIOPIC DIGIT ONE..ETHIOPIC DIGIT NINE
+17A8          ; Obsolete                       # 3.0        KHMER INDEPENDENT VOWEL QUK
+17D3          ; Obsolete                       # 3.0        KHMER SIGN BATHAMASAT
+1AB0..1ABD    ; Obsolete                       # 7.0   [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
+1C80..1C88    ; Obsolete                       # 9.0    [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK
+1CD0..1CD2    ; Obsolete                       # 5.2    [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA
+1CD4..1CF2    ; Obsolete                       # 5.2   [31] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC SIGN ARDHAVISARGA
+1CF3..1CF6    ; Obsolete                       # 6.1    [4] VEDIC SIGN ROTATED ARDHAVISARGA..VEDIC SIGN UPADHMANIYA
+1CF7          ; Obsolete                       # 10.0       VEDIC SIGN ATIKRAMA
+1CF8..1CF9    ; Obsolete                       # 7.0    [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE
+2132          ; Obsolete                       # 1.1        TURNED CAPITAL F
+214E          ; Obsolete                       # 5.0        TURNED SMALL F
+2184          ; Obsolete                       # 5.0        LATIN SMALL LETTER REVERSED C
+2185..2188    ; Obsolete                       # 5.1    [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND
+2C6D..2C6F    ; Obsolete                       # 5.1    [3] LATIN CAPITAL LETTER ALPHA..LATIN CAPITAL LETTER TURNED A
+2C70          ; Obsolete                       # 5.2        LATIN CAPITAL LETTER TURNED ALPHA
+2C71..2C73    ; Obsolete                       # 5.1    [3] LATIN SMALL LETTER V WITH RIGHT HOOK..LATIN SMALL LETTER W WITH HOOK
+2C74..2C76    ; Obsolete                       # 5.0    [3] LATIN SMALL LETTER V WITH CURL..LATIN SMALL LETTER HALF H
+2C7E..2C7F    ; Obsolete                       # 5.2    [2] LATIN CAPITAL LETTER S WITH SWASH TAIL..LATIN CAPITAL LETTER Z WITH SWASH TAIL
+2D00..2D25    ; Obsolete                       # 4.1   [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
+2DE0..2DFF    ; Obsolete                       # 5.1   [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
+312E          ; Obsolete                       # 10.0       BOPOMOFO LETTER O WITH DOT ABOVE
+A640..A65F    ; Obsolete                       # 5.1   [32] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER YN
+A660..A661    ; Obsolete                       # 6.0    [2] CYRILLIC CAPITAL LETTER REVERSED TSE..CYRILLIC SMALL LETTER REVERSED TSE
+A662..A66E    ; Obsolete                       # 5.1   [13] CYRILLIC CAPITAL LETTER SOFT DE..CYRILLIC LETTER MULTIOCULAR O
+A674..A67B    ; Obsolete                       # 6.1    [8] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC LETTER OMEGA
+A680..A697    ; Obsolete                       # 5.1   [24] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER SHWE
+A698..A69B    ; Obsolete                       # 7.0    [4] CYRILLIC CAPITAL LETTER DOUBLE O..CYRILLIC SMALL LETTER CROSSED O
+A69F          ; Obsolete                       # 6.1        COMBINING CYRILLIC LETTER IOTIFIED E
+A730..A76F    ; Obsolete                       # 5.1   [64] LATIN LETTER SMALL CAPITAL F..LATIN SMALL LETTER CON
+A771..A787    ; Obsolete                       # 5.1   [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
+A790..A791    ; Obsolete                       # 6.0    [2] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER N WITH DESCENDER
+A794..A79F    ; Obsolete                       # 7.0   [12] LATIN SMALL LETTER C WITH PALATAL HOOK..LATIN SMALL LETTER VOLAPUK UE
+A7A0..A7A9    ; Obsolete                       # 6.0   [10] LATIN CAPITAL LETTER G WITH OBLIQUE STROKE..LATIN SMALL LETTER S WITH OBLIQUE STROKE
+A7AB..A7AD    ; Obsolete                       # 7.0    [3] LATIN CAPITAL LETTER REVERSED OPEN E..LATIN CAPITAL LETTER L WITH BELT
+A7B0..A7B1    ; Obsolete                       # 7.0    [2] LATIN CAPITAL LETTER TURNED K..LATIN CAPITAL LETTER TURNED T
+A7F5..A7F6    ; Obsolete                       # 13.0   [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H
+A7F7          ; Obsolete                       # 7.0        LATIN EPIGRAPHIC LETTER SIDEWAYS I
+A7FB..A7FF    ; Obsolete                       # 5.1    [5] LATIN EPIGRAPHIC LETTER REVERSED F..LATIN EPIGRAPHIC LETTER ARCHAIC M
+A8E0..A8F7    ; Obsolete                       # 5.2   [24] COMBINING DEVANAGARI DIGIT ZERO..DEVANAGARI SIGN CANDRABINDU AVAGRAHA
+A8FB          ; Obsolete                       # 5.2        DEVANAGARI HEADSTROKE
+A8FE..A8FF    ; Obsolete                       # 11.0   [2] DEVANAGARI LETTER AY..DEVANAGARI VOWEL SIGN AY
+A960..A97C    ; Obsolete                       # 5.2   [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH
+A9E0..A9E6    ; Obsolete                       # 7.0    [7] MYANMAR LETTER SHAN GHA..MYANMAR MODIFIER LETTER SHAN REDUPLICATION
+AB30..AB5A    ; Obsolete                       # 7.0   [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
+AB64..AB65    ; Obsolete                       # 7.0    [2] LATIN SMALL LETTER INVERTED ALPHA..GREEK LETTER SMALL CAPITAL OMEGA
+D7B0..D7C6    ; Obsolete                       # 5.2   [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E
+D7CB..D7FB    ; Obsolete                       # 5.2   [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH
+10140..10174  ; Obsolete                       # 4.1   [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS
+101FD         ; Obsolete                       # 5.1        PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE
+102E0         ; Obsolete                       # 7.0        COPTIC EPACT THOUSANDS MARK
+16FE3         ; Obsolete                       # 12.0       OLD CHINESE ITERATION MARK
+1B000..1B001  ; Obsolete                       # 6.0    [2] KATAKANA LETTER ARCHAIC E..HIRAGANA LETTER ARCHAIC YE
+1B002..1B11E  ; Obsolete                       # 10.0 [285] HENTAIGANA LETTER A-1..HENTAIGANA LETTER N-MU-MO-2
+
+# Total code points: 1325
+
+#      Identifier_Type:        Obsolete Not_XID
+
+0482          ; Obsolete Not_XID               # 1.1        CYRILLIC THOUSANDS SIGN
+0488..0489    ; Obsolete Not_XID               # 3.0    [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN
+05C6          ; Obsolete Not_XID               # 4.1        HEBREW PUNCTUATION NUN HAFUKHA
+17D8          ; Obsolete Not_XID               # 3.0        KHMER SIGN BEYYAL
+1CD3          ; Obsolete Not_XID               # 5.2        VEDIC SIGN NIHSHVASA
+2056          ; Obsolete Not_XID               # 4.1        THREE DOT PUNCTUATION
+2058..205E    ; Obsolete Not_XID               # 4.1    [7] FOUR DOT PUNCTUATION..VERTICAL FOUR DOTS
+2127          ; Obsolete Not_XID               # 1.1        INVERTED OHM SIGN
+214F          ; Obsolete Not_XID               # 5.1        SYMBOL FOR SAMARITAN SOURCE
+2E0E..2E16    ; Obsolete Not_XID               # 4.1    [9] EDITORIAL CORONIS..DOTTED RIGHT-POINTING ANGLE
+2E2A..2E30    ; Obsolete Not_XID               # 5.1    [7] TWO DOTS OVER ONE DOT PUNCTUATION..RING POINT
+2E31          ; Obsolete Not_XID               # 5.2        WORD SEPARATOR MIDDLE DOT
+2E32          ; Obsolete Not_XID               # 6.1        TURNED COMMA
+2E35          ; Obsolete Not_XID               # 6.1        TURNED SEMICOLON
+2E39          ; Obsolete Not_XID               # 6.1        TOP HALF SECTION SIGN
+301E          ; Obsolete Not_XID               # 1.1        DOUBLE PRIME QUOTATION MARK
+A670..A673    ; Obsolete Not_XID               # 5.1    [4] COMBINING CYRILLIC TEN MILLIONS SIGN..SLAVONIC ASTERISK
+A700..A707    ; Obsolete Not_XID               # 4.1    [8] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER CHINESE TONE YANG RU
+A8F8..A8FA    ; Obsolete Not_XID               # 5.2    [3] DEVANAGARI SIGN PUSHPIKA..DEVANAGARI CARET
+101D0..101FC  ; Obsolete Not_XID               # 5.1   [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND
+102E1..102FB  ; Obsolete Not_XID               # 7.0   [27] COPTIC EPACT DIGIT ONE..COPTIC EPACT NUMBER NINE HUNDRED
+1D200..1D241  ; Obsolete Not_XID               # 4.1   [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54
+1D245         ; Obsolete Not_XID               # 4.1        GREEK MUSICAL LEIMMA
+
+# Total code points: 191
+
+#      Identifier_Type:        Not_XID
+
+0009..000D    ; Not_XID                        # 1.1    [5] <control-0009>..<control-000D>
+0020..0026    ; Not_XID                        # 1.1    [7] SPACE..AMPERSAND
+0028..002C    ; Not_XID                        # 1.1    [5] LEFT PARENTHESIS..COMMA
+002F          ; Not_XID                        # 1.1        SOLIDUS
+003B..0040    ; Not_XID                        # 1.1    [6] SEMICOLON..COMMERCIAL AT
+005B..005E    ; Not_XID                        # 1.1    [4] LEFT SQUARE BRACKET..CIRCUMFLEX ACCENT
+0060          ; Not_XID                        # 1.1        GRAVE ACCENT
+007B..007E    ; Not_XID                        # 1.1    [4] LEFT CURLY BRACKET..TILDE
+0085          ; Not_XID                        # 1.1        <control-0085>
+00A1..00A7    ; Not_XID                        # 1.1    [7] INVERTED EXCLAMATION MARK..SECTION SIGN
+00A9          ; Not_XID                        # 1.1        COPYRIGHT SIGN
+00AB..00AC    ; Not_XID                        # 1.1    [2] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK..NOT SIGN
+00AE          ; Not_XID                        # 1.1        REGISTERED SIGN
+00B0..00B1    ; Not_XID                        # 1.1    [2] DEGREE SIGN..PLUS-MINUS SIGN
+00B6          ; Not_XID                        # 1.1        PILCROW SIGN
+00BB          ; Not_XID                        # 1.1        RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+00BF          ; Not_XID                        # 1.1        INVERTED QUESTION MARK
+00D7          ; Not_XID                        # 1.1        MULTIPLICATION SIGN
+00F7          ; Not_XID                        # 1.1        DIVISION SIGN
+02C2..02C5    ; Not_XID                        # 1.1    [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD
+02D2..02D7    ; Not_XID                        # 1.1    [6] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER MINUS SIGN
+02DE          ; Not_XID                        # 1.1        MODIFIER LETTER RHOTIC HOOK
+02DF          ; Not_XID                        # 3.0        MODIFIER LETTER CROSS ACCENT
+02E5..02E9    ; Not_XID                        # 1.1    [5] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER EXTRA-LOW TONE BAR
+02EA..02EB    ; Not_XID                        # 3.0    [2] MODIFIER LETTER YIN DEPARTING TONE MARK..MODIFIER LETTER YANG DEPARTING TONE MARK
+02ED          ; Not_XID                        # 3.0        MODIFIER LETTER UNASPIRATED
+02EF..02FF    ; Not_XID                        # 4.0   [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW
+03F6          ; Not_XID                        # 3.2        GREEK REVERSED LUNATE EPSILON SYMBOL
+055A..055F    ; Not_XID                        # 1.1    [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK
+0589          ; Not_XID                        # 1.1        ARMENIAN FULL STOP
+058D..058E    ; Not_XID                        # 7.0    [2] RIGHT-FACING ARMENIAN ETERNITY SIGN..LEFT-FACING ARMENIAN ETERNITY SIGN
+058F          ; Not_XID                        # 6.1        ARMENIAN DRAM SIGN
+05BE          ; Not_XID                        # 1.1        HEBREW PUNCTUATION MAQAF
+05C0          ; Not_XID                        # 1.1        HEBREW PUNCTUATION PASEQ
+05C3          ; Not_XID                        # 1.1        HEBREW PUNCTUATION SOF PASUQ
+0600..0603    ; Not_XID                        # 4.0    [4] ARABIC NUMBER SIGN..ARABIC SIGN SAFHA
+0604          ; Not_XID                        # 6.1        ARABIC SIGN SAMVAT
+0605          ; Not_XID                        # 7.0        ARABIC NUMBER MARK ABOVE
+0606..060A    ; Not_XID                        # 5.1    [5] ARABIC-INDIC CUBE ROOT..ARABIC-INDIC PER TEN THOUSAND SIGN
+060B          ; Not_XID                        # 4.1        AFGHANI SIGN
+060C          ; Not_XID                        # 1.1        ARABIC COMMA
+060D..060F    ; Not_XID                        # 4.0    [3] ARABIC DATE SEPARATOR..ARABIC SIGN MISRA
+061B          ; Not_XID                        # 1.1        ARABIC SEMICOLON
+061E          ; Not_XID                        # 4.1        ARABIC TRIPLE DOT PUNCTUATION MARK
+061F          ; Not_XID                        # 1.1        ARABIC QUESTION MARK
+066A..066D    ; Not_XID                        # 1.1    [4] ARABIC PERCENT SIGN..ARABIC FIVE POINTED STAR
+06D4          ; Not_XID                        # 1.1        ARABIC FULL STOP
+06DD          ; Not_XID                        # 1.1        ARABIC END OF AYAH
+06DE          ; Not_XID                        # 1.1        ARABIC START OF RUB EL HIZB
+06E9          ; Not_XID                        # 1.1        ARABIC PLACE OF SAJDAH
+08E2          ; Not_XID                        # 9.0        ARABIC DISPUTED END OF AYAH
+0964..0965    ; Not_XID                        # 1.1    [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA
+0970          ; Not_XID                        # 1.1        DEVANAGARI ABBREVIATION SIGN
+09F2..09FA    ; Not_XID                        # 1.1    [9] BENGALI RUPEE MARK..BENGALI ISSHAR
+09FB          ; Not_XID                        # 5.2        BENGALI GANDA MARK
+09FD          ; Not_XID                        # 10.0       BENGALI ABBREVIATION SIGN
+0A76          ; Not_XID                        # 11.0       GURMUKHI ABBREVIATION SIGN
+0AF0          ; Not_XID                        # 6.1        GUJARATI ABBREVIATION SIGN
+0AF1          ; Not_XID                        # 4.0        GUJARATI RUPEE SIGN
+0B70          ; Not_XID                        # 1.1        ORIYA ISSHAR
+0B72..0B77    ; Not_XID                        # 6.0    [6] ORIYA FRACTION ONE QUARTER..ORIYA FRACTION THREE SIXTEENTHS
+0BF0..0BF2    ; Not_XID                        # 1.1    [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND
+0BF3..0BFA    ; Not_XID                        # 4.0    [8] TAMIL DAY SIGN..TAMIL NUMBER SIGN
+0C77          ; Not_XID                        # 12.0       TELUGU SIGN SIDDHAM
+0C78..0C7F    ; Not_XID                        # 5.1    [8] TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR..TELUGU SIGN TUUMU
+0C84          ; Not_XID                        # 11.0       KANNADA SIGN SIDDHAM
+0D4F          ; Not_XID                        # 9.0        MALAYALAM SIGN PARA
+0D58..0D5E    ; Not_XID                        # 9.0    [7] MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH..MALAYALAM FRACTION ONE FIFTH
+0D70..0D75    ; Not_XID                        # 5.1    [6] MALAYALAM NUMBER TEN..MALAYALAM FRACTION THREE QUARTERS
+0D76..0D78    ; Not_XID                        # 9.0    [3] MALAYALAM FRACTION ONE SIXTEENTH..MALAYALAM FRACTION THREE SIXTEENTHS
+0D79          ; Not_XID                        # 5.1        MALAYALAM DATE MARK
+0DF4          ; Not_XID                        # 3.0        SINHALA PUNCTUATION KUNDDALIYA
+0E3F          ; Not_XID                        # 1.1        THAI CURRENCY SYMBOL BAHT
+0E4F          ; Not_XID                        # 1.1        THAI CHARACTER FONGMAN
+0E5A..0E5B    ; Not_XID                        # 1.1    [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT
+0F01..0F0A    ; Not_XID                        # 2.0   [10] TIBETAN MARK GTER YIG MGO TRUNCATED A..TIBETAN MARK BKA- SHOG YIG MGO
+0F0D..0F17    ; Not_XID                        # 2.0   [11] TIBETAN MARK SHAD..TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS
+0F1A..0F1F    ; Not_XID                        # 2.0    [6] TIBETAN SIGN RDEL DKAR GCIG..TIBETAN SIGN RDEL DKAR RDEL NAG
+0F2A..0F34    ; Not_XID                        # 2.0   [11] TIBETAN DIGIT HALF ONE..TIBETAN MARK BSDUS RTAGS
+0F36          ; Not_XID                        # 2.0        TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN
+0F38          ; Not_XID                        # 2.0        TIBETAN MARK CHE MGO
+0F3A..0F3D    ; Not_XID                        # 2.0    [4] TIBETAN MARK GUG RTAGS GYON..TIBETAN MARK ANG KHANG GYAS
+0F85          ; Not_XID                        # 2.0        TIBETAN MARK PALUTA
+0FBE..0FC5    ; Not_XID                        # 3.0    [8] TIBETAN KU RU KHA..TIBETAN SYMBOL RDO RJE
+0FC7..0FCC    ; Not_XID                        # 3.0    [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL
+0FCE          ; Not_XID                        # 5.1        TIBETAN SIGN RDEL NAG RDEL DKAR
+0FCF          ; Not_XID                        # 3.0        TIBETAN SIGN RDEL NAG GSUM
+0FD0..0FD1    ; Not_XID                        # 4.1    [2] TIBETAN MARK BSKA- SHOG GI MGO RGYAN..TIBETAN MARK MNYAM YIG GI MGO RGYAN
+0FD2..0FD4    ; Not_XID                        # 5.1    [3] TIBETAN MARK NYIS TSHEG..TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA
+0FD5..0FD8    ; Not_XID                        # 5.2    [4] RIGHT-FACING SVASTI SIGN..LEFT-FACING SVASTI SIGN WITH DOTS
+0FD9..0FDA    ; Not_XID                        # 6.0    [2] TIBETAN MARK LEADING MCHAN RTAGS..TIBETAN MARK TRAILING MCHAN RTAGS
+104A..104F    ; Not_XID                        # 3.0    [6] MYANMAR SIGN LITTLE SECTION..MYANMAR SYMBOL GENITIVE
+109E..109F    ; Not_XID                        # 5.1    [2] MYANMAR SYMBOL SHAN ONE..MYANMAR SYMBOL SHAN EXCLAMATION
+10FB          ; Not_XID                        # 1.1        GEORGIAN PARAGRAPH SEPARATOR
+1360          ; Not_XID                        # 4.1        ETHIOPIC SECTION MARK
+1361..1368    ; Not_XID                        # 3.0    [8] ETHIOPIC WORDSPACE..ETHIOPIC PARAGRAPH SEPARATOR
+1372..137C    ; Not_XID                        # 3.0   [11] ETHIOPIC NUMBER TEN..ETHIOPIC NUMBER TEN THOUSAND
+1390..1399    ; Not_XID                        # 4.1   [10] ETHIOPIC TONAL MARK YIZET..ETHIOPIC TONAL MARK KURT
+16EB..16ED    ; Not_XID                        # 3.0    [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION
+17D4..17D6    ; Not_XID                        # 3.0    [3] KHMER SIGN KHAN..KHMER SIGN CAMNUC PII KUUH
+17D9..17DB    ; Not_XID                        # 3.0    [3] KHMER SIGN PHNAEK MUAN..KHMER CURRENCY SYMBOL RIEL
+17F0..17F9    ; Not_XID                        # 4.0   [10] KHMER SYMBOL LEK ATTAK SON..KHMER SYMBOL LEK ATTAK PRAM-BUON
+19E0..19FF    ; Not_XID                        # 4.0   [32] KHMER SYMBOL PATHAMASAT..KHMER SYMBOL DAP-PRAM ROC
+1ABE          ; Not_XID                        # 7.0        COMBINING PARENTHESES OVERLAY
+2012..2016    ; Not_XID                        # 1.1    [5] FIGURE DASH..DOUBLE VERTICAL LINE
+2018          ; Not_XID                        # 1.1        LEFT SINGLE QUOTATION MARK
+201A..2023    ; Not_XID                        # 1.1   [10] SINGLE LOW-9 QUOTATION MARK..TRIANGULAR BULLET
+2028..2029    ; Not_XID                        # 1.1    [2] LINE SEPARATOR..PARAGRAPH SEPARATOR
+2030..2032    ; Not_XID                        # 1.1    [3] PER MILLE SIGN..PRIME
+2035          ; Not_XID                        # 1.1        REVERSED PRIME
+2038..203B    ; Not_XID                        # 1.1    [4] CARET..REFERENCE MARK
+203D          ; Not_XID                        # 1.1        INTERROBANG
+2041..2046    ; Not_XID                        # 1.1    [6] CARET INSERTION POINT..RIGHT SQUARE BRACKET WITH QUILL
+204A..204D    ; Not_XID                        # 3.0    [4] TIRONIAN SIGN ET..BLACK RIGHTWARDS BULLET
+204E..2052    ; Not_XID                        # 3.2    [5] LOW ASTERISK..COMMERCIAL MINUS SIGN
+2053          ; Not_XID                        # 4.0        SWUNG DASH
+2055          ; Not_XID                        # 4.1        FLOWER PUNCTUATION MARK
+20A0..20A7    ; Not_XID                        # 1.1    [8] EURO-CURRENCY SIGN..PESETA SIGN
+20A9..20AA    ; Not_XID                        # 1.1    [2] WON SIGN..NEW SHEQEL SIGN
+20AB          ; Not_XID                        # 2.0        DONG SIGN
+20AC          ; Not_XID                        # 2.1        EURO SIGN
+20AD..20AF    ; Not_XID                        # 3.0    [3] KIP SIGN..DRACHMA SIGN
+20B0..20B1    ; Not_XID                        # 3.2    [2] GERMAN PENNY SIGN..PESO SIGN
+20B2..20B5    ; Not_XID                        # 4.1    [4] GUARANI SIGN..CEDI SIGN
+20B6..20B8    ; Not_XID                        # 5.2    [3] LIVRE TOURNOIS SIGN..TENGE SIGN
+20B9          ; Not_XID                        # 6.0        INDIAN RUPEE SIGN
+20BA          ; Not_XID                        # 6.2        TURKISH LIRA SIGN
+20BB..20BD    ; Not_XID                        # 7.0    [3] NORDIC MARK SIGN..RUBLE SIGN
+20BE          ; Not_XID                        # 8.0        LARI SIGN
+20BF          ; Not_XID                        # 10.0       BITCOIN SIGN
+2104          ; Not_XID                        # 1.1        CENTRE LINE SYMBOL
+2108          ; Not_XID                        # 1.1        SCRUPLE
+2114          ; Not_XID                        # 1.1        L B BAR SYMBOL
+2117          ; Not_XID                        # 1.1        SOUND RECORDING COPYRIGHT
+211E..211F    ; Not_XID                        # 1.1    [2] PRESCRIPTION TAKE..RESPONSE
+2123          ; Not_XID                        # 1.1        VERSICLE
+2125          ; Not_XID                        # 1.1        OUNCE SIGN
+2129          ; Not_XID                        # 1.1        TURNED GREEK SMALL LETTER IOTA
+213A          ; Not_XID                        # 3.0        ROTATED CAPITAL Q
+2141..2144    ; Not_XID                        # 3.2    [4] TURNED SANS-SERIF CAPITAL G..TURNED SANS-SERIF CAPITAL Y
+214A..214B    ; Not_XID                        # 3.2    [2] PROPERTY LINE..TURNED AMPERSAND
+214C          ; Not_XID                        # 4.1        PER SIGN
+214D          ; Not_XID                        # 5.0        AKTIESELSKAB
+2190..21EA    ; Not_XID                        # 1.1   [91] LEFTWARDS ARROW..UPWARDS WHITE ARROW FROM BAR
+21EB..21F3    ; Not_XID                        # 3.0    [9] UPWARDS WHITE ARROW ON PEDESTAL..UP DOWN WHITE ARROW
+21F4..21FF    ; Not_XID                        # 3.2   [12] RIGHT ARROW WITH SMALL CIRCLE..LEFT RIGHT OPEN-HEADED ARROW
+2200..222B    ; Not_XID                        # 1.1   [44] FOR ALL..INTEGRAL
+222E          ; Not_XID                        # 1.1        CONTOUR INTEGRAL
+2231..22F1    ; Not_XID                        # 1.1  [193] CLOCKWISE INTEGRAL..DOWN RIGHT DIAGONAL ELLIPSIS
+22F2..22FF    ; Not_XID                        # 3.2   [14] ELEMENT OF WITH LONG HORIZONTAL STROKE..Z NOTATION BAG MEMBERSHIP
+2300          ; Not_XID                        # 1.1        DIAMETER SIGN
+2301          ; Not_XID                        # 3.0        ELECTRIC ARROW
+2302..2328    ; Not_XID                        # 1.1   [39] HOUSE..KEYBOARD
+232B..237A    ; Not_XID                        # 1.1   [80] ERASE TO THE LEFT..APL FUNCTIONAL SYMBOL ALPHA
+237B          ; Not_XID                        # 3.0        NOT CHECK MARK
+237C          ; Not_XID                        # 3.2        RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW
+237D..239A    ; Not_XID                        # 3.0   [30] SHOULDERED OPEN BOX..CLEAR SCREEN SYMBOL
+239B..23CE    ; Not_XID                        # 3.2   [52] LEFT PARENTHESIS UPPER HOOK..RETURN SYMBOL
+23CF..23D0    ; Not_XID                        # 4.0    [2] EJECT SYMBOL..VERTICAL LINE EXTENSION
+23D1..23DB    ; Not_XID                        # 4.1   [11] METRICAL BREVE..FUSE
+23DC..23E7    ; Not_XID                        # 5.0   [12] TOP PARENTHESIS..ELECTRICAL INTERSECTION
+23E8          ; Not_XID                        # 5.2        DECIMAL EXPONENT SYMBOL
+23E9..23F3    ; Not_XID                        # 6.0   [11] BLACK RIGHT-POINTING DOUBLE TRIANGLE..HOURGLASS WITH FLOWING SAND
+23F4..23FA    ; Not_XID                        # 7.0    [7] BLACK MEDIUM LEFT-POINTING TRIANGLE..BLACK CIRCLE FOR RECORD
+23FB..23FE    ; Not_XID                        # 9.0    [4] POWER SYMBOL..POWER SLEEP SYMBOL
+23FF          ; Not_XID                        # 10.0       OBSERVER EYE SYMBOL
+2400..2424    ; Not_XID                        # 1.1   [37] SYMBOL FOR NULL..SYMBOL FOR NEWLINE
+2425..2426    ; Not_XID                        # 3.0    [2] SYMBOL FOR DELETE FORM TWO..SYMBOL FOR SUBSTITUTE FORM TWO
+2440..244A    ; Not_XID                        # 1.1   [11] OCR HOOK..OCR DOUBLE BACKSLASH
+2500..2595    ; Not_XID                        # 1.1  [150] BOX DRAWINGS LIGHT HORIZONTAL..RIGHT ONE EIGHTH BLOCK
+2596..259F    ; Not_XID                        # 3.2   [10] QUADRANT LOWER LEFT..QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT
+25A0..25EF    ; Not_XID                        # 1.1   [80] BLACK SQUARE..LARGE CIRCLE
+25F0..25F7    ; Not_XID                        # 3.0    [8] WHITE SQUARE WITH UPPER LEFT QUADRANT..WHITE CIRCLE WITH UPPER RIGHT QUADRANT
+25F8..25FF    ; Not_XID                        # 3.2    [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE
+2600..2613    ; Not_XID                        # 1.1   [20] BLACK SUN WITH RAYS..SALTIRE
+2614..2615    ; Not_XID                        # 4.0    [2] UMBRELLA WITH RAIN DROPS..HOT BEVERAGE
+2616..2617    ; Not_XID                        # 3.2    [2] WHITE SHOGI PIECE..BLACK SHOGI PIECE
+2618          ; Not_XID                        # 4.1        SHAMROCK
+2619          ; Not_XID                        # 3.0        REVERSED ROTATED FLORAL HEART BULLET
+261A..266F    ; Not_XID                        # 1.1   [86] BLACK LEFT POINTING INDEX..MUSIC SHARP SIGN
+2670..2671    ; Not_XID                        # 3.0    [2] WEST SYRIAC CROSS..EAST SYRIAC CROSS
+2672..267D    ; Not_XID                        # 3.2   [12] UNIVERSAL RECYCLING SYMBOL..PARTIALLY-RECYCLED PAPER SYMBOL
+267E..267F    ; Not_XID                        # 4.1    [2] PERMANENT PAPER SIGN..WHEELCHAIR SYMBOL
+2680..2689    ; Not_XID                        # 3.2   [10] DIE FACE-1..BLACK CIRCLE WITH TWO WHITE DOTS
+268A..2691    ; Not_XID                        # 4.0    [8] MONOGRAM FOR YANG..BLACK FLAG
+2692..269C    ; Not_XID                        # 4.1   [11] HAMMER AND PICK..FLEUR-DE-LIS
+269D          ; Not_XID                        # 5.1        OUTLINED WHITE STAR
+269E..269F    ; Not_XID                        # 5.2    [2] THREE LINES CONVERGING RIGHT..THREE LINES CONVERGING LEFT
+26A0..26A1    ; Not_XID                        # 4.0    [2] WARNING SIGN..HIGH VOLTAGE SIGN
+26A2..26B1    ; Not_XID                        # 4.1   [16] DOUBLED FEMALE SIGN..FUNERAL URN
+26B2          ; Not_XID                        # 5.0        NEUTER
+26B3..26BC    ; Not_XID                        # 5.1   [10] CERES..SESQUIQUADRATE
+26BD..26BF    ; Not_XID                        # 5.2    [3] SOCCER BALL..SQUARED KEY
+26C0..26C3    ; Not_XID                        # 5.1    [4] WHITE DRAUGHTS MAN..BLACK DRAUGHTS KING
+26C4..26CD    ; Not_XID                        # 5.2   [10] SNOWMAN WITHOUT SNOW..DISABLED CAR
+26CE          ; Not_XID                        # 6.0        OPHIUCHUS
+26CF..26E1    ; Not_XID                        # 5.2   [19] PICK..RESTRICTED LEFT ENTRY-2
+26E2          ; Not_XID                        # 6.0        ASTRONOMICAL SYMBOL FOR URANUS
+26E3          ; Not_XID                        # 5.2        HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE
+26E4..26E7    ; Not_XID                        # 6.0    [4] PENTAGRAM..INVERTED PENTAGRAM
+26E8..26FF    ; Not_XID                        # 5.2   [24] BLACK CROSS ON SHIELD..WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE
+2700          ; Not_XID                        # 7.0        BLACK SAFETY SCISSORS
+2701..2704    ; Not_XID                        # 1.1    [4] UPPER BLADE SCISSORS..WHITE SCISSORS
+2705          ; Not_XID                        # 6.0        WHITE HEAVY CHECK MARK
+2706..2709    ; Not_XID                        # 1.1    [4] TELEPHONE LOCATION SIGN..ENVELOPE
+270A..270B    ; Not_XID                        # 6.0    [2] RAISED FIST..RAISED HAND
+270C..2727    ; Not_XID                        # 1.1   [28] VICTORY HAND..WHITE FOUR POINTED STAR
+2728          ; Not_XID                        # 6.0        SPARKLES
+2729..274B    ; Not_XID                        # 1.1   [35] STRESS OUTLINED WHITE STAR..HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
+274C          ; Not_XID                        # 6.0        CROSS MARK
+274D          ; Not_XID                        # 1.1        SHADOWED WHITE CIRCLE
+274E          ; Not_XID                        # 6.0        NEGATIVE SQUARED CROSS MARK
+274F..2752    ; Not_XID                        # 1.1    [4] LOWER RIGHT DROP-SHADOWED WHITE SQUARE..UPPER RIGHT SHADOWED WHITE SQUARE
+2753..2755    ; Not_XID                        # 6.0    [3] BLACK QUESTION MARK ORNAMENT..WHITE EXCLAMATION MARK ORNAMENT
+2756          ; Not_XID                        # 1.1        BLACK DIAMOND MINUS WHITE X
+2757          ; Not_XID                        # 5.2        HEAVY EXCLAMATION MARK SYMBOL
+2758..275E    ; Not_XID                        # 1.1    [7] LIGHT VERTICAL BAR..HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT
+275F..2760    ; Not_XID                        # 6.0    [2] HEAVY LOW SINGLE COMMA QUOTATION MARK ORNAMENT..HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT
+2761..2767    ; Not_XID                        # 1.1    [7] CURVED STEM PARAGRAPH SIGN ORNAMENT..ROTATED FLORAL HEART BULLET
+2768..2775    ; Not_XID                        # 3.2   [14] MEDIUM LEFT PARENTHESIS ORNAMENT..MEDIUM RIGHT CURLY BRACKET ORNAMENT
+2776..2794    ; Not_XID                        # 1.1   [31] DINGBAT NEGATIVE CIRCLED DIGIT ONE..HEAVY WIDE-HEADED RIGHTWARDS ARROW
+2795..2797    ; Not_XID                        # 6.0    [3] HEAVY PLUS SIGN..HEAVY DIVISION SIGN
+2798..27AF    ; Not_XID                        # 1.1   [24] HEAVY SOUTH EAST ARROW..NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+27B0          ; Not_XID                        # 6.0        CURLY LOOP
+27B1..27BE    ; Not_XID                        # 1.1   [14] NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW..OPEN-OUTLINED RIGHTWARDS ARROW
+27BF          ; Not_XID                        # 6.0        DOUBLE CURLY LOOP
+27C0..27C6    ; Not_XID                        # 4.1    [7] THREE DIMENSIONAL ANGLE..RIGHT S-SHAPED BAG DELIMITER
+27C7..27CA    ; Not_XID                        # 5.0    [4] OR WITH DOT INSIDE..VERTICAL BAR WITH HORIZONTAL STROKE
+27CB          ; Not_XID                        # 6.1        MATHEMATICAL RISING DIAGONAL
+27CC          ; Not_XID                        # 5.1        LONG DIVISION
+27CD          ; Not_XID                        # 6.1        MATHEMATICAL FALLING DIAGONAL
+27CE..27CF    ; Not_XID                        # 6.0    [2] SQUARED LOGICAL AND..SQUARED LOGICAL OR
+27D0..27EB    ; Not_XID                        # 3.2   [28] WHITE DIAMOND WITH CENTRED DOT..MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+27EC..27EF    ; Not_XID                        # 5.1    [4] MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET..MATHEMATICAL RIGHT FLATTENED PARENTHESIS
+27F0..27FF    ; Not_XID                        # 3.2   [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW
+2900..2A0B    ; Not_XID                        # 3.2  [268] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..SUMMATION WITH INTEGRAL
+2A0D..2A73    ; Not_XID                        # 3.2  [103] FINITE PART INTEGRAL..EQUALS SIGN ABOVE TILDE OPERATOR
+2A77..2ADB    ; Not_XID                        # 3.2  [101] EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW..TRANSVERSAL INTERSECTION
+2ADD..2AFF    ; Not_XID                        # 3.2   [35] NONFORKING..N-ARY WHITE VERTICAL BAR
+2B00..2B0D    ; Not_XID                        # 4.0   [14] NORTH EAST WHITE ARROW..UP DOWN BLACK ARROW
+2B0E..2B13    ; Not_XID                        # 4.1    [6] RIGHTWARDS ARROW WITH TIP DOWNWARDS..SQUARE WITH BOTTOM HALF BLACK
+2B14..2B1A    ; Not_XID                        # 5.0    [7] SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK..DOTTED SQUARE
+2B1B..2B1F    ; Not_XID                        # 5.1    [5] BLACK LARGE SQUARE..BLACK PENTAGON
+2B20..2B23    ; Not_XID                        # 5.0    [4] WHITE PENTAGON..HORIZONTAL BLACK HEXAGON
+2B24..2B4C    ; Not_XID                        # 5.1   [41] BLACK LARGE CIRCLE..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
+2B4D..2B4F    ; Not_XID                        # 7.0    [3] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..SHORT BACKSLANTED SOUTH ARROW
+2B50..2B54    ; Not_XID                        # 5.1    [5] WHITE MEDIUM STAR..WHITE RIGHT-POINTING PENTAGON
+2B55..2B59    ; Not_XID                        # 5.2    [5] HEAVY LARGE CIRCLE..HEAVY CIRCLED SALTIRE
+2B5A..2B73    ; Not_XID                        # 7.0   [26] SLANTED NORTH ARROW WITH HOOKED HEAD..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR
+2B76..2B95    ; Not_XID                        # 7.0   [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW
+2B97          ; Not_XID                        # 13.0       SYMBOL FOR TYPE A ELECTRONICS
+2B98..2BB9    ; Not_XID                        # 7.0   [34] THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD..UP ARROWHEAD IN A RECTANGLE BOX
+2BBA..2BBC    ; Not_XID                        # 11.0   [3] OVERLAPPING WHITE SQUARES..OVERLAPPING BLACK SQUARES
+2BBD..2BC8    ; Not_XID                        # 7.0   [12] BALLOT BOX WITH LIGHT X..BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED
+2BC9          ; Not_XID                        # 12.0       NEPTUNE FORM TWO
+2BCA..2BD1    ; Not_XID                        # 7.0    [8] TOP HALF BLACK CIRCLE..UNCERTAINTY SIGN
+2BD2          ; Not_XID                        # 10.0       GROUP MARK
+2BD3..2BEB    ; Not_XID                        # 11.0  [25] PLUTO FORM TWO..STAR WITH RIGHT HALF BLACK
+2BF0..2BFE    ; Not_XID                        # 11.0  [15] ERIS FORM ONE..REVERSED RIGHT ANGLE
+2BFF          ; Not_XID                        # 12.0       HELLSCHREIBER PAUSE SYMBOL
+2E17          ; Not_XID                        # 4.1        DOUBLE OBLIQUE HYPHEN
+2E18..2E1B    ; Not_XID                        # 5.1    [4] INVERTED INTERROBANG..TILDE WITH RING ABOVE
+2E1C..2E1D    ; Not_XID                        # 4.1    [2] LEFT LOW PARAPHRASE BRACKET..RIGHT LOW PARAPHRASE BRACKET
+2E1E..2E29    ; Not_XID                        # 5.1   [12] TILDE WITH DOT ABOVE..RIGHT DOUBLE PARENTHESIS
+2E33..2E34    ; Not_XID                        # 6.1    [2] RAISED DOT..RAISED COMMA
+2E36..2E38    ; Not_XID                        # 6.1    [3] DAGGER WITH LEFT GUARD..TURNED DAGGER
+2E3A..2E3B    ; Not_XID                        # 6.1    [2] TWO-EM DASH..THREE-EM DASH
+2E3C..2E42    ; Not_XID                        # 7.0    [7] STENOGRAPHIC FULL STOP..DOUBLE LOW-REVERSED-9 QUOTATION MARK
+2E43..2E44    ; Not_XID                        # 9.0    [2] DASH WITH LEFT UPTURN..DOUBLE SUSPENSION MARK
+2E45..2E49    ; Not_XID                        # 10.0   [5] INVERTED LOW KAVYKA..DOUBLE STACKED COMMA
+2E4A..2E4E    ; Not_XID                        # 11.0   [5] DOTTED SOLIDUS..PUNCTUS ELEVATUS MARK
+2E4F          ; Not_XID                        # 12.0       CORNISH VERSE DIVIDER
+2E50..2E52    ; Not_XID                        # 13.0   [3] CROSS PATTY WITH RIGHT CROSSBAR..TIRONIAN SIGN CAPITAL ET
+2E80..2E99    ; Not_XID                        # 3.0   [26] CJK RADICAL REPEAT..CJK RADICAL RAP
+2E9B..2E9E    ; Not_XID                        # 3.0    [4] CJK RADICAL CHOKE..CJK RADICAL DEATH
+2EA0..2EF2    ; Not_XID                        # 3.0   [83] CJK RADICAL CIVILIAN..CJK RADICAL J-SIMPLIFIED TURTLE
+2FF0..2FFB    ; Not_XID                        # 3.0   [12] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
+3001..3004    ; Not_XID                        # 1.1    [4] IDEOGRAPHIC COMMA..JAPANESE INDUSTRIAL STANDARD SYMBOL
+3008..301D    ; Not_XID                        # 1.1   [22] LEFT ANGLE BRACKET..REVERSED DOUBLE PRIME QUOTATION MARK
+301F..3020    ; Not_XID                        # 1.1    [2] LOW DOUBLE PRIME QUOTATION MARK..POSTAL MARK FACE
+3030          ; Not_XID                        # 1.1        WAVY DASH
+3037          ; Not_XID                        # 1.1        IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
+303D          ; Not_XID                        # 3.2        PART ALTERNATION MARK
+303E          ; Not_XID                        # 3.0        IDEOGRAPHIC VARIATION INDICATOR
+303F          ; Not_XID                        # 1.1        IDEOGRAPHIC HALF FILL SPACE
+3190..3191    ; Not_XID                        # 1.1    [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK
+31C0..31CF    ; Not_XID                        # 4.1   [16] CJK STROKE T..CJK STROKE N
+31D0..31E3    ; Not_XID                        # 5.1   [20] CJK STROKE H..CJK STROKE Q
+3248..324F    ; Not_XID                        # 5.2    [8] CIRCLED NUMBER TEN ON BLACK SQUARE..CIRCLED NUMBER EIGHTY ON BLACK SQUARE
+A67E          ; Not_XID                        # 5.1        CYRILLIC KAVYKA
+A720..A721    ; Not_XID                        # 5.0    [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE
+A789..A78A    ; Not_XID                        # 5.1    [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN
+A830..A839    ; Not_XID                        # 5.2   [10] NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC QUANTITY MARK
+A92E          ; Not_XID                        # 5.1        KAYAH LI SIGN CWI
+AA77..AA79    ; Not_XID                        # 5.2    [3] MYANMAR SYMBOL AITON EXCLAMATION..MYANMAR SYMBOL AITON TWO
+AB5B          ; Not_XID                        # 7.0        MODIFIER BREVE WITH INVERTED BREVE
+AB6A..AB6B    ; Not_XID                        # 13.0   [2] MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK
+FFF9..FFFB    ; Not_XID                        # 3.0    [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR
+FFFC          ; Not_XID                        # 2.1        OBJECT REPLACEMENT CHARACTER
+FFFD          ; Not_XID                        # 1.1        REPLACEMENT CHARACTER
+10175..1018A  ; Not_XID                        # 4.1   [22] GREEK ONE HALF SIGN..GREEK ZERO SIGN
+1018B..1018C  ; Not_XID                        # 7.0    [2] GREEK ONE QUARTER SIGN..GREEK SINUSOID SIGN
+1018D..1018E  ; Not_XID                        # 9.0    [2] GREEK INDICTION SIGN..NOMISMA SIGN
+10190..1019B  ; Not_XID                        # 5.1   [12] ROMAN SEXTANS SIGN..ROMAN CENTURIAL SIGN
+1019C         ; Not_XID                        # 13.0       ASCIA SYMBOL
+101A0         ; Not_XID                        # 7.0        GREEK SYMBOL TAU RHO
+10E60..10E7E  ; Not_XID                        # 5.2   [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS
+111E1..111F4  ; Not_XID                        # 7.0   [20] SINHALA ARCHAIC DIGIT ONE..SINHALA ARCHAIC NUMBER ONE THOUSAND
+11FC0..11FF1  ; Not_XID                        # 12.0  [50] TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH..TAMIL SIGN VAKAIYARAA
+11FFF         ; Not_XID                        # 12.0       TAMIL PUNCTUATION END OF TEXT
+16FE2         ; Not_XID                        # 12.0       OLD CHINESE HOOK MARK
+1D2E0..1D2F3  ; Not_XID                        # 11.0  [20] MAYAN NUMERAL ZERO..MAYAN NUMERAL NINETEEN
+1D360..1D371  ; Not_XID                        # 5.0   [18] COUNTING ROD UNIT DIGIT ONE..COUNTING ROD TENS DIGIT NINE
+1D372..1D378  ; Not_XID                        # 11.0   [7] IDEOGRAPHIC TALLY MARK ONE..TALLY MARK FIVE
+1EC71..1ECB4  ; Not_XID                        # 11.0  [68] INDIC SIYAQ NUMBER ONE..INDIC SIYAQ ALTERNATE LAKH MARK
+1ED01..1ED3D  ; Not_XID                        # 12.0  [61] OTTOMAN SIYAQ NUMBER ONE..OTTOMAN SIYAQ FRACTION ONE SIXTH
+1EEF0..1EEF1  ; Not_XID                        # 6.1    [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL
+1F000..1F02B  ; Not_XID                        # 5.1   [44] MAHJONG TILE EAST WIND..MAHJONG TILE BACK
+1F030..1F093  ; Not_XID                        # 5.1  [100] DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06
+1F0A0..1F0AE  ; Not_XID                        # 6.0   [15] PLAYING CARD BACK..PLAYING CARD KING OF SPADES
+1F0B1..1F0BE  ; Not_XID                        # 6.0   [14] PLAYING CARD ACE OF HEARTS..PLAYING CARD KING OF HEARTS
+1F0BF         ; Not_XID                        # 7.0        PLAYING CARD RED JOKER
+1F0C1..1F0CF  ; Not_XID                        # 6.0   [15] PLAYING CARD ACE OF DIAMONDS..PLAYING CARD BLACK JOKER
+1F0D1..1F0DF  ; Not_XID                        # 6.0   [15] PLAYING CARD ACE OF CLUBS..PLAYING CARD WHITE JOKER
+1F0E0..1F0F5  ; Not_XID                        # 7.0   [22] PLAYING CARD FOOL..PLAYING CARD TRUMP-21
+1F10B..1F10C  ; Not_XID                        # 7.0    [2] DINGBAT CIRCLED SANS-SERIF DIGIT ZERO..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO
+1F10D..1F10F  ; Not_XID                        # 13.0   [3] CIRCLED ZERO WITH SLASH..CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH
+1F12F         ; Not_XID                        # 11.0       COPYLEFT SYMBOL
+1F150..1F156  ; Not_XID                        # 6.0    [7] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER G
+1F157         ; Not_XID                        # 5.2        NEGATIVE CIRCLED LATIN CAPITAL LETTER H
+1F158..1F15E  ; Not_XID                        # 6.0    [7] NEGATIVE CIRCLED LATIN CAPITAL LETTER I..NEGATIVE CIRCLED LATIN CAPITAL LETTER O
+1F15F         ; Not_XID                        # 5.2        NEGATIVE CIRCLED LATIN CAPITAL LETTER P
+1F160..1F169  ; Not_XID                        # 6.0   [10] NEGATIVE CIRCLED LATIN CAPITAL LETTER Q..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
+1F16D..1F16F  ; Not_XID                        # 13.0   [3] CIRCLED CC..CIRCLED HUMAN FIGURE
+1F170..1F178  ; Not_XID                        # 6.0    [9] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER I
+1F179         ; Not_XID                        # 5.2        NEGATIVE SQUARED LATIN CAPITAL LETTER J
+1F17A         ; Not_XID                        # 6.0        NEGATIVE SQUARED LATIN CAPITAL LETTER K
+1F17B..1F17C  ; Not_XID                        # 5.2    [2] NEGATIVE SQUARED LATIN CAPITAL LETTER L..NEGATIVE SQUARED LATIN CAPITAL LETTER M
+1F17D..1F17E  ; Not_XID                        # 6.0    [2] NEGATIVE SQUARED LATIN CAPITAL LETTER N..NEGATIVE SQUARED LATIN CAPITAL LETTER O
+1F17F         ; Not_XID                        # 5.2        NEGATIVE SQUARED LATIN CAPITAL LETTER P
+1F180..1F189  ; Not_XID                        # 6.0   [10] NEGATIVE SQUARED LATIN CAPITAL LETTER Q..NEGATIVE SQUARED LATIN CAPITAL LETTER Z
+1F18A..1F18D  ; Not_XID                        # 5.2    [4] CROSSED NEGATIVE SQUARED LATIN CAPITAL LETTER P..NEGATIVE SQUARED SA
+1F18E..1F18F  ; Not_XID                        # 6.0    [2] NEGATIVE SQUARED AB..NEGATIVE SQUARED WC
+1F191..1F19A  ; Not_XID                        # 6.0   [10] SQUARED CL..SQUARED VS
+1F19B..1F1AC  ; Not_XID                        # 9.0   [18] SQUARED THREE D..SQUARED VOD
+1F1AD         ; Not_XID                        # 13.0       MASK WORK SYMBOL
+1F1E6..1F1FF  ; Not_XID                        # 6.0   [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z
+1F260..1F265  ; Not_XID                        # 10.0   [6] ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI
+1F300..1F320  ; Not_XID                        # 6.0   [33] CYCLONE..SHOOTING STAR
+1F321..1F32C  ; Not_XID                        # 7.0   [12] THERMOMETER..WIND BLOWING FACE
+1F32D..1F32F  ; Not_XID                        # 8.0    [3] HOT DOG..BURRITO
+1F330..1F335  ; Not_XID                        # 6.0    [6] CHESTNUT..CACTUS
+1F336         ; Not_XID                        # 7.0        HOT PEPPER
+1F337..1F37C  ; Not_XID                        # 6.0   [70] TULIP..BABY BOTTLE
+1F37D         ; Not_XID                        # 7.0        FORK AND KNIFE WITH PLATE
+1F37E..1F37F  ; Not_XID                        # 8.0    [2] BOTTLE WITH POPPING CORK..POPCORN
+1F380..1F393  ; Not_XID                        # 6.0   [20] RIBBON..GRADUATION CAP
+1F394..1F39F  ; Not_XID                        # 7.0   [12] HEART WITH TIP ON THE LEFT..ADMISSION TICKETS
+1F3A0..1F3C4  ; Not_XID                        # 6.0   [37] CAROUSEL HORSE..SURFER
+1F3C5         ; Not_XID                        # 7.0        SPORTS MEDAL
+1F3C6..1F3CA  ; Not_XID                        # 6.0    [5] TROPHY..SWIMMER
+1F3CB..1F3CE  ; Not_XID                        # 7.0    [4] WEIGHT LIFTER..RACING CAR
+1F3CF..1F3D3  ; Not_XID                        # 8.0    [5] CRICKET BAT AND BALL..TABLE TENNIS PADDLE AND BALL
+1F3D4..1F3DF  ; Not_XID                        # 7.0   [12] SNOW CAPPED MOUNTAIN..STADIUM
+1F3E0..1F3F0  ; Not_XID                        # 6.0   [17] HOUSE BUILDING..EUROPEAN CASTLE
+1F3F1..1F3F7  ; Not_XID                        # 7.0    [7] WHITE PENNANT..LABEL
+1F3F8..1F3FF  ; Not_XID                        # 8.0    [8] BADMINTON RACQUET AND SHUTTLECOCK..EMOJI MODIFIER FITZPATRICK TYPE-6
+1F400..1F43E  ; Not_XID                        # 6.0   [63] RAT..PAW PRINTS
+1F43F         ; Not_XID                        # 7.0        CHIPMUNK
+1F440         ; Not_XID                        # 6.0        EYES
+1F441         ; Not_XID                        # 7.0        EYE
+1F442..1F4F7  ; Not_XID                        # 6.0  [182] EAR..CAMERA
+1F4F8         ; Not_XID                        # 7.0        CAMERA WITH FLASH
+1F4F9..1F4FC  ; Not_XID                        # 6.0    [4] VIDEO CAMERA..VIDEOCASSETTE
+1F4FD..1F4FE  ; Not_XID                        # 7.0    [2] FILM PROJECTOR..PORTABLE STEREO
+1F4FF         ; Not_XID                        # 8.0        PRAYER BEADS
+1F500..1F53D  ; Not_XID                        # 6.0   [62] TWISTED RIGHTWARDS ARROWS..DOWN-POINTING SMALL RED TRIANGLE
+1F53E..1F53F  ; Not_XID                        # 7.0    [2] LOWER RIGHT SHADOWED WHITE CIRCLE..UPPER RIGHT SHADOWED WHITE CIRCLE
+1F540..1F543  ; Not_XID                        # 6.1    [4] CIRCLED CROSS POMMEE..NOTCHED LEFT SEMICIRCLE WITH THREE DOTS
+1F544..1F54A  ; Not_XID                        # 7.0    [7] NOTCHED RIGHT SEMICIRCLE WITH THREE DOTS..DOVE OF PEACE
+1F54B..1F54E  ; Not_XID                        # 8.0    [4] KAABA..MENORAH WITH NINE BRANCHES
+1F550..1F567  ; Not_XID                        # 6.0   [24] CLOCK FACE ONE OCLOCK..CLOCK FACE TWELVE-THIRTY
+1F568..1F579  ; Not_XID                        # 7.0   [18] RIGHT SPEAKER..JOYSTICK
+1F57A         ; Not_XID                        # 9.0        MAN DANCING
+1F57B..1F5A3  ; Not_XID                        # 7.0   [41] LEFT HAND TELEPHONE RECEIVER..BLACK DOWN POINTING BACKHAND INDEX
+1F5A4         ; Not_XID                        # 9.0        BLACK HEART
+1F5A5..1F5FA  ; Not_XID                        # 7.0   [86] DESKTOP COMPUTER..WORLD MAP
+1F5FB..1F5FF  ; Not_XID                        # 6.0    [5] MOUNT FUJI..MOYAI
+1F600         ; Not_XID                        # 6.1        GRINNING FACE
+1F601..1F610  ; Not_XID                        # 6.0   [16] GRINNING FACE WITH SMILING EYES..NEUTRAL FACE
+1F611         ; Not_XID                        # 6.1        EXPRESSIONLESS FACE
+1F612..1F614  ; Not_XID                        # 6.0    [3] UNAMUSED FACE..PENSIVE FACE
+1F615         ; Not_XID                        # 6.1        CONFUSED FACE
+1F616         ; Not_XID                        # 6.0        CONFOUNDED FACE
+1F617         ; Not_XID                        # 6.1        KISSING FACE
+1F618         ; Not_XID                        # 6.0        FACE THROWING A KISS
+1F619         ; Not_XID                        # 6.1        KISSING FACE WITH SMILING EYES
+1F61A         ; Not_XID                        # 6.0        KISSING FACE WITH CLOSED EYES
+1F61B         ; Not_XID                        # 6.1        FACE WITH STUCK-OUT TONGUE
+1F61C..1F61E  ; Not_XID                        # 6.0    [3] FACE WITH STUCK-OUT TONGUE AND WINKING EYE..DISAPPOINTED FACE
+1F61F         ; Not_XID                        # 6.1        WORRIED FACE
+1F620..1F625  ; Not_XID                        # 6.0    [6] ANGRY FACE..DISAPPOINTED BUT RELIEVED FACE
+1F626..1F627  ; Not_XID                        # 6.1    [2] FROWNING FACE WITH OPEN MOUTH..ANGUISHED FACE
+1F628..1F62B  ; Not_XID                        # 6.0    [4] FEARFUL FACE..TIRED FACE
+1F62C         ; Not_XID                        # 6.1        GRIMACING FACE
+1F62D         ; Not_XID                        # 6.0        LOUDLY CRYING FACE
+1F62E..1F62F  ; Not_XID                        # 6.1    [2] FACE WITH OPEN MOUTH..HUSHED FACE
+1F630..1F633  ; Not_XID                        # 6.0    [4] FACE WITH OPEN MOUTH AND COLD SWEAT..FLUSHED FACE
+1F634         ; Not_XID                        # 6.1        SLEEPING FACE
+1F635..1F640  ; Not_XID                        # 6.0   [12] DIZZY FACE..WEARY CAT FACE
+1F641..1F642  ; Not_XID                        # 7.0    [2] SLIGHTLY FROWNING FACE..SLIGHTLY SMILING FACE
+1F643..1F644  ; Not_XID                        # 8.0    [2] UPSIDE-DOWN FACE..FACE WITH ROLLING EYES
+1F645..1F64F  ; Not_XID                        # 6.0   [11] FACE WITH NO GOOD GESTURE..PERSON WITH FOLDED HANDS
+1F650..1F67F  ; Not_XID                        # 7.0   [48] NORTH WEST POINTING LEAF..REVERSE CHECKER BOARD
+1F680..1F6C5  ; Not_XID                        # 6.0   [70] ROCKET..LEFT LUGGAGE
+1F6C6..1F6CF  ; Not_XID                        # 7.0   [10] TRIANGLE WITH ROUNDED CORNERS..BED
+1F6D0         ; Not_XID                        # 8.0        PLACE OF WORSHIP
+1F6D1..1F6D2  ; Not_XID                        # 9.0    [2] OCTAGONAL SIGN..SHOPPING TROLLEY
+1F6D3..1F6D4  ; Not_XID                        # 10.0   [2] STUPA..PAGODA
+1F6D5         ; Not_XID                        # 12.0       HINDU TEMPLE
+1F6D6..1F6D7  ; Not_XID                        # 13.0   [2] HUT..ELEVATOR
+1F6E0..1F6EC  ; Not_XID                        # 7.0   [13] HAMMER AND WRENCH..AIRPLANE ARRIVING
+1F6F0..1F6F3  ; Not_XID                        # 7.0    [4] SATELLITE..PASSENGER SHIP
+1F6F4..1F6F6  ; Not_XID                        # 9.0    [3] SCOOTER..CANOE
+1F6F7..1F6F8  ; Not_XID                        # 10.0   [2] SLED..FLYING SAUCER
+1F6F9         ; Not_XID                        # 11.0       SKATEBOARD
+1F6FA         ; Not_XID                        # 12.0       AUTO RICKSHAW
+1F6FB..1F6FC  ; Not_XID                        # 13.0   [2] PICKUP TRUCK..ROLLER SKATE
+1F700..1F773  ; Not_XID                        # 6.0  [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE
+1F780..1F7D4  ; Not_XID                        # 7.0   [85] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..HEAVY TWELVE POINTED PINWHEEL STAR
+1F7D5..1F7D8  ; Not_XID                        # 11.0   [4] CIRCLED TRIANGLE..NEGATIVE CIRCLED SQUARE
+1F7E0..1F7EB  ; Not_XID                        # 12.0  [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE
+1F800..1F80B  ; Not_XID                        # 7.0   [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD
+1F810..1F847  ; Not_XID                        # 7.0   [56] LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD..DOWNWARDS HEAVY ARROW
+1F850..1F859  ; Not_XID                        # 7.0   [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW
+1F860..1F887  ; Not_XID                        # 7.0   [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW
+1F890..1F8AD  ; Not_XID                        # 7.0   [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS
+1F8B0..1F8B1  ; Not_XID                        # 13.0   [2] ARROW POINTING UPWARDS THEN NORTH WEST..ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST
+1F900..1F90B  ; Not_XID                        # 10.0  [12] CIRCLED CROSS FORMEE WITH FOUR DOTS..DOWNWARD FACING NOTCHED HOOK WITH DOT
+1F90C         ; Not_XID                        # 13.0       PINCHED FINGERS
+1F90D..1F90F  ; Not_XID                        # 12.0   [3] WHITE HEART..PINCHING HAND
+1F910..1F918  ; Not_XID                        # 8.0    [9] ZIPPER-MOUTH FACE..SIGN OF THE HORNS
+1F919..1F91E  ; Not_XID                        # 9.0    [6] CALL ME HAND..HAND WITH INDEX AND MIDDLE FINGERS CROSSED
+1F91F         ; Not_XID                        # 10.0       I LOVE YOU HAND SIGN
+1F920..1F927  ; Not_XID                        # 9.0    [8] FACE WITH COWBOY HAT..SNEEZING FACE
+1F928..1F92F  ; Not_XID                        # 10.0   [8] FACE WITH ONE EYEBROW RAISED..SHOCKED FACE WITH EXPLODING HEAD
+1F930         ; Not_XID                        # 9.0        PREGNANT WOMAN
+1F931..1F932  ; Not_XID                        # 10.0   [2] BREAST-FEEDING..PALMS UP TOGETHER
+1F933..1F93E  ; Not_XID                        # 9.0   [12] SELFIE..HANDBALL
+1F93F         ; Not_XID                        # 12.0       DIVING MASK
+1F940..1F94B  ; Not_XID                        # 9.0   [12] WILTED FLOWER..MARTIAL ARTS UNIFORM
+1F94C         ; Not_XID                        # 10.0       CURLING STONE
+1F94D..1F94F  ; Not_XID                        # 11.0   [3] LACROSSE STICK AND BALL..FLYING DISC
+1F950..1F95E  ; Not_XID                        # 9.0   [15] CROISSANT..PANCAKES
+1F95F..1F96B  ; Not_XID                        # 10.0  [13] DUMPLING..CANNED FOOD
+1F96C..1F970  ; Not_XID                        # 11.0   [5] LEAFY GREEN..SMILING FACE WITH SMILING EYES AND THREE HEARTS
+1F971         ; Not_XID                        # 12.0       YAWNING FACE
+1F972         ; Not_XID                        # 13.0       SMILING FACE WITH TEAR
+1F973..1F976  ; Not_XID                        # 11.0   [4] FACE WITH PARTY HORN AND PARTY HAT..FREEZING FACE
+1F977..1F978  ; Not_XID                        # 13.0   [2] NINJA..DISGUISED FACE
+1F97A         ; Not_XID                        # 11.0       FACE WITH PLEADING EYES
+1F97B         ; Not_XID                        # 12.0       SARI
+1F97C..1F97F  ; Not_XID                        # 11.0   [4] LAB COAT..FLAT SHOE
+1F980..1F984  ; Not_XID                        # 8.0    [5] CRAB..UNICORN FACE
+1F985..1F991  ; Not_XID                        # 9.0   [13] EAGLE..SQUID
+1F992..1F997  ; Not_XID                        # 10.0   [6] GIRAFFE FACE..CRICKET
+1F998..1F9A2  ; Not_XID                        # 11.0  [11] KANGAROO..SWAN
+1F9A3..1F9A4  ; Not_XID                        # 13.0   [2] MAMMOTH..DODO
+1F9A5..1F9AA  ; Not_XID                        # 12.0   [6] SLOTH..OYSTER
+1F9AB..1F9AD  ; Not_XID                        # 13.0   [3] BEAVER..SEAL
+1F9AE..1F9AF  ; Not_XID                        # 12.0   [2] GUIDE DOG..PROBING CANE
+1F9B0..1F9B9  ; Not_XID                        # 11.0  [10] EMOJI COMPONENT RED HAIR..SUPERVILLAIN
+1F9BA..1F9BF  ; Not_XID                        # 12.0   [6] SAFETY VEST..MECHANICAL LEG
+1F9C0         ; Not_XID                        # 8.0        CHEESE WEDGE
+1F9C1..1F9C2  ; Not_XID                        # 11.0   [2] CUPCAKE..SALT SHAKER
+1F9C3..1F9CA  ; Not_XID                        # 12.0   [8] BEVERAGE BOX..ICE CUBE
+1F9CB         ; Not_XID                        # 13.0       BUBBLE TEA
+1F9CD..1F9CF  ; Not_XID                        # 12.0   [3] STANDING PERSON..DEAF PERSON
+1F9D0..1F9E6  ; Not_XID                        # 10.0  [23] FACE WITH MONOCLE..SOCKS
+1F9E7..1F9FF  ; Not_XID                        # 11.0  [25] RED GIFT ENVELOPE..NAZAR AMULET
+1FA00..1FA53  ; Not_XID                        # 12.0  [84] NEUTRAL CHESS KING..BLACK CHESS KNIGHT-BISHOP
+1FA60..1FA6D  ; Not_XID                        # 11.0  [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER
+1FA70..1FA73  ; Not_XID                        # 12.0   [4] BALLET SHOES..SHORTS
+1FA74         ; Not_XID                        # 13.0       THONG SANDAL
+1FA78..1FA7A  ; Not_XID                        # 12.0   [3] DROP OF BLOOD..STETHOSCOPE
+1FA80..1FA82  ; Not_XID                        # 12.0   [3] YO-YO..PARACHUTE
+1FA83..1FA86  ; Not_XID                        # 13.0   [4] BOOMERANG..NESTING DOLLS
+1FA90..1FA95  ; Not_XID                        # 12.0   [6] RINGED PLANET..BANJO
+1FA96..1FAA8  ; Not_XID                        # 13.0  [19] MILITARY HELMET..ROCK
+1FAB0..1FAB6  ; Not_XID                        # 13.0   [7] FLY..FEATHER
+1FAC0..1FAC2  ; Not_XID                        # 13.0   [3] ANATOMICAL HEART..PEOPLE HUGGING
+1FAD0..1FAD6  ; Not_XID                        # 13.0   [7] BLUEBERRIES..TEAPOT
+1FB00..1FB92  ; Not_XID                        # 13.0 [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK
+1FB94..1FBCA  ; Not_XID                        # 13.0  [55] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON
+
+# Total code points: 5587
+
+#      Identifier_Type:        Not_NFKC
+
+00A0          ; Not_NFKC                       # 1.1        NO-BREAK SPACE
+00A8          ; Not_NFKC                       # 1.1        DIAERESIS
+00AA          ; Not_NFKC                       # 1.1        FEMININE ORDINAL INDICATOR
+00AF          ; Not_NFKC                       # 1.1        MACRON
+00B2..00B5    ; Not_NFKC                       # 1.1    [4] SUPERSCRIPT TWO..MICRO SIGN
+00B8..00BA    ; Not_NFKC                       # 1.1    [3] CEDILLA..MASCULINE ORDINAL INDICATOR
+00BC..00BE    ; Not_NFKC                       # 1.1    [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS
+0132..0133    ; Not_NFKC                       # 1.1    [2] LATIN CAPITAL LIGATURE IJ..LATIN SMALL LIGATURE IJ
+013F..0140    ; Not_NFKC                       # 1.1    [2] LATIN CAPITAL LETTER L WITH MIDDLE DOT..LATIN SMALL LETTER L WITH MIDDLE DOT
+017F          ; Not_NFKC                       # 1.1        LATIN SMALL LETTER LONG S
+01C4..01CC    ; Not_NFKC                       # 1.1    [9] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER NJ
+01F1..01F3    ; Not_NFKC                       # 1.1    [3] LATIN CAPITAL LETTER DZ..LATIN SMALL LETTER DZ
+02B0..02B8    ; Not_NFKC                       # 1.1    [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y
+02D8..02DD    ; Not_NFKC                       # 1.1    [6] BREVE..DOUBLE ACUTE ACCENT
+02E0..02E4    ; Not_NFKC                       # 1.1    [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+0340..0341    ; Not_NFKC                       # 1.1    [2] COMBINING GRAVE TONE MARK..COMBINING ACUTE TONE MARK
+0343..0344    ; Not_NFKC                       # 1.1    [2] COMBINING GREEK KORONIS..COMBINING GREEK DIALYTIKA TONOS
+0374          ; Not_NFKC                       # 1.1        GREEK NUMERAL SIGN
+037A          ; Not_NFKC                       # 1.1        GREEK YPOGEGRAMMENI
+037E          ; Not_NFKC                       # 1.1        GREEK QUESTION MARK
+0384..0385    ; Not_NFKC                       # 1.1    [2] GREEK TONOS..GREEK DIALYTIKA TONOS
+0387          ; Not_NFKC                       # 1.1        GREEK ANO TELEIA
+03D0..03D6    ; Not_NFKC                       # 1.1    [7] GREEK BETA SYMBOL..GREEK PI SYMBOL
+03F0..03F2    ; Not_NFKC                       # 1.1    [3] GREEK KAPPA SYMBOL..GREEK LUNATE SIGMA SYMBOL
+03F4..03F5    ; Not_NFKC                       # 3.1    [2] GREEK CAPITAL THETA SYMBOL..GREEK LUNATE EPSILON SYMBOL
+03F9          ; Not_NFKC                       # 4.0        GREEK CAPITAL LUNATE SIGMA SYMBOL
+0587          ; Not_NFKC                       # 1.1        ARMENIAN SMALL LIGATURE ECH YIWN
+0675..0678    ; Not_NFKC                       # 1.1    [4] ARABIC LETTER HIGH HAMZA ALEF..ARABIC LETTER HIGH HAMZA YEH
+0958..095F    ; Not_NFKC                       # 1.1    [8] DEVANAGARI LETTER QA..DEVANAGARI LETTER YYA
+09DC..09DD    ; Not_NFKC                       # 1.1    [2] BENGALI LETTER RRA..BENGALI LETTER RHA
+09DF          ; Not_NFKC                       # 1.1        BENGALI LETTER YYA
+0A33          ; Not_NFKC                       # 1.1        GURMUKHI LETTER LLA
+0A36          ; Not_NFKC                       # 1.1        GURMUKHI LETTER SHA
+0A59..0A5B    ; Not_NFKC                       # 1.1    [3] GURMUKHI LETTER KHHA..GURMUKHI LETTER ZA
+0A5E          ; Not_NFKC                       # 1.1        GURMUKHI LETTER FA
+0B5C..0B5D    ; Not_NFKC                       # 1.1    [2] ORIYA LETTER RRA..ORIYA LETTER RHA
+0E33          ; Not_NFKC                       # 1.1        THAI CHARACTER SARA AM
+0EB3          ; Not_NFKC                       # 1.1        LAO VOWEL SIGN AM
+0EDC..0EDD    ; Not_NFKC                       # 1.1    [2] LAO HO NO..LAO HO MO
+0F0C          ; Not_NFKC                       # 2.0        TIBETAN MARK DELIMITER TSHEG BSTAR
+0F43          ; Not_NFKC                       # 2.0        TIBETAN LETTER GHA
+0F4D          ; Not_NFKC                       # 2.0        TIBETAN LETTER DDHA
+0F52          ; Not_NFKC                       # 2.0        TIBETAN LETTER DHA
+0F57          ; Not_NFKC                       # 2.0        TIBETAN LETTER BHA
+0F5C          ; Not_NFKC                       # 2.0        TIBETAN LETTER DZHA
+0F69          ; Not_NFKC                       # 2.0        TIBETAN LETTER KSSA
+0F73          ; Not_NFKC                       # 2.0        TIBETAN VOWEL SIGN II
+0F75..0F76    ; Not_NFKC                       # 2.0    [2] TIBETAN VOWEL SIGN UU..TIBETAN VOWEL SIGN VOCALIC R
+0F78          ; Not_NFKC                       # 2.0        TIBETAN VOWEL SIGN VOCALIC L
+0F81          ; Not_NFKC                       # 2.0        TIBETAN VOWEL SIGN REVERSED II
+0F93          ; Not_NFKC                       # 2.0        TIBETAN SUBJOINED LETTER GHA
+0F9D          ; Not_NFKC                       # 2.0        TIBETAN SUBJOINED LETTER DDHA
+0FA2          ; Not_NFKC                       # 2.0        TIBETAN SUBJOINED LETTER DHA
+0FA7          ; Not_NFKC                       # 2.0        TIBETAN SUBJOINED LETTER BHA
+0FAC          ; Not_NFKC                       # 2.0        TIBETAN SUBJOINED LETTER DZHA
+0FB9          ; Not_NFKC                       # 2.0        TIBETAN SUBJOINED LETTER KSSA
+10FC          ; Not_NFKC                       # 4.1        MODIFIER LETTER GEORGIAN NAR
+1D2C..1D2E    ; Not_NFKC                       # 4.0    [3] MODIFIER LETTER CAPITAL A..MODIFIER LETTER CAPITAL B
+1D30..1D3A    ; Not_NFKC                       # 4.0   [11] MODIFIER LETTER CAPITAL D..MODIFIER LETTER CAPITAL N
+1D3C..1D4D    ; Not_NFKC                       # 4.0   [18] MODIFIER LETTER CAPITAL O..MODIFIER LETTER SMALL G
+1D4F..1D6A    ; Not_NFKC                       # 4.0   [28] MODIFIER LETTER SMALL K..GREEK SUBSCRIPT SMALL LETTER CHI
+1D78          ; Not_NFKC                       # 4.1        MODIFIER LETTER CYRILLIC EN
+1D9B..1DBF    ; Not_NFKC                       # 4.1   [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
+1E9A          ; Not_NFKC                       # 1.1        LATIN SMALL LETTER A WITH RIGHT HALF RING
+1E9B          ; Not_NFKC                       # 2.0        LATIN SMALL LETTER LONG S WITH DOT ABOVE
+1F71          ; Not_NFKC                       # 1.1        GREEK SMALL LETTER ALPHA WITH OXIA
+1F73          ; Not_NFKC                       # 1.1        GREEK SMALL LETTER EPSILON WITH OXIA
+1F75          ; Not_NFKC                       # 1.1        GREEK SMALL LETTER ETA WITH OXIA
+1F77          ; Not_NFKC                       # 1.1        GREEK SMALL LETTER IOTA WITH OXIA
+1F79          ; Not_NFKC                       # 1.1        GREEK SMALL LETTER OMICRON WITH OXIA
+1F7B          ; Not_NFKC                       # 1.1        GREEK SMALL LETTER UPSILON WITH OXIA
+1F7D          ; Not_NFKC                       # 1.1        GREEK SMALL LETTER OMEGA WITH OXIA
+1FBB          ; Not_NFKC                       # 1.1        GREEK CAPITAL LETTER ALPHA WITH OXIA
+1FBD..1FC1    ; Not_NFKC                       # 1.1    [5] GREEK KORONIS..GREEK DIALYTIKA AND PERISPOMENI
+1FC9          ; Not_NFKC                       # 1.1        GREEK CAPITAL LETTER EPSILON WITH OXIA
+1FCB          ; Not_NFKC                       # 1.1        GREEK CAPITAL LETTER ETA WITH OXIA
+1FCD..1FCF    ; Not_NFKC                       # 1.1    [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI
+1FD3          ; Not_NFKC                       # 1.1        GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+1FDB          ; Not_NFKC                       # 1.1        GREEK CAPITAL LETTER IOTA WITH OXIA
+1FDD..1FDF    ; Not_NFKC                       # 1.1    [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI
+1FE3          ; Not_NFKC                       # 1.1        GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
+1FEB          ; Not_NFKC                       # 1.1        GREEK CAPITAL LETTER UPSILON WITH OXIA
+1FED..1FEF    ; Not_NFKC                       # 1.1    [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA
+1FF9          ; Not_NFKC                       # 1.1        GREEK CAPITAL LETTER OMICRON WITH OXIA
+1FFB          ; Not_NFKC                       # 1.1        GREEK CAPITAL LETTER OMEGA WITH OXIA
+1FFD..1FFE    ; Not_NFKC                       # 1.1    [2] GREEK OXIA..GREEK DASIA
+2000..200A    ; Not_NFKC                       # 1.1   [11] EN QUAD..HAIR SPACE
+2011          ; Not_NFKC                       # 1.1        NON-BREAKING HYPHEN
+2017          ; Not_NFKC                       # 1.1        DOUBLE LOW LINE
+2024..2026    ; Not_NFKC                       # 1.1    [3] ONE DOT LEADER..HORIZONTAL ELLIPSIS
+202F          ; Not_NFKC                       # 3.0        NARROW NO-BREAK SPACE
+2033..2034    ; Not_NFKC                       # 1.1    [2] DOUBLE PRIME..TRIPLE PRIME
+2036..2037    ; Not_NFKC                       # 1.1    [2] REVERSED DOUBLE PRIME..REVERSED TRIPLE PRIME
+203C          ; Not_NFKC                       # 1.1        DOUBLE EXCLAMATION MARK
+203E          ; Not_NFKC                       # 1.1        OVERLINE
+2047          ; Not_NFKC                       # 3.2        DOUBLE QUESTION MARK
+2048..2049    ; Not_NFKC                       # 3.0    [2] QUESTION EXCLAMATION MARK..EXCLAMATION QUESTION MARK
+2057          ; Not_NFKC                       # 3.2        QUADRUPLE PRIME
+205F          ; Not_NFKC                       # 3.2        MEDIUM MATHEMATICAL SPACE
+2070          ; Not_NFKC                       # 1.1        SUPERSCRIPT ZERO
+2071          ; Not_NFKC                       # 3.2        SUPERSCRIPT LATIN SMALL LETTER I
+2074..208E    ; Not_NFKC                       # 1.1   [27] SUPERSCRIPT FOUR..SUBSCRIPT RIGHT PARENTHESIS
+2090..2094    ; Not_NFKC                       # 4.1    [5] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER SCHWA
+2095..209C    ; Not_NFKC                       # 6.0    [8] LATIN SUBSCRIPT SMALL LETTER H..LATIN SUBSCRIPT SMALL LETTER T
+20A8          ; Not_NFKC                       # 1.1        RUPEE SIGN
+2100..2103    ; Not_NFKC                       # 1.1    [4] ACCOUNT OF..DEGREE CELSIUS
+2105..2107    ; Not_NFKC                       # 1.1    [3] CARE OF..EULER CONSTANT
+2109..2113    ; Not_NFKC                       # 1.1   [11] DEGREE FAHRENHEIT..SCRIPT SMALL L
+2115..2116    ; Not_NFKC                       # 1.1    [2] DOUBLE-STRUCK CAPITAL N..NUMERO SIGN
+2119..211D    ; Not_NFKC                       # 1.1    [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+2120..2122    ; Not_NFKC                       # 1.1    [3] SERVICE MARK..TRADE MARK SIGN
+2124          ; Not_NFKC                       # 1.1        DOUBLE-STRUCK CAPITAL Z
+2126          ; Not_NFKC                       # 1.1        OHM SIGN
+2128          ; Not_NFKC                       # 1.1        BLACK-LETTER CAPITAL Z
+212A..212D    ; Not_NFKC                       # 1.1    [4] KELVIN SIGN..BLACK-LETTER CAPITAL C
+212F..2131    ; Not_NFKC                       # 1.1    [3] SCRIPT SMALL E..SCRIPT CAPITAL F
+2133..2138    ; Not_NFKC                       # 1.1    [6] SCRIPT CAPITAL M..DALET SYMBOL
+2139          ; Not_NFKC                       # 3.0        INFORMATION SOURCE
+213B          ; Not_NFKC                       # 4.0        FACSIMILE SIGN
+213C          ; Not_NFKC                       # 4.1        DOUBLE-STRUCK SMALL PI
+213D..2140    ; Not_NFKC                       # 3.2    [4] DOUBLE-STRUCK SMALL GAMMA..DOUBLE-STRUCK N-ARY SUMMATION
+2145..2149    ; Not_NFKC                       # 3.2    [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
+2150..2152    ; Not_NFKC                       # 5.2    [3] VULGAR FRACTION ONE SEVENTH..VULGAR FRACTION ONE TENTH
+2153..217F    ; Not_NFKC                       # 1.1   [45] VULGAR FRACTION ONE THIRD..SMALL ROMAN NUMERAL ONE THOUSAND
+2189          ; Not_NFKC                       # 5.2        VULGAR FRACTION ZERO THIRDS
+222C..222D    ; Not_NFKC                       # 1.1    [2] DOUBLE INTEGRAL..TRIPLE INTEGRAL
+222F..2230    ; Not_NFKC                       # 1.1    [2] SURFACE INTEGRAL..VOLUME INTEGRAL
+2460..24EA    ; Not_NFKC                       # 1.1  [139] CIRCLED DIGIT ONE..CIRCLED DIGIT ZERO
+2A0C          ; Not_NFKC                       # 3.2        QUADRUPLE INTEGRAL OPERATOR
+2A74..2A76    ; Not_NFKC                       # 3.2    [3] DOUBLE COLON EQUAL..THREE CONSECUTIVE EQUALS SIGNS
+2ADC          ; Not_NFKC                       # 3.2        FORKING
+2C7C..2C7D    ; Not_NFKC                       # 5.1    [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V
+2D6F          ; Not_NFKC                       # 4.1        TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+2E9F          ; Not_NFKC                       # 3.0        CJK RADICAL MOTHER
+2EF3          ; Not_NFKC                       # 3.0        CJK RADICAL C-SIMPLIFIED TURTLE
+2F00..2FD5    ; Not_NFKC                       # 3.0  [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE
+3000          ; Not_NFKC                       # 1.1        IDEOGRAPHIC SPACE
+3036          ; Not_NFKC                       # 1.1        CIRCLED POSTAL MARK
+3038..303A    ; Not_NFKC                       # 3.0    [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
+309B..309C    ; Not_NFKC                       # 1.1    [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+309F          ; Not_NFKC                       # 3.2        HIRAGANA DIGRAPH YORI
+30FF          ; Not_NFKC                       # 3.2        KATAKANA DIGRAPH KOTO
+3131..3163    ; Not_NFKC                       # 1.1   [51] HANGUL LETTER KIYEOK..HANGUL LETTER I
+3165..318E    ; Not_NFKC                       # 1.1   [42] HANGUL LETTER SSANGNIEUN..HANGUL LETTER ARAEAE
+3192..319F    ; Not_NFKC                       # 1.1   [14] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION MAN MARK
+3200..321C    ; Not_NFKC                       # 1.1   [29] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED HANGUL CIEUC U
+321D..321E    ; Not_NFKC                       # 4.0    [2] PARENTHESIZED KOREAN CHARACTER OJEON..PARENTHESIZED KOREAN CHARACTER O HU
+3220..3243    ; Not_NFKC                       # 1.1   [36] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH REACH
+3244..3247    ; Not_NFKC                       # 5.2    [4] CIRCLED IDEOGRAPH QUESTION..CIRCLED IDEOGRAPH KOTO
+3250          ; Not_NFKC                       # 4.0        PARTNERSHIP SIGN
+3251..325F    ; Not_NFKC                       # 3.2   [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE
+3260..327B    ; Not_NFKC                       # 1.1   [28] CIRCLED HANGUL KIYEOK..CIRCLED HANGUL HIEUH A
+327C..327D    ; Not_NFKC                       # 4.0    [2] CIRCLED KOREAN CHARACTER CHAMKO..CIRCLED KOREAN CHARACTER JUEUI
+327E          ; Not_NFKC                       # 4.1        CIRCLED HANGUL IEUNG U
+3280..32B0    ; Not_NFKC                       # 1.1   [49] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH NIGHT
+32B1..32BF    ; Not_NFKC                       # 3.2   [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY
+32C0..32CB    ; Not_NFKC                       # 1.1   [12] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER
+32CC..32CF    ; Not_NFKC                       # 4.0    [4] SQUARE HG..LIMITED LIABILITY SIGN
+32D0..32FE    ; Not_NFKC                       # 1.1   [47] CIRCLED KATAKANA A..CIRCLED KATAKANA WO
+32FF          ; Not_NFKC                       # 12.1       SQUARE ERA NAME REIWA
+3300..3376    ; Not_NFKC                       # 1.1  [119] SQUARE APAATO..SQUARE PC
+3377..337A    ; Not_NFKC                       # 4.0    [4] SQUARE DM..SQUARE IU
+337B..33DD    ; Not_NFKC                       # 1.1   [99] SQUARE ERA NAME HEISEI..SQUARE WB
+33DE..33DF    ; Not_NFKC                       # 4.0    [2] SQUARE V OVER M..SQUARE A OVER M
+33E0..33FE    ; Not_NFKC                       # 1.1   [31] IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE..IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE
+33FF          ; Not_NFKC                       # 4.0        SQUARE GAL
+A69C..A69D    ; Not_NFKC                       # 7.0    [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN
+A770          ; Not_NFKC                       # 5.1        MODIFIER LETTER US
+A7F8..A7F9    ; Not_NFKC                       # 6.1    [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
+AB5C..AB5F    ; Not_NFKC                       # 7.0    [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
+AB69          ; Not_NFKC                       # 13.0       MODIFIER LETTER SMALL TURNED W
+F900..FA0D    ; Not_NFKC                       # 1.1  [270] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA0D
+FA10          ; Not_NFKC                       # 1.1        CJK COMPATIBILITY IDEOGRAPH-FA10
+FA12          ; Not_NFKC                       # 1.1        CJK COMPATIBILITY IDEOGRAPH-FA12
+FA15..FA1E    ; Not_NFKC                       # 1.1   [10] CJK COMPATIBILITY IDEOGRAPH-FA15..CJK COMPATIBILITY IDEOGRAPH-FA1E
+FA20          ; Not_NFKC                       # 1.1        CJK COMPATIBILITY IDEOGRAPH-FA20
+FA22          ; Not_NFKC                       # 1.1        CJK COMPATIBILITY IDEOGRAPH-FA22
+FA25..FA26    ; Not_NFKC                       # 1.1    [2] CJK COMPATIBILITY IDEOGRAPH-FA25..CJK COMPATIBILITY IDEOGRAPH-FA26
+FA2A..FA2D    ; Not_NFKC                       # 1.1    [4] CJK COMPATIBILITY IDEOGRAPH-FA2A..CJK COMPATIBILITY IDEOGRAPH-FA2D
+FA2E..FA2F    ; Not_NFKC                       # 6.1    [2] CJK COMPATIBILITY IDEOGRAPH-FA2E..CJK COMPATIBILITY IDEOGRAPH-FA2F
+FA30..FA6A    ; Not_NFKC                       # 3.2   [59] CJK COMPATIBILITY IDEOGRAPH-FA30..CJK COMPATIBILITY IDEOGRAPH-FA6A
+FA6B..FA6D    ; Not_NFKC                       # 5.2    [3] CJK COMPATIBILITY IDEOGRAPH-FA6B..CJK COMPATIBILITY IDEOGRAPH-FA6D
+FA70..FAD9    ; Not_NFKC                       # 4.1  [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
+FB00..FB06    ; Not_NFKC                       # 1.1    [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+FB13..FB17    ; Not_NFKC                       # 1.1    [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+FB1D          ; Not_NFKC                       # 3.0        HEBREW LETTER YOD WITH HIRIQ
+FB1F..FB36    ; Not_NFKC                       # 1.1   [24] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER ZAYIN WITH DAGESH
+FB38..FB3C    ; Not_NFKC                       # 1.1    [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
+FB3E          ; Not_NFKC                       # 1.1        HEBREW LETTER MEM WITH DAGESH
+FB40..FB41    ; Not_NFKC                       # 1.1    [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
+FB43..FB44    ; Not_NFKC                       # 1.1    [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
+FB46..FBB1    ; Not_NFKC                       # 1.1  [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+FBD3..FD3D    ; Not_NFKC                       # 1.1  [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+FD50..FD8F    ; Not_NFKC                       # 1.1   [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+FD92..FDC7    ; Not_NFKC                       # 1.1   [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+FDF0..FDFB    ; Not_NFKC                       # 1.1   [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU
+FDFC          ; Not_NFKC                       # 3.2        RIAL SIGN
+FE10..FE19    ; Not_NFKC                       # 4.1   [10] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
+FE30..FE44    ; Not_NFKC                       # 1.1   [21] PRESENTATION FORM FOR VERTICAL TWO DOT LEADER..PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+FE47..FE48    ; Not_NFKC                       # 4.0    [2] PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET..PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
+FE49..FE52    ; Not_NFKC                       # 1.1   [10] DASHED OVERLINE..SMALL FULL STOP
+FE54..FE66    ; Not_NFKC                       # 1.1   [19] SMALL SEMICOLON..SMALL EQUALS SIGN
+FE68..FE6B    ; Not_NFKC                       # 1.1    [4] SMALL REVERSE SOLIDUS..SMALL COMMERCIAL AT
+FE70..FE72    ; Not_NFKC                       # 1.1    [3] ARABIC FATHATAN ISOLATED FORM..ARABIC DAMMATAN ISOLATED FORM
+FE74          ; Not_NFKC                       # 1.1        ARABIC KASRATAN ISOLATED FORM
+FE76..FEFC    ; Not_NFKC                       # 1.1  [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+FF01..FF5E    ; Not_NFKC                       # 1.1   [94] FULLWIDTH EXCLAMATION MARK..FULLWIDTH TILDE
+FF5F..FF60    ; Not_NFKC                       # 3.2    [2] FULLWIDTH LEFT WHITE PARENTHESIS..FULLWIDTH RIGHT WHITE PARENTHESIS
+FF61..FF9F    ; Not_NFKC                       # 1.1   [63] HALFWIDTH IDEOGRAPHIC FULL STOP..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+FFA1..FFBE    ; Not_NFKC                       # 1.1   [30] HALFWIDTH HANGUL LETTER KIYEOK..HALFWIDTH HANGUL LETTER HIEUH
+FFC2..FFC7    ; Not_NFKC                       # 1.1    [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E
+FFCA..FFCF    ; Not_NFKC                       # 1.1    [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE
+FFD2..FFD7    ; Not_NFKC                       # 1.1    [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
+FFDA..FFDC    ; Not_NFKC                       # 1.1    [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
+FFE0..FFE6    ; Not_NFKC                       # 1.1    [7] FULLWIDTH CENT SIGN..FULLWIDTH WON SIGN
+FFE8..FFEE    ; Not_NFKC                       # 1.1    [7] HALFWIDTH FORMS LIGHT VERTICAL..HALFWIDTH WHITE CIRCLE
+1D15E..1D164  ; Not_NFKC                       # 3.1    [7] MUSICAL SYMBOL HALF NOTE..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
+1D1BB..1D1C0  ; Not_NFKC                       # 3.1    [6] MUSICAL SYMBOL MINIMA..MUSICAL SYMBOL FUSA BLACK
+1D400..1D454  ; Not_NFKC                       # 3.1   [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
+1D456..1D49C  ; Not_NFKC                       # 3.1   [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
+1D49E..1D49F  ; Not_NFKC                       # 3.1    [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+1D4A2         ; Not_NFKC                       # 3.1        MATHEMATICAL SCRIPT CAPITAL G
+1D4A5..1D4A6  ; Not_NFKC                       # 3.1    [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+1D4A9..1D4AC  ; Not_NFKC                       # 3.1    [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE..1D4B9  ; Not_NFKC                       # 3.1   [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
+1D4BB         ; Not_NFKC                       # 3.1        MATHEMATICAL SCRIPT SMALL F
+1D4BD..1D4C0  ; Not_NFKC                       # 3.1    [4] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL K
+1D4C1         ; Not_NFKC                       # 4.0        MATHEMATICAL SCRIPT SMALL L
+1D4C2..1D4C3  ; Not_NFKC                       # 3.1    [2] MATHEMATICAL SCRIPT SMALL M..MATHEMATICAL SCRIPT SMALL N
+1D4C5..1D505  ; Not_NFKC                       # 3.1   [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
+1D507..1D50A  ; Not_NFKC                       # 3.1    [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+1D50D..1D514  ; Not_NFKC                       # 3.1    [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+1D516..1D51C  ; Not_NFKC                       # 3.1    [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E..1D539  ; Not_NFKC                       # 3.1   [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B..1D53E  ; Not_NFKC                       # 3.1    [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540..1D544  ; Not_NFKC                       # 3.1    [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546         ; Not_NFKC                       # 3.1        MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A..1D550  ; Not_NFKC                       # 3.1    [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552..1D6A3  ; Not_NFKC                       # 3.1  [338] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL MONOSPACE SMALL Z
+1D6A4..1D6A5  ; Not_NFKC                       # 4.1    [2] MATHEMATICAL ITALIC SMALL DOTLESS I..MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6A8..1D7C9  ; Not_NFKC                       # 3.1  [290] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL
+1D7CA..1D7CB  ; Not_NFKC                       # 5.0    [2] MATHEMATICAL BOLD CAPITAL DIGAMMA..MATHEMATICAL BOLD SMALL DIGAMMA
+1D7CE..1D7FF  ; Not_NFKC                       # 3.1   [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
+1EE00..1EE03  ; Not_NFKC                       # 6.1    [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL
+1EE05..1EE1F  ; Not_NFKC                       # 6.1   [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF
+1EE21..1EE22  ; Not_NFKC                       # 6.1    [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM
+1EE24         ; Not_NFKC                       # 6.1        ARABIC MATHEMATICAL INITIAL HEH
+1EE27         ; Not_NFKC                       # 6.1        ARABIC MATHEMATICAL INITIAL HAH
+1EE29..1EE32  ; Not_NFKC                       # 6.1   [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF
+1EE34..1EE37  ; Not_NFKC                       # 6.1    [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH
+1EE39         ; Not_NFKC                       # 6.1        ARABIC MATHEMATICAL INITIAL DAD
+1EE3B         ; Not_NFKC                       # 6.1        ARABIC MATHEMATICAL INITIAL GHAIN
+1EE42         ; Not_NFKC                       # 6.1        ARABIC MATHEMATICAL TAILED JEEM
+1EE47         ; Not_NFKC                       # 6.1        ARABIC MATHEMATICAL TAILED HAH
+1EE49         ; Not_NFKC                       # 6.1        ARABIC MATHEMATICAL TAILED YEH
+1EE4B         ; Not_NFKC                       # 6.1        ARABIC MATHEMATICAL TAILED LAM
+1EE4D..1EE4F  ; Not_NFKC                       # 6.1    [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN
+1EE51..1EE52  ; Not_NFKC                       # 6.1    [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF
+1EE54         ; Not_NFKC                       # 6.1        ARABIC MATHEMATICAL TAILED SHEEN
+1EE57         ; Not_NFKC                       # 6.1        ARABIC MATHEMATICAL TAILED KHAH
+1EE59         ; Not_NFKC                       # 6.1        ARABIC MATHEMATICAL TAILED DAD
+1EE5B         ; Not_NFKC                       # 6.1        ARABIC MATHEMATICAL TAILED GHAIN
+1EE5D         ; Not_NFKC                       # 6.1        ARABIC MATHEMATICAL TAILED DOTLESS NOON
+1EE5F         ; Not_NFKC                       # 6.1        ARABIC MATHEMATICAL TAILED DOTLESS QAF
+1EE61..1EE62  ; Not_NFKC                       # 6.1    [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM
+1EE64         ; Not_NFKC                       # 6.1        ARABIC MATHEMATICAL STRETCHED HEH
+1EE67..1EE6A  ; Not_NFKC                       # 6.1    [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF
+1EE6C..1EE72  ; Not_NFKC                       # 6.1    [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF
+1EE74..1EE77  ; Not_NFKC                       # 6.1    [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH
+1EE79..1EE7C  ; Not_NFKC                       # 6.1    [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH
+1EE7E         ; Not_NFKC                       # 6.1        ARABIC MATHEMATICAL STRETCHED DOTLESS FEH
+1EE80..1EE89  ; Not_NFKC                       # 6.1   [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH
+1EE8B..1EE9B  ; Not_NFKC                       # 6.1   [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN
+1EEA1..1EEA3  ; Not_NFKC                       # 6.1    [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
+1EEA5..1EEA9  ; Not_NFKC                       # 6.1    [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
+1EEAB..1EEBB  ; Not_NFKC                       # 6.1   [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
+1F100..1F10A  ; Not_NFKC                       # 5.2   [11] DIGIT ZERO FULL STOP..DIGIT NINE COMMA
+1F110..1F12E  ; Not_NFKC                       # 5.2   [31] PARENTHESIZED LATIN CAPITAL LETTER A..CIRCLED WZ
+1F130         ; Not_NFKC                       # 6.0        SQUARED LATIN CAPITAL LETTER A
+1F131         ; Not_NFKC                       # 5.2        SQUARED LATIN CAPITAL LETTER B
+1F132..1F13C  ; Not_NFKC                       # 6.0   [11] SQUARED LATIN CAPITAL LETTER C..SQUARED LATIN CAPITAL LETTER M
+1F13D         ; Not_NFKC                       # 5.2        SQUARED LATIN CAPITAL LETTER N
+1F13E         ; Not_NFKC                       # 6.0        SQUARED LATIN CAPITAL LETTER O
+1F13F         ; Not_NFKC                       # 5.2        SQUARED LATIN CAPITAL LETTER P
+1F140..1F141  ; Not_NFKC                       # 6.0    [2] SQUARED LATIN CAPITAL LETTER Q..SQUARED LATIN CAPITAL LETTER R
+1F142         ; Not_NFKC                       # 5.2        SQUARED LATIN CAPITAL LETTER S
+1F143..1F145  ; Not_NFKC                       # 6.0    [3] SQUARED LATIN CAPITAL LETTER T..SQUARED LATIN CAPITAL LETTER V
+1F146         ; Not_NFKC                       # 5.2        SQUARED LATIN CAPITAL LETTER W
+1F147..1F149  ; Not_NFKC                       # 6.0    [3] SQUARED LATIN CAPITAL LETTER X..SQUARED LATIN CAPITAL LETTER Z
+1F14A..1F14E  ; Not_NFKC                       # 5.2    [5] SQUARED HV..SQUARED PPV
+1F14F         ; Not_NFKC                       # 6.0        SQUARED WC
+1F16A..1F16B  ; Not_NFKC                       # 6.1    [2] RAISED MC SIGN..RAISED MD SIGN
+1F16C         ; Not_NFKC                       # 12.0       RAISED MR SIGN
+1F190         ; Not_NFKC                       # 5.2        SQUARE DJ
+1F200         ; Not_NFKC                       # 5.2        SQUARE HIRAGANA HOKA
+1F201..1F202  ; Not_NFKC                       # 6.0    [2] SQUARED KATAKANA KOKO..SQUARED KATAKANA SA
+1F210..1F231  ; Not_NFKC                       # 5.2   [34] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-6253
+1F232..1F23A  ; Not_NFKC                       # 6.0    [9] SQUARED CJK UNIFIED IDEOGRAPH-7981..SQUARED CJK UNIFIED IDEOGRAPH-55B6
+1F23B         ; Not_NFKC                       # 9.0        SQUARED CJK UNIFIED IDEOGRAPH-914D
+1F240..1F248  ; Not_NFKC                       # 5.2    [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
+1F250..1F251  ; Not_NFKC                       # 6.0    [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT
+1FBF0..1FBF9  ; Not_NFKC                       # 13.0  [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
+2F800..2FA1D  ; Not_NFKC                       # 3.1  [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+
+# Total code points: 4800
+
+#      Identifier_Type:        Default_Ignorable
+
+00AD          ; Default_Ignorable              # 1.1        SOFT HYPHEN
+034F          ; Default_Ignorable              # 3.2        COMBINING GRAPHEME JOINER
+061C          ; Default_Ignorable              # 6.3        ARABIC LETTER MARK
+115F..1160    ; Default_Ignorable              # 1.1    [2] HANGUL CHOSEONG FILLER..HANGUL JUNGSEONG FILLER
+17B4..17B5    ; Default_Ignorable              # 3.0    [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
+180B..180D    ; Default_Ignorable              # 3.0    [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
+180E          ; Default_Ignorable              # 3.0        MONGOLIAN VOWEL SEPARATOR
+200B          ; Default_Ignorable              # 1.1        ZERO WIDTH SPACE
+200E..200F    ; Default_Ignorable              # 1.1    [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK
+202A..202E    ; Default_Ignorable              # 1.1    [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE
+2060..2063    ; Default_Ignorable              # 3.2    [4] WORD JOINER..INVISIBLE SEPARATOR
+2064          ; Default_Ignorable              # 5.1        INVISIBLE PLUS
+2066..2069    ; Default_Ignorable              # 6.3    [4] LEFT-TO-RIGHT ISOLATE..POP DIRECTIONAL ISOLATE
+3164          ; Default_Ignorable              # 1.1        HANGUL FILLER
+FE00..FE0F    ; Default_Ignorable              # 3.2   [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
+FEFF          ; Default_Ignorable              # 1.1        ZERO WIDTH NO-BREAK SPACE
+FFA0          ; Default_Ignorable              # 1.1        HALFWIDTH HANGUL FILLER
+1BCA0..1BCA3  ; Default_Ignorable              # 7.0    [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP
+1D173..1D17A  ; Default_Ignorable              # 3.1    [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE
+E0020..E007F  ; Default_Ignorable              # 3.1   [96] TAG SPACE..CANCEL TAG
+E0100..E01EF  ; Default_Ignorable              # 4.0  [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
+
+# Total code points: 395
+
+#      Identifier_Type:        Deprecated
+
+0149          ; Deprecated                     # 1.1        LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+0673          ; Deprecated                     # 1.1        ARABIC LETTER ALEF WITH WAVY HAMZA BELOW
+0F77          ; Deprecated                     # 2.0        TIBETAN VOWEL SIGN VOCALIC RR
+0F79          ; Deprecated                     # 2.0        TIBETAN VOWEL SIGN VOCALIC LL
+17A3..17A4    ; Deprecated                     # 3.0    [2] KHMER INDEPENDENT VOWEL QAQ..KHMER INDEPENDENT VOWEL QAA
+206A..206F    ; Deprecated                     # 1.1    [6] INHIBIT SYMMETRIC SWAPPING..NOMINAL DIGIT SHAPES
+2329..232A    ; Deprecated                     # 1.1    [2] LEFT-POINTING ANGLE BRACKET..RIGHT-POINTING ANGLE BRACKET
+E0001         ; Deprecated                     # 3.1        LANGUAGE TAG
+
+# Total code points: 15
index 445ad05..1cc92e3 100644 (file)
@@ -1,5 +1,5 @@
-# VerticalOrientation-12.1.0.txt
-# Date: 2019-04-01, 09:27:26 GMT [EM, KI, LI]
+# VerticalOrientation-13.0.0.txt
+# Date: 2019-10-07, 05:27:01 GMT [EM, KI, LI]
 # © 2019 Unicode®, Inc.
 # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
 # For terms of use, see http://www.unicode.org/terms_of_use.html
@@ -45,6 +45,7 @@
 #         Egyptian Hieroglyphs & Controls:   U+13000..U+1343F
 #         Anatolian Hieroglyphs:             U+14400..U+1467F
 #         Ideographic Symbols & Tangut:      U+16FE0..U+18AFF
+#         Khitan Small Script & Tangut Sup:  U+18B00..U+18D8F
 #         Kana Extended-A & Small Kana Ext:  U+1B100..U+1B16F
 #         Nushu:                             U+1B170..U+1B2FF
 #         Musical Symbols:                   U+1D000..U+1D1FF
 085E           ; R  # Po         MANDAIC PUNCTUATION
 0860..086A     ; R  # Lo    [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
 08A0..08B4     ; R  # Lo    [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW
-08B6..08BD     ; R  # Lo     [8] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER AFRICAN NOON
+08B6..08C7     ; R  # Lo    [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE
 08D3..08E1     ; R  # Mn    [15] ARABIC SMALL LOW WAW..ARABIC SMALL HIGH SIGN SAFHA
 08E2           ; R  # Cf         ARABIC DISPUTED END OF AYAH
 08E3..08FF     ; R  # Mn    [29] ARABIC TURNED DAMMA BELOW..ARABIC MARK SIDEWAYS NOON GHUNNA
 0B47..0B48     ; R  # Mc     [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
 0B4B..0B4C     ; R  # Mc     [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
 0B4D           ; R  # Mn         ORIYA SIGN VIRAMA
-0B56           ; R  # Mn         ORIYA AI LENGTH MARK
+0B55..0B56     ; R  # Mn     [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK
 0B57           ; R  # Mc         ORIYA AU LENGTH MARK
 0B5C..0B5D     ; R  # Lo     [2] ORIYA LETTER RRA..ORIYA LETTER RHA
 0B5F..0B61     ; R  # Lo     [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
 0CF1..0CF2     ; R  # Lo     [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
 0D00..0D01     ; R  # Mn     [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU
 0D02..0D03     ; R  # Mc     [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
-0D05..0D0C     ; R  # Lo     [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
+0D04..0D0C     ; R  # Lo     [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L
 0D0E..0D10     ; R  # Lo     [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
 0D12..0D3A     ; R  # Lo    [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
 0D3B..0D3C     ; R  # Mn     [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA
 0D70..0D78     ; R  # No     [9] MALAYALAM NUMBER TEN..MALAYALAM FRACTION THREE SIXTEENTHS
 0D79           ; R  # So         MALAYALAM DATE MARK
 0D7A..0D7F     ; R  # Lo     [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
+0D81           ; R  # Mn         SINHALA SIGN CANDRABINDU
 0D82..0D83     ; R  # Mc     [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
 0D85..0D96     ; R  # Lo    [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
 0D9A..0DB1     ; R  # Lo    [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
 1AA8..1AAD     ; R  # Po     [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG
 1AB0..1ABD     ; R  # Mn    [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
 1ABE           ; R  # Me         COMBINING PARENTHESES OVERLAY
+1ABF..1AC0     ; R  # Mn     [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW
 1B00..1B03     ; R  # Mn     [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
 1B04           ; R  # Mc         BALINESE SIGN BISAH
 1B05..1B33     ; R  # Lo    [47] BALINESE LETTER AKARA..BALINESE LETTER HA
 2B50..2B59     ; U  # So    [10] WHITE MEDIUM STAR..HEAVY CIRCLED SALTIRE
 2B5A..2B73     ; R  # So    [26] SLANTED NORTH ARROW WITH HOOKED HEAD..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR
 2B76..2B95     ; R  # So    [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW
+2B97           ; U  # So         SYMBOL FOR TYPE A ELECTRONICS
 2B98..2BB7     ; R  # So    [32] THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD..RIBBON ARROW RIGHT DOWN
 2BB8..2BD1     ; U  # So    [26] UPWARDS WHITE ARROW FROM BAR WITH HORIZONTAL BAR..UNCERTAINTY SIGN
 2BD2           ; R  # So         GROUP MARK
 2E41           ; R  # Po         REVERSED COMMA
 2E42           ; R  # Ps         DOUBLE LOW-REVERSED-9 QUOTATION MARK
 2E43..2E4F     ; R  # Po    [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER
+2E50..2E51     ; U  # So     [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR
+2E52           ; R  # Po         TIRONIAN SIGN CAPITAL ET
 2E80..2E99     ; U  # So    [26] CJK RADICAL REPEAT..CJK RADICAL RAP
 2E9A           ; U  # Cn         <reserved-2E9A>
 2E9B..2EF3     ; U  # So    [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE
 3190..3191     ; U  # So     [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK
 3192..3195     ; U  # No     [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK
 3196..319F     ; U  # So    [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK
-31A0..31BA     ; U  # Lo    [27] BOPOMOFO LETTER BU..BOPOMOFO LETTER ZY
-31BB..31BF     ; U  # Cn     [5] <reserved-31BB>..<reserved-31BF>
+31A0..31BF     ; U  # Lo    [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH
 31C0..31E3     ; U  # So    [36] CJK STROKE T..CJK STROKE Q
 31E4..31EF     ; U  # Cn    [12] <reserved-31E4>..<reserved-31EF>
 31F0..31FF     ; Tu # Lo    [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
 3358..337A     ; U  # So    [35] IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO..SQUARE IU
 337B..337F     ; Tu # So     [5] SQUARE ERA NAME HEISEI..SQUARE CORPORATION
 3380..33FF     ; U  # So   [128] SQUARE PA AMPS..SQUARE GAL
-3400..4DB5     ; U  # Lo  [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4DB6..4DBF     ; U  # Cn    [10] <reserved-4DB6>..<reserved-4DBF>
+3400..4DBF     ; U  # Lo  [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF
 4DC0..4DFF     ; U  # So    [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION
-4E00..9FEF     ; U  # Lo [20976] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEF
-9FF0..9FFF     ; U  # Cn    [16] <reserved-9FF0>..<reserved-9FFF>
+4E00..9FFC     ; U  # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC
+9FFD..9FFF     ; U  # Cn     [3] <reserved-9FFD>..<reserved-9FFF>
 A000..A014     ; U  # Lo    [21] YI SYLLABLE IT..YI SYLLABLE E
 A015           ; U  # Lm         YI SYLLABLE WU
 A016..A48C     ; U  # Lo  [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
@@ -1333,7 +1337,8 @@ A789..A78A     ; R  # Sk     [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQ
 A78B..A78E     ; R  # L&     [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
 A78F           ; R  # Lo         LATIN LETTER SINOLOGICAL DOT
 A790..A7BF     ; R  # L&    [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U
-A7C2..A7C6     ; R  # L&     [5] LATIN CAPITAL LETTER ANGLICANA W..LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+A7C2..A7CA     ; R  # L&     [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7F5..A7F6     ; R  # L&     [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H
 A7F7           ; R  # Lo         LATIN EPIGRAPHIC LETTER SIDEWAYS I
 A7F8..A7F9     ; R  # Lm     [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
 A7FA           ; R  # Ll         LATIN LETTER SMALL CAPITAL TURNED M
@@ -1349,6 +1354,7 @@ A823..A824     ; R  # Mc     [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL S
 A825..A826     ; R  # Mn     [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
 A827           ; R  # Mc         SYLOTI NAGRI VOWEL SIGN OO
 A828..A82B     ; R  # So     [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4
+A82C           ; R  # Mn         SYLOTI NAGRI SIGN ALTERNATE HASANTA
 A830..A835     ; R  # No     [6] NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC FRACTION THREE SIXTEENTHS
 A836..A837     ; R  # So     [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK
 A838           ; R  # Sc         NORTH INDIC RUPEE MARK
@@ -1450,7 +1456,9 @@ AB28..AB2E     ; R  # Lo     [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
 AB30..AB5A     ; R  # Ll    [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
 AB5B           ; R  # Sk         MODIFIER BREVE WITH INVERTED BREVE
 AB5C..AB5F     ; R  # Lm     [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
-AB60..AB67     ; R  # Ll     [8] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK
+AB60..AB68     ; R  # Ll     [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
+AB69           ; R  # Lm         MODIFIER LETTER SMALL TURNED W
+AB6A..AB6B     ; R  # Sk     [2] MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK
 AB70..ABBF     ; R  # Ll    [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
 ABC0..ABE2     ; R  # Lo    [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
 ABE3..ABE4     ; R  # Mc     [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
@@ -1620,7 +1628,7 @@ FFFC..FFFD     ; U  # So     [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARA
 10179..10189   ; R  # So    [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN
 1018A..1018B   ; R  # No     [2] GREEK ZERO SIGN..GREEK ONE QUARTER SIGN
 1018C..1018E   ; R  # So     [3] GREEK SINUSOID SIGN..NOMISMA SIGN
-10190..1019B   ; R  # So    [12] ROMAN SEXTANS SIGN..ROMAN CENTURIAL SIGN
+10190..1019C   ; R  # So    [13] ROMAN SEXTANS SIGN..ASCIA SYMBOL
 101A0          ; R  # So         GREEK SYMBOL TAU RHO
 101D0..101FC   ; R  # So    [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND
 101FD          ; R  # Mn         PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE
@@ -1722,6 +1730,10 @@ FFFC..FFFD     ; U  # So     [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARA
 10D24..10D27   ; R  # Mn     [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
 10D30..10D39   ; R  # Nd    [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE
 10E60..10E7E   ; R  # No    [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS
+10E80..10EA9   ; R  # Lo    [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET
+10EAB..10EAC   ; R  # Mn     [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK
+10EAD          ; R  # Pd         YEZIDI HYPHENATION MARK
+10EB0..10EB1   ; R  # Lo     [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
 10F00..10F1C   ; R  # Lo    [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
 10F1D..10F26   ; R  # No    [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF
 10F27          ; R  # Lo         OLD SOGDIAN LIGATURE AYIN-DALETH
@@ -1729,6 +1741,8 @@ FFFC..FFFD     ; U  # So     [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARA
 10F46..10F50   ; R  # Mn    [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
 10F51..10F54   ; R  # No     [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED
 10F55..10F59   ; R  # Po     [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT
+10FB0..10FC4   ; R  # Lo    [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW
+10FC5..10FCB   ; R  # No     [7] CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED
 10FE0..10FF6   ; R  # Lo    [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH
 11000          ; R  # Mc         BRAHMI SIGN CANDRABINDU
 11001          ; R  # Mn         BRAHMI SIGN ANUSVARA
@@ -1761,6 +1775,7 @@ FFFC..FFFD     ; U  # So     [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARA
 11140..11143   ; R  # Po     [4] CHAKMA SECTION MARK..CHAKMA QUESTION MARK
 11144          ; R  # Lo         CHAKMA LETTER LHAA
 11145..11146   ; R  # Mc     [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI
+11147          ; R  # Lo         CHAKMA LETTER VAA
 11150..11172   ; R  # Lo    [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA
 11173          ; R  # Mn         MAHAJANI SIGN NUKTA
 11174..11175   ; R  # Po     [2] MAHAJANI ABBREVIATION SIGN..MAHAJANI SECTION MARK
@@ -1775,6 +1790,8 @@ FFFC..FFFD     ; U  # So     [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARA
 111C5..111C8   ; R  # Po     [4] SHARADA DANDA..SHARADA SEPARATOR
 111C9..111CC   ; R  # Mn     [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK
 111CD          ; R  # Po         SHARADA SUTRA MARK
+111CE          ; R  # Mc         SHARADA VOWEL SIGN PRISHTHAMATRA E
+111CF          ; R  # Mn         SHARADA SIGN INVERTED CANDRABINDU
 111D0..111D9   ; R  # Nd    [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE
 111DA          ; R  # Lo         SHARADA EKAM
 111DB          ; R  # Po         SHARADA SIGN SIDDHAM
@@ -1833,10 +1850,10 @@ FFFC..FFFD     ; U  # So     [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARA
 11447..1144A   ; R  # Lo     [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
 1144B..1144F   ; R  # Po     [5] NEWA DANDA..NEWA ABBREVIATION SIGN
 11450..11459   ; R  # Nd    [10] NEWA DIGIT ZERO..NEWA DIGIT NINE
-1145B          ; R  # Po         NEWA PLACEHOLDER MARK
+1145A..1145B   ; R  # Po     [2] NEWA DOUBLE COMMA..NEWA PLACEHOLDER MARK
 1145D          ; R  # Po         NEWA INSERTION SIGN
 1145E          ; R  # Mn         NEWA SANDHI MARK
-1145F          ; R  # Lo         NEWA LETTER VEDIC ANUSVARA
+1145F..11461   ; R  # Lo     [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA
 11480..114AF   ; R  # Lo    [48] TIRHUTA ANJI..TIRHUTA LETTER HA
 114B0..114B2   ; R  # Mc     [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II
 114B3..114B8   ; R  # Mn     [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL
@@ -1903,6 +1920,23 @@ FFFC..FFFD     ; U  # So     [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARA
 118E0..118E9   ; R  # Nd    [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE
 118EA..118F2   ; R  # No     [9] WARANG CITI NUMBER TEN..WARANG CITI NUMBER NINETY
 118FF          ; R  # Lo         WARANG CITI OM
+11900..11906   ; R  # Lo     [7] DIVES AKURU LETTER A..DIVES AKURU LETTER E
+11909          ; R  # Lo         DIVES AKURU LETTER O
+1190C..11913   ; R  # Lo     [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA
+11915..11916   ; R  # Lo     [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA
+11918..1192F   ; R  # Lo    [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA
+11930..11935   ; R  # Mc     [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E
+11937..11938   ; R  # Mc     [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O
+1193B..1193C   ; R  # Mn     [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU
+1193D          ; R  # Mc         DIVES AKURU SIGN HALANTA
+1193E          ; R  # Mn         DIVES AKURU VIRAMA
+1193F          ; R  # Lo         DIVES AKURU PREFIXED NASAL SIGN
+11940          ; R  # Mc         DIVES AKURU MEDIAL YA
+11941          ; R  # Lo         DIVES AKURU INITIAL RA
+11942          ; R  # Mc         DIVES AKURU MEDIAL RA
+11943          ; R  # Mn         DIVES AKURU SIGN NUKTA
+11944..11946   ; R  # Po     [3] DIVES AKURU DOUBLE DANDA..DIVES AKURU END OF TEXT MARK
+11950..11959   ; R  # Nd    [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE
 119A0..119A7   ; R  # Lo     [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR
 119AA..119D0   ; R  # Lo    [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA
 119D1..119D3   ; R  # Mc     [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II
@@ -1982,6 +2016,7 @@ FFFC..FFFD     ; U  # So     [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARA
 11EF3..11EF4   ; R  # Mn     [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U
 11EF5..11EF6   ; R  # Mc     [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O
 11EF7..11EF8   ; R  # Po     [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION
+11FB0          ; R  # Lo         LISU LETTER YHA
 11FC0..11FD4   ; R  # No    [21] TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH..TAMIL FRACTION DOWNSCALING FACTOR KIIZH
 11FD5..11FDC   ; R  # So     [8] TAMIL SIGN NEL..TAMIL SIGN MUKKURUNI
 11FDD..11FE0   ; R  # Sc     [4] TAMIL SIGN KAACU..TAMIL SIGN VARAAKAN
@@ -2027,11 +2062,17 @@ FFFC..FFFD     ; U  # So     [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARA
 16FE0..16FE1   ; U  # Lm     [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK
 16FE2          ; U  # Po         OLD CHINESE HOOK MARK
 16FE3          ; U  # Lm         OLD CHINESE ITERATION MARK
-16FE4..16FFF   ; U  # Cn    [28] <reserved-16FE4>..<reserved-16FFF>
+16FE4          ; U  # Lo         KHITAN SMALL SCRIPT FILLER
+16FE5..16FEF   ; U  # Cn    [11] <reserved-16FE5>..<reserved-16FEF>
+16FF0..16FF1   ; U  # Mc     [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY
+16FF2..16FFF   ; U  # Cn    [14] <reserved-16FF2>..<reserved-16FFF>
 17000..187F7   ; U  # Lo  [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7
 187F8..187FF   ; U  # Cn     [8] <reserved-187F8>..<reserved-187FF>
-18800..18AF2   ; U  # Lo   [755] TANGUT COMPONENT-001..TANGUT COMPONENT-755
-18AF3..18AFF   ; U  # Cn    [13] <reserved-18AF3>..<reserved-18AFF>
+18800..18AFF   ; U  # Lo   [768] TANGUT COMPONENT-001..TANGUT COMPONENT-768
+18B00..18CD5   ; U  # Lo   [470] KHITAN SMALL SCRIPT CHARACTER-18B00..KHITAN SMALL SCRIPT CHARACTER-18CD5
+18CD6..18CFF   ; U  # Cn    [42] <reserved-18CD6>..<reserved-18CFF>
+18D00..18D08   ; U  # Lo     [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08
+18D09..18D8F   ; U  # Cn   [135] <reserved-18D09>..<reserved-18D8F>
 1B000..1B0FF   ; U  # Lo   [256] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER RE-2
 1B100..1B11E   ; U  # Lo    [31] HENTAIGANA LETTER RE-3..HENTAIGANA LETTER N-MU-MO-2
 1B11F..1B12F   ; U  # Cn    [17] <reserved-1B11F>..<reserved-1B12F>
@@ -2209,11 +2250,8 @@ FFFC..FFFD     ; U  # So     [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARA
 1F0D1..1F0F5   ; U  # So    [37] PLAYING CARD ACE OF CLUBS..PLAYING CARD TRUMP-21
 1F0F6..1F0FF   ; U  # Cn    [10] <reserved-1F0F6>..<reserved-1F0FF>
 1F100..1F10C   ; U  # No    [13] DIGIT ZERO FULL STOP..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO
-1F10D..1F10F   ; U  # Cn     [3] <reserved-1F10D>..<reserved-1F10F>
-1F110..1F16C   ; U  # So    [93] PARENTHESIZED LATIN CAPITAL LETTER A..RAISED MR SIGN
-1F16D..1F16F   ; U  # Cn     [3] <reserved-1F16D>..<reserved-1F16F>
-1F170..1F1AC   ; U  # So    [61] NEGATIVE SQUARED LATIN CAPITAL LETTER A..SQUARED VOD
-1F1AD..1F1E5   ; U  # Cn    [57] <reserved-1F1AD>..<reserved-1F1E5>
+1F10D..1F1AD   ; U  # So   [161] CIRCLED ZERO WITH SLASH..MASK WORK SYMBOL
+1F1AE..1F1E5   ; U  # Cn    [56] <reserved-1F1AE>..<reserved-1F1E5>
 1F1E6..1F1FF   ; U  # So    [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z
 1F200..1F201   ; Tu # So     [2] SQUARE HIRAGANA HOKA..SQUARED KATAKANA KOKO
 1F202          ; U  # So         SQUARED KATAKANA SA
@@ -2231,12 +2269,12 @@ FFFC..FFFD     ; U  # So     [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARA
 1F400..1F5FF   ; U  # So   [512] RAT..MOYAI
 1F600..1F64F   ; U  # So    [80] GRINNING FACE..PERSON WITH FOLDED HANDS
 1F650..1F67F   ; U  # So    [48] NORTH WEST POINTING LEAF..REVERSE CHECKER BOARD
-1F680..1F6D5   ; U  # So    [86] ROCKET..HINDU TEMPLE
-1F6D6..1F6DF   ; U  # Cn    [10] <reserved-1F6D6>..<reserved-1F6DF>
+1F680..1F6D7   ; U  # So    [88] ROCKET..ELEVATOR
+1F6D8..1F6DF   ; U  # Cn     [8] <reserved-1F6D8>..<reserved-1F6DF>
 1F6E0..1F6EC   ; U  # So    [13] HAMMER AND WRENCH..AIRPLANE ARRIVING
 1F6ED..1F6EF   ; U  # Cn     [3] <reserved-1F6ED>..<reserved-1F6EF>
-1F6F0..1F6FA   ; U  # So    [11] SATELLITE..AUTO RICKSHAW
-1F6FB..1F6FF   ; U  # Cn     [5] <reserved-1F6FB>..<reserved-1F6FF>
+1F6F0..1F6FC   ; U  # So    [13] SATELLITE..ROLLER SKATE
+1F6FD..1F6FF   ; U  # Cn     [3] <reserved-1F6FD>..<reserved-1F6FF>
 1F700..1F773   ; U  # So   [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE
 1F774..1F77F   ; U  # Cn    [12] <reserved-1F774>..<reserved-1F77F>
 1F780..1F7D8   ; U  # So    [89] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..NEGATIVE CIRCLED SQUARE
@@ -2248,33 +2286,35 @@ FFFC..FFFD     ; U  # So     [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARA
 1F850..1F859   ; R  # So    [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW
 1F860..1F887   ; R  # So    [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW
 1F890..1F8AD   ; R  # So    [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS
-1F900..1F90B   ; U  # So    [12] CIRCLED CROSS FORMEE WITH FOUR DOTS..DOWNWARD FACING NOTCHED HOOK WITH DOT
-1F90C          ; U  # Cn         <reserved-1F90C>
-1F90D..1F971   ; U  # So   [101] WHITE HEART..YAWNING FACE
-1F972          ; U  # Cn         <reserved-1F972>
-1F973..1F976   ; U  # So     [4] FACE WITH PARTY HORN AND PARTY HAT..FREEZING FACE
-1F977..1F979   ; U  # Cn     [3] <reserved-1F977>..<reserved-1F979>
-1F97A..1F9A2   ; U  # So    [41] FACE WITH PLEADING EYES..SWAN
-1F9A3..1F9A4   ; U  # Cn     [2] <reserved-1F9A3>..<reserved-1F9A4>
-1F9A5..1F9AA   ; U  # So     [6] SLOTH..OYSTER
-1F9AB..1F9AD   ; U  # Cn     [3] <reserved-1F9AB>..<reserved-1F9AD>
-1F9AE..1F9CA   ; U  # So    [29] GUIDE DOG..ICE CUBE
-1F9CB..1F9CC   ; U  # Cn     [2] <reserved-1F9CB>..<reserved-1F9CC>
+1F8B0..1F8B1   ; R  # So     [2] ARROW POINTING UPWARDS THEN NORTH WEST..ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST
+1F900..1F978   ; U  # So   [121] CIRCLED CROSS FORMEE WITH FOUR DOTS..DISGUISED FACE
+1F979          ; U  # Cn         <reserved-1F979>
+1F97A..1F9CB   ; U  # So    [82] FACE WITH PLEADING EYES..BUBBLE TEA
+1F9CC          ; U  # Cn         <reserved-1F9CC>
 1F9CD..1F9FF   ; U  # So    [51] STANDING PERSON..NAZAR AMULET
 1FA00..1FA53   ; U  # So    [84] NEUTRAL CHESS KING..BLACK CHESS KNIGHT-BISHOP
 1FA54..1FA5F   ; U  # Cn    [12] <reserved-1FA54>..<reserved-1FA5F>
 1FA60..1FA6D   ; U  # So    [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER
 1FA6E..1FA6F   ; U  # Cn     [2] <reserved-1FA6E>..<reserved-1FA6F>
-1FA70..1FA73   ; U  # So     [4] BALLET SHOES..SHORTS
-1FA74..1FA77   ; U  # Cn     [4] <reserved-1FA74>..<reserved-1FA77>
+1FA70..1FA74   ; U  # So     [5] BALLET SHOES..THONG SANDAL
+1FA75..1FA77   ; U  # Cn     [3] <reserved-1FA75>..<reserved-1FA77>
 1FA78..1FA7A   ; U  # So     [3] DROP OF BLOOD..STETHOSCOPE
 1FA7B..1FA7F   ; U  # Cn     [5] <reserved-1FA7B>..<reserved-1FA7F>
-1FA80..1FA82   ; U  # So     [3] YO-YO..PARACHUTE
-1FA83..1FA8F   ; U  # Cn    [13] <reserved-1FA83>..<reserved-1FA8F>
-1FA90..1FA95   ; U  # So     [6] RINGED PLANET..BANJO
-1FA96..1FA9F   ; U  # Cn    [10] <reserved-1FA96>..<reserved-1FA9F>
-20000..2A6D6   ; U  # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
-2A6D7..2A6FF   ; U  # Cn    [41] <reserved-2A6D7>..<reserved-2A6FF>
+1FA80..1FA86   ; U  # So     [7] YO-YO..NESTING DOLLS
+1FA87..1FA8F   ; U  # Cn     [9] <reserved-1FA87>..<reserved-1FA8F>
+1FA90..1FAA8   ; U  # So    [25] RINGED PLANET..ROCK
+1FAA9..1FAAF   ; U  # Cn     [7] <reserved-1FAA9>..<reserved-1FAAF>
+1FAB0..1FAB6   ; U  # So     [7] FLY..FEATHER
+1FAB7..1FABF   ; U  # Cn     [9] <reserved-1FAB7>..<reserved-1FABF>
+1FAC0..1FAC2   ; U  # So     [3] ANATOMICAL HEART..PEOPLE HUGGING
+1FAC3..1FACF   ; U  # Cn    [13] <reserved-1FAC3>..<reserved-1FACF>
+1FAD0..1FAD6   ; U  # So     [7] BLUEBERRIES..TEAPOT
+1FAD7..1FAFF   ; U  # Cn    [41] <reserved-1FAD7>..<reserved-1FAFF>
+1FB00..1FB92   ; R  # So   [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK
+1FB94..1FBCA   ; R  # So    [55] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON
+1FBF0..1FBF9   ; R  # Nd    [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
+20000..2A6DD   ; U  # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD
+2A6DE..2A6FF   ; U  # Cn    [34] <reserved-2A6DE>..<reserved-2A6FF>
 2A700..2B734   ; U  # Lo  [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
 2B735..2B73F   ; U  # Cn    [11] <reserved-2B735>..<reserved-2B73F>
 2B740..2B81D   ; U  # Lo   [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
@@ -2285,7 +2325,9 @@ FFFC..FFFD     ; U  # So     [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARA
 2EBE1..2F7FF   ; U  # Cn  [3103] <reserved-2EBE1>..<reserved-2F7FF>
 2F800..2FA1D   ; U  # Lo   [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
 2FA1E..2FFFD   ; U  # Cn  [1504] <reserved-2FA1E>..<reserved-2FFFD>
-30000..3FFFD   ; U  # Cn [65534] <reserved-30000>..<reserved-3FFFD>
+30000..3134A   ; U  # Lo  [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
+3134B..3134F   ; U  # Cn     [5] <reserved-3134B>..<reserved-3134F>
+31350..3FFFD   ; U  # Cn [60590] <reserved-31350>..<reserved-3FFFD>
 E0001          ; R  # Cf         LANGUAGE TAG
 E0020..E007F   ; R  # Cf    [96] TAG SPACE..CANCEL TAG
 E0100..E01EF   ; R  # Mn   [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
diff --git a/gnu/usr.bin/perl/lib/unicore/emoji/emoji.txt b/gnu/usr.bin/perl/lib/unicore/emoji/emoji.txt
new file mode 100644 (file)
index 0000000..5d7dc1b
--- /dev/null
@@ -0,0 +1,1261 @@
+# emoji-data.txt
+# Date: 2020-01-28, 20:52:38 GMT
+# © 2020 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
+# Emoji Data for UTS #51
+# Version: 13.0
+#
+# For documentation and usage, see http://www.unicode.org/reports/tr51
+#
+# Format: 
+# <codepoint(s)> ; <property> # <comments> 
+# Note: there is no guarantee as to the structure of whitespace or comments
+#
+# Characters and sequences are listed in code point order. Users should be shown a more natural order.
+# See the CLDR collation order for Emoji.
+
+
+# ================================================
+
+# All omitted code points have Emoji=No 
+# @missing: 0000..10FFFF  ; Emoji ; No
+
+0023          ; Emoji                # E0.0   [1] (#️)       number sign
+002A          ; Emoji                # E0.0   [1] (*️)       asterisk
+0030..0039    ; Emoji                # E0.0  [10] (0️..9️)    digit zero..digit nine
+00A9          ; Emoji                # E0.6   [1] (©️)       copyright
+00AE          ; Emoji                # E0.6   [1] (®️)       registered
+203C          ; Emoji                # E0.6   [1] (‼️)       double exclamation mark
+2049          ; Emoji                # E0.6   [1] (⁉️)       exclamation question mark
+2122          ; Emoji                # E0.6   [1] (™️)       trade mark
+2139          ; Emoji                # E0.6   [1] (ℹ️)       information
+2194..2199    ; Emoji                # E0.6   [6] (↔️..↙️)    left-right arrow..down-left arrow
+21A9..21AA    ; Emoji                # E0.6   [2] (↩️..↪️)    right arrow curving left..left arrow curving right
+231A..231B    ; Emoji                # E0.6   [2] (⌚..⌛)    watch..hourglass done
+2328          ; Emoji                # E1.0   [1] (⌨️)       keyboard
+23CF          ; Emoji                # E1.0   [1] (⏏️)       eject button
+23E9..23EC    ; Emoji                # E0.6   [4] (⏩..⏬)    fast-forward button..fast down button
+23ED..23EE    ; Emoji                # E0.7   [2] (⏭️..⏮️)    next track button..last track button
+23EF          ; Emoji                # E1.0   [1] (⏯️)       play or pause button
+23F0          ; Emoji                # E0.6   [1] (⏰)       alarm clock
+23F1..23F2    ; Emoji                # E1.0   [2] (⏱️..⏲️)    stopwatch..timer clock
+23F3          ; Emoji                # E0.6   [1] (⏳)       hourglass not done
+23F8..23FA    ; Emoji                # E0.7   [3] (⏸️..⏺️)    pause button..record button
+24C2          ; Emoji                # E0.6   [1] (Ⓜ️)       circled M
+25AA..25AB    ; Emoji                # E0.6   [2] (▪️..▫️)    black small square..white small square
+25B6          ; Emoji                # E0.6   [1] (▶️)       play button
+25C0          ; Emoji                # E0.6   [1] (◀️)       reverse button
+25FB..25FE    ; Emoji                # E0.6   [4] (◻️..◾)    white medium square..black medium-small square
+2600..2601    ; Emoji                # E0.6   [2] (☀️..☁️)    sun..cloud
+2602..2603    ; Emoji                # E0.7   [2] (☂️..☃️)    umbrella..snowman
+2604          ; Emoji                # E1.0   [1] (☄️)       comet
+260E          ; Emoji                # E0.6   [1] (☎️)       telephone
+2611          ; Emoji                # E0.6   [1] (☑️)       check box with check
+2614..2615    ; Emoji                # E0.6   [2] (☔..☕)    umbrella with rain drops..hot beverage
+2618          ; Emoji                # E1.0   [1] (☘️)       shamrock
+261D          ; Emoji                # E0.6   [1] (☝️)       index pointing up
+2620          ; Emoji                # E1.0   [1] (☠️)       skull and crossbones
+2622..2623    ; Emoji                # E1.0   [2] (☢️..☣️)    radioactive..biohazard
+2626          ; Emoji                # E1.0   [1] (☦️)       orthodox cross
+262A          ; Emoji                # E0.7   [1] (☪️)       star and crescent
+262E          ; Emoji                # E1.0   [1] (☮️)       peace symbol
+262F          ; Emoji                # E0.7   [1] (☯️)       yin yang
+2638..2639    ; Emoji                # E0.7   [2] (☸️..☹️)    wheel of dharma..frowning face
+263A          ; Emoji                # E0.6   [1] (☺️)       smiling face
+2640          ; Emoji                # E4.0   [1] (♀️)       female sign
+2642          ; Emoji                # E4.0   [1] (♂️)       male sign
+2648..2653    ; Emoji                # E0.6  [12] (♈..♓)    Aries..Pisces
+265F          ; Emoji                # E11.0  [1] (♟️)       chess pawn
+2660          ; Emoji                # E0.6   [1] (♠️)       spade suit
+2663          ; Emoji                # E0.6   [1] (♣️)       club suit
+2665..2666    ; Emoji                # E0.6   [2] (♥️..♦️)    heart suit..diamond suit
+2668          ; Emoji                # E0.6   [1] (♨️)       hot springs
+267B          ; Emoji                # E0.6   [1] (♻️)       recycling symbol
+267E          ; Emoji                # E11.0  [1] (♾️)       infinity
+267F          ; Emoji                # E0.6   [1] (♿)       wheelchair symbol
+2692          ; Emoji                # E1.0   [1] (⚒️)       hammer and pick
+2693          ; Emoji                # E0.6   [1] (⚓)       anchor
+2694          ; Emoji                # E1.0   [1] (⚔️)       crossed swords
+2695          ; Emoji                # E4.0   [1] (⚕️)       medical symbol
+2696..2697    ; Emoji                # E1.0   [2] (⚖️..⚗️)    balance scale..alembic
+2699          ; Emoji                # E1.0   [1] (⚙️)       gear
+269B..269C    ; Emoji                # E1.0   [2] (⚛️..⚜️)    atom symbol..fleur-de-lis
+26A0..26A1    ; Emoji                # E0.6   [2] (⚠️..⚡)    warning..high voltage
+26A7          ; Emoji                # E13.0  [1] (⚧️)       transgender symbol
+26AA..26AB    ; Emoji                # E0.6   [2] (⚪..⚫)    white circle..black circle
+26B0..26B1    ; Emoji                # E1.0   [2] (⚰️..⚱️)    coffin..funeral urn
+26BD..26BE    ; Emoji                # E0.6   [2] (⚽..⚾)    soccer ball..baseball
+26C4..26C5    ; Emoji                # E0.6   [2] (⛄..⛅)    snowman without snow..sun behind cloud
+26C8          ; Emoji                # E0.7   [1] (⛈️)       cloud with lightning and rain
+26CE          ; Emoji                # E0.6   [1] (⛎)       Ophiuchus
+26CF          ; Emoji                # E0.7   [1] (⛏️)       pick
+26D1          ; Emoji                # E0.7   [1] (⛑️)       rescue worker’s helmet
+26D3          ; Emoji                # E0.7   [1] (⛓️)       chains
+26D4          ; Emoji                # E0.6   [1] (⛔)       no entry
+26E9          ; Emoji                # E0.7   [1] (⛩️)       shinto shrine
+26EA          ; Emoji                # E0.6   [1] (⛪)       church
+26F0..26F1    ; Emoji                # E0.7   [2] (⛰️..⛱️)    mountain..umbrella on ground
+26F2..26F3    ; Emoji                # E0.6   [2] (⛲..⛳)    fountain..flag in hole
+26F4          ; Emoji                # E0.7   [1] (⛴️)       ferry
+26F5          ; Emoji                # E0.6   [1] (⛵)       sailboat
+26F7..26F9    ; Emoji                # E0.7   [3] (⛷️..⛹️)    skier..person bouncing ball
+26FA          ; Emoji                # E0.6   [1] (⛺)       tent
+26FD          ; Emoji                # E0.6   [1] (⛽)       fuel pump
+2702          ; Emoji                # E0.6   [1] (✂️)       scissors
+2705          ; Emoji                # E0.6   [1] (✅)       check mark button
+2708..270C    ; Emoji                # E0.6   [5] (✈️..✌️)    airplane..victory hand
+270D          ; Emoji                # E0.7   [1] (✍️)       writing hand
+270F          ; Emoji                # E0.6   [1] (✏️)       pencil
+2712          ; Emoji                # E0.6   [1] (✒️)       black nib
+2714          ; Emoji                # E0.6   [1] (✔️)       check mark
+2716          ; Emoji                # E0.6   [1] (✖️)       multiply
+271D          ; Emoji                # E0.7   [1] (✝️)       latin cross
+2721          ; Emoji                # E0.7   [1] (✡️)       star of David
+2728          ; Emoji                # E0.6   [1] (✨)       sparkles
+2733..2734    ; Emoji                # E0.6   [2] (✳️..✴️)    eight-spoked asterisk..eight-pointed star
+2744          ; Emoji                # E0.6   [1] (❄️)       snowflake
+2747          ; Emoji                # E0.6   [1] (❇️)       sparkle
+274C          ; Emoji                # E0.6   [1] (❌)       cross mark
+274E          ; Emoji                # E0.6   [1] (❎)       cross mark button
+2753..2755    ; Emoji                # E0.6   [3] (❓..❕)    question mark..white exclamation mark
+2757          ; Emoji                # E0.6   [1] (❗)       exclamation mark
+2763          ; Emoji                # E1.0   [1] (❣️)       heart exclamation
+2764          ; Emoji                # E0.6   [1] (❤️)       red heart
+2795..2797    ; Emoji                # E0.6   [3] (➕..➗)    plus..divide
+27A1          ; Emoji                # E0.6   [1] (➡️)       right arrow
+27B0          ; Emoji                # E0.6   [1] (➰)       curly loop
+27BF          ; Emoji                # E1.0   [1] (➿)       double curly loop
+2934..2935    ; Emoji                # E0.6   [2] (⤴️..⤵️)    right arrow curving up..right arrow curving down
+2B05..2B07    ; Emoji                # E0.6   [3] (⬅️..⬇️)    left arrow..down arrow
+2B1B..2B1C    ; Emoji                # E0.6   [2] (⬛..⬜)    black large square..white large square
+2B50          ; Emoji                # E0.6   [1] (⭐)       star
+2B55          ; Emoji                # E0.6   [1] (⭕)       hollow red circle
+3030          ; Emoji                # E0.6   [1] (〰️)       wavy dash
+303D          ; Emoji                # E0.6   [1] (〽️)       part alternation mark
+3297          ; Emoji                # E0.6   [1] (㊗️)       Japanese “congratulations” button
+3299          ; Emoji                # E0.6   [1] (㊙️)       Japanese “secret” button
+1F004         ; Emoji                # E0.6   [1] (🀄)       mahjong red dragon
+1F0CF         ; Emoji                # E0.6   [1] (🃏)       joker
+1F170..1F171  ; Emoji                # E0.6   [2] (🅰️..🅱️)    A button (blood type)..B button (blood type)
+1F17E..1F17F  ; Emoji                # E0.6   [2] (🅾️..🅿️)    O button (blood type)..P button
+1F18E         ; Emoji                # E0.6   [1] (🆎)       AB button (blood type)
+1F191..1F19A  ; Emoji                # E0.6  [10] (🆑..🆚)    CL button..VS button
+1F1E6..1F1FF  ; Emoji                # E0.0  [26] (🇦..🇿)    regional indicator symbol letter a..regional indicator symbol letter z
+1F201..1F202  ; Emoji                # E0.6   [2] (🈁..🈂️)    Japanese “here” button..Japanese “service charge” button
+1F21A         ; Emoji                # E0.6   [1] (🈚)       Japanese “free of charge” button
+1F22F         ; Emoji                # E0.6   [1] (🈯)       Japanese “reserved” button
+1F232..1F23A  ; Emoji                # E0.6   [9] (🈲..🈺)    Japanese “prohibited” button..Japanese “open for business” button
+1F250..1F251  ; Emoji                # E0.6   [2] (🉐..🉑)    Japanese “bargain” button..Japanese “acceptable” button
+1F300..1F30C  ; Emoji                # E0.6  [13] (🌀..🌌)    cyclone..milky way
+1F30D..1F30E  ; Emoji                # E0.7   [2] (🌍..🌎)    globe showing Europe-Africa..globe showing Americas
+1F30F         ; Emoji                # E0.6   [1] (🌏)       globe showing Asia-Australia
+1F310         ; Emoji                # E1.0   [1] (🌐)       globe with meridians
+1F311         ; Emoji                # E0.6   [1] (🌑)       new moon
+1F312         ; Emoji                # E1.0   [1] (🌒)       waxing crescent moon
+1F313..1F315  ; Emoji                # E0.6   [3] (🌓..🌕)    first quarter moon..full moon
+1F316..1F318  ; Emoji                # E1.0   [3] (🌖..🌘)    waning gibbous moon..waning crescent moon
+1F319         ; Emoji                # E0.6   [1] (🌙)       crescent moon
+1F31A         ; Emoji                # E1.0   [1] (🌚)       new moon face
+1F31B         ; Emoji                # E0.6   [1] (🌛)       first quarter moon face
+1F31C         ; Emoji                # E0.7   [1] (🌜)       last quarter moon face
+1F31D..1F31E  ; Emoji                # E1.0   [2] (🌝..🌞)    full moon face..sun with face
+1F31F..1F320  ; Emoji                # E0.6   [2] (🌟..🌠)    glowing star..shooting star
+1F321         ; Emoji                # E0.7   [1] (🌡️)       thermometer
+1F324..1F32C  ; Emoji                # E0.7   [9] (🌤️..🌬️)    sun behind small cloud..wind face
+1F32D..1F32F  ; Emoji                # E1.0   [3] (🌭..🌯)    hot dog..burrito
+1F330..1F331  ; Emoji                # E0.6   [2] (🌰..🌱)    chestnut..seedling
+1F332..1F333  ; Emoji                # E1.0   [2] (🌲..🌳)    evergreen tree..deciduous tree
+1F334..1F335  ; Emoji                # E0.6   [2] (🌴..🌵)    palm tree..cactus
+1F336         ; Emoji                # E0.7   [1] (🌶️)       hot pepper
+1F337..1F34A  ; Emoji                # E0.6  [20] (🌷..🍊)    tulip..tangerine
+1F34B         ; Emoji                # E1.0   [1] (🍋)       lemon
+1F34C..1F34F  ; Emoji                # E0.6   [4] (🍌..🍏)    banana..green apple
+1F350         ; Emoji                # E1.0   [1] (🍐)       pear
+1F351..1F37B  ; Emoji                # E0.6  [43] (🍑..🍻)    peach..clinking beer mugs
+1F37C         ; Emoji                # E1.0   [1] (🍼)       baby bottle
+1F37D         ; Emoji                # E0.7   [1] (🍽️)       fork and knife with plate
+1F37E..1F37F  ; Emoji                # E1.0   [2] (🍾..🍿)    bottle with popping cork..popcorn
+1F380..1F393  ; Emoji                # E0.6  [20] (🎀..🎓)    ribbon..graduation cap
+1F396..1F397  ; Emoji                # E0.7   [2] (🎖️..🎗️)    military medal..reminder ribbon
+1F399..1F39B  ; Emoji                # E0.7   [3] (🎙️..🎛️)    studio microphone..control knobs
+1F39E..1F39F  ; Emoji                # E0.7   [2] (🎞️..🎟️)    film frames..admission tickets
+1F3A0..1F3C4  ; Emoji                # E0.6  [37] (🎠..🏄)    carousel horse..person surfing
+1F3C5         ; Emoji                # E1.0   [1] (🏅)       sports medal
+1F3C6         ; Emoji                # E0.6   [1] (🏆)       trophy
+1F3C7         ; Emoji                # E1.0   [1] (🏇)       horse racing
+1F3C8         ; Emoji                # E0.6   [1] (🏈)       american football
+1F3C9         ; Emoji                # E1.0   [1] (🏉)       rugby football
+1F3CA         ; Emoji                # E0.6   [1] (🏊)       person swimming
+1F3CB..1F3CE  ; Emoji                # E0.7   [4] (🏋️..🏎️)    person lifting weights..racing car
+1F3CF..1F3D3  ; Emoji                # E1.0   [5] (🏏..🏓)    cricket game..ping pong
+1F3D4..1F3DF  ; Emoji                # E0.7  [12] (🏔️..🏟️)    snow-capped mountain..stadium
+1F3E0..1F3E3  ; Emoji                # E0.6   [4] (🏠..🏣)    house..Japanese post office
+1F3E4         ; Emoji                # E1.0   [1] (🏤)       post office
+1F3E5..1F3F0  ; Emoji                # E0.6  [12] (🏥..🏰)    hospital..castle
+1F3F3         ; Emoji                # E0.7   [1] (🏳️)       white flag
+1F3F4         ; Emoji                # E1.0   [1] (🏴)       black flag
+1F3F5         ; Emoji                # E0.7   [1] (🏵️)       rosette
+1F3F7         ; Emoji                # E0.7   [1] (🏷️)       label
+1F3F8..1F407  ; Emoji                # E1.0  [16] (🏸..🐇)    badminton..rabbit
+1F408         ; Emoji                # E0.7   [1] (🐈)       cat
+1F409..1F40B  ; Emoji                # E1.0   [3] (🐉..🐋)    dragon..whale
+1F40C..1F40E  ; Emoji                # E0.6   [3] (🐌..🐎)    snail..horse
+1F40F..1F410  ; Emoji                # E1.0   [2] (🐏..🐐)    ram..goat
+1F411..1F412  ; Emoji                # E0.6   [2] (🐑..🐒)    ewe..monkey
+1F413         ; Emoji                # E1.0   [1] (🐓)       rooster
+1F414         ; Emoji                # E0.6   [1] (🐔)       chicken
+1F415         ; Emoji                # E0.7   [1] (🐕)       dog
+1F416         ; Emoji                # E1.0   [1] (🐖)       pig
+1F417..1F429  ; Emoji                # E0.6  [19] (🐗..🐩)    boar..poodle
+1F42A         ; Emoji                # E1.0   [1] (🐪)       camel
+1F42B..1F43E  ; Emoji                # E0.6  [20] (🐫..🐾)    two-hump camel..paw prints
+1F43F         ; Emoji                # E0.7   [1] (🐿️)       chipmunk
+1F440         ; Emoji                # E0.6   [1] (👀)       eyes
+1F441         ; Emoji                # E0.7   [1] (👁️)       eye
+1F442..1F464  ; Emoji                # E0.6  [35] (👂..👤)    ear..bust in silhouette
+1F465         ; Emoji                # E1.0   [1] (👥)       busts in silhouette
+1F466..1F46B  ; Emoji                # E0.6   [6] (👦..👫)    boy..woman and man holding hands
+1F46C..1F46D  ; Emoji                # E1.0   [2] (👬..👭)    men holding hands..women holding hands
+1F46E..1F4AC  ; Emoji                # E0.6  [63] (👮..💬)    police officer..speech balloon
+1F4AD         ; Emoji                # E1.0   [1] (💭)       thought balloon
+1F4AE..1F4B5  ; Emoji                # E0.6   [8] (💮..💵)    white flower..dollar banknote
+1F4B6..1F4B7  ; Emoji                # E1.0   [2] (💶..💷)    euro banknote..pound banknote
+1F4B8..1F4EB  ; Emoji                # E0.6  [52] (💸..📫)    money with wings..closed mailbox with raised flag
+1F4EC..1F4ED  ; Emoji                # E0.7   [2] (📬..📭)    open mailbox with raised flag..open mailbox with lowered flag
+1F4EE         ; Emoji                # E0.6   [1] (📮)       postbox
+1F4EF         ; Emoji                # E1.0   [1] (📯)       postal horn
+1F4F0..1F4F4  ; Emoji                # E0.6   [5] (📰..📴)    newspaper..mobile phone off
+1F4F5         ; Emoji                # E1.0   [1] (📵)       no mobile phones
+1F4F6..1F4F7  ; Emoji                # E0.6   [2] (📶..📷)    antenna bars..camera
+1F4F8         ; Emoji                # E1.0   [1] (📸)       camera with flash
+1F4F9..1F4FC  ; Emoji                # E0.6   [4] (📹..📼)    video camera..videocassette
+1F4FD         ; Emoji                # E0.7   [1] (📽️)       film projector
+1F4FF..1F502  ; Emoji                # E1.0   [4] (📿..🔂)    prayer beads..repeat single button
+1F503         ; Emoji                # E0.6   [1] (🔃)       clockwise vertical arrows
+1F504..1F507  ; Emoji                # E1.0   [4] (🔄..🔇)    counterclockwise arrows button..muted speaker
+1F508         ; Emoji                # E0.7   [1] (🔈)       speaker low volume
+1F509         ; Emoji                # E1.0   [1] (🔉)       speaker medium volume
+1F50A..1F514  ; Emoji                # E0.6  [11] (🔊..🔔)    speaker high volume..bell
+1F515         ; Emoji                # E1.0   [1] (🔕)       bell with slash
+1F516..1F52B  ; Emoji                # E0.6  [22] (🔖..🔫)    bookmark..pistol
+1F52C..1F52D  ; Emoji                # E1.0   [2] (🔬..🔭)    microscope..telescope
+1F52E..1F53D  ; Emoji                # E0.6  [16] (🔮..🔽)    crystal ball..downwards button
+1F549..1F54A  ; Emoji                # E0.7   [2] (🕉️..🕊️)    om..dove
+1F54B..1F54E  ; Emoji                # E1.0   [4] (🕋..🕎)    kaaba..menorah
+1F550..1F55B  ; Emoji                # E0.6  [12] (🕐..🕛)    one o’clock..twelve o’clock
+1F55C..1F567  ; Emoji                # E0.7  [12] (🕜..🕧)    one-thirty..twelve-thirty
+1F56F..1F570  ; Emoji                # E0.7   [2] (🕯️..🕰️)    candle..mantelpiece clock
+1F573..1F579  ; Emoji                # E0.7   [7] (🕳️..🕹️)    hole..joystick
+1F57A         ; Emoji                # E3.0   [1] (🕺)       man dancing
+1F587         ; Emoji                # E0.7   [1] (🖇️)       linked paperclips
+1F58A..1F58D  ; Emoji                # E0.7   [4] (🖊️..🖍️)    pen..crayon
+1F590         ; Emoji                # E0.7   [1] (🖐️)       hand with fingers splayed
+1F595..1F596  ; Emoji                # E1.0   [2] (🖕..🖖)    middle finger..vulcan salute
+1F5A4         ; Emoji                # E3.0   [1] (🖤)       black heart
+1F5A5         ; Emoji                # E0.7   [1] (🖥️)       desktop computer
+1F5A8         ; Emoji                # E0.7   [1] (🖨️)       printer
+1F5B1..1F5B2  ; Emoji                # E0.7   [2] (🖱️..🖲️)    computer mouse..trackball
+1F5BC         ; Emoji                # E0.7   [1] (🖼️)       framed picture
+1F5C2..1F5C4  ; Emoji                # E0.7   [3] (🗂️..🗄️)    card index dividers..file cabinet
+1F5D1..1F5D3  ; Emoji                # E0.7   [3] (🗑️..🗓️)    wastebasket..spiral calendar
+1F5DC..1F5DE  ; Emoji                # E0.7   [3] (🗜️..🗞️)    clamp..rolled-up newspaper
+1F5E1         ; Emoji                # E0.7   [1] (🗡️)       dagger
+1F5E3         ; Emoji                # E0.7   [1] (🗣️)       speaking head
+1F5E8         ; Emoji                # E2.0   [1] (🗨️)       left speech bubble
+1F5EF         ; Emoji                # E0.7   [1] (🗯️)       right anger bubble
+1F5F3         ; Emoji                # E0.7   [1] (🗳️)       ballot box with ballot
+1F5FA         ; Emoji                # E0.7   [1] (🗺️)       world map
+1F5FB..1F5FF  ; Emoji                # E0.6   [5] (🗻..🗿)    mount fuji..moai
+1F600         ; Emoji                # E1.0   [1] (😀)       grinning face
+1F601..1F606  ; Emoji                # E0.6   [6] (😁..😆)    beaming face with smiling eyes..grinning squinting face
+1F607..1F608  ; Emoji                # E1.0   [2] (😇..😈)    smiling face with halo..smiling face with horns
+1F609..1F60D  ; Emoji                # E0.6   [5] (😉..😍)    winking face..smiling face with heart-eyes
+1F60E         ; Emoji                # E1.0   [1] (😎)       smiling face with sunglasses
+1F60F         ; Emoji                # E0.6   [1] (😏)       smirking face
+1F610         ; Emoji                # E0.7   [1] (😐)       neutral face
+1F611         ; Emoji                # E1.0   [1] (😑)       expressionless face
+1F612..1F614  ; Emoji                # E0.6   [3] (😒..😔)    unamused face..pensive face
+1F615         ; Emoji                # E1.0   [1] (😕)       confused face
+1F616         ; Emoji                # E0.6   [1] (😖)       confounded face
+1F617         ; Emoji                # E1.0   [1] (😗)       kissing face
+1F618         ; Emoji                # E0.6   [1] (😘)       face blowing a kiss
+1F619         ; Emoji                # E1.0   [1] (😙)       kissing face with smiling eyes
+1F61A         ; Emoji                # E0.6   [1] (😚)       kissing face with closed eyes
+1F61B         ; Emoji                # E1.0   [1] (😛)       face with tongue
+1F61C..1F61E  ; Emoji                # E0.6   [3] (😜..😞)    winking face with tongue..disappointed face
+1F61F         ; Emoji                # E1.0   [1] (😟)       worried face
+1F620..1F625  ; Emoji                # E0.6   [6] (😠..😥)    angry face..sad but relieved face
+1F626..1F627  ; Emoji                # E1.0   [2] (😦..😧)    frowning face with open mouth..anguished face
+1F628..1F62B  ; Emoji                # E0.6   [4] (😨..😫)    fearful face..tired face
+1F62C         ; Emoji                # E1.0   [1] (😬)       grimacing face
+1F62D         ; Emoji                # E0.6   [1] (😭)       loudly crying face
+1F62E..1F62F  ; Emoji                # E1.0   [2] (😮..😯)    face with open mouth..hushed face
+1F630..1F633  ; Emoji                # E0.6   [4] (😰..😳)    anxious face with sweat..flushed face
+1F634         ; Emoji                # E1.0   [1] (😴)       sleeping face
+1F635         ; Emoji                # E0.6   [1] (😵)       dizzy face
+1F636         ; Emoji                # E1.0   [1] (😶)       face without mouth
+1F637..1F640  ; Emoji                # E0.6  [10] (😷..🙀)    face with medical mask..weary cat
+1F641..1F644  ; Emoji                # E1.0   [4] (🙁..🙄)    slightly frowning face..face with rolling eyes
+1F645..1F64F  ; Emoji                # E0.6  [11] (🙅..🙏)    person gesturing NO..folded hands
+1F680         ; Emoji                # E0.6   [1] (🚀)       rocket
+1F681..1F682  ; Emoji                # E1.0   [2] (🚁..🚂)    helicopter..locomotive
+1F683..1F685  ; Emoji                # E0.6   [3] (🚃..🚅)    railway car..bullet train
+1F686         ; Emoji                # E1.0   [1] (🚆)       train
+1F687         ; Emoji                # E0.6   [1] (🚇)       metro
+1F688         ; Emoji                # E1.0   [1] (🚈)       light rail
+1F689         ; Emoji                # E0.6   [1] (🚉)       station
+1F68A..1F68B  ; Emoji                # E1.0   [2] (🚊..🚋)    tram..tram car
+1F68C         ; Emoji                # E0.6   [1] (🚌)       bus
+1F68D         ; Emoji                # E0.7   [1] (🚍)       oncoming bus
+1F68E         ; Emoji                # E1.0   [1] (🚎)       trolleybus
+1F68F         ; Emoji                # E0.6   [1] (🚏)       bus stop
+1F690         ; Emoji                # E1.0   [1] (🚐)       minibus
+1F691..1F693  ; Emoji                # E0.6   [3] (🚑..🚓)    ambulance..police car
+1F694         ; Emoji                # E0.7   [1] (🚔)       oncoming police car
+1F695         ; Emoji                # E0.6   [1] (🚕)       taxi
+1F696         ; Emoji                # E1.0   [1] (🚖)       oncoming taxi
+1F697         ; Emoji                # E0.6   [1] (🚗)       automobile
+1F698         ; Emoji                # E0.7   [1] (🚘)       oncoming automobile
+1F699..1F69A  ; Emoji                # E0.6   [2] (🚙..🚚)    sport utility vehicle..delivery truck
+1F69B..1F6A1  ; Emoji                # E1.0   [7] (🚛..🚡)    articulated lorry..aerial tramway
+1F6A2         ; Emoji                # E0.6   [1] (🚢)       ship
+1F6A3         ; Emoji                # E1.0   [1] (🚣)       person rowing boat
+1F6A4..1F6A5  ; Emoji                # E0.6   [2] (🚤..🚥)    speedboat..horizontal traffic light
+1F6A6         ; Emoji                # E1.0   [1] (🚦)       vertical traffic light
+1F6A7..1F6AD  ; Emoji                # E0.6   [7] (🚧..🚭)    construction..no smoking
+1F6AE..1F6B1  ; Emoji                # E1.0   [4] (🚮..🚱)    litter in bin sign..non-potable water
+1F6B2         ; Emoji                # E0.6   [1] (🚲)       bicycle
+1F6B3..1F6B5  ; Emoji                # E1.0   [3] (🚳..🚵)    no bicycles..person mountain biking
+1F6B6         ; Emoji                # E0.6   [1] (🚶)       person walking
+1F6B7..1F6B8  ; Emoji                # E1.0   [2] (🚷..🚸)    no pedestrians..children crossing
+1F6B9..1F6BE  ; Emoji                # E0.6   [6] (🚹..🚾)    men’s room..water closet
+1F6BF         ; Emoji                # E1.0   [1] (🚿)       shower
+1F6C0         ; Emoji                # E0.6   [1] (🛀)       person taking bath
+1F6C1..1F6C5  ; Emoji                # E1.0   [5] (🛁..🛅)    bathtub..left luggage
+1F6CB         ; Emoji                # E0.7   [1] (🛋️)       couch and lamp
+1F6CC         ; Emoji                # E1.0   [1] (🛌)       person in bed
+1F6CD..1F6CF  ; Emoji                # E0.7   [3] (🛍️..🛏️)    shopping bags..bed
+1F6D0         ; Emoji                # E1.0   [1] (🛐)       place of worship
+1F6D1..1F6D2  ; Emoji                # E3.0   [2] (🛑..🛒)    stop sign..shopping cart
+1F6D5         ; Emoji                # E12.0  [1] (🛕)       hindu temple
+1F6D6..1F6D7  ; Emoji                # E13.0  [2] (🛖..🛗)    hut..elevator
+1F6E0..1F6E5  ; Emoji                # E0.7   [6] (🛠️..🛥️)    hammer and wrench..motor boat
+1F6E9         ; Emoji                # E0.7   [1] (🛩️)       small airplane
+1F6EB..1F6EC  ; Emoji                # E1.0   [2] (🛫..🛬)    airplane departure..airplane arrival
+1F6F0         ; Emoji                # E0.7   [1] (🛰️)       satellite
+1F6F3         ; Emoji                # E0.7   [1] (🛳️)       passenger ship
+1F6F4..1F6F6  ; Emoji                # E3.0   [3] (🛴..🛶)    kick scooter..canoe
+1F6F7..1F6F8  ; Emoji                # E5.0   [2] (🛷..🛸)    sled..flying saucer
+1F6F9         ; Emoji                # E11.0  [1] (🛹)       skateboard
+1F6FA         ; Emoji                # E12.0  [1] (🛺)       auto rickshaw
+1F6FB..1F6FC  ; Emoji                # E13.0  [2] (🛻..🛼)    pickup truck..roller skate
+1F7E0..1F7EB  ; Emoji                # E12.0 [12] (🟠..🟫)    orange circle..brown square
+1F90C         ; Emoji                # E13.0  [1] (🤌)       pinched fingers
+1F90D..1F90F  ; Emoji                # E12.0  [3] (🤍..🤏)    white heart..pinching hand
+1F910..1F918  ; Emoji                # E1.0   [9] (🤐..🤘)    zipper-mouth face..sign of the horns
+1F919..1F91E  ; Emoji                # E3.0   [6] (🤙..🤞)    call me hand..crossed fingers
+1F91F         ; Emoji                # E5.0   [1] (🤟)       love-you gesture
+1F920..1F927  ; Emoji                # E3.0   [8] (🤠..🤧)    cowboy hat face..sneezing face
+1F928..1F92F  ; Emoji                # E5.0   [8] (🤨..🤯)    face with raised eyebrow..exploding head
+1F930         ; Emoji                # E3.0   [1] (🤰)       pregnant woman
+1F931..1F932  ; Emoji                # E5.0   [2] (🤱..🤲)    breast-feeding..palms up together
+1F933..1F93A  ; Emoji                # E3.0   [8] (🤳..🤺)    selfie..person fencing
+1F93C..1F93E  ; Emoji                # E3.0   [3] (🤼..🤾)    people wrestling..person playing handball
+1F93F         ; Emoji                # E12.0  [1] (🤿)       diving mask
+1F940..1F945  ; Emoji                # E3.0   [6] (🥀..🥅)    wilted flower..goal net
+1F947..1F94B  ; Emoji                # E3.0   [5] (🥇..🥋)    1st place medal..martial arts uniform
+1F94C         ; Emoji                # E5.0   [1] (🥌)       curling stone
+1F94D..1F94F  ; Emoji                # E11.0  [3] (🥍..🥏)    lacrosse..flying disc
+1F950..1F95E  ; Emoji                # E3.0  [15] (🥐..🥞)    croissant..pancakes
+1F95F..1F96B  ; Emoji                # E5.0  [13] (🥟..🥫)    dumpling..canned food
+1F96C..1F970  ; Emoji                # E11.0  [5] (🥬..🥰)    leafy green..smiling face with hearts
+1F971         ; Emoji                # E12.0  [1] (🥱)       yawning face
+1F972         ; Emoji                # E13.0  [1] (🥲)       smiling face with tear
+1F973..1F976  ; Emoji                # E11.0  [4] (🥳..🥶)    partying face..cold face
+1F977..1F978  ; Emoji                # E13.0  [2] (🥷..🥸)    ninja..disguised face
+1F97A         ; Emoji                # E11.0  [1] (🥺)       pleading face
+1F97B         ; Emoji                # E12.0  [1] (🥻)       sari
+1F97C..1F97F  ; Emoji                # E11.0  [4] (🥼..🥿)    lab coat..flat shoe
+1F980..1F984  ; Emoji                # E1.0   [5] (🦀..🦄)    crab..unicorn
+1F985..1F991  ; Emoji                # E3.0  [13] (🦅..🦑)    eagle..squid
+1F992..1F997  ; Emoji                # E5.0   [6] (🦒..🦗)    giraffe..cricket
+1F998..1F9A2  ; Emoji                # E11.0 [11] (🦘..🦢)    kangaroo..swan
+1F9A3..1F9A4  ; Emoji                # E13.0  [2] (🦣..🦤)    mammoth..dodo
+1F9A5..1F9AA  ; Emoji                # E12.0  [6] (🦥..🦪)    sloth..oyster
+1F9AB..1F9AD  ; Emoji                # E13.0  [3] (🦫..🦭)    beaver..seal
+1F9AE..1F9AF  ; Emoji                # E12.0  [2] (🦮..🦯)    guide dog..white cane
+1F9B0..1F9B9  ; Emoji                # E11.0 [10] (🦰..🦹)    red hair..supervillain
+1F9BA..1F9BF  ; Emoji                # E12.0  [6] (🦺..🦿)    safety vest..mechanical leg
+1F9C0         ; Emoji                # E1.0   [1] (🧀)       cheese wedge
+1F9C1..1F9C2  ; Emoji                # E11.0  [2] (🧁..🧂)    cupcake..salt
+1F9C3..1F9CA  ; Emoji                # E12.0  [8] (🧃..🧊)    beverage box..ice
+1F9CB         ; Emoji                # E13.0  [1] (🧋)       bubble tea
+1F9CD..1F9CF  ; Emoji                # E12.0  [3] (🧍..🧏)    person standing..deaf person
+1F9D0..1F9E6  ; Emoji                # E5.0  [23] (🧐..🧦)    face with monocle..socks
+1F9E7..1F9FF  ; Emoji                # E11.0 [25] (🧧..🧿)    red envelope..nazar amulet
+1FA70..1FA73  ; Emoji                # E12.0  [4] (🩰..🩳)    ballet shoes..shorts
+1FA74         ; Emoji                # E13.0  [1] (🩴)       thong sandal
+1FA78..1FA7A  ; Emoji                # E12.0  [3] (🩸..🩺)    drop of blood..stethoscope
+1FA80..1FA82  ; Emoji                # E12.0  [3] (🪀..🪂)    yo-yo..parachute
+1FA83..1FA86  ; Emoji                # E13.0  [4] (🪃..🪆)    boomerang..nesting dolls
+1FA90..1FA95  ; Emoji                # E12.0  [6] (🪐..🪕)    ringed planet..banjo
+1FA96..1FAA8  ; Emoji                # E13.0 [19] (🪖..🪨)    military helmet..rock
+1FAB0..1FAB6  ; Emoji                # E13.0  [7] (🪰..🪶)    fly..feather
+1FAC0..1FAC2  ; Emoji                # E13.0  [3] (🫀..🫂)    anatomical heart..people hugging
+1FAD0..1FAD6  ; Emoji                # E13.0  [7] (🫐..🫖)    blueberries..teapot
+
+# Total elements: 1367
+
+# ================================================
+
+# All omitted code points have Emoji_Presentation=No 
+# @missing: 0000..10FFFF  ; Emoji_Presentation ; No
+
+231A..231B    ; Emoji_Presentation   # E0.6   [2] (⌚..⌛)    watch..hourglass done
+23E9..23EC    ; Emoji_Presentation   # E0.6   [4] (⏩..⏬)    fast-forward button..fast down button
+23F0          ; Emoji_Presentation   # E0.6   [1] (⏰)       alarm clock
+23F3          ; Emoji_Presentation   # E0.6   [1] (⏳)       hourglass not done
+25FD..25FE    ; Emoji_Presentation   # E0.6   [2] (◽..◾)    white medium-small square..black medium-small square
+2614..2615    ; Emoji_Presentation   # E0.6   [2] (☔..☕)    umbrella with rain drops..hot beverage
+2648..2653    ; Emoji_Presentation   # E0.6  [12] (♈..♓)    Aries..Pisces
+267F          ; Emoji_Presentation   # E0.6   [1] (♿)       wheelchair symbol
+2693          ; Emoji_Presentation   # E0.6   [1] (⚓)       anchor
+26A1          ; Emoji_Presentation   # E0.6   [1] (⚡)       high voltage
+26AA..26AB    ; Emoji_Presentation   # E0.6   [2] (⚪..⚫)    white circle..black circle
+26BD..26BE    ; Emoji_Presentation   # E0.6   [2] (⚽..⚾)    soccer ball..baseball
+26C4..26C5    ; Emoji_Presentation   # E0.6   [2] (⛄..⛅)    snowman without snow..sun behind cloud
+26CE          ; Emoji_Presentation   # E0.6   [1] (⛎)       Ophiuchus
+26D4          ; Emoji_Presentation   # E0.6   [1] (⛔)       no entry
+26EA          ; Emoji_Presentation   # E0.6   [1] (⛪)       church
+26F2..26F3    ; Emoji_Presentation   # E0.6   [2] (⛲..⛳)    fountain..flag in hole
+26F5          ; Emoji_Presentation   # E0.6   [1] (⛵)       sailboat
+26FA          ; Emoji_Presentation   # E0.6   [1] (⛺)       tent
+26FD          ; Emoji_Presentation   # E0.6   [1] (⛽)       fuel pump
+2705          ; Emoji_Presentation   # E0.6   [1] (✅)       check mark button
+270A..270B    ; Emoji_Presentation   # E0.6   [2] (✊..✋)    raised fist..raised hand
+2728          ; Emoji_Presentation   # E0.6   [1] (✨)       sparkles
+274C          ; Emoji_Presentation   # E0.6   [1] (❌)       cross mark
+274E          ; Emoji_Presentation   # E0.6   [1] (❎)       cross mark button
+2753..2755    ; Emoji_Presentation   # E0.6   [3] (❓..❕)    question mark..white exclamation mark
+2757          ; Emoji_Presentation   # E0.6   [1] (❗)       exclamation mark
+2795..2797    ; Emoji_Presentation   # E0.6   [3] (➕..➗)    plus..divide
+27B0          ; Emoji_Presentation   # E0.6   [1] (➰)       curly loop
+27BF          ; Emoji_Presentation   # E1.0   [1] (➿)       double curly loop
+2B1B..2B1C    ; Emoji_Presentation   # E0.6   [2] (⬛..⬜)    black large square..white large square
+2B50          ; Emoji_Presentation   # E0.6   [1] (⭐)       star
+2B55          ; Emoji_Presentation   # E0.6   [1] (⭕)       hollow red circle
+1F004         ; Emoji_Presentation   # E0.6   [1] (🀄)       mahjong red dragon
+1F0CF         ; Emoji_Presentation   # E0.6   [1] (🃏)       joker
+1F18E         ; Emoji_Presentation   # E0.6   [1] (🆎)       AB button (blood type)
+1F191..1F19A  ; Emoji_Presentation   # E0.6  [10] (🆑..🆚)    CL button..VS button
+1F1E6..1F1FF  ; Emoji_Presentation   # E0.0  [26] (🇦..🇿)    regional indicator symbol letter a..regional indicator symbol letter z
+1F201         ; Emoji_Presentation   # E0.6   [1] (🈁)       Japanese “here” button
+1F21A         ; Emoji_Presentation   # E0.6   [1] (🈚)       Japanese “free of charge” button
+1F22F         ; Emoji_Presentation   # E0.6   [1] (🈯)       Japanese “reserved” button
+1F232..1F236  ; Emoji_Presentation   # E0.6   [5] (🈲..🈶)    Japanese “prohibited” button..Japanese “not free of charge” button
+1F238..1F23A  ; Emoji_Presentation   # E0.6   [3] (🈸..🈺)    Japanese “application” button..Japanese “open for business” button
+1F250..1F251  ; Emoji_Presentation   # E0.6   [2] (🉐..🉑)    Japanese “bargain” button..Japanese “acceptable” button
+1F300..1F30C  ; Emoji_Presentation   # E0.6  [13] (🌀..🌌)    cyclone..milky way
+1F30D..1F30E  ; Emoji_Presentation   # E0.7   [2] (🌍..🌎)    globe showing Europe-Africa..globe showing Americas
+1F30F         ; Emoji_Presentation   # E0.6   [1] (🌏)       globe showing Asia-Australia
+1F310         ; Emoji_Presentation   # E1.0   [1] (🌐)       globe with meridians
+1F311         ; Emoji_Presentation   # E0.6   [1] (🌑)       new moon
+1F312         ; Emoji_Presentation   # E1.0   [1] (🌒)       waxing crescent moon
+1F313..1F315  ; Emoji_Presentation   # E0.6   [3] (🌓..🌕)    first quarter moon..full moon
+1F316..1F318  ; Emoji_Presentation   # E1.0   [3] (🌖..🌘)    waning gibbous moon..waning crescent moon
+1F319         ; Emoji_Presentation   # E0.6   [1] (🌙)       crescent moon
+1F31A         ; Emoji_Presentation   # E1.0   [1] (🌚)       new moon face
+1F31B         ; Emoji_Presentation   # E0.6   [1] (🌛)       first quarter moon face
+1F31C         ; Emoji_Presentation   # E0.7   [1] (🌜)       last quarter moon face
+1F31D..1F31E  ; Emoji_Presentation   # E1.0   [2] (🌝..🌞)    full moon face..sun with face
+1F31F..1F320  ; Emoji_Presentation   # E0.6   [2] (🌟..🌠)    glowing star..shooting star
+1F32D..1F32F  ; Emoji_Presentation   # E1.0   [3] (🌭..🌯)    hot dog..burrito
+1F330..1F331  ; Emoji_Presentation   # E0.6   [2] (🌰..🌱)    chestnut..seedling
+1F332..1F333  ; Emoji_Presentation   # E1.0   [2] (🌲..🌳)    evergreen tree..deciduous tree
+1F334..1F335  ; Emoji_Presentation   # E0.6   [2] (🌴..🌵)    palm tree..cactus
+1F337..1F34A  ; Emoji_Presentation   # E0.6  [20] (🌷..🍊)    tulip..tangerine
+1F34B         ; Emoji_Presentation   # E1.0   [1] (🍋)       lemon
+1F34C..1F34F  ; Emoji_Presentation   # E0.6   [4] (🍌..🍏)    banana..green apple
+1F350         ; Emoji_Presentation   # E1.0   [1] (🍐)       pear
+1F351..1F37B  ; Emoji_Presentation   # E0.6  [43] (🍑..🍻)    peach..clinking beer mugs
+1F37C         ; Emoji_Presentation   # E1.0   [1] (🍼)       baby bottle
+1F37E..1F37F  ; Emoji_Presentation   # E1.0   [2] (🍾..🍿)    bottle with popping cork..popcorn
+1F380..1F393  ; Emoji_Presentation   # E0.6  [20] (🎀..🎓)    ribbon..graduation cap
+1F3A0..1F3C4  ; Emoji_Presentation   # E0.6  [37] (🎠..🏄)    carousel horse..person surfing
+1F3C5         ; Emoji_Presentation   # E1.0   [1] (🏅)       sports medal
+1F3C6         ; Emoji_Presentation   # E0.6   [1] (🏆)       trophy
+1F3C7         ; Emoji_Presentation   # E1.0   [1] (🏇)       horse racing
+1F3C8         ; Emoji_Presentation   # E0.6   [1] (🏈)       american football
+1F3C9         ; Emoji_Presentation   # E1.0   [1] (🏉)       rugby football
+1F3CA         ; Emoji_Presentation   # E0.6   [1] (🏊)       person swimming
+1F3CF..1F3D3  ; Emoji_Presentation   # E1.0   [5] (🏏..🏓)    cricket game..ping pong
+1F3E0..1F3E3  ; Emoji_Presentation   # E0.6   [4] (🏠..🏣)    house..Japanese post office
+1F3E4         ; Emoji_Presentation   # E1.0   [1] (🏤)       post office
+1F3E5..1F3F0  ; Emoji_Presentation   # E0.6  [12] (🏥..🏰)    hospital..castle
+1F3F4         ; Emoji_Presentation   # E1.0   [1] (🏴)       black flag
+1F3F8..1F407  ; Emoji_Presentation   # E1.0  [16] (🏸..🐇)    badminton..rabbit
+1F408         ; Emoji_Presentation   # E0.7   [1] (🐈)       cat
+1F409..1F40B  ; Emoji_Presentation   # E1.0   [3] (🐉..🐋)    dragon..whale
+1F40C..1F40E  ; Emoji_Presentation   # E0.6   [3] (🐌..🐎)    snail..horse
+1F40F..1F410  ; Emoji_Presentation   # E1.0   [2] (🐏..🐐)    ram..goat
+1F411..1F412  ; Emoji_Presentation   # E0.6   [2] (🐑..🐒)    ewe..monkey
+1F413         ; Emoji_Presentation   # E1.0   [1] (🐓)       rooster
+1F414         ; Emoji_Presentation   # E0.6   [1] (🐔)       chicken
+1F415         ; Emoji_Presentation   # E0.7   [1] (🐕)       dog
+1F416         ; Emoji_Presentation   # E1.0   [1] (🐖)       pig
+1F417..1F429  ; Emoji_Presentation   # E0.6  [19] (🐗..🐩)    boar..poodle
+1F42A         ; Emoji_Presentation   # E1.0   [1] (🐪)       camel
+1F42B..1F43E  ; Emoji_Presentation   # E0.6  [20] (🐫..🐾)    two-hump camel..paw prints
+1F440         ; Emoji_Presentation   # E0.6   [1] (👀)       eyes
+1F442..1F464  ; Emoji_Presentation   # E0.6  [35] (👂..👤)    ear..bust in silhouette
+1F465         ; Emoji_Presentation   # E1.0   [1] (👥)       busts in silhouette
+1F466..1F46B  ; Emoji_Presentation   # E0.6   [6] (👦..👫)    boy..woman and man holding hands
+1F46C..1F46D  ; Emoji_Presentation   # E1.0   [2] (👬..👭)    men holding hands..women holding hands
+1F46E..1F4AC  ; Emoji_Presentation   # E0.6  [63] (👮..💬)    police officer..speech balloon
+1F4AD         ; Emoji_Presentation   # E1.0   [1] (💭)       thought balloon
+1F4AE..1F4B5  ; Emoji_Presentation   # E0.6   [8] (💮..💵)    white flower..dollar banknote
+1F4B6..1F4B7  ; Emoji_Presentation   # E1.0   [2] (💶..💷)    euro banknote..pound banknote
+1F4B8..1F4EB  ; Emoji_Presentation   # E0.6  [52] (💸..📫)    money with wings..closed mailbox with raised flag
+1F4EC..1F4ED  ; Emoji_Presentation   # E0.7   [2] (📬..📭)    open mailbox with raised flag..open mailbox with lowered flag
+1F4EE         ; Emoji_Presentation   # E0.6   [1] (📮)       postbox
+1F4EF         ; Emoji_Presentation   # E1.0   [1] (📯)       postal horn
+1F4F0..1F4F4  ; Emoji_Presentation   # E0.6   [5] (📰..📴)    newspaper..mobile phone off
+1F4F5         ; Emoji_Presentation   # E1.0   [1] (📵)       no mobile phones
+1F4F6..1F4F7  ; Emoji_Presentation   # E0.6   [2] (📶..📷)    antenna bars..camera
+1F4F8         ; Emoji_Presentation   # E1.0   [1] (📸)       camera with flash
+1F4F9..1F4FC  ; Emoji_Presentation   # E0.6   [4] (📹..📼)    video camera..videocassette
+1F4FF..1F502  ; Emoji_Presentation   # E1.0   [4] (📿..🔂)    prayer beads..repeat single button
+1F503         ; Emoji_Presentation   # E0.6   [1] (🔃)       clockwise vertical arrows
+1F504..1F507  ; Emoji_Presentation   # E1.0   [4] (🔄..🔇)    counterclockwise arrows button..muted speaker
+1F508         ; Emoji_Presentation   # E0.7   [1] (🔈)       speaker low volume
+1F509         ; Emoji_Presentation   # E1.0   [1] (🔉)       speaker medium volume
+1F50A..1F514  ; Emoji_Presentation   # E0.6  [11] (🔊..🔔)    speaker high volume..bell
+1F515         ; Emoji_Presentation   # E1.0   [1] (🔕)       bell with slash
+1F516..1F52B  ; Emoji_Presentation   # E0.6  [22] (🔖..🔫)    bookmark..pistol
+1F52C..1F52D  ; Emoji_Presentation   # E1.0   [2] (🔬..🔭)    microscope..telescope
+1F52E..1F53D  ; Emoji_Presentation   # E0.6  [16] (🔮..🔽)    crystal ball..downwards button
+1F54B..1F54E  ; Emoji_Presentation   # E1.0   [4] (🕋..🕎)    kaaba..menorah
+1F550..1F55B  ; Emoji_Presentation   # E0.6  [12] (🕐..🕛)    one o’clock..twelve o’clock
+1F55C..1F567  ; Emoji_Presentation   # E0.7  [12] (🕜..🕧)    one-thirty..twelve-thirty
+1F57A         ; Emoji_Presentation   # E3.0   [1] (🕺)       man dancing
+1F595..1F596  ; Emoji_Presentation   # E1.0   [2] (🖕..🖖)    middle finger..vulcan salute
+1F5A4         ; Emoji_Presentation   # E3.0   [1] (🖤)       black heart
+1F5FB..1F5FF  ; Emoji_Presentation   # E0.6   [5] (🗻..🗿)    mount fuji..moai
+1F600         ; Emoji_Presentation   # E1.0   [1] (😀)       grinning face
+1F601..1F606  ; Emoji_Presentation   # E0.6   [6] (😁..😆)    beaming face with smiling eyes..grinning squinting face
+1F607..1F608  ; Emoji_Presentation   # E1.0   [2] (😇..😈)    smiling face with halo..smiling face with horns
+1F609..1F60D  ; Emoji_Presentation   # E0.6   [5] (😉..😍)    winking face..smiling face with heart-eyes
+1F60E         ; Emoji_Presentation   # E1.0   [1] (😎)       smiling face with sunglasses
+1F60F         ; Emoji_Presentation   # E0.6   [1] (😏)       smirking face
+1F610         ; Emoji_Presentation   # E0.7   [1] (😐)       neutral face
+1F611         ; Emoji_Presentation   # E1.0   [1] (😑)       expressionless face
+1F612..1F614  ; Emoji_Presentation   # E0.6   [3] (😒..😔)    unamused face..pensive face
+1F615         ; Emoji_Presentation   # E1.0   [1] (😕)       confused face
+1F616         ; Emoji_Presentation   # E0.6   [1] (😖)       confounded face
+1F617         ; Emoji_Presentation   # E1.0   [1] (😗)       kissing face
+1F618         ; Emoji_Presentation   # E0.6   [1] (😘)       face blowing a kiss
+1F619         ; Emoji_Presentation   # E1.0   [1] (😙)       kissing face with smiling eyes
+1F61A         ; Emoji_Presentation   # E0.6   [1] (😚)       kissing face with closed eyes
+1F61B         ; Emoji_Presentation   # E1.0   [1] (😛)       face with tongue
+1F61C..1F61E  ; Emoji_Presentation   # E0.6   [3] (😜..😞)    winking face with tongue..disappointed face
+1F61F         ; Emoji_Presentation   # E1.0   [1] (😟)       worried face
+1F620..1F625  ; Emoji_Presentation   # E0.6   [6] (😠..😥)    angry face..sad but relieved face
+1F626..1F627  ; Emoji_Presentation   # E1.0   [2] (😦..😧)    frowning face with open mouth..anguished face
+1F628..1F62B  ; Emoji_Presentation   # E0.6   [4] (😨..😫)    fearful face..tired face
+1F62C         ; Emoji_Presentation   # E1.0   [1] (😬)       grimacing face
+1F62D         ; Emoji_Presentation   # E0.6   [1] (😭)       loudly crying face
+1F62E..1F62F  ; Emoji_Presentation   # E1.0   [2] (😮..😯)    face with open mouth..hushed face
+1F630..1F633  ; Emoji_Presentation   # E0.6   [4] (😰..😳)    anxious face with sweat..flushed face
+1F634         ; Emoji_Presentation   # E1.0   [1] (😴)       sleeping face
+1F635         ; Emoji_Presentation   # E0.6   [1] (😵)       dizzy face
+1F636         ; Emoji_Presentation   # E1.0   [1] (😶)       face without mouth
+1F637..1F640  ; Emoji_Presentation   # E0.6  [10] (😷..🙀)    face with medical mask..weary cat
+1F641..1F644  ; Emoji_Presentation   # E1.0   [4] (🙁..🙄)    slightly frowning face..face with rolling eyes
+1F645..1F64F  ; Emoji_Presentation   # E0.6  [11] (🙅..🙏)    person gesturing NO..folded hands
+1F680         ; Emoji_Presentation   # E0.6   [1] (🚀)       rocket
+1F681..1F682  ; Emoji_Presentation   # E1.0   [2] (🚁..🚂)    helicopter..locomotive
+1F683..1F685  ; Emoji_Presentation   # E0.6   [3] (🚃..🚅)    railway car..bullet train
+1F686         ; Emoji_Presentation   # E1.0   [1] (🚆)       train
+1F687         ; Emoji_Presentation   # E0.6   [1] (🚇)       metro
+1F688         ; Emoji_Presentation   # E1.0   [1] (🚈)       light rail
+1F689         ; Emoji_Presentation   # E0.6   [1] (🚉)       station
+1F68A..1F68B  ; Emoji_Presentation   # E1.0   [2] (🚊..🚋)    tram..tram car
+1F68C         ; Emoji_Presentation   # E0.6   [1] (🚌)       bus
+1F68D         ; Emoji_Presentation   # E0.7   [1] (🚍)       oncoming bus
+1F68E         ; Emoji_Presentation   # E1.0   [1] (🚎)       trolleybus
+1F68F         ; Emoji_Presentation   # E0.6   [1] (🚏)       bus stop
+1F690         ; Emoji_Presentation   # E1.0   [1] (🚐)       minibus
+1F691..1F693  ; Emoji_Presentation   # E0.6   [3] (🚑..🚓)    ambulance..police car
+1F694         ; Emoji_Presentation   # E0.7   [1] (🚔)       oncoming police car
+1F695         ; Emoji_Presentation   # E0.6   [1] (🚕)       taxi
+1F696         ; Emoji_Presentation   # E1.0   [1] (🚖)       oncoming taxi
+1F697         ; Emoji_Presentation   # E0.6   [1] (🚗)       automobile
+1F698         ; Emoji_Presentation   # E0.7   [1] (🚘)       oncoming automobile
+1F699..1F69A  ; Emoji_Presentation   # E0.6   [2] (🚙..🚚)    sport utility vehicle..delivery truck
+1F69B..1F6A1  ; Emoji_Presentation   # E1.0   [7] (🚛..🚡)    articulated lorry..aerial tramway
+1F6A2         ; Emoji_Presentation   # E0.6   [1] (🚢)       ship
+1F6A3         ; Emoji_Presentation   # E1.0   [1] (🚣)       person rowing boat
+1F6A4..1F6A5  ; Emoji_Presentation   # E0.6   [2] (🚤..🚥)    speedboat..horizontal traffic light
+1F6A6         ; Emoji_Presentation   # E1.0   [1] (🚦)       vertical traffic light
+1F6A7..1F6AD  ; Emoji_Presentation   # E0.6   [7] (🚧..🚭)    construction..no smoking
+1F6AE..1F6B1  ; Emoji_Presentation   # E1.0   [4] (🚮..🚱)    litter in bin sign..non-potable water
+1F6B2         ; Emoji_Presentation   # E0.6   [1] (🚲)       bicycle
+1F6B3..1F6B5  ; Emoji_Presentation   # E1.0   [3] (🚳..🚵)    no bicycles..person mountain biking
+1F6B6         ; Emoji_Presentation   # E0.6   [1] (🚶)       person walking
+1F6B7..1F6B8  ; Emoji_Presentation   # E1.0   [2] (🚷..🚸)    no pedestrians..children crossing
+1F6B9..1F6BE  ; Emoji_Presentation   # E0.6   [6] (🚹..🚾)    men’s room..water closet
+1F6BF         ; Emoji_Presentation   # E1.0   [1] (🚿)       shower
+1F6C0         ; Emoji_Presentation   # E0.6   [1] (🛀)       person taking bath
+1F6C1..1F6C5  ; Emoji_Presentation   # E1.0   [5] (🛁..🛅)    bathtub..left luggage
+1F6CC         ; Emoji_Presentation   # E1.0   [1] (🛌)       person in bed
+1F6D0         ; Emoji_Presentation   # E1.0   [1] (🛐)       place of worship
+1F6D1..1F6D2  ; Emoji_Presentation   # E3.0   [2] (🛑..🛒)    stop sign..shopping cart
+1F6D5         ; Emoji_Presentation   # E12.0  [1] (🛕)       hindu temple
+1F6D6..1F6D7  ; Emoji_Presentation   # E13.0  [2] (🛖..🛗)    hut..elevator
+1F6EB..1F6EC  ; Emoji_Presentation   # E1.0   [2] (🛫..🛬)    airplane departure..airplane arrival
+1F6F4..1F6F6  ; Emoji_Presentation   # E3.0   [3] (🛴..🛶)    kick scooter..canoe
+1F6F7..1F6F8  ; Emoji_Presentation   # E5.0   [2] (🛷..🛸)    sled..flying saucer
+1F6F9         ; Emoji_Presentation   # E11.0  [1] (🛹)       skateboard
+1F6FA         ; Emoji_Presentation   # E12.0  [1] (🛺)       auto rickshaw
+1F6FB..1F6FC  ; Emoji_Presentation   # E13.0  [2] (🛻..🛼)    pickup truck..roller skate
+1F7E0..1F7EB  ; Emoji_Presentation   # E12.0 [12] (🟠..🟫)    orange circle..brown square
+1F90C         ; Emoji_Presentation   # E13.0  [1] (🤌)       pinched fingers
+1F90D..1F90F  ; Emoji_Presentation   # E12.0  [3] (🤍..🤏)    white heart..pinching hand
+1F910..1F918  ; Emoji_Presentation   # E1.0   [9] (🤐..🤘)    zipper-mouth face..sign of the horns
+1F919..1F91E  ; Emoji_Presentation   # E3.0   [6] (🤙..🤞)    call me hand..crossed fingers
+1F91F         ; Emoji_Presentation   # E5.0   [1] (🤟)       love-you gesture
+1F920..1F927  ; Emoji_Presentation   # E3.0   [8] (🤠..🤧)    cowboy hat face..sneezing face
+1F928..1F92F  ; Emoji_Presentation   # E5.0   [8] (🤨..🤯)    face with raised eyebrow..exploding head
+1F930         ; Emoji_Presentation   # E3.0   [1] (🤰)       pregnant woman
+1F931..1F932  ; Emoji_Presentation   # E5.0   [2] (🤱..🤲)    breast-feeding..palms up together
+1F933..1F93A  ; Emoji_Presentation   # E3.0   [8] (🤳..🤺)    selfie..person fencing
+1F93C..1F93E  ; Emoji_Presentation   # E3.0   [3] (🤼..🤾)    people wrestling..person playing handball
+1F93F         ; Emoji_Presentation   # E12.0  [1] (🤿)       diving mask
+1F940..1F945  ; Emoji_Presentation   # E3.0   [6] (🥀..🥅)    wilted flower..goal net
+1F947..1F94B  ; Emoji_Presentation   # E3.0   [5] (🥇..🥋)    1st place medal..martial arts uniform
+1F94C         ; Emoji_Presentation   # E5.0   [1] (🥌)       curling stone
+1F94D..1F94F  ; Emoji_Presentation   # E11.0  [3] (🥍..🥏)    lacrosse..flying disc
+1F950..1F95E  ; Emoji_Presentation   # E3.0  [15] (🥐..🥞)    croissant..pancakes
+1F95F..1F96B  ; Emoji_Presentation   # E5.0  [13] (🥟..🥫)    dumpling..canned food
+1F96C..1F970  ; Emoji_Presentation   # E11.0  [5] (🥬..🥰)    leafy green..smiling face with hearts
+1F971         ; Emoji_Presentation   # E12.0  [1] (🥱)       yawning face
+1F972         ; Emoji_Presentation   # E13.0  [1] (🥲)       smiling face with tear
+1F973..1F976  ; Emoji_Presentation   # E11.0  [4] (🥳..🥶)    partying face..cold face
+1F977..1F978  ; Emoji_Presentation   # E13.0  [2] (🥷..🥸)    ninja..disguised face
+1F97A         ; Emoji_Presentation   # E11.0  [1] (🥺)       pleading face
+1F97B         ; Emoji_Presentation   # E12.0  [1] (🥻)       sari
+1F97C..1F97F  ; Emoji_Presentation   # E11.0  [4] (🥼..🥿)    lab coat..flat shoe
+1F980..1F984  ; Emoji_Presentation   # E1.0   [5] (🦀..🦄)    crab..unicorn
+1F985..1F991  ; Emoji_Presentation   # E3.0  [13] (🦅..🦑)    eagle..squid
+1F992..1F997  ; Emoji_Presentation   # E5.0   [6] (🦒..🦗)    giraffe..cricket
+1F998..1F9A2  ; Emoji_Presentation   # E11.0 [11] (🦘..🦢)    kangaroo..swan
+1F9A3..1F9A4  ; Emoji_Presentation   # E13.0  [2] (🦣..🦤)    mammoth..dodo
+1F9A5..1F9AA  ; Emoji_Presentation   # E12.0  [6] (🦥..🦪)    sloth..oyster
+1F9AB..1F9AD  ; Emoji_Presentation   # E13.0  [3] (🦫..🦭)    beaver..seal
+1F9AE..1F9AF  ; Emoji_Presentation   # E12.0  [2] (🦮..🦯)    guide dog..white cane
+1F9B0..1F9B9  ; Emoji_Presentation   # E11.0 [10] (🦰..🦹)    red hair..supervillain
+1F9BA..1F9BF  ; Emoji_Presentation   # E12.0  [6] (🦺..🦿)    safety vest..mechanical leg
+1F9C0         ; Emoji_Presentation   # E1.0   [1] (🧀)       cheese wedge
+1F9C1..1F9C2  ; Emoji_Presentation   # E11.0  [2] (🧁..🧂)    cupcake..salt
+1F9C3..1F9CA  ; Emoji_Presentation   # E12.0  [8] (🧃..🧊)    beverage box..ice
+1F9CB         ; Emoji_Presentation   # E13.0  [1] (🧋)       bubble tea
+1F9CD..1F9CF  ; Emoji_Presentation   # E12.0  [3] (🧍..🧏)    person standing..deaf person
+1F9D0..1F9E6  ; Emoji_Presentation   # E5.0  [23] (🧐..🧦)    face with monocle..socks
+1F9E7..1F9FF  ; Emoji_Presentation   # E11.0 [25] (🧧..🧿)    red envelope..nazar amulet
+1FA70..1FA73  ; Emoji_Presentation   # E12.0  [4] (🩰..🩳)    ballet shoes..shorts
+1FA74         ; Emoji_Presentation   # E13.0  [1] (🩴)       thong sandal
+1FA78..1FA7A  ; Emoji_Presentation   # E12.0  [3] (🩸..🩺)    drop of blood..stethoscope
+1FA80..1FA82  ; Emoji_Presentation   # E12.0  [3] (🪀..🪂)    yo-yo..parachute
+1FA83..1FA86  ; Emoji_Presentation   # E13.0  [4] (🪃..🪆)    boomerang..nesting dolls
+1FA90..1FA95  ; Emoji_Presentation   # E12.0  [6] (🪐..🪕)    ringed planet..banjo
+1FA96..1FAA8  ; Emoji_Presentation   # E13.0 [19] (🪖..🪨)    military helmet..rock
+1FAB0..1FAB6  ; Emoji_Presentation   # E13.0  [7] (🪰..🪶)    fly..feather
+1FAC0..1FAC2  ; Emoji_Presentation   # E13.0  [3] (🫀..🫂)    anatomical heart..people hugging
+1FAD0..1FAD6  ; Emoji_Presentation   # E13.0  [7] (🫐..🫖)    blueberries..teapot
+
+# Total elements: 1148
+
+# ================================================
+
+# All omitted code points have Emoji_Modifier=No 
+# @missing: 0000..10FFFF  ; Emoji_Modifier ; No
+
+1F3FB..1F3FF  ; Emoji_Modifier       # E1.0   [5] (🏻..🏿)    light skin tone..dark skin tone
+
+# Total elements: 5
+
+# ================================================
+
+# All omitted code points have Emoji_Modifier_Base=No 
+# @missing: 0000..10FFFF  ; Emoji_Modifier_Base ; No
+
+261D          ; Emoji_Modifier_Base  # E0.6   [1] (☝️)       index pointing up
+26F9          ; Emoji_Modifier_Base  # E0.7   [1] (⛹️)       person bouncing ball
+270A..270C    ; Emoji_Modifier_Base  # E0.6   [3] (✊..✌️)    raised fist..victory hand
+270D          ; Emoji_Modifier_Base  # E0.7   [1] (✍️)       writing hand
+1F385         ; Emoji_Modifier_Base  # E0.6   [1] (🎅)       Santa Claus
+1F3C2..1F3C4  ; Emoji_Modifier_Base  # E0.6   [3] (🏂..🏄)    snowboarder..person surfing
+1F3C7         ; Emoji_Modifier_Base  # E1.0   [1] (🏇)       horse racing
+1F3CA         ; Emoji_Modifier_Base  # E0.6   [1] (🏊)       person swimming
+1F3CB..1F3CC  ; Emoji_Modifier_Base  # E0.7   [2] (🏋️..🏌️)    person lifting weights..person golfing
+1F442..1F443  ; Emoji_Modifier_Base  # E0.6   [2] (👂..👃)    ear..nose
+1F446..1F450  ; Emoji_Modifier_Base  # E0.6  [11] (👆..👐)    backhand index pointing up..open hands
+1F466..1F46B  ; Emoji_Modifier_Base  # E0.6   [6] (👦..👫)    boy..woman and man holding hands
+1F46C..1F46D  ; Emoji_Modifier_Base  # E1.0   [2] (👬..👭)    men holding hands..women holding hands
+1F46E..1F478  ; Emoji_Modifier_Base  # E0.6  [11] (👮..👸)    police officer..princess
+1F47C         ; Emoji_Modifier_Base  # E0.6   [1] (👼)       baby angel
+1F481..1F483  ; Emoji_Modifier_Base  # E0.6   [3] (💁..💃)    person tipping hand..woman dancing
+1F485..1F487  ; Emoji_Modifier_Base  # E0.6   [3] (💅..💇)    nail polish..person getting haircut
+1F48F         ; Emoji_Modifier_Base  # E0.6   [1] (💏)       kiss
+1F491         ; Emoji_Modifier_Base  # E0.6   [1] (💑)       couple with heart
+1F4AA         ; Emoji_Modifier_Base  # E0.6   [1] (💪)       flexed biceps
+1F574..1F575  ; Emoji_Modifier_Base  # E0.7   [2] (🕴️..🕵️)    person in suit levitating..detective
+1F57A         ; Emoji_Modifier_Base  # E3.0   [1] (🕺)       man dancing
+1F590         ; Emoji_Modifier_Base  # E0.7   [1] (🖐️)       hand with fingers splayed
+1F595..1F596  ; Emoji_Modifier_Base  # E1.0   [2] (🖕..🖖)    middle finger..vulcan salute
+1F645..1F647  ; Emoji_Modifier_Base  # E0.6   [3] (🙅..🙇)    person gesturing NO..person bowing
+1F64B..1F64F  ; Emoji_Modifier_Base  # E0.6   [5] (🙋..🙏)    person raising hand..folded hands
+1F6A3         ; Emoji_Modifier_Base  # E1.0   [1] (🚣)       person rowing boat
+1F6B4..1F6B5  ; Emoji_Modifier_Base  # E1.0   [2] (🚴..🚵)    person biking..person mountain biking
+1F6B6         ; Emoji_Modifier_Base  # E0.6   [1] (🚶)       person walking
+1F6C0         ; Emoji_Modifier_Base  # E0.6   [1] (🛀)       person taking bath
+1F6CC         ; Emoji_Modifier_Base  # E1.0   [1] (🛌)       person in bed
+1F90C         ; Emoji_Modifier_Base  # E13.0  [1] (🤌)       pinched fingers
+1F90F         ; Emoji_Modifier_Base  # E12.0  [1] (🤏)       pinching hand
+1F918         ; Emoji_Modifier_Base  # E1.0   [1] (🤘)       sign of the horns
+1F919..1F91E  ; Emoji_Modifier_Base  # E3.0   [6] (🤙..🤞)    call me hand..crossed fingers
+1F91F         ; Emoji_Modifier_Base  # E5.0   [1] (🤟)       love-you gesture
+1F926         ; Emoji_Modifier_Base  # E3.0   [1] (🤦)       person facepalming
+1F930         ; Emoji_Modifier_Base  # E3.0   [1] (🤰)       pregnant woman
+1F931..1F932  ; Emoji_Modifier_Base  # E5.0   [2] (🤱..🤲)    breast-feeding..palms up together
+1F933..1F939  ; Emoji_Modifier_Base  # E3.0   [7] (🤳..🤹)    selfie..person juggling
+1F93C..1F93E  ; Emoji_Modifier_Base  # E3.0   [3] (🤼..🤾)    people wrestling..person playing handball
+1F977         ; Emoji_Modifier_Base  # E13.0  [1] (🥷)       ninja
+1F9B5..1F9B6  ; Emoji_Modifier_Base  # E11.0  [2] (🦵..🦶)    leg..foot
+1F9B8..1F9B9  ; Emoji_Modifier_Base  # E11.0  [2] (🦸..🦹)    superhero..supervillain
+1F9BB         ; Emoji_Modifier_Base  # E12.0  [1] (🦻)       ear with hearing aid
+1F9CD..1F9CF  ; Emoji_Modifier_Base  # E12.0  [3] (🧍..🧏)    person standing..deaf person
+1F9D1..1F9DD  ; Emoji_Modifier_Base  # E5.0  [13] (🧑..🧝)    person..elf
+
+# Total elements: 122
+
+# ================================================
+
+# All omitted code points have Emoji_Component=No 
+# @missing: 0000..10FFFF  ; Emoji_Component ; No
+
+0023          ; Emoji_Component      # E0.0   [1] (#️)       number sign
+002A          ; Emoji_Component      # E0.0   [1] (*️)       asterisk
+0030..0039    ; Emoji_Component      # E0.0  [10] (0️..9️)    digit zero..digit nine
+200D          ; Emoji_Component      # E0.0   [1] (‍)        zero width joiner
+20E3          ; Emoji_Component      # E0.0   [1] (⃣)       combining enclosing keycap
+FE0F          ; Emoji_Component      # E0.0   [1] ()        VARIATION SELECTOR-16
+1F1E6..1F1FF  ; Emoji_Component      # E0.0  [26] (🇦..🇿)    regional indicator symbol letter a..regional indicator symbol letter z
+1F3FB..1F3FF  ; Emoji_Component      # E1.0   [5] (🏻..🏿)    light skin tone..dark skin tone
+1F9B0..1F9B3  ; Emoji_Component      # E11.0  [4] (🦰..🦳)    red hair..white hair
+E0020..E007F  ; Emoji_Component      # E0.0  [96] (󠀠..󠁿)      tag space..cancel tag
+
+# Total elements: 146
+
+# ================================================
+
+# All omitted code points have Extended_Pictographic=No 
+# @missing: 0000..10FFFF  ; Extended_Pictographic ; No
+
+00A9          ; Extended_Pictographic# E0.6   [1] (©️)       copyright
+00AE          ; Extended_Pictographic# E0.6   [1] (®️)       registered
+203C          ; Extended_Pictographic# E0.6   [1] (‼️)       double exclamation mark
+2049          ; Extended_Pictographic# E0.6   [1] (⁉️)       exclamation question mark
+2122          ; Extended_Pictographic# E0.6   [1] (™️)       trade mark
+2139          ; Extended_Pictographic# E0.6   [1] (ℹ️)       information
+2194..2199    ; Extended_Pictographic# E0.6   [6] (↔️..↙️)    left-right arrow..down-left arrow
+21A9..21AA    ; Extended_Pictographic# E0.6   [2] (↩️..↪️)    right arrow curving left..left arrow curving right
+231A..231B    ; Extended_Pictographic# E0.6   [2] (⌚..⌛)    watch..hourglass done
+2328          ; Extended_Pictographic# E1.0   [1] (⌨️)       keyboard
+2388          ; Extended_Pictographic# E0.0   [1] (⎈)       HELM SYMBOL
+23CF          ; Extended_Pictographic# E1.0   [1] (⏏️)       eject button
+23E9..23EC    ; Extended_Pictographic# E0.6   [4] (⏩..⏬)    fast-forward button..fast down button
+23ED..23EE    ; Extended_Pictographic# E0.7   [2] (⏭️..⏮️)    next track button..last track button
+23EF          ; Extended_Pictographic# E1.0   [1] (⏯️)       play or pause button
+23F0          ; Extended_Pictographic# E0.6   [1] (⏰)       alarm clock
+23F1..23F2    ; Extended_Pictographic# E1.0   [2] (⏱️..⏲️)    stopwatch..timer clock
+23F3          ; Extended_Pictographic# E0.6   [1] (⏳)       hourglass not done
+23F8..23FA    ; Extended_Pictographic# E0.7   [3] (⏸️..⏺️)    pause button..record button
+24C2          ; Extended_Pictographic# E0.6   [1] (Ⓜ️)       circled M
+25AA..25AB    ; Extended_Pictographic# E0.6   [2] (▪️..▫️)    black small square..white small square
+25B6          ; Extended_Pictographic# E0.6   [1] (▶️)       play button
+25C0          ; Extended_Pictographic# E0.6   [1] (◀️)       reverse button
+25FB..25FE    ; Extended_Pictographic# E0.6   [4] (◻️..◾)    white medium square..black medium-small square
+2600..2601    ; Extended_Pictographic# E0.6   [2] (☀️..☁️)    sun..cloud
+2602..2603    ; Extended_Pictographic# E0.7   [2] (☂️..☃️)    umbrella..snowman
+2604          ; Extended_Pictographic# E1.0   [1] (☄️)       comet
+2605          ; Extended_Pictographic# E0.0   [1] (★)       BLACK STAR
+2607..260D    ; Extended_Pictographic# E0.0   [7] (☇..☍)    LIGHTNING..OPPOSITION
+260E          ; Extended_Pictographic# E0.6   [1] (☎️)       telephone
+260F..2610    ; Extended_Pictographic# E0.0   [2] (☏..☐)    WHITE TELEPHONE..BALLOT BOX
+2611          ; Extended_Pictographic# E0.6   [1] (☑️)       check box with check
+2612          ; Extended_Pictographic# E0.0   [1] (☒)       BALLOT BOX WITH X
+2614..2615    ; Extended_Pictographic# E0.6   [2] (☔..☕)    umbrella with rain drops..hot beverage
+2616..2617    ; Extended_Pictographic# E0.0   [2] (☖..☗)    WHITE SHOGI PIECE..BLACK SHOGI PIECE
+2618          ; Extended_Pictographic# E1.0   [1] (☘️)       shamrock
+2619..261C    ; Extended_Pictographic# E0.0   [4] (☙..☜)    REVERSED ROTATED FLORAL HEART BULLET..WHITE LEFT POINTING INDEX
+261D          ; Extended_Pictographic# E0.6   [1] (☝️)       index pointing up
+261E..261F    ; Extended_Pictographic# E0.0   [2] (☞..☟)    WHITE RIGHT POINTING INDEX..WHITE DOWN POINTING INDEX
+2620          ; Extended_Pictographic# E1.0   [1] (☠️)       skull and crossbones
+2621          ; Extended_Pictographic# E0.0   [1] (☡)       CAUTION SIGN
+2622..2623    ; Extended_Pictographic# E1.0   [2] (☢️..☣️)    radioactive..biohazard
+2624..2625    ; Extended_Pictographic# E0.0   [2] (☤..☥)    CADUCEUS..ANKH
+2626          ; Extended_Pictographic# E1.0   [1] (☦️)       orthodox cross
+2627..2629    ; Extended_Pictographic# E0.0   [3] (☧..☩)    CHI RHO..CROSS OF JERUSALEM
+262A          ; Extended_Pictographic# E0.7   [1] (☪️)       star and crescent
+262B..262D    ; Extended_Pictographic# E0.0   [3] (☫..☭)    FARSI SYMBOL..HAMMER AND SICKLE
+262E          ; Extended_Pictographic# E1.0   [1] (☮️)       peace symbol
+262F          ; Extended_Pictographic# E0.7   [1] (☯️)       yin yang
+2630..2637    ; Extended_Pictographic# E0.0   [8] (☰..☷)    TRIGRAM FOR HEAVEN..TRIGRAM FOR EARTH
+2638..2639    ; Extended_Pictographic# E0.7   [2] (☸️..☹️)    wheel of dharma..frowning face
+263A          ; Extended_Pictographic# E0.6   [1] (☺️)       smiling face
+263B..263F    ; Extended_Pictographic# E0.0   [5] (☻..☿)    BLACK SMILING FACE..MERCURY
+2640          ; Extended_Pictographic# E4.0   [1] (♀️)       female sign
+2641          ; Extended_Pictographic# E0.0   [1] (♁)       EARTH
+2642          ; Extended_Pictographic# E4.0   [1] (♂️)       male sign
+2643..2647    ; Extended_Pictographic# E0.0   [5] (♃..♇)    JUPITER..PLUTO
+2648..2653    ; Extended_Pictographic# E0.6  [12] (♈..♓)    Aries..Pisces
+2654..265E    ; Extended_Pictographic# E0.0  [11] (♔..♞)    WHITE CHESS KING..BLACK CHESS KNIGHT
+265F          ; Extended_Pictographic# E11.0  [1] (♟️)       chess pawn
+2660          ; Extended_Pictographic# E0.6   [1] (♠️)       spade suit
+2661..2662    ; Extended_Pictographic# E0.0   [2] (♡..♢)    WHITE HEART SUIT..WHITE DIAMOND SUIT
+2663          ; Extended_Pictographic# E0.6   [1] (♣️)       club suit
+2664          ; Extended_Pictographic# E0.0   [1] (♤)       WHITE SPADE SUIT
+2665..2666    ; Extended_Pictographic# E0.6   [2] (♥️..♦️)    heart suit..diamond suit
+2667          ; Extended_Pictographic# E0.0   [1] (♧)       WHITE CLUB SUIT
+2668          ; Extended_Pictographic# E0.6   [1] (♨️)       hot springs
+2669..267A    ; Extended_Pictographic# E0.0  [18] (♩..♺)    QUARTER NOTE..RECYCLING SYMBOL FOR GENERIC MATERIALS
+267B          ; Extended_Pictographic# E0.6   [1] (♻️)       recycling symbol
+267C..267D    ; Extended_Pictographic# E0.0   [2] (♼..♽)    RECYCLED PAPER SYMBOL..PARTIALLY-RECYCLED PAPER SYMBOL
+267E          ; Extended_Pictographic# E11.0  [1] (♾️)       infinity
+267F          ; Extended_Pictographic# E0.6   [1] (♿)       wheelchair symbol
+2680..2685    ; Extended_Pictographic# E0.0   [6] (⚀..⚅)    DIE FACE-1..DIE FACE-6
+2690..2691    ; Extended_Pictographic# E0.0   [2] (⚐..⚑)    WHITE FLAG..BLACK FLAG
+2692          ; Extended_Pictographic# E1.0   [1] (⚒️)       hammer and pick
+2693          ; Extended_Pictographic# E0.6   [1] (⚓)       anchor
+2694          ; Extended_Pictographic# E1.0   [1] (⚔️)       crossed swords
+2695          ; Extended_Pictographic# E4.0   [1] (⚕️)       medical symbol
+2696..2697    ; Extended_Pictographic# E1.0   [2] (⚖️..⚗️)    balance scale..alembic
+2698          ; Extended_Pictographic# E0.0   [1] (⚘)       FLOWER
+2699          ; Extended_Pictographic# E1.0   [1] (⚙️)       gear
+269A          ; Extended_Pictographic# E0.0   [1] (⚚)       STAFF OF HERMES
+269B..269C    ; Extended_Pictographic# E1.0   [2] (⚛️..⚜️)    atom symbol..fleur-de-lis
+269D..269F    ; Extended_Pictographic# E0.0   [3] (⚝..⚟)    OUTLINED WHITE STAR..THREE LINES CONVERGING LEFT
+26A0..26A1    ; Extended_Pictographic# E0.6   [2] (⚠️..⚡)    warning..high voltage
+26A2..26A6    ; Extended_Pictographic# E0.0   [5] (⚢..⚦)    DOUBLED FEMALE SIGN..MALE WITH STROKE SIGN
+26A7          ; Extended_Pictographic# E13.0  [1] (⚧️)       transgender symbol
+26A8..26A9    ; Extended_Pictographic# E0.0   [2] (⚨..⚩)    VERTICAL MALE WITH STROKE SIGN..HORIZONTAL MALE WITH STROKE SIGN
+26AA..26AB    ; Extended_Pictographic# E0.6   [2] (⚪..⚫)    white circle..black circle
+26AC..26AF    ; Extended_Pictographic# E0.0   [4] (⚬..⚯)    MEDIUM SMALL WHITE CIRCLE..UNMARRIED PARTNERSHIP SYMBOL
+26B0..26B1    ; Extended_Pictographic# E1.0   [2] (⚰️..⚱️)    coffin..funeral urn
+26B2..26BC    ; Extended_Pictographic# E0.0  [11] (⚲..⚼)    NEUTER..SESQUIQUADRATE
+26BD..26BE    ; Extended_Pictographic# E0.6   [2] (⚽..⚾)    soccer ball..baseball
+26BF..26C3    ; Extended_Pictographic# E0.0   [5] (⚿..⛃)    SQUARED KEY..BLACK DRAUGHTS KING
+26C4..26C5    ; Extended_Pictographic# E0.6   [2] (⛄..⛅)    snowman without snow..sun behind cloud
+26C6..26C7    ; Extended_Pictographic# E0.0   [2] (⛆..⛇)    RAIN..BLACK SNOWMAN
+26C8          ; Extended_Pictographic# E0.7   [1] (⛈️)       cloud with lightning and rain
+26C9..26CD    ; Extended_Pictographic# E0.0   [5] (⛉..⛍)    TURNED WHITE SHOGI PIECE..DISABLED CAR
+26CE          ; Extended_Pictographic# E0.6   [1] (⛎)       Ophiuchus
+26CF          ; Extended_Pictographic# E0.7   [1] (⛏️)       pick
+26D0          ; Extended_Pictographic# E0.0   [1] (⛐)       CAR SLIDING
+26D1          ; Extended_Pictographic# E0.7   [1] (⛑️)       rescue worker’s helmet
+26D2          ; Extended_Pictographic# E0.0   [1] (⛒)       CIRCLED CROSSING LANES
+26D3          ; Extended_Pictographic# E0.7   [1] (⛓️)       chains
+26D4          ; Extended_Pictographic# E0.6   [1] (⛔)       no entry
+26D5..26E8    ; Extended_Pictographic# E0.0  [20] (⛕..⛨)    ALTERNATE ONE-WAY LEFT WAY TRAFFIC..BLACK CROSS ON SHIELD
+26E9          ; Extended_Pictographic# E0.7   [1] (⛩️)       shinto shrine
+26EA          ; Extended_Pictographic# E0.6   [1] (⛪)       church
+26EB..26EF    ; Extended_Pictographic# E0.0   [5] (⛫..⛯)    CASTLE..MAP SYMBOL FOR LIGHTHOUSE
+26F0..26F1    ; Extended_Pictographic# E0.7   [2] (⛰️..⛱️)    mountain..umbrella on ground
+26F2..26F3    ; Extended_Pictographic# E0.6   [2] (⛲..⛳)    fountain..flag in hole
+26F4          ; Extended_Pictographic# E0.7   [1] (⛴️)       ferry
+26F5          ; Extended_Pictographic# E0.6   [1] (⛵)       sailboat
+26F6          ; Extended_Pictographic# E0.0   [1] (⛶)       SQUARE FOUR CORNERS
+26F7..26F9    ; Extended_Pictographic# E0.7   [3] (⛷️..⛹️)    skier..person bouncing ball
+26FA          ; Extended_Pictographic# E0.6   [1] (⛺)       tent
+26FB..26FC    ; Extended_Pictographic# E0.0   [2] (⛻..⛼)    JAPANESE BANK SYMBOL..HEADSTONE GRAVEYARD SYMBOL
+26FD          ; Extended_Pictographic# E0.6   [1] (⛽)       fuel pump
+26FE..2701    ; Extended_Pictographic# E0.0   [4] (⛾..✁)    CUP ON BLACK SQUARE..UPPER BLADE SCISSORS
+2702          ; Extended_Pictographic# E0.6   [1] (✂️)       scissors
+2703..2704    ; Extended_Pictographic# E0.0   [2] (✃..✄)    LOWER BLADE SCISSORS..WHITE SCISSORS
+2705          ; Extended_Pictographic# E0.6   [1] (✅)       check mark button
+2708..270C    ; Extended_Pictographic# E0.6   [5] (✈️..✌️)    airplane..victory hand
+270D          ; Extended_Pictographic# E0.7   [1] (✍️)       writing hand
+270E          ; Extended_Pictographic# E0.0   [1] (✎)       LOWER RIGHT PENCIL
+270F          ; Extended_Pictographic# E0.6   [1] (✏️)       pencil
+2710..2711    ; Extended_Pictographic# E0.0   [2] (✐..✑)    UPPER RIGHT PENCIL..WHITE NIB
+2712          ; Extended_Pictographic# E0.6   [1] (✒️)       black nib
+2714          ; Extended_Pictographic# E0.6   [1] (✔️)       check mark
+2716          ; Extended_Pictographic# E0.6   [1] (✖️)       multiply
+271D          ; Extended_Pictographic# E0.7   [1] (✝️)       latin cross
+2721          ; Extended_Pictographic# E0.7   [1] (✡️)       star of David
+2728          ; Extended_Pictographic# E0.6   [1] (✨)       sparkles
+2733..2734    ; Extended_Pictographic# E0.6   [2] (✳️..✴️)    eight-spoked asterisk..eight-pointed star
+2744          ; Extended_Pictographic# E0.6   [1] (❄️)       snowflake
+2747          ; Extended_Pictographic# E0.6   [1] (❇️)       sparkle
+274C          ; Extended_Pictographic# E0.6   [1] (❌)       cross mark
+274E          ; Extended_Pictographic# E0.6   [1] (❎)       cross mark button
+2753..2755    ; Extended_Pictographic# E0.6   [3] (❓..❕)    question mark..white exclamation mark
+2757          ; Extended_Pictographic# E0.6   [1] (❗)       exclamation mark
+2763          ; Extended_Pictographic# E1.0   [1] (❣️)       heart exclamation
+2764          ; Extended_Pictographic# E0.6   [1] (❤️)       red heart
+2765..2767    ; Extended_Pictographic# E0.0   [3] (❥..❧)    ROTATED HEAVY BLACK HEART BULLET..ROTATED FLORAL HEART BULLET
+2795..2797    ; Extended_Pictographic# E0.6   [3] (➕..➗)    plus..divide
+27A1          ; Extended_Pictographic# E0.6   [1] (➡️)       right arrow
+27B0          ; Extended_Pictographic# E0.6   [1] (➰)       curly loop
+27BF          ; Extended_Pictographic# E1.0   [1] (➿)       double curly loop
+2934..2935    ; Extended_Pictographic# E0.6   [2] (⤴️..⤵️)    right arrow curving up..right arrow curving down
+2B05..2B07    ; Extended_Pictographic# E0.6   [3] (⬅️..⬇️)    left arrow..down arrow
+2B1B..2B1C    ; Extended_Pictographic# E0.6   [2] (⬛..⬜)    black large square..white large square
+2B50          ; Extended_Pictographic# E0.6   [1] (⭐)       star
+2B55          ; Extended_Pictographic# E0.6   [1] (⭕)       hollow red circle
+3030          ; Extended_Pictographic# E0.6   [1] (〰️)       wavy dash
+303D          ; Extended_Pictographic# E0.6   [1] (〽️)       part alternation mark
+3297          ; Extended_Pictographic# E0.6   [1] (㊗️)       Japanese “congratulations” button
+3299          ; Extended_Pictographic# E0.6   [1] (㊙️)       Japanese “secret” button
+1F000..1F003  ; Extended_Pictographic# E0.0   [4] (🀀..🀃)    MAHJONG TILE EAST WIND..MAHJONG TILE NORTH WIND
+1F004         ; Extended_Pictographic# E0.6   [1] (🀄)       mahjong red dragon
+1F005..1F0CE  ; Extended_Pictographic# E0.0 [202] (🀅..🃎)    MAHJONG TILE GREEN DRAGON..PLAYING CARD KING OF DIAMONDS
+1F0CF         ; Extended_Pictographic# E0.6   [1] (🃏)       joker
+1F0D0..1F0FF  ; Extended_Pictographic# E0.0  [48] (🃐..🃿)    <reserved-1F0D0>..<reserved-1F0FF>
+1F10D..1F10F  ; Extended_Pictographic# E0.0   [3] (🄍..🄏)    CIRCLED ZERO WITH SLASH..CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH
+1F12F         ; Extended_Pictographic# E0.0   [1] (🄯)       COPYLEFT SYMBOL
+1F16C..1F16F  ; Extended_Pictographic# E0.0   [4] (🅬..🅯)    RAISED MR SIGN..CIRCLED HUMAN FIGURE
+1F170..1F171  ; Extended_Pictographic# E0.6   [2] (🅰️..🅱️)    A button (blood type)..B button (blood type)
+1F17E..1F17F  ; Extended_Pictographic# E0.6   [2] (🅾️..🅿️)    O button (blood type)..P button
+1F18E         ; Extended_Pictographic# E0.6   [1] (🆎)       AB button (blood type)
+1F191..1F19A  ; Extended_Pictographic# E0.6  [10] (🆑..🆚)    CL button..VS button
+1F1AD..1F1E5  ; Extended_Pictographic# E0.0  [57] (🆭..🇥)    MASK WORK SYMBOL..<reserved-1F1E5>
+1F201..1F202  ; Extended_Pictographic# E0.6   [2] (🈁..🈂️)    Japanese “here” button..Japanese “service charge” button
+1F203..1F20F  ; Extended_Pictographic# E0.0  [13] (🈃..🈏)    <reserved-1F203>..<reserved-1F20F>
+1F21A         ; Extended_Pictographic# E0.6   [1] (🈚)       Japanese “free of charge” button
+1F22F         ; Extended_Pictographic# E0.6   [1] (🈯)       Japanese “reserved” button
+1F232..1F23A  ; Extended_Pictographic# E0.6   [9] (🈲..🈺)    Japanese “prohibited” button..Japanese “open for business” button
+1F23C..1F23F  ; Extended_Pictographic# E0.0   [4] (🈼..🈿)    <reserved-1F23C>..<reserved-1F23F>
+1F249..1F24F  ; Extended_Pictographic# E0.0   [7] (🉉..🉏)    <reserved-1F249>..<reserved-1F24F>
+1F250..1F251  ; Extended_Pictographic# E0.6   [2] (🉐..🉑)    Japanese “bargain” button..Japanese “acceptable” button
+1F252..1F2FF  ; Extended_Pictographic# E0.0 [174] (🉒..🋿)    <reserved-1F252>..<reserved-1F2FF>
+1F300..1F30C  ; Extended_Pictographic# E0.6  [13] (🌀..🌌)    cyclone..milky way
+1F30D..1F30E  ; Extended_Pictographic# E0.7   [2] (🌍..🌎)    globe showing Europe-Africa..globe showing Americas
+1F30F         ; Extended_Pictographic# E0.6   [1] (🌏)       globe showing Asia-Australia
+1F310         ; Extended_Pictographic# E1.0   [1] (🌐)       globe with meridians
+1F311         ; Extended_Pictographic# E0.6   [1] (🌑)       new moon
+1F312         ; Extended_Pictographic# E1.0   [1] (🌒)       waxing crescent moon
+1F313..1F315  ; Extended_Pictographic# E0.6   [3] (🌓..🌕)    first quarter moon..full moon
+1F316..1F318  ; Extended_Pictographic# E1.0   [3] (🌖..🌘)    waning gibbous moon..waning crescent moon
+1F319         ; Extended_Pictographic# E0.6   [1] (🌙)       crescent moon
+1F31A         ; Extended_Pictographic# E1.0   [1] (🌚)       new moon face
+1F31B         ; Extended_Pictographic# E0.6   [1] (🌛)       first quarter moon face
+1F31C         ; Extended_Pictographic# E0.7   [1] (🌜)       last quarter moon face
+1F31D..1F31E  ; Extended_Pictographic# E1.0   [2] (🌝..🌞)    full moon face..sun with face
+1F31F..1F320  ; Extended_Pictographic# E0.6   [2] (🌟..🌠)    glowing star..shooting star
+1F321         ; Extended_Pictographic# E0.7   [1] (🌡️)       thermometer
+1F322..1F323  ; Extended_Pictographic# E0.0   [2] (🌢..🌣)    BLACK DROPLET..WHITE SUN
+1F324..1F32C  ; Extended_Pictographic# E0.7   [9] (🌤️..🌬️)    sun behind small cloud..wind face
+1F32D..1F32F  ; Extended_Pictographic# E1.0   [3] (🌭..🌯)    hot dog..burrito
+1F330..1F331  ; Extended_Pictographic# E0.6   [2] (🌰..🌱)    chestnut..seedling
+1F332..1F333  ; Extended_Pictographic# E1.0   [2] (🌲..🌳)    evergreen tree..deciduous tree
+1F334..1F335  ; Extended_Pictographic# E0.6   [2] (🌴..🌵)    palm tree..cactus
+1F336         ; Extended_Pictographic# E0.7   [1] (🌶️)       hot pepper
+1F337..1F34A  ; Extended_Pictographic# E0.6  [20] (🌷..🍊)    tulip..tangerine
+1F34B         ; Extended_Pictographic# E1.0   [1] (🍋)       lemon
+1F34C..1F34F  ; Extended_Pictographic# E0.6   [4] (🍌..🍏)    banana..green apple
+1F350         ; Extended_Pictographic# E1.0   [1] (🍐)       pear
+1F351..1F37B  ; Extended_Pictographic# E0.6  [43] (🍑..🍻)    peach..clinking beer mugs
+1F37C         ; Extended_Pictographic# E1.0   [1] (🍼)       baby bottle
+1F37D         ; Extended_Pictographic# E0.7   [1] (🍽️)       fork and knife with plate
+1F37E..1F37F  ; Extended_Pictographic# E1.0   [2] (🍾..🍿)    bottle with popping cork..popcorn
+1F380..1F393  ; Extended_Pictographic# E0.6  [20] (🎀..🎓)    ribbon..graduation cap
+1F394..1F395  ; Extended_Pictographic# E0.0   [2] (🎔..🎕)    HEART WITH TIP ON THE LEFT..BOUQUET OF FLOWERS
+1F396..1F397  ; Extended_Pictographic# E0.7   [2] (🎖️..🎗️)    military medal..reminder ribbon
+1F398         ; Extended_Pictographic# E0.0   [1] (🎘)       MUSICAL KEYBOARD WITH JACKS
+1F399..1F39B  ; Extended_Pictographic# E0.7   [3] (🎙️..🎛️)    studio microphone..control knobs
+1F39C..1F39D  ; Extended_Pictographic# E0.0   [2] (🎜..🎝)    BEAMED ASCENDING MUSICAL NOTES..BEAMED DESCENDING MUSICAL NOTES
+1F39E..1F39F  ; Extended_Pictographic# E0.7   [2] (🎞️..🎟️)    film frames..admission tickets
+1F3A0..1F3C4  ; Extended_Pictographic# E0.6  [37] (🎠..🏄)    carousel horse..person surfing
+1F3C5         ; Extended_Pictographic# E1.0   [1] (🏅)       sports medal
+1F3C6         ; Extended_Pictographic# E0.6   [1] (🏆)       trophy
+1F3C7         ; Extended_Pictographic# E1.0   [1] (🏇)       horse racing
+1F3C8         ; Extended_Pictographic# E0.6   [1] (🏈)       american football
+1F3C9         ; Extended_Pictographic# E1.0   [1] (🏉)       rugby football
+1F3CA         ; Extended_Pictographic# E0.6   [1] (🏊)       person swimming
+1F3CB..1F3CE  ; Extended_Pictographic# E0.7   [4] (🏋️..🏎️)    person lifting weights..racing car
+1F3CF..1F3D3  ; Extended_Pictographic# E1.0   [5] (🏏..🏓)    cricket game..ping pong
+1F3D4..1F3DF  ; Extended_Pictographic# E0.7  [12] (🏔️..🏟️)    snow-capped mountain..stadium
+1F3E0..1F3E3  ; Extended_Pictographic# E0.6   [4] (🏠..🏣)    house..Japanese post office
+1F3E4         ; Extended_Pictographic# E1.0   [1] (🏤)       post office
+1F3E5..1F3F0  ; Extended_Pictographic# E0.6  [12] (🏥..🏰)    hospital..castle
+1F3F1..1F3F2  ; Extended_Pictographic# E0.0   [2] (🏱..🏲)    WHITE PENNANT..BLACK PENNANT
+1F3F3         ; Extended_Pictographic# E0.7   [1] (🏳️)       white flag
+1F3F4         ; Extended_Pictographic# E1.0   [1] (🏴)       black flag
+1F3F5         ; Extended_Pictographic# E0.7   [1] (🏵️)       rosette
+1F3F6         ; Extended_Pictographic# E0.0   [1] (🏶)       BLACK ROSETTE
+1F3F7         ; Extended_Pictographic# E0.7   [1] (🏷️)       label
+1F3F8..1F3FA  ; Extended_Pictographic# E1.0   [3] (🏸..🏺)    badminton..amphora
+1F400..1F407  ; Extended_Pictographic# E1.0   [8] (🐀..🐇)    rat..rabbit
+1F408         ; Extended_Pictographic# E0.7   [1] (🐈)       cat
+1F409..1F40B  ; Extended_Pictographic# E1.0   [3] (🐉..🐋)    dragon..whale
+1F40C..1F40E  ; Extended_Pictographic# E0.6   [3] (🐌..🐎)    snail..horse
+1F40F..1F410  ; Extended_Pictographic# E1.0   [2] (🐏..🐐)    ram..goat
+1F411..1F412  ; Extended_Pictographic# E0.6   [2] (🐑..🐒)    ewe..monkey
+1F413         ; Extended_Pictographic# E1.0   [1] (🐓)       rooster
+1F414         ; Extended_Pictographic# E0.6   [1] (🐔)       chicken
+1F415         ; Extended_Pictographic# E0.7   [1] (🐕)       dog
+1F416         ; Extended_Pictographic# E1.0   [1] (🐖)       pig
+1F417..1F429  ; Extended_Pictographic# E0.6  [19] (🐗..🐩)    boar..poodle
+1F42A         ; Extended_Pictographic# E1.0   [1] (🐪)       camel
+1F42B..1F43E  ; Extended_Pictographic# E0.6  [20] (🐫..🐾)    two-hump camel..paw prints
+1F43F         ; Extended_Pictographic# E0.7   [1] (🐿️)       chipmunk
+1F440         ; Extended_Pictographic# E0.6   [1] (👀)       eyes
+1F441         ; Extended_Pictographic# E0.7   [1] (👁️)       eye
+1F442..1F464  ; Extended_Pictographic# E0.6  [35] (👂..👤)    ear..bust in silhouette
+1F465         ; Extended_Pictographic# E1.0   [1] (👥)       busts in silhouette
+1F466..1F46B  ; Extended_Pictographic# E0.6   [6] (👦..👫)    boy..woman and man holding hands
+1F46C..1F46D  ; Extended_Pictographic# E1.0   [2] (👬..👭)    men holding hands..women holding hands
+1F46E..1F4AC  ; Extended_Pictographic# E0.6  [63] (👮..💬)    police officer..speech balloon
+1F4AD         ; Extended_Pictographic# E1.0   [1] (💭)       thought balloon
+1F4AE..1F4B5  ; Extended_Pictographic# E0.6   [8] (💮..💵)    white flower..dollar banknote
+1F4B6..1F4B7  ; Extended_Pictographic# E1.0   [2] (💶..💷)    euro banknote..pound banknote
+1F4B8..1F4EB  ; Extended_Pictographic# E0.6  [52] (💸..📫)    money with wings..closed mailbox with raised flag
+1F4EC..1F4ED  ; Extended_Pictographic# E0.7   [2] (📬..📭)    open mailbox with raised flag..open mailbox with lowered flag
+1F4EE         ; Extended_Pictographic# E0.6   [1] (📮)       postbox
+1F4EF         ; Extended_Pictographic# E1.0   [1] (📯)       postal horn
+1F4F0..1F4F4  ; Extended_Pictographic# E0.6   [5] (📰..📴)    newspaper..mobile phone off
+1F4F5         ; Extended_Pictographic# E1.0   [1] (📵)       no mobile phones
+1F4F6..1F4F7  ; Extended_Pictographic# E0.6   [2] (📶..📷)    antenna bars..camera
+1F4F8         ; Extended_Pictographic# E1.0   [1] (📸)       camera with flash
+1F4F9..1F4FC  ; Extended_Pictographic# E0.6   [4] (📹..📼)    video camera..videocassette
+1F4FD         ; Extended_Pictographic# E0.7   [1] (📽️)       film projector
+1F4FE         ; Extended_Pictographic# E0.0   [1] (📾)       PORTABLE STEREO
+1F4FF..1F502  ; Extended_Pictographic# E1.0   [4] (📿..🔂)    prayer beads..repeat single button
+1F503         ; Extended_Pictographic# E0.6   [1] (🔃)       clockwise vertical arrows
+1F504..1F507  ; Extended_Pictographic# E1.0   [4] (🔄..🔇)    counterclockwise arrows button..muted speaker
+1F508         ; Extended_Pictographic# E0.7   [1] (🔈)       speaker low volume
+1F509         ; Extended_Pictographic# E1.0   [1] (🔉)       speaker medium volume
+1F50A..1F514  ; Extended_Pictographic# E0.6  [11] (🔊..🔔)    speaker high volume..bell
+1F515         ; Extended_Pictographic# E1.0   [1] (🔕)       bell with slash
+1F516..1F52B  ; Extended_Pictographic# E0.6  [22] (🔖..🔫)    bookmark..pistol
+1F52C..1F52D  ; Extended_Pictographic# E1.0   [2] (🔬..🔭)    microscope..telescope
+1F52E..1F53D  ; Extended_Pictographic# E0.6  [16] (🔮..🔽)    crystal ball..downwards button
+1F546..1F548  ; Extended_Pictographic# E0.0   [3] (🕆..🕈)    WHITE LATIN CROSS..CELTIC CROSS
+1F549..1F54A  ; Extended_Pictographic# E0.7   [2] (🕉️..🕊️)    om..dove
+1F54B..1F54E  ; Extended_Pictographic# E1.0   [4] (🕋..🕎)    kaaba..menorah
+1F54F         ; Extended_Pictographic# E0.0   [1] (🕏)       BOWL OF HYGIEIA
+1F550..1F55B  ; Extended_Pictographic# E0.6  [12] (🕐..🕛)    one o’clock..twelve o’clock
+1F55C..1F567  ; Extended_Pictographic# E0.7  [12] (🕜..🕧)    one-thirty..twelve-thirty
+1F568..1F56E  ; Extended_Pictographic# E0.0   [7] (🕨..🕮)    RIGHT SPEAKER..BOOK
+1F56F..1F570  ; Extended_Pictographic# E0.7   [2] (🕯️..🕰️)    candle..mantelpiece clock
+1F571..1F572  ; Extended_Pictographic# E0.0   [2] (🕱..🕲)    BLACK SKULL AND CROSSBONES..NO PIRACY
+1F573..1F579  ; Extended_Pictographic# E0.7   [7] (🕳️..🕹️)    hole..joystick
+1F57A         ; Extended_Pictographic# E3.0   [1] (🕺)       man dancing
+1F57B..1F586  ; Extended_Pictographic# E0.0  [12] (🕻..🖆)    LEFT HAND TELEPHONE RECEIVER..PEN OVER STAMPED ENVELOPE
+1F587         ; Extended_Pictographic# E0.7   [1] (🖇️)       linked paperclips
+1F588..1F589  ; Extended_Pictographic# E0.0   [2] (🖈..🖉)    BLACK PUSHPIN..LOWER LEFT PENCIL
+1F58A..1F58D  ; Extended_Pictographic# E0.7   [4] (🖊️..🖍️)    pen..crayon
+1F58E..1F58F  ; Extended_Pictographic# E0.0   [2] (🖎..🖏)    LEFT WRITING HAND..TURNED OK HAND SIGN
+1F590         ; Extended_Pictographic# E0.7   [1] (🖐️)       hand with fingers splayed
+1F591..1F594  ; Extended_Pictographic# E0.0   [4] (🖑..🖔)    REVERSED RAISED HAND WITH FINGERS SPLAYED..REVERSED VICTORY HAND
+1F595..1F596  ; Extended_Pictographic# E1.0   [2] (🖕..🖖)    middle finger..vulcan salute
+1F597..1F5A3  ; Extended_Pictographic# E0.0  [13] (🖗..🖣)    WHITE DOWN POINTING LEFT HAND INDEX..BLACK DOWN POINTING BACKHAND INDEX
+1F5A4         ; Extended_Pictographic# E3.0   [1] (🖤)       black heart
+1F5A5         ; Extended_Pictographic# E0.7   [1] (🖥️)       desktop computer
+1F5A6..1F5A7  ; Extended_Pictographic# E0.0   [2] (🖦..🖧)    KEYBOARD AND MOUSE..THREE NETWORKED COMPUTERS
+1F5A8         ; Extended_Pictographic# E0.7   [1] (🖨️)       printer
+1F5A9..1F5B0  ; Extended_Pictographic# E0.0   [8] (🖩..🖰)    POCKET CALCULATOR..TWO BUTTON MOUSE
+1F5B1..1F5B2  ; Extended_Pictographic# E0.7   [2] (🖱️..🖲️)    computer mouse..trackball
+1F5B3..1F5BB  ; Extended_Pictographic# E0.0   [9] (🖳..🖻)    OLD PERSONAL COMPUTER..DOCUMENT WITH PICTURE
+1F5BC         ; Extended_Pictographic# E0.7   [1] (🖼️)       framed picture
+1F5BD..1F5C1  ; Extended_Pictographic# E0.0   [5] (🖽..🗁)    FRAME WITH TILES..OPEN FOLDER
+1F5C2..1F5C4  ; Extended_Pictographic# E0.7   [3] (🗂️..🗄️)    card index dividers..file cabinet
+1F5C5..1F5D0  ; Extended_Pictographic# E0.0  [12] (🗅..🗐)    EMPTY NOTE..PAGES
+1F5D1..1F5D3  ; Extended_Pictographic# E0.7   [3] (🗑️..🗓️)    wastebasket..spiral calendar
+1F5D4..1F5DB  ; Extended_Pictographic# E0.0   [8] (🗔..🗛)    DESKTOP WINDOW..DECREASE FONT SIZE SYMBOL
+1F5DC..1F5DE  ; Extended_Pictographic# E0.7   [3] (🗜️..🗞️)    clamp..rolled-up newspaper
+1F5DF..1F5E0  ; Extended_Pictographic# E0.0   [2] (🗟..🗠)    PAGE WITH CIRCLED TEXT..STOCK CHART
+1F5E1         ; Extended_Pictographic# E0.7   [1] (🗡️)       dagger
+1F5E2         ; Extended_Pictographic# E0.0   [1] (🗢)       LIPS
+1F5E3         ; Extended_Pictographic# E0.7   [1] (🗣️)       speaking head
+1F5E4..1F5E7  ; Extended_Pictographic# E0.0   [4] (🗤..🗧)    THREE RAYS ABOVE..THREE RAYS RIGHT
+1F5E8         ; Extended_Pictographic# E2.0   [1] (🗨️)       left speech bubble
+1F5E9..1F5EE  ; Extended_Pictographic# E0.0   [6] (🗩..🗮)    RIGHT SPEECH BUBBLE..LEFT ANGER BUBBLE
+1F5EF         ; Extended_Pictographic# E0.7   [1] (🗯️)       right anger bubble
+1F5F0..1F5F2  ; Extended_Pictographic# E0.0   [3] (🗰..🗲)    MOOD BUBBLE..LIGHTNING MOOD
+1F5F3         ; Extended_Pictographic# E0.7   [1] (🗳️)       ballot box with ballot
+1F5F4..1F5F9  ; Extended_Pictographic# E0.0   [6] (🗴..🗹)    BALLOT SCRIPT X..BALLOT BOX WITH BOLD CHECK
+1F5FA         ; Extended_Pictographic# E0.7   [1] (🗺️)       world map
+1F5FB..1F5FF  ; Extended_Pictographic# E0.6   [5] (🗻..🗿)    mount fuji..moai
+1F600         ; Extended_Pictographic# E1.0   [1] (😀)       grinning face
+1F601..1F606  ; Extended_Pictographic# E0.6   [6] (😁..😆)    beaming face with smiling eyes..grinning squinting face
+1F607..1F608  ; Extended_Pictographic# E1.0   [2] (😇..😈)    smiling face with halo..smiling face with horns
+1F609..1F60D  ; Extended_Pictographic# E0.6   [5] (😉..😍)    winking face..smiling face with heart-eyes
+1F60E         ; Extended_Pictographic# E1.0   [1] (😎)       smiling face with sunglasses
+1F60F         ; Extended_Pictographic# E0.6   [1] (😏)       smirking face
+1F610         ; Extended_Pictographic# E0.7   [1] (😐)       neutral face
+1F611         ; Extended_Pictographic# E1.0   [1] (😑)       expressionless face
+1F612..1F614  ; Extended_Pictographic# E0.6   [3] (😒..😔)    unamused face..pensive face
+1F615         ; Extended_Pictographic# E1.0   [1] (😕)       confused face
+1F616         ; Extended_Pictographic# E0.6   [1] (😖)       confounded face
+1F617         ; Extended_Pictographic# E1.0   [1] (😗)       kissing face
+1F618         ; Extended_Pictographic# E0.6   [1] (😘)       face blowing a kiss
+1F619         ; Extended_Pictographic# E1.0   [1] (😙)       kissing face with smiling eyes
+1F61A         ; Extended_Pictographic# E0.6   [1] (😚)       kissing face with closed eyes
+1F61B         ; Extended_Pictographic# E1.0   [1] (😛)       face with tongue
+1F61C..1F61E  ; Extended_Pictographic# E0.6   [3] (😜..😞)    winking face with tongue..disappointed face
+1F61F         ; Extended_Pictographic# E1.0   [1] (😟)       worried face
+1F620..1F625  ; Extended_Pictographic# E0.6   [6] (😠..😥)    angry face..sad but relieved face
+1F626..1F627  ; Extended_Pictographic# E1.0   [2] (😦..😧)    frowning face with open mouth..anguished face
+1F628..1F62B  ; Extended_Pictographic# E0.6   [4] (😨..😫)    fearful face..tired face
+1F62C         ; Extended_Pictographic# E1.0   [1] (😬)       grimacing face
+1F62D         ; Extended_Pictographic# E0.6   [1] (😭)       loudly crying face
+1F62E..1F62F  ; Extended_Pictographic# E1.0   [2] (😮..😯)    face with open mouth..hushed face
+1F630..1F633  ; Extended_Pictographic# E0.6   [4] (😰..😳)    anxious face with sweat..flushed face
+1F634         ; Extended_Pictographic# E1.0   [1] (😴)       sleeping face
+1F635         ; Extended_Pictographic# E0.6   [1] (😵)       dizzy face
+1F636         ; Extended_Pictographic# E1.0   [1] (😶)       face without mouth
+1F637..1F640  ; Extended_Pictographic# E0.6  [10] (😷..🙀)    face with medical mask..weary cat
+1F641..1F644  ; Extended_Pictographic# E1.0   [4] (🙁..🙄)    slightly frowning face..face with rolling eyes
+1F645..1F64F  ; Extended_Pictographic# E0.6  [11] (🙅..🙏)    person gesturing NO..folded hands
+1F680         ; Extended_Pictographic# E0.6   [1] (🚀)       rocket
+1F681..1F682  ; Extended_Pictographic# E1.0   [2] (🚁..🚂)    helicopter..locomotive
+1F683..1F685  ; Extended_Pictographic# E0.6   [3] (🚃..🚅)    railway car..bullet train
+1F686         ; Extended_Pictographic# E1.0   [1] (🚆)       train
+1F687         ; Extended_Pictographic# E0.6   [1] (🚇)       metro
+1F688         ; Extended_Pictographic# E1.0   [1] (🚈)       light rail
+1F689         ; Extended_Pictographic# E0.6   [1] (🚉)       station
+1F68A..1F68B  ; Extended_Pictographic# E1.0   [2] (🚊..🚋)    tram..tram car
+1F68C         ; Extended_Pictographic# E0.6   [1] (🚌)       bus
+1F68D         ; Extended_Pictographic# E0.7   [1] (🚍)       oncoming bus
+1F68E         ; Extended_Pictographic# E1.0   [1] (🚎)       trolleybus
+1F68F         ; Extended_Pictographic# E0.6   [1] (🚏)       bus stop
+1F690         ; Extended_Pictographic# E1.0   [1] (🚐)       minibus
+1F691..1F693  ; Extended_Pictographic# E0.6   [3] (🚑..🚓)    ambulance..police car
+1F694         ; Extended_Pictographic# E0.7   [1] (🚔)       oncoming police car
+1F695         ; Extended_Pictographic# E0.6   [1] (🚕)       taxi
+1F696         ; Extended_Pictographic# E1.0   [1] (🚖)       oncoming taxi
+1F697         ; Extended_Pictographic# E0.6   [1] (🚗)       automobile
+1F698         ; Extended_Pictographic# E0.7   [1] (🚘)       oncoming automobile
+1F699..1F69A  ; Extended_Pictographic# E0.6   [2] (🚙..🚚)    sport utility vehicle..delivery truck
+1F69B..1F6A1  ; Extended_Pictographic# E1.0   [7] (🚛..🚡)    articulated lorry..aerial tramway
+1F6A2         ; Extended_Pictographic# E0.6   [1] (🚢)       ship
+1F6A3         ; Extended_Pictographic# E1.0   [1] (🚣)       person rowing boat
+1F6A4..1F6A5  ; Extended_Pictographic# E0.6   [2] (🚤..🚥)    speedboat..horizontal traffic light
+1F6A6         ; Extended_Pictographic# E1.0   [1] (🚦)       vertical traffic light
+1F6A7..1F6AD  ; Extended_Pictographic# E0.6   [7] (🚧..🚭)    construction..no smoking
+1F6AE..1F6B1  ; Extended_Pictographic# E1.0   [4] (🚮..🚱)    litter in bin sign..non-potable water
+1F6B2         ; Extended_Pictographic# E0.6   [1] (🚲)       bicycle
+1F6B3..1F6B5  ; Extended_Pictographic# E1.0   [3] (🚳..🚵)    no bicycles..person mountain biking
+1F6B6         ; Extended_Pictographic# E0.6   [1] (🚶)       person walking
+1F6B7..1F6B8  ; Extended_Pictographic# E1.0   [2] (🚷..🚸)    no pedestrians..children crossing
+1F6B9..1F6BE  ; Extended_Pictographic# E0.6   [6] (🚹..🚾)    men’s room..water closet
+1F6BF         ; Extended_Pictographic# E1.0   [1] (🚿)       shower
+1F6C0         ; Extended_Pictographic# E0.6   [1] (🛀)       person taking bath
+1F6C1..1F6C5  ; Extended_Pictographic# E1.0   [5] (🛁..🛅)    bathtub..left luggage
+1F6C6..1F6CA  ; Extended_Pictographic# E0.0   [5] (🛆..🛊)    TRIANGLE WITH ROUNDED CORNERS..GIRLS SYMBOL
+1F6CB         ; Extended_Pictographic# E0.7   [1] (🛋️)       couch and lamp
+1F6CC         ; Extended_Pictographic# E1.0   [1] (🛌)       person in bed
+1F6CD..1F6CF  ; Extended_Pictographic# E0.7   [3] (🛍️..🛏️)    shopping bags..bed
+1F6D0         ; Extended_Pictographic# E1.0   [1] (🛐)       place of worship
+1F6D1..1F6D2  ; Extended_Pictographic# E3.0   [2] (🛑..🛒)    stop sign..shopping cart
+1F6D3..1F6D4  ; Extended_Pictographic# E0.0   [2] (🛓..🛔)    STUPA..PAGODA
+1F6D5         ; Extended_Pictographic# E12.0  [1] (🛕)       hindu temple
+1F6D6..1F6D7  ; Extended_Pictographic# E13.0  [2] (🛖..🛗)    hut..elevator
+1F6D8..1F6DF  ; Extended_Pictographic# E0.0   [8] (🛘..🛟)    <reserved-1F6D8>..<reserved-1F6DF>
+1F6E0..1F6E5  ; Extended_Pictographic# E0.7   [6] (🛠️..🛥️)    hammer and wrench..motor boat
+1F6E6..1F6E8  ; Extended_Pictographic# E0.0   [3] (🛦..🛨)    UP-POINTING MILITARY AIRPLANE..UP-POINTING SMALL AIRPLANE
+1F6E9         ; Extended_Pictographic# E0.7   [1] (🛩️)       small airplane
+1F6EA         ; Extended_Pictographic# E0.0   [1] (🛪)       NORTHEAST-POINTING AIRPLANE
+1F6EB..1F6EC  ; Extended_Pictographic# E1.0   [2] (🛫..🛬)    airplane departure..airplane arrival
+1F6ED..1F6EF  ; Extended_Pictographic# E0.0   [3] (🛭..🛯)    <reserved-1F6ED>..<reserved-1F6EF>
+1F6F0         ; Extended_Pictographic# E0.7   [1] (🛰️)       satellite
+1F6F1..1F6F2  ; Extended_Pictographic# E0.0   [2] (🛱..🛲)    ONCOMING FIRE ENGINE..DIESEL LOCOMOTIVE
+1F6F3         ; Extended_Pictographic# E0.7   [1] (🛳️)       passenger ship
+1F6F4..1F6F6  ; Extended_Pictographic# E3.0   [3] (🛴..🛶)    kick scooter..canoe
+1F6F7..1F6F8  ; Extended_Pictographic# E5.0   [2] (🛷..🛸)    sled..flying saucer
+1F6F9         ; Extended_Pictographic# E11.0  [1] (🛹)       skateboard
+1F6FA         ; Extended_Pictographic# E12.0  [1] (🛺)       auto rickshaw
+1F6FB..1F6FC  ; Extended_Pictographic# E13.0  [2] (🛻..🛼)    pickup truck..roller skate
+1F6FD..1F6FF  ; Extended_Pictographic# E0.0   [3] (🛽..🛿)    <reserved-1F6FD>..<reserved-1F6FF>
+1F774..1F77F  ; Extended_Pictographic# E0.0  [12] (🝴..🝿)    <reserved-1F774>..<reserved-1F77F>
+1F7D5..1F7DF  ; Extended_Pictographic# E0.0  [11] (🟕..🟟)    CIRCLED TRIANGLE..<reserved-1F7DF>
+1F7E0..1F7EB  ; Extended_Pictographic# E12.0 [12] (🟠..🟫)    orange circle..brown square
+1F7EC..1F7FF  ; Extended_Pictographic# E0.0  [20] (🟬..🟿)    <reserved-1F7EC>..<reserved-1F7FF>
+1F80C..1F80F  ; Extended_Pictographic# E0.0   [4] (🠌..🠏)    <reserved-1F80C>..<reserved-1F80F>
+1F848..1F84F  ; Extended_Pictographic# E0.0   [8] (🡈..🡏)    <reserved-1F848>..<reserved-1F84F>
+1F85A..1F85F  ; Extended_Pictographic# E0.0   [6] (🡚..🡟)    <reserved-1F85A>..<reserved-1F85F>
+1F888..1F88F  ; Extended_Pictographic# E0.0   [8] (🢈..🢏)    <reserved-1F888>..<reserved-1F88F>
+1F8AE..1F8FF  ; Extended_Pictographic# E0.0  [82] (🢮..🣿)    <reserved-1F8AE>..<reserved-1F8FF>
+1F90C         ; Extended_Pictographic# E13.0  [1] (🤌)       pinched fingers
+1F90D..1F90F  ; Extended_Pictographic# E12.0  [3] (🤍..🤏)    white heart..pinching hand
+1F910..1F918  ; Extended_Pictographic# E1.0   [9] (🤐..🤘)    zipper-mouth face..sign of the horns
+1F919..1F91E  ; Extended_Pictographic# E3.0   [6] (🤙..🤞)    call me hand..crossed fingers
+1F91F         ; Extended_Pictographic# E5.0   [1] (🤟)       love-you gesture
+1F920..1F927  ; Extended_Pictographic# E3.0   [8] (🤠..🤧)    cowboy hat face..sneezing face
+1F928..1F92F  ; Extended_Pictographic# E5.0   [8] (🤨..🤯)    face with raised eyebrow..exploding head
+1F930         ; Extended_Pictographic# E3.0   [1] (🤰)       pregnant woman
+1F931..1F932  ; Extended_Pictographic# E5.0   [2] (🤱..🤲)    breast-feeding..palms up together
+1F933..1F93A  ; Extended_Pictographic# E3.0   [8] (🤳..🤺)    selfie..person fencing
+1F93C..1F93E  ; Extended_Pictographic# E3.0   [3] (🤼..🤾)    people wrestling..person playing handball
+1F93F         ; Extended_Pictographic# E12.0  [1] (🤿)       diving mask
+1F940..1F945  ; Extended_Pictographic# E3.0   [6] (🥀..🥅)    wilted flower..goal net
+1F947..1F94B  ; Extended_Pictographic# E3.0   [5] (🥇..🥋)    1st place medal..martial arts uniform
+1F94C         ; Extended_Pictographic# E5.0   [1] (🥌)       curling stone
+1F94D..1F94F  ; Extended_Pictographic# E11.0  [3] (🥍..🥏)    lacrosse..flying disc
+1F950..1F95E  ; Extended_Pictographic# E3.0  [15] (🥐..🥞)    croissant..pancakes
+1F95F..1F96B  ; Extended_Pictographic# E5.0  [13] (🥟..🥫)    dumpling..canned food
+1F96C..1F970  ; Extended_Pictographic# E11.0  [5] (🥬..🥰)    leafy green..smiling face with hearts
+1F971         ; Extended_Pictographic# E12.0  [1] (🥱)       yawning face
+1F972         ; Extended_Pictographic# E13.0  [1] (🥲)       smiling face with tear
+1F973..1F976  ; Extended_Pictographic# E11.0  [4] (🥳..🥶)    partying face..cold face
+1F977..1F978  ; Extended_Pictographic# E13.0  [2] (🥷..🥸)    ninja..disguised face
+1F979         ; Extended_Pictographic# E0.0   [1] (🥹)       <reserved-1F979>
+1F97A         ; Extended_Pictographic# E11.0  [1] (🥺)       pleading face
+1F97B         ; Extended_Pictographic# E12.0  [1] (🥻)       sari
+1F97C..1F97F  ; Extended_Pictographic# E11.0  [4] (🥼..🥿)    lab coat..flat shoe
+1F980..1F984  ; Extended_Pictographic# E1.0   [5] (🦀..🦄)    crab..unicorn
+1F985..1F991  ; Extended_Pictographic# E3.0  [13] (🦅..🦑)    eagle..squid
+1F992..1F997  ; Extended_Pictographic# E5.0   [6] (🦒..🦗)    giraffe..cricket
+1F998..1F9A2  ; Extended_Pictographic# E11.0 [11] (🦘..🦢)    kangaroo..swan
+1F9A3..1F9A4  ; Extended_Pictographic# E13.0  [2] (🦣..🦤)    mammoth..dodo
+1F9A5..1F9AA  ; Extended_Pictographic# E12.0  [6] (🦥..🦪)    sloth..oyster
+1F9AB..1F9AD  ; Extended_Pictographic# E13.0  [3] (🦫..🦭)    beaver..seal
+1F9AE..1F9AF  ; Extended_Pictographic# E12.0  [2] (🦮..🦯)    guide dog..white cane
+1F9B0..1F9B9  ; Extended_Pictographic# E11.0 [10] (🦰..🦹)    red hair..supervillain
+1F9BA..1F9BF  ; Extended_Pictographic# E12.0  [6] (🦺..🦿)    safety vest..mechanical leg
+1F9C0         ; Extended_Pictographic# E1.0   [1] (🧀)       cheese wedge
+1F9C1..1F9C2  ; Extended_Pictographic# E11.0  [2] (🧁..🧂)    cupcake..salt
+1F9C3..1F9CA  ; Extended_Pictographic# E12.0  [8] (🧃..🧊)    beverage box..ice
+1F9CB         ; Extended_Pictographic# E13.0  [1] (🧋)       bubble tea
+1F9CC         ; Extended_Pictographic# E0.0   [1] (🧌)       <reserved-1F9CC>
+1F9CD..1F9CF  ; Extended_Pictographic# E12.0  [3] (🧍..🧏)    person standing..deaf person
+1F9D0..1F9E6  ; Extended_Pictographic# E5.0  [23] (🧐..🧦)    face with monocle..socks
+1F9E7..1F9FF  ; Extended_Pictographic# E11.0 [25] (🧧..🧿)    red envelope..nazar amulet
+1FA00..1FA6F  ; Extended_Pictographic# E0.0 [112] (🨀..🩯)    NEUTRAL CHESS KING..<reserved-1FA6F>
+1FA70..1FA73  ; Extended_Pictographic# E12.0  [4] (🩰..🩳)    ballet shoes..shorts
+1FA74         ; Extended_Pictographic# E13.0  [1] (🩴)       thong sandal
+1FA75..1FA77  ; Extended_Pictographic# E0.0   [3] (🩵..🩷)    <reserved-1FA75>..<reserved-1FA77>
+1FA78..1FA7A  ; Extended_Pictographic# E12.0  [3] (🩸..🩺)    drop of blood..stethoscope
+1FA7B..1FA7F  ; Extended_Pictographic# E0.0   [5] (🩻..🩿)    <reserved-1FA7B>..<reserved-1FA7F>
+1FA80..1FA82  ; Extended_Pictographic# E12.0  [3] (🪀..🪂)    yo-yo..parachute
+1FA83..1FA86  ; Extended_Pictographic# E13.0  [4] (🪃..🪆)    boomerang..nesting dolls
+1FA87..1FA8F  ; Extended_Pictographic# E0.0   [9] (🪇..🪏)    <reserved-1FA87>..<reserved-1FA8F>
+1FA90..1FA95  ; Extended_Pictographic# E12.0  [6] (🪐..🪕)    ringed planet..banjo
+1FA96..1FAA8  ; Extended_Pictographic# E13.0 [19] (🪖..🪨)    military helmet..rock
+1FAA9..1FAAF  ; Extended_Pictographic# E0.0   [7] (🪩..🪯)    <reserved-1FAA9>..<reserved-1FAAF>
+1FAB0..1FAB6  ; Extended_Pictographic# E13.0  [7] (🪰..🪶)    fly..feather
+1FAB7..1FABF  ; Extended_Pictographic# E0.0   [9] (🪷..🪿)    <reserved-1FAB7>..<reserved-1FABF>
+1FAC0..1FAC2  ; Extended_Pictographic# E13.0  [3] (🫀..🫂)    anatomical heart..people hugging
+1FAC3..1FACF  ; Extended_Pictographic# E0.0  [13] (🫃..🫏)    <reserved-1FAC3>..<reserved-1FACF>
+1FAD0..1FAD6  ; Extended_Pictographic# E13.0  [7] (🫐..🫖)    blueberries..teapot
+1FAD7..1FAFF  ; Extended_Pictographic# E0.0  [41] (🫗..🫿)    <reserved-1FAD7>..<reserved-1FAFF>
+1FC00..1FFFD  ; Extended_Pictographic# E0.0[1022] (🰀..🿽)    <reserved-1FC00>..<reserved-1FFFD>
+
+# Total elements: 3537
+
+#EOF
index fba605d..2b57230 100644 (file)
 # This file is built by regen/mk_invlists.pl from Unicode::UCD.
 # Any changes made here will be lost!
 
-%utf8::uni_prop_ptrs_indices = (
-    '_perl_any_folds' => 1154,
-    '_perl_charname_begin' => 1155,
-    '_perl_charname_continue' => 1156,
-    '_perl_folds_to_multi_char' => 1157,
-    '_perl_idcont' => 1158,
-    '_perl_idstart' => 1159,
-    '_perl_is_in_multi_char_fold' => 1160,
-    '_perl_nchar' => 1161,
-    '_perl_non_final_folds' => 1162,
-    '_perl_patws' => 1163,
-    '_perl_problematic_locale_foldeds_start' => 1164,
-    '_perl_problematic_locale_folds' => 1165,
-    '_perl_quotemeta' => 1166,
-    '_perl_surrogate' => 1167,
+%Unicode::UCD::uni_prop_ptrs_indices = (
+    '_perl_any_folds' => 1187,
+    '_perl_charname_begin' => 1188,
+    '_perl_charname_continue' => 1189,
+    '_perl_folds_to_multi_char' => 1190,
+    '_perl_idcont' => 1191,
+    '_perl_idstart' => 1192,
+    '_perl_is_in_multi_char_fold' => 1193,
+    '_perl_nchar' => 1194,
+    '_perl_patws' => 1195,
+    '_perl_problematic_locale_foldeds_start' => 1196,
+    '_perl_problematic_locale_folds' => 1197,
+    '_perl_quotemeta' => 1198,
+    '_perl_surrogate' => 1199,
     'adlm' => 1,
     'aegeannumbers' => 2,
     'age=10' => 3,
     'age=11' => 4,
     'age=12' => 5,
     'age=12.1' => 6,
-    'age=2' => 7,
-    'age=2.1' => 8,
-    'age=3' => 9,
-    'age=3.1' => 10,
-    'age=3.2' => 11,
-    'age=4' => 12,
-    'age=4.1' => 13,
-    'age=5' => 14,
-    'age=5.1' => 15,
-    'age=5.2' => 16,
-    'age=6' => 17,
-    'age=6.1' => 18,
-    'age=6.2' => 19,
-    'age=6.3' => 20,
-    'age=7' => 21,
-    'age=8' => 22,
-    'age=9' => 23,
-    'age=na' => 24,
-    'aghb' => 25,
-    'ahex' => 940,
-    'ahom' => 26,
-    'alchemical' => 27,
-    'all' => 28,
-    'alnum' => 1129,
-    'alpha' => 1130,
-    'alphabetic' => 1130,
-    'alphabeticpf' => 29,
-    'ancientgreekmusic' => 30,
-    'ancientgreeknumbers' => 31,
-    'ancientsymbols' => 32,
-    'any' => 33,
-    'arab' => 34,
-    'arabicexta' => 35,
-    'arabicmath' => 36,
-    'arabicpfa' => 37,
-    'arabicpfb' => 38,
-    'arabicsup' => 39,
-    'armi' => 40,
-    'armn' => 41,
-    'arrows' => 42,
-    'ascii' => 43,
-    'asciihexdigit' => 940,
-    'assigned' => 44,
-    'avst' => 45,
-    'bali' => 46,
-    'bamu' => 47,
-    'bamumsup' => 48,
-    'basiclatin' => 43,
-    'bass' => 49,
-    'batk' => 50,
-    'bc=al' => 51,
-    'bc=an' => 52,
-    'bc=b' => 53,
-    'bc=bn' => 54,
-    'bc=cs' => 55,
-    'bc=en' => 56,
-    'bc=es' => 57,
-    'bc=et' => 58,
-    'bc=fsi' => 59,
-    'bc=l' => 60,
-    'bc=lre' => 61,
-    'bc=lri' => 62,
-    'bc=lro' => 63,
-    'bc=nsm' => 64,
-    'bc=on' => 65,
-    'bc=pdf' => 66,
-    'bc=pdi' => 67,
-    'bc=r' => 68,
-    'bc=rle' => 69,
-    'bc=rli' => 70,
-    'bc=rlo' => 71,
-    'bc=s' => 72,
-    'bc=ws' => 73,
-    'beng' => 74,
-    'bhks' => 75,
-    'bidic' => 76,
-    'bidim' => 77,
-    'blank' => 1131,
-    'blockelements' => 78,
-    'bopo' => 79,
-    'bopomofoext' => 80,
-    'boxdrawing' => 81,
-    'bpt=c' => 82,
-    'bpt=n' => 83,
-    'bpt=o' => 84,
-    'brah' => 85,
-    'brai' => 86,
-    'bugi' => 87,
-    'buhd' => 88,
-    'byzantinemusic' => 89,
-    'c' => 90,
-    'cakm' => 91,
-    'cans' => 92,
-    'cari' => 93,
-    'cased' => 94,
-    'casedletter' => 95,
-    'cc' => 1132,
-    'ccc=0' => 96,
-    'ccc=1' => 97,
-    'ccc=10' => 98,
-    'ccc=103' => 99,
-    'ccc=107' => 100,
-    'ccc=11' => 101,
-    'ccc=118' => 102,
-    'ccc=12' => 103,
-    'ccc=122' => 104,
-    'ccc=129' => 105,
-    'ccc=13' => 106,
-    'ccc=130' => 107,
-    'ccc=132' => 108,
-    'ccc=14' => 109,
-    'ccc=15' => 110,
-    'ccc=16' => 111,
-    'ccc=17' => 112,
-    'ccc=18' => 113,
-    'ccc=19' => 114,
-    'ccc=20' => 115,
-    'ccc=202' => 116,
-    'ccc=21' => 117,
-    'ccc=214' => 118,
-    'ccc=216' => 119,
-    'ccc=22' => 120,
-    'ccc=23' => 121,
-    'ccc=24' => 122,
-    'ccc=25' => 123,
-    'ccc=26' => 124,
-    'ccc=27' => 125,
-    'ccc=28' => 126,
-    'ccc=29' => 127,
-    'ccc=30' => 128,
-    'ccc=31' => 129,
-    'ccc=32' => 130,
-    'ccc=33' => 131,
-    'ccc=34' => 132,
-    'ccc=35' => 133,
-    'ccc=36' => 134,
-    'ccc=7' => 135,
-    'ccc=8' => 136,
-    'ccc=84' => 137,
-    'ccc=9' => 138,
-    'ccc=91' => 139,
-    'ccc=a' => 140,
-    'ccc=al' => 141,
-    'ccc=ar' => 142,
-    'ccc=b' => 143,
-    'ccc=bl' => 144,
-    'ccc=br' => 145,
-    'ccc=da' => 146,
-    'ccc=db' => 147,
-    'ccc=is' => 148,
-    'ccc=l' => 149,
-    'ccc=r' => 150,
-    'ce' => 151,
-    'cf' => 152,
-    'cham' => 153,
-    'cher' => 154,
-    'cherokeesup' => 155,
-    'chesssymbols' => 156,
-    'ci' => 157,
-    'cjk' => 158,
-    'cjkcompat' => 159,
-    'cjkcompatforms' => 160,
-    'cjkcompatideographs' => 161,
-    'cjkcompatideographssup' => 162,
-    'cjkexta' => 163,
-    'cjkextb' => 164,
-    'cjkextc' => 165,
-    'cjkextd' => 166,
-    'cjkexte' => 167,
-    'cjkextf' => 168,
-    'cjkradicalssup' => 169,
-    'cjkstrokes' => 170,
-    'cjksymbols' => 171,
-    'cn' => 172,
-    'cntrl' => 1132,
-    'co' => 173,
-    'compatjamo' => 174,
-    'compex' => 175,
-    'control' => 1132,
-    'controlpictures' => 176,
-    'copt' => 177,
-    'copticepactnumbers' => 178,
-    'countingrod' => 179,
-    'cprt' => 180,
-    'cuneiformnumbers' => 181,
-    'currencysymbols' => 182,
-    'cwcf' => 183,
-    'cwcm' => 184,
-    'cwkcf' => 185,
-    'cwl' => 186,
-    'cwt' => 187,
-    'cwu' => 188,
-    'cypriotsyllabary' => 189,
-    'cyrillicexta' => 190,
-    'cyrillicextb' => 191,
-    'cyrillicextc' => 192,
-    'cyrillicsup' => 193,
-    'cyrl' => 194,
-    'dash' => 195,
-    'decimalnumber' => 1133,
-    'dep' => 196,
-    'deva' => 197,
-    'devanagariext' => 198,
-    'di' => 199,
-    'dia' => 200,
-    'diacriticals' => 201,
-    'diacriticalsext' => 202,
-    'diacriticalsforsymbols' => 203,
-    'diacriticalssup' => 204,
-    'digit' => 1133,
-    'dingbats' => 205,
-    'dogr' => 206,
-    'domino' => 207,
-    'dsrt' => 208,
-    'dt=can' => 209,
-    'dt=com' => 210,
-    'dt=enc' => 211,
-    'dt=fin' => 212,
-    'dt=font' => 213,
-    'dt=fra' => 214,
-    'dt=init' => 215,
-    'dt=iso' => 216,
-    'dt=med' => 217,
-    'dt=nar' => 218,
-    'dt=nb' => 219,
-    'dt=noncanon' => 220,
-    'dt=none' => 221,
-    'dt=sml' => 222,
-    'dt=sqr' => 223,
-    'dt=sub' => 224,
-    'dt=sup' => 225,
-    'dt=vert' => 226,
-    'dupl' => 227,
-    'ea=a' => 229,
-    'ea=f' => 230,
-    'ea=h' => 231,
-    'ea=n' => 232,
-    'ea=na' => 233,
-    'ea=w' => 234,
-    'earlydynasticcuneiform' => 228,
-    'egyp' => 235,
-    'egyptianhieroglyphformatcontrols' => 236,
-    'elba' => 237,
-    'elym' => 238,
-    'emoticons' => 239,
-    'enclosedalphanum' => 240,
-    'enclosedalphanumsup' => 241,
-    'enclosedcjk' => 242,
-    'enclosedideographicsup' => 243,
-    'ethi' => 244,
-    'ethiopicext' => 245,
-    'ethiopicexta' => 246,
-    'ethiopicsup' => 247,
-    'ext' => 248,
-    'gcb=cn' => 249,
-    'gcb=ex' => 250,
-    'gcb=l' => 251,
-    'gcb=pp' => 252,
-    'gcb=sm' => 253,
-    'gcb=t' => 254,
-    'gcb=v' => 255,
-    'gcb=xx' => 256,
-    'geometricshapes' => 257,
-    'geometricshapesext' => 258,
-    'geor' => 259,
-    'georgianext' => 260,
-    'georgiansup' => 261,
-    'glag' => 262,
-    'glagoliticsup' => 263,
-    'gong' => 264,
-    'gonm' => 265,
-    'goth' => 266,
-    'gran' => 267,
-    'graph' => 1134,
-    'grbase' => 268,
-    'greekext' => 269,
-    'grek' => 270,
-    'grext' => 271,
-    'gujr' => 272,
-    'guru' => 273,
-    'halfandfullforms' => 274,
-    'halfmarks' => 275,
-    'han' => 276,
-    'hang' => 277,
-    'hano' => 278,
-    'hatr' => 279,
-    'hebr' => 280,
-    'hex' => 1141,
-    'hexdigit' => 1141,
-    'highpusurrogates' => 281,
-    'highsurrogates' => 282,
-    'hira' => 283,
-    'hluw' => 284,
-    'hmng' => 285,
-    'hmnp' => 286,
-    'horizspace' => 1131,
-    'hst=na' => 287,
-    'hung' => 288,
-    'hyphen_perl_aux' => 289,
-    'idc' => 290,
-    'ideo' => 291,
-    'ideographicsymbols' => 292,
-    'ids' => 293,
-    'idsb' => 294,
-    'idst' => 295,
-    'in=1.1' => 487,
-    'in=10' => 483,
-    'in=11' => 484,
-    'in=12' => 485,
-    'in=12.1' => 486,
-    'in=2' => 488,
-    'in=2.1' => 489,
-    'in=3' => 490,
-    'in=3.1' => 491,
-    'in=3.2' => 492,
-    'in=4' => 493,
-    'in=4.1' => 494,
-    'in=5' => 495,
-    'in=5.1' => 496,
-    'in=5.2' => 497,
-    'in=6' => 498,
-    'in=6.1' => 499,
-    'in=6.2' => 500,
-    'in=6.3' => 501,
-    'in=7' => 502,
-    'in=8' => 503,
-    'in=9' => 504,
-    'inadlam' => 296,
-    'inahom' => 297,
-    'inanatolianhieroglyphs' => 298,
-    'inarabic' => 299,
-    'inarmenian' => 300,
-    'inavestan' => 301,
-    'inbalinese' => 302,
-    'inbamum' => 303,
-    'inbassavah' => 304,
-    'inbatak' => 305,
-    'inbengali' => 306,
-    'inbhaiksuki' => 307,
-    'inbopomofo' => 308,
-    'inbrahmi' => 309,
-    'inbuginese' => 310,
-    'inbuhid' => 311,
-    'incarian' => 312,
-    'incaucasianalbanian' => 313,
-    'inchakma' => 314,
-    'incham' => 315,
-    'incherokee' => 316,
-    'incoptic' => 317,
-    'incuneiform' => 318,
-    'incyrillic' => 319,
-    'indevanagari' => 320,
-    'indicnumberforms' => 321,
-    'indicsiyaqnumbers' => 322,
-    'indogra' => 323,
-    'induployan' => 324,
-    'inegyptianhieroglyphs' => 325,
-    'inelbasan' => 326,
-    'inelymaic' => 327,
-    'inethiopic' => 328,
-    'ingeorgian' => 329,
-    'inglagolitic' => 330,
-    'ingothic' => 331,
-    'ingrantha' => 332,
-    'ingreek' => 333,
-    'ingujarati' => 334,
-    'ingunjalagondi' => 335,
-    'ingurmukhi' => 336,
-    'inhangul' => 337,
-    'inhanifirohingya' => 338,
-    'inhanunoo' => 339,
-    'inhatran' => 340,
-    'inhebrew' => 341,
-    'inhiragana' => 342,
-    'inidc' => 343,
-    'inimperialaramaic' => 344,
-    'ininscriptionalpahlavi' => 345,
-    'ininscriptionalparthian' => 346,
-    'injavanese' => 347,
-    'inkaithi' => 348,
-    'inkannada' => 349,
-    'inkatakana' => 350,
-    'inkharoshthi' => 351,
-    'inkhmer' => 352,
-    'inkhojki' => 353,
-    'inkhudawadi' => 354,
-    'inlao' => 355,
-    'inlepcha' => 356,
-    'inlimbu' => 357,
-    'inlineara' => 358,
-    'inlycian' => 359,
-    'inlydian' => 360,
-    'inmahajani' => 361,
-    'inmakasar' => 362,
-    'inmalayalam' => 363,
-    'inmandaic' => 364,
-    'inmanichaean' => 365,
-    'inmarchen' => 366,
-    'inmasaramgondi' => 367,
-    'inmedefaidrin' => 368,
-    'inmeeteimayek' => 369,
-    'inmendekikakui' => 370,
-    'inmeroiticcursive' => 371,
-    'inmiao' => 372,
-    'inmodi' => 373,
-    'inmongolian' => 374,
-    'inmro' => 375,
-    'inmultani' => 376,
-    'inmyanmar' => 377,
-    'innabataean' => 378,
-    'innandinagari' => 379,
-    'innewa' => 380,
-    'innewtailue' => 381,
-    'innko' => 382,
-    'innushu' => 383,
-    'innyiakengpuachuehmong' => 384,
-    'inogham' => 385,
-    'inoldhungarian' => 386,
-    'inolditalic' => 387,
-    'inoldpermic' => 388,
-    'inoldpersian' => 389,
-    'inoldsogdian' => 390,
-    'inoldturkic' => 391,
-    'inoriya' => 392,
-    'inosage' => 393,
-    'inosmanya' => 394,
-    'inpahawhhmong' => 395,
-    'inpaucinhau' => 396,
-    'inpc=bottom' => 397,
-    'inpc=bottomandleft' => 398,
-    'inpc=bottomandright' => 399,
-    'inpc=left' => 400,
-    'inpc=leftandright' => 401,
-    'inpc=na' => 402,
-    'inpc=overstruck' => 403,
-    'inpc=right' => 404,
-    'inpc=top' => 405,
-    'inpc=topandbottom' => 406,
-    'inpc=topandbottomandright' => 407,
-    'inpc=topandleft' => 408,
-    'inpc=topandleftandright' => 409,
-    'inpc=topandright' => 410,
-    'inphagspa' => 411,
-    'inphoenician' => 412,
-    'inpsalterpahlavi' => 413,
-    'inpunctuation' => 414,
-    'inrejang' => 415,
-    'inrunic' => 416,
-    'insamaritan' => 417,
-    'insaurashtra' => 418,
-    'insc=avagraha' => 419,
-    'insc=bindu' => 420,
-    'insc=brahmijoiningnumber' => 421,
-    'insc=cantillationmark' => 422,
-    'insc=consonant' => 423,
-    'insc=consonantdead' => 424,
-    'insc=consonantfinal' => 425,
-    'insc=consonantheadletter' => 426,
-    'insc=consonantinitialpostfixed' => 427,
-    'insc=consonantkiller' => 428,
-    'insc=consonantmedial' => 429,
-    'insc=consonantplaceholder' => 430,
-    'insc=consonantprecedingrepha' => 431,
-    'insc=consonantprefixed' => 432,
-    'insc=consonantsubjoined' => 433,
-    'insc=consonantsucceedingrepha' => 434,
-    'insc=consonantwithstacker' => 435,
-    'insc=geminationmark' => 436,
-    'insc=invisiblestacker' => 437,
-    'insc=modifyingletter' => 438,
-    'insc=nonjoiner' => 439,
-    'insc=nukta' => 440,
-    'insc=number' => 441,
-    'insc=numberjoiner' => 442,
-    'insc=other' => 443,
-    'insc=purekiller' => 444,
-    'insc=registershifter' => 445,
-    'insc=syllablemodifier' => 446,
-    'insc=toneletter' => 447,
-    'insc=tonemark' => 448,
-    'insc=virama' => 449,
-    'insc=visarga' => 450,
-    'insc=vowel' => 451,
-    'insc=voweldependent' => 452,
-    'insc=vowelindependent' => 453,
-    'insharada' => 454,
-    'insiddham' => 455,
-    'insinhala' => 456,
-    'insogdian' => 457,
-    'insorasompeng' => 458,
-    'insoyombo' => 459,
-    'insundanese' => 460,
-    'insylotinagri' => 461,
-    'insyriac' => 462,
-    'intagalog' => 463,
-    'intagbanwa' => 464,
-    'intaile' => 465,
-    'intaitham' => 466,
-    'intaiviet' => 467,
-    'intakri' => 468,
-    'intamil' => 469,
-    'intangut' => 470,
-    'intelugu' => 471,
-    'inthaana' => 472,
-    'inthai' => 473,
-    'intibetan' => 474,
-    'intifinagh' => 475,
-    'intirhuta' => 476,
-    'inugaritic' => 477,
-    'invai' => 478,
-    'invs' => 479,
-    'inwancho' => 480,
-    'inwarangciti' => 481,
-    'inzanabazarsquare' => 482,
-    'ipaext' => 505,
-    'ital' => 506,
-    'jamo' => 507,
-    'jamoexta' => 508,
-    'jamoextb' => 509,
-    'java' => 510,
-    'jg=africanfeh' => 511,
-    'jg=africannoon' => 512,
-    'jg=africanqaf' => 513,
-    'jg=ain' => 514,
-    'jg=alaph' => 515,
-    'jg=alef' => 516,
-    'jg=beh' => 517,
-    'jg=beth' => 518,
-    'jg=burushaskiyehbarree' => 519,
-    'jg=dal' => 520,
-    'jg=dalathrish' => 521,
-    'jg=e' => 522,
-    'jg=farsiyeh' => 523,
-    'jg=fe' => 524,
-    'jg=feh' => 525,
-    'jg=finalsemkath' => 526,
-    'jg=gaf' => 527,
-    'jg=gamal' => 528,
-    'jg=hah' => 529,
-    'jg=hamzaonhehgoal' => 530,
-    'jg=hanifirohingyakinnaya' => 531,
-    'jg=hanifirohingyapa' => 532,
-    'jg=he' => 533,
-    'jg=heh' => 534,
-    'jg=hehgoal' => 535,
-    'jg=heth' => 536,
-    'jg=kaf' => 537,
-    'jg=kaph' => 538,
-    'jg=khaph' => 539,
-    'jg=knottedheh' => 540,
-    'jg=lam' => 541,
-    'jg=lamadh' => 542,
-    'jg=malayalambha' => 543,
-    'jg=malayalamja' => 544,
-    'jg=malayalamlla' => 545,
-    'jg=malayalamllla' => 546,
-    'jg=malayalamnga' => 547,
-    'jg=malayalamnna' => 548,
-    'jg=malayalamnnna' => 549,
-    'jg=malayalamnya' => 550,
-    'jg=malayalamra' => 551,
-    'jg=malayalamssa' => 552,
-    'jg=malayalamtta' => 553,
-    'jg=manichaeanaleph' => 554,
-    'jg=manichaeanayin' => 555,
-    'jg=manichaeanbeth' => 556,
-    'jg=manichaeandaleth' => 557,
-    'jg=manichaeandhamedh' => 558,
-    'jg=manichaeanfive' => 559,
-    'jg=manichaeangimel' => 560,
-    'jg=manichaeanheth' => 561,
-    'jg=manichaeanhundred' => 562,
-    'jg=manichaeankaph' => 563,
-    'jg=manichaeanlamedh' => 564,
-    'jg=manichaeanmem' => 565,
-    'jg=manichaeannun' => 566,
-    'jg=manichaeanone' => 567,
-    'jg=manichaeanpe' => 568,
-    'jg=manichaeanqoph' => 569,
-    'jg=manichaeanresh' => 570,
-    'jg=manichaeansadhe' => 571,
-    'jg=manichaeansamekh' => 572,
-    'jg=manichaeantaw' => 573,
-    'jg=manichaeanten' => 574,
-    'jg=manichaeanteth' => 575,
-    'jg=manichaeanthamedh' => 576,
-    'jg=manichaeantwenty' => 577,
-    'jg=manichaeanwaw' => 578,
-    'jg=manichaeanyodh' => 579,
-    'jg=manichaeanzayin' => 580,
-    'jg=meem' => 581,
-    'jg=mim' => 582,
-    'jg=nojoininggroup' => 583,
-    'jg=noon' => 584,
-    'jg=nun' => 585,
-    'jg=nya' => 586,
-    'jg=pe' => 587,
-    'jg=qaf' => 588,
-    'jg=qaph' => 589,
-    'jg=reh' => 590,
-    'jg=reversedpe' => 591,
-    'jg=rohingyayeh' => 592,
-    'jg=sad' => 593,
-    'jg=sadhe' => 594,
-    'jg=seen' => 595,
-    'jg=semkath' => 596,
-    'jg=shin' => 597,
-    'jg=straightwaw' => 598,
-    'jg=swashkaf' => 599,
-    'jg=syriacwaw' => 600,
-    'jg=tah' => 601,
-    'jg=taw' => 602,
-    'jg=tehmarbuta' => 603,
-    'jg=teth' => 604,
-    'jg=waw' => 605,
-    'jg=yeh' => 606,
-    'jg=yehbarree' => 607,
-    'jg=yehwithtail' => 608,
-    'jg=yudh' => 609,
-    'jg=yudhhe' => 610,
-    'jg=zain' => 611,
-    'jg=zhain' => 612,
-    'joinc' => 613,
-    'jt=c' => 614,
-    'jt=d' => 615,
-    'jt=l' => 616,
-    'jt=r' => 617,
-    'jt=t' => 618,
-    'jt=u' => 619,
-    'kali' => 620,
-    'kana' => 621,
-    'kanaexta' => 622,
-    'kanasup' => 623,
-    'kanbun' => 624,
-    'kangxi' => 625,
-    'katakanaext' => 626,
-    'khar' => 627,
-    'khmersymbols' => 628,
-    'khmr' => 629,
-    'khoj' => 630,
-    'knda' => 631,
-    'kthi' => 632,
-    'l' => 633,
-    'l_' => 95,
-    'l_amp_' => 95,
-    'lana' => 634,
-    'lao' => 635,
-    'latin1' => 636,
-    'latinexta' => 637,
-    'latinextadditional' => 638,
-    'latinextb' => 639,
-    'latinextc' => 640,
-    'latinextd' => 641,
-    'latinexte' => 642,
-    'latn' => 643,
-    'lb=ai' => 644,
-    'lb=al' => 645,
-    'lb=b2' => 646,
-    'lb=ba' => 647,
-    'lb=bb' => 648,
-    'lb=bk' => 649,
-    'lb=cb' => 650,
-    'lb=cj' => 651,
-    'lb=cl' => 652,
-    'lb=cm' => 653,
-    'lb=cp' => 654,
-    'lb=cr' => 655,
-    'lb=eb' => 656,
-    'lb=em' => 657,
-    'lb=ex' => 658,
-    'lb=gl' => 659,
-    'lb=h2' => 660,
-    'lb=h3' => 661,
-    'lb=hl' => 662,
-    'lb=hy' => 663,
-    'lb=id' => 664,
-    'lb=in' => 665,
-    'lb=is' => 666,
-    'lb=lf' => 667,
-    'lb=nl' => 668,
-    'lb=ns' => 669,
-    'lb=nu' => 670,
-    'lb=op' => 671,
-    'lb=po' => 672,
-    'lb=pr' => 673,
-    'lb=qu' => 674,
-    'lb=sa' => 675,
-    'lb=sg_perl_aux' => 676,
-    'lb=sp' => 677,
-    'lb=sy' => 678,
-    'lb=wj' => 679,
-    'lb=xx' => 680,
-    'lb=zw' => 681,
-    'lb=zwj' => 682,
-    'lc' => 95,
-    'lepc' => 683,
-    'letterlikesymbols' => 684,
-    'limb' => 685,
-    'lina' => 686,
-    'linb' => 687,
-    'linearbideograms' => 688,
-    'linearbsyllabary' => 689,
-    'lisu' => 690,
-    'll' => 694,
-    'lm' => 691,
-    'lo' => 692,
-    'loe' => 693,
-    'lower' => 1135,
-    'lowercase' => 1135,
-    'lowercaseletter' => 694,
-    'lowsurrogates' => 695,
-    'lt' => 1092,
-    'lu' => 1098,
-    'lyci' => 696,
-    'lydi' => 697,
-    'm' => 698,
-    'mahj' => 699,
-    'mahjong' => 700,
-    'maka' => 701,
-    'mand' => 702,
-    'mani' => 703,
-    'marc' => 704,
-    'math' => 705,
-    'mathalphanum' => 706,
-    'mathoperators' => 707,
-    'mayannumerals' => 708,
-    'mc' => 709,
-    'me' => 710,
-    'medf' => 711,
-    'meeteimayekext' => 712,
-    'mend' => 713,
-    'merc' => 714,
-    'mero' => 715,
-    'miao' => 716,
-    'miscarrows' => 717,
-    'miscmathsymbolsa' => 718,
-    'miscmathsymbolsb' => 719,
-    'miscpictographs' => 720,
-    'miscsymbols' => 721,
-    'misctechnical' => 722,
-    'mlym' => 723,
-    'mn' => 724,
-    'modi' => 725,
-    'modifierletters' => 726,
-    'modifiertoneletters' => 727,
-    'mong' => 728,
-    'mongoliansup' => 729,
-    'mro' => 730,
-    'mtei' => 731,
-    'mult' => 732,
-    'music' => 733,
-    'myanmarexta' => 734,
-    'myanmarextb' => 735,
-    'mymr' => 736,
-    'n' => 737,
-    'nand' => 738,
-    'narb' => 739,
-    'nb' => 740,
-    'nbat' => 741,
-    'nd' => 1133,
-    'newa' => 742,
-    'nfcqc=m' => 743,
-    'nfcqc=y' => 744,
-    'nfdqc=y' => 745,
-    'nfkcqc=n' => 746,
-    'nfkcqc=y' => 747,
-    'nfkdqc=n' => 748,
-    'nko' => 749,
-    'nl' => 750,
-    'no' => 751,
-    'nshu' => 752,
-    'nt=di' => 753,
-    'nt=nu' => 754,
-    'numberforms' => 755,
-    'nv=0' => 756,
-    'nv=1' => 757,
-    'nv=1/10' => 782,
-    'nv=1/12' => 783,
-    'nv=1/16' => 784,
-    'nv=1/160' => 785,
-    'nv=1/2' => 786,
-    'nv=1/20' => 787,
-    'nv=1/3' => 788,
-    'nv=1/32' => 789,
-    'nv=1/320' => 790,
-    'nv=1/4' => 791,
-    'nv=1/40' => 792,
-    'nv=1/5' => 793,
-    'nv=1/6' => 794,
-    'nv=1/64' => 795,
-    'nv=1/7' => 796,
-    'nv=1/8' => 797,
-    'nv=1/80' => 798,
-    'nv=1/9' => 799,
-    'nv=10' => 758,
-    'nv=100' => 759,
-    'nv=1000' => 760,
-    'nv=10000' => 761,
-    'nv=100000' => 762,
-    'nv=1000000' => 763,
-    'nv=10000000' => 764,
-    'nv=100000000' => 765,
-    'nv=10000000000' => 766,
-    'nv=1000000000000' => 767,
-    'nv=11' => 768,
-    'nv=11/12' => 769,
-    'nv=11/2' => 770,
-    'nv=12' => 771,
-    'nv=13' => 772,
-    'nv=13/2' => 773,
-    'nv=14' => 774,
-    'nv=15' => 775,
-    'nv=15/2' => 776,
-    'nv=16' => 777,
-    'nv=17' => 778,
-    'nv=17/2' => 779,
-    'nv=18' => 780,
-    'nv=19' => 781,
-    'nv=2' => 800,
-    'nv=2/3' => 817,
-    'nv=2/5' => 818,
-    'nv=20' => 801,
-    'nv=200' => 802,
-    'nv=2000' => 803,
-    'nv=20000' => 804,
-    'nv=200000' => 805,
-    'nv=20000000' => 806,
-    'nv=21' => 807,
-    'nv=216000' => 808,
-    'nv=22' => 809,
-    'nv=23' => 810,
-    'nv=24' => 811,
-    'nv=25' => 812,
-    'nv=26' => 813,
-    'nv=27' => 814,
-    'nv=28' => 815,
-    'nv=29' => 816,
-    'nv=3' => 819,
-    'nv=3/16' => 834,
-    'nv=3/2' => 835,
-    'nv=3/20' => 836,
-    'nv=3/4' => 837,
-    'nv=3/5' => 838,
-    'nv=3/64' => 839,
-    'nv=3/8' => 840,
-    'nv=3/80' => 841,
-    'nv=30' => 820,
-    'nv=300' => 821,
-    'nv=3000' => 822,
-    'nv=30000' => 823,
-    'nv=300000' => 824,
-    'nv=31' => 825,
-    'nv=32' => 826,
-    'nv=33' => 827,
-    'nv=34' => 828,
-    'nv=35' => 829,
-    'nv=36' => 830,
-    'nv=37' => 831,
-    'nv=38' => 832,
-    'nv=39' => 833,
-    'nv=4' => 842,
-    'nv=4/5' => 858,
-    'nv=40' => 843,
-    'nv=400' => 844,
-    'nv=4000' => 845,
-    'nv=40000' => 846,
-    'nv=400000' => 847,
-    'nv=41' => 848,
-    'nv=42' => 849,
-    'nv=43' => 850,
-    'nv=432000' => 851,
-    'nv=44' => 852,
-    'nv=45' => 853,
-    'nv=46' => 854,
-    'nv=47' => 855,
-    'nv=48' => 856,
-    'nv=49' => 857,
-    'nv=5' => 859,
-    'nv=5/12' => 865,
-    'nv=5/2' => 866,
-    'nv=5/6' => 867,
-    'nv=5/8' => 868,
-    'nv=50' => 860,
-    'nv=500' => 861,
-    'nv=5000' => 862,
-    'nv=50000' => 863,
-    'nv=500000' => 864,
-    'nv=6' => 869,
-    'nv=60' => 870,
-    'nv=600' => 871,
-    'nv=6000' => 872,
-    'nv=60000' => 873,
-    'nv=600000' => 874,
-    'nv=7' => 875,
-    'nv=7/12' => 881,
-    'nv=7/2' => 882,
-    'nv=7/8' => 883,
-    'nv=70' => 876,
-    'nv=700' => 877,
-    'nv=7000' => 878,
-    'nv=70000' => 879,
-    'nv=700000' => 880,
-    'nv=8' => 884,
-    'nv=80' => 885,
-    'nv=800' => 886,
-    'nv=8000' => 887,
-    'nv=80000' => 888,
-    'nv=800000' => 889,
-    'nv=9' => 890,
-    'nv=9/2' => 896,
-    'nv=90' => 891,
-    'nv=900' => 892,
-    'nv=9000' => 893,
-    'nv=90000' => 894,
-    'nv=900000' => 895,
-    'nv=_minus_1/2' => 898,
-    'nv=nan' => 897,
-    'ocr' => 899,
-    'ogam' => 900,
-    'olck' => 901,
-    'orkh' => 902,
-    'ornamentaldingbats' => 903,
-    'orya' => 904,
-    'osge' => 905,
-    'osma' => 906,
-    'ottomansiyaqnumbers' => 907,
-    'p' => 908,
-    'palm' => 909,
-    'patsyn' => 910,
-    'pauc' => 911,
-    'pc' => 912,
-    'pcm' => 913,
-    'pd' => 914,
-    'pe' => 915,
-    'perlspace' => 937,
-    'perlword' => 939,
-    'perm' => 916,
-    'pf' => 917,
-    'phag' => 918,
-    'phaistos' => 919,
-    'phli' => 920,
-    'phlp' => 921,
-    'phnx' => 922,
-    'phoneticext' => 923,
-    'phoneticextsup' => 924,
-    'pi' => 925,
-    'playingcards' => 926,
-    'po' => 927,
-    'posixalnum' => 928,
-    'posixalpha' => 929,
-    'posixblank' => 930,
-    'posixcntrl' => 931,
-    'posixdigit' => 932,
-    'posixgraph' => 933,
-    'posixlower' => 934,
-    'posixprint' => 935,
-    'posixpunct' => 936,
-    'posixspace' => 937,
-    'posixupper' => 938,
-    'posixword' => 939,
-    'posixxdigit' => 940,
-    'print' => 1136,
-    'prti' => 941,
-    'ps' => 942,
-    'pua' => 943,
-    'qaai' => 944,
-    'qmark' => 945,
-    'radical' => 946,
-    'ri' => 947,
-    'rjng' => 948,
-    'rohg' => 949,
-    'rumi' => 950,
-    'runr' => 951,
-    's' => 952,
-    'samr' => 953,
-    'sarb' => 954,
-    'saur' => 955,
-    'sb=at' => 956,
-    'sb=cl' => 957,
-    'sb=ex' => 958,
-    'sb=fo' => 959,
-    'sb=le' => 960,
-    'sb=lo' => 961,
-    'sb=nu' => 962,
-    'sb=sc' => 963,
-    'sb=se' => 964,
-    'sb=sp' => 965,
-    'sb=st' => 966,
-    'sb=up' => 967,
-    'sb=xx' => 968,
-    'sc' => 969,
-    'sc=adlm' => 970,
-    'sc=arab' => 971,
-    'sc=armn' => 972,
-    'sc=beng' => 973,
-    'sc=bopo' => 974,
-    'sc=bugi' => 975,
-    'sc=buhd' => 976,
-    'sc=cakm' => 977,
-    'sc=copt' => 978,
-    'sc=cprt' => 979,
-    'sc=cyrl' => 980,
-    'sc=deva' => 981,
-    'sc=dogr' => 982,
-    'sc=dupl' => 983,
-    'sc=geor' => 984,
-    'sc=glag' => 985,
-    'sc=gong' => 986,
-    'sc=gonm' => 987,
-    'sc=gran' => 988,
-    'sc=grek' => 989,
-    'sc=gujr' => 990,
-    'sc=guru' => 991,
-    'sc=han' => 992,
-    'sc=hang' => 993,
-    'sc=hano' => 994,
-    'sc=hira' => 995,
-    'sc=java' => 996,
-    'sc=kali' => 997,
-    'sc=kana' => 998,
-    'sc=khoj' => 999,
-    'sc=knda' => 1000,
-    'sc=kthi' => 1001,
-    'sc=latn' => 1002,
-    'sc=limb' => 1003,
-    'sc=lina' => 1004,
-    'sc=linb' => 1005,
-    'sc=mahj' => 1006,
-    'sc=mand' => 1007,
-    'sc=mani' => 1008,
-    'sc=mlym' => 1009,
-    'sc=modi' => 1010,
-    'sc=mong' => 1011,
-    'sc=mult' => 1012,
-    'sc=mymr' => 1013,
-    'sc=nand' => 1014,
-    'sc=orya' => 1015,
-    'sc=perm' => 1016,
-    'sc=phag' => 1017,
-    'sc=phlp' => 1018,
-    'sc=qaai' => 1019,
-    'sc=rohg' => 1020,
-    'sc=shrd' => 1021,
-    'sc=sind' => 1022,
-    'sc=sinh' => 1023,
-    'sc=sogd' => 1024,
-    'sc=sylo' => 1025,
-    'sc=syrc' => 1026,
-    'sc=tagb' => 1027,
-    'sc=takr' => 1028,
-    'sc=tale' => 1029,
-    'sc=taml' => 1030,
-    'sc=telu' => 1031,
-    'sc=tglg' => 1032,
-    'sc=thaa' => 1033,
-    'sc=tirh' => 1034,
-    'sc=yi' => 1035,
-    'sc=zyyy' => 1036,
-    'sd' => 1037,
-    'sgnw' => 1038,
-    'shaw' => 1039,
-    'shorthandformatcontrols' => 1040,
-    'shrd' => 1041,
-    'sidd' => 1042,
-    'sind' => 1043,
-    'sinh' => 1044,
-    'sinhalaarchaicnumbers' => 1045,
-    'sk' => 1046,
-    'sm' => 1047,
-    'smallforms' => 1048,
-    'smallkanaext' => 1049,
-    'so' => 1050,
-    'sogd' => 1051,
-    'sogo' => 1052,
-    'sora' => 1053,
-    'soyo' => 1054,
-    'space' => 1138,
-    'spaceperl' => 1138,
-    'specials' => 1055,
-    'sterm' => 1056,
-    'sund' => 1057,
-    'sundanesesup' => 1058,
-    'suparrowsa' => 1059,
-    'suparrowsb' => 1060,
-    'suparrowsc' => 1061,
-    'superandsub' => 1062,
-    'supmathoperators' => 1063,
-    'suppuaa' => 1064,
-    'suppuab' => 1065,
-    'suppunctuation' => 1066,
-    'supsymbolsandpictographs' => 1067,
-    'suttonsignwriting' => 1068,
-    'sylo' => 1069,
-    'symbolsandpictographsexta' => 1070,
-    'syrc' => 1071,
-    'syriacsup' => 1072,
-    'tagb' => 1073,
-    'tags' => 1074,
-    'taixuanjing' => 1075,
-    'takr' => 1076,
-    'tale' => 1077,
-    'talu' => 1078,
-    'tamilsup' => 1079,
-    'taml' => 1080,
-    'tang' => 1081,
-    'tangutcomponents' => 1082,
-    'tavt' => 1083,
-    'telu' => 1084,
-    'term' => 1085,
-    'tfng' => 1086,
-    'tglg' => 1087,
-    'thaa' => 1088,
-    'thai' => 1089,
-    'tibt' => 1090,
-    'tirh' => 1091,
-    'title' => 1092,
-    'titlecase' => 1092,
-    'titlecaseletter' => 1092,
-    'transportandmap' => 1093,
-    'ucas' => 1094,
-    'ucasext' => 1095,
-    'ugar' => 1096,
-    'uideo' => 1097,
-    'upper' => 1139,
-    'uppercase' => 1139,
-    'uppercaseletter' => 1098,
-    'vai' => 1099,
-    'vedicext' => 1100,
-    'verticalforms' => 1101,
-    'vertspace' => 1102,
-    'vo=r' => 1103,
-    'vo=tr' => 1104,
-    'vo=tu' => 1105,
-    'vo=u' => 1106,
-    'vs' => 1107,
-    'vssup' => 1108,
-    'wara' => 1109,
-    'wb=dq' => 1110,
-    'wb=eb' => 1111,
-    'wb=ex' => 1112,
-    'wb=extend' => 1113,
-    'wb=fo' => 1114,
-    'wb=ka' => 1115,
-    'wb=le' => 1116,
-    'wb=mb' => 1117,
-    'wb=ml' => 1118,
-    'wb=mn' => 1119,
-    'wb=nl' => 1120,
-    'wb=nu' => 1121,
-    'wb=sq' => 1122,
-    'wb=wsegspace' => 1123,
-    'wb=xx' => 1124,
-    'wcho' => 1125,
-    'whitespace' => 1138,
-    'word' => 1140,
-    'wspace' => 1138,
-    'xdigit' => 1141,
-    'xidc' => 1126,
-    'xids' => 1127,
-    'xpeo' => 1128,
-    'xperlspace' => 1138,
-    'xposixalnum' => 1129,
-    'xposixalpha' => 1130,
-    'xposixblank' => 1131,
-    'xposixcntrl' => 1132,
-    'xposixdigit' => 1133,
-    'xposixgraph' => 1134,
-    'xposixlower' => 1135,
-    'xposixprint' => 1136,
-    'xposixpunct' => 1137,
-    'xposixspace' => 1138,
-    'xposixupper' => 1139,
-    'xposixword' => 1140,
-    'xposixxdigit' => 1141,
-    'xsux' => 1142,
-    'yi' => 1143,
-    'yijing' => 1144,
-    'yiradicals' => 1145,
-    'yisyllables' => 1146,
-    'z' => 1147,
-    'zanb' => 1148,
-    'zl' => 1149,
-    'zp' => 1150,
-    'zs' => 1151,
-    'zyyy' => 1152,
-    'zzzz' => 1153,
+    'age=13' => 7,
+    'age=2' => 8,
+    'age=2.1' => 9,
+    'age=3' => 10,
+    'age=3.1' => 11,
+    'age=3.2' => 12,
+    'age=4' => 13,
+    'age=4.1' => 14,
+    'age=5' => 15,
+    'age=5.1' => 16,
+    'age=5.2' => 17,
+    'age=6' => 18,
+    'age=6.1' => 19,
+    'age=6.2' => 20,
+    'age=6.3' => 21,
+    'age=7' => 22,
+    'age=8' => 23,
+    'age=9' => 24,
+    'age=na' => 25,
+    'aghb' => 26,
+    'ahex' => 970,
+    'ahom' => 27,
+    'alchemical' => 28,
+    'all' => 29,
+    'alnum' => 1161,
+    'alpha' => 1162,
+    'alphabetic' => 1162,
+    'alphabeticpf' => 30,
+    'ancientgreekmusic' => 31,
+    'ancientgreeknumbers' => 32,
+    'ancientsymbols' => 33,
+    'any' => 34,
+    'arab' => 35,
+    'arabicexta' => 36,
+    'arabicmath' => 37,
+    'arabicpfa' => 38,
+    'arabicpfb' => 39,
+    'arabicsup' => 40,
+    'armi' => 41,
+    'armn' => 42,
+    'arrows' => 43,
+    'ascii' => 44,
+    'asciihexdigit' => 970,
+    'assigned' => 45,
+    'avst' => 46,
+    'bali' => 47,
+    'bamu' => 48,
+    'bamumsup' => 49,
+    'basiclatin' => 44,
+    'bass' => 50,
+    'batk' => 51,
+    'bc=al' => 52,
+    'bc=an' => 53,
+    'bc=b' => 54,
+    'bc=bn' => 55,
+    'bc=cs' => 56,
+    'bc=en' => 57,
+    'bc=es' => 58,
+    'bc=et' => 59,
+    'bc=fsi' => 60,
+    'bc=l' => 61,
+    'bc=lre' => 62,
+    'bc=lri' => 63,
+    'bc=lro' => 64,
+    'bc=nsm' => 65,
+    'bc=on' => 66,
+    'bc=pdf' => 67,
+    'bc=pdi' => 68,
+    'bc=r' => 69,
+    'bc=rle' => 70,
+    'bc=rli' => 71,
+    'bc=rlo' => 72,
+    'bc=s' => 73,
+    'bc=ws' => 74,
+    'beng' => 75,
+    'bhks' => 76,
+    'bidic' => 77,
+    'bidim' => 78,
+    'blank' => 1163,
+    'blockelements' => 79,
+    'bopo' => 80,
+    'bopomofoext' => 81,
+    'boxdrawing' => 82,
+    'bpt=c' => 83,
+    'bpt=n' => 84,
+    'bpt=o' => 85,
+    'brah' => 86,
+    'brai' => 87,
+    'bugi' => 88,
+    'buhd' => 89,
+    'byzantinemusic' => 90,
+    'c' => 91,
+    'cakm' => 92,
+    'cans' => 93,
+    'cari' => 94,
+    'cased' => 95,
+    'casedletter' => 96,
+    'cc' => 1164,
+    'ccc=0' => 97,
+    'ccc=1' => 98,
+    'ccc=10' => 99,
+    'ccc=103' => 100,
+    'ccc=107' => 101,
+    'ccc=11' => 102,
+    'ccc=118' => 103,
+    'ccc=12' => 104,
+    'ccc=122' => 105,
+    'ccc=129' => 106,
+    'ccc=13' => 107,
+    'ccc=130' => 108,
+    'ccc=132' => 109,
+    'ccc=14' => 110,
+    'ccc=15' => 111,
+    'ccc=16' => 112,
+    'ccc=17' => 113,
+    'ccc=18' => 114,
+    'ccc=19' => 115,
+    'ccc=20' => 116,
+    'ccc=202' => 117,
+    'ccc=21' => 118,
+    'ccc=214' => 119,
+    'ccc=216' => 120,
+    'ccc=22' => 121,
+    'ccc=23' => 122,
+    'ccc=24' => 123,
+    'ccc=25' => 124,
+    'ccc=26' => 125,
+    'ccc=27' => 126,
+    'ccc=28' => 127,
+    'ccc=29' => 128,
+    'ccc=30' => 129,
+    'ccc=31' => 130,
+    'ccc=32' => 131,
+    'ccc=33' => 132,
+    'ccc=34' => 133,
+    'ccc=35' => 134,
+    'ccc=36' => 135,
+    'ccc=6' => 136,
+    'ccc=7' => 137,
+    'ccc=8' => 138,
+    'ccc=84' => 139,
+    'ccc=9' => 140,
+    'ccc=91' => 141,
+    'ccc=a' => 142,
+    'ccc=al' => 143,
+    'ccc=ar' => 144,
+    'ccc=b' => 145,
+    'ccc=bl' => 146,
+    'ccc=br' => 147,
+    'ccc=da' => 148,
+    'ccc=db' => 149,
+    'ccc=is' => 150,
+    'ccc=l' => 151,
+    'ccc=r' => 152,
+    'ce' => 153,
+    'cf' => 154,
+    'cham' => 155,
+    'cher' => 156,
+    'cherokeesup' => 157,
+    'chesssymbols' => 158,
+    'chrs' => 159,
+    'ci' => 160,
+    'cjk' => 161,
+    'cjkcompat' => 162,
+    'cjkcompatforms' => 163,
+    'cjkcompatideographs' => 164,
+    'cjkcompatideographssup' => 165,
+    'cjkexta' => 166,
+    'cjkextb' => 167,
+    'cjkextc' => 168,
+    'cjkextd' => 169,
+    'cjkexte' => 170,
+    'cjkextf' => 171,
+    'cjkextg' => 172,
+    'cjkradicalssup' => 173,
+    'cjkstrokes' => 174,
+    'cjksymbols' => 175,
+    'cn' => 176,
+    'cntrl' => 1164,
+    'co' => 177,
+    'compatjamo' => 178,
+    'compex' => 179,
+    'control' => 1164,
+    'controlpictures' => 180,
+    'copt' => 181,
+    'copticepactnumbers' => 182,
+    'countingrod' => 183,
+    'cprt' => 184,
+    'cuneiformnumbers' => 185,
+    'currencysymbols' => 186,
+    'cwcf' => 187,
+    'cwcm' => 188,
+    'cwkcf' => 189,
+    'cwl' => 190,
+    'cwt' => 191,
+    'cwu' => 192,
+    'cypriotsyllabary' => 193,
+    'cyrillicexta' => 194,
+    'cyrillicextb' => 195,
+    'cyrillicextc' => 196,
+    'cyrillicsup' => 197,
+    'cyrl' => 198,
+    'dash' => 199,
+    'decimalnumber' => 1165,
+    'dep' => 200,
+    'deva' => 201,
+    'devanagariext' => 202,
+    'di' => 203,
+    'dia' => 204,
+    'diacriticals' => 205,
+    'diacriticalsext' => 206,
+    'diacriticalsforsymbols' => 207,
+    'diacriticalssup' => 208,
+    'diak' => 209,
+    'digit' => 1165,
+    'dingbats' => 210,
+    'dogr' => 211,
+    'domino' => 212,
+    'dsrt' => 213,
+    'dt=can' => 214,
+    'dt=com' => 215,
+    'dt=enc' => 216,
+    'dt=fin' => 217,
+    'dt=font' => 218,
+    'dt=fra' => 219,
+    'dt=init' => 220,
+    'dt=iso' => 221,
+    'dt=med' => 222,
+    'dt=nar' => 223,
+    'dt=nb' => 224,
+    'dt=noncanon' => 225,
+    'dt=none' => 226,
+    'dt=sml' => 227,
+    'dt=sqr' => 228,
+    'dt=sub' => 229,
+    'dt=sup' => 230,
+    'dt=vert' => 231,
+    'dupl' => 232,
+    'ea=a' => 234,
+    'ea=f' => 235,
+    'ea=h' => 236,
+    'ea=n' => 237,
+    'ea=na' => 238,
+    'ea=w' => 239,
+    'earlydynasticcuneiform' => 233,
+    'ebase' => 240,
+    'ecomp' => 241,
+    'egyp' => 242,
+    'egyptianhieroglyphformatcontrols' => 243,
+    'elba' => 244,
+    'elym' => 245,
+    'emod' => 246,
+    'emoji' => 247,
+    'emoticons' => 248,
+    'enclosedalphanum' => 249,
+    'enclosedalphanumsup' => 250,
+    'enclosedcjk' => 251,
+    'enclosedideographicsup' => 252,
+    'epres' => 253,
+    'ethi' => 254,
+    'ethiopicext' => 255,
+    'ethiopicexta' => 256,
+    'ethiopicsup' => 257,
+    'ext' => 258,
+    'extpict' => 259,
+    'gcb=cn' => 260,
+    'gcb=ex' => 261,
+    'gcb=l' => 262,
+    'gcb=pp' => 263,
+    'gcb=sm' => 264,
+    'gcb=t' => 265,
+    'gcb=v' => 266,
+    'gcb=xx' => 267,
+    'geometricshapes' => 268,
+    'geometricshapesext' => 269,
+    'geor' => 270,
+    'georgianext' => 271,
+    'georgiansup' => 272,
+    'glag' => 273,
+    'glagoliticsup' => 274,
+    'gong' => 275,
+    'gonm' => 276,
+    'goth' => 277,
+    'gran' => 278,
+    'graph' => 1166,
+    'grbase' => 279,
+    'greekext' => 280,
+    'grek' => 281,
+    'grext' => 282,
+    'gujr' => 283,
+    'guru' => 284,
+    'halfandfullforms' => 285,
+    'halfmarks' => 286,
+    'han' => 287,
+    'hang' => 288,
+    'hano' => 289,
+    'hatr' => 290,
+    'hebr' => 291,
+    'hex' => 1173,
+    'hexdigit' => 1173,
+    'highpusurrogates' => 292,
+    'highsurrogates' => 293,
+    'hira' => 294,
+    'hluw' => 295,
+    'hmng' => 296,
+    'hmnp' => 297,
+    'horizspace' => 1163,
+    'hst=na' => 298,
+    'hung' => 299,
+    'hyphen_perl_aux' => 300,
+    'idc' => 301,
+    'identifierstatus=allowed' => 302,
+    'identifierstatus=restricted' => 303,
+    'identifiertype=defaultignorable' => 304,
+    'identifiertype=exclusion' => 305,
+    'identifiertype=inclusion' => 306,
+    'identifiertype=limiteduse' => 307,
+    'identifiertype=notcharacter' => 308,
+    'identifiertype=notnfkc' => 309,
+    'identifiertype=notxid' => 310,
+    'identifiertype=obsolete' => 311,
+    'identifiertype=recommended' => 312,
+    'identifiertype=technical' => 313,
+    'identifiertype=uncommonuse' => 314,
+    'ideo' => 315,
+    'ideographicsymbols' => 316,
+    'ids' => 317,
+    'idsb' => 318,
+    'idst' => 319,
+    'in=1.1' => 517,
+    'in=10' => 512,
+    'in=11' => 513,
+    'in=12' => 514,
+    'in=12.1' => 515,
+    'in=13' => 516,
+    'in=2' => 518,
+    'in=2.1' => 519,
+    'in=3' => 520,
+    'in=3.1' => 521,
+    'in=3.2' => 522,
+    'in=4' => 523,
+    'in=4.1' => 524,
+    'in=5' => 525,
+    'in=5.1' => 526,
+    'in=5.2' => 527,
+    'in=6' => 528,
+    'in=6.1' => 529,
+    'in=6.2' => 530,
+    'in=6.3' => 531,
+    'in=7' => 532,
+    'in=8' => 533,
+    'in=9' => 534,
+    'inadlam' => 320,
+    'inahom' => 321,
+    'inanatolianhieroglyphs' => 322,
+    'inarabic' => 323,
+    'inarmenian' => 324,
+    'inavestan' => 325,
+    'inbalinese' => 326,
+    'inbamum' => 327,
+    'inbassavah' => 328,
+    'inbatak' => 329,
+    'inbengali' => 330,
+    'inbhaiksuki' => 331,
+    'inbopomofo' => 332,
+    'inbrahmi' => 333,
+    'inbuginese' => 334,
+    'inbuhid' => 335,
+    'incarian' => 336,
+    'incaucasianalbanian' => 337,
+    'inchakma' => 338,
+    'incham' => 339,
+    'incherokee' => 340,
+    'inchorasmian' => 341,
+    'incoptic' => 342,
+    'incuneiform' => 343,
+    'incyrillic' => 344,
+    'indevanagari' => 345,
+    'indicnumberforms' => 346,
+    'indicsiyaqnumbers' => 347,
+    'indivesakuru' => 348,
+    'indogra' => 349,
+    'induployan' => 350,
+    'inegyptianhieroglyphs' => 351,
+    'inelbasan' => 352,
+    'inelymaic' => 353,
+    'inethiopic' => 354,
+    'ingeorgian' => 355,
+    'inglagolitic' => 356,
+    'ingothic' => 357,
+    'ingrantha' => 358,
+    'ingreek' => 359,
+    'ingujarati' => 360,
+    'ingunjalagondi' => 361,
+    'ingurmukhi' => 362,
+    'inhangul' => 363,
+    'inhanifirohingya' => 364,
+    'inhanunoo' => 365,
+    'inhatran' => 366,
+    'inhebrew' => 367,
+    'inhiragana' => 368,
+    'inidc' => 369,
+    'inimperialaramaic' => 370,
+    'ininscriptionalpahlavi' => 371,
+    'ininscriptionalparthian' => 372,
+    'injavanese' => 373,
+    'inkaithi' => 374,
+    'inkannada' => 375,
+    'inkatakana' => 376,
+    'inkharoshthi' => 377,
+    'inkhitansmallscript' => 378,
+    'inkhmer' => 379,
+    'inkhojki' => 380,
+    'inkhudawadi' => 381,
+    'inlao' => 382,
+    'inlepcha' => 383,
+    'inlimbu' => 384,
+    'inlineara' => 385,
+    'inlisu' => 386,
+    'inlycian' => 387,
+    'inlydian' => 388,
+    'inmahajani' => 389,
+    'inmakasar' => 390,
+    'inmalayalam' => 391,
+    'inmandaic' => 392,
+    'inmanichaean' => 393,
+    'inmarchen' => 394,
+    'inmasaramgondi' => 395,
+    'inmedefaidrin' => 396,
+    'inmeeteimayek' => 397,
+    'inmendekikakui' => 398,
+    'inmeroiticcursive' => 399,
+    'inmiao' => 400,
+    'inmodi' => 401,
+    'inmongolian' => 402,
+    'inmro' => 403,
+    'inmultani' => 404,
+    'inmyanmar' => 405,
+    'innabataean' => 406,
+    'innandinagari' => 407,
+    'innewa' => 408,
+    'innewtailue' => 409,
+    'innko' => 410,
+    'innushu' => 411,
+    'innyiakengpuachuehmong' => 412,
+    'inogham' => 413,
+    'inoldhungarian' => 414,
+    'inolditalic' => 415,
+    'inoldpermic' => 416,
+    'inoldpersian' => 417,
+    'inoldsogdian' => 418,
+    'inoldturkic' => 419,
+    'inoriya' => 420,
+    'inosage' => 421,
+    'inosmanya' => 422,
+    'inpahawhhmong' => 423,
+    'inpaucinhau' => 424,
+    'inpc=bottom' => 425,
+    'inpc=bottomandleft' => 426,
+    'inpc=bottomandright' => 427,
+    'inpc=left' => 428,
+    'inpc=leftandright' => 429,
+    'inpc=na' => 430,
+    'inpc=overstruck' => 431,
+    'inpc=right' => 432,
+    'inpc=top' => 433,
+    'inpc=topandbottom' => 434,
+    'inpc=topandbottomandleft' => 435,
+    'inpc=topandbottomandright' => 436,
+    'inpc=topandleft' => 437,
+    'inpc=topandleftandright' => 438,
+    'inpc=topandright' => 439,
+    'inphagspa' => 440,
+    'inphoenician' => 441,
+    'inpsalterpahlavi' => 442,
+    'inpunctuation' => 443,
+    'inrejang' => 444,
+    'inrunic' => 445,
+    'insamaritan' => 446,
+    'insaurashtra' => 447,
+    'insc=avagraha' => 448,
+    'insc=bindu' => 449,
+    'insc=brahmijoiningnumber' => 450,
+    'insc=cantillationmark' => 451,
+    'insc=consonant' => 452,
+    'insc=consonantdead' => 453,
+    'insc=consonantfinal' => 454,
+    'insc=consonantheadletter' => 455,
+    'insc=consonantinitialpostfixed' => 456,
+    'insc=consonantkiller' => 457,
+    'insc=consonantmedial' => 458,
+    'insc=consonantplaceholder' => 459,
+    'insc=consonantprecedingrepha' => 460,
+    'insc=consonantprefixed' => 461,
+    'insc=consonantsubjoined' => 462,
+    'insc=consonantsucceedingrepha' => 463,
+    'insc=consonantwithstacker' => 464,
+    'insc=geminationmark' => 465,
+    'insc=invisiblestacker' => 466,
+    'insc=modifyingletter' => 467,
+    'insc=nonjoiner' => 468,
+    'insc=nukta' => 469,
+    'insc=number' => 470,
+    'insc=numberjoiner' => 471,
+    'insc=other' => 472,
+    'insc=purekiller' => 473,
+    'insc=registershifter' => 474,
+    'insc=syllablemodifier' => 475,
+    'insc=toneletter' => 476,
+    'insc=tonemark' => 477,
+    'insc=virama' => 478,
+    'insc=visarga' => 479,
+    'insc=vowel' => 480,
+    'insc=voweldependent' => 481,
+    'insc=vowelindependent' => 482,
+    'insiddham' => 483,
+    'insinhala' => 484,
+    'insogdian' => 485,
+    'insorasompeng' => 486,
+    'insoyombo' => 487,
+    'insundanese' => 488,
+    'insylotinagri' => 489,
+    'insyriac' => 490,
+    'intagalog' => 491,
+    'intagbanwa' => 492,
+    'intaile' => 493,
+    'intaitham' => 494,
+    'intaiviet' => 495,
+    'intakri' => 496,
+    'intamil' => 497,
+    'intangut' => 498,
+    'intelugu' => 499,
+    'inthaana' => 500,
+    'inthai' => 501,
+    'intibetan' => 502,
+    'intifinagh' => 503,
+    'intirhuta' => 504,
+    'inugaritic' => 505,
+    'invai' => 506,
+    'invs' => 507,
+    'inwancho' => 508,
+    'inwarangciti' => 509,
+    'inyezidi' => 510,
+    'inzanabazarsquare' => 511,
+    'ipaext' => 535,
+    'ital' => 536,
+    'jamo' => 537,
+    'jamoexta' => 538,
+    'jamoextb' => 539,
+    'java' => 540,
+    'jg=africanfeh' => 541,
+    'jg=africannoon' => 542,
+    'jg=africanqaf' => 543,
+    'jg=ain' => 544,
+    'jg=alaph' => 545,
+    'jg=alef' => 546,
+    'jg=beh' => 547,
+    'jg=beth' => 548,
+    'jg=burushaskiyehbarree' => 549,
+    'jg=dal' => 550,
+    'jg=dalathrish' => 551,
+    'jg=e' => 552,
+    'jg=farsiyeh' => 553,
+    'jg=fe' => 554,
+    'jg=feh' => 555,
+    'jg=finalsemkath' => 556,
+    'jg=gaf' => 557,
+    'jg=gamal' => 558,
+    'jg=hah' => 559,
+    'jg=hamzaonhehgoal' => 560,
+    'jg=hanifirohingyakinnaya' => 561,
+    'jg=hanifirohingyapa' => 562,
+    'jg=he' => 563,
+    'jg=heh' => 564,
+    'jg=hehgoal' => 565,
+    'jg=heth' => 566,
+    'jg=kaf' => 567,
+    'jg=kaph' => 568,
+    'jg=khaph' => 569,
+    'jg=knottedheh' => 570,
+    'jg=lam' => 571,
+    'jg=lamadh' => 572,
+    'jg=malayalambha' => 573,
+    'jg=malayalamja' => 574,
+    'jg=malayalamlla' => 575,
+    'jg=malayalamllla' => 576,
+    'jg=malayalamnga' => 577,
+    'jg=malayalamnna' => 578,
+    'jg=malayalamnnna' => 579,
+    'jg=malayalamnya' => 580,
+    'jg=malayalamra' => 581,
+    'jg=malayalamssa' => 582,
+    'jg=malayalamtta' => 583,
+    'jg=manichaeanaleph' => 584,
+    'jg=manichaeanayin' => 585,
+    'jg=manichaeanbeth' => 586,
+    'jg=manichaeandaleth' => 587,
+    'jg=manichaeandhamedh' => 588,
+    'jg=manichaeanfive' => 589,
+    'jg=manichaeangimel' => 590,
+    'jg=manichaeanheth' => 591,
+    'jg=manichaeanhundred' => 592,
+    'jg=manichaeankaph' => 593,
+    'jg=manichaeanlamedh' => 594,
+    'jg=manichaeanmem' => 595,
+    'jg=manichaeannun' => 596,
+    'jg=manichaeanone' => 597,
+    'jg=manichaeanpe' => 598,
+    'jg=manichaeanqoph' => 599,
+    'jg=manichaeanresh' => 600,
+    'jg=manichaeansadhe' => 601,
+    'jg=manichaeansamekh' => 602,
+    'jg=manichaeantaw' => 603,
+    'jg=manichaeanten' => 604,
+    'jg=manichaeanteth' => 605,
+    'jg=manichaeanthamedh' => 606,
+    'jg=manichaeantwenty' => 607,
+    'jg=manichaeanwaw' => 608,
+    'jg=manichaeanyodh' => 609,
+    'jg=manichaeanzayin' => 610,
+    'jg=meem' => 611,
+    'jg=mim' => 612,
+    'jg=nojoininggroup' => 613,
+    'jg=noon' => 614,
+    'jg=nun' => 615,
+    'jg=nya' => 616,
+    'jg=pe' => 617,
+    'jg=qaf' => 618,
+    'jg=qaph' => 619,
+    'jg=reh' => 620,
+    'jg=reversedpe' => 621,
+    'jg=rohingyayeh' => 622,
+    'jg=sad' => 623,
+    'jg=sadhe' => 624,
+    'jg=seen' => 625,
+    'jg=semkath' => 626,
+    'jg=shin' => 627,
+    'jg=straightwaw' => 628,
+    'jg=swashkaf' => 629,
+    'jg=syriacwaw' => 630,
+    'jg=tah' => 631,
+    'jg=taw' => 632,
+    'jg=tehmarbuta' => 633,
+    'jg=teth' => 634,
+    'jg=waw' => 635,
+    'jg=yeh' => 636,
+    'jg=yehbarree' => 637,
+    'jg=yehwithtail' => 638,
+    'jg=yudh' => 639,
+    'jg=yudhhe' => 640,
+    'jg=zain' => 641,
+    'jg=zhain' => 642,
+    'joinc' => 643,
+    'jt=c' => 644,
+    'jt=d' => 645,
+    'jt=l' => 646,
+    'jt=r' => 647,
+    'jt=t' => 648,
+    'jt=u' => 649,
+    'kali' => 650,
+    'kana' => 651,
+    'kanaexta' => 652,
+    'kanasup' => 653,
+    'kanbun' => 654,
+    'kangxi' => 655,
+    'katakanaext' => 656,
+    'khar' => 657,
+    'khmersymbols' => 658,
+    'khmr' => 659,
+    'khoj' => 660,
+    'kits' => 661,
+    'knda' => 662,
+    'kthi' => 663,
+    'l' => 664,
+    'l_' => 96,
+    'l_amp_' => 96,
+    'lana' => 665,
+    'lao' => 666,
+    'latin1' => 667,
+    'latinexta' => 668,
+    'latinextadditional' => 669,
+    'latinextb' => 670,
+    'latinextc' => 671,
+    'latinextd' => 672,
+    'latinexte' => 673,
+    'latn' => 674,
+    'lb=ai' => 675,
+    'lb=al' => 676,
+    'lb=b2' => 677,
+    'lb=ba' => 678,
+    'lb=bb' => 679,
+    'lb=bk' => 680,
+    'lb=cb' => 681,
+    'lb=cj' => 682,
+    'lb=cl' => 683,
+    'lb=cm' => 684,
+    'lb=cp' => 685,
+    'lb=cr' => 686,
+    'lb=ex' => 687,
+    'lb=gl' => 688,
+    'lb=h2' => 689,
+    'lb=h3' => 690,
+    'lb=hl' => 691,
+    'lb=hy' => 692,
+    'lb=id' => 693,
+    'lb=in' => 694,
+    'lb=is' => 695,
+    'lb=lf' => 696,
+    'lb=nl' => 697,
+    'lb=ns' => 698,
+    'lb=nu' => 699,
+    'lb=op' => 700,
+    'lb=po' => 701,
+    'lb=pr' => 702,
+    'lb=qu' => 703,
+    'lb=sa' => 704,
+    'lb=sg_perl_aux' => 705,
+    'lb=sp' => 706,
+    'lb=sy' => 707,
+    'lb=wj' => 708,
+    'lb=xx' => 709,
+    'lb=zw' => 710,
+    'lb=zwj' => 711,
+    'lc' => 96,
+    'lepc' => 712,
+    'letterlikesymbols' => 713,
+    'limb' => 714,
+    'lina' => 715,
+    'linb' => 716,
+    'linearbideograms' => 717,
+    'linearbsyllabary' => 718,
+    'lisu' => 719,
+    'lisusup' => 720,
+    'll' => 724,
+    'lm' => 721,
+    'lo' => 722,
+    'loe' => 723,
+    'lower' => 1167,
+    'lowercase' => 1167,
+    'lowercaseletter' => 724,
+    'lowsurrogates' => 725,
+    'lt' => 1124,
+    'lu' => 1130,
+    'lyci' => 726,
+    'lydi' => 727,
+    'm' => 728,
+    'mahj' => 729,
+    'mahjong' => 730,
+    'maka' => 731,
+    'mand' => 732,
+    'mani' => 733,
+    'marc' => 734,
+    'math' => 735,
+    'mathalphanum' => 736,
+    'mathoperators' => 737,
+    'mayannumerals' => 738,
+    'mc' => 739,
+    'me' => 740,
+    'medf' => 741,
+    'meeteimayekext' => 742,
+    'mend' => 743,
+    'merc' => 744,
+    'mero' => 745,
+    'miao' => 746,
+    'miscarrows' => 747,
+    'miscmathsymbolsa' => 748,
+    'miscmathsymbolsb' => 749,
+    'miscpictographs' => 750,
+    'miscsymbols' => 751,
+    'misctechnical' => 752,
+    'mlym' => 753,
+    'mn' => 754,
+    'modi' => 755,
+    'modifierletters' => 756,
+    'modifiertoneletters' => 757,
+    'mong' => 758,
+    'mongoliansup' => 759,
+    'mro' => 760,
+    'mtei' => 761,
+    'mult' => 762,
+    'music' => 763,
+    'myanmarexta' => 764,
+    'myanmarextb' => 765,
+    'mymr' => 766,
+    'n' => 767,
+    'nand' => 768,
+    'narb' => 769,
+    'nb' => 770,
+    'nbat' => 771,
+    'nd' => 1165,
+    'newa' => 772,
+    'nfcqc=m' => 773,
+    'nfcqc=y' => 774,
+    'nfdqc=y' => 775,
+    'nfkcqc=n' => 776,
+    'nfkcqc=y' => 777,
+    'nfkdqc=n' => 778,
+    'nko' => 779,
+    'nl' => 780,
+    'no' => 781,
+    'nshu' => 782,
+    'nt=di' => 783,
+    'nt=nu' => 784,
+    'numberforms' => 785,
+    'nv=0' => 786,
+    'nv=1' => 787,
+    'nv=1/10' => 812,
+    'nv=1/12' => 813,
+    'nv=1/16' => 814,
+    'nv=1/160' => 815,
+    'nv=1/2' => 816,
+    'nv=1/20' => 817,
+    'nv=1/3' => 818,
+    'nv=1/32' => 819,
+    'nv=1/320' => 820,
+    'nv=1/4' => 821,
+    'nv=1/40' => 822,
+    'nv=1/5' => 823,
+    'nv=1/6' => 824,
+    'nv=1/64' => 825,
+    'nv=1/7' => 826,
+    'nv=1/8' => 827,
+    'nv=1/80' => 828,
+    'nv=1/9' => 829,
+    'nv=10' => 788,
+    'nv=100' => 789,
+    'nv=1000' => 790,
+    'nv=10000' => 791,
+    'nv=100000' => 792,
+    'nv=1000000' => 793,
+    'nv=10000000' => 794,
+    'nv=100000000' => 795,
+    'nv=10000000000' => 796,
+    'nv=1000000000000' => 797,
+    'nv=11' => 798,
+    'nv=11/12' => 799,
+    'nv=11/2' => 800,
+    'nv=12' => 801,
+    'nv=13' => 802,
+    'nv=13/2' => 803,
+    'nv=14' => 804,
+    'nv=15' => 805,
+    'nv=15/2' => 806,
+    'nv=16' => 807,
+    'nv=17' => 808,
+    'nv=17/2' => 809,
+    'nv=18' => 810,
+    'nv=19' => 811,
+    'nv=2' => 830,
+    'nv=2/3' => 847,
+    'nv=2/5' => 848,
+    'nv=20' => 831,
+    'nv=200' => 832,
+    'nv=2000' => 833,
+    'nv=20000' => 834,
+    'nv=200000' => 835,
+    'nv=20000000' => 836,
+    'nv=21' => 837,
+    'nv=216000' => 838,
+    'nv=22' => 839,
+    'nv=23' => 840,
+    'nv=24' => 841,
+    'nv=25' => 842,
+    'nv=26' => 843,
+    'nv=27' => 844,
+    'nv=28' => 845,
+    'nv=29' => 846,
+    'nv=3' => 849,
+    'nv=3/16' => 864,
+    'nv=3/2' => 865,
+    'nv=3/20' => 866,
+    'nv=3/4' => 867,
+    'nv=3/5' => 868,
+    'nv=3/64' => 869,
+    'nv=3/8' => 870,
+    'nv=3/80' => 871,
+    'nv=30' => 850,
+    'nv=300' => 851,
+    'nv=3000' => 852,
+    'nv=30000' => 853,
+    'nv=300000' => 854,
+    'nv=31' => 855,
+    'nv=32' => 856,
+    'nv=33' => 857,
+    'nv=34' => 858,
+    'nv=35' => 859,
+    'nv=36' => 860,
+    'nv=37' => 861,
+    'nv=38' => 862,
+    'nv=39' => 863,
+    'nv=4' => 872,
+    'nv=4/5' => 888,
+    'nv=40' => 873,
+    'nv=400' => 874,
+    'nv=4000' => 875,
+    'nv=40000' => 876,
+    'nv=400000' => 877,
+    'nv=41' => 878,
+    'nv=42' => 879,
+    'nv=43' => 880,
+    'nv=432000' => 881,
+    'nv=44' => 882,
+    'nv=45' => 883,
+    'nv=46' => 884,
+    'nv=47' => 885,
+    'nv=48' => 886,
+    'nv=49' => 887,
+    'nv=5' => 889,
+    'nv=5/12' => 895,
+    'nv=5/2' => 896,
+    'nv=5/6' => 897,
+    'nv=5/8' => 898,
+    'nv=50' => 890,
+    'nv=500' => 891,
+    'nv=5000' => 892,
+    'nv=50000' => 893,
+    'nv=500000' => 894,
+    'nv=6' => 899,
+    'nv=60' => 900,
+    'nv=600' => 901,
+    'nv=6000' => 902,
+    'nv=60000' => 903,
+    'nv=600000' => 904,
+    'nv=7' => 905,
+    'nv=7/12' => 911,
+    'nv=7/2' => 912,
+    'nv=7/8' => 913,
+    'nv=70' => 906,
+    'nv=700' => 907,
+    'nv=7000' => 908,
+    'nv=70000' => 909,
+    'nv=700000' => 910,
+    'nv=8' => 914,
+    'nv=80' => 915,
+    'nv=800' => 916,
+    'nv=8000' => 917,
+    'nv=80000' => 918,
+    'nv=800000' => 919,
+    'nv=9' => 920,
+    'nv=9/2' => 926,
+    'nv=90' => 921,
+    'nv=900' => 922,
+    'nv=9000' => 923,
+    'nv=90000' => 924,
+    'nv=900000' => 925,
+    'nv=_minus_1/2' => 928,
+    'nv=nan' => 927,
+    'ocr' => 929,
+    'ogam' => 930,
+    'olck' => 931,
+    'orkh' => 932,
+    'ornamentaldingbats' => 933,
+    'orya' => 934,
+    'osge' => 935,
+    'osma' => 936,
+    'ottomansiyaqnumbers' => 937,
+    'p' => 938,
+    'palm' => 939,
+    'patsyn' => 940,
+    'pauc' => 941,
+    'pc' => 942,
+    'pcm' => 943,
+    'pd' => 944,
+    'pe' => 945,
+    'perlspace' => 967,
+    'perlword' => 969,
+    'perm' => 946,
+    'pf' => 947,
+    'phag' => 948,
+    'phaistos' => 949,
+    'phli' => 950,
+    'phlp' => 951,
+    'phnx' => 952,
+    'phoneticext' => 953,
+    'phoneticextsup' => 954,
+    'pi' => 955,
+    'playingcards' => 956,
+    'po' => 957,
+    'posixalnum' => 958,
+    'posixalpha' => 959,
+    'posixblank' => 960,
+    'posixcntrl' => 961,
+    'posixdigit' => 962,
+    'posixgraph' => 963,
+    'posixlower' => 964,
+    'posixprint' => 965,
+    'posixpunct' => 966,
+    'posixspace' => 967,
+    'posixupper' => 968,
+    'posixword' => 969,
+    'posixxdigit' => 970,
+    'print' => 1168,
+    'prti' => 971,
+    'ps' => 972,
+    'pua' => 973,
+    'qaai' => 974,
+    'qmark' => 975,
+    'radical' => 976,
+    'ri' => 977,
+    'rjng' => 978,
+    'rohg' => 979,
+    'rumi' => 980,
+    'runr' => 981,
+    's' => 982,
+    'samr' => 983,
+    'sarb' => 984,
+    'saur' => 985,
+    'sb=at' => 986,
+    'sb=cl' => 987,
+    'sb=ex' => 988,
+    'sb=fo' => 989,
+    'sb=le' => 990,
+    'sb=lo' => 991,
+    'sb=nu' => 992,
+    'sb=sc' => 993,
+    'sb=se' => 994,
+    'sb=sp' => 995,
+    'sb=st' => 996,
+    'sb=up' => 997,
+    'sb=xx' => 998,
+    'sc' => 999,
+    'sc=adlm' => 1000,
+    'sc=arab' => 1001,
+    'sc=beng' => 1002,
+    'sc=bopo' => 1003,
+    'sc=bugi' => 1004,
+    'sc=buhd' => 1005,
+    'sc=cakm' => 1006,
+    'sc=copt' => 1007,
+    'sc=cprt' => 1008,
+    'sc=cyrl' => 1009,
+    'sc=deva' => 1010,
+    'sc=dogr' => 1011,
+    'sc=dupl' => 1012,
+    'sc=geor' => 1013,
+    'sc=glag' => 1014,
+    'sc=gong' => 1015,
+    'sc=gonm' => 1016,
+    'sc=gran' => 1017,
+    'sc=grek' => 1018,
+    'sc=gujr' => 1019,
+    'sc=guru' => 1020,
+    'sc=han' => 1021,
+    'sc=hang' => 1022,
+    'sc=hano' => 1023,
+    'sc=hira' => 1024,
+    'sc=java' => 1025,
+    'sc=kali' => 1026,
+    'sc=kana' => 1027,
+    'sc=khoj' => 1028,
+    'sc=knda' => 1029,
+    'sc=kthi' => 1030,
+    'sc=latn' => 1031,
+    'sc=limb' => 1032,
+    'sc=lina' => 1033,
+    'sc=linb' => 1034,
+    'sc=mahj' => 1035,
+    'sc=mand' => 1036,
+    'sc=mani' => 1037,
+    'sc=mlym' => 1038,
+    'sc=modi' => 1039,
+    'sc=mong' => 1040,
+    'sc=mult' => 1041,
+    'sc=mymr' => 1042,
+    'sc=nand' => 1043,
+    'sc=orya' => 1044,
+    'sc=perm' => 1045,
+    'sc=phag' => 1046,
+    'sc=phlp' => 1047,
+    'sc=qaai' => 1048,
+    'sc=rohg' => 1049,
+    'sc=shrd' => 1050,
+    'sc=sind' => 1051,
+    'sc=sinh' => 1052,
+    'sc=sogd' => 1053,
+    'sc=sylo' => 1054,
+    'sc=syrc' => 1055,
+    'sc=tagb' => 1056,
+    'sc=takr' => 1057,
+    'sc=tale' => 1058,
+    'sc=taml' => 1059,
+    'sc=telu' => 1060,
+    'sc=tglg' => 1061,
+    'sc=thaa' => 1062,
+    'sc=tirh' => 1063,
+    'sc=yezi' => 1064,
+    'sc=yi' => 1065,
+    'sc=zyyy' => 1066,
+    'sd' => 1067,
+    'sgnw' => 1068,
+    'shaw' => 1069,
+    'shorthandformatcontrols' => 1070,
+    'shrd' => 1071,
+    'sidd' => 1072,
+    'sind' => 1073,
+    'sinh' => 1074,
+    'sinhalaarchaicnumbers' => 1075,
+    'sk' => 1076,
+    'sm' => 1077,
+    'smallforms' => 1078,
+    'smallkanaext' => 1079,
+    'so' => 1080,
+    'sogd' => 1081,
+    'sogo' => 1082,
+    'sora' => 1083,
+    'soyo' => 1084,
+    'space' => 1170,
+    'spaceperl' => 1170,
+    'specials' => 1085,
+    'sterm' => 1086,
+    'sund' => 1087,
+    'sundanesesup' => 1088,
+    'suparrowsa' => 1089,
+    'suparrowsb' => 1090,
+    'suparrowsc' => 1091,
+    'superandsub' => 1092,
+    'supmathoperators' => 1093,
+    'suppuaa' => 1094,
+    'suppuab' => 1095,
+    'suppunctuation' => 1096,
+    'supsymbolsandpictographs' => 1097,
+    'suttonsignwriting' => 1098,
+    'sylo' => 1099,
+    'symbolsandpictographsexta' => 1100,
+    'symbolsforlegacycomputing' => 1101,
+    'syrc' => 1102,
+    'syriacsup' => 1103,
+    'tagb' => 1104,
+    'tags' => 1105,
+    'taixuanjing' => 1106,
+    'takr' => 1107,
+    'tale' => 1108,
+    'talu' => 1109,
+    'tamilsup' => 1110,
+    'taml' => 1111,
+    'tang' => 1112,
+    'tangutcomponents' => 1113,
+    'tangutsup' => 1114,
+    'tavt' => 1115,
+    'telu' => 1116,
+    'term' => 1117,
+    'tfng' => 1118,
+    'tglg' => 1119,
+    'thaa' => 1120,
+    'thai' => 1121,
+    'tibt' => 1122,
+    'tirh' => 1123,
+    'title' => 1124,
+    'titlecase' => 1124,
+    'titlecaseletter' => 1124,
+    'transportandmap' => 1125,
+    'ucas' => 1126,
+    'ucasext' => 1127,
+    'ugar' => 1128,
+    'uideo' => 1129,
+    'upper' => 1171,
+    'uppercase' => 1171,
+    'uppercaseletter' => 1130,
+    'vai' => 1131,
+    'vedicext' => 1132,
+    'verticalforms' => 1133,
+    'vertspace' => 1134,
+    'vo=r' => 1135,
+    'vo=tr' => 1136,
+    'vo=tu' => 1137,
+    'vo=u' => 1138,
+    'vs' => 1139,
+    'vssup' => 1140,
+    'wara' => 1141,
+    'wb=dq' => 1142,
+    'wb=eb' => 1143,
+    'wb=ex' => 1144,
+    'wb=extend' => 1145,
+    'wb=fo' => 1146,
+    'wb=ka' => 1147,
+    'wb=le' => 1148,
+    'wb=mb' => 1149,
+    'wb=ml' => 1150,
+    'wb=mn' => 1151,
+    'wb=nl' => 1152,
+    'wb=nu' => 1153,
+    'wb=sq' => 1154,
+    'wb=wsegspace' => 1155,
+    'wb=xx' => 1156,
+    'wcho' => 1157,
+    'whitespace' => 1170,
+    'word' => 1172,
+    'wspace' => 1170,
+    'xdigit' => 1173,
+    'xidc' => 1158,
+    'xids' => 1159,
+    'xpeo' => 1160,
+    'xperlspace' => 1170,
+    'xposixalnum' => 1161,
+    'xposixalpha' => 1162,
+    'xposixblank' => 1163,
+    'xposixcntrl' => 1164,
+    'xposixdigit' => 1165,
+    'xposixgraph' => 1166,
+    'xposixlower' => 1167,
+    'xposixprint' => 1168,
+    'xposixpunct' => 1169,
+    'xposixspace' => 1170,
+    'xposixupper' => 1171,
+    'xposixword' => 1172,
+    'xposixxdigit' => 1173,
+    'xsux' => 1174,
+    'yezi' => 1175,
+    'yi' => 1176,
+    'yijing' => 1177,
+    'yiradicals' => 1178,
+    'yisyllables' => 1179,
+    'z' => 1180,
+    'zanb' => 1181,
+    'zl' => 1182,
+    'zp' => 1183,
+    'zs' => 1184,
+    'zyyy' => 1185,
+    'zzzz' => 1186,
 );
 
 1;
 
 # Generated from:
-# d34c77b7e7a94986cc82056919f4ffc1503b73091561e16bd8ef145ac0fd04c5 lib/Unicode/UCD.pm
-# 5e91b649379ec79af7cfb6b09410a24557cba4c6d733cd0a2b8a78a1448736d2 lib/unicore/ArabicShaping.txt
-# f5feb19cd084b2b1568fbc0f94f4b4b54941406e7fb36c7570f8352fd5022dbe lib/unicore/BidiBrackets.txt
-# e6cbd8ffe94f2e0fbfa6695d6c06c1e72eef7d3aa93cb6329d111285198b5e62 lib/unicore/BidiMirroring.txt
-# a28b205afe8625fffdb6544a5fe14cf02b91493d9900f07820fa2102a17548f7 lib/unicore/Blocks.txt
-# 9c772627c6ee77eea6a17b42927b8ee28ca05dc65d6a511062104baaf3d12294 lib/unicore/CaseFolding.txt
-# abc8394c5bde62453118b00c1c5842160a04d7fffb2e829ee5426b846596d081 lib/unicore/CompositionExclusions.txt
-# 2fc081011d8fabaf7cf4937732dd5a6d6a57e492c43f3adfeded513387ee0ec3 lib/unicore/DAge.txt
-# a6eb7a8671fb532fbd88c37fd7b20b5b2e7dbfc8b121f74c14abe2947db0da68 lib/unicore/DCoreProperties.txt
-# 92dcdda84142194a1596f22180fcdf8c0e7f86897f09cc9203c7dc636c549f5f lib/unicore/DNormalizationProps.txt
-# 904500178b2e752635bef27aaed3a2a3718a100bce35ff96b3890be7a8315d8f lib/unicore/EastAsianWidth.txt
-# 1989b03d93023d8f5cc33eebf0d2ea80c8bd8f8c97843059ea039acb582c2078 lib/unicore/EmojiData.txt
-# d7930c2a7318e66b4ba756d5e5b41fbc586c2ad43d450ae9d320a758510bae2e lib/unicore/EquivalentUnifiedIdeograph.txt
-# 8606af08712a8c18fe268d418e2e5a87eddee6e190cce4c2d5a76b4fadf035e8 lib/unicore/HangulSyllableType.txt
-# 49a1bf18b048454154881f6a8a605b5e2fc73e85fcc4df1cb26d52e8c2aeb9bf lib/unicore/IndicPositionalCategory.txt
-# 1b6f3ef6e00e5b2e2a93d2d3c954ca1cce368599c5f11874cd0f0ce222d4637b lib/unicore/IndicSyllabicCategory.txt
-# 285c5c1ae458bc3ccd6a1398a94d2d67ce6bc1d7fc0f098762836050345e9434 lib/unicore/Jamo.txt
-# 961f842fc70b5afd1d82c6645e68c10d1f701382aed38ae38cb2ff27f671903c lib/unicore/LineBreak.txt
-# ff61a0687d2f32c0dd1094254b8bde967883b43c2d4d50fd17531d498e41ab2c lib/unicore/NameAliases.txt
-# d3eb9a288ebeaf9de1237989f490705e287b6f610b59d2459fb1b7c2d8e39c39 lib/unicore/NamedSequences.txt
-# d30d3ee430cf3527449d024954f053e419fa4aa2246eb59e5cd8d621af0c4b3f lib/unicore/PropList.txt
-# efce54f7c715a332c19b3d14c6a0eea30c6cde91caf6ff0d21c755be933736f4 lib/unicore/PropValueAliases.txt
-# d3cc3f9f0b6a8f0b7ef1d6ef202675426c28f4a75de01fc69ed977a93a00982b lib/unicore/PropertyAliases.txt
-# 3746848c181b5dbc1e614dfac9b8a5e3568e6525c693ac14e692ac55dec57e91 lib/unicore/ScriptExtensions.txt
-# e6313a8edfd24f36c7a006fbcf1d1b7245b5dd009c6dde80441f0da08b822c43 lib/unicore/Scripts.txt
-# 817ce2e9edca8e075a153f54b8f3b020345e37652cd2bda9b1495c366af17e7e lib/unicore/SpecialCasing.txt
-# 93ab1acd8fd9d450463b50ae77eab151a7cda48f98b25b56baed8070f80fc936 lib/unicore/UnicodeData.txt
-# ec5ba64af58297a46de17848eb984d2b231adb304de92e9d0d3befdbf9dc2551 lib/unicore/VerticalOrientation.txt
-# 95bd55cf803b93eb0b4990cf0e1d70ede263b36412d9c6921fd6f15cef058961 lib/unicore/auxiliary/GCBTest.txt
-# 39d73448fd257e6082f83ddf4c8bf6feb191e85dc8fc56b1a8512482de5e3dea lib/unicore/auxiliary/GraphemeBreakProperty.txt
-# f385e70f79f5959ae66d64b00f4bda39db6cef78e5363a0cdd88db46eafc6c8f lib/unicore/auxiliary/LBTest.txt
-# 7d6c909af97d0ab545a132d412f6e4e65c7eb5158514a7feb9bf00bcd05875f9 lib/unicore/auxiliary/SBTest.txt
-# c47d674ef4170c46185bf56f7a4c6627f65f012295e0994f7dc4aea51f8fd8cf lib/unicore/auxiliary/SentenceBreakProperty.txt
-# 3e3320bbbe775de7f1a0b9a30021eb949116a9b05cb461c90596c5ecf1743831 lib/unicore/auxiliary/WBTest.txt
-# f221f89fe3bb3becc00de726d5694c4b7f464c316baff6d339b2ff3900bcb96c lib/unicore/auxiliary/WordBreakProperty.txt
-# db2c41c618bab54b00e58223ad11cec550f9b9fd1a471de236e660da92fe4870 lib/unicore/extracted/DBidiClass.txt
-# fecd8a1c49935d794c4c1012f4158aa536a13049a4c10d01aaf7b5f90f3b2cbc lib/unicore/extracted/DBinaryProperties.txt
-# db6f38fb4aa8b9181b5e6a9f320de9d5c2c9b5687116a619b3cb90138b025e0b lib/unicore/extracted/DCombiningClass.txt
-# 2524f69c175831fd84bfbaf13ea37992f41db167d728c51b1d0002c1d0b130b0 lib/unicore/extracted/DDecompositionType.txt
-# 16852301d54ae59b5cfe0daa6b8e17fb688ed055d59b2a5a11eaafc650cc9d30 lib/unicore/extracted/DEastAsianWidth.txt
-# 78f898b988049a5bea5039cea6ffe87a92596859ac660a6c438519b512fe2ee6 lib/unicore/extracted/DGeneralCategory.txt
-# 33441692403901287c834f96bd33b671133a6f74e2732c61a497608b9e434932 lib/unicore/extracted/DJoinGroup.txt
-# a792ac5ef602e3bace679cc96d7491701dcdb73d81c782253de88fdcc5e70e50 lib/unicore/extracted/DJoinType.txt
-# 78e2600e24fa7d5ab62117de50b382f8b31b08401c37a0782c38dacb340b64e7 lib/unicore/extracted/DLineBreak.txt
-# 1bde4ad73e271c6349fbd1972e54f38bba5cc1900c28f678e79b9e8909b31793 lib/unicore/extracted/DNumType.txt
-# 6278722699123f3890e4b1cc42011e96d8960e4958a3b93484361530983d2611 lib/unicore/extracted/DNumValues.txt
-# b3d90fc23817ea4e33e9a90107c0a6c7b23314efd5712905ed172624d5524693 lib/unicore/mktables
-# a712c758275b460d18fa77a26ed3589689bb3f69dcc1ea99b913e32db92a5cd2 lib/unicore/version
+# d60b1a3dffe16c4aaaf3f00d21993bb320d05e9828b106182214764d4c69935c lib/Unicode/UCD.pm
+# ce96627d4fc91b4fd886c409caeb9b76cf7bd345e12f05c6701add7f233f6437 lib/unicore/ArabicShaping.txt
+# 0e69eef3da722cc104522d8372e86d5b86bb7afcc761b0c991e39e832294946d lib/unicore/BidiBrackets.txt
+# a00d9d21585106a52113fb7b1d3d0373a5835be72e76862fb559ebddd474d70e lib/unicore/BidiMirroring.txt
+# 81a82b6a9fcf1a9c12f588d7a1decd73a9afdc4cac95b0eb7e576e7942d6c19f lib/unicore/Blocks.txt
+# 99d231d7c91688bbe8ca8ccebcc2f46b5b222f844babe4827295bae11e2abe5f lib/unicore/CaseFolding.txt
+# 38badafd818d8405324fe298c0676be0c95186368c84b5368375fd871a645144 lib/unicore/CompositionExclusions.txt
+# e779a443d3aa2a3166a15becaa2b737c922480e32c0453d5956093633555078f lib/unicore/DAge.txt
+# a5d45f59b39deaab3c72ce8c1a2e212a5e086dff11b1f9d5bb0e352642e82248 lib/unicore/DCoreProperties.txt
+# 3ac44e11c84bdaf6b207d2c2c20eed857ae17052393fc7f71b0fe951186ba906 lib/unicore/DNormalizationProps.txt
+# 4f822ec7a9ebbb3138ad29bade8b9688d25b39c7a3c0b7431f01e7229e4fcb6e lib/unicore/EastAsianWidth.txt
+# fc535aa1047a70105ab9a22c2b4c3f363a2ff02fe48ebbc5eeb9873b2752ff0b lib/unicore/EquivalentUnifiedIdeograph.txt
+# b9c5158ce944d2fec57e0e4ecb716bdabfc3bdde73525f1772fe03f61a30d473 lib/unicore/HangulSyllableType.txt
+# 36c1b2a626ff1fb23b8b21e6ea8712698f8ce668dded1cb48b8ddf6a6a1b04e9 lib/unicore/IdStatus.txt
+# 4857c4ffa3898e6128b2d46b0a02e499a663fb91464a69ef3611096f01293acc lib/unicore/IdType.txt
+# 69197b019fa5f2fb0d8c6ed1ed8acb9f2e8b5b8f45a947953ffa652f3bf54983 lib/unicore/IndicPositionalCategory.txt
+# 6604e2f0fde7428675364aa0006bc686b79488dcc60ae8cb29800af2be3352e8 lib/unicore/IndicSyllabicCategory.txt
+# 84ead63924aaa74b988b2eaf254a8733276ed108633ce2ef77a9ee1de7818162 lib/unicore/Jamo.txt
+# d5abcd8f54c8a2aa912924c485ccf7f968ad98feaa303d8e9a29ad89172f1faf lib/unicore/LineBreak.txt
+# 985128e8c8b2540233331d9b27d897d2c23bd5bcf1d05da960befce6efc59542 lib/unicore/NameAliases.txt
+# 27282b8aa01d4d0c44aef436cb74195ae8639ffa187aeee4e6247af76febea76 lib/unicore/NamedSequences.txt
+# 485b5a3ed25dbf1f94dfa5a9b69d8b4550ffd0c33045ccc55ccfd7c80b2a40cf lib/unicore/PropList.txt
+# 6b3902e9268cd843fe65cbdea992108c9528343ec0679f800b96f356bb553e5a lib/unicore/PropValueAliases.txt
+# 2bd5777847e3d6add3c7e5c0d1393ddcab89e5a0ac3ff498cb0c53041f0b86e4 lib/unicore/PropertyAliases.txt
+# 03a61dc89422e44cc2b73e8e893321007880ab69e2a4d281c0f1bc29c602b9d0 lib/unicore/ScriptExtensions.txt
+# 9a5ed1ec9b5f0d7147e9371ad792ab39203611af7637cff2aa4a5c663b172cde lib/unicore/Scripts.txt
+# 6424312f1dc39b22e0ff9c0ffb13dfad424d9b03e6a6dc6bca941f6bf5ef1ffd lib/unicore/SpecialCasing.txt
+# bdbffbbfc8ad4d3a6d01b5891510458f3d36f7170422af4ea2bed3211a73e8bb lib/unicore/UnicodeData.txt
+# 160f41816234addb511901d5f21febd69574578dd93de6ef8153e35693325575 lib/unicore/VerticalOrientation.txt
+# 32dfb37d21db530529a6ec3dc13d96f21f8e7c7faf7ff3db8a9760cd76cec81d lib/unicore/auxiliary/GCBTest.txt
+# 2bd3c5e2d62701ff81fb3ec318e179a4618cabb1493b1e0dd2b4e7e56c5437c4 lib/unicore/auxiliary/GraphemeBreakProperty.txt
+# c51fbebfa82a0f36473b44bfd71d5ef6cb6a1f81fb313375dc9a1910d79bb2b6 lib/unicore/auxiliary/LBTest.txt
+# 80b0107750818d8f370bd120b6fe56b6855b60581f72affe8b60409a469b4b65 lib/unicore/auxiliary/SBTest.txt
+# 09e3166ebab166ac630a227f77f4e794ebd433271abd5588f5a67e7f199c71ee lib/unicore/auxiliary/SentenceBreakProperty.txt
+# bf5373ce28a5df06796c93dc159dd15a997bb2950c92704b40ae8190cfc3716d lib/unicore/auxiliary/WBTest.txt
+# a2b7373cf2fe3fa3b26dbb53405ca849985f771ff47f1c61743978003ff80499 lib/unicore/auxiliary/WordBreakProperty.txt
+# d2686f400a638c80775d7c662556fb8fa8dd3bbe4aa548d9d31624264c6e1bb1 lib/unicore/emoji/emoji.txt
+# b827ae5da8c2b08947cc9a120a7b7fd2f1676fb160b508df78075381635b127c lib/unicore/extracted/DBidiClass.txt
+# 6fdc5b5ef40444a8f0c772e6b67c00498d4216fe0c0fdf76744ce338f2ad3810 lib/unicore/extracted/DBinaryProperties.txt
+# e14928a5bf6ad5958a80332bd42e96e14420080a95c660e5da29384e496755d0 lib/unicore/extracted/DCombiningClass.txt
+# 579a03281fbe87b78d5d9a8523de4d255edd7e4ca6eab0e4c7729de97e9b89b1 lib/unicore/extracted/DDecompositionType.txt
+# ad83c59b257e9d480ffd3001d4ac240c5fed7cb1919453e1c4e8877035256bcd lib/unicore/extracted/DEastAsianWidth.txt
+# 4502f0969e4e6558c4b4c6ca4c23dad70b863d61dd3d5eed1a62a6c3c99fd570 lib/unicore/extracted/DGeneralCategory.txt
+# 00bb88b89e2adb646f3177f9444e2d3192386b81a5de9556104b338274b253e1 lib/unicore/extracted/DJoinGroup.txt
+# ac835b6e11a60c9820d3cf2d1cb0558dd68efb8f53f404a51632e4726690a6d7 lib/unicore/extracted/DJoinType.txt
+# baba9dfc133e3cb770a89aaf0973b1341fa61c2da6c176baf6428898b3b568d8 lib/unicore/extracted/DLineBreak.txt
+# 6d4a8c945dd7db83ed617cbb7d937de7f4ecf016ff22970d846e996a7c9a2a5d lib/unicore/extracted/DNumType.txt
+# 5b7c14380d5cceeaffcfbc18db1ed936391d2af2d51f5a41f1a17b692c77e59b lib/unicore/extracted/DNumValues.txt
+# ee0dd174fd5b158d82dfea95d7d822ca0bfcd490182669353dca3ab39a8ee807 lib/unicore/mktables
+# 50b85a67451145545a65cea370dab8d3444fbfe07e9c34cef560c5b7da9d3eef lib/unicore/version
 # 2680b9254eb236c5c090f11b149605043e8c8433661b96efc4a42fb4709342a5 regen/charset_translations.pl
-# 03e51b0f07beebd5da62ab943899aa4934eee1f792fa27c1fb638c33bf4ac6ea regen/mk_PL_charclass.pl
-# 61ea8132bb9ea5c637609e2d026b0b85ce17d6bec544c2f08ce411e6f65e8386 regen/mk_invlists.pl
+# 6bbad21de0848e0236b02f34f5fa0edd3cdae9ba8173cc9469a5513936b9e728 regen/mk_PL_charclass.pl
+# 7a7e778e903508b1c244a77bae57ec57606ab775bb5f81719dbb122eb66d4259 regen/mk_invlists.pl
 # ex: set ro:
index f1d8759..7468668 100644 (file)
@@ -87,7 +87,7 @@ We removed a false claim in L<perlunitut> that all text strings are Unicode stri
 
 =item *
 
-We updated the Github mirror link in L<perlrepository> to mirrors/perl, not github/perl
+We updated the GitHub mirror link in L<perlrepository> to mirrors/perl, not github/perl
 
 =item *
 
index a2a1484..69c62ee 100644 (file)
@@ -2665,7 +2665,7 @@ L<[perl #129149]|https://rt.perl.org/Public/Bug/Display.html?id=129149>
 
 Supplying a format's picture argument as part of the format argument list
 where the picture specifies modifying the argument could cause an
-access to the new freed compiled form.at.
+access to the new freed compiled format.
 L<[perl #129125]|https://rt.perl.org/Public/Bug/Display.html?id=129125>
 
 =item *
diff --git a/gnu/usr.bin/perl/pod/perl5283delta.pod b/gnu/usr.bin/perl/pod/perl5283delta.pod
new file mode 100644 (file)
index 0000000..cb9d9e0
--- /dev/null
@@ -0,0 +1,144 @@
+=encoding utf8
+
+=head1 NAME
+
+perl5283delta - what is new for perl v5.28.3
+
+=head1 DESCRIPTION
+
+This document describes differences between the 5.28.2 release and the 5.28.3
+release.
+
+If you are upgrading from an earlier release such as 5.28.1, first read
+L<perl5282delta>, which describes differences between 5.28.1 and 5.28.2.
+
+=head1 Security
+
+=head2 [CVE-2020-10543] Buffer overflow caused by a crafted regular expression
+
+A signed C<size_t> integer overflow in the storage space calculations for
+nested regular expression quantifiers could cause a heap buffer overflow in
+Perl's regular expression compiler that overwrites memory allocated after the
+regular expression storage space with attacker supplied data.
+
+The target system needs a sufficient amount of memory to allocate partial
+expansions of the nested quantifiers prior to the overflow occurring.  This
+requirement is unlikely to be met on 64-bit systems.
+
+Discovered by: ManhND of The Tarantula Team, VinCSS (a member of Vingroup).
+
+=head2 [CVE-2020-10878] Integer overflow via malformed bytecode produced by a crafted regular expression
+
+Integer overflows in the calculation of offsets between instructions for the
+regular expression engine could cause corruption of the intermediate language
+state of a compiled regular expression.  An attacker could abuse this behaviour
+to insert instructions into the compiled form of a Perl regular expression.
+
+Discovered by: Hugo van der Sanden and Slaven Rezic.
+
+=head2 [CVE-2020-12723] Buffer overflow caused by a crafted regular expression
+
+Recursive calls to C<S_study_chunk()> by Perl's regular expression compiler to
+optimize the intermediate language representation of a regular expression could
+cause corruption of the intermediate language state of a compiled regular
+expression.
+
+Discovered by: Sergey Aleynikov.
+
+=head2 Additional Note
+
+An application written in Perl would only be vulnerable to any of the above
+flaws if it evaluates regular expressions supplied by the attacker.  Evaluating
+regular expressions in this fashion is known to be dangerous since the regular
+expression engine does not protect against denial of service attacks in this
+usage scenario.
+
+=head1 Incompatible Changes
+
+There are no changes intentionally incompatible with Perl 5.28.2.  If any
+exist, they are bugs, and we request that you submit a report.  See
+L</Reporting Bugs> below.
+
+=head1 Modules and Pragmata
+
+=head2 Updated Modules and Pragmata
+
+=over 4
+
+=item *
+
+L<Module::CoreList> has been upgraded from version 5.20190419 to 5.20200601_28.
+
+=back
+
+=head1 Testing
+
+Tests were added and changed to reflect the other additions and changes in this
+release.
+
+=head1 Acknowledgements
+
+Perl 5.28.3 represents approximately 13 months of development since Perl 5.28.2
+and contains approximately 3,100 lines of changes across 48 files from 16
+authors.
+
+Excluding auto-generated files, documentation and release tools, there were
+approximately 1,700 lines of changes to 9 .pm, .t, .c and .h files.
+
+Perl continues to flourish into its fourth decade thanks to a vibrant community
+of users and developers.  The following people are known to have contributed
+the improvements that became Perl 5.28.3:
+
+Chris 'BinGOs' Williams, Dan Book, Hugo van der Sanden, James E Keenan, John
+Lightsey, Karen Etheridge, Karl Williamson, Matthew Horsfall, Max Maischein,
+Nicolas R., Renee Baecker, Sawyer X, Steve Hay, Tom Hukins, Tony Cook, Zak B.
+Elep.
+
+The list above is almost certainly incomplete as it is automatically generated
+from version control history.  In particular, it does not include the names of
+the (very much appreciated) contributors who reported issues to the Perl bug
+tracker.
+
+Many of the changes included in this version originated in the CPAN modules
+included in Perl's core.  We're grateful to the entire CPAN community for
+helping Perl to flourish.
+
+For a more complete list of all of Perl's historical contributors, please see
+the F<AUTHORS> file in the Perl source distribution.
+
+=head1 Reporting Bugs
+
+If you find what you think is a bug, you might check the perl bug database at
+L<https://github.com/Perl/perl5/issues>.  There may also be information at
+L<https://www.perl.org/>, the Perl Home Page.
+
+If you believe you have an unreported bug, please open an issue at
+L<https://github.com/Perl/perl5/issues>.  Be sure to trim your bug down to a
+tiny but sufficient test case.
+
+If the bug you are reporting has security implications which make it
+inappropriate to send to a public issue tracker, then see
+L<perlsec/SECURITY VULNERABILITY CONTACT INFORMATION> for details of how to
+report the issue.
+
+=head1 Give Thanks
+
+If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, you
+can do so by running the C<perlthanks> program:
+
+    perlthanks
+
+This will send an email to the Perl 5 Porters list with your show of thanks.
+
+=head1 SEE ALSO
+
+The F<Changes> file for an explanation of how to view exhaustive details on
+what changed.
+
+The F<INSTALL> file for how to build Perl.
+
+The F<README> file for general stuff.
+
+The F<Artistic> and F<Copying> files for copyright information.
+
+=cut
diff --git a/gnu/usr.bin/perl/pod/perl5303delta.pod b/gnu/usr.bin/perl/pod/perl5303delta.pod
new file mode 100644 (file)
index 0000000..5659792
--- /dev/null
@@ -0,0 +1,142 @@
+=encoding utf8
+
+=head1 NAME
+
+perl5303delta - what is new for perl v5.30.3
+
+=head1 DESCRIPTION
+
+This document describes differences between the 5.30.2 release and the 5.30.3
+release.
+
+If you are upgrading from an earlier release such as 5.30.1, first read
+L<perl5302delta>, which describes differences between 5.30.1 and 5.30.2.
+
+=head1 Security
+
+=head2 [CVE-2020-10543] Buffer overflow caused by a crafted regular expression
+
+A signed C<size_t> integer overflow in the storage space calculations for
+nested regular expression quantifiers could cause a heap buffer overflow in
+Perl's regular expression compiler that overwrites memory allocated after the
+regular expression storage space with attacker supplied data.
+
+The target system needs a sufficient amount of memory to allocate partial
+expansions of the nested quantifiers prior to the overflow occurring.  This
+requirement is unlikely to be met on 64-bit systems.
+
+Discovered by: ManhND of The Tarantula Team, VinCSS (a member of Vingroup).
+
+=head2 [CVE-2020-10878] Integer overflow via malformed bytecode produced by a crafted regular expression
+
+Integer overflows in the calculation of offsets between instructions for the
+regular expression engine could cause corruption of the intermediate language
+state of a compiled regular expression.  An attacker could abuse this behaviour
+to insert instructions into the compiled form of a Perl regular expression.
+
+Discovered by: Hugo van der Sanden and Slaven Rezic.
+
+=head2 [CVE-2020-12723] Buffer overflow caused by a crafted regular expression
+
+Recursive calls to C<S_study_chunk()> by Perl's regular expression compiler to
+optimize the intermediate language representation of a regular expression could
+cause corruption of the intermediate language state of a compiled regular
+expression.
+
+Discovered by: Sergey Aleynikov.
+
+=head2 Additional Note
+
+An application written in Perl would only be vulnerable to any of the above
+flaws if it evaluates regular expressions supplied by the attacker.  Evaluating
+regular expressions in this fashion is known to be dangerous since the regular
+expression engine does not protect against denial of service attacks in this
+usage scenario.
+
+=head1 Incompatible Changes
+
+There are no changes intentionally incompatible with Perl 5.30.2.  If any
+exist, they are bugs, and we request that you submit a report.  See
+L</Reporting Bugs> below.
+
+=head1 Modules and Pragmata
+
+=head2 Updated Modules and Pragmata
+
+=over 4
+
+=item *
+
+L<Module::CoreList> has been upgraded from version 5.20200314 to 5.20200601_30.
+
+=back
+
+=head1 Testing
+
+Tests were added and changed to reflect the other additions and changes in this
+release.
+
+=head1 Acknowledgements
+
+Perl 5.30.3 represents approximately 3 months of development since Perl 5.30.2
+and contains approximately 1,100 lines of changes across 42 files from 7
+authors.
+
+Excluding auto-generated files, documentation and release tools, there were
+approximately 350 lines of changes to 8 .pm, .t, .c and .h files.
+
+Perl continues to flourish into its fourth decade thanks to a vibrant community
+of users and developers.  The following people are known to have contributed
+the improvements that became Perl 5.30.3:
+
+Chris 'BinGOs' Williams, Hugo van der Sanden, John Lightsey, Karl Williamson,
+Nicolas R., Sawyer X, Steve Hay.
+
+The list above is almost certainly incomplete as it is automatically generated
+from version control history.  In particular, it does not include the names of
+the (very much appreciated) contributors who reported issues to the Perl bug
+tracker.
+
+Many of the changes included in this version originated in the CPAN modules
+included in Perl's core.  We're grateful to the entire CPAN community for
+helping Perl to flourish.
+
+For a more complete list of all of Perl's historical contributors, please see
+the F<AUTHORS> file in the Perl source distribution.
+
+=head1 Reporting Bugs
+
+If you find what you think is a bug, you might check the perl bug database at
+L<https://github.com/Perl/perl5/issues>.  There may also be information at
+L<https://www.perl.org/>, the Perl Home Page.
+
+If you believe you have an unreported bug, please open an issue at
+L<https://github.com/Perl/perl5/issues>.  Be sure to trim your bug down to a
+tiny but sufficient test case.
+
+If the bug you are reporting has security implications which make it
+inappropriate to send to a public issue tracker, then see
+L<perlsec/SECURITY VULNERABILITY CONTACT INFORMATION> for details of how to
+report the issue.
+
+=head1 Give Thanks
+
+If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, you
+can do so by running the C<perlthanks> program:
+
+    perlthanks
+
+This will send an email to the Perl 5 Porters list with your show of thanks.
+
+=head1 SEE ALSO
+
+The F<Changes> file for an explanation of how to view exhaustive details on
+what changed.
+
+The F<INSTALL> file for how to build Perl.
+
+The F<README> file for general stuff.
+
+The F<Artistic> and F<Copying> files for copyright information.
+
+=cut
diff --git a/gnu/usr.bin/perl/pod/perl5320delta.pod b/gnu/usr.bin/perl/pod/perl5320delta.pod
new file mode 100644 (file)
index 0000000..7861d7e
--- /dev/null
@@ -0,0 +1,1919 @@
+=pod
+
+=encoding utf8
+
+=head1 NAME
+
+perl5320delta - what is new for perl v5.32.0
+
+=head1 DESCRIPTION
+
+This document describes differences between the 5.30.0 release and the 5.32.0
+release.
+
+If you are upgrading from an earlier release such as 5.28.0, first read
+L<perl5300delta>, which describes differences between 5.28.0 and 5.30.0.
+
+=head1 Core Enhancements
+
+=head2 The isa Operator
+
+A new experimental infix operator called C<isa> tests whether a given object
+is an instance of a given class or a class derived from it:
+
+    if( $obj isa Package::Name ) { ... }
+
+For more detail see L<perlop/Class Instance Operator>.
+
+=head2 Unicode 13.0 is supported
+
+See L<https://www.unicode.org/versions/Unicode13.0.0/> for details.
+
+=head2 Chained comparisons capability
+
+Some comparison operators, as their associativity, I<chain> with some
+operators of the same precedence (but never with operators of different
+precedence).
+
+    if ( $x < $y <= $z ) {...}
+
+behaves exactly like:
+
+    if ( $x < $y && $y <= $z ) {...}
+
+(assuming that C<"$y"> is as simple a scalar as it looks.)
+
+You can read more about this in L<perlop> under
+L<perlop/Operator Precedence and Associativity>.
+
+=head2 New Unicode properties C<Identifier_Status> and C<Identifier_Type> supported
+
+Unicode has revised its regular expression requirements:
+L<https://www.unicode.org/reports/tr18/tr18-21.html>.
+As part of that they are wanting more properties to be exposed, ones
+that aren't part of the strict UCD (Unicode character database). These
+two are used for examining inputs for security purposes. Details on
+their usage is at L<https://www.unicode.org/reports/tr39/>.
+
+=head2 It is now possible to write C<qr/\p{Name=...}/>, or
+C<qr!\p{na=/(SMILING|GRINNING) FACE/}!>
+
+The Unicode Name property is now accessible in regular expression
+patterns, as an alternative to C<\N{...}>.
+A comparison of the two methods is given in
+L<perlunicode/Comparison of \N{...} and \p{name=...}>.
+
+The second example above shows that wildcard subpatterns are also usable
+in this property. See L<perlunicode/Wildcards in Property Values>.
+
+=head2 Improvement of C<POSIX::mblen()>, C<mbtowc>, and C<wctomb>
+
+The C<POSIX::mblen()>, C<mbtowc>, and C<wctomb> functions now
+work on shift state locales and are thread-safe on C99 and above
+compilers when executed on a platform that has locale thread-safety; the
+length parameters are now optional.
+
+These functions are always executed under the current C language locale.
+(See L<perllocale>.)  Most locales are stateless, but a few, notably the
+very rarely encountered ISO 2022, maintain a state between calls to
+these functions. Previously the state was cleared on every call, but
+now the state is not reset unless the appropriate parameter is C<undef>.
+
+On threaded perls, the C99 functions L<mbrlen(3)>, L<mbrtowc(3)>, and
+L<wcrtomb(3)>, when available, are substituted for the plain functions.
+This makes these functions thread-safe when executing on a locale
+thread-safe platform.
+
+The string length parameters in C<mblen> and C<mbtowc> are now optional;
+useful only if you wish to restrict the length parsed in the source
+string to less than the actual length.
+
+=head2 Alpha assertions are no longer experimental
+
+See L<perlre/(*pla:pattern)>, L<perlre/(*plb:pattern)>,
+L<perlre/(*nla:pattern)>>, and L<perlre/(*nlb:pattern)>.
+Use of these no longer generates a warning; existing code that disables
+the warning category C<experimental::alpha_assertions> will continue to work
+without any changes needed. Enabling the category has no effect.
+
+=head2 Script runs are no longer experimental
+
+See L<perlre/Script Runs>. Use of these no longer generates a warning;
+existing code that disables the warning category
+C<experimental::script_run> will continue to work without any
+changes needed. Enabling the category has no effect.
+
+=head2 Feature checks are now faster
+
+Previously feature checks in the parser required a hash lookup when
+features were set outside of a feature bundle, this has been optimized
+to a bit mask check. [L<GH #17229|https://github.com/Perl/perl5/issues/17229>]
+
+=head2 Perl is now developed on GitHub
+
+Perl is now developed on GitHub. You can find us at
+L<https://github.com/Perl/perl5>.
+
+Non-security bugs should now be reported via GitHub. Security issues should
+continue to be reported as documented in L<perlsec>.
+
+=head2 Compiled patterns can now be dumped before optimization
+
+This is primarily useful for tracking down bugs in the regular
+expression compiler. This dump happens on C<-DDEBUGGING> perls, if you
+specify C<-Drv> on the command line; or on any perl if the pattern is
+compiled within the scope of S<C<use re qw(Debug DUMP_PRE_OPTIMIZE)>> or
+S<C<use re qw(Debug COMPILE EXTRA)>>. (All but the second case display
+other information as well.)
+
+=head1 Security
+
+=head2 [CVE-2020-10543] Buffer overflow caused by a crafted regular expression
+
+A signed C<size_t> integer overflow in the storage space calculations for
+nested regular expression quantifiers could cause a heap buffer overflow in
+Perl's regular expression compiler that overwrites memory allocated after the
+regular expression storage space with attacker supplied data.
+
+The target system needs a sufficient amount of memory to allocate partial
+expansions of the nested quantifiers prior to the overflow occurring.  This
+requirement is unlikely to be met on 64-bit systems.
+
+Discovered by: ManhND of The Tarantula Team, VinCSS (a member of Vingroup).
+
+=head2 [CVE-2020-10878] Integer overflow via malformed bytecode produced by a crafted regular expression
+
+Integer overflows in the calculation of offsets between instructions for the
+regular expression engine could cause corruption of the intermediate language
+state of a compiled regular expression.  An attacker could abuse this behaviour
+to insert instructions into the compiled form of a Perl regular expression.
+
+Discovered by: Hugo van der Sanden and Slaven Rezic.
+
+=head2 [CVE-2020-12723] Buffer overflow caused by a crafted regular expression
+
+Recursive calls to C<S_study_chunk()> by Perl's regular expression compiler to
+optimize the intermediate language representation of a regular expression could
+cause corruption of the intermediate language state of a compiled regular
+expression.
+
+Discovered by: Sergey Aleynikov.
+
+=head2 Additional Note
+
+An application written in Perl would only be vulnerable to any of the above
+flaws if it evaluates regular expressions supplied by the attacker.  Evaluating
+regular expressions in this fashion is known to be dangerous since the regular
+expression engine does not protect against denial of service attacks in this
+usage scenario.
+
+=head1 Incompatible Changes
+
+=head2 Certain pattern matching features are now prohibited in compiling
+Unicode property value wildcard subpatterns
+
+These few features are either inappropriate or interfere with the
+algorithm used to accomplish this task. The complete list is in
+L<perlunicode/Wildcards in Property Values>.
+
+=head2 Unused functions C<POSIX::mbstowcs> and C<POSIX::wcstombs> are removed
+
+These functions could never have worked due to a defective interface
+specification. There is clearly no demand for them, given that no one
+has ever complained in the many years the functions were claimed to be
+available, hence so-called "support" for them is now dropped.
+
+=head2 A bug fix for C<(?[...])> may have caused some patterns to no
+longer compile
+
+See L</Selected Bug Fixes>. The heuristics previously used may have let
+some constructs compile (perhaps not with the programmer's intended
+effect) that should have been errors. None are known, but it is
+possible that some erroneous constructs no longer compile.
+
+=head2 C<\p{I<user-defined>}> properties now always override official
+Unicode ones
+
+Previously, if and only if a user-defined property was declared prior to
+the compilation of the regular expression pattern that contains it, its
+definition was used instead of any official Unicode property with the
+same name. Now, it always overrides the official property. This
+change could break existing code that relied (likely unwittingly) on the
+previous behavior. Without this fix, if Unicode released a new version
+with a new property that happens to have the same name as the one you
+had long been using, your program would break when you upgraded to a
+perl that used that new Unicode version. See L<perlunicode/User-Defined
+Character Properties>. [L<GH #17205|https://github.com/Perl/perl5/issues/17205>]
+
+=head2 Modifiable variables are no longer permitted in constants
+
+Code like:
+
+    my $var;
+    $sub = sub () { $var };
+
+where C<$var> is referenced elsewhere in some sort of modifiable context now
+produces an exception when the sub is defined.
+
+This error can be avoided by adding a return to the sub definition:
+
+    $sub = sub () { return $var };
+
+This has been deprecated since Perl 5.22.
+[L<perl #134138|https://rt.perl.org/Ticket/Display.html?id=134138>]
+
+=head2 Use of L<C<vec>|perlfunc/vec EXPR,OFFSET,BITS> on strings with code points above 0xFF is forbidden
+
+Such strings are represented internally in UTF-8, and C<vec> is a
+bit-oriented operation that will likely give unexpected results on those
+strings. This was deprecated in perl 5.28.0.
+
+=head2 Use of code points over 0xFF in string bitwise operators
+
+Some uses of these were already illegal after a previous deprecation
+cycle. The remaining uses are now prohibited, having been deprecated in perl
+5.28.0. See L<perldeprecation>.
+
+=head2 C<Sys::Hostname::hostname()> does not accept arguments
+
+This usage was deprecated in perl 5.28.0 and is now fatal.
+
+=head2 Plain "0" string now treated as a number for range operator
+
+Previously a range C<"0" .. "-1"> would produce a range of numeric
+strings from "0" through "99"; this now produces an empty list, just
+as C<0 .. -1> does. This also means that C<"0" .. "9"> now produces a
+list of integers, where previously it would produce a list of strings.
+
+This was due to a special case that treated strings starting with "0"
+as strings so ranges like C<"00" .. "03"> produced C<"00", "01", "02", "03">,
+but didn't specially handle the string C<"0">.
+[L<perl #133695|https://rt.perl.org/Ticket/Display.html?id=133695>]
+
+=head2 C<\K> now disallowed in look-ahead and look-behind assertions
+
+This was disallowed because it causes unexpected behaviour, and no-one
+could define what the desired behaviour should be.
+[L<perl #124256|https://rt.perl.org/Ticket/Display.html?id=124256>]
+
+=head1 Performance Enhancements
+
+=over 4
+
+=item *
+
+C<my_strnlen> has been sped up for systems that don't have their own
+C<strnlen> implementation.
+
+=item *
+
+C<grok_bin_oct_hex> (and so, C<grok_bin>, C<grok_oct>, and C<grok_hex>)
+have been sped up.
+
+=item *
+
+C<grok_number_flags> has been sped up.
+
+=item *
+
+C<sort> is now noticeably faster in cases such as C<< sort {$a <=> $b} >> or
+C<< sort {$b <=> $a} >>. [L<GH #17608|https://github.com/Perl/perl5/pull/17608>]
+
+=back
+
+=head1 Modules and Pragmata
+
+=head2 Updated Modules and Pragmata
+
+=over 4
+
+=item *
+
+L<Archive::Tar> has been upgraded from version 2.32 to 2.36.
+
+=item *
+
+L<autodie> has been upgraded from version 2.29 to 2.32.
+
+=item *
+
+L<B> has been upgraded from version 1.76 to 1.80.
+
+=item *
+
+L<B::Deparse> has been upgraded from version 1.49 to 1.54.
+
+=item *
+
+L<Benchmark> has been upgraded from version 1.22 to 1.23.
+
+=item *
+
+L<charnames> has been upgraded from version 1.45 to 1.48.
+
+=item *
+
+L<Class::Struct> has been upgraded from version 0.65 to 0.66.
+
+=item *
+
+L<Compress::Raw::Bzip2> has been upgraded from version 2.084 to 2.093.
+
+=item *
+
+L<Compress::Raw::Zlib> has been upgraded from version 2.084 to 2.093.
+
+=item *
+
+L<CPAN> has been upgraded from version 2.22 to 2.27.
+
+=item *
+
+L<DB_File> has been upgraded from version 1.843 to 1.853.
+
+=item *
+
+L<Devel::PPPort> has been upgraded from version 3.52 to 3.57.
+
+The test files generated on Win32 are now identical to when they are
+generated on POSIX-like systems.
+
+=item *
+
+L<diagnostics> has been upgraded from version 1.36 to 1.37.
+
+=item *
+
+L<Digest::MD5> has been upgraded from version 2.55 to 2.55_01.
+
+=item *
+
+L<Dumpvalue> has been upgraded from version 1.18 to 1.21.
+
+Previously, when dumping elements of an array and encountering an undefined
+value, the string printed would have been C<empty array>. This has been
+changed to what was apparently originally intended:  C<empty slot>.
+
+=item *
+
+L<DynaLoader> has been upgraded from version 1.45 to 1.47.
+
+=item *
+
+L<Encode> has been upgraded from version 3.01 to 3.06.
+
+=item *
+
+L<encoding> has been upgraded from version 2.22 to 3.00.
+
+=item *
+
+L<English> has been upgraded from version 1.10 to 1.11.
+
+=item *
+
+L<Exporter> has been upgraded from version 5.73 to 5.74.
+
+=item *
+
+L<ExtUtils::CBuilder> has been upgraded from version 0.280231 to 0.280234.
+
+=item *
+
+L<ExtUtils::MakeMaker> has been upgraded from version 7.34 to 7.44.
+
+=item *
+
+L<feature> has been upgraded from version 1.54 to 1.58.
+
+A new C<indirect> feature has been added, which is enabled by default
+but allows turning off L<indirect object syntax|perlobj/Indirect
+Object Syntax>.
+
+=item *
+
+L<File::Find> has been upgraded from version 1.36 to 1.37.
+
+On Win32, the tests no longer require either a file in the drive root
+directory, or a writable root directory.
+
+=item *
+
+L<File::Glob> has been upgraded from version 1.32 to 1.33.
+
+=item *
+
+L<File::stat> has been upgraded from version 1.08 to 1.09.
+
+=item *
+
+L<Filter::Simple> has been upgraded from version 0.95 to 0.96.
+
+=item *
+
+L<Getopt::Long> has been upgraded from version 2.5 to 2.51.
+
+=item *
+
+L<Hash::Util> has been upgraded from version 0.22 to 0.23.
+
+The Synopsis has been updated as the example code stopped working with
+newer perls.
+[L<GH #17399|https://github.com/Perl/perl5/issues/17399>]
+
+=item *
+
+L<I18N::Langinfo> has been upgraded from version 0.18 to 0.19.
+
+=item *
+
+L<I18N::LangTags> has been upgraded from version 0.43 to 0.44.
+
+Document the C<IGNORE_WIN32_LOCALE> environment variable.
+
+=item *
+
+L<IO> has been upgraded from version 1.40 to 1.43.
+
+L<IO::Socket> no longer caches a zero protocol value, since this
+indicates that the implementation will select a protocol. This means
+that on platforms that don't implement C<SO_PROTOCOL> for a given
+socket type the protocol method may return C<undef>.
+
+The supplied I<TO> is now always honoured on calls to the C<send()>
+method. [L<perl #133936|https://rt.perl.org/Ticket/Display.html?id=133936>]
+
+=item *
+
+IO-Compress has been upgraded from version 2.084 to 2.093.
+
+=item *
+
+L<IPC::Cmd> has been upgraded from version 1.02 to 1.04.
+
+=item *
+
+L<IPC::Open3> has been upgraded from version 1.20 to 1.21.
+
+=item *
+
+L<JSON::PP> has been upgraded from version 4.02 to 4.04.
+
+=item *
+
+L<Math::BigInt> has been upgraded from version 1.999816 to 1.999818.
+
+=item *
+
+L<Math::BigInt::FastCalc> has been upgraded from version 0.5008 to 0.5009.
+
+=item *
+
+L<Module::CoreList> has been upgraded from version 5.20190522 to 5.20200620.
+
+=item *
+
+L<Module::Load::Conditional> has been upgraded from version 0.68 to 0.70.
+
+=item *
+
+L<Module::Metadata> has been upgraded from version 1.000036 to 1.000037.
+
+=item *
+
+L<mro> has been upgraded from version 1.22 to 1.23.
+
+=item *
+
+L<Net::Ping> has been upgraded from version 2.71 to 2.72.
+
+=item *
+
+L<Opcode> has been upgraded from version 1.43 to 1.47.
+
+=item *
+
+L<open> has been upgraded from version 1.11 to 1.12.
+
+=item *
+
+L<overload> has been upgraded from version 1.30 to 1.31.
+
+=item *
+
+L<parent> has been upgraded from version 0.237 to 0.238.
+
+=item *
+
+L<perlfaq> has been upgraded from version 5.20190126 to 5.20200523.
+
+=item *
+
+L<PerlIO> has been upgraded from version 1.10 to 1.11.
+
+=item *
+
+L<PerlIO::encoding> has been upgraded from version 0.27 to 0.28.
+
+=item *
+
+L<PerlIO::via> has been upgraded from version 0.17 to 0.18.
+
+=item *
+
+L<Pod::Html> has been upgraded from version 1.24 to 1.25.
+
+=item *
+
+L<Pod::Simple> has been upgraded from version 3.35 to 3.40.
+
+=item *
+
+L<podlators> has been upgraded from version 4.11 to 4.14.
+
+=item *
+
+L<POSIX> has been upgraded from version 1.88 to 1.94.
+
+=item *
+
+L<re> has been upgraded from version 0.37 to 0.40.
+
+=item *
+
+L<Safe> has been upgraded from version 2.40 to 2.41.
+
+=item *
+
+L<Scalar::Util> has been upgraded from version 1.50 to 1.55.
+
+=item *
+
+L<SelfLoader> has been upgraded from version 1.25 to 1.26.
+
+=item *
+
+L<Socket> has been upgraded from version 2.027 to 2.029.
+
+=item *
+
+L<Storable> has been upgraded from version 3.15 to 3.21.
+
+Use of C<note()> from L<Test::More> is now optional in tests. This works
+around a circular dependency with L<Test::More> when installing on very
+old perls from CPAN.
+
+Vstring magic strings over 2GB are now disallowed.
+
+Regular expressions objects weren't properly counted for object id
+purposes on retrieve. This would corrupt the resulting structure, or
+cause a runtime error in some cases. [L<perl #134179|https://rt.perl.org/Ticket/Display.html?id=134179>]
+
+=item *
+
+L<Sys::Hostname> has been upgraded from version 1.22 to 1.23.
+
+=item *
+
+L<Sys::Syslog> has been upgraded from version 0.35 to 0.36.
+
+=item *
+
+L<Term::ANSIColor> has been upgraded from version 4.06 to 5.01.
+
+=item *
+
+L<Test::Simple> has been upgraded from version 1.302162 to 1.302175.
+
+=item *
+
+L<Thread> has been upgraded from version 3.04 to 3.05.
+
+=item *
+
+L<Thread::Queue> has been upgraded from version 3.13 to 3.14.
+
+=item *
+
+L<threads> has been upgraded from version 2.22 to 2.25.
+
+=item *
+
+L<threads::shared> has been upgraded from version 1.60 to 1.61.
+
+=item *
+
+L<Tie::File> has been upgraded from version 1.02 to 1.06.
+
+=item *
+
+L<Tie::Hash::NamedCapture> has been upgraded from version 0.10 to 0.13.
+
+=item *
+
+L<Tie::Scalar> has been upgraded from version 1.04 to 1.05.
+
+=item *
+
+L<Tie::StdHandle> has been upgraded from version 4.5 to 4.6.
+
+=item *
+
+L<Time::HiRes> has been upgraded from version 1.9760 to 1.9764.
+
+Removed obsolete code such as support for pre-5.6 perl and classic
+MacOS. [L<perl #134288|https://rt.perl.org/Ticket/Display.html?id=134288>]
+
+=item *
+
+L<Time::Piece> has been upgraded from version 1.33 to 1.3401.
+
+=item *
+
+L<Unicode::Normalize> has been upgraded from version 1.26 to 1.27.
+
+=item *
+
+L<Unicode::UCD> has been upgraded from version 0.72 to 0.75.
+
+=item *
+
+L<VMS::Stdio> has been upgraded from version 2.44 to 2.45.
+
+=item *
+
+L<warnings> has been upgraded from version 1.44 to 1.47.
+
+=item *
+
+L<Win32> has been upgraded from version 0.52 to 0.53.
+
+=item *
+
+L<Win32API::File> has been upgraded from version 0.1203 to 0.1203_01.
+
+=item *
+
+L<XS::APItest> has been upgraded from version 1.00 to 1.09.
+
+=back
+
+=head2 Removed Modules and Pragmata
+
+=over 4
+
+=item *
+
+Pod::Parser has been removed from the core distribution.
+It still is available for download from CPAN. This resolves [L<perl
+#119439|https://rt.perl.org/Ticket/Display.html?id=119439>].
+
+=back
+
+=head1 Documentation
+
+=head2 Changes to Existing Documentation
+
+We have attempted to update the documentation to reflect the changes
+listed in this document. If you find any we have missed, open an issue
+at L<https://github.com/Perl/perl5/issues>.
+
+Additionally, the following selected changes have been made:
+
+=head3 L<perldebguts>
+
+=over 4
+
+=item *
+
+Simplify a few regnode definitions
+
+Update C<BOUND> and C<NBOUND> definitions.
+
+=item *
+
+Add ANYOFHs regnode
+
+This node is like C<ANYOFHb>, but is used when more than one leading byte
+is the same in all the matched code points.
+
+C<ANYOFHb> is used to avoid having to convert from UTF-8 to code point for
+something that won't match. It checks that the first byte in the UTF-8
+encoded target is the desired one, thus ruling out most of the possible
+code points.
+
+=back
+
+=head3 L<perlapi>
+
+=over 4
+
+=item *
+
+C<sv_2pvbyte> updated to mention it will croak if the SV cannot be
+downgraded.
+
+=item *
+
+C<sv_setpvn> updated to mention that the UTF-8 flag will not be changed by
+this function, and a terminating NUL byte is guaranteed.
+
+=item *
+
+Documentation for C<PL_phase> has been added.
+
+=item *
+
+The documentation for C<grok_bin>, C<grok_oct>, and C<grok_hex> has been
+updated and clarified.
+
+=back
+
+=head3 L<perldiag>
+
+=over 4
+
+=item *
+
+Add documentation for experimental 'isa' operator
+
+(S experimental::isa) This warning is emitted if you use the (C<isa>)
+operator. This operator is currently experimental and its behaviour may
+change in future releases of Perl.
+
+=back
+
+=head3 L<perlfunc>
+
+=over 4
+
+=item C<caller>
+
+Like L<C<__FILE__>|/__FILE__> and L<C<__LINE__>|/__LINE__>, the filename and
+line number returned here may be altered by the mechanism described at
+L<perlsyn/"Plain Old Comments (Not!)">.
+
+=item C<__FILE__>
+
+It can be altered by the mechanism described at
+L<perlsyn/"Plain Old Comments (Not!)">.
+
+=item C<__LINE__>
+
+It can be altered by the mechanism described at
+L<perlsyn/"Plain Old Comments (Not!)">.
+
+=item C<return>
+
+Now mentions that you cannot return from C<do BLOCK>.
+
+=item C<open>
+
+The C<open()> section had been renovated significantly.
+
+=back
+
+=head3 L<perlguts>
+
+=over 4
+
+=item *
+
+No longer suggesting using perl's C<malloc>. Modern system C<malloc> is
+assumed to be much better than perl's implementation now.
+
+=item *
+
+Documentation about F<embed.fnc> flags has been removed. F<embed.fnc> now has
+sufficient comments within it. Anyone changing that file will see those
+comments first, so entries here are now redundant.
+
+=item *
+
+Updated documentation for C<UTF8f>
+
+=item *
+
+Added missing C<=for apidoc> lines
+
+=back
+
+=head3 L<perlhacktips>
+
+=over 4
+
+=item *
+
+The differences between Perl strings and C strings are now detailed.
+
+=back
+
+=head3 L<perlintro>
+
+=over 4
+
+=item *
+
+The documentation for the repetition operator C<x> have been clarified.
+[L<GH #17335|https://github.com/Perl/perl5/issues/17335>]
+
+=back
+
+=head3 L<perlipc>
+
+=over 4
+
+=item *
+
+The documentation surrounding C<open> and handle usage has been modernized
+to prefer 3-arg open and lexical variables instead of barewords.
+
+=item *
+
+Various updates and fixes including making all examples strict-safe and
+replacing C<-w> with C<use warnings>.
+
+=back
+
+=head3 L<perlop>
+
+=over 4
+
+=item *
+
+'isa' operator is experimental
+
+This is an experimental feature and is available when enabled
+by C<use feature 'isa'>. It emits a warning in the C<experimental::isa>
+category.
+
+=back
+
+=head3 L<perlpod>
+
+=over 4
+
+=item *
+
+Details of the various stacks within the perl interpreter are now explained
+here.
+
+=item *
+
+Advice has been added regarding the usage of C<< ZE<lt>E<gt> >>.
+
+=back
+
+=head3 L<perlport>
+
+=over 4
+
+=item *
+
+Update C<timegm> example to use the correct year format I<1970> instead of I<70>.
+[L<GH #16431|https://github.com/Perl/perl5/issues/16431>]
+
+=back
+
+=head3 L<perlreref>
+
+=over 4
+
+=item *
+
+Fix some typos.
+
+=back
+
+=head3 L<perlvar>
+
+=over 4
+
+=item *
+
+Now recommends stringifying C<$]> and comparing it numerically.
+
+=back
+
+=head3 L<perlapi>, L<perlintern>
+
+=over 4
+
+=item *
+
+Documentation has been added for several functions that were
+lacking it before.
+
+=back
+
+=head3 L<perlxs>
+
+=over 4
+
+=item *
+
+Suggest using C<libffi> for simple library bindings via CPAN modules
+like L<FFI::Platypus> or L<FFI::Raw>.
+
+=back
+
+=head3 L<POSIX>
+
+=over 4
+
+=item *
+
+C<setlocale> warning about threaded builds updated to note it does not
+apply on Perl 5.28.X and later.
+
+=item *
+
+C<< Posix::SigSet->new(...) >> updated to state it throws an error if any of
+the supplied signals cannot be added to the set.
+
+=back
+
+Additionally, the following selected changes have been made:
+
+=head3 Updating of links
+
+=over 4
+
+=item *
+
+Links to the now defunct L<https://search.cpan.org> site now point at
+the equivalent L<https://metacpan.org> URL. [L<GH #17393|https://github.com/Perl/perl5/issues/17393>]
+
+=item *
+
+The man page for L<ExtUtils::XSSymSet> is now only installed on VMS,
+which is the only platform the module is installed on. [L<GH #17424|https://github.com/Perl/perl5/issues/17424>]
+
+=item *
+
+URLs have been changed to C<https://> and stale links have been updated.
+
+Where applicable, the URLs in the documentation have been moved from using the
+C<http://> protocol to C<https://>. This also affects the location of the bug
+tracker at L<https://rt.perl.org>.
+
+=item *
+
+Some links to OS/2 libraries, Address Sanitizer and other system tools had gone
+stale. These have been updated with working links.
+
+=item *
+
+Some links to old email addresses on perl5-porters had gone stale. These have been
+updated with working links.
+
+=back
+
+=head1 Diagnostics
+
+The following additions or changes have been made to diagnostic output,
+including warnings and fatal error messages. For the complete list of
+diagnostic messages, see L<perldiag>.
+
+=head2 New Diagnostics
+
+=head3 New Errors
+
+=over 4
+
+=item *
+
+L<Expecting interpolated extended charclass in regex; marked by <-- HERE in mE<sol>%sE<sol>
+|perldiag/"Expecting interpolated extended charclass in regex; marked by <-- HERE in mE<sol>%sE<sol>">
+
+This is a replacement for several error messages listed under
+L</Changes to Existing Diagnostics>.
+
+=item *
+
+C<L<No digits found for %s literal|perldiag/"No digits found for %s literal">>
+
+(F) No hexadecimal digits were found following C<0x> or no binary digits were
+found following C<0b>.
+
+=back
+
+=head3 New Warnings
+
+=over 4
+
+=item *
+
+L<Code point 0x%X is not Unicode, and not portable|perldiag/"Code point 0x%X is not Unicode, and not portable">
+
+This is actually not a new message, but it is now output when the
+warnings category C<portable> is enabled.
+
+When raised during regular expression pattern compilation, the warning
+has extra text added at the end marking where precisely in the pattern
+it occurred.
+
+=item *
+
+L<Non-hex character '%c' terminates \x early.  Resolved as "%s"|perldiag/"Non-hex character '%c' terminates \x early.  Resolved as "%s"">
+
+This replaces a warning that was much less specific, and which gave
+false information. This new warning parallels the similar
+already-existing one raised for C<\o{}>.
+
+=back
+
+=head2 Changes to Existing Diagnostics
+
+=over 4
+
+=item *
+
+L<Character following "\c" must be printable ASCII|perldiag/"Character following "\c" must be printable ASCII">
+
+...now has extra text added at the end, when raised during regular
+expression pattern compilation, marking where precisely in the pattern
+it occurred.
+
+=item *
+
+L<Use "%s" instead of "%s"|perldiag/"Use "%s" instead of "%s"">
+
+...now has extra text added at the end, when raised during regular
+expression pattern compilation, marking where precisely in the pattern
+it occurred.
+
+=item *
+
+L<Sequence "\c{" invalid|perldiag/"Sequence "\c{" invalid">
+
+...now has extra text added at the end, when raised during regular
+expression pattern compilation, marking where precisely in the pattern
+it occurred.
+
+=item *
+
+L<"\c%c" is more clearly written simply as "%s"|perldiag/""\c%c" is more clearly written simply as "%s"">
+
+...now has extra text added at the end, when raised during regular
+expression pattern compilation, marking where precisely in the pattern
+it occurred.
+
+=item *
+
+L<Non-octal character '%c' terminates \o early.  Resolved as "%s"|perldiag/"Non-octal character '%c' terminates \o early.  Resolved as "%s"">
+
+...now includes the phrase "terminates \o early", and has extra text added
+at the end, when raised during regular expression pattern compilation,
+marking where precisely in the pattern it occurred. In some instances
+the text of the resolution has been clarified.
+
+=item *
+
+L<'%s' resolved to '\o{%s}%d'|perldiag/'%s' resolved to '\o{%s}%d'>
+
+As of Perl 5.32, this message is no longer generated. Instead,
+L<perldiag/Non-octal character '%c' terminates \o early.  Resolved as "%s">
+is used instead.
+
+=item *
+
+L<Use of code point 0x%s is not allowed; the permissible max is 0x%X|perldiag/"Use of code point 0x%s is not allowed; the permissible max is 0x%X">
+
+Some instances of this message previously output the hex digits C<A>,
+C<B>, C<C>, C<D>, C<E>, and C<F> in lower case. Now they are all
+consistently upper case.
+
+=item *
+
+The following three diagnostics have been removed, and replaced by
+L<C<Expecting interpolated extended charclass in regex; marked by <-- HERE in mE<sol>%sE<sol>>
+|perldiag/"Expecting interpolated extended charclass in regex; marked by <-- HERE in mE<sol>%sE<sol>">:
+C<Expecting close paren for nested extended charclass in regex; marked
+by <-- HERE in mE<sol>%sE<sol>>,
+C<Expecting close paren for wrapper for nested extended charclass in
+regex; marked by <-- HERE in mE<sol>%sE<sol>>,
+and
+C<Expecting '(?flags:(?[...' in regex; marked by S<<-- HERE> in mE<sol>%sE<sol>>.
+
+=item *
+
+The C<Code point 0x%X is not Unicode, and not portable> warning removed
+the line C<Code points above 0xFFFF_FFFF require larger than a 32 bit word.>
+as code points that large are no longer legal on 32-bit platforms.
+
+=item *
+
+L<Can't use global %s in %s|perldiag/"Can't use global %s in %s">
+
+This error message has been slightly reformatted from the original C<Can't use
+global %s in "%s">, and in particular misleading error messages like C<Can't
+use global $_ in "my"> are now rendered as C<Can't use global $_ in subroutine
+signature>.
+
+=item *
+
+L<Constants from lexical variables potentially modified elsewhere are no longer permitted|perldiag/"Constants from lexical variables potentially modified elsewhere are no longer permitted">
+
+This error message replaces the former C<Constants from lexical variables
+potentially modified elsewhere are deprecated. This will not be allowed in Perl
+5.32> to reflect the fact that this previously deprecated usage has now been
+transformed into an exception. The message's classification has also been
+updated from D (deprecated) to F (fatal).
+
+See also L</Incompatible Changes>.
+
+=item *
+
+C<\N{} here is restricted to one character> is now emitted in the same
+circumstances where previously C<\N{} in inverted character class or as a range
+end-point is restricted to one character> was.
+
+This is due to new circumstances having been added in Perl 5.30 that weren't
+covered by the earlier wording.
+
+=back
+
+=head1 Utility Changes
+
+=head2 L<perlbug>
+
+=over 4
+
+=item * The bug tracker homepage URL now points to GitHub.
+
+=back
+
+=head2 L<streamzip>
+
+=over 4
+
+=item *
+
+This is a new utility, included as part of an
+L<IO::Compress::Base> upgrade.
+
+L<streamzip> creates a zip file from stdin. The program will read data
+from stdin, compress it into a zip container and, by default, write a
+streamed zip file to stdout.
+
+=back
+
+=head1 Configuration and Compilation
+
+=head2 F<Configure>
+
+=over 4
+
+=item *
+
+For clang++, add C<< #include <stdlib.h> >> to Configure's probes for
+C<futimes>, C<strtoll>, C<strtoul>, C<strtoull>, C<strtouq>, otherwise the
+probes would fail to compile.
+
+=item *
+
+Use a compile and run test for C<lchown> to satisfy clang++ which should
+more reliably detect it.
+
+=item *
+
+For C++ compilers, add C<< #include <stdio.h> >> to Configure's probes for
+C<getpgrp> and C<setpgrp> as they use printf and C++ compilers may fail
+compilation instead of just warning.
+
+=item *
+
+Check if the compiler can handle inline attribute.
+
+=item *
+
+Check for character data alignment.
+
+=item *
+
+F<Configure> now correctly handles gcc-10. Previously it was interpreting it
+as gcc-1 and turned on C<-fpcc-struct-return>.
+
+=item *
+
+Perl now no longer probes for C<d_u32align>, defaulting to C<define> on all
+platforms. This check was error-prone when it was done, which was on 32-bit
+platforms only.
+[L<perl #133495|https://rt.perl.org/Ticket/Display.html?id=133495>]
+
+=item *
+
+Documentation and hints for building perl on Z/OS (native EBCDIC) have been
+updated. This is still a work in progress.
+
+=item *
+
+A new probe for C<malloc_usable_size> has been added.
+
+=item *
+
+Improvements in F<Configure> to detection in C++ and clang++. Work ongoing by
+Andy Dougherty. [L<perl #134171|https://rt.perl.org/Ticket/Display.html?id=134171>]
+
+=item *
+
+F<autodoc.pl>
+
+This tool that regenerates L<perlintern> and L<perlapi> has been overhauled
+significantly, restoring consistency in flags used in F<embed.fnc> and
+L<Devel::PPPort> and allowing removal of many redundant C<=for apidoc>
+entries in code.
+
+=item *
+
+The C<ECHO> macro is now defined. This is used in a C<dtrace> rule that was
+originally changed for FreeBSD, and the FreeBSD make apparently predefines it.
+The Solaris make does not predefine C<ECHO> which broke this rule on Solaris.
+[L<perl #134218|https://rt.perl.org/Ticket/Display.html?id=134218>]
+
+=item *
+
+Bison versions 3.1 through 3.4 are now supported.
+
+=back
+
+=head1 Testing
+
+Tests were added and changed to reflect the other additions and
+changes in this release. Furthermore, these significant changes were
+made:
+
+=over 4
+
+=item *
+
+F<t/run/switches.t> no longer uses (and re-uses) the F<tmpinplace/>
+directory under F<t/>. This may prevent spurious failures. [L<GH #17424|https://github.com/Perl/perl5/issues/17424>]
+
+=item *
+
+Various bugs in C<POSIX::mbtowc> were fixed. Potential races with
+other threads are now avoided, and previously the returned wide
+character could well be garbage.
+
+=item *
+
+Various bugs in C<POSIX::wctomb> were fixed. Potential races with other
+threads are now avoided, and previously it would segfault if the string
+parameter was shared or hadn't been pre-allocated with a string of
+sufficient length to hold the result.
+
+=item *
+
+Certain test output of scalars containing control characters and Unicode
+has been fixed on EBCDIC.
+
+=item *
+
+F<t/charset_tools.pl>: Avoid some work on ASCII platforms.
+
+=item *
+
+F<t/re/regexp.t>: Speed up many regex tests on ASCII platform
+
+=item *
+
+F<t/re/pat.t>: Skip tests that don't work on EBCDIC.
+
+=back
+
+=head1 Platform Support
+
+=head2 Discontinued Platforms
+
+=over 4
+
+=item Windows CE
+
+Support for building perl on Windows CE has now been removed.
+
+=back
+
+=head2 Platform-Specific Notes
+
+=over 4
+
+=item Linux
+
+C<cc> will be used to populate C<plibpth> if C<cc> is C<clang>.
+[L<perl #134189|https://rt.perl.org/Ticket/Display.html?id=134189>]
+
+=item NetBSD 8.0
+
+Fix compilation of Perl on NetBSD 8.0 with g++.
+[L<GH #17381|https://github.com/Perl/perl5/issues/17381>]
+
+=item Windows
+
+=over 4
+
+=item *
+
+The configuration for C<ccflags> and C<optimize> are now separate, as
+with POSIX platforms. [L<GH #17156|https://github.com/Perl/perl5/issues/17156>]
+
+=item *
+
+Support for building perl with Visual C++ 6.0 has now been removed.
+
+=item *
+
+The locale tests could crash on Win32 due to a Windows bug, and
+separately due to the CRT throwing an exception if the locale name
+wasn't validly encoded in the current code page.
+
+For the second we now decode the locale name ourselves, and always
+decode it as UTF-8. [L<perl #133981|https://rt.perl.org/Ticket/Display.html?id=133981>]
+
+=item *
+
+F<t/op/magic.t> could fail if environment variables starting with
+C<FOO> already existed.
+
+=item *
+
+MYMALLOC (PERL_MALLOC) build has been fixed.
+
+=back
+
+=item Solaris
+
+=over 4
+
+=item *
+
+C<Configure> will now find recent versions of the Oracle Developer Studio
+compiler, which are found under C</opt/developerstudio*>.
+
+=item *
+
+C<Configure> now uses the detected types for C<gethostby*> functions, allowing
+Perl to once again compile on certain configurations of Solaris.
+
+=back
+
+=item VMS
+
+=over 4
+
+=item *
+
+With the release of the patch kit C99 V2.0, VSI has provided support for a
+number of previously-missing C99 features. On systems with that patch kit
+installed, Perl's configuration process will now detect the presence of the
+header C<stdint.h> and the following functions: C<fpclassify>, C<isblank>, C<isless>,
+C<llrint>, C<llrintl>, C<llround>, C<llroundl>, C<nearbyint>, C<round>, C<scalbn>,
+and C<scalbnl>.
+
+=item *
+
+C<-Duse64bitint> is now the default on VMS.
+
+=back
+
+=item z/OS
+
+Perl 5.32 has been tested on z/OS 2.4, with the following caveats:
+
+=over 4
+
+=item *
+
+Only static builds (the default) build reliably
+
+=item *
+
+When using locales, z/OS does not handle the C<LC_MESSAGES> category
+properly, so when compiling perl, you should add the following to your
+F<Configure> options
+
+ ./Configure <other options> -Accflags=-DNO_LOCALE_MESSAGES
+
+=item *
+
+z/OS does not support locales with threads, so when compiling a threaded
+perl, you should add the following to your F<Configure> options
+
+ ./Configure <other Configure options> -Accflags=-DNO_LOCALE
+
+=item *
+
+Some CPAN modules that are shipped with perl fail at least one of their
+self-tests.  These are:
+Archive::Tar,
+Config::Perl::V,
+CPAN::Meta,
+CPAN::Meta::YAML,
+Digest::MD5,
+Digest::SHA,
+Encode,
+ExtUtils::MakeMaker,
+ExtUtils::Manifest,
+HTTP::Tiny,
+IO::Compress,
+IPC::Cmd,
+JSON::PP,
+libnet,
+MIME::Base64,
+Module::Metadata,
+PerlIO::via-QuotedPrint,
+Pod::Checker,
+podlators,
+Pod::Simple,
+Socket,
+and Test::Harness.
+
+The causes of the failures range from the self-test itself is flawed,
+and the module actually works fine, up to the module doesn't work at all
+on EBCDIC platforms.
+
+=back
+
+=back
+
+=head1 Internal Changes
+
+=over 4
+
+=item *
+
+C<savepvn>'s len parameter is now a C<Size_t> instead of an C<I32> since we
+can handle longer strings than 31 bits.
+
+=item *
+
+The lexer (C<Perl_yylex()> in F<toke.c>) was previously a single 4100-line
+function, relying heavily on C<goto> and a lot of widely-scoped local variables
+to do its work. It has now been pulled apart into a few dozen smaller static
+functions; the largest remaining chunk (C<yyl_word_or_keyword()>) is a little
+over 900 lines, and consists of a single C<switch> statement, all of whose
+C<case> groups are independent. This should be much easier to understand and
+maintain.
+
+=item *
+
+The OS-level signal handlers and type (Sighandler_t) used by the perl core
+were declared as having three parameters, but the OS was always told to
+call them with one argument. This has been fixed by declaring them to have
+one parameter. See the merge commit C<v5.31.5-346-g116e19abbf> for full
+details.
+
+=item *
+
+The code that handles C<tr///> has been extensively revised, fixing
+various bugs, especially when the source and/or replacement strings
+contain characters whose code points are above 255. Some of the bugs
+were undocumented, one being that under some circumstances (but not all)
+with C</s>, the squeezing was done based on the source, rather than the
+replacement. A documented bug that got fixed was
+[L<perl #125493|https://rt.perl.org/Ticket/Display.html?id=125493>].
+
+=item *
+
+A new macro for XS writers dealing with UTF-8-encoded Unicode strings
+has been created L<perlapi/C<UTF8_CHK_SKIP>> that is safer in the face
+of malformed UTF-8 input than L<perlapi/C<UTF8_SKIP>> (but not as safe
+as L<perlapi/C<UTF8_SAFE_SKIP>>). It won't read past a NUL character.
+It has been backported in L<Devel::PPPort> 3.55 and later.
+
+=item *
+
+Added the C<< PL_curstackinfo->si_cxsubix >> field. This records the stack index
+of the most recently pushed sub/format/eval context. It is set and restored
+automatically by C<cx_pushsub()>, C<cx_popsub()> etc., but would need to be
+manually managed if you do any unusual manipulation of the context stack.
+
+=item *
+
+Various macros dealing with character type classification and changing case
+where the input is encoded in UTF-8 now require an extra parameter to prevent
+potential reads beyond the end of the buffer. Use of these has generated a
+deprecation warning since Perl 5.26. Details are in
+L<perldeprecation/In XS code, use of various macros dealing with UTF-8.>
+
+=item *
+
+A new parser function L<parse_subsignature()|perlapi/parse_subsignature>
+allows a keyword plugin to parse a subroutine signature while C<use feature
+'signatures'> is in effect. This allows custom keywords to implement
+semantics similar to regular C<sub> declarations that include signatures.
+[L<perl #132474|https://rt.perl.org/Ticket/Display.html?id=132474>]
+
+=item *
+
+Since on some platforms we need to hold a mutex when temporarily
+switching locales, new macros (C<STORE_LC_NUMERIC_SET_TO_NEEDED_IN>,
+C<WITH_LC_NUMERIC_SET_TO_NEEDED> and C<WITH_LC_NUMERIC_SET_TO_NEEDED_IN>)
+have been added to make it easier to do this safely and efficiently
+as part of [L<perl #134172|https://rt.perl.org/Ticket/Display.html?id=134172>].
+
+=item *
+
+The memory bookkeeping overhead for allocating an OP structure has been
+reduced by 8 bytes per OP on 64-bit systems.
+
+=item *
+
+L<eval_pv()|perlapi/eval_pv> no longer stringifies the exception when
+C<croak_on_error> is true. [L<perl #134175|https://rt.perl.org/Ticket/Display.html?id=134175>]
+
+=item *
+
+The PERL_DESTRUCT_LEVEL environment variable was formerly only honoured on perl
+binaries built with DEBUGGING support. It is now checked on all perl builds.
+Its normal use is to force perl to individually free every block of memory
+which it has allocated before exiting, which is useful when using automated
+leak detection tools such as valgrind.
+
+=item *
+
+The API eval_sv() now accepts a C<G_RETHROW> flag. If this flag is set and an
+exception is thrown while compiling or executing the supplied code, it will be
+rethrown, and eval_sv() will not return.
+[L<perl #134177|https://rt.perl.org/Ticket/Display.html?id=134177>]
+
+=item *
+
+As part of the fix for
+[L<perl #2754|https://rt.perl.org/Ticket/Display.html?id=2754>] perl_parse()
+now returns non-zero if exit(0) is called in a C<BEGIN>, C<UNITCHECK> or
+C<CHECK> block.
+
+=item *
+
+Most functions which recursively walked an op tree during compilation have been
+made non-recursive. This avoids SEGVs from stack overflow when the op tree is
+deeply nested, such as C<$n == 1 ? "one" : $n == 2 ? "two" : ....> (especially
+in code which is auto-generated).
+
+This is particularly noticeable where the code is compiled within a separate
+thread, as threads tend to have small stacks by default.
+
+=back
+
+=head1 Selected Bug Fixes
+
+=over 4
+
+=item *
+
+Previously L<perlfunc/require> would only treat the special built-in
+SV C<&PL_sv_undef> as a value in C<%INC> as if a previous C<require>
+has failed, treating other undefined SVs as if the previous C<require>
+has succeeded. This could cause unexpected success from C<require>
+e.g., on C<local %INC = %INC;>. This has been fixed. [L<GH #17428|https://github.com/Perl/perl5/issues/17428>]
+
+=item *
+
+C<(?{...})> eval groups in regular expressions no longer unintentionally
+trigger "EVAL without pos change exceeded limit in regex" [L<GH #17490|https://github.com/Perl/perl5/issues/17490>].
+
+=item *
+
+C<(?[...])> extended bracketed character classes do not wrongly raise an
+error on some cases where a previously-compiled such class is
+interpolated into another. The heuristics previously used have been
+replaced by a reliable method, and hence the diagnostics generated have
+changed. See L</Diagnostics>.
+
+=item *
+
+The debug display (say by specifying C<-Dr> or S<C<use re>> (with
+appropriate options) of compiled Unicode property wildcard subpatterns no
+longer has extraneous output.
+
+=item *
+
+Fix an assertion failure in the regular expression engine.
+[L<GH #17372|https://github.com/Perl/perl5/issues/17372>]
+
+=item *
+
+Fix coredump in pp_hot.c after C<B::UNOP_AUX::aux_list()>.
+[L<GH #17301|https://github.com/Perl/perl5/issues/17301>]
+
+=item *
+
+Loading IO is now threadsafe.
+[L<GH #14816|https://github.com/Perl/perl5/issues/14816>]
+
+=item *
+
+C<\p{user-defined}> overrides official Unicode [L<GH #17025|https://github.com/Perl/perl5/issues/17025>]
+
+Prior to this patch, the override was only sometimes in effect.
+
+=item *
+
+Properly handle filled C</il> regnodes and multi-char folds
+
+=item *
+
+Compilation error during make minitest [L<GH #17293|https://github.com/Perl/perl5/issues/17293>]
+
+=item *
+
+Move the implementation of C<%->, C<%+> into core.
+
+=item *
+
+Read beyond buffer in C<grok_inf_nan> [L<GH #17370|https://github.com/Perl/perl5/issues/17370>]
+
+=item *
+
+Workaround glibc bug with C<LC_MESSAGES> [L<GH #17081|https://github.com/Perl/perl5/issues/17081>]
+
+=item *
+
+C<printf()> or C<sprintf()> with the C<%n> format could cause a panic on
+debugging builds, or report an incorrectly cached length value when
+producing C<SVfUTF8> flagged strings. [L<GH #17221|https://github.com/Perl/perl5/issues/17221>]
+
+=item *
+
+The tokenizer has been extensively refactored.
+[L<GH #17241|https://github.com/Perl/perl5/issues/17241>]
+[L<GH #17189|https://github.com/Perl/perl5/issues/17189>]
+
+=item *
+
+C<use strict "subs"> is now enforced for bareword constants optimized
+into a C<multiconcat> operator. [L<GH #17254|https://github.com/Perl/perl5/issues/17254>]
+
+=item *
+
+A memory leak in regular expression patterns has been fixed. [L<GH #17218|https://github.com/Perl/perl5/issues/17218>]
+
+=item *
+
+Perl no longer treats strings starting with "0x" or "0b" as hex or
+binary numbers respectively when converting a string to a number.
+This reverts a change in behaviour inadvertently introduced in perl
+5.30.0 intended to improve precision when converting a string to a
+floating point number. [L<perl #134230|https://rt.perl.org/Ticket/Display.html?id=134230>]
+
+=item *
+
+Matching a non-C<SVf_UTF8> string against a regular expression
+containing unicode literals could leak a SV on each match attempt.
+[L<perl #134390|https://rt.perl.org/Ticket/Display.html?id=134390>]
+
+=item *
+
+Overloads for octal and binary floating point literals were always
+passed a string with a C<0x> prefix instead of the appropriate C<0> or
+C<0b> prefix. [L<perl #125557|https://rt.perl.org/Ticket/Display.html?id=125557>]
+
+=item *
+
+C<< $@ = 100; die; >> now correctly propagates the 100 as an exception
+instead of ignoring it. [L<perl #134291|https://rt.perl.org/Ticket/Display.html?id=134291>]
+
+=item *
+
+C<< 0 0x@ >> no longer asserts in S_no_op(). [L<perl #134310|https://rt.perl.org/Ticket/Display.html?id=134310>]
+
+=item *
+
+Exceptions thrown while C<$@> is read-only could result in infinite
+recursion as perl tried to update C<$@>, which throws another
+exception, resulting in a stack overflow. Perl now replaces C<$@>
+with a copy if it's not a simple writable SV. [L<perl #134266|https://rt.perl.org/Ticket/Display.html?id=134266>]
+
+=item *
+
+Setting C<$)> now properly sets supplementary group ids if you have
+the necessary privileges. [L<perl #134169|https://rt.perl.org/Ticket/Display.html?id=134169>]
+
+=item *
+
+close() on a pipe now preemptively clears the PerlIO object from the
+IO SV. This prevents a second attempt to close the already closed
+PerlIO object if a signal handler calls die() or exit() while close()
+is waiting for the child process to complete. [L<perl #122112|https://rt.perl.org/Ticket/Display.html?id=122112>]
+
+=item *
+
+C<< sprintf("%.*a", -10000, $x) >> would cause a buffer overflow due
+to mishandling of the negative precision value. [L<perl #134008|https://rt.perl.org/Ticket/Display.html?id=134008>]
+
+=item *
+
+scalar() on a reference could cause an erroneous assertion failure
+during compilation. [L<perl #134045|https://rt.perl.org/Ticket/Display.html?id=134045>]
+
+=item *
+
+C<%{^CAPTURE_ALL}> is now an alias to C<%-> as documented, rather than
+incorrectly an alias for C<%+>. [L<perl #131867|https://rt.perl.org/Ticket/Display.html?id=131867>]
+
+=item *
+
+C<%{^CAPTURE}> didn't work if C<@{^CAPTURE}> was mentioned first.
+Similarly for C<%{^CAPTURE_ALL}> and C<@{^CAPTURE_ALL}>, though
+C<@{^CAPTURE_ALL}> currently isn't used. [L<perl #134193|https://rt.perl.org/Ticket/Display.html?id=134193>]
+
+=item *
+
+Extraordinarily large (over 2GB) floating point format widths could
+cause an integer overflow in the underlying call to snprintf(),
+resulting in an assertion. Formatted floating point widths are now
+limited to the range of int, the return value of snprintf(). [L<perl
+#133913|https://rt.perl.org/Ticket/Display.html?id=133913>]
+
+=item *
+
+Parsing the following constructs within a sub-parse (such as with
+C<"${code here}"> or C<s/.../code here/e>) has changed to match how
+they're parsed normally:
+
+=over
+
+=item *
+
+C<print $fh ...> no longer produces a syntax error.
+
+=item *
+
+Code like C<s/.../ ${time} /e> now properly produces an "Ambiguous use
+of ${time} resolved to $time at ..." warning when warnings are enabled.
+
+=item *
+
+C<@x {"a"}> (with the space) in a sub-parse now properly produces a
+"better written as" warning when warnings are enabled.
+
+=item *
+
+Attributes can now be used in a sub-parse.
+[L<perl #133850|https://rt.perl.org/Ticket/Display.html?id=133850>]
+
+=back
+
+=item *
+
+Incomplete hex and binary literals like C<0x> and C<0b> are now
+treated as if the C<x> or C<b> is part of the next token. [L<perl
+#134125|https://rt.perl.org/Ticket/Display.html?id=134125>]
+
+=item *
+
+A spurious C<)> in a subparse, such as in C<s/.../code here/e> or
+C<"...${code here}">, no longer confuses the parser.
+
+Previously a subparse was bracketed with generated C<(> and C<)>
+tokens, so a spurious C<)> would close the construct without doing the
+normal subparse clean up, confusing the parser and possible causing an
+assertion failure.
+
+Such constructs are now surrounded by artificial tokens that can't be
+included in the source. [L<perl #130585|https://rt.perl.org/Ticket/Display.html?id=130585>]
+
+=item *
+
+Reference assignment of a sub, such as C<\&foo = \&bar;>, silently did
+nothing in the C<main::> package. [L<perl #134072|https://rt.perl.org/Ticket/Display.html?id=134072>]
+
+=item *
+
+sv_gets() now recovers better if the target SV is modified by a signal
+handler. [L<perl #134035|https://rt.perl.org/Ticket/Display.html?id=134035>]
+
+=item *
+
+C<readline @foo> now evaluates C<@foo> in scalar context. Previously
+it would be evaluated in list context, and since readline() pops only
+one argument from the stack, the stack could underflow, or be left
+with unexpected values on the stack. [L<perl #133989|https://rt.perl.org/Ticket/Display.html?id=133989>]
+
+=item *
+
+Parsing incomplete hex or binary literals was changed in 5.31.1 to treat such a
+literal as just the 0, leaving the following C<x> or C<b> to be parsed as part
+of the next token. This could lead to some silent changes in behaviour, so now
+incomplete hex or binary literals produce a fatal error.
+[L<perl #134125|https://rt.perl.org/Ticket/Display.html?id=134125>]
+
+=item *
+
+eval_pv()'s I<croak_on_error> flag will now throw even if the exception is a
+false overloaded value.
+[L<perl #134177|https://rt.perl.org/Ticket/Display.html?id=134177>]
+
+=item *
+
+C<INIT> blocks and the program itself are no longer run if exit(0) is called
+within a C<BEGIN>, C<UNITCHECK> or C<CHECK> block.
+[L<perl #2754|https://rt.perl.org/Ticket/Display.html?id=2754>]
+
+=item *
+
+C<< open my $fh, ">>+", undef >> now opens the temporary file in append mode:
+writes will seek to the end of file before writing.
+[L<perl #134221|https://rt.perl.org/Ticket/Display.html?id=134221>]
+
+=item *
+
+Fixed a SEGV when searching for the source of an uninitialized value warning on
+an op whose subtree includes an OP_MULTIDEREF.
+[L<perl #134275|https://rt.perl.org/Ticket/Display.html?id=134275>]
+
+=back
+
+=head1 Obituary
+
+Jeff Goff (JGOFF or DrForr), an integral part of the Perl and Raku
+communities and a dear friend to all of us, has passed away on March
+13th, 2020. DrForr was a prominent member of the communities, attending
+and speaking at countless events, contributing to numerous projects,
+and assisting and helping in any way he could.
+
+His passing leaves a hole in our hearts and in our communities and he
+will be sorely missed.
+
+=head1 Acknowledgements
+
+Perl 5.32.0 represents approximately 13 months of development since Perl
+5.30.0 and contains approximately 220,000 lines of changes across 1,800
+files from 89 authors.
+
+Excluding auto-generated files, documentation and release tools, there were
+approximately 140,000 lines of changes to 880 .pm, .t, .c and .h files.
+
+Perl continues to flourish into its fourth decade thanks to a vibrant
+community of users and developers. The following people are known to have
+contributed the improvements that became Perl 5.32.0:
+
+Aaron Crane, Alberto Simões, Alexandr Savca, Andreas König, Andrew Fresh,
+Andy Dougherty, Ask Bjørn Hansen, Atsushi Sugawara, Bernhard M. Wiedemann,
+brian d foy, Bryan Stenson, Chad Granum, Chase Whitener, Chris 'BinGOs'
+Williams, Craig A. Berry, Dagfinn Ilmari Mannsåker, Dan Book, Daniel
+Dragan, Dan Kogai, Dave Cross, Dave Rolsky, David Cantrell, David Mitchell,
+Dominic Hargreaves, E. Choroba, Felipe Gasper, Florian Weimer, Graham Knop,
+Håkon Hægland, Hauke D, H.Merijn Brand, Hugo van der Sanden, Ichinose
+Shogo, James E Keenan, Jason McIntosh, Jerome Duval, Johan Vromans, John
+Lightsey, John Paul Adrian Glaubitz, Kang-min Liu, Karen Etheridge, Karl
+Williamson, Leon Timmermans, Manuel Mausz, Marc Green, Matthew Horsfall,
+Matt Turner, Max Maischein, Michael Haardt, Nicholas Clark, Nicolas R., Niko
+Tyni, Pali, Paul Evans, Paul Johnson, Paul Marquess, Peter Eisentraut, Peter
+John Acklam, Peter Oliver, Petr Písař, Renee Baecker, Ricardo Signes,
+Richard Leach, Russ Allbery, Samuel Smith, Santtu Ojanperä, Sawyer X,
+Sergey Aleynikov, Sergiy Borodych, Shirakata Kentaro, Shlomi Fish, Sisyphus,
+Slaven Rezic, Smylers, Stefan Seifert, Steve Hay, Steve Peters, Svyatoslav,
+Thibault Duponchelle, Todd Rinaldo, Tomasz Konojacki, Tom Hukins, Tony Cook,
+Unicode Consortium, VanL, Vickenty Fesunov, Vitali Peil, Yves Orton, Zefram.
+
+The list above is almost certainly incomplete as it is automatically
+generated from version control history. In particular, it does not include
+the names of the (very much appreciated) contributors who reported issues to
+the Perl bug tracker.
+
+Many of the changes included in this version originated in the CPAN modules
+included in Perl's core. We're grateful to the entire CPAN community for
+helping Perl to flourish.
+
+For a more complete list of all of Perl's historical contributors, please
+see the F<AUTHORS> file in the Perl source distribution.
+
+=head1 Reporting Bugs
+
+If you find what you think is a bug, you might check the perl bug database
+at L<https://github.com/Perl/perl5/issues>. There may also be information at
+L<http://www.perl.org/>, the Perl Home Page.
+
+If you believe you have an unreported bug, please open an issue at
+L<https://github.com/Perl/perl5/issues>. Be sure to trim your bug down to a
+tiny but sufficient test case.
+
+If the bug you are reporting has security implications which make it
+inappropriate to send to a public issue tracker, then see
+L<perlsec/SECURITY VULNERABILITY CONTACT INFORMATION>
+for details of how to report the issue.
+
+=head1 Give Thanks
+
+If you wish to thank the Perl 5 Porters for the work we had done in Perl 5,
+you can do so by running the C<perlthanks> program:
+
+    perlthanks
+
+This will send an email to the Perl 5 Porters list with your show of thanks.
+
+=head1 SEE ALSO
+
+The F<Changes> file for an explanation of how to view exhaustive details on
+what changed.
+
+The F<INSTALL> file for how to build Perl.
+
+The F<README> file for general stuff.
+
+The F<Artistic> and F<Copying> files for copyright information.
+
+=cut
index 5213eca..4faa9a8 100644 (file)
@@ -14,6 +14,10 @@ features are available.
 The deprecated features will be grouped by the version of Perl in
 which they will be removed.
 
+=head2 Perl 5.34
+
+There are no deprecations or fatalizations scheduled for Perl 5.34.
+
 =head2 Perl 5.32
 
 =head3 Constants from lexical variables potentially modified elsewhere
@@ -48,13 +52,13 @@ changes to the variable that it closes over, add an explicit C<return>:
     my $var;
     $sub = sub () { return $var };
 
-This usage has been deprecated, and will no longer be allowed in Perl 5.32.
+This usage was deprecated and as of Perl 5.32 is no longer allowed.
 
 =head3 Use of strings with code points over 0xFF as arguments to C<vec>
 
 C<vec> views its string argument as a sequence of bits.  A string
 containing a code point over 0xFF is nonsensical.  This usage is
-deprecated in Perl 5.28, and will be removed in Perl 5.32.
+deprecated in Perl 5.28, and was removed in Perl 5.32.
 
 =head3 Use of code points over 0xFF in string bitwise operators
 
@@ -65,14 +69,14 @@ nonsensical. Some instances of these have been deprecated since Perl
 the wide characters did not affect the end result, no deprecation
 notice was raised, and so remain legal.  Now, all occurrences either are
 fatal or raise a deprecation warning, so that the remaining legal
-occurrences will be fatal in 5.32.
+occurrences became fatal in 5.32.
 
 An example of this is
 
  "" & "\x{100}"
 
 The wide character is not used in the C<&> operation because the left
-operand is shorter.  This now warns anyway.
+operand is shorter.  This now throws an exception.
 
 =head3 hostname() doesn't accept any arguments
 
@@ -81,8 +85,7 @@ been documented to be called with no arguments.  Historically it has not
 enforced this, and has actually accepted and ignored any arguments.  As a
 result, some users have got the mistaken impression that an argument does
 something useful.  To avoid these bugs, the function is being made strict.
-Passing arguments was deprecated in Perl 5.28, and will become fatal in
-Perl 5.32.
+Passing arguments was deprecated in Perl 5.28 and became fatal in Perl 5.32.
 
 =head3 Unescaped left braces in regular expressions
 
@@ -98,7 +101,7 @@ also be escaped to avoid confusing the parser, for example,
 
 Forcing literal C<{> characters to be escaped will enable the Perl
 language to be extended in various ways in future releases.  To avoid
-needlessly breaking existing code, the restriction is is not enforced in
+needlessly breaking existing code, the restriction is not enforced in
 contexts where there are unlikely to ever be extensions that could
 conflict with the use there of C<{> as a literal.  A non-deprecation
 warning that the left brace is being taken literally is raised in
@@ -109,11 +112,14 @@ started to give deprecation warnings since. These cases were made fatal
 in Perl 5.26. Due to an oversight, not all cases of a use of a literal
 C<{> got a deprecation warning.  Some cases started warning in Perl 5.26,
 and were made fatal in Perl 5.30.  Other cases started in Perl 5.28,
-and will be made fatal in 5.32.
+and were made fatal in 5.32.
 
 =head3 In XS code, use of various macros dealing with UTF-8.
 
-These macros will require an extra parameter in Perl 5.32:
+The macros below now require an extra parameter than in versions prior
+to Perl 5.32.  The final parameter in each one is a pointer into the
+string supplied by the first parameter beyond which the input will not
+be read.  This prevents potential reading beyond the end of the buffer.
 C<isALPHANUMERIC_utf8>,
 C<isASCII_utf8>,
 C<isBLANK_utf8>,
@@ -148,18 +154,28 @@ C<toTITLE_utf8>,
 and
 C<toUPPER_utf8>.
 
-There is now a macro that corresponds to each one of these, simply by
-appending C<_safe> to the name.  It takes the extra parameter.
-For example, C<isDIGIT_utf8_safe> corresponds to C<isDIGIT_utf8>, but
-takes the extra parameter, and its use doesn't generate a deprecation
-warning.  All are documented in L<perlapi/Character case changing> and
+Since Perl 5.26, this functionality with the extra parameter has been
+available by using a corresponding macro to each one of these, and whose
+name is formed by appending C<_safe> to the base name.  There is no
+change to the functionality of those.  For example, C<isDIGIT_utf8_safe>
+corresponds to C<isDIGIT_utf8>, and both now behave identically.  All
+are documented in L<perlapi/Character case changing> and
 L<perlapi/Character classification>.
 
-You can change to use these versions at any time, or, if you can live
-with the deprecation messages, wait until 5.32 and add the parameter to
-the existing calls, without changing the names.
+This change was originally scheduled for 5.30, but was delayed until
+5.32.
+
+=head3 C<< File::Glob::glob() >> was removed
+
+C<< File::Glob >> has a function called C<< glob >>, which just calls
+C<< bsd_glob >>.
+
+C<< File::Glob::glob() >> was deprecated in Perl 5.8. A deprecation
+message was issued from Perl 5.26 onwards, and the function has now
+disappeared in Perl 5.30.
 
-This change was originally scheduled for 5.30, but was delayed.
+Code using C<< File::Glob::glob() >> should call
+C<< File::Glob::bsd_glob() >> instead.
 
 =head2 Perl 5.30
 
@@ -226,7 +242,7 @@ See L<perlfunc/dump>.
 There has been a long-standing bug in Perl that causes a lexical variable
 not to be cleared at scope exit when its declaration includes a false
 conditional.  Some people have exploited this bug to achieve a kind of
-static variable.  Since we intend to fix this bug, we don't want people
+static variable.  To allow us to fix this bug, people should not be
 relying on this behavior.
 
 Instead, it's recommended one uses C<state> variables to achieve the
@@ -240,7 +256,7 @@ same effect:
 C<state> variables were introduced in Perl 5.10.
 
 Alternatively, you can achieve a similar static effect by
-declaring the variable in a separate block outside the function, eg
+declaring the variable in a separate block outside the function, e.g.,
 
     sub f { my $x if 0; return $x++ }
 
@@ -249,7 +265,7 @@ becomes
     { my $x; sub f { return $x++ } }
 
 The use of C<my()> in a false conditional has been deprecated in
-Perl 5.10, and it will become a fatal error in Perl 5.30.
+Perl 5.10, and became a fatal error in Perl 5.30.
 
 
 =head3 Reading/writing bytes from/to :utf8 handles.
@@ -298,7 +314,6 @@ points|perlunicode/Noncharacter code points>, nor L<code points that are
 above the legal Unicode maximum|perlunicode/Beyond Unicode code
 points>, those can be delimiters.
 
-
 =head2 Perl 5.28
 
 =head3 Attributes C<< :locked >> and C<< :unique >>
diff --git a/gnu/usr.bin/perl/pod/perlgov.pod b/gnu/usr.bin/perl/pod/perlgov.pod
new file mode 100644 (file)
index 0000000..64ba610
--- /dev/null
@@ -0,0 +1,531 @@
+=encoding utf-8
+
+=head1 NAME
+
+perlgov - Perl Rules of Governance
+
+=head1 PREAMBLE
+
+We are forming a system of governance for development of the Perl programming
+language.
+
+The scope of governance includes the language definition, its
+implementation, its test suite, its documentation, and the policies and
+procedures by which it is developed and maintained.
+
+The system of governance includes definitions of the groups that will make
+decisions, the rules by which these groups are formed and changed, and the
+enumerated powers and constraints on the activities of these governing
+groups.
+
+In forming a system of governance, we seek to achieve the following goals:
+
+=over
+
+=item *
+
+We want a system that is functional.  That means the governing groups may
+decide to undertake large changes, or they may decide to act conservatively,
+but they will act with intent and clear communication rather than fail to reach
+decisions when needed.
+
+=item *
+
+We want a system that is trusted. That means that a reasonable contributor to
+Perl might disagree with decisions made by the governing groups, but will
+accept that they were made in good faith in consultation with relevant
+communities outside the governing groups.
+
+=item *
+
+We want a system that is sustainable.  That means it has provisions to
+self-modify, including ways of adding new members to the governing groups, ways
+to survive members becoming inactive, and ways of amending the rules of
+governance themselves if needed.
+
+=item *
+
+We want a system that is transparent.  That means that it will prefer policies
+that manage ordinary matters in public, and it will prefer secrecy in a limited
+number of situations.
+
+=item *
+
+We want a system that is respectful.  That means that it will establish
+standards of civil discourse that allow for healthy disagreement but avoid
+rancor and hostility in the community for which it is responsible.
+
+=back
+
+=head1 Mandate
+
+Perl language governance shall work to:
+
+=over
+
+=item *
+
+Maintain the quality, stability, and continuity of the Perl language and
+interpreter
+
+=item *
+
+Guide the evolution of the Perl language and interpreter
+
+=item *
+
+Establish and oversee the policies, procedures, systems, and mechanisms that
+enable a community of contributors to the Perl language and interpreter
+
+=item *
+
+Encourage discussion and consensus among contributors as preferential to formal
+decision making by governance groups
+
+=item *
+
+Facilitate communication between contributors and external stakeholders in the
+broader Perl ecosystem
+
+=back
+
+=head1 Definitions
+
+This document describes three roles involved in governance:
+
+=over
+
+=item "Core Team"
+
+=item "Steering Council"
+
+=item "Vote Administrator"
+
+=back
+
+A section on each follows.
+
+=head2 The Core Team
+
+The Core Team are a group of trusted volunteers involved in the ongoing
+development of the Perl language and interpreter.  They are not required to be
+language developers or committers.
+
+References to specific votes are explained in the "Rules for Voting" section.
+
+=head3 Powers
+
+In addition to their contributions to the Perl language, the Core Team sets
+the rules of Perl governance, decides who participates in what role in
+governance, and delegates substantial decision making power to the Steering
+Council.
+
+Specifically:
+
+=over
+
+=item *
+
+They elect the Steering Council and have the power to remove Steering
+Council members.
+
+=item *
+
+In concert with the Steering Council, they manage Core Team membership.
+
+=item *
+
+In concert with the Steering Council, they have the power to modify the Perl
+Rules of Governance.
+
+=back
+
+The Core Team do not have any authority over parts of the Perl ecosystem
+unrelated to developing and releasing the language itself.  These include, but
+are not limited to:
+
+=over
+
+=item *
+
+The Perl Foundation
+
+=item *
+
+CPAN administration and CPAN authors
+
+=item *
+
+perl.org, metacpan.org, and other community-maintained websites and services
+
+=item *
+
+Perl conferences and events, except those organized directly by the Core Team
+
+=item *
+
+Perl-related intellectual property legally owned by third-parties, except as
+allowed by applicable licenses or agreements
+
+=back
+
+=head3 Membership
+
+The initial Core Team members will be specified when this document is
+first ratified.
+
+Any Core Team member may nominate someone to be added to the Core Team by
+sending the nomination to the Steering Council.  The Steering Council must
+approve or reject the nomination.  If approved, the Steering Council will
+organize a Membership Change Vote to ratify the addition.
+
+Core Team members should demonstrate:
+
+=over
+
+=item *
+
+A solid track record of being constructive and helpful
+
+=item *
+
+Significant contributions to the project's goals, in any form
+
+=item *
+
+Willingness to dedicate some time to improving Perl
+
+=back
+
+Contributions are not limited to code. Here is an incomplete list of areas
+where contributions may be considered for joining the Core Team:
+
+=over
+
+=item *
+
+Working on community management and outreach
+
+=item *
+
+Providing support on mailing lists, IRC, or other forums
+
+=item *
+
+Triaging tickets
+
+=item *
+
+Writing patches (code, docs, or tests)
+
+=item *
+
+Reviewing patches (code, docs, or tests)
+
+=item *
+
+Participating in design discussions
+
+=item *
+
+Providing expertise in a particular domain (security, i18n, etc.)
+
+=item *
+
+Managing Perl infrastructure (websites, CI, documentation, etc.)
+
+=item *
+
+Maintaining significant projects in the Perl ecosystem
+
+=item *
+
+Creating visual designs
+
+=back
+
+Core Team membership acknowledges sustained and valuable efforts that align
+well with the philosophy and the goals of the Perl project.
+
+Core Team members are expected to act as role models for the community and
+custodians of the project, on behalf of the community and all those who rely
+on Perl.
+
+=head3 Term
+
+Core Team members serve until they are removed.
+
+=head3 Removal
+
+Core Team Members may resign their position at any time.
+
+In exceptional circumstances, it may be necessary to remove someone from the
+Core Team against their will, such as for flagrant or repeated violations of a
+Code of Conduct.  Any Core Team member may send a recall request to the
+Steering Council naming the individual to be removed.  The Steering Council
+must approve or reject the recall request.  If approved, the Steering Council
+will organize a Membership Change vote to ratify the removal.
+
+If the removed member is also on the Steering Council, then they are removed
+from the Steering Council as well.
+
+=head3 Inactivity
+
+Core Team members who have stopped contributing are encouraged to declare
+themselves "inactive". Inactive members do not nominate or vote.  Inactive
+members may declare themselves active at any time, except when a vote has been
+proposed and is not concluded.  Eligibility to nominate or vote will be
+determined by the Vote Administrator.
+
+To record and honor their contributions, inactive Core Team members will
+continue to be listed alongside active members.
+
+=head3 No Confidence in the Steering Council
+
+The Core Team may remove either a single Steering Council member or the entire
+Steering Council via a No Confidence Vote.
+
+A No Confidence Vote is triggered when a Core Team member calls for one
+publicly on an appropriate project communication channel, and another Core
+Team member seconds the proposal.
+
+If a No Confidence Vote removes all Steering Council members, the Vote
+Administrator of the No Confidence Vote will then administer an election
+to select a new Steering Council.
+
+=head3 Amending Perl Rules of Governance
+
+Any Core Team member may propose amending the Perl Rules of Governance by
+sending a proposal to the Steering Council.  The Steering Council must decide
+to approve or reject the proposal.  If approved, the Steering Council will
+administer an Amendment Vote.
+
+=head3 Rules for Voting
+
+Membership Change, Amendment, and No Confidence Votes require 2/3 of
+participating votes from Core Team members to pass.
+
+A Vote Administrator must be selected following the rules in the "Vote
+Administrator" section.
+
+The vote occurs in two steps:
+
+=over
+
+=item 1
+
+The Vote Administrator describes the proposal being voted upon.  The Core Team
+then may discuss the matter in advance of voting.
+
+=item 2
+
+Active Core Team members vote in favor or against the proposal.  Voting is
+performed anonymously.
+
+=back
+
+For a Membership Change Vote, each phase will last one week.  For Amendment and
+No Confidence Votes, each phase will last two weeks.
+
+=head2 The Steering Council
+
+The Steering Council is a 3-person committee, elected by the Core
+Team.  Candidates are not required to be members of the Core Team.  Non-member
+candidates are added to the Core Team if elected as if by a Membership Change
+Vote.
+
+References to specific elections are explained in the "Rules for Elections" section.
+
+=head3 Powers
+
+The Steering Council has broad authority to make decisions about the
+development of the Perl language, the interpreter, and all other components,
+systems and processes that result in new releases of the language interpreter.
+
+For example, it can:
+
+=over
+
+=item *
+
+Manage the schedule and process for shipping new releases
+
+=item *
+
+Establish procedures for proposing, discussing and deciding upon changes to the
+language
+
+=item *
+
+Delegate power to individuals on or outside the Steering Council
+
+=back
+
+Decisions of the Steering Council will be made by majority vote of non-vacant
+seats on the council.
+
+The Steering Council should look for ways to use these powers as little as
+possible.  Instead of voting, it's better to seek consensus. Instead of ruling
+on individual cases, it's better to define standards and processes that apply
+to all cases.
+
+As with the Core Team, the Steering Council does not have any authority over
+parts of the Perl ecosystem unrelated to developing and releasing the language
+itself.
+
+The Steering Council does not have the power to modify the Perl Rules of
+Governance, except as provided in the section "Amending Perl Rules of
+Governance".
+
+=head3 Term
+
+A new Steering Council will be chosen by a Term Election within two weeks after
+each stable feature release (that is, change to C<PERL_REVISION> or
+C<PERL_VERSION>) or after two years, whichever comes first. The council members
+will serve until the completion of the next Term Election unless they are
+removed.
+
+=head3 Removal
+
+Steering Council members may resign their position at any time.
+
+Whenever there are vacancies on the Steering Council, the council will
+organize a Special Election within one week after the vacancy occurs.  If the
+entire Steering Council is ever vacant, a Term Election will be held instead.
+
+If a Steering Council member is deceased, or drops out of touch and cannot be
+contacted for a month or longer, then the rest of the council may vote to
+declare their seat vacant.  If an absent member returns after such a
+declaration is made, they are not reinstated automatically, but may run in the
+Special Election to fill the vacancy.
+
+Otherwise, Steering Council members may only be removed before the end of
+their term through a No Confidence Vote by the Core Team.
+
+=head3 Rules for Elections
+
+Term and Special Election are ranked-choice votes to construct an ordered list
+of candidates to fill vacancies in the Steering Council.
+
+A Vote Administrator must be selected following the rules in the "Vote
+Administrator" section.
+
+Both Term and Special Elections occur in two stages:
+
+=over
+
+=item 1
+
+Candidates advertise their interest in serving. Candidates must be nominated by
+an active Core Team member. Self-nominations are allowed.  Nominated candidates
+may share a statement about their candidacy with the Core Team.
+
+=item 2
+
+Active Core Team Members vote by ranking all candidates.  Voting is performed
+anonymously.  After voting is complete, candidates are ranked using the
+Condorcet Internet Voting Service's proportional representation mode.  If a tie
+occurs, it may be resolved by mutual agreement among the tied candidates, or
+else the tie will be resolved through random selection by the Vote
+Administrator.
+
+=back
+
+Anyone voted off the Core Team is not eligible to be a candidate for Steering
+Council unless re-instated to the Core Team.
+
+For a Term Election, each phase will last two weeks.  At the end of the second
+phase, the top three ranked candidates are elected as the new Steering Council.
+
+For a Special Election, each phase will last one week.  At the end of the
+second phase, vacancies are filled from the ordered list of candidates until
+no vacancies remain.
+
+The election of the first Steering Council will be a Term Election.  Ricardo
+Signes will be the Vote Administrator for the initial Term Election unless he
+is a candidate, in which case he will select a non-candidate administrator to
+replace him.
+
+=head2 The Vote Administrator
+
+Every election or vote requires a Vote Administrator who manages
+communication, collection of secret ballots, and all other necessary
+activities to complete the voting process.
+
+Unless otherwise specified, the Steering Council selects the Vote
+Administrator.
+
+A Vote Administrator must not be a member of the Steering Council nor a
+candidate or subject of the vote.  A Vote Administrator may be a member of the
+Core Team and, if so, may cast a vote while also serving as administrator.  If
+the Vote Administrator becomes a candidate during an election vote, they will
+appoint a non-candidate replacement.
+
+If the entire Steering Council is vacant or is the subject of a No Confidence
+Vote, then the Core Team will select a Vote Administrator by consensus.  If
+consensus cannot be reached within one week, the President of The Perl
+Foundation will select a Vote Administrator.
+
+=head1 Core Team Members
+
+The current members of the Perl Core Team are:
+
+=over
+
+=item * Abhijit Menon-Sen (inactive)
+
+=item * Andy Dougherty
+
+=item * Chad Granum
+
+=item * Chris 'BinGOs' Williams
+
+=item * Craig Berry
+
+=item * Dagfinn Ilmari Mannsåker
+
+=item * Dave Mitchell
+
+=item * David Golden
+
+=item * H. Merijn Brand
+
+=item * Hugo van der Sanden
+
+=item * James E Keenan
+
+=item * Jan Dubois (inactive)
+
+=item * Jesse Vincent (inactive)
+
+=item * Karen Etheridge
+
+=item * Karl Williamson
+
+=item * Leon Timmermans
+
+=item * Matthew Horsfall
+
+=item * Max Maischein
+
+=item * Nicholas Clark
+
+=item * Nicolas R.
+
+=item * Paul "LeoNerd" Evans
+
+=item * Philippe "BooK" Bruhat
+
+=item * Ricardo Signes
+
+=item * Sawyer X
+
+=item * Steve Hay
+
+=item * Stuart Mackintosh
+
+=item * Todd Rinaldo
+
+=item * Tony Cook
+
+=back
index b83e14a..d92f25e 100644 (file)
@@ -259,19 +259,136 @@ Here's an example of how to copy a binary file:
 
 =head1 Opening Pipes
 
-To be announced.
+Perl also lets you open a filehandle into an external program or shell
+command rather than into a file. You can do this in order to pass data
+from your Perl program to an external command for further processing, or
+to receive data from another program for your own Perl program to
+process.
+
+Filehandles into commands are also known as I<pipes>, since they work on
+similar inter-process communication principles as Unix pipelines. Such a
+filehandle has an active program instead of a static file on its
+external end, but in every other sense it works just like a more typical
+file-based filehandle, with all the techniques discussed earlier in this
+article just as applicable.
+
+As such, you open a pipe using the same C<open> call that you use for
+opening files, setting the second (C<MODE>) argument to special
+characters that indicate either an input or an output pipe. Use C<"-|"> for a
+filehandle that will let your Perl program read data from an external
+program, and C<"|-"> for a filehandle that will send data to that
+program instead.
+
+=head2 Opening a pipe for reading
+
+Let's say you'd like your Perl program to process data stored in a nearby
+directory called C<unsorted>, which contains a number of textfiles.
+You'd also like your program to sort all the contents from these files
+into a single, alphabetically sorted list of unique lines before it
+starts processing them.
+
+You could do this through opening an ordinary filehandle into each of
+those files, gradually building up an in-memory array of all the file
+contents you load this way, and finally sorting and filtering that array
+when you've run out of files to load. I<Or>, you could offload all that
+merging and sorting into your operating system's own C<sort> command by
+opening a pipe directly into its output, and get to work that much
+faster.
+
+Here's how that might look:
+
+    open(my $sort_fh, '-|', 'sort -u unsorted/*.txt')
+        or die "Couldn't open a pipe into sort: $!";
+
+    # And right away, we can start reading sorted lines:
+    while (my $line = <$sort_fh>) {
+        #
+        # ... Do something interesting with each $line here ...
+        #
+    }
+
+The second argument to C<open>, C<"-|">, makes it a read-pipe into a
+separate program, rather than an ordinary filehandle into a file.
+
+Note that the third argument to C<open> is a string containing the
+program name (C<sort>) plus all its arguments: in this case, C<-u> to
+specify unqiue sort, and then a fileglob specifying the files to sort.
+The resulting filehandle C<$sort_fh> works just like a read-only (C<<
+"<" >>) filehandle, and your program can subsequently read data
+from it as if it were opened onto an ordinary, single file.
+
+=head2 Opening a pipe for writing
 
-=head1 Low-level File Opens via sysopen
+Continuing the previous example, let's say that your program has
+completed its processing, and the results sit in an array called
+C<@processed>. You want to print these lines to a file called
+C<numbered.txt> with a neatly formatted column of line-numbers.
+
+Certainly you could write your own code to do this — or, once again,
+you could kick that work over to another program. In this case, C<cat>,
+running with its own C<-n> option to activate line numbering, should do
+the trick:
+
+    open(my $cat_fh, '|-', 'cat -n > numbered.txt')
+        or die "Couldn't open a pipe into cat: $!";
+
+    for my $line (@processed) {
+        print $cat_fh $line;
+    }
 
-To be announced.  Or deleted.
+Here, we use a second C<open> argument of C<"|-">, signifying that the
+filehandle assigned to C<$cat_fh> should be a write-pipe. We can then
+use it just as we would a write-only ordinary filehandle, including the
+basic function of C<print>-ing data to it.
+
+Note that the third argument, specifying the command that we wish to
+pipe to, sets up C<cat> to redirect its output via that C<< ">" >>
+symbol into the file C<numbered.txt>. This can start to look a little
+tricky, because that same symbol would have meant something
+entirely different had it showed it in the second argument to C<open>!
+But here in the third argument, it's simply part of the shell command that
+Perl will open the pipe into, and Perl itself doesn't invest any special
+meaning to it.
+
+=head2 Expressing the command as a list
+
+For opening pipes, Perl offers the option to call C<open> with a list
+comprising the desired command and all its own arguments as separate
+elements, rather than combining them into a single string as in the
+examples above. For instance, we could have phrased the C<open> call in
+the first example like this:
+
+    open(my $sort_fh, '-|', 'sort', '-u', glob('unsorted/*.txt'))
+        or die "Couldn't open a pipe into sort: $!";
+
+When you call C<open> this way, Perl invokes the given command directly,
+bypassing the shell. As such, the shell won't try to interpret any
+special characters within the command's argument list, which might
+overwise have unwanted effects. This can make for safer, less
+error-prone C<open> calls, useful in cases such as passing in variables
+as arguments, or even just referring to filenames with spaces in them.
+
+However, when you I<do> want to pass a meaningful metacharacter to the
+shell, such with the C<"*"> inside that final C<unsorted/*.txt> argument
+here, you can't use this alternate syntax. In this case, we have worked
+around it via Perl's handy C<glob> built-in function, which evaluates
+its argument into a list of filenames — and we can safely pass that
+resulting list right into C<open>, as shown above.
+
+Note also that representing piped-command arguments in list form like
+this doesn't work on every platform. It will work on any Unix-based OS
+that provides a real C<fork> function (e.g. macOS or Linux), as well as
+on Windows when running Perl 5.22 or later.
 
 =head1 SEE ALSO
 
-To be announced.
+The full documentation for L<C<open>|perlfunc/open FILEHANDLE,MODE,EXPR>
+provides a thorough reference to this function, beyond the best-practice
+basics covered here.
 
 =head1 AUTHOR and COPYRIGHT
 
-Copyright 2013 Tom Christiansen.
+Copyright 2013 Tom Christiansen; now maintained by Perl5 Porters
 
 This documentation is free; you can redistribute it and/or modify it under
 the same terms as Perl itself.
index 0eac156..a954046 100644 (file)
@@ -108,7 +108,8 @@ perl source, we will call the nodes in a regex program "regops".
 The program is represented by an array of C<regnode> structures, one or
 more of which represent a single regop of the program. Struct
 C<regnode> is the smallest struct needed, and has a field structure which is
-shared with all the other larger structures.
+shared with all the other larger structures.  (Outside this document, the term
+"regnode" is sometimes used to mean "regop", which could be confusing.)
 
 The "next" pointers of all regops except C<BRANCH> implement concatenation;
 a "next" pointer with a C<BRANCH> on both ends of it is connecting two
@@ -160,7 +161,7 @@ arguments instead:
 
 C<regnode_string> structures, used for literal strings, follow the header
 with a one-byte length and then the string data. Strings are padded on
-the end with zero bytes so that the total length of the node is a
+the tail end with zero bytes so that the total length of the node is a
 multiple of four bytes:
 
     regnode_string           char string[1];
@@ -257,11 +258,9 @@ involves the following steps:
 
 =over 5
 
-=item 1. Parsing for size
+=item 1. Parsing
 
-=item 2. Parsing for construction
-
-=item 3. Peep-hole optimisation and analysis
+=item 2. Peep-hole optimisation and analysis
 
 =back
 
@@ -269,9 +268,9 @@ involves the following steps:
 
 =over 5
 
-=item 4. Start position and no-match optimisations
+=item 3. Start position and no-match optimisations
 
-=item 5. Program execution
+=item 4. Program execution
 
 =back
 
@@ -304,32 +303,14 @@ fields. Likewise there are many macros which operate on this
 variable: anything that looks like C<RExC_xxxx> is a macro that operates on
 this pointer/structure.
 
-=head3 Parsing for size
-
-In this pass the input pattern is parsed in order to calculate how much
-space is needed for each regop we would need to emit. The size is also
-used to determine whether long jumps will be required in the program.
-
-This stage is controlled by the macro C<SIZE_ONLY> being set.
-
-The parse proceeds pretty much exactly as it does during the
-construction phase, except that most routines are short-circuited to
-change the size field C<RExC_size> and not do anything else.
-
-=head3 Parsing for construction
-
-Once the size of the program has been determined, the pattern is parsed
-again, but this time for real. Now C<SIZE_ONLY> will be false, and the
-actual construction can occur.
-
 C<reg()> is the start of the parse process. It is responsible for
 parsing an arbitrary chunk of pattern up to either the end of the
 string, or the first closing parenthesis it encounters in the pattern.
 This means it can be used to parse the top-level regex, or any section
 inside of a grouping parenthesis. It also handles the "special parens"
-that perl's regexes have. For instance when parsing C</x(?:foo)y/> C<reg()>
-will at one point be called to parse from the "?" symbol up to and
-including the ")".
+that perl's regexes have. For instance when parsing C</x(?:foo)y/>,
+C<reg()> will at one point be called to parse from the "?" symbol up to
+and including the ")".
 
 Additionally, C<reg()> is responsible for parsing the one or more
 branches from the pattern, and for "finishing them off" by correctly
@@ -344,6 +325,34 @@ parses out constant strings, character classes, and the
 various special symbols like C<$>. If C<regatom()> encounters a "("
 character it in turn calls C<reg()>.
 
+There used to be two main passes involved in parsing, the first to
+calculate the size of the compiled program, and the second to actually
+compile it.  But now there is only one main pass, with an initial crude
+guess based on the length of the input pattern, which is increased if
+necessary as parsing proceeds, and afterwards, trimmed to the actual
+amount used.
+
+However, it may happen that parsing must be restarted at the beginning
+when various circumstances occur along the way.  An example is if the
+program turns out to be so large that there are jumps in it that won't
+fit in the normal 16 bits available.  There are two special regops that
+can hold bigger jump destinations, BRANCHJ and LONGBRANCH.  The parse is
+restarted, and these are used instead of the normal shorter ones.
+Whenever restarting the parse is required, the function returns failure
+and sets a flag as to what needs to be done.  This is passed up to the
+top level routine which takes the appropriate action and restarts from
+scratch.  In the case of needing longer jumps, the C<RExC_use_BRANCHJ>
+flag is set in the C<RExC_state_t> structure, which the functions know
+to inspect before deciding how to do branches.
+
+In most instances, the function that discovers the issue sets the causal
+flag and returns failure immediately.  L</Parsing complications>
+contains an explicit example of how this works.  In other cases, such as
+a forward reference to a numbered parenthetical grouping, we need to
+finish the parse to know if that numbered grouping actually appears in
+the pattern.  In those cases, the parse is just redone at the end, with
+the knowledge of how many groupings occur in it.
+
 The routine C<regtail()> is called by both C<reg()> and C<regbranch()>
 in order to "set the tail pointer" correctly. When executing and
 we get to the end of a branch, we need to go to the node following the
@@ -419,19 +428,16 @@ efficient representation can be used, and starts sizing on this basis.
 However, if it then encounters something in the pattern which must be stored
 as Unicode, such as an C<\x{...}> escape sequence representing a character
 literal, then this means that all previously calculated sizes need to be
-redone, using values appropriate for the Unicode representation. Currently,
-all regular expression constructions which can trigger this are parsed by code
-in C<regatom()>.
-
-To avoid wasted work when a restart is needed, the sizing pass is abandoned
-- C<regatom()> immediately returns NULL, setting the flag C<RESTART_UTF8>.
-(This action is encapsulated using the macro C<REQUIRE_UTF8>.) This restart
-request is propagated up the call chain in a similar fashion, until it is
-"caught" in C<Perl_re_op_compile()>, which marks the pattern as containing
-Unicode, and restarts the sizing pass. It is also possible for constructions
-within run-time code blocks to turn out to need Unicode representation.,
-which is signalled by C<S_compile_runtime_code()> returning false to
-C<Perl_re_op_compile()>.
+redone, using values appropriate for the Unicode representation.  This
+is another instance where the parsing needs to be restarted, and it can
+and is done immediately.  The function returns failure, and sets the
+flag C<RESTART_UTF8> (encapsulated by using the macro C<REQUIRE_UTF8>).
+This restart request is propagated up the call chain in a similar
+fashion, until it is "caught" in C<Perl_re_op_compile()>, which marks
+the pattern as containing Unicode, and restarts the sizing pass. It is
+also possible for constructions within run-time code blocks to turn out
+to need Unicode representation., which is signalled by
+C<S_compile_runtime_code()> returning false to C<Perl_re_op_compile()>.
 
 The restart was previously implemented using a C<longjmp> in C<regatom()>
 back to a C<setjmp> in C<Perl_re_op_compile()>, but this proved to be
@@ -440,9 +446,10 @@ variables, which interact badly with the emergent control flow of C<setjmp>.
 
 =head3 Debug Output
 
-In the 5.9.x development version of perl you can C<< use re Debug => 'PARSE' >>
-to see some trace information about the parse process. We will start with some
-simple patterns and build up to more complex patterns.
+Starting in the 5.9.x development version of perl you can C<< use re
+Debug => 'PARSE' >> to see some trace information about the parse
+process. We will start with some simple patterns and build up to more
+complex patterns.
 
 So when we parse C</foo/> we see something like the following table. The
 left shows what is being parsed, and the number indicates where the next regop
@@ -891,14 +898,16 @@ With excerpts from Perl, and contributions and suggestions from
 Ronald J. Kimball, Dave Mitchell, Dominic Dunlop, Mark Jason Dominus,
 Stephen McCamant, and David Landgren.
 
+Now maintained by Perl 5 Porters.
+
 =head1 LICENCE
 
 Same terms as Perl.
 
 =head1 REFERENCES
 
-[1] L<http://perl.plover.com/Rx/paper/>
+[1] L<https://perl.plover.com/Rx/paper/>
 
-[2] L<http://www.unicode.org>
+[2] L<https://www.unicode.org/>
 
 =cut
diff --git a/gnu/usr.bin/perl/pod/perlsecpolicy.pod b/gnu/usr.bin/perl/pod/perlsecpolicy.pod
new file mode 100644 (file)
index 0000000..07a7024
--- /dev/null
@@ -0,0 +1,497 @@
+=encoding utf-8
+
+=for stopwords
+CVE perlsecpolicy SV perl Perl SDBM HackerOne Mitre
+
+=head1 NAME
+
+perlsecpolicy - Perl security report handling policy
+
+=head1 DESCRIPTION
+
+The Perl project takes security issues seriously.
+
+The responsibility for handling security reports in a timely and
+effective manner has been delegated to a security team composed
+of a subset of the Perl core developers.
+
+This document describes how the Perl security team operates and
+how the team evaluates new security reports.
+
+=head1 REPORTING SECURITY ISSUES IN PERL
+
+If you believe you have found a security vulnerability in the Perl
+interpreter or modules maintained in the core Perl codebase,
+email the details to
+L<perl-security@perl.org|mailto:perl-security@perl.org>.
+This address is a closed membership mailing list monitored by the Perl
+security team.
+
+You should receive an initial response to your report within 72 hours.
+If you do not receive a response in that time, please contact
+the security team lead L<John Lightsey|mailto:john@04755.net> and
+the L<Perl steering council|mailto:steering-council@perl.org>.
+
+When members of the security team reply to your messages, they will
+generally include the perl-security@perl.org address in the "To" or "CC"
+fields of the response. This allows all of the security team to follow
+the discussion and chime in as needed. Use the "Reply-all" functionality
+of your email client when you send subsequent responses so that the
+entire security team receives the message.
+
+The security team will evaluate your report and make an initial
+determination of whether it is likely to fit the scope of issues the
+team handles. General guidelines about how this is determined are
+detailed in the L</WHAT ARE SECURITY ISSUES> section.
+
+If your report meets the team's criteria, an issue will be opened in the
+team's private issue tracker and you will be provided the issue's ID number.
+Issue identifiers have the form perl-security#NNN. Include this identifier
+with any subsequent messages you send.
+
+The security team will send periodic updates about the status of your
+issue and guide you through any further action that is required to complete
+the vulnerability remediation process. The stages vulnerabilities typically
+go through are explained in the L</HOW WE DEAL WITH SECURITY ISSUES>
+section.
+
+=head1 WHAT ARE SECURITY ISSUES
+
+A vulnerability is a behavior of a software system that compromises the
+system's expected confidentiality, integrity or availability protections.
+
+A security issue is a bug in one or more specific components of a software
+system that creates a vulnerability.
+
+Software written in the Perl programming language is typically composed
+of many layers of software written by many different groups. It can be
+very complicated to determine which specific layer of a complex real-world
+application was responsible for preventing a vulnerable behavior, but this
+is an essential part of fixing the vulnerability.
+
+=head2 Software covered by the Perl security team
+
+The Perl security team handles security issues in:
+
+=over
+
+=item *
+
+The Perl interpreter
+
+=item *
+
+The Perl modules shipped with the interpreter that are developed in the core
+Perl repository
+
+=item *
+
+The command line tools shipped with the interpreter that are developed in the
+core Perl repository
+
+=back
+
+Files under the F<cpan/> directory in Perl's repository and release tarballs are
+developed and maintained independently. The Perl security team does not handle
+security issues for these modules.
+
+=head2 Bugs that may qualify as security issues in Perl
+
+Perl is designed to be a fast and flexible general purpose programming
+language. The Perl interpreter and Perl modules make writing safe and
+secure applications easy, but they do have limitations.
+
+As a general rule, a bug in Perl needs to meet all of the following
+criteria to be considered a security issue:
+
+=over
+
+=item *
+
+The vulnerable behavior is not mentioned in Perl's documentation
+or public issue tracker.
+
+=item *
+
+The vulnerable behavior is not implied by an expected behavior.
+
+=item *
+
+The vulnerable behavior is not a generally accepted limitation of
+the implementation.
+
+=item *
+
+The vulnerable behavior is likely to be exposed to attack in
+otherwise secure applications written in Perl.
+
+=item *
+
+The vulnerable behavior provides a specific tangible benefit
+to an attacker that triggers the behavior.
+
+=back
+
+=head2 Bugs that do not qualify as security issues in Perl
+
+There are certain categories of bugs that are frequently reported to
+the security team that do not meet the criteria listed above.
+
+The following is a list of commonly reported bugs that are not
+handled as security issues.
+
+=head3 Feeding untrusted code to the interpreter
+
+The Perl parser is not designed to evaluate untrusted code.
+If your application requires the evaluation of untrusted code, it
+should rely on an operating system level sandbox for its security.
+
+=head3 Stack overflows due to excessive recursion
+
+Excessive recursion is often caused by code that does
+not enforce limits on inputs. The Perl interpreter assumes limits
+on recursion will be enforced by the application.
+
+=head3 Out of memory errors
+
+Common Perl constructs such as C<pack>, the C<x> operator,
+and regular expressions accept numeric quantifiers that control how
+much memory will be allocated to store intermediate values or results.
+If you allow an attacker to supply these quantifiers and consume all
+available memory, the Perl interpreter will not prevent it.
+
+=head3 Escape from a L<Safe> compartment
+
+L<Opcode> restrictions and L<Safe> compartments are not supported as
+security mechanisms. The Perl parser is not designed to evaluate
+untrusted code.
+
+=head3 Use of the C<p> and C<P> pack templates
+
+These templates are unsafe by design.
+
+=head3 Stack not reference-counted issues
+
+These bugs typically present as use-after-free errors or as assertion
+failures on the type of a C<SV>. Stack not reference-counted
+crashes usually occur because code is both modifying a reference or
+glob and using the values referenced by that glob or reference.
+
+This type of bug is a long standing issue with the Perl interpreter
+that seldom occurs in normal code. Examples of this type of bug
+generally assume that attacker-supplied code will be evaluated by
+the Perl interpreter.
+
+=head3 Thawing attacker-supplied data with L<Storable>
+
+L<Storable> is designed to be a very fast serialization format.
+It is not designed to be safe for deserializing untrusted inputs.
+
+=head3 Using attacker supplied L<SDBM_File> databases
+
+The L<SDBM_File> module is not intended for use with untrusted SDBM
+databases.
+
+=head3 Badly encoded UTF-8 flagged scalars
+
+This type of bug occurs when the C<:utf8> PerlIO layer is used to
+read badly encoded data, or other mechanisms are used to directly
+manipulate the UTF-8 flag on an SV.
+
+A badly encoded UTF-8 flagged SV is not a valid SV. Code that
+creates SV's in this fashion is corrupting Perl's internal state.
+
+=head3 Issues that exist only in blead, or in a release candidate
+
+The blead branch and Perl release candidates do not receive security
+support. Security defects that are present only in pre-release
+versions of Perl are handled through the normal bug reporting and
+resolution process.
+
+=head3 CPAN modules or other Perl project resources
+
+The Perl security team is focused on the Perl interpreter and modules
+maintained in the core Perl codebase. The team has no special access
+to fix CPAN modules, applications written in Perl, Perl project websites,
+Perl mailing lists or the Perl IRC servers.
+
+=head3 Emulated POSIX behaviors on Windows systems
+
+The Perl interpreter attempts to emulate C<fork>, C<system>, C<exec>
+and other POSIX behaviors on Windows systems. This emulation has many
+quirks that are extensively documented in Perl's public issue tracker.
+Changing these behaviors would cause significant disruption for existing
+users on Windows.
+
+=head2 Bugs that require special categorization
+
+Some bugs in the Perl interpreter occur in areas of the codebase that are
+both security sensitive and prone to failure during normal usage.
+
+=head3 Regular expressions
+
+Untrusted regular expressions are generally safe to compile and match against
+with several caveats. The following behaviors of Perl's regular expression
+engine are the developer's responsibility to constrain.
+
+The evaluation of untrusted regular expressions while C<use re 'eval';> is
+in effect is never safe.
+
+Regular expressions are not guaranteed to compile or evaluate in any specific
+finite time frame.
+
+Regular expressions may consume all available system memory when they are
+compiled or evaluated.
+
+Regular expressions may cause excessive recursion that halts the perl
+interpreter.
+
+As a general rule, do not expect Perl's regular expression engine to
+be resistant to denial of service attacks.
+
+=head3 L<DB_File>, L<ODBM_File>, or L<GDBM_File> databases
+
+These modules rely on external libraries to interact with database files.
+
+Bugs caused by reading and writing these file formats are generally caused
+by the underlying library implementation and are not security issues in
+Perl.
+
+Bugs where Perl mishandles unexpected valid return values from the underlying
+libraries may qualify as security issues in Perl.
+
+=head3 Algorithmic complexity attacks
+
+The perl interpreter is reasonably robust to algorithmic complexity
+attacks. It is not immune to them.
+
+Algorithmic complexity bugs that depend on the interpreter processing
+extremely large amounts of attacker supplied data are not generally handled
+as security issues.
+
+See L<perlsec/Algorithmic Complexity Attacks> for additional information.
+
+=head1 HOW WE DEAL WITH SECURITY ISSUES
+
+The Perl security team follows responsible disclosure practices. Security issues
+are kept secret until a fix is readily available for most users. This minimizes
+inherent risks users face from vulnerabilities in Perl.
+
+Hiding problems from the users temporarily is a necessary trade-off to keep
+them safe. Hiding problems from users permanently is not the goal.
+
+When you report a security issue privately to the
+L<perl-security@perl.org|mailto:perl-security@perl.org> contact address, we
+normally expect you to follow responsible disclosure practices in the handling
+of the report. If you are unable or unwilling to keep the issue secret until
+a fix is available to users you should state this clearly in the initial
+report.
+
+The security team's vulnerability remediation workflow is intended to be as
+open and transparent as possible about the state of your security report.
+
+=head2 Perl's vulnerability remediation workflow
+
+=head3 Initial contact
+
+New vulnerability reports will receive an initial reply within 72 hours
+from the time they arrive at the security team's mailing list. If you do
+not receive any response in that time, contact the security team lead
+L<John Lightsey|mailto:john@04755.net> and the the L<Perl steering
+council|mailto:steering-council@perl.org>.
+
+The initial response sent by the security team will confirm your message was
+received and provide an estimated time frame for the security team's
+triage analysis.
+
+=head3 Initial triage
+
+The security team will evaluate the report and determine whether or not
+it is likely to meet the criteria for handling as a security issue.
+
+The security team aims to complete the initial report triage within
+two weeks' time. Complex issues that require significant discussion or
+research may take longer.
+
+If the security report cannot be reproduced or does not meet the team's
+criteria for handling as a security issue, you will be notified by email
+and given an opportunity to respond.
+
+=head3 Issue ID assignment
+
+Security reports that pass initial triage analysis are turned into issues
+in the security team's private issue tracker. When a report progresses to
+this point you will be provided the issue ID for future reference. These
+identifiers have the format perl-security#NNN or Perl/perl-security#NNN.
+
+The assignment of an issue ID does not confirm that a security report
+represents a vulnerability in Perl. Many reports require further analysis
+to reach that determination.
+
+Issues in the security team's private tracker are used to collect details
+about the problem and track progress towards a resolution. These notes and
+other details are not made public when the issue is resolved. Keeping the
+issue notes private allows the security team to freely discuss attack
+methods, attack tools, and other related private issues.
+
+=head3 Development of patches
+
+Members of the security team will inspect the report and related code in
+detail to produce fixes for supported versions of Perl.
+
+If the team discovers that the reported issue does not meet the team's
+criteria at this stage, you will be notified by email and given an
+opportunity to respond before the issue is closed.
+
+The team may discuss potential fixes with you or provide you with
+patches for testing purposes during this time frame. No information
+should be shared publicly at this stage.
+
+=head3 CVE ID assignment
+
+Once an issue is fully confirmed and a potential fix has been found,
+the security team will request a CVE identifier for the issue to use
+in public announcements.
+
+Details like the range of vulnerable Perl versions and identities
+of the people that discovered the flaw need to be collected to submit
+the CVE ID request.
+
+The security team may ask you to clarify the exact name we should use
+when crediting discovery of the issue. The
+L</Vulnerability credit and bounties> section of this document
+explains our preferred format for this credit.
+
+Once a CVE ID has been assigned, you will be notified by email.
+The vulnerability should not be discussed publicly at this stage.
+
+=head3 Pre-release notifications
+
+When the security team is satisfied that the fix for a security issue
+is ready to release publicly, a pre-release notification
+announcement is sent to the major redistributors of Perl.
+
+This pre-release announcement includes a list of Perl versions that
+are affected by the flaw, an analysis of the risks to users, patches
+the security team has produced, and any information about mitigations
+or backporting fixes to older versions of Perl that the security team
+has available.
+
+The pre-release announcement will include a specific target date
+when the issue will be announced publicly. The time frame between
+the pre-release announcement and the release date allows redistributors
+to prepare and test their own updates and announcements. During this
+period the vulnerability details and fixes are embargoed and should not
+be shared publicly. This embargo period may be extended further if
+problems are discovered during testing.
+
+You will be sent the portions of pre-release announcements that are
+relevant to the specific issue you reported. This email will include
+the target release date. Additional updates will be sent if the
+target release date changes.
+
+=head3 Pre-release testing
+
+The Perl security team does not directly produce official Perl
+releases. The team releases security fixes by placing commits
+in Perl's public git repository and sending announcements.
+
+Many users and redistributors prefer using official Perl releases
+rather than applying patches to an older release. The security
+team works with Perl's release managers to make this possible.
+
+New official releases of Perl are generally produced and tested
+on private systems during the pre-release embargo period.
+
+=head3 Release of fixes and announcements
+
+At the end of the embargo period the security fixes will be
+committed to Perl's public git repository and announcements will be
+sent to the L<perl5-porters|https://lists.perl.org/list/perl5-porters.html>
+and L<oss-security|https://oss-security.openwall.org/wiki/mailing-lists/oss-security>
+mailing lists.
+
+If official Perl releases are ready, they will be published at this time
+and announced on the L<perl5-porters|https://lists.perl.org/list/perl5-porters.html>
+mailing list.
+
+The security team will send a follow-up notification to everyone that
+participated in the pre-release embargo period once the release process is
+finished. Vulnerability reporters and Perl redistributors should not publish
+their own announcements or fixes until the Perl security team's release process
+is complete.
+
+=head2 Publicly known and zero-day security issues
+
+The security team's vulnerability remediation workflow assumes that issues
+are reported privately and kept secret until they are resolved. This isn't
+always the case and information occasionally leaks out before a fix is ready.
+
+In these situations the team must decide whether operating in secret increases
+or decreases the risk to users of Perl. In some cases being open about
+the risk a security issue creates will allow users to defend against it,
+in other cases calling attention to an unresolved security issue will
+make it more likely to be misused.
+
+=head3 Zero-day security issues
+
+If an unresolved critical security issue in Perl is being actively abused to
+attack systems the security team will send out announcements as rapidly as
+possible with any mitigations the team has available.
+
+Perl's public defect tracker will be used to handle the issue so that additional
+information, fixes, and CVE IDs are visible to affected users as rapidly as
+possible.
+
+=head3 Other leaks of security issue information
+
+Depending on the prominence of the information revealed about a security
+issue and the issue's risk of becoming a zero-day attack, the security team may
+skip all or part of its normal remediation workflow.
+
+If the security team learns of a significant security issue after it has been
+identified and resolved in Perl's public issue tracker, the team will
+request a CVE ID and send an announcement to inform users.
+
+=head2 Vulnerability credit and bounties
+
+The Perl project appreciates the effort security researchers
+invest in making Perl safe and secure.
+
+Since much of this work is hidden from the public, crediting
+researchers publicly is an important part of the vulnerability
+remediation process.
+
+=head3 Credits in vulnerability announcements
+
+When security issues are fixed we will attempt to credit the specific
+researcher(s) that discovered the flaw in our announcements.
+
+Credits are announced using the researcher's preferred full name.
+
+If the researcher's contributions were funded by a specific company or
+part of an organized vulnerability research project, we will include
+a short name for this group at the researcher's request.
+
+Perl's announcements are written in the English language using the 7bit
+ASCII character set to be reproducible in a variety of formats. We
+do not include hyperlinks, domain names or marketing material with these
+acknowledgments.
+
+In the event that proper credit for vulnerability discovery cannot be
+established or there is a disagreement between the Perl security team
+and the researcher about how the credit should be given, it will be
+omitted from announcements.
+
+=head3 Bounties for Perl vulnerabilities
+
+The Perl project is a non-profit volunteer effort. We do not provide
+any monetary rewards for reporting security issues in Perl.
+
+The L<Internet Bug Bounty|https://internetbugbounty.org/> offers monetary
+rewards for some Perl security issues after they are fully resolved. The
+terms of this program are available at L<HackerOne|https://hackerone.com/ibb-perl>.
+
+This program is not run by the Perl project or the Perl security team.
+
+=cut
index 6d085aa..cf41900 100644 (file)
 /* If compiling for a threaded perl, we will macro-wrap the system/library
  * interfaces (e.g. getpwent()) which have threaded versions
  * (e.g. getpwent_r()), which will handle things correctly for
- * the Perl interpreter, but otherwise (for XS) the wrapping does
- * not take place.  See L<perlxs/Thread-aware system interfaces>.
+ * the Perl interpreter.  This is done automatically for the perl core and
+ * extensions, but not generally for XS modules unless they
+ *    #define PERL_REENTRANT
+ * See L<perlxs/Thread-aware system interfaces>.
+ *
+ * For a function 'foo', use the compile-time directive
+ *    #ifdef PERL_REENTR_USING_FOO_R
+ * to test if the function actually did get replaced by the reentrant version.
+ * (If it isn't getting replaced, it might mean it uses a different prototype
+ * on the given platform than any we are expecting.  To fix that, add the
+ * prototype to the __DATA__ section of regen/reentr.pl.)
  */
 
 #ifndef PERL_REENTR_API
-# if defined(PERL_CORE) || defined(PERL_EXT) || defined(PERL_REENTRANT)
-#  define PERL_REENTR_API 1
-# else
-#  define PERL_REENTR_API 0
-# endif
+#  if defined(PERL_CORE) || defined(PERL_EXT) || defined(PERL_REENTRANT)
+#    define PERL_REENTR_API 1
+#  else
+#    define PERL_REENTR_API 0
+#  endif
 #endif
 
 #ifdef USE_REENTRANT_API
+
 /* Deprecations: some platforms have the said reentrant interfaces
  * but they are declared obsolete and are not to be used.  Often this
  * means that the platform has threadsafed the interfaces (hopefully).
  * If you know of more deprecations on some platforms, please add your own
  * (by editing reentr.pl, mind!) */
 
-#ifdef __hpux
-#   undef HAS_CRYPT_R
-#   undef HAS_ENDGRENT_R
-#   undef HAS_ENDPWENT_R
-#   undef HAS_GETGRENT_R
-#   undef HAS_GETPWENT_R
-#   undef HAS_SETLOCALE_R
-#   undef HAS_STRERROR_R
-#   define NETDB_R_OBSOLETE
-#endif
+#  ifdef __hpux
+#    undef HAS_CRYPT_R
+#    undef HAS_ENDGRENT_R
+#    undef HAS_ENDPWENT_R
+#    undef HAS_GETGRENT_R
+#    undef HAS_GETPWENT_R
+#    undef HAS_SETLOCALE_R
+#    undef HAS_STRERROR_R
+#    define NETDB_R_OBSOLETE
+#  endif
 
-#if defined(__osf__) && defined(__alpha) /* Tru64 aka Digital UNIX */
-#   undef HAS_CRYPT_R
-#   undef HAS_STRERROR_R
-#   define NETDB_R_OBSOLETE
-#endif
+#  if defined(__osf__) && defined(__alpha) /* Tru64 aka Digital UNIX */
+#    undef HAS_CRYPT_R
+#    undef HAS_STRERROR_R
+#    define NETDB_R_OBSOLETE
+#  endif
 
-#if defined(__GLIBC__) && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 24))
-#   undef HAS_READDIR_R
-#   undef HAS_READDIR64_R
-#endif
+#  if defined(__GLIBC__) && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 24))
+#    undef HAS_READDIR_R
+#    undef HAS_READDIR64_R
+#  endif
 
 /*
  * As of OpenBSD 3.7, reentrant functions are now working, they just are
  * incompatible with everyone else.  To make OpenBSD happy, we have to
  * memzero out certain structures before calling the functions.
  */
-#if defined(__OpenBSD__)
+#  if defined(__OpenBSD__)
 #    define REENTR_MEMZERO(a,b) memzero(a,b)
-#else
+#  else
 #    define REENTR_MEMZERO(a,b) 0
-#endif 
-
-#ifdef NETDB_R_OBSOLETE
-#   undef HAS_ENDHOSTENT_R
-#   undef HAS_ENDNETENT_R
-#   undef HAS_ENDPROTOENT_R
-#   undef HAS_ENDSERVENT_R
-#   undef HAS_GETHOSTBYADDR_R
-#   undef HAS_GETHOSTBYNAME_R
-#   undef HAS_GETHOSTENT_R
-#   undef HAS_GETNETBYADDR_R
-#   undef HAS_GETNETBYNAME_R
-#   undef HAS_GETNETENT_R
-#   undef HAS_GETPROTOBYNAME_R
-#   undef HAS_GETPROTOBYNUMBER_R
-#   undef HAS_GETPROTOENT_R
-#   undef HAS_GETSERVBYNAME_R
-#   undef HAS_GETSERVBYPORT_R
-#   undef HAS_GETSERVENT_R
-#   undef HAS_SETHOSTENT_R
-#   undef HAS_SETNETENT_R
-#   undef HAS_SETPROTOENT_R
-#   undef HAS_SETSERVENT_R
-#endif
+#  endif
 
-#ifdef I_PWD
-#   include <pwd.h>
-#endif
-#ifdef I_GRP
-#   include <grp.h>
-#endif
-#ifdef I_NETDB
-#   include <netdb.h>
-#endif
-#ifdef I_CRYPT
-#   ifdef I_CRYPT
-#       include <crypt.h>
-#   endif
-#endif
-#ifdef HAS_GETSPNAM_R
-#   ifdef I_SHADOW
-#       include <shadow.h>
-#   endif
-#endif
+#  ifdef NETDB_R_OBSOLETE
+#    undef HAS_ENDHOSTENT_R
+#    undef HAS_ENDNETENT_R
+#    undef HAS_ENDPROTOENT_R
+#    undef HAS_ENDSERVENT_R
+#    undef HAS_GETHOSTBYADDR_R
+#    undef HAS_GETHOSTBYNAME_R
+#    undef HAS_GETHOSTENT_R
+#    undef HAS_GETNETBYADDR_R
+#    undef HAS_GETNETBYNAME_R
+#    undef HAS_GETNETENT_R
+#    undef HAS_GETPROTOBYNAME_R
+#    undef HAS_GETPROTOBYNUMBER_R
+#    undef HAS_GETPROTOENT_R
+#    undef HAS_GETSERVBYNAME_R
+#    undef HAS_GETSERVBYPORT_R
+#    undef HAS_GETSERVENT_R
+#    undef HAS_SETHOSTENT_R
+#    undef HAS_SETNETENT_R
+#    undef HAS_SETPROTOENT_R
+#    undef HAS_SETSERVENT_R
+#  endif
 
-#define REENTRANT_PROTO_B_B    1
-#define REENTRANT_PROTO_B_BI   2
-#define REENTRANT_PROTO_B_BW   3
-#define REENTRANT_PROTO_B_CCD  4
-#define REENTRANT_PROTO_B_CCS  5
-#define REENTRANT_PROTO_B_IBI  6
-#define REENTRANT_PROTO_B_IBW  7
-#define REENTRANT_PROTO_B_SB   8
-#define REENTRANT_PROTO_B_SBI  9
-#define REENTRANT_PROTO_I_BI   10
-#define REENTRANT_PROTO_I_BW   11
-#define REENTRANT_PROTO_I_CCSBWR       12
-#define REENTRANT_PROTO_I_CCSD 13
-#define REENTRANT_PROTO_I_CII  14
-#define REENTRANT_PROTO_I_CIISD        15
-#define REENTRANT_PROTO_I_CSBI 16
-#define REENTRANT_PROTO_I_CSBIR        17
-#define REENTRANT_PROTO_I_CSBWR        18
-#define REENTRANT_PROTO_I_CSBWRE       19
-#define REENTRANT_PROTO_I_CSD  20
-#define REENTRANT_PROTO_I_CWISBWRE     21
-#define REENTRANT_PROTO_I_CWISD        22
-#define REENTRANT_PROTO_I_D    23
-#define REENTRANT_PROTO_I_H    24
-#define REENTRANT_PROTO_I_IBI  25
-#define REENTRANT_PROTO_I_IBW  26
-#define REENTRANT_PROTO_I_ICBI 27
-#define REENTRANT_PROTO_I_ICSBWR       28
-#define REENTRANT_PROTO_I_ICSD 29
-#define REENTRANT_PROTO_I_ID   30
-#define REENTRANT_PROTO_I_IISD 31
-#define REENTRANT_PROTO_I_ISBWR        32
-#define REENTRANT_PROTO_I_ISD  33
-#define REENTRANT_PROTO_I_LISBI        34
-#define REENTRANT_PROTO_I_LISD 35
-#define REENTRANT_PROTO_I_SB   36
-#define REENTRANT_PROTO_I_SBI  37
-#define REENTRANT_PROTO_I_SBIE 38
-#define REENTRANT_PROTO_I_SBIH 39
-#define REENTRANT_PROTO_I_SBIR 40
-#define REENTRANT_PROTO_I_SBWR 41
-#define REENTRANT_PROTO_I_SBWRE        42
-#define REENTRANT_PROTO_I_SD   43
-#define REENTRANT_PROTO_I_TISD 44
-#define REENTRANT_PROTO_I_TS   45
-#define REENTRANT_PROTO_I_TSBI 46
-#define REENTRANT_PROTO_I_TSBIR        47
-#define REENTRANT_PROTO_I_TSBWR        48
-#define REENTRANT_PROTO_I_TSR  49
-#define REENTRANT_PROTO_I_TsISBWRE     50
-#define REENTRANT_PROTO_I_UISBWRE      51
-#define REENTRANT_PROTO_I_uISBWRE      52
-#define REENTRANT_PROTO_S_CBI  53
-#define REENTRANT_PROTO_S_CCSBI        54
-#define REENTRANT_PROTO_S_CIISBIE      55
-#define REENTRANT_PROTO_S_CSBI 56
-#define REENTRANT_PROTO_S_CSBIE        57
-#define REENTRANT_PROTO_S_CWISBIE      58
-#define REENTRANT_PROTO_S_CWISBWIE     59
-#define REENTRANT_PROTO_S_ICSBI        60
-#define REENTRANT_PROTO_S_ISBI 61
-#define REENTRANT_PROTO_S_LISBI        62
-#define REENTRANT_PROTO_S_SBI  63
-#define REENTRANT_PROTO_S_SBIE 64
-#define REENTRANT_PROTO_S_SBW  65
-#define REENTRANT_PROTO_S_TISBI        66
-#define REENTRANT_PROTO_S_TSBI 67
-#define REENTRANT_PROTO_S_TSBIE        68
-#define REENTRANT_PROTO_S_TWISBIE      69
-#define REENTRANT_PROTO_V_D    70
-#define REENTRANT_PROTO_V_H    71
-#define REENTRANT_PROTO_V_ID   72
+#  ifdef I_PWD
+#    include <pwd.h>
+#  endif
+#  ifdef I_GRP
+#    include <grp.h>
+#  endif
+#  ifdef I_NETDB
+#    include <netdb.h>
+#  endif
+#  ifdef I_CRYPT
+#    ifdef I_CRYPT
+#      include <crypt.h>
+#    endif
+#  endif
+#  ifdef HAS_GETSPNAM_R
+#    ifdef I_SHADOW
+#      include <shadow.h>
+#    endif
+#  endif
+
+#  define REENTRANT_PROTO_B_B  1
+#  define REENTRANT_PROTO_B_BI 2
+#  define REENTRANT_PROTO_B_BW 3
+#  define REENTRANT_PROTO_B_CCD        4
+#  define REENTRANT_PROTO_B_CCS        5
+#  define REENTRANT_PROTO_B_IBI        6
+#  define REENTRANT_PROTO_B_IBW        7
+#  define REENTRANT_PROTO_B_SB 8
+#  define REENTRANT_PROTO_B_SBI        9
+#  define REENTRANT_PROTO_I_BI 10
+#  define REENTRANT_PROTO_I_BW 11
+#  define REENTRANT_PROTO_I_CCSBWR     12
+#  define REENTRANT_PROTO_I_CCSD       13
+#  define REENTRANT_PROTO_I_CII        14
+#  define REENTRANT_PROTO_I_CIISD      15
+#  define REENTRANT_PROTO_I_CSBI       16
+#  define REENTRANT_PROTO_I_CSBIR      17
+#  define REENTRANT_PROTO_I_CSBWR      18
+#  define REENTRANT_PROTO_I_CSBWRE     19
+#  define REENTRANT_PROTO_I_CSD        20
+#  define REENTRANT_PROTO_I_CWISBWRE   21
+#  define REENTRANT_PROTO_I_CWISD      22
+#  define REENTRANT_PROTO_I_D  23
+#  define REENTRANT_PROTO_I_H  24
+#  define REENTRANT_PROTO_I_IBI        25
+#  define REENTRANT_PROTO_I_IBW        26
+#  define REENTRANT_PROTO_I_ICBI       27
+#  define REENTRANT_PROTO_I_ICSBWR     28
+#  define REENTRANT_PROTO_I_ICSD       29
+#  define REENTRANT_PROTO_I_ID 30
+#  define REENTRANT_PROTO_I_IISD       31
+#  define REENTRANT_PROTO_I_ISBWR      32
+#  define REENTRANT_PROTO_I_ISD        33
+#  define REENTRANT_PROTO_I_LISBI      34
+#  define REENTRANT_PROTO_I_LISD       35
+#  define REENTRANT_PROTO_I_SB 36
+#  define REENTRANT_PROTO_I_SBI        37
+#  define REENTRANT_PROTO_I_SBIE       38
+#  define REENTRANT_PROTO_I_SBIH       39
+#  define REENTRANT_PROTO_I_SBIR       40
+#  define REENTRANT_PROTO_I_SBWR       41
+#  define REENTRANT_PROTO_I_SBWRE      42
+#  define REENTRANT_PROTO_I_SD 43
+#  define REENTRANT_PROTO_I_TISD       44
+#  define REENTRANT_PROTO_I_TS 45
+#  define REENTRANT_PROTO_I_TSBI       46
+#  define REENTRANT_PROTO_I_TSBIR      47
+#  define REENTRANT_PROTO_I_TSBWR      48
+#  define REENTRANT_PROTO_I_TSR        49
+#  define REENTRANT_PROTO_I_TsISBWRE   50
+#  define REENTRANT_PROTO_I_UISBWRE    51
+#  define REENTRANT_PROTO_I_uISBWRE    52
+#  define REENTRANT_PROTO_S_CBI        53
+#  define REENTRANT_PROTO_S_CCSBI      54
+#  define REENTRANT_PROTO_S_CIISBIE    55
+#  define REENTRANT_PROTO_S_CSBI       56
+#  define REENTRANT_PROTO_S_CSBIE      57
+#  define REENTRANT_PROTO_S_CWISBIE    58
+#  define REENTRANT_PROTO_S_CWISBWIE   59
+#  define REENTRANT_PROTO_S_ICSBI      60
+#  define REENTRANT_PROTO_S_ISBI       61
+#  define REENTRANT_PROTO_S_LISBI      62
+#  define REENTRANT_PROTO_S_SBI        63
+#  define REENTRANT_PROTO_S_SBIE       64
+#  define REENTRANT_PROTO_S_SBW        65
+#  define REENTRANT_PROTO_S_TISBI      66
+#  define REENTRANT_PROTO_S_TS 67
+#  define REENTRANT_PROTO_S_TSBI       68
+#  define REENTRANT_PROTO_S_TSBIE      69
+#  define REENTRANT_PROTO_S_TWISBIE    70
+#  define REENTRANT_PROTO_V_D  71
+#  define REENTRANT_PROTO_V_H  72
+#  define REENTRANT_PROTO_V_ID 73
 
 /* Defines for indicating which special features are supported. */
 
 /* The getgrent getgrgid getgrnam using buffer? */
 
-#if defined(HAS_GETGRENT_R) && (GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBWR || GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBIR || GETGRENT_R_PROTO == REENTRANT_PROTO_S_SBW || GETGRENT_R_PROTO == REENTRANT_PROTO_S_SBI || GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBI || GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBIH)
-#   define GETGRENT_R_HAS_BUFFER
-#else
-#   undef  GETGRENT_R_HAS_BUFFER
-#endif
-#if defined(HAS_GETGRGID_R) && (GETGRGID_R_PROTO == REENTRANT_PROTO_I_TSBWR || GETGRGID_R_PROTO == REENTRANT_PROTO_I_TSBIR || GETGRGID_R_PROTO == REENTRANT_PROTO_I_TSBI || GETGRGID_R_PROTO == REENTRANT_PROTO_S_TSBI)
-#   define GETGRGID_R_HAS_BUFFER
-#else
-#   undef  GETGRGID_R_HAS_BUFFER
-#endif
-#if defined(HAS_GETGRNAM_R) && (GETGRNAM_R_PROTO == REENTRANT_PROTO_I_CSBWR || GETGRNAM_R_PROTO == REENTRANT_PROTO_I_CSBIR || GETGRNAM_R_PROTO == REENTRANT_PROTO_S_CBI || GETGRNAM_R_PROTO == REENTRANT_PROTO_I_CSBI || GETGRNAM_R_PROTO == REENTRANT_PROTO_S_CSBI)
-#   define GETGRNAM_R_HAS_BUFFER
-#else
-#   undef  GETGRNAM_R_HAS_BUFFER
-#endif
+#  if defined(HAS_GETGRENT_R) && (GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBWR || GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBIR || GETGRENT_R_PROTO == REENTRANT_PROTO_S_SBW || GETGRENT_R_PROTO == REENTRANT_PROTO_S_SBI || GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBI || GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBIH)
+#    define GETGRENT_R_HAS_BUFFER
+#  else
+#    undef  GETGRENT_R_HAS_BUFFER
+#  endif
+#  if defined(HAS_GETGRGID_R) && (GETGRGID_R_PROTO == REENTRANT_PROTO_I_TSBWR || GETGRGID_R_PROTO == REENTRANT_PROTO_I_TSBIR || GETGRGID_R_PROTO == REENTRANT_PROTO_I_TSBI || GETGRGID_R_PROTO == REENTRANT_PROTO_S_TSBI)
+#    define GETGRGID_R_HAS_BUFFER
+#  else
+#    undef  GETGRGID_R_HAS_BUFFER
+#  endif
+#  if defined(HAS_GETGRNAM_R) && (GETGRNAM_R_PROTO == REENTRANT_PROTO_I_CSBWR || GETGRNAM_R_PROTO == REENTRANT_PROTO_I_CSBIR || GETGRNAM_R_PROTO == REENTRANT_PROTO_S_CBI || GETGRNAM_R_PROTO == REENTRANT_PROTO_I_CSBI || GETGRNAM_R_PROTO == REENTRANT_PROTO_S_CSBI)
+#    define GETGRNAM_R_HAS_BUFFER
+#  else
+#    undef  GETGRNAM_R_HAS_BUFFER
+#  endif
 
 /* Any of the getgrent getgrgid getgrnam using buffer? */
 
-#if (defined(GETGRENT_R_HAS_BUFFER) || defined(GETGRGID_R_HAS_BUFFER) || defined(GETGRNAM_R_HAS_BUFFER))
-#   define USE_GRENT_BUFFER
-#else
-#   undef  USE_GRENT_BUFFER
-#endif
+#  if (defined(GETGRENT_R_HAS_BUFFER) || defined(GETGRGID_R_HAS_BUFFER) || defined(GETGRNAM_R_HAS_BUFFER))
+#    define USE_GRENT_BUFFER
+#  else
+#    undef  USE_GRENT_BUFFER
+#  endif
 
 /* The getgrent getgrgid getgrnam using ptr? */
 
-#if defined(HAS_GETGRENT_R) && (GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBWR || GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBIR)
-#   define GETGRENT_R_HAS_PTR
-#else
-#   undef  GETGRENT_R_HAS_PTR
-#endif
-#if defined(HAS_GETGRGID_R) && (GETGRGID_R_PROTO == REENTRANT_PROTO_I_TSBWR || GETGRGID_R_PROTO == REENTRANT_PROTO_I_TSBIR)
-#   define GETGRGID_R_HAS_PTR
-#else
-#   undef  GETGRGID_R_HAS_PTR
-#endif
-#if defined(HAS_GETGRNAM_R) && (GETGRNAM_R_PROTO == REENTRANT_PROTO_I_CSBWR || GETGRNAM_R_PROTO == REENTRANT_PROTO_I_CSBIR)
-#   define GETGRNAM_R_HAS_PTR
-#else
-#   undef  GETGRNAM_R_HAS_PTR
-#endif
+#  if defined(HAS_GETGRENT_R) && (GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBWR || GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBIR)
+#    define GETGRENT_R_HAS_PTR
+#  else
+#    undef  GETGRENT_R_HAS_PTR
+#  endif
+#  if defined(HAS_GETGRGID_R) && (GETGRGID_R_PROTO == REENTRANT_PROTO_I_TSBWR || GETGRGID_R_PROTO == REENTRANT_PROTO_I_TSBIR)
+#    define GETGRGID_R_HAS_PTR
+#  else
+#    undef  GETGRGID_R_HAS_PTR
+#  endif
+#  if defined(HAS_GETGRNAM_R) && (GETGRNAM_R_PROTO == REENTRANT_PROTO_I_CSBWR || GETGRNAM_R_PROTO == REENTRANT_PROTO_I_CSBIR)
+#    define GETGRNAM_R_HAS_PTR
+#  else
+#    undef  GETGRNAM_R_HAS_PTR
+#  endif
 
 /* Any of the getgrent getgrgid getgrnam using ptr? */
 
-#if (defined(GETGRENT_R_HAS_PTR) || defined(GETGRGID_R_HAS_PTR) || defined(GETGRNAM_R_HAS_PTR))
-#   define USE_GRENT_PTR
-#else
-#   undef  USE_GRENT_PTR
-#endif
+#  if (defined(GETGRENT_R_HAS_PTR) || defined(GETGRGID_R_HAS_PTR) || defined(GETGRNAM_R_HAS_PTR))
+#    define USE_GRENT_PTR
+#  else
+#    undef  USE_GRENT_PTR
+#  endif
 
 /* The getpwent getpwnam getpwuid using ptr? */
 
-#if defined(HAS_GETPWENT_R) && (GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBWR || GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBIR)
-#   define GETPWENT_R_HAS_PTR
-#else
-#   undef  GETPWENT_R_HAS_PTR
-#endif
-#if defined(HAS_GETPWNAM_R) && (GETPWNAM_R_PROTO == REENTRANT_PROTO_I_CSBWR || GETPWNAM_R_PROTO == REENTRANT_PROTO_I_CSBIR)
-#   define GETPWNAM_R_HAS_PTR
-#else
-#   undef  GETPWNAM_R_HAS_PTR
-#endif
-#if defined(HAS_GETPWUID_R) && (GETPWUID_R_PROTO == REENTRANT_PROTO_I_TSBWR || GETPWUID_R_PROTO == REENTRANT_PROTO_I_TSBIR)
-#   define GETPWUID_R_HAS_PTR
-#else
-#   undef  GETPWUID_R_HAS_PTR
-#endif
+#  if defined(HAS_GETPWENT_R) && (GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBWR || GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBIR)
+#    define GETPWENT_R_HAS_PTR
+#  else
+#    undef  GETPWENT_R_HAS_PTR
+#  endif
+#  if defined(HAS_GETPWNAM_R) && (GETPWNAM_R_PROTO == REENTRANT_PROTO_I_CSBWR || GETPWNAM_R_PROTO == REENTRANT_PROTO_I_CSBIR)
+#    define GETPWNAM_R_HAS_PTR
+#  else
+#    undef  GETPWNAM_R_HAS_PTR
+#  endif
+#  if defined(HAS_GETPWUID_R) && (GETPWUID_R_PROTO == REENTRANT_PROTO_I_TSBWR || GETPWUID_R_PROTO == REENTRANT_PROTO_I_TSBIR)
+#    define GETPWUID_R_HAS_PTR
+#  else
+#    undef  GETPWUID_R_HAS_PTR
+#  endif
 
 /* Any of the getpwent getpwnam getpwuid using ptr? */
 
-#if (defined(GETPWENT_R_HAS_PTR) || defined(GETPWNAM_R_HAS_PTR) || defined(GETPWUID_R_HAS_PTR))
-#   define USE_PWENT_PTR
-#else
-#   undef  USE_PWENT_PTR
-#endif
+#  if (defined(GETPWENT_R_HAS_PTR) || defined(GETPWNAM_R_HAS_PTR) || defined(GETPWUID_R_HAS_PTR))
+#    define USE_PWENT_PTR
+#  else
+#    undef  USE_PWENT_PTR
+#  endif
 
 /* The getspent getspnam using ptr? */
 
-#if defined(HAS_GETSPNAM_R) && (GETSPNAM_R_PROTO == REENTRANT_PROTO_I_CSBWR)
-#   define GETSPNAM_R_HAS_PTR
-#else
-#   undef  GETSPNAM_R_HAS_PTR
-#endif
+#  if defined(HAS_GETSPNAM_R) && (GETSPNAM_R_PROTO == REENTRANT_PROTO_I_CSBWR)
+#    define GETSPNAM_R_HAS_PTR
+#  else
+#    undef  GETSPNAM_R_HAS_PTR
+#  endif
 
 /* Any of the getspent getspnam using ptr? */
 
-#if (defined(GETSPENT_R_HAS_PTR) || defined(GETSPNAM_R_HAS_PTR))
-#   define USE_SPENT_PTR
-#else
-#   undef  USE_SPENT_PTR
-#endif
+#  if (defined(GETSPENT_R_HAS_PTR) || defined(GETSPNAM_R_HAS_PTR))
+#    define USE_SPENT_PTR
+#  else
+#    undef  USE_SPENT_PTR
+#  endif
 
 /* The getgrent getgrgid getgrnam setgrent endgrent using fptr? */
 
-#if defined(HAS_GETGRENT_R) && (GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBIH)
-#   define GETGRENT_R_HAS_FPTR
-#else
-#   undef  GETGRENT_R_HAS_FPTR
-#endif
-#if defined(HAS_SETGRENT_R) && (SETGRENT_R_PROTO == REENTRANT_PROTO_I_H || SETGRENT_R_PROTO == REENTRANT_PROTO_V_H)
-#   define SETGRENT_R_HAS_FPTR
-#else
-#   undef  SETGRENT_R_HAS_FPTR
-#endif
-#if defined(HAS_ENDGRENT_R) && (ENDGRENT_R_PROTO == REENTRANT_PROTO_I_H || ENDGRENT_R_PROTO == REENTRANT_PROTO_V_H)
-#   define ENDGRENT_R_HAS_FPTR
-#else
-#   undef  ENDGRENT_R_HAS_FPTR
-#endif
+#  if defined(HAS_GETGRENT_R) && (GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBIH)
+#    define GETGRENT_R_HAS_FPTR
+#  else
+#    undef  GETGRENT_R_HAS_FPTR
+#  endif
+#  if defined(HAS_SETGRENT_R) && (SETGRENT_R_PROTO == REENTRANT_PROTO_I_H || SETGRENT_R_PROTO == REENTRANT_PROTO_V_H)
+#    define SETGRENT_R_HAS_FPTR
+#  else
+#    undef  SETGRENT_R_HAS_FPTR
+#  endif
+#  if defined(HAS_ENDGRENT_R) && (ENDGRENT_R_PROTO == REENTRANT_PROTO_I_H || ENDGRENT_R_PROTO == REENTRANT_PROTO_V_H)
+#    define ENDGRENT_R_HAS_FPTR
+#  else
+#    undef  ENDGRENT_R_HAS_FPTR
+#  endif
 
 /* Any of the getgrent getgrgid getgrnam setgrent endgrent using fptr? */
 
-#if (defined(GETGRENT_R_HAS_FPTR) || defined(GETGRGID_R_HAS_FPTR) || defined(GETGRNAM_R_HAS_FPTR) || defined(SETGRENT_R_HAS_FPTR) || defined(ENDGRENT_R_HAS_FPTR))
-#   define USE_GRENT_FPTR
-#else
-#   undef  USE_GRENT_FPTR
-#endif
+#  if (defined(GETGRENT_R_HAS_FPTR) || defined(GETGRGID_R_HAS_FPTR) || defined(GETGRNAM_R_HAS_FPTR) || defined(SETGRENT_R_HAS_FPTR) || defined(ENDGRENT_R_HAS_FPTR))
+#    define USE_GRENT_FPTR
+#  else
+#    undef  USE_GRENT_FPTR
+#  endif
 
 /* The getpwent getpwnam getpwuid setpwent endpwent using fptr? */
 
-#if defined(HAS_GETPWENT_R) && (GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBIH)
-#   define GETPWENT_R_HAS_FPTR
-#else
-#   undef  GETPWENT_R_HAS_FPTR
-#endif
-#if defined(HAS_SETPWENT_R) && (SETPWENT_R_PROTO == REENTRANT_PROTO_I_H || SETPWENT_R_PROTO == REENTRANT_PROTO_V_H)
-#   define SETPWENT_R_HAS_FPTR
-#else
-#   undef  SETPWENT_R_HAS_FPTR
-#endif
-#if defined(HAS_ENDPWENT_R) && (ENDPWENT_R_PROTO == REENTRANT_PROTO_I_H || ENDPWENT_R_PROTO == REENTRANT_PROTO_V_H)
-#   define ENDPWENT_R_HAS_FPTR
-#else
-#   undef  ENDPWENT_R_HAS_FPTR
-#endif
+#  if defined(HAS_GETPWENT_R) && (GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBIH)
+#    define GETPWENT_R_HAS_FPTR
+#  else
+#    undef  GETPWENT_R_HAS_FPTR
+#  endif
+#  if defined(HAS_SETPWENT_R) && (SETPWENT_R_PROTO == REENTRANT_PROTO_I_H || SETPWENT_R_PROTO == REENTRANT_PROTO_V_H)
+#    define SETPWENT_R_HAS_FPTR
+#  else
+#    undef  SETPWENT_R_HAS_FPTR
+#  endif
+#  if defined(HAS_ENDPWENT_R) && (ENDPWENT_R_PROTO == REENTRANT_PROTO_I_H || ENDPWENT_R_PROTO == REENTRANT_PROTO_V_H)
+#    define ENDPWENT_R_HAS_FPTR
+#  else
+#    undef  ENDPWENT_R_HAS_FPTR
+#  endif
 
 /* Any of the getpwent getpwnam getpwuid setpwent endpwent using fptr? */
 
-#if (defined(GETPWENT_R_HAS_FPTR) || defined(GETPWNAM_R_HAS_FPTR) || defined(GETPWUID_R_HAS_FPTR) || defined(SETPWENT_R_HAS_FPTR) || defined(ENDPWENT_R_HAS_FPTR))
-#   define USE_PWENT_FPTR
-#else
-#   undef  USE_PWENT_FPTR
-#endif
+#  if (defined(GETPWENT_R_HAS_FPTR) || defined(GETPWNAM_R_HAS_FPTR) || defined(GETPWUID_R_HAS_FPTR) || defined(SETPWENT_R_HAS_FPTR) || defined(ENDPWENT_R_HAS_FPTR))
+#    define USE_PWENT_FPTR
+#  else
+#    undef  USE_PWENT_FPTR
+#  endif
 
 /* The getpwent getpwgid getpwnam using buffer? */
 
-#if defined(HAS_GETPWENT_R) && (GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBWR || GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBIR || GETPWENT_R_PROTO == REENTRANT_PROTO_S_SBW || GETPWENT_R_PROTO == REENTRANT_PROTO_S_SBI || GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBI || GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBIH)
-#   define GETPWENT_R_HAS_BUFFER
-#else
-#   undef  GETPWENT_R_HAS_BUFFER
-#endif
-#if defined(HAS_GETPWNAM_R) && (GETPWNAM_R_PROTO == REENTRANT_PROTO_I_CSBWR || GETPWNAM_R_PROTO == REENTRANT_PROTO_I_CSBIR || GETPWNAM_R_PROTO == REENTRANT_PROTO_S_CSBI || GETPWNAM_R_PROTO == REENTRANT_PROTO_I_CSBI)
-#   define GETPWNAM_R_HAS_BUFFER
-#else
-#   undef  GETPWNAM_R_HAS_BUFFER
-#endif
+#  if defined(HAS_GETPWENT_R) && (GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBWR || GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBIR || GETPWENT_R_PROTO == REENTRANT_PROTO_S_SBW || GETPWENT_R_PROTO == REENTRANT_PROTO_S_SBI || GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBI || GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBIH)
+#    define GETPWENT_R_HAS_BUFFER
+#  else
+#    undef  GETPWENT_R_HAS_BUFFER
+#  endif
+#  if defined(HAS_GETPWNAM_R) && (GETPWNAM_R_PROTO == REENTRANT_PROTO_I_CSBWR || GETPWNAM_R_PROTO == REENTRANT_PROTO_I_CSBIR || GETPWNAM_R_PROTO == REENTRANT_PROTO_S_CSBI || GETPWNAM_R_PROTO == REENTRANT_PROTO_I_CSBI)
+#    define GETPWNAM_R_HAS_BUFFER
+#  else
+#    undef  GETPWNAM_R_HAS_BUFFER
+#  endif
 
 /* Any of the getpwent getpwgid getpwnam using buffer? */
 
-#if (defined(GETPWENT_R_HAS_BUFFER) || defined(GETPWGID_R_HAS_BUFFER) || defined(GETPWNAM_R_HAS_BUFFER))
-#   define USE_PWENT_BUFFER
-#else
-#   undef  USE_PWENT_BUFFER
-#endif
+#  if (defined(GETPWENT_R_HAS_BUFFER) || defined(GETPWGID_R_HAS_BUFFER) || defined(GETPWNAM_R_HAS_BUFFER))
+#    define USE_PWENT_BUFFER
+#  else
+#    undef  USE_PWENT_BUFFER
+#  endif
+
+/* The getspent getspnam using buffer? */
+
+#  if defined(HAS_GETSPNAM_R) && (GETSPNAM_R_PROTO == REENTRANT_PROTO_I_CSBWR || GETSPNAM_R_PROTO == REENTRANT_PROTO_S_CSBI)
+#    define GETSPNAM_R_HAS_BUFFER
+#  else
+#    undef  GETSPNAM_R_HAS_BUFFER
+#  endif
+
+/* Any of the getspent getspnam using buffer? */
+
+#  if (defined(GETSPENT_R_HAS_BUFFER) || defined(GETSPNAM_R_HAS_BUFFER))
+#    define USE_SPENT_BUFFER
+#  else
+#    undef  USE_SPENT_BUFFER
+#  endif
 
 /* The gethostent gethostbyaddr gethostbyname using ptr? */
 
-#if defined(HAS_GETHOSTENT_R) && (GETHOSTENT_R_PROTO == REENTRANT_PROTO_I_SBWRE)
-#   define GETHOSTENT_R_HAS_PTR
-#else
-#   undef  GETHOSTENT_R_HAS_PTR
-#endif
-#if defined(HAS_GETHOSTBYADDR_R) && (GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_CWISBWRE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_TsISBWRE)
-#   define GETHOSTBYADDR_R_HAS_PTR
-#else
-#   undef  GETHOSTBYADDR_R_HAS_PTR
-#endif
-#if defined(HAS_GETHOSTBYNAME_R) && (GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWRE)
-#   define GETHOSTBYNAME_R_HAS_PTR
-#else
-#   undef  GETHOSTBYNAME_R_HAS_PTR
-#endif
+#  if defined(HAS_GETHOSTENT_R) && (GETHOSTENT_R_PROTO == REENTRANT_PROTO_I_SBWRE)
+#    define GETHOSTENT_R_HAS_PTR
+#  else
+#    undef  GETHOSTENT_R_HAS_PTR
+#  endif
+#  if defined(HAS_GETHOSTBYADDR_R) && (GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_CWISBWRE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_TsISBWRE)
+#    define GETHOSTBYADDR_R_HAS_PTR
+#  else
+#    undef  GETHOSTBYADDR_R_HAS_PTR
+#  endif
+#  if defined(HAS_GETHOSTBYNAME_R) && (GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWRE)
+#    define GETHOSTBYNAME_R_HAS_PTR
+#  else
+#    undef  GETHOSTBYNAME_R_HAS_PTR
+#  endif
 
 /* Any of the gethostent gethostbyaddr gethostbyname using ptr? */
 
-#if (defined(GETHOSTENT_R_HAS_PTR) || defined(GETHOSTBYADDR_R_HAS_PTR) || defined(GETHOSTBYNAME_R_HAS_PTR))
-#   define USE_HOSTENT_PTR
-#else
-#   undef  USE_HOSTENT_PTR
-#endif
+#  if (defined(GETHOSTENT_R_HAS_PTR) || defined(GETHOSTBYADDR_R_HAS_PTR) || defined(GETHOSTBYNAME_R_HAS_PTR))
+#    define USE_HOSTENT_PTR
+#  else
+#    undef  USE_HOSTENT_PTR
+#  endif
 
 /* The getnetent getnetbyaddr getnetbyname using ptr? */
 
-#if defined(HAS_GETNETENT_R) && (GETNETENT_R_PROTO == REENTRANT_PROTO_I_SBWRE)
-#   define GETNETENT_R_HAS_PTR
-#else
-#   undef  GETNETENT_R_HAS_PTR
-#endif
-#if defined(HAS_GETNETBYADDR_R) && (GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_UISBWRE || GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_uISBWRE)
-#   define GETNETBYADDR_R_HAS_PTR
-#else
-#   undef  GETNETBYADDR_R_HAS_PTR
-#endif
-#if defined(HAS_GETNETBYNAME_R) && (GETNETBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWRE)
-#   define GETNETBYNAME_R_HAS_PTR
-#else
-#   undef  GETNETBYNAME_R_HAS_PTR
-#endif
+#  if defined(HAS_GETNETENT_R) && (GETNETENT_R_PROTO == REENTRANT_PROTO_I_SBWRE)
+#    define GETNETENT_R_HAS_PTR
+#  else
+#    undef  GETNETENT_R_HAS_PTR
+#  endif
+#  if defined(HAS_GETNETBYADDR_R) && (GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_UISBWRE || GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_uISBWRE)
+#    define GETNETBYADDR_R_HAS_PTR
+#  else
+#    undef  GETNETBYADDR_R_HAS_PTR
+#  endif
+#  if defined(HAS_GETNETBYNAME_R) && (GETNETBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWRE)
+#    define GETNETBYNAME_R_HAS_PTR
+#  else
+#    undef  GETNETBYNAME_R_HAS_PTR
+#  endif
 
 /* Any of the getnetent getnetbyaddr getnetbyname using ptr? */
 
-#if (defined(GETNETENT_R_HAS_PTR) || defined(GETNETBYADDR_R_HAS_PTR) || defined(GETNETBYNAME_R_HAS_PTR))
-#   define USE_NETENT_PTR
-#else
-#   undef  USE_NETENT_PTR
-#endif
+#  if (defined(GETNETENT_R_HAS_PTR) || defined(GETNETBYADDR_R_HAS_PTR) || defined(GETNETBYNAME_R_HAS_PTR))
+#    define USE_NETENT_PTR
+#  else
+#    undef  USE_NETENT_PTR
+#  endif
 
 /* The getprotoent getprotobyname getprotobynumber using ptr? */
 
-#if defined(HAS_GETPROTOENT_R) && (GETPROTOENT_R_PROTO == REENTRANT_PROTO_I_SBWR)
-#   define GETPROTOENT_R_HAS_PTR
-#else
-#   undef  GETPROTOENT_R_HAS_PTR
-#endif
-#if defined(HAS_GETPROTOBYNAME_R) && (GETPROTOBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWR)
-#   define GETPROTOBYNAME_R_HAS_PTR
-#else
-#   undef  GETPROTOBYNAME_R_HAS_PTR
-#endif
-#if defined(HAS_GETPROTOBYNUMBER_R) && (GETPROTOBYNUMBER_R_PROTO == REENTRANT_PROTO_I_ISBWR)
-#   define GETPROTOBYNUMBER_R_HAS_PTR
-#else
-#   undef  GETPROTOBYNUMBER_R_HAS_PTR
-#endif
+#  if defined(HAS_GETPROTOENT_R) && (GETPROTOENT_R_PROTO == REENTRANT_PROTO_I_SBWR)
+#    define GETPROTOENT_R_HAS_PTR
+#  else
+#    undef  GETPROTOENT_R_HAS_PTR
+#  endif
+#  if defined(HAS_GETPROTOBYNAME_R) && (GETPROTOBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWR)
+#    define GETPROTOBYNAME_R_HAS_PTR
+#  else
+#    undef  GETPROTOBYNAME_R_HAS_PTR
+#  endif
+#  if defined(HAS_GETPROTOBYNUMBER_R) && (GETPROTOBYNUMBER_R_PROTO == REENTRANT_PROTO_I_ISBWR)
+#    define GETPROTOBYNUMBER_R_HAS_PTR
+#  else
+#    undef  GETPROTOBYNUMBER_R_HAS_PTR
+#  endif
 
 /* Any of the getprotoent getprotobyname getprotobynumber using ptr? */
 
-#if (defined(GETPROTOENT_R_HAS_PTR) || defined(GETPROTOBYNAME_R_HAS_PTR) || defined(GETPROTOBYNUMBER_R_HAS_PTR))
-#   define USE_PROTOENT_PTR
-#else
-#   undef  USE_PROTOENT_PTR
-#endif
+#  if (defined(GETPROTOENT_R_HAS_PTR) || defined(GETPROTOBYNAME_R_HAS_PTR) || defined(GETPROTOBYNUMBER_R_HAS_PTR))
+#    define USE_PROTOENT_PTR
+#  else
+#    undef  USE_PROTOENT_PTR
+#  endif
 
 /* The getservent getservbyname getservbyport using ptr? */
 
-#if defined(HAS_GETSERVENT_R) && (GETSERVENT_R_PROTO == REENTRANT_PROTO_I_SBWR)
-#   define GETSERVENT_R_HAS_PTR
-#else
-#   undef  GETSERVENT_R_HAS_PTR
-#endif
-#if defined(HAS_GETSERVBYNAME_R) && (GETSERVBYNAME_R_PROTO == REENTRANT_PROTO_I_CCSBWR)
-#   define GETSERVBYNAME_R_HAS_PTR
-#else
-#   undef  GETSERVBYNAME_R_HAS_PTR
-#endif
-#if defined(HAS_GETSERVBYPORT_R) && (GETSERVBYPORT_R_PROTO == REENTRANT_PROTO_I_ICSBWR)
-#   define GETSERVBYPORT_R_HAS_PTR
-#else
-#   undef  GETSERVBYPORT_R_HAS_PTR
-#endif
+#  if defined(HAS_GETSERVENT_R) && (GETSERVENT_R_PROTO == REENTRANT_PROTO_I_SBWR)
+#    define GETSERVENT_R_HAS_PTR
+#  else
+#    undef  GETSERVENT_R_HAS_PTR
+#  endif
+#  if defined(HAS_GETSERVBYNAME_R) && (GETSERVBYNAME_R_PROTO == REENTRANT_PROTO_I_CCSBWR)
+#    define GETSERVBYNAME_R_HAS_PTR
+#  else
+#    undef  GETSERVBYNAME_R_HAS_PTR
+#  endif
+#  if defined(HAS_GETSERVBYPORT_R) && (GETSERVBYPORT_R_PROTO == REENTRANT_PROTO_I_ICSBWR)
+#    define GETSERVBYPORT_R_HAS_PTR
+#  else
+#    undef  GETSERVBYPORT_R_HAS_PTR
+#  endif
 
 /* Any of the getservent getservbyname getservbyport using ptr? */
 
-#if (defined(GETSERVENT_R_HAS_PTR) || defined(GETSERVBYNAME_R_HAS_PTR) || defined(GETSERVBYPORT_R_HAS_PTR))
-#   define USE_SERVENT_PTR
-#else
-#   undef  USE_SERVENT_PTR
-#endif
+#  if (defined(GETSERVENT_R_HAS_PTR) || defined(GETSERVBYNAME_R_HAS_PTR) || defined(GETSERVBYPORT_R_HAS_PTR))
+#    define USE_SERVENT_PTR
+#  else
+#    undef  USE_SERVENT_PTR
+#  endif
 
 /* The gethostent gethostbyaddr gethostbyname using buffer? */
 
-#if defined(HAS_GETHOSTENT_R) && (GETHOSTENT_R_PROTO == REENTRANT_PROTO_I_SBWRE || GETHOSTENT_R_PROTO == REENTRANT_PROTO_I_SBIE || GETHOSTENT_R_PROTO == REENTRANT_PROTO_S_SBIE || GETHOSTENT_R_PROTO == REENTRANT_PROTO_S_SBI || GETHOSTENT_R_PROTO == REENTRANT_PROTO_I_SBI)
-#   define GETHOSTENT_R_HAS_BUFFER
-#else
-#   undef  GETHOSTENT_R_HAS_BUFFER
-#endif
-#if defined(HAS_GETHOSTBYADDR_R) && (GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_CWISBWRE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CWISBWIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CWISBIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_TWISBIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CIISBIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CSBIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_TSBIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_TsISBWRE)
-#   define GETHOSTBYADDR_R_HAS_BUFFER
-#else
-#   undef  GETHOSTBYADDR_R_HAS_BUFFER
-#endif
-#if defined(HAS_GETHOSTBYNAME_R) && (GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWRE || GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_S_CSBIE)
-#   define GETHOSTBYNAME_R_HAS_BUFFER
-#else
-#   undef  GETHOSTBYNAME_R_HAS_BUFFER
-#endif
+#  if defined(HAS_GETHOSTENT_R) && (GETHOSTENT_R_PROTO == REENTRANT_PROTO_I_SBWRE || GETHOSTENT_R_PROTO == REENTRANT_PROTO_I_SBIE || GETHOSTENT_R_PROTO == REENTRANT_PROTO_S_SBIE || GETHOSTENT_R_PROTO == REENTRANT_PROTO_S_SBI || GETHOSTENT_R_PROTO == REENTRANT_PROTO_I_SBI)
+#    define GETHOSTENT_R_HAS_BUFFER
+#  else
+#    undef  GETHOSTENT_R_HAS_BUFFER
+#  endif
+#  if defined(HAS_GETHOSTBYADDR_R) && (GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_CWISBWRE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CWISBWIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CWISBIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_TWISBIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CIISBIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CSBIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_TSBIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_TsISBWRE)
+#    define GETHOSTBYADDR_R_HAS_BUFFER
+#  else
+#    undef  GETHOSTBYADDR_R_HAS_BUFFER
+#  endif
+#  if defined(HAS_GETHOSTBYNAME_R) && (GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWRE || GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_S_CSBIE)
+#    define GETHOSTBYNAME_R_HAS_BUFFER
+#  else
+#    undef  GETHOSTBYNAME_R_HAS_BUFFER
+#  endif
 
 /* Any of the gethostent gethostbyaddr gethostbyname using buffer? */
 
-#if (defined(GETHOSTENT_R_HAS_BUFFER) || defined(GETHOSTBYADDR_R_HAS_BUFFER) || defined(GETHOSTBYNAME_R_HAS_BUFFER))
-#   define USE_HOSTENT_BUFFER
-#else
-#   undef  USE_HOSTENT_BUFFER
-#endif
+#  if (defined(GETHOSTENT_R_HAS_BUFFER) || defined(GETHOSTBYADDR_R_HAS_BUFFER) || defined(GETHOSTBYNAME_R_HAS_BUFFER))
+#    define USE_HOSTENT_BUFFER
+#  else
+#    undef  USE_HOSTENT_BUFFER
+#  endif
 
 /* The getnetent getnetbyaddr getnetbyname using buffer? */
 
-#if defined(HAS_GETNETENT_R) && (GETNETENT_R_PROTO == REENTRANT_PROTO_I_SBWRE || GETNETENT_R_PROTO == REENTRANT_PROTO_I_SBIE || GETNETENT_R_PROTO == REENTRANT_PROTO_S_SBIE || GETNETENT_R_PROTO == REENTRANT_PROTO_S_SBI || GETNETENT_R_PROTO == REENTRANT_PROTO_I_SBI)
-#   define GETNETENT_R_HAS_BUFFER
-#else
-#   undef  GETNETENT_R_HAS_BUFFER
-#endif
-#if defined(HAS_GETNETBYADDR_R) && (GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_UISBWRE || GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_LISBI || GETNETBYADDR_R_PROTO == REENTRANT_PROTO_S_TISBI || GETNETBYADDR_R_PROTO == REENTRANT_PROTO_S_LISBI || GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_uISBWRE)
-#   define GETNETBYADDR_R_HAS_BUFFER
-#else
-#   undef  GETNETBYADDR_R_HAS_BUFFER
-#endif
-#if defined(HAS_GETNETBYNAME_R) && (GETNETBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWRE || GETNETBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBI || GETNETBYNAME_R_PROTO == REENTRANT_PROTO_S_CSBI)
-#   define GETNETBYNAME_R_HAS_BUFFER
-#else
-#   undef  GETNETBYNAME_R_HAS_BUFFER
-#endif
+#  if defined(HAS_GETNETENT_R) && (GETNETENT_R_PROTO == REENTRANT_PROTO_I_SBWRE || GETNETENT_R_PROTO == REENTRANT_PROTO_I_SBIE || GETNETENT_R_PROTO == REENTRANT_PROTO_S_SBIE || GETNETENT_R_PROTO == REENTRANT_PROTO_S_SBI || GETNETENT_R_PROTO == REENTRANT_PROTO_I_SBI)
+#    define GETNETENT_R_HAS_BUFFER
+#  else
+#    undef  GETNETENT_R_HAS_BUFFER
+#  endif
+#  if defined(HAS_GETNETBYADDR_R) && (GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_UISBWRE || GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_LISBI || GETNETBYADDR_R_PROTO == REENTRANT_PROTO_S_TISBI || GETNETBYADDR_R_PROTO == REENTRANT_PROTO_S_LISBI || GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_uISBWRE)
+#    define GETNETBYADDR_R_HAS_BUFFER
+#  else
+#    undef  GETNETBYADDR_R_HAS_BUFFER
+#  endif
+#  if defined(HAS_GETNETBYNAME_R) && (GETNETBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWRE || GETNETBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBI || GETNETBYNAME_R_PROTO == REENTRANT_PROTO_S_CSBI)
+#    define GETNETBYNAME_R_HAS_BUFFER
+#  else
+#    undef  GETNETBYNAME_R_HAS_BUFFER
+#  endif
 
 /* Any of the getnetent getnetbyaddr getnetbyname using buffer? */
 
-#if (defined(GETNETENT_R_HAS_BUFFER) || defined(GETNETBYADDR_R_HAS_BUFFER) || defined(GETNETBYNAME_R_HAS_BUFFER))
-#   define USE_NETENT_BUFFER
-#else
-#   undef  USE_NETENT_BUFFER
-#endif
+#  if (defined(GETNETENT_R_HAS_BUFFER) || defined(GETNETBYADDR_R_HAS_BUFFER) || defined(GETNETBYNAME_R_HAS_BUFFER))
+#    define USE_NETENT_BUFFER
+#  else
+#    undef  USE_NETENT_BUFFER
+#  endif
 
 /* The getprotoent getprotobyname getprotobynumber using buffer? */
 
-#if defined(HAS_GETPROTOENT_R) && (GETPROTOENT_R_PROTO == REENTRANT_PROTO_I_SBWR || GETPROTOENT_R_PROTO == REENTRANT_PROTO_I_SBI || GETPROTOENT_R_PROTO == REENTRANT_PROTO_S_SBI)
-#   define GETPROTOENT_R_HAS_BUFFER
-#else
-#   undef  GETPROTOENT_R_HAS_BUFFER
-#endif
-#if defined(HAS_GETPROTOBYNAME_R) && (GETPROTOBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWR || GETPROTOBYNAME_R_PROTO == REENTRANT_PROTO_S_CSBI)
-#   define GETPROTOBYNAME_R_HAS_BUFFER
-#else
-#   undef  GETPROTOBYNAME_R_HAS_BUFFER
-#endif
-#if defined(HAS_GETPROTOBYNUMBER_R) && (GETPROTOBYNUMBER_R_PROTO == REENTRANT_PROTO_I_ISBWR || GETPROTOBYNUMBER_R_PROTO == REENTRANT_PROTO_S_ISBI)
-#   define GETPROTOBYNUMBER_R_HAS_BUFFER
-#else
-#   undef  GETPROTOBYNUMBER_R_HAS_BUFFER
-#endif
+#  if defined(HAS_GETPROTOENT_R) && (GETPROTOENT_R_PROTO == REENTRANT_PROTO_I_SBWR || GETPROTOENT_R_PROTO == REENTRANT_PROTO_I_SBI || GETPROTOENT_R_PROTO == REENTRANT_PROTO_S_SBI)
+#    define GETPROTOENT_R_HAS_BUFFER
+#  else
+#    undef  GETPROTOENT_R_HAS_BUFFER
+#  endif
+#  if defined(HAS_GETPROTOBYNAME_R) && (GETPROTOBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWR || GETPROTOBYNAME_R_PROTO == REENTRANT_PROTO_S_CSBI)
+#    define GETPROTOBYNAME_R_HAS_BUFFER
+#  else
+#    undef  GETPROTOBYNAME_R_HAS_BUFFER
+#  endif
+#  if defined(HAS_GETPROTOBYNUMBER_R) && (GETPROTOBYNUMBER_R_PROTO == REENTRANT_PROTO_I_ISBWR || GETPROTOBYNUMBER_R_PROTO == REENTRANT_PROTO_S_ISBI)
+#    define GETPROTOBYNUMBER_R_HAS_BUFFER
+#  else
+#    undef  GETPROTOBYNUMBER_R_HAS_BUFFER
+#  endif
 
 /* Any of the getprotoent getprotobyname getprotobynumber using buffer? */
 
-#if (defined(GETPROTOENT_R_HAS_BUFFER) || defined(GETPROTOBYNAME_R_HAS_BUFFER) || defined(GETPROTOBYNUMBER_R_HAS_BUFFER))
-#   define USE_PROTOENT_BUFFER
-#else
-#   undef  USE_PROTOENT_BUFFER
-#endif
+#  if (defined(GETPROTOENT_R_HAS_BUFFER) || defined(GETPROTOBYNAME_R_HAS_BUFFER) || defined(GETPROTOBYNUMBER_R_HAS_BUFFER))
+#    define USE_PROTOENT_BUFFER
+#  else
+#    undef  USE_PROTOENT_BUFFER
+#  endif
 
 /* The getservent getservbyname getservbyport using buffer? */
 
-#if defined(HAS_GETSERVENT_R) && (GETSERVENT_R_PROTO == REENTRANT_PROTO_I_SBWR || GETSERVENT_R_PROTO == REENTRANT_PROTO_I_SBI || GETSERVENT_R_PROTO == REENTRANT_PROTO_S_SBI)
-#   define GETSERVENT_R_HAS_BUFFER
-#else
-#   undef  GETSERVENT_R_HAS_BUFFER
-#endif
-#if defined(HAS_GETSERVBYNAME_R) && (GETSERVBYNAME_R_PROTO == REENTRANT_PROTO_I_CCSBWR || GETSERVBYNAME_R_PROTO == REENTRANT_PROTO_S_CCSBI)
-#   define GETSERVBYNAME_R_HAS_BUFFER
-#else
-#   undef  GETSERVBYNAME_R_HAS_BUFFER
-#endif
-#if defined(HAS_GETSERVBYPORT_R) && (GETSERVBYPORT_R_PROTO == REENTRANT_PROTO_I_ICSBWR || GETSERVBYPORT_R_PROTO == REENTRANT_PROTO_S_ICSBI)
-#   define GETSERVBYPORT_R_HAS_BUFFER
-#else
-#   undef  GETSERVBYPORT_R_HAS_BUFFER
-#endif
+#  if defined(HAS_GETSERVENT_R) && (GETSERVENT_R_PROTO == REENTRANT_PROTO_I_SBWR || GETSERVENT_R_PROTO == REENTRANT_PROTO_I_SBI || GETSERVENT_R_PROTO == REENTRANT_PROTO_S_SBI)
+#    define GETSERVENT_R_HAS_BUFFER
+#  else
+#    undef  GETSERVENT_R_HAS_BUFFER
+#  endif
+#  if defined(HAS_GETSERVBYNAME_R) && (GETSERVBYNAME_R_PROTO == REENTRANT_PROTO_I_CCSBWR || GETSERVBYNAME_R_PROTO == REENTRANT_PROTO_S_CCSBI)
+#    define GETSERVBYNAME_R_HAS_BUFFER
+#  else
+#    undef  GETSERVBYNAME_R_HAS_BUFFER
+#  endif
+#  if defined(HAS_GETSERVBYPORT_R) && (GETSERVBYPORT_R_PROTO == REENTRANT_PROTO_I_ICSBWR || GETSERVBYPORT_R_PROTO == REENTRANT_PROTO_S_ICSBI)
+#    define GETSERVBYPORT_R_HAS_BUFFER
+#  else
+#    undef  GETSERVBYPORT_R_HAS_BUFFER
+#  endif
 
 /* Any of the getservent getservbyname getservbyport using buffer? */
 
-#if (defined(GETSERVENT_R_HAS_BUFFER) || defined(GETSERVBYNAME_R_HAS_BUFFER) || defined(GETSERVBYPORT_R_HAS_BUFFER))
-#   define USE_SERVENT_BUFFER
-#else
-#   undef  USE_SERVENT_BUFFER
-#endif
+#  if (defined(GETSERVENT_R_HAS_BUFFER) || defined(GETSERVBYNAME_R_HAS_BUFFER) || defined(GETSERVBYPORT_R_HAS_BUFFER))
+#    define USE_SERVENT_BUFFER
+#  else
+#    undef  USE_SERVENT_BUFFER
+#  endif
 
 /* The gethostent gethostbyaddr gethostbyname using errno? */
 
-#if defined(HAS_GETHOSTENT_R) && (GETHOSTENT_R_PROTO == REENTRANT_PROTO_I_SBWRE || GETHOSTENT_R_PROTO == REENTRANT_PROTO_I_SBIE || GETHOSTENT_R_PROTO == REENTRANT_PROTO_S_SBIE)
-#   define GETHOSTENT_R_HAS_ERRNO
-#else
-#   undef  GETHOSTENT_R_HAS_ERRNO
-#endif
-#if defined(HAS_GETHOSTBYADDR_R) && (GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_CWISBWRE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CWISBWIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CWISBIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_TWISBIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CIISBIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CSBIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_TSBIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_TsISBWRE)
-#   define GETHOSTBYADDR_R_HAS_ERRNO
-#else
-#   undef  GETHOSTBYADDR_R_HAS_ERRNO
-#endif
-#if defined(HAS_GETHOSTBYNAME_R) && (GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWRE || GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_S_CSBIE)
-#   define GETHOSTBYNAME_R_HAS_ERRNO
-#else
-#   undef  GETHOSTBYNAME_R_HAS_ERRNO
-#endif
+#  if defined(HAS_GETHOSTENT_R) && (GETHOSTENT_R_PROTO == REENTRANT_PROTO_I_SBWRE || GETHOSTENT_R_PROTO == REENTRANT_PROTO_I_SBIE || GETHOSTENT_R_PROTO == REENTRANT_PROTO_S_SBIE)
+#    define GETHOSTENT_R_HAS_ERRNO
+#  else
+#    undef  GETHOSTENT_R_HAS_ERRNO
+#  endif
+#  if defined(HAS_GETHOSTBYADDR_R) && (GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_CWISBWRE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CWISBWIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CWISBIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_TWISBIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CIISBIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CSBIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_TSBIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_TsISBWRE)
+#    define GETHOSTBYADDR_R_HAS_ERRNO
+#  else
+#    undef  GETHOSTBYADDR_R_HAS_ERRNO
+#  endif
+#  if defined(HAS_GETHOSTBYNAME_R) && (GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWRE || GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_S_CSBIE)
+#    define GETHOSTBYNAME_R_HAS_ERRNO
+#  else
+#    undef  GETHOSTBYNAME_R_HAS_ERRNO
+#  endif
 
 /* Any of the gethostent gethostbyaddr gethostbyname using errno? */
 
-#if (defined(GETHOSTENT_R_HAS_ERRNO) || defined(GETHOSTBYADDR_R_HAS_ERRNO) || defined(GETHOSTBYNAME_R_HAS_ERRNO))
-#   define USE_HOSTENT_ERRNO
-#else
-#   undef  USE_HOSTENT_ERRNO
-#endif
+#  if (defined(GETHOSTENT_R_HAS_ERRNO) || defined(GETHOSTBYADDR_R_HAS_ERRNO) || defined(GETHOSTBYNAME_R_HAS_ERRNO))
+#    define USE_HOSTENT_ERRNO
+#  else
+#    undef  USE_HOSTENT_ERRNO
+#  endif
 
 /* The getnetent getnetbyaddr getnetbyname using errno? */
 
-#if defined(HAS_GETNETENT_R) && (GETNETENT_R_PROTO == REENTRANT_PROTO_I_SBWRE || GETNETENT_R_PROTO == REENTRANT_PROTO_I_SBIE || GETNETENT_R_PROTO == REENTRANT_PROTO_S_SBIE)
-#   define GETNETENT_R_HAS_ERRNO
-#else
-#   undef  GETNETENT_R_HAS_ERRNO
-#endif
-#if defined(HAS_GETNETBYADDR_R) && (GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_UISBWRE || GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_uISBWRE)
-#   define GETNETBYADDR_R_HAS_ERRNO
-#else
-#   undef  GETNETBYADDR_R_HAS_ERRNO
-#endif
-#if defined(HAS_GETNETBYNAME_R) && (GETNETBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWRE)
-#   define GETNETBYNAME_R_HAS_ERRNO
-#else
-#   undef  GETNETBYNAME_R_HAS_ERRNO
-#endif
+#  if defined(HAS_GETNETENT_R) && (GETNETENT_R_PROTO == REENTRANT_PROTO_I_SBWRE || GETNETENT_R_PROTO == REENTRANT_PROTO_I_SBIE || GETNETENT_R_PROTO == REENTRANT_PROTO_S_SBIE)
+#    define GETNETENT_R_HAS_ERRNO
+#  else
+#    undef  GETNETENT_R_HAS_ERRNO
+#  endif
+#  if defined(HAS_GETNETBYADDR_R) && (GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_UISBWRE || GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_uISBWRE)
+#    define GETNETBYADDR_R_HAS_ERRNO
+#  else
+#    undef  GETNETBYADDR_R_HAS_ERRNO
+#  endif
+#  if defined(HAS_GETNETBYNAME_R) && (GETNETBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWRE)
+#    define GETNETBYNAME_R_HAS_ERRNO
+#  else
+#    undef  GETNETBYNAME_R_HAS_ERRNO
+#  endif
 
 /* Any of the getnetent getnetbyaddr getnetbyname using errno? */
 
-#if (defined(GETNETENT_R_HAS_ERRNO) || defined(GETNETBYADDR_R_HAS_ERRNO) || defined(GETNETBYNAME_R_HAS_ERRNO))
-#   define USE_NETENT_ERRNO
-#else
-#   undef  USE_NETENT_ERRNO
-#endif
+#  if (defined(GETNETENT_R_HAS_ERRNO) || defined(GETNETBYADDR_R_HAS_ERRNO) || defined(GETNETBYNAME_R_HAS_ERRNO))
+#    define USE_NETENT_ERRNO
+#  else
+#    undef  USE_NETENT_ERRNO
+#  endif
 
 
 typedef struct {
-#ifdef HAS_ASCTIME_R
+
+#  ifdef HAS_ASCTIME_R
        char*   _asctime_buffer;
        size_t  _asctime_size;
-#endif /* HAS_ASCTIME_R */
-#ifdef HAS_CRYPT_R
-#if CRYPT_R_PROTO == REENTRANT_PROTO_B_CCD
+#  endif /* HAS_ASCTIME_R */
+
+#  ifdef HAS_CRYPT_R
+#  if CRYPT_R_PROTO == REENTRANT_PROTO_B_CCD
        CRYPTD* _crypt_data;
-#else
+#  else
        struct crypt_data *_crypt_struct_buffer;
-#endif
-#endif /* HAS_CRYPT_R */
-#ifdef HAS_CTIME_R
+#  endif
+#  endif /* HAS_CRYPT_R */
+
+#  ifdef HAS_CTIME_R
        char*   _ctime_buffer;
        size_t  _ctime_size;
-#endif /* HAS_CTIME_R */
-#ifdef HAS_GETGRNAM_R
+#  endif /* HAS_CTIME_R */
+
+#  ifdef HAS_GETGRNAM_R
        struct group    _grent_struct;
        char*   _grent_buffer;
        size_t  _grent_size;
@@ -644,8 +674,9 @@ typedef struct {
 #   ifdef USE_GRENT_FPTR
        FILE*   _grent_fptr;
 #   endif
-#endif /* HAS_GETGRNAM_R */
-#ifdef HAS_GETHOSTBYNAME_R
+#  endif /* HAS_GETGRNAM_R */
+
+#  ifdef HAS_GETHOSTBYNAME_R
        struct hostent  _hostent_struct;
 #   if GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD
        struct hostent_data     _hostent_data;
@@ -658,13 +689,15 @@ typedef struct {
 #   endif
 #   ifdef USE_HOSTENT_ERRNO
        int     _hostent_errno;
-#   endif 
-#endif /* HAS_GETHOSTBYNAME_R */
-#ifdef HAS_GETLOGIN_R
+#   endif
+#  endif /* HAS_GETHOSTBYNAME_R */
+
+#  ifdef HAS_GETLOGIN_R
        char*   _getlogin_buffer;
        size_t  _getlogin_size;
-#endif /* HAS_GETLOGIN_R */
-#ifdef HAS_GETNETBYNAME_R
+#  endif /* HAS_GETLOGIN_R */
+
+#  ifdef HAS_GETNETBYNAME_R
        struct netent   _netent_struct;
 #   if GETNETBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD
        struct netent_data      _netent_data;
@@ -677,9 +710,10 @@ typedef struct {
 #   endif
 #   ifdef USE_NETENT_ERRNO
        int     _netent_errno;
-#   endif 
-#endif /* HAS_GETNETBYNAME_R */
-#ifdef HAS_GETPROTOBYNAME_R
+#   endif
+#  endif /* HAS_GETNETBYNAME_R */
+
+#  ifdef HAS_GETPROTOBYNAME_R
        struct protoent _protoent_struct;
 #   if GETPROTOBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD
        struct protoent_data    _protoent_data;
@@ -692,9 +726,10 @@ typedef struct {
 #   endif
 #   ifdef USE_PROTOENT_ERRNO
        int     _protoent_errno;
-#   endif 
-#endif /* HAS_GETPROTOBYNAME_R */
-#ifdef HAS_GETPWNAM_R
+#   endif
+#  endif /* HAS_GETPROTOBYNAME_R */
+
+#  ifdef HAS_GETPWNAM_R
        struct passwd   _pwent_struct;
        char*   _pwent_buffer;
        size_t  _pwent_size;
@@ -704,8 +739,9 @@ typedef struct {
 #   ifdef USE_PWENT_FPTR
        FILE*   _pwent_fptr;
 #   endif
-#endif /* HAS_GETPWNAM_R */
-#ifdef HAS_GETSERVBYNAME_R
+#  endif /* HAS_GETPWNAM_R */
+
+#  ifdef HAS_GETSERVBYNAME_R
        struct servent  _servent_struct;
 #   if GETSERVBYNAME_R_PROTO == REENTRANT_PROTO_I_CCSD
        struct servent_data     _servent_data;
@@ -718,9 +754,10 @@ typedef struct {
 #   endif
 #   ifdef USE_SERVENT_ERRNO
        int     _servent_errno;
-#   endif 
-#endif /* HAS_GETSERVBYNAME_R */
-#ifdef HAS_GETSPNAM_R
+#   endif
+#  endif /* HAS_GETSERVBYNAME_R */
+
+#  ifdef HAS_GETSPNAM_R
        struct spwd     _spent_struct;
        char*   _spent_buffer;
        size_t  _spent_size;
@@ -730,715 +767,928 @@ typedef struct {
 #   ifdef USE_SPENT_FPTR
        FILE*   _spent_fptr;
 #   endif
-#endif /* HAS_GETSPNAM_R */
-#ifdef HAS_READDIR_R
+#  endif /* HAS_GETSPNAM_R */
+
+#  ifdef HAS_GMTIME_R
+       struct tm _gmtime_struct;
+#  endif /* HAS_GMTIME_R */
+
+#  ifdef HAS_LOCALTIME_R
+       struct tm _localtime_struct;
+#  endif /* HAS_LOCALTIME_R */
+
+#  ifdef HAS_READDIR_R
        struct dirent*  _readdir_struct;
        size_t  _readdir_size;
 #   if READDIR_R_PROTO == REENTRANT_PROTO_I_TSR
        struct dirent*  _readdir_ptr;
 #   endif
-#endif /* HAS_READDIR_R */
-#ifdef HAS_READDIR64_R
+#  endif /* HAS_READDIR_R */
+
+#  ifdef HAS_READDIR64_R
        struct dirent64*        _readdir64_struct;
        size_t  _readdir64_size;
 #   if READDIR64_R_PROTO == REENTRANT_PROTO_I_TSR
        struct dirent64*        _readdir64_ptr;
 #   endif
-#endif /* HAS_READDIR64_R */
-#ifdef HAS_SETLOCALE_R
+#  endif /* HAS_READDIR64_R */
+
+#  ifdef HAS_SETLOCALE_R
        char*   _setlocale_buffer;
        size_t  _setlocale_size;
-#endif /* HAS_SETLOCALE_R */
-#ifdef HAS_STRERROR_R
+#  endif /* HAS_SETLOCALE_R */
+
+#  ifdef HAS_STRERROR_R
        char*   _strerror_buffer;
        size_t  _strerror_size;
-#endif /* HAS_STRERROR_R */
-#ifdef HAS_TTYNAME_R
+#  endif /* HAS_STRERROR_R */
+
+#  ifdef HAS_TTYNAME_R
        char*   _ttyname_buffer;
        size_t  _ttyname_size;
-#endif /* HAS_TTYNAME_R */
+#  endif /* HAS_TTYNAME_R */
+
 
     int dummy; /* cannot have empty structs */
 } REENTR;
 
 /* The wrappers. */
 
-#ifdef HAS_ASCTIME_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef asctime
-#   if !defined(asctime) && ASCTIME_R_PROTO == REENTRANT_PROTO_B_SB
-#       define asctime(a) asctime_r(a, PL_reentrant_buffer->_asctime_buffer)
-#   endif
-#   if !defined(asctime) && ASCTIME_R_PROTO == REENTRANT_PROTO_B_SBI
-#       define asctime(a) asctime_r(a, PL_reentrant_buffer->_asctime_buffer, PL_reentrant_buffer->_asctime_size)
-#   endif
-#   if !defined(asctime) && ASCTIME_R_PROTO == REENTRANT_PROTO_I_SB
-#       define asctime(a) (asctime_r(a, PL_reentrant_buffer->_asctime_buffer) == 0 ? PL_reentrant_buffer->_asctime_buffer : 0)
-#   endif
-#   if !defined(asctime) && ASCTIME_R_PROTO == REENTRANT_PROTO_I_SBI
-#       define asctime(a) (asctime_r(a, PL_reentrant_buffer->_asctime_buffer, PL_reentrant_buffer->_asctime_size) == 0 ? PL_reentrant_buffer->_asctime_buffer : 0)
-#   endif
-#  endif
-#endif /* HAS_ASCTIME_R */
-
-#ifdef HAS_CRYPT_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef crypt
-#   if !defined(crypt) && CRYPT_R_PROTO == REENTRANT_PROTO_B_CCS
-#       define crypt(a, b) crypt_r(a, b, PL_reentrant_buffer->_crypt_struct_buffer)
-#   endif
-#   if !defined(crypt) && CRYPT_R_PROTO == REENTRANT_PROTO_B_CCD
-#       define crypt(a, b) crypt_r(a, b, &PL_reentrant_buffer->_crypt_data)
-#   endif
+#  ifdef HAS_ASCTIME_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef asctime
+#      if !defined(asctime) && ASCTIME_R_PROTO == REENTRANT_PROTO_B_SB
+#        define asctime(a) asctime_r(a, PL_reentrant_buffer->_asctime_buffer)
+#      endif
+#      if !defined(asctime) && ASCTIME_R_PROTO == REENTRANT_PROTO_B_SBI
+#        define asctime(a) asctime_r(a, PL_reentrant_buffer->_asctime_buffer, PL_reentrant_buffer->_asctime_size)
+#      endif
+#      if !defined(asctime) && ASCTIME_R_PROTO == REENTRANT_PROTO_I_SB
+#        define asctime(a) (asctime_r(a, PL_reentrant_buffer->_asctime_buffer) == 0 ? PL_reentrant_buffer->_asctime_buffer : 0)
+#      endif
+#      if !defined(asctime) && ASCTIME_R_PROTO == REENTRANT_PROTO_I_SBI
+#        define asctime(a) (asctime_r(a, PL_reentrant_buffer->_asctime_buffer, PL_reentrant_buffer->_asctime_size) == 0 ? PL_reentrant_buffer->_asctime_buffer : 0)
+#      endif
+#      if defined(asctime)
+#        define PERL_REENTR_USING_ASCTIME_R
+#      endif
+#    endif
+#  endif /* HAS_ASCTIME_R */
+
+
+#  ifdef HAS_CRYPT_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef crypt
+#      if !defined(crypt) && CRYPT_R_PROTO == REENTRANT_PROTO_B_CCS
+#        define crypt(a, b) crypt_r(a, b, PL_reentrant_buffer->_crypt_struct_buffer)
+#      endif
+#      if !defined(crypt) && CRYPT_R_PROTO == REENTRANT_PROTO_B_CCD
+#        define crypt(a, b) crypt_r(a, b, &PL_reentrant_buffer->_crypt_data)
+#      endif
+#      if defined(crypt)
+#        define PERL_REENTR_USING_CRYPT_R
+#      endif
+#    endif
+#  endif /* HAS_CRYPT_R */
+
+
+#  ifdef HAS_CTERMID_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef ctermid
+#      if !defined(ctermid) && CTERMID_R_PROTO == REENTRANT_PROTO_B_B
+#        define ctermid(a) ctermid_r(a)
+#      endif
+#      if defined(ctermid)
+#        define PERL_REENTR_USING_CTERMID_R
+#      endif
+#    endif
+#  endif /* HAS_CTERMID_R */
+
+
+#  ifdef HAS_CTIME_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef ctime
+#      if !defined(ctime) && CTIME_R_PROTO == REENTRANT_PROTO_B_SB
+#        define ctime(a) ctime_r(a, PL_reentrant_buffer->_ctime_buffer)
+#      endif
+#      if !defined(ctime) && CTIME_R_PROTO == REENTRANT_PROTO_B_SBI
+#        define ctime(a) ctime_r(a, PL_reentrant_buffer->_ctime_buffer, PL_reentrant_buffer->_ctime_size)
+#      endif
+#      if !defined(ctime) && CTIME_R_PROTO == REENTRANT_PROTO_I_SB
+#        define ctime(a) (ctime_r(a, PL_reentrant_buffer->_ctime_buffer) == 0 ? PL_reentrant_buffer->_ctime_buffer : 0)
+#      endif
+#      if !defined(ctime) && CTIME_R_PROTO == REENTRANT_PROTO_I_SBI
+#        define ctime(a) (ctime_r(a, PL_reentrant_buffer->_ctime_buffer, PL_reentrant_buffer->_ctime_size) == 0 ? PL_reentrant_buffer->_ctime_buffer : 0)
+#      endif
+#      if defined(ctime)
+#        define PERL_REENTR_USING_CTIME_R
+#      endif
+#    endif
+#  endif /* HAS_CTIME_R */
+
+
+#  ifdef HAS_ENDGRENT_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef endgrent
+#      if !defined(endgrent) && ENDGRENT_R_PROTO == REENTRANT_PROTO_I_H
+#        define endgrent() (endgrent_r(&PL_reentrant_buffer->_grent_fptr) == 0 ? 1 : 0)
+#      endif
+#      if !defined(endgrent) && ENDGRENT_R_PROTO == REENTRANT_PROTO_V_H
+#        define endgrent() endgrent_r(&PL_reentrant_buffer->_grent_fptr)
+#      endif
+#      if defined(endgrent)
+#        define PERL_REENTR_USING_ENDGRENT_R
+#      endif
+#    endif
+#  endif /* HAS_ENDGRENT_R */
+
+
+#  ifdef HAS_ENDHOSTENT_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef endhostent
+#      if !defined(endhostent) && ENDHOSTENT_R_PROTO == REENTRANT_PROTO_I_D
+#        define endhostent() (endhostent_r(&PL_reentrant_buffer->_hostent_data) == 0 ? 1 : 0)
+#      endif
+#      if !defined(endhostent) && ENDHOSTENT_R_PROTO == REENTRANT_PROTO_V_D
+#        define endhostent() endhostent_r(&PL_reentrant_buffer->_hostent_data)
+#      endif
+#      if defined(endhostent)
+#        define PERL_REENTR_USING_ENDHOSTENT_R
+#      endif
+#    endif
+#  endif /* HAS_ENDHOSTENT_R */
+
+
+#  ifdef HAS_ENDNETENT_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef endnetent
+#      if !defined(endnetent) && ENDNETENT_R_PROTO == REENTRANT_PROTO_I_D
+#        define endnetent() (endnetent_r(&PL_reentrant_buffer->_netent_data) == 0 ? 1 : 0)
+#      endif
+#      if !defined(endnetent) && ENDNETENT_R_PROTO == REENTRANT_PROTO_V_D
+#        define endnetent() endnetent_r(&PL_reentrant_buffer->_netent_data)
+#      endif
+#      if defined(endnetent)
+#        define PERL_REENTR_USING_ENDNETENT_R
+#      endif
+#    endif
+#  endif /* HAS_ENDNETENT_R */
+
+
+#  ifdef HAS_ENDPROTOENT_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef endprotoent
+#      if !defined(endprotoent) && ENDPROTOENT_R_PROTO == REENTRANT_PROTO_I_D
+#        define endprotoent() (endprotoent_r(&PL_reentrant_buffer->_protoent_data) == 0 ? 1 : 0)
+#      endif
+#      if !defined(endprotoent) && ENDPROTOENT_R_PROTO == REENTRANT_PROTO_V_D
+#        define endprotoent() endprotoent_r(&PL_reentrant_buffer->_protoent_data)
+#      endif
+#      if defined(endprotoent)
+#        define PERL_REENTR_USING_ENDPROTOENT_R
+#      endif
+#    endif
+#  endif /* HAS_ENDPROTOENT_R */
+
+
+#  ifdef HAS_ENDPWENT_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef endpwent
+#      if !defined(endpwent) && ENDPWENT_R_PROTO == REENTRANT_PROTO_I_H
+#        define endpwent() (endpwent_r(&PL_reentrant_buffer->_pwent_fptr) == 0 ? 1 : 0)
+#      endif
+#      if !defined(endpwent) && ENDPWENT_R_PROTO == REENTRANT_PROTO_V_H
+#        define endpwent() endpwent_r(&PL_reentrant_buffer->_pwent_fptr)
+#      endif
+#      if defined(endpwent)
+#        define PERL_REENTR_USING_ENDPWENT_R
+#      endif
+#    endif
+#  endif /* HAS_ENDPWENT_R */
+
+
+#  ifdef HAS_ENDSERVENT_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef endservent
+#      if !defined(endservent) && ENDSERVENT_R_PROTO == REENTRANT_PROTO_I_D
+#        define endservent() (endservent_r(&PL_reentrant_buffer->_servent_data) == 0 ? 1 : 0)
+#      endif
+#      if !defined(endservent) && ENDSERVENT_R_PROTO == REENTRANT_PROTO_V_D
+#        define endservent() endservent_r(&PL_reentrant_buffer->_servent_data)
+#      endif
+#      if defined(endservent)
+#        define PERL_REENTR_USING_ENDSERVENT_R
+#      endif
+#    endif
+#  endif /* HAS_ENDSERVENT_R */
+
+
+#  ifdef HAS_GETGRENT_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef getgrent
+#      if !defined(getgrent) && GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBWR
+#        define getgrent() ((PL_reentrant_retint = getgrent_r(&PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, &PL_reentrant_buffer->_grent_ptr)) == 0 ? PL_reentrant_buffer->_grent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrent") : 0))
+#      endif
+#      if !defined(getgrent) && GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBIR
+#        define getgrent() ((PL_reentrant_retint = getgrent_r(&PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, &PL_reentrant_buffer->_grent_ptr)) == 0 ? PL_reentrant_buffer->_grent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrent") : 0))
+#      endif
+#      if !defined(getgrent) && GETGRENT_R_PROTO == REENTRANT_PROTO_S_SBW
+#        define getgrent() (getgrent_r(&PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size) ? &PL_reentrant_buffer->_grent_struct : ((errno == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrent") : 0))
+#      endif
+#      if !defined(getgrent) && GETGRENT_R_PROTO == REENTRANT_PROTO_S_SBI
+#        define getgrent() (getgrent_r(&PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size) ? &PL_reentrant_buffer->_grent_struct : ((errno == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrent") : 0))
+#      endif
+#      if !defined(getgrent) && GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBI
+#        define getgrent() ((PL_reentrant_retint = getgrent_r(&PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size)) == 0 ? &PL_reentrant_buffer->_grent_struct : ((PL_reentrant_retint == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrent") : 0))
+#      endif
+#      if !defined(getgrent) && GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBIH
+#        define getgrent() ((PL_reentrant_retint = getgrent_r(&PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, &PL_reentrant_buffer->_grent_fptr)) == 0 ? &PL_reentrant_buffer->_grent_struct : ((PL_reentrant_retint == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrent") : 0))
+#      endif
+#      if defined(getgrent)
+#        define PERL_REENTR_USING_GETGRENT_R
+#      endif
+#    endif
+#  endif /* HAS_GETGRENT_R */
+
+
+#  ifdef HAS_GETGRGID_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef getgrgid
+#      if !defined(getgrgid) && GETGRGID_R_PROTO == REENTRANT_PROTO_I_TSBWR
+#        define getgrgid(a) ((PL_reentrant_retint = getgrgid_r(a, &PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, &PL_reentrant_buffer->_grent_ptr)) == 0 ? PL_reentrant_buffer->_grent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrgid", a) : 0))
+#      endif
+#      if !defined(getgrgid) && GETGRGID_R_PROTO == REENTRANT_PROTO_I_TSBIR
+#        define getgrgid(a) ((PL_reentrant_retint = getgrgid_r(a, &PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, &PL_reentrant_buffer->_grent_ptr)) == 0 ? PL_reentrant_buffer->_grent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrgid", a) : 0))
+#      endif
+#      if !defined(getgrgid) && GETGRGID_R_PROTO == REENTRANT_PROTO_I_TSBI
+#        define getgrgid(a) ((PL_reentrant_retint = getgrgid_r(a, &PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size)) == 0 ? &PL_reentrant_buffer->_grent_struct : ((PL_reentrant_retint == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrgid", a) : 0))
+#      endif
+#      if !defined(getgrgid) && GETGRGID_R_PROTO == REENTRANT_PROTO_S_TSBI
+#        define getgrgid(a) (getgrgid_r(a, &PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size) ? &PL_reentrant_buffer->_grent_struct : ((errno == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrgid", a) : 0))
+#      endif
+#      if defined(getgrgid)
+#        define PERL_REENTR_USING_GETGRGID_R
+#      endif
+#    endif
+#  endif /* HAS_GETGRGID_R */
+
+
+#  ifdef HAS_GETGRNAM_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef getgrnam
+#      if !defined(getgrnam) && GETGRNAM_R_PROTO == REENTRANT_PROTO_I_CSBWR
+#        define getgrnam(a) ((PL_reentrant_retint = getgrnam_r(a, &PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, &PL_reentrant_buffer->_grent_ptr)) == 0 ? PL_reentrant_buffer->_grent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrnam", a) : 0))
+#      endif
+#      if !defined(getgrnam) && GETGRNAM_R_PROTO == REENTRANT_PROTO_I_CSBIR
+#        define getgrnam(a) ((PL_reentrant_retint = getgrnam_r(a, &PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, &PL_reentrant_buffer->_grent_ptr)) == 0 ? PL_reentrant_buffer->_grent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrnam", a) : 0))
+#      endif
+#      if !defined(getgrnam) && GETGRNAM_R_PROTO == REENTRANT_PROTO_S_CBI
+#        define getgrnam(a) (getgrnam_r(a, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size) ? PL_reentrant_buffer->_grent_buffer : ((errno == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrnam", a) : 0))
+#      endif
+#      if !defined(getgrnam) && GETGRNAM_R_PROTO == REENTRANT_PROTO_I_CSBI
+#        define getgrnam(a) ((PL_reentrant_retint = getgrnam_r(a, &PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size)) == 0 ? &PL_reentrant_buffer->_grent_struct : ((PL_reentrant_retint == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrnam", a) : 0))
+#      endif
+#      if !defined(getgrnam) && GETGRNAM_R_PROTO == REENTRANT_PROTO_S_CSBI
+#        define getgrnam(a) (getgrnam_r(a, &PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size) ? &PL_reentrant_buffer->_grent_struct : ((errno == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrnam", a) : 0))
+#      endif
+#      if defined(getgrnam)
+#        define PERL_REENTR_USING_GETGRNAM_R
+#      endif
+#    endif
+#  endif /* HAS_GETGRNAM_R */
+
+
+#  ifdef HAS_GETHOSTBYADDR_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef gethostbyaddr
+#      if !defined(gethostbyaddr) && GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_CWISBWRE
+#        define gethostbyaddr(a, b, c) ((PL_reentrant_retint = gethostbyaddr_r(a, b, c, &PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_ptr, &PL_reentrant_buffer->_hostent_errno)) == 0 ? PL_reentrant_buffer->_hostent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyaddr", a, b, c) : 0))
+#      endif
+#      if !defined(gethostbyaddr) && GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CWISBWIE
+#        define gethostbyaddr(a, b, c) (gethostbyaddr_r(a, b, c, &PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_errno) ? &PL_reentrant_buffer->_hostent_struct : ((errno == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyaddr", a, b, c) : 0))
+#      endif
+#      if !defined(gethostbyaddr) && GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CWISBIE
+#        define gethostbyaddr(a, b, c) (gethostbyaddr_r(a, b, c, &PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_errno) ? &PL_reentrant_buffer->_hostent_struct : ((errno == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyaddr", a, b, c) : 0))
+#      endif
+#      if !defined(gethostbyaddr) && GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_TWISBIE
+#        define gethostbyaddr(a, b, c) (gethostbyaddr_r(a, b, c, &PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_errno) ? &PL_reentrant_buffer->_hostent_struct : ((errno == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyaddr", a, b, c) : 0))
+#      endif
+#      if !defined(gethostbyaddr) && GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CIISBIE
+#        define gethostbyaddr(a, b, c) (gethostbyaddr_r(a, b, c, &PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_errno) ? &PL_reentrant_buffer->_hostent_struct : ((errno == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyaddr", a, b, c) : 0))
+#      endif
+#      if !defined(gethostbyaddr) && GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CSBIE
+#        define gethostbyaddr(a, b, c) (gethostbyaddr_r(a, b, c, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_errno) ? 1 : ((errno == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyaddr", a, b, c) : 0))
+#      endif
+#      if !defined(gethostbyaddr) && GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_TSBIE
+#        define gethostbyaddr(a, b, c) (gethostbyaddr_r(a, b, c, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_errno) ? 1 : ((errno == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyaddr", a, b, c) : 0))
+#      endif
+#      if !defined(gethostbyaddr) && GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_CWISD
+#        define gethostbyaddr(a, b, c) ((PL_reentrant_retint = gethostbyaddr_r(a, b, c, &PL_reentrant_buffer->_hostent_struct, &PL_reentrant_buffer->_hostent_data)) == 0 ? &PL_reentrant_buffer->_hostent_struct : ((PL_reentrant_retint == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyaddr", a, b, c) : 0))
+#      endif
+#      if !defined(gethostbyaddr) && GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_CIISD
+#        define gethostbyaddr(a, b, c) ((PL_reentrant_retint = gethostbyaddr_r(a, b, c, &PL_reentrant_buffer->_hostent_struct, &PL_reentrant_buffer->_hostent_data)) == 0 ? &PL_reentrant_buffer->_hostent_struct : ((PL_reentrant_retint == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyaddr", a, b, c) : 0))
+#      endif
+#      if !defined(gethostbyaddr) && GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_CII
+#        define gethostbyaddr(a, b, c) ((PL_reentrant_retint = gethostbyaddr_r(a, b, c)) == 0 ? 1 : ((PL_reentrant_retint == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyaddr", a, b, c) : 0))
+#      endif
+#      if !defined(gethostbyaddr) && GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_TsISBWRE
+#        define gethostbyaddr(a, b, c) ((PL_reentrant_retint = gethostbyaddr_r(a, b, c, &PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_ptr, &PL_reentrant_buffer->_hostent_errno)) == 0 ? PL_reentrant_buffer->_hostent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyaddr", a, b, c) : 0))
+#      endif
+#      if defined(gethostbyaddr)
+#        define PERL_REENTR_USING_GETHOSTBYADDR_R
+#      endif
+#    endif
+#  endif /* HAS_GETHOSTBYADDR_R */
+
+
+#  ifdef HAS_GETHOSTBYNAME_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef gethostbyname
+#      if !defined(gethostbyname) && GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWRE
+#        define gethostbyname(a) ((PL_reentrant_retint = gethostbyname_r(a, &PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_ptr, &PL_reentrant_buffer->_hostent_errno)) == 0 ? PL_reentrant_buffer->_hostent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyname", a) : 0))
+#      endif
+#      if !defined(gethostbyname) && GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_S_CSBIE
+#        define gethostbyname(a) (gethostbyname_r(a, &PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_errno) ? &PL_reentrant_buffer->_hostent_struct : ((errno == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyname", a) : 0))
+#      endif
+#      if !defined(gethostbyname) && GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD
+#        define gethostbyname(a) ((PL_reentrant_retint = gethostbyname_r(a, &PL_reentrant_buffer->_hostent_struct, &PL_reentrant_buffer->_hostent_data)) == 0 ? &PL_reentrant_buffer->_hostent_struct : ((PL_reentrant_retint == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyname", a) : 0))
+#      endif
+#      if defined(gethostbyname)
+#        define PERL_REENTR_USING_GETHOSTBYNAME_R
+#      endif
+#    endif
+#  endif /* HAS_GETHOSTBYNAME_R */
+
+
+#  ifdef HAS_GETHOSTENT_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef gethostent
+#      if !defined(gethostent) && GETHOSTENT_R_PROTO == REENTRANT_PROTO_I_SBWRE
+#        define gethostent() ((PL_reentrant_retint = gethostent_r(&PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_ptr, &PL_reentrant_buffer->_hostent_errno)) == 0 ? PL_reentrant_buffer->_hostent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostent") : 0))
+#      endif
+#      if !defined(gethostent) && GETHOSTENT_R_PROTO == REENTRANT_PROTO_I_SBIE
+#        define gethostent() ((PL_reentrant_retint = gethostent_r(&PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_errno)) == 0 ? &PL_reentrant_buffer->_hostent_struct : ((PL_reentrant_retint == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostent") : 0))
+#      endif
+#      if !defined(gethostent) && GETHOSTENT_R_PROTO == REENTRANT_PROTO_S_SBIE
+#        define gethostent() (gethostent_r(&PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_errno) ? &PL_reentrant_buffer->_hostent_struct : ((errno == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostent") : 0))
+#      endif
+#      if !defined(gethostent) && GETHOSTENT_R_PROTO == REENTRANT_PROTO_S_SBI
+#        define gethostent() (gethostent_r(&PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size) ? &PL_reentrant_buffer->_hostent_struct : ((errno == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostent") : 0))
+#      endif
+#      if !defined(gethostent) && GETHOSTENT_R_PROTO == REENTRANT_PROTO_I_SBI
+#        define gethostent() ((PL_reentrant_retint = gethostent_r(&PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size)) == 0 ? &PL_reentrant_buffer->_hostent_struct : ((PL_reentrant_retint == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostent") : 0))
+#      endif
+#      if !defined(gethostent) && GETHOSTENT_R_PROTO == REENTRANT_PROTO_I_SD
+#        define gethostent() ((PL_reentrant_retint = gethostent_r(&PL_reentrant_buffer->_hostent_struct, &PL_reentrant_buffer->_hostent_data)) == 0 ? &PL_reentrant_buffer->_hostent_struct : ((PL_reentrant_retint == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostent") : 0))
+#      endif
+#      if defined(gethostent)
+#        define PERL_REENTR_USING_GETHOSTENT_R
+#      endif
+#    endif
+#  endif /* HAS_GETHOSTENT_R */
+
+
+#  ifdef HAS_GETLOGIN_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef getlogin
+#      if !defined(getlogin) && GETLOGIN_R_PROTO == REENTRANT_PROTO_I_BW
+#        define getlogin() ((PL_reentrant_retint = getlogin_r(PL_reentrant_buffer->_getlogin_buffer, PL_reentrant_buffer->_getlogin_size)) == 0 ? PL_reentrant_buffer->_getlogin_buffer : ((PL_reentrant_retint == ERANGE) ? (char *) Perl_reentrant_retry("getlogin") : 0))
+#      endif
+#      if !defined(getlogin) && GETLOGIN_R_PROTO == REENTRANT_PROTO_I_BI
+#        define getlogin() ((PL_reentrant_retint = getlogin_r(PL_reentrant_buffer->_getlogin_buffer, PL_reentrant_buffer->_getlogin_size)) == 0 ? PL_reentrant_buffer->_getlogin_buffer : ((PL_reentrant_retint == ERANGE) ? (char *) Perl_reentrant_retry("getlogin") : 0))
+#      endif
+#      if !defined(getlogin) && GETLOGIN_R_PROTO == REENTRANT_PROTO_B_BW
+#        define getlogin() getlogin_r(PL_reentrant_buffer->_getlogin_buffer, PL_reentrant_buffer->_getlogin_size)
+#      endif
+#      if !defined(getlogin) && GETLOGIN_R_PROTO == REENTRANT_PROTO_B_BI
+#        define getlogin() getlogin_r(PL_reentrant_buffer->_getlogin_buffer, PL_reentrant_buffer->_getlogin_size)
+#      endif
+#      if defined(getlogin)
+#        define PERL_REENTR_USING_GETLOGIN_R
+#      endif
+#    endif
+#  endif /* HAS_GETLOGIN_R */
+
+
+#  ifdef HAS_GETNETBYADDR_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef getnetbyaddr
+#      if !defined(getnetbyaddr) && GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_UISBWRE
+#        define getnetbyaddr(a, b) ((PL_reentrant_retint = getnetbyaddr_r(a, b, &PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size, &PL_reentrant_buffer->_netent_ptr, &PL_reentrant_buffer->_netent_errno)) == 0 ? PL_reentrant_buffer->_netent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyaddr", a, b) : 0))
+#      endif
+#      if !defined(getnetbyaddr) && GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_LISBI
+#        define getnetbyaddr(a, b) ((PL_reentrant_retint = getnetbyaddr_r(a, b, &PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size)) == 0 ? &PL_reentrant_buffer->_netent_struct : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyaddr", a, b) : 0))
+#      endif
+#      if !defined(getnetbyaddr) && GETNETBYADDR_R_PROTO == REENTRANT_PROTO_S_TISBI
+#        define getnetbyaddr(a, b) (getnetbyaddr_r(a, b, &PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size) ? &PL_reentrant_buffer->_netent_struct : ((errno == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyaddr", a, b) : 0))
+#      endif
+#      if !defined(getnetbyaddr) && GETNETBYADDR_R_PROTO == REENTRANT_PROTO_S_LISBI
+#        define getnetbyaddr(a, b) (getnetbyaddr_r(a, b, &PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size) ? &PL_reentrant_buffer->_netent_struct : ((errno == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyaddr", a, b) : 0))
+#      endif
+#      if !defined(getnetbyaddr) && GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_TISD
+#        define getnetbyaddr(a, b) ((PL_reentrant_retint = getnetbyaddr_r(a, b, &PL_reentrant_buffer->_netent_struct, &PL_reentrant_buffer->_netent_data)) == 0 ? &PL_reentrant_buffer->_netent_struct : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyaddr", a, b) : 0))
+#      endif
+#      if !defined(getnetbyaddr) && GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_LISD
+#        define getnetbyaddr(a, b) ((PL_reentrant_retint = getnetbyaddr_r(a, b, &PL_reentrant_buffer->_netent_struct, &PL_reentrant_buffer->_netent_data)) == 0 ? &PL_reentrant_buffer->_netent_struct : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyaddr", a, b) : 0))
+#      endif
+#      if !defined(getnetbyaddr) && GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_IISD
+#        define getnetbyaddr(a, b) ((PL_reentrant_retint = getnetbyaddr_r(a, b, &PL_reentrant_buffer->_netent_struct, &PL_reentrant_buffer->_netent_data)) == 0 ? &PL_reentrant_buffer->_netent_struct : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyaddr", a, b) : 0))
+#      endif
+#      if !defined(getnetbyaddr) && GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_uISBWRE
+#        define getnetbyaddr(a, b) ((PL_reentrant_retint = getnetbyaddr_r(a, b, &PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size, &PL_reentrant_buffer->_netent_ptr, &PL_reentrant_buffer->_netent_errno)) == 0 ? PL_reentrant_buffer->_netent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyaddr", a, b) : 0))
+#      endif
+#      if defined(getnetbyaddr)
+#        define PERL_REENTR_USING_GETNETBYADDR_R
+#      endif
+#    endif
+#  endif /* HAS_GETNETBYADDR_R */
+
+
+#  ifdef HAS_GETNETBYNAME_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef getnetbyname
+#      if !defined(getnetbyname) && GETNETBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWRE
+#        define getnetbyname(a) ((PL_reentrant_retint = getnetbyname_r(a, &PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size, &PL_reentrant_buffer->_netent_ptr, &PL_reentrant_buffer->_netent_errno)) == 0 ? PL_reentrant_buffer->_netent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyname", a) : 0))
+#      endif
+#      if !defined(getnetbyname) && GETNETBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBI
+#        define getnetbyname(a) ((PL_reentrant_retint = getnetbyname_r(a, &PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size)) == 0 ? &PL_reentrant_buffer->_netent_struct : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyname", a) : 0))
+#      endif
+#      if !defined(getnetbyname) && GETNETBYNAME_R_PROTO == REENTRANT_PROTO_S_CSBI
+#        define getnetbyname(a) (getnetbyname_r(a, &PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size) ? &PL_reentrant_buffer->_netent_struct : ((errno == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyname", a) : 0))
+#      endif
+#      if !defined(getnetbyname) && GETNETBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD
+#        define getnetbyname(a) ((PL_reentrant_retint = getnetbyname_r(a, &PL_reentrant_buffer->_netent_struct, &PL_reentrant_buffer->_netent_data)) == 0 ? &PL_reentrant_buffer->_netent_struct : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyname", a) : 0))
+#      endif
+#      if defined(getnetbyname)
+#        define PERL_REENTR_USING_GETNETBYNAME_R
+#      endif
+#    endif
+#  endif /* HAS_GETNETBYNAME_R */
+
+
+#  ifdef HAS_GETNETENT_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef getnetent
+#      if !defined(getnetent) && GETNETENT_R_PROTO == REENTRANT_PROTO_I_SBWRE
+#        define getnetent() ((PL_reentrant_retint = getnetent_r(&PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size, &PL_reentrant_buffer->_netent_ptr, &PL_reentrant_buffer->_netent_errno)) == 0 ? PL_reentrant_buffer->_netent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetent") : 0))
+#      endif
+#      if !defined(getnetent) && GETNETENT_R_PROTO == REENTRANT_PROTO_I_SBIE
+#        define getnetent() ((PL_reentrant_retint = getnetent_r(&PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size, &PL_reentrant_buffer->_netent_errno)) == 0 ? &PL_reentrant_buffer->_netent_struct : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetent") : 0))
+#      endif
+#      if !defined(getnetent) && GETNETENT_R_PROTO == REENTRANT_PROTO_S_SBIE
+#        define getnetent() (getnetent_r(&PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size, &PL_reentrant_buffer->_netent_errno) ? &PL_reentrant_buffer->_netent_struct : ((errno == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetent") : 0))
+#      endif
+#      if !defined(getnetent) && GETNETENT_R_PROTO == REENTRANT_PROTO_S_SBI
+#        define getnetent() (getnetent_r(&PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size) ? &PL_reentrant_buffer->_netent_struct : ((errno == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetent") : 0))
+#      endif
+#      if !defined(getnetent) && GETNETENT_R_PROTO == REENTRANT_PROTO_I_SBI
+#        define getnetent() ((PL_reentrant_retint = getnetent_r(&PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size)) == 0 ? &PL_reentrant_buffer->_netent_struct : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetent") : 0))
+#      endif
+#      if !defined(getnetent) && GETNETENT_R_PROTO == REENTRANT_PROTO_I_SD
+#        define getnetent() ((PL_reentrant_retint = getnetent_r(&PL_reentrant_buffer->_netent_struct, &PL_reentrant_buffer->_netent_data)) == 0 ? &PL_reentrant_buffer->_netent_struct : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetent") : 0))
+#      endif
+#      if defined(getnetent)
+#        define PERL_REENTR_USING_GETNETENT_R
+#      endif
+#    endif
+#  endif /* HAS_GETNETENT_R */
+
+
+#  ifdef HAS_GETPROTOBYNAME_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef getprotobyname
+#      if !defined(getprotobyname) && GETPROTOBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWR
+#        define getprotobyname(a) ((PL_reentrant_retint = getprotobyname_r(a, &PL_reentrant_buffer->_protoent_struct, PL_reentrant_buffer->_protoent_buffer, PL_reentrant_buffer->_protoent_size, &PL_reentrant_buffer->_protoent_ptr)) == 0 ? PL_reentrant_buffer->_protoent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct protoent *) Perl_reentrant_retry("getprotobyname", a) : 0))
+#      endif
+#      if !defined(getprotobyname) && GETPROTOBYNAME_R_PROTO == REENTRANT_PROTO_S_CSBI
+#        define getprotobyname(a) (getprotobyname_r(a, &PL_reentrant_buffer->_protoent_struct, PL_reentrant_buffer->_protoent_buffer, PL_reentrant_buffer->_protoent_size) ? &PL_reentrant_buffer->_protoent_struct : ((errno == ERANGE) ? (struct protoent *) Perl_reentrant_retry("getprotobyname", a) : 0))
+#      endif
+#      if !defined(getprotobyname) && GETPROTOBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD
+#        define getprotobyname(a) (REENTR_MEMZERO(&PL_reentrant_buffer->_protoent_data, sizeof(PL_reentrant_buffer->_protoent_data)),(PL_reentrant_retint = getprotobyname_r(a, &PL_reentrant_buffer->_protoent_struct, &PL_reentrant_buffer->_protoent_data)) == 0 ? &PL_reentrant_buffer->_protoent_struct : ((PL_reentrant_retint == ERANGE) ? (struct protoent *) Perl_reentrant_retry("getprotobyname", a) : 0))
+#      endif
+#      if defined(getprotobyname)
+#        define PERL_REENTR_USING_GETPROTOBYNAME_R
+#      endif
+#    endif
+#  endif /* HAS_GETPROTOBYNAME_R */
+
+
+#  ifdef HAS_GETPROTOBYNUMBER_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef getprotobynumber
+#      if !defined(getprotobynumber) && GETPROTOBYNUMBER_R_PROTO == REENTRANT_PROTO_I_ISBWR
+#        define getprotobynumber(a) ((PL_reentrant_retint = getprotobynumber_r(a, &PL_reentrant_buffer->_protoent_struct, PL_reentrant_buffer->_protoent_buffer, PL_reentrant_buffer->_protoent_size, &PL_reentrant_buffer->_protoent_ptr)) == 0 ? PL_reentrant_buffer->_protoent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct protoent *) Perl_reentrant_retry("getprotobynumber", a) : 0))
+#      endif
+#      if !defined(getprotobynumber) && GETPROTOBYNUMBER_R_PROTO == REENTRANT_PROTO_S_ISBI
+#        define getprotobynumber(a) (getprotobynumber_r(a, &PL_reentrant_buffer->_protoent_struct, PL_reentrant_buffer->_protoent_buffer, PL_reentrant_buffer->_protoent_size) ? &PL_reentrant_buffer->_protoent_struct : ((errno == ERANGE) ? (struct protoent *) Perl_reentrant_retry("getprotobynumber", a) : 0))
+#      endif
+#      if !defined(getprotobynumber) && GETPROTOBYNUMBER_R_PROTO == REENTRANT_PROTO_I_ISD
+#        define getprotobynumber(a) (REENTR_MEMZERO(&PL_reentrant_buffer->_protoent_data, sizeof(PL_reentrant_buffer->_protoent_data)),(PL_reentrant_retint = getprotobynumber_r(a, &PL_reentrant_buffer->_protoent_struct, &PL_reentrant_buffer->_protoent_data)) == 0 ? &PL_reentrant_buffer->_protoent_struct : ((PL_reentrant_retint == ERANGE) ? (struct protoent *) Perl_reentrant_retry("getprotobynumber", a) : 0))
+#      endif
+#      if defined(getprotobynumber)
+#        define PERL_REENTR_USING_GETPROTOBYNUMBER_R
+#      endif
+#    endif
+#  endif /* HAS_GETPROTOBYNUMBER_R */
+
+
+#  ifdef HAS_GETPROTOENT_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef getprotoent
+#      if !defined(getprotoent) && GETPROTOENT_R_PROTO == REENTRANT_PROTO_I_SBWR
+#        define getprotoent() ((PL_reentrant_retint = getprotoent_r(&PL_reentrant_buffer->_protoent_struct, PL_reentrant_buffer->_protoent_buffer, PL_reentrant_buffer->_protoent_size, &PL_reentrant_buffer->_protoent_ptr)) == 0 ? PL_reentrant_buffer->_protoent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct protoent *) Perl_reentrant_retry("getprotoent") : 0))
+#      endif
+#      if !defined(getprotoent) && GETPROTOENT_R_PROTO == REENTRANT_PROTO_I_SBI
+#        define getprotoent() ((PL_reentrant_retint = getprotoent_r(&PL_reentrant_buffer->_protoent_struct, PL_reentrant_buffer->_protoent_buffer, PL_reentrant_buffer->_protoent_size)) == 0 ? &PL_reentrant_buffer->_protoent_struct : ((PL_reentrant_retint == ERANGE) ? (struct protoent *) Perl_reentrant_retry("getprotoent") : 0))
+#      endif
+#      if !defined(getprotoent) && GETPROTOENT_R_PROTO == REENTRANT_PROTO_S_SBI
+#        define getprotoent() (getprotoent_r(&PL_reentrant_buffer->_protoent_struct, PL_reentrant_buffer->_protoent_buffer, PL_reentrant_buffer->_protoent_size) ? &PL_reentrant_buffer->_protoent_struct : ((errno == ERANGE) ? (struct protoent *) Perl_reentrant_retry("getprotoent") : 0))
+#      endif
+#      if !defined(getprotoent) && GETPROTOENT_R_PROTO == REENTRANT_PROTO_I_SD
+#        define getprotoent() (REENTR_MEMZERO(&PL_reentrant_buffer->_protoent_data, sizeof(PL_reentrant_buffer->_protoent_data)),(PL_reentrant_retint = getprotoent_r(&PL_reentrant_buffer->_protoent_struct, &PL_reentrant_buffer->_protoent_data)) == 0 ? &PL_reentrant_buffer->_protoent_struct : ((PL_reentrant_retint == ERANGE) ? (struct protoent *) Perl_reentrant_retry("getprotoent") : 0))
+#      endif
+#      if defined(getprotoent)
+#        define PERL_REENTR_USING_GETPROTOENT_R
+#      endif
+#    endif
+#  endif /* HAS_GETPROTOENT_R */
+
+
+#  ifdef HAS_GETPWENT_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef getpwent
+#      if !defined(getpwent) && GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBWR
+#        define getpwent() ((PL_reentrant_retint = getpwent_r(&PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size, &PL_reentrant_buffer->_pwent_ptr)) == 0 ? PL_reentrant_buffer->_pwent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwent") : 0))
+#      endif
+#      if !defined(getpwent) && GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBIR
+#        define getpwent() ((PL_reentrant_retint = getpwent_r(&PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size, &PL_reentrant_buffer->_pwent_ptr)) == 0 ? PL_reentrant_buffer->_pwent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwent") : 0))
+#      endif
+#      if !defined(getpwent) && GETPWENT_R_PROTO == REENTRANT_PROTO_S_SBW
+#        define getpwent() (getpwent_r(&PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size) ? &PL_reentrant_buffer->_pwent_struct : ((errno == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwent") : 0))
+#      endif
+#      if !defined(getpwent) && GETPWENT_R_PROTO == REENTRANT_PROTO_S_SBI
+#        define getpwent() (getpwent_r(&PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size) ? &PL_reentrant_buffer->_pwent_struct : ((errno == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwent") : 0))
+#      endif
+#      if !defined(getpwent) && GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBI
+#        define getpwent() ((PL_reentrant_retint = getpwent_r(&PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size)) == 0 ? &PL_reentrant_buffer->_pwent_struct : ((PL_reentrant_retint == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwent") : 0))
+#      endif
+#      if !defined(getpwent) && GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBIH
+#        define getpwent() ((PL_reentrant_retint = getpwent_r(&PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size, &PL_reentrant_buffer->_pwent_fptr)) == 0 ? &PL_reentrant_buffer->_pwent_struct : ((PL_reentrant_retint == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwent") : 0))
+#      endif
+#      if defined(getpwent)
+#        define PERL_REENTR_USING_GETPWENT_R
+#      endif
+#    endif
+#  endif /* HAS_GETPWENT_R */
+
+
+#  ifdef HAS_GETPWNAM_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef getpwnam
+#      if !defined(getpwnam) && GETPWNAM_R_PROTO == REENTRANT_PROTO_I_CSBWR
+#        define getpwnam(a) ((PL_reentrant_retint = getpwnam_r(a, &PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size, &PL_reentrant_buffer->_pwent_ptr)) == 0 ? PL_reentrant_buffer->_pwent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwnam", a) : 0))
+#      endif
+#      if !defined(getpwnam) && GETPWNAM_R_PROTO == REENTRANT_PROTO_I_CSBIR
+#        define getpwnam(a) ((PL_reentrant_retint = getpwnam_r(a, &PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size, &PL_reentrant_buffer->_pwent_ptr)) == 0 ? PL_reentrant_buffer->_pwent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwnam", a) : 0))
+#      endif
+#      if !defined(getpwnam) && GETPWNAM_R_PROTO == REENTRANT_PROTO_S_CSBI
+#        define getpwnam(a) (getpwnam_r(a, &PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size) ? &PL_reentrant_buffer->_pwent_struct : ((errno == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwnam", a) : 0))
+#      endif
+#      if !defined(getpwnam) && GETPWNAM_R_PROTO == REENTRANT_PROTO_I_CSBI
+#        define getpwnam(a) ((PL_reentrant_retint = getpwnam_r(a, &PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size)) == 0 ? &PL_reentrant_buffer->_pwent_struct : ((PL_reentrant_retint == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwnam", a) : 0))
+#      endif
+#      if defined(getpwnam)
+#        define PERL_REENTR_USING_GETPWNAM_R
+#      endif
+#    endif
+#  endif /* HAS_GETPWNAM_R */
+
+
+#  ifdef HAS_GETPWUID_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef getpwuid
+#      if !defined(getpwuid) && GETPWUID_R_PROTO == REENTRANT_PROTO_I_TSBWR
+#        define getpwuid(a) ((PL_reentrant_retint = getpwuid_r(a, &PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size, &PL_reentrant_buffer->_pwent_ptr)) == 0 ? PL_reentrant_buffer->_pwent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwuid", a) : 0))
+#      endif
+#      if !defined(getpwuid) && GETPWUID_R_PROTO == REENTRANT_PROTO_I_TSBIR
+#        define getpwuid(a) ((PL_reentrant_retint = getpwuid_r(a, &PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size, &PL_reentrant_buffer->_pwent_ptr)) == 0 ? PL_reentrant_buffer->_pwent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwuid", a) : 0))
+#      endif
+#      if !defined(getpwuid) && GETPWUID_R_PROTO == REENTRANT_PROTO_I_TSBI
+#        define getpwuid(a) ((PL_reentrant_retint = getpwuid_r(a, &PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size)) == 0 ? &PL_reentrant_buffer->_pwent_struct : ((PL_reentrant_retint == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwuid", a) : 0))
+#      endif
+#      if !defined(getpwuid) && GETPWUID_R_PROTO == REENTRANT_PROTO_S_TSBI
+#        define getpwuid(a) (getpwuid_r(a, &PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size) ? &PL_reentrant_buffer->_pwent_struct : ((errno == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwuid", a) : 0))
+#      endif
+#      if defined(getpwuid)
+#        define PERL_REENTR_USING_GETPWUID_R
+#      endif
+#    endif
+#  endif /* HAS_GETPWUID_R */
+
+
+#  ifdef HAS_GETSERVBYNAME_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef getservbyname
+#      if !defined(getservbyname) && GETSERVBYNAME_R_PROTO == REENTRANT_PROTO_I_CCSBWR
+#        define getservbyname(a, b) ((PL_reentrant_retint = getservbyname_r(a, b, &PL_reentrant_buffer->_servent_struct, PL_reentrant_buffer->_servent_buffer, PL_reentrant_buffer->_servent_size, &PL_reentrant_buffer->_servent_ptr)) == 0 ? PL_reentrant_buffer->_servent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct servent *) Perl_reentrant_retry("getservbyname", a, b) : 0))
+#      endif
+#      if !defined(getservbyname) && GETSERVBYNAME_R_PROTO == REENTRANT_PROTO_S_CCSBI
+#        define getservbyname(a, b) (getservbyname_r(a, b, &PL_reentrant_buffer->_servent_struct, PL_reentrant_buffer->_servent_buffer, PL_reentrant_buffer->_servent_size) ? &PL_reentrant_buffer->_servent_struct : ((errno == ERANGE) ? (struct servent *) Perl_reentrant_retry("getservbyname", a, b) : 0))
+#      endif
+#      if !defined(getservbyname) && GETSERVBYNAME_R_PROTO == REENTRANT_PROTO_I_CCSD
+#        define getservbyname(a, b) (REENTR_MEMZERO(&PL_reentrant_buffer->_servent_data, sizeof(PL_reentrant_buffer->_servent_data)),(PL_reentrant_retint = getservbyname_r(a, b, &PL_reentrant_buffer->_servent_struct, &PL_reentrant_buffer->_servent_data)) == 0 ? &PL_reentrant_buffer->_servent_struct : ((PL_reentrant_retint == ERANGE) ? (struct servent *) Perl_reentrant_retry("getservbyname", a, b) : 0))
+#      endif
+#      if defined(getservbyname)
+#        define PERL_REENTR_USING_GETSERVBYNAME_R
+#      endif
+#    endif
+#  endif /* HAS_GETSERVBYNAME_R */
+
+
+#  ifdef HAS_GETSERVBYPORT_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef getservbyport
+#      if !defined(getservbyport) && GETSERVBYPORT_R_PROTO == REENTRANT_PROTO_I_ICSBWR
+#        define getservbyport(a, b) ((PL_reentrant_retint = getservbyport_r(a, b, &PL_reentrant_buffer->_servent_struct, PL_reentrant_buffer->_servent_buffer, PL_reentrant_buffer->_servent_size, &PL_reentrant_buffer->_servent_ptr)) == 0 ? PL_reentrant_buffer->_servent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct servent *) Perl_reentrant_retry("getservbyport", a, b) : 0))
+#      endif
+#      if !defined(getservbyport) && GETSERVBYPORT_R_PROTO == REENTRANT_PROTO_S_ICSBI
+#        define getservbyport(a, b) (getservbyport_r(a, b, &PL_reentrant_buffer->_servent_struct, PL_reentrant_buffer->_servent_buffer, PL_reentrant_buffer->_servent_size) ? &PL_reentrant_buffer->_servent_struct : ((errno == ERANGE) ? (struct servent *) Perl_reentrant_retry("getservbyport", a, b) : 0))
+#      endif
+#      if !defined(getservbyport) && GETSERVBYPORT_R_PROTO == REENTRANT_PROTO_I_ICSD
+#        define getservbyport(a, b) (REENTR_MEMZERO(&PL_reentrant_buffer->_servent_data, sizeof(PL_reentrant_buffer->_servent_data)),(PL_reentrant_retint = getservbyport_r(a, b, &PL_reentrant_buffer->_servent_struct, &PL_reentrant_buffer->_servent_data)) == 0 ? &PL_reentrant_buffer->_servent_struct : ((PL_reentrant_retint == ERANGE) ? (struct servent *) Perl_reentrant_retry("getservbyport", a, b) : 0))
+#      endif
+#      if defined(getservbyport)
+#        define PERL_REENTR_USING_GETSERVBYPORT_R
+#      endif
+#    endif
+#  endif /* HAS_GETSERVBYPORT_R */
+
+
+#  ifdef HAS_GETSERVENT_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef getservent
+#      if !defined(getservent) && GETSERVENT_R_PROTO == REENTRANT_PROTO_I_SBWR
+#        define getservent() ((PL_reentrant_retint = getservent_r(&PL_reentrant_buffer->_servent_struct, PL_reentrant_buffer->_servent_buffer, PL_reentrant_buffer->_servent_size, &PL_reentrant_buffer->_servent_ptr)) == 0 ? PL_reentrant_buffer->_servent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct servent *) Perl_reentrant_retry("getservent") : 0))
+#      endif
+#      if !defined(getservent) && GETSERVENT_R_PROTO == REENTRANT_PROTO_I_SBI
+#        define getservent() ((PL_reentrant_retint = getservent_r(&PL_reentrant_buffer->_servent_struct, PL_reentrant_buffer->_servent_buffer, PL_reentrant_buffer->_servent_size)) == 0 ? &PL_reentrant_buffer->_servent_struct : ((PL_reentrant_retint == ERANGE) ? (struct servent *) Perl_reentrant_retry("getservent") : 0))
+#      endif
+#      if !defined(getservent) && GETSERVENT_R_PROTO == REENTRANT_PROTO_S_SBI
+#        define getservent() (getservent_r(&PL_reentrant_buffer->_servent_struct, PL_reentrant_buffer->_servent_buffer, PL_reentrant_buffer->_servent_size) ? &PL_reentrant_buffer->_servent_struct : ((errno == ERANGE) ? (struct servent *) Perl_reentrant_retry("getservent") : 0))
+#      endif
+#      if !defined(getservent) && GETSERVENT_R_PROTO == REENTRANT_PROTO_I_SD
+#        define getservent() (REENTR_MEMZERO(&PL_reentrant_buffer->_servent_data, sizeof(PL_reentrant_buffer->_servent_data)),(PL_reentrant_retint = getservent_r(&PL_reentrant_buffer->_servent_struct, &PL_reentrant_buffer->_servent_data)) == 0 ? &PL_reentrant_buffer->_servent_struct : ((PL_reentrant_retint == ERANGE) ? (struct servent *) Perl_reentrant_retry("getservent") : 0))
+#      endif
+#      if defined(getservent)
+#        define PERL_REENTR_USING_GETSERVENT_R
+#      endif
+#    endif
+#  endif /* HAS_GETSERVENT_R */
+
+
+#  ifdef HAS_GETSPNAM_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef getspnam
+#      if !defined(getspnam) && GETSPNAM_R_PROTO == REENTRANT_PROTO_I_CSBWR
+#        define getspnam(a) ((PL_reentrant_retint = getspnam_r(a, &PL_reentrant_buffer->_spent_struct, PL_reentrant_buffer->_spent_buffer, PL_reentrant_buffer->_spent_size, &PL_reentrant_buffer->_spent_ptr)) == 0 ? PL_reentrant_buffer->_spent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct spwd *) Perl_reentrant_retry("getspnam", a) : 0))
+#      endif
+#      if !defined(getspnam) && GETSPNAM_R_PROTO == REENTRANT_PROTO_S_CSBI
+#        define getspnam(a) (getspnam_r(a, &PL_reentrant_buffer->_spent_struct, PL_reentrant_buffer->_spent_buffer, PL_reentrant_buffer->_spent_size) ? &PL_reentrant_buffer->_spent_struct : ((errno == ERANGE) ? (struct spwd *) Perl_reentrant_retry("getspnam", a) : 0))
+#      endif
+#      if defined(getspnam)
+#        define PERL_REENTR_USING_GETSPNAM_R
+#      endif
+#    endif
+#  endif /* HAS_GETSPNAM_R */
+
+
+#  ifdef HAS_GMTIME_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef gmtime
+#      if !defined(gmtime) && GMTIME_R_PROTO == REENTRANT_PROTO_S_TS
+#        define gmtime(a) (gmtime_r(a, &PL_reentrant_buffer->_gmtime_struct) ? &PL_reentrant_buffer->_gmtime_struct : 0)
+#      endif
+#      if defined(gmtime)
+#        define PERL_REENTR_USING_GMTIME_R
+#      endif
+#    endif
+#  endif /* HAS_GMTIME_R */
+
+
+#  ifdef HAS_LOCALTIME_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef localtime
+#      if !defined(localtime) && LOCALTIME_R_PROTO == REENTRANT_PROTO_S_TS
+#        define localtime(a) (L_R_TZSET localtime_r(a, &PL_reentrant_buffer->_localtime_struct) ? &PL_reentrant_buffer->_localtime_struct : 0)
+#      endif
+#      if defined(localtime)
+#        define PERL_REENTR_USING_LOCALTIME_R
+#      endif
+#    endif
+#  endif /* HAS_LOCALTIME_R */
+
+
+#  ifdef HAS_READDIR_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef readdir
+#      if !defined(readdir) && READDIR_R_PROTO == REENTRANT_PROTO_I_TSR
+#        define readdir(a) (readdir_r(a, PL_reentrant_buffer->_readdir_struct, &PL_reentrant_buffer->_readdir_ptr) == 0 ? PL_reentrant_buffer->_readdir_ptr : 0)
+#      endif
+#      if !defined(readdir) && READDIR_R_PROTO == REENTRANT_PROTO_I_TS
+#        define readdir(a) (readdir_r(a, PL_reentrant_buffer->_readdir_struct) == 0 ? PL_reentrant_buffer->_readdir_struct : 0)
+#      endif
+#      if defined(readdir)
+#        define PERL_REENTR_USING_READDIR_R
+#      endif
+#    endif
+#  endif /* HAS_READDIR_R */
+
+
+#  ifdef HAS_READDIR64_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef readdir64
+#      if !defined(readdir64) && READDIR64_R_PROTO == REENTRANT_PROTO_I_TSR
+#        define readdir64(a) (readdir64_r(a, PL_reentrant_buffer->_readdir64_struct, &PL_reentrant_buffer->_readdir64_ptr) == 0 ? PL_reentrant_buffer->_readdir64_ptr : 0)
+#      endif
+#      if !defined(readdir64) && READDIR64_R_PROTO == REENTRANT_PROTO_I_TS
+#        define readdir64(a) (readdir64_r(a, PL_reentrant_buffer->_readdir64_struct) == 0 ? PL_reentrant_buffer->_readdir64_struct : 0)
+#      endif
+#      if defined(readdir64)
+#        define PERL_REENTR_USING_READDIR64_R
+#      endif
+#    endif
+#  endif /* HAS_READDIR64_R */
+
+
+#  ifdef HAS_SETGRENT_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef setgrent
+#      if !defined(setgrent) && SETGRENT_R_PROTO == REENTRANT_PROTO_I_H
+#        define setgrent() (setgrent_r(&PL_reentrant_buffer->_grent_fptr) == 0 ? 1 : 0)
+#      endif
+#      if !defined(setgrent) && SETGRENT_R_PROTO == REENTRANT_PROTO_V_H
+#        define setgrent() setgrent_r(&PL_reentrant_buffer->_grent_fptr)
+#      endif
+#      if defined(setgrent)
+#        define PERL_REENTR_USING_SETGRENT_R
+#      endif
+#    endif
+#  endif /* HAS_SETGRENT_R */
+
+
+#  ifdef HAS_SETHOSTENT_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef sethostent
+#      if !defined(sethostent) && SETHOSTENT_R_PROTO == REENTRANT_PROTO_I_ID
+#        define sethostent(a) (sethostent_r(a, &PL_reentrant_buffer->_hostent_data) == 0 ? 1 : 0)
+#      endif
+#      if !defined(sethostent) && SETHOSTENT_R_PROTO == REENTRANT_PROTO_V_ID
+#        define sethostent(a) sethostent_r(a, &PL_reentrant_buffer->_hostent_data)
+#      endif
+#      if defined(sethostent)
+#        define PERL_REENTR_USING_SETHOSTENT_R
+#      endif
+#    endif
+#  endif /* HAS_SETHOSTENT_R */
+
+
+#  ifdef HAS_SETLOCALE_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef setlocale
+#      if !defined(setlocale) && SETLOCALE_R_PROTO == REENTRANT_PROTO_I_ICBI
+#        define setlocale(a, b) (setlocale_r(a, b, PL_reentrant_buffer->_setlocale_buffer, PL_reentrant_buffer->_setlocale_size) == 0 ? PL_reentrant_buffer->_setlocale_buffer : 0)
+#      endif
+#      if defined(setlocale)
+#        define PERL_REENTR_USING_SETLOCALE_R
+#      endif
+#    endif
+#  endif /* HAS_SETLOCALE_R */
+
+
+#  ifdef HAS_SETNETENT_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef setnetent
+#      if !defined(setnetent) && SETNETENT_R_PROTO == REENTRANT_PROTO_I_ID
+#        define setnetent(a) (setnetent_r(a, &PL_reentrant_buffer->_netent_data) == 0 ? 1 : 0)
+#      endif
+#      if !defined(setnetent) && SETNETENT_R_PROTO == REENTRANT_PROTO_V_ID
+#        define setnetent(a) setnetent_r(a, &PL_reentrant_buffer->_netent_data)
+#      endif
+#      if defined(setnetent)
+#        define PERL_REENTR_USING_SETNETENT_R
+#      endif
+#    endif
+#  endif /* HAS_SETNETENT_R */
+
+
+#  ifdef HAS_SETPROTOENT_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef setprotoent
+#      if !defined(setprotoent) && SETPROTOENT_R_PROTO == REENTRANT_PROTO_I_ID
+#        define setprotoent(a) (setprotoent_r(a, &PL_reentrant_buffer->_protoent_data) == 0 ? 1 : 0)
+#      endif
+#      if !defined(setprotoent) && SETPROTOENT_R_PROTO == REENTRANT_PROTO_V_ID
+#        define setprotoent(a) setprotoent_r(a, &PL_reentrant_buffer->_protoent_data)
+#      endif
+#      if defined(setprotoent)
+#        define PERL_REENTR_USING_SETPROTOENT_R
+#      endif
+#    endif
+#  endif /* HAS_SETPROTOENT_R */
+
+
+#  ifdef HAS_SETPWENT_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef setpwent
+#      if !defined(setpwent) && SETPWENT_R_PROTO == REENTRANT_PROTO_I_H
+#        define setpwent() (setpwent_r(&PL_reentrant_buffer->_pwent_fptr) == 0 ? 1 : 0)
+#      endif
+#      if !defined(setpwent) && SETPWENT_R_PROTO == REENTRANT_PROTO_V_H
+#        define setpwent() setpwent_r(&PL_reentrant_buffer->_pwent_fptr)
+#      endif
+#      if defined(setpwent)
+#        define PERL_REENTR_USING_SETPWENT_R
+#      endif
+#    endif
+#  endif /* HAS_SETPWENT_R */
+
+
+#  ifdef HAS_SETSERVENT_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef setservent
+#      if !defined(setservent) && SETSERVENT_R_PROTO == REENTRANT_PROTO_I_ID
+#        define setservent(a) (setservent_r(a, &PL_reentrant_buffer->_servent_data) == 0 ? 1 : 0)
+#      endif
+#      if !defined(setservent) && SETSERVENT_R_PROTO == REENTRANT_PROTO_V_ID
+#        define setservent(a) setservent_r(a, &PL_reentrant_buffer->_servent_data)
+#      endif
+#      if defined(setservent)
+#        define PERL_REENTR_USING_SETSERVENT_R
+#      endif
+#    endif
+#  endif /* HAS_SETSERVENT_R */
+
+
+#  ifdef HAS_STRERROR_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef strerror
+#      if !defined(strerror) && STRERROR_R_PROTO == REENTRANT_PROTO_I_IBW
+#        define strerror(a) (strerror_r(a, PL_reentrant_buffer->_strerror_buffer, PL_reentrant_buffer->_strerror_size) == 0 ? PL_reentrant_buffer->_strerror_buffer : 0)
+#      endif
+#      if !defined(strerror) && STRERROR_R_PROTO == REENTRANT_PROTO_I_IBI
+#        define strerror(a) (strerror_r(a, PL_reentrant_buffer->_strerror_buffer, PL_reentrant_buffer->_strerror_size) == 0 ? PL_reentrant_buffer->_strerror_buffer : 0)
+#      endif
+#      if !defined(strerror) && STRERROR_R_PROTO == REENTRANT_PROTO_B_IBW
+#        define strerror(a) strerror_r(a, PL_reentrant_buffer->_strerror_buffer, PL_reentrant_buffer->_strerror_size)
+#      endif
+#      if defined(strerror)
+#        define PERL_REENTR_USING_STRERROR_R
+#      endif
+#    endif
+#  endif /* HAS_STRERROR_R */
+
+
+#  ifdef HAS_TMPNAM_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef tmpnam
+#      if !defined(tmpnam) && TMPNAM_R_PROTO == REENTRANT_PROTO_B_B
+#        define tmpnam(a) tmpnam_r(a)
+#      endif
+#      if defined(tmpnam)
+#        define PERL_REENTR_USING_TMPNAM_R
+#      endif
+#    endif
+#  endif /* HAS_TMPNAM_R */
+
+
+#  ifdef HAS_TTYNAME_R
+#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+#      undef ttyname
+#      if !defined(ttyname) && TTYNAME_R_PROTO == REENTRANT_PROTO_I_IBW
+#        define ttyname(a) (ttyname_r(a, PL_reentrant_buffer->_ttyname_buffer, PL_reentrant_buffer->_ttyname_size) == 0 ? PL_reentrant_buffer->_ttyname_buffer : 0)
+#      endif
+#      if !defined(ttyname) && TTYNAME_R_PROTO == REENTRANT_PROTO_I_IBI
+#        define ttyname(a) (ttyname_r(a, PL_reentrant_buffer->_ttyname_buffer, PL_reentrant_buffer->_ttyname_size) == 0 ? PL_reentrant_buffer->_ttyname_buffer : 0)
+#      endif
+#      if !defined(ttyname) && TTYNAME_R_PROTO == REENTRANT_PROTO_B_IBI
+#        define ttyname(a) ttyname_r(a, PL_reentrant_buffer->_ttyname_buffer, PL_reentrant_buffer->_ttyname_size)
+#      endif
+#      if defined(ttyname)
+#        define PERL_REENTR_USING_TTYNAME_R
+#      endif
+#    endif
+#  endif /* HAS_TTYNAME_R */
+
+
+
+
+/* Special case this; if others came along, could automate it */
+#  ifdef HAS_GETSPNAM_R
+#    define KEY_getspnam -1
 #  endif
-#endif /* HAS_CRYPT_R */
-
-#ifdef HAS_CTERMID_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef ctermid
-#   if !defined(ctermid) && CTERMID_R_PROTO == REENTRANT_PROTO_B_B
-#       define ctermid(a) ctermid_r(a)
-#   endif
-#  endif
-#endif /* HAS_CTERMID_R */
-
-#ifdef HAS_CTIME_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef ctime
-#   if !defined(ctime) && CTIME_R_PROTO == REENTRANT_PROTO_B_SB
-#       define ctime(a) ctime_r(a, PL_reentrant_buffer->_ctime_buffer)
-#   endif
-#   if !defined(ctime) && CTIME_R_PROTO == REENTRANT_PROTO_B_SBI
-#       define ctime(a) ctime_r(a, PL_reentrant_buffer->_ctime_buffer, PL_reentrant_buffer->_ctime_size)
-#   endif
-#   if !defined(ctime) && CTIME_R_PROTO == REENTRANT_PROTO_I_SB
-#       define ctime(a) (ctime_r(a, PL_reentrant_buffer->_ctime_buffer) == 0 ? PL_reentrant_buffer->_ctime_buffer : 0)
-#   endif
-#   if !defined(ctime) && CTIME_R_PROTO == REENTRANT_PROTO_I_SBI
-#       define ctime(a) (ctime_r(a, PL_reentrant_buffer->_ctime_buffer, PL_reentrant_buffer->_ctime_size) == 0 ? PL_reentrant_buffer->_ctime_buffer : 0)
-#   endif
-#  endif
-#endif /* HAS_CTIME_R */
-
-#ifdef HAS_ENDGRENT_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef endgrent
-#   if !defined(endgrent) && ENDGRENT_R_PROTO == REENTRANT_PROTO_I_H
-#       define endgrent() (endgrent_r(&PL_reentrant_buffer->_grent_fptr) == 0 ? 1 : 0)
-#   endif
-#   if !defined(endgrent) && ENDGRENT_R_PROTO == REENTRANT_PROTO_V_H
-#       define endgrent() endgrent_r(&PL_reentrant_buffer->_grent_fptr)
-#   endif
-#  endif
-#endif /* HAS_ENDGRENT_R */
-
-#ifdef HAS_ENDHOSTENT_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef endhostent
-#   if !defined(endhostent) && ENDHOSTENT_R_PROTO == REENTRANT_PROTO_I_D
-#       define endhostent() (endhostent_r(&PL_reentrant_buffer->_hostent_data) == 0 ? 1 : 0)
-#   endif
-#   if !defined(endhostent) && ENDHOSTENT_R_PROTO == REENTRANT_PROTO_V_D
-#       define endhostent() endhostent_r(&PL_reentrant_buffer->_hostent_data)
-#   endif
-#  endif
-#endif /* HAS_ENDHOSTENT_R */
-
-#ifdef HAS_ENDNETENT_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef endnetent
-#   if !defined(endnetent) && ENDNETENT_R_PROTO == REENTRANT_PROTO_I_D
-#       define endnetent() (endnetent_r(&PL_reentrant_buffer->_netent_data) == 0 ? 1 : 0)
-#   endif
-#   if !defined(endnetent) && ENDNETENT_R_PROTO == REENTRANT_PROTO_V_D
-#       define endnetent() endnetent_r(&PL_reentrant_buffer->_netent_data)
-#   endif
-#  endif
-#endif /* HAS_ENDNETENT_R */
-
-#ifdef HAS_ENDPROTOENT_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef endprotoent
-#   if !defined(endprotoent) && ENDPROTOENT_R_PROTO == REENTRANT_PROTO_I_D
-#       define endprotoent() (endprotoent_r(&PL_reentrant_buffer->_protoent_data) == 0 ? 1 : 0)
-#   endif
-#   if !defined(endprotoent) && ENDPROTOENT_R_PROTO == REENTRANT_PROTO_V_D
-#       define endprotoent() endprotoent_r(&PL_reentrant_buffer->_protoent_data)
-#   endif
-#  endif
-#endif /* HAS_ENDPROTOENT_R */
-
-#ifdef HAS_ENDPWENT_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef endpwent
-#   if !defined(endpwent) && ENDPWENT_R_PROTO == REENTRANT_PROTO_I_H
-#       define endpwent() (endpwent_r(&PL_reentrant_buffer->_pwent_fptr) == 0 ? 1 : 0)
-#   endif
-#   if !defined(endpwent) && ENDPWENT_R_PROTO == REENTRANT_PROTO_V_H
-#       define endpwent() endpwent_r(&PL_reentrant_buffer->_pwent_fptr)
-#   endif
-#  endif
-#endif /* HAS_ENDPWENT_R */
-
-#ifdef HAS_ENDSERVENT_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef endservent
-#   if !defined(endservent) && ENDSERVENT_R_PROTO == REENTRANT_PROTO_I_D
-#       define endservent() (endservent_r(&PL_reentrant_buffer->_servent_data) == 0 ? 1 : 0)
-#   endif
-#   if !defined(endservent) && ENDSERVENT_R_PROTO == REENTRANT_PROTO_V_D
-#       define endservent() endservent_r(&PL_reentrant_buffer->_servent_data)
-#   endif
-#  endif
-#endif /* HAS_ENDSERVENT_R */
-
-#ifdef HAS_GETGRENT_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef getgrent
-#   if !defined(getgrent) && GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBWR
-#       define getgrent() ((PL_reentrant_retint = getgrent_r(&PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, &PL_reentrant_buffer->_grent_ptr)) == 0 ? PL_reentrant_buffer->_grent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrent") : 0))
-#   endif
-#   if !defined(getgrent) && GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBIR
-#       define getgrent() ((PL_reentrant_retint = getgrent_r(&PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, &PL_reentrant_buffer->_grent_ptr)) == 0 ? PL_reentrant_buffer->_grent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrent") : 0))
-#   endif
-#   if !defined(getgrent) && GETGRENT_R_PROTO == REENTRANT_PROTO_S_SBW
-#       define getgrent() (getgrent_r(&PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size) ? &PL_reentrant_buffer->_grent_struct : ((errno == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrent") : 0))
-#   endif
-#   if !defined(getgrent) && GETGRENT_R_PROTO == REENTRANT_PROTO_S_SBI
-#       define getgrent() (getgrent_r(&PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size) ? &PL_reentrant_buffer->_grent_struct : ((errno == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrent") : 0))
-#   endif
-#   if !defined(getgrent) && GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBI
-#       define getgrent() ((PL_reentrant_retint = getgrent_r(&PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size)) == 0 ? &PL_reentrant_buffer->_grent_struct : ((PL_reentrant_retint == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrent") : 0))
-#   endif
-#   if !defined(getgrent) && GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBIH
-#       define getgrent() ((PL_reentrant_retint = getgrent_r(&PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, &PL_reentrant_buffer->_grent_fptr)) == 0 ? &PL_reentrant_buffer->_grent_struct : ((PL_reentrant_retint == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrent") : 0))
-#   endif
-#  endif
-#endif /* HAS_GETGRENT_R */
-
-#ifdef HAS_GETGRGID_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef getgrgid
-#   if !defined(getgrgid) && GETGRGID_R_PROTO == REENTRANT_PROTO_I_TSBWR
-#       define getgrgid(a) ((PL_reentrant_retint = getgrgid_r(a, &PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, &PL_reentrant_buffer->_grent_ptr)) == 0 ? PL_reentrant_buffer->_grent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrgid", a) : 0))
-#   endif
-#   if !defined(getgrgid) && GETGRGID_R_PROTO == REENTRANT_PROTO_I_TSBIR
-#       define getgrgid(a) ((PL_reentrant_retint = getgrgid_r(a, &PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, &PL_reentrant_buffer->_grent_ptr)) == 0 ? PL_reentrant_buffer->_grent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrgid", a) : 0))
-#   endif
-#   if !defined(getgrgid) && GETGRGID_R_PROTO == REENTRANT_PROTO_I_TSBI
-#       define getgrgid(a) ((PL_reentrant_retint = getgrgid_r(a, &PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size)) == 0 ? &PL_reentrant_buffer->_grent_struct : ((PL_reentrant_retint == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrgid", a) : 0))
-#   endif
-#   if !defined(getgrgid) && GETGRGID_R_PROTO == REENTRANT_PROTO_S_TSBI
-#       define getgrgid(a) (getgrgid_r(a, &PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size) ? &PL_reentrant_buffer->_grent_struct : ((errno == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrgid", a) : 0))
-#   endif
-#  endif
-#endif /* HAS_GETGRGID_R */
-
-#ifdef HAS_GETGRNAM_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef getgrnam
-#   if !defined(getgrnam) && GETGRNAM_R_PROTO == REENTRANT_PROTO_I_CSBWR
-#       define getgrnam(a) ((PL_reentrant_retint = getgrnam_r(a, &PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, &PL_reentrant_buffer->_grent_ptr)) == 0 ? PL_reentrant_buffer->_grent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrnam", a) : 0))
-#   endif
-#   if !defined(getgrnam) && GETGRNAM_R_PROTO == REENTRANT_PROTO_I_CSBIR
-#       define getgrnam(a) ((PL_reentrant_retint = getgrnam_r(a, &PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, &PL_reentrant_buffer->_grent_ptr)) == 0 ? PL_reentrant_buffer->_grent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrnam", a) : 0))
-#   endif
-#   if !defined(getgrnam) && GETGRNAM_R_PROTO == REENTRANT_PROTO_S_CBI
-#       define getgrnam(a) (getgrnam_r(a, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size) ? PL_reentrant_buffer->_grent_buffer : ((errno == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrnam", a) : 0))
-#   endif
-#   if !defined(getgrnam) && GETGRNAM_R_PROTO == REENTRANT_PROTO_I_CSBI
-#       define getgrnam(a) ((PL_reentrant_retint = getgrnam_r(a, &PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size)) == 0 ? &PL_reentrant_buffer->_grent_struct : ((PL_reentrant_retint == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrnam", a) : 0))
-#   endif
-#   if !defined(getgrnam) && GETGRNAM_R_PROTO == REENTRANT_PROTO_S_CSBI
-#       define getgrnam(a) (getgrnam_r(a, &PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size) ? &PL_reentrant_buffer->_grent_struct : ((errno == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrnam", a) : 0))
-#   endif
-#  endif
-#endif /* HAS_GETGRNAM_R */
-
-#ifdef HAS_GETHOSTBYADDR_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef gethostbyaddr
-#   if !defined(gethostbyaddr) && GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_CWISBWRE
-#       define gethostbyaddr(a, b, c) ((PL_reentrant_retint = gethostbyaddr_r(a, b, c, &PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_ptr, &PL_reentrant_buffer->_hostent_errno)) == 0 ? PL_reentrant_buffer->_hostent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyaddr", a, b, c) : 0))
-#   endif
-#   if !defined(gethostbyaddr) && GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CWISBWIE
-#       define gethostbyaddr(a, b, c) (gethostbyaddr_r(a, b, c, &PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_errno) ? &PL_reentrant_buffer->_hostent_struct : ((errno == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyaddr", a, b, c) : 0))
-#   endif
-#   if !defined(gethostbyaddr) && GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CWISBIE
-#       define gethostbyaddr(a, b, c) (gethostbyaddr_r(a, b, c, &PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_errno) ? &PL_reentrant_buffer->_hostent_struct : ((errno == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyaddr", a, b, c) : 0))
-#   endif
-#   if !defined(gethostbyaddr) && GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_TWISBIE
-#       define gethostbyaddr(a, b, c) (gethostbyaddr_r(a, b, c, &PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_errno) ? &PL_reentrant_buffer->_hostent_struct : ((errno == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyaddr", a, b, c) : 0))
-#   endif
-#   if !defined(gethostbyaddr) && GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CIISBIE
-#       define gethostbyaddr(a, b, c) (gethostbyaddr_r(a, b, c, &PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_errno) ? &PL_reentrant_buffer->_hostent_struct : ((errno == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyaddr", a, b, c) : 0))
-#   endif
-#   if !defined(gethostbyaddr) && GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CSBIE
-#       define gethostbyaddr(a, b, c) (gethostbyaddr_r(a, b, c, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_errno) ? 1 : ((errno == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyaddr", a, b, c) : 0))
-#   endif
-#   if !defined(gethostbyaddr) && GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_TSBIE
-#       define gethostbyaddr(a, b, c) (gethostbyaddr_r(a, b, c, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_errno) ? 1 : ((errno == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyaddr", a, b, c) : 0))
-#   endif
-#   if !defined(gethostbyaddr) && GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_CWISD
-#       define gethostbyaddr(a, b, c) ((PL_reentrant_retint = gethostbyaddr_r(a, b, c, &PL_reentrant_buffer->_hostent_struct, &PL_reentrant_buffer->_hostent_data)) == 0 ? &PL_reentrant_buffer->_hostent_struct : ((PL_reentrant_retint == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyaddr", a, b, c) : 0))
-#   endif
-#   if !defined(gethostbyaddr) && GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_CIISD
-#       define gethostbyaddr(a, b, c) ((PL_reentrant_retint = gethostbyaddr_r(a, b, c, &PL_reentrant_buffer->_hostent_struct, &PL_reentrant_buffer->_hostent_data)) == 0 ? &PL_reentrant_buffer->_hostent_struct : ((PL_reentrant_retint == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyaddr", a, b, c) : 0))
-#   endif
-#   if !defined(gethostbyaddr) && GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_CII
-#       define gethostbyaddr(a, b, c) ((PL_reentrant_retint = gethostbyaddr_r(a, b, c)) == 0 ? 1 : ((PL_reentrant_retint == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyaddr", a, b, c) : 0))
-#   endif
-#   if !defined(gethostbyaddr) && GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_TsISBWRE
-#       define gethostbyaddr(a, b, c) ((PL_reentrant_retint = gethostbyaddr_r(a, b, c, &PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_ptr, &PL_reentrant_buffer->_hostent_errno)) == 0 ? PL_reentrant_buffer->_hostent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyaddr", a, b, c) : 0))
-#   endif
-#  endif
-#endif /* HAS_GETHOSTBYADDR_R */
-
-#ifdef HAS_GETHOSTBYNAME_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef gethostbyname
-#   if !defined(gethostbyname) && GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWRE
-#       define gethostbyname(a) ((PL_reentrant_retint = gethostbyname_r(a, &PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_ptr, &PL_reentrant_buffer->_hostent_errno)) == 0 ? PL_reentrant_buffer->_hostent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyname", a) : 0))
-#   endif
-#   if !defined(gethostbyname) && GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_S_CSBIE
-#       define gethostbyname(a) (gethostbyname_r(a, &PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_errno) ? &PL_reentrant_buffer->_hostent_struct : ((errno == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyname", a) : 0))
-#   endif
-#   if !defined(gethostbyname) && GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD
-#       define gethostbyname(a) ((PL_reentrant_retint = gethostbyname_r(a, &PL_reentrant_buffer->_hostent_struct, &PL_reentrant_buffer->_hostent_data)) == 0 ? &PL_reentrant_buffer->_hostent_struct : ((PL_reentrant_retint == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyname", a) : 0))
-#   endif
-#  endif
-#endif /* HAS_GETHOSTBYNAME_R */
-
-#ifdef HAS_GETHOSTENT_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef gethostent
-#   if !defined(gethostent) && GETHOSTENT_R_PROTO == REENTRANT_PROTO_I_SBWRE
-#       define gethostent() ((PL_reentrant_retint = gethostent_r(&PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_ptr, &PL_reentrant_buffer->_hostent_errno)) == 0 ? PL_reentrant_buffer->_hostent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostent") : 0))
-#   endif
-#   if !defined(gethostent) && GETHOSTENT_R_PROTO == REENTRANT_PROTO_I_SBIE
-#       define gethostent() ((PL_reentrant_retint = gethostent_r(&PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_errno)) == 0 ? &PL_reentrant_buffer->_hostent_struct : ((PL_reentrant_retint == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostent") : 0))
-#   endif
-#   if !defined(gethostent) && GETHOSTENT_R_PROTO == REENTRANT_PROTO_S_SBIE
-#       define gethostent() (gethostent_r(&PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_errno) ? &PL_reentrant_buffer->_hostent_struct : ((errno == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostent") : 0))
-#   endif
-#   if !defined(gethostent) && GETHOSTENT_R_PROTO == REENTRANT_PROTO_S_SBI
-#       define gethostent() (gethostent_r(&PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size) ? &PL_reentrant_buffer->_hostent_struct : ((errno == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostent") : 0))
-#   endif
-#   if !defined(gethostent) && GETHOSTENT_R_PROTO == REENTRANT_PROTO_I_SBI
-#       define gethostent() ((PL_reentrant_retint = gethostent_r(&PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size)) == 0 ? &PL_reentrant_buffer->_hostent_struct : ((PL_reentrant_retint == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostent") : 0))
-#   endif
-#   if !defined(gethostent) && GETHOSTENT_R_PROTO == REENTRANT_PROTO_I_SD
-#       define gethostent() ((PL_reentrant_retint = gethostent_r(&PL_reentrant_buffer->_hostent_struct, &PL_reentrant_buffer->_hostent_data)) == 0 ? &PL_reentrant_buffer->_hostent_struct : ((PL_reentrant_retint == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostent") : 0))
-#   endif
-#  endif
-#endif /* HAS_GETHOSTENT_R */
-
-#ifdef HAS_GETLOGIN_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef getlogin
-#   if !defined(getlogin) && GETLOGIN_R_PROTO == REENTRANT_PROTO_I_BW
-#       define getlogin() ((PL_reentrant_retint = getlogin_r(PL_reentrant_buffer->_getlogin_buffer, PL_reentrant_buffer->_getlogin_size)) == 0 ? PL_reentrant_buffer->_getlogin_buffer : ((PL_reentrant_retint == ERANGE) ? (char *) Perl_reentrant_retry("getlogin") : 0))
-#   endif
-#   if !defined(getlogin) && GETLOGIN_R_PROTO == REENTRANT_PROTO_I_BI
-#       define getlogin() ((PL_reentrant_retint = getlogin_r(PL_reentrant_buffer->_getlogin_buffer, PL_reentrant_buffer->_getlogin_size)) == 0 ? PL_reentrant_buffer->_getlogin_buffer : ((PL_reentrant_retint == ERANGE) ? (char *) Perl_reentrant_retry("getlogin") : 0))
-#   endif
-#   if !defined(getlogin) && GETLOGIN_R_PROTO == REENTRANT_PROTO_B_BW
-#       define getlogin() getlogin_r(PL_reentrant_buffer->_getlogin_buffer, PL_reentrant_buffer->_getlogin_size)
-#   endif
-#   if !defined(getlogin) && GETLOGIN_R_PROTO == REENTRANT_PROTO_B_BI
-#       define getlogin() getlogin_r(PL_reentrant_buffer->_getlogin_buffer, PL_reentrant_buffer->_getlogin_size)
-#   endif
-#  endif
-#endif /* HAS_GETLOGIN_R */
-
-#ifdef HAS_GETNETBYADDR_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef getnetbyaddr
-#   if !defined(getnetbyaddr) && GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_UISBWRE
-#       define getnetbyaddr(a, b) ((PL_reentrant_retint = getnetbyaddr_r(a, b, &PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size, &PL_reentrant_buffer->_netent_ptr, &PL_reentrant_buffer->_netent_errno)) == 0 ? PL_reentrant_buffer->_netent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyaddr", a, b) : 0))
-#   endif
-#   if !defined(getnetbyaddr) && GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_LISBI
-#       define getnetbyaddr(a, b) ((PL_reentrant_retint = getnetbyaddr_r(a, b, &PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size)) == 0 ? &PL_reentrant_buffer->_netent_struct : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyaddr", a, b) : 0))
-#   endif
-#   if !defined(getnetbyaddr) && GETNETBYADDR_R_PROTO == REENTRANT_PROTO_S_TISBI
-#       define getnetbyaddr(a, b) (getnetbyaddr_r(a, b, &PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size) ? &PL_reentrant_buffer->_netent_struct : ((errno == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyaddr", a, b) : 0))
-#   endif
-#   if !defined(getnetbyaddr) && GETNETBYADDR_R_PROTO == REENTRANT_PROTO_S_LISBI
-#       define getnetbyaddr(a, b) (getnetbyaddr_r(a, b, &PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size) ? &PL_reentrant_buffer->_netent_struct : ((errno == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyaddr", a, b) : 0))
-#   endif
-#   if !defined(getnetbyaddr) && GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_TISD
-#       define getnetbyaddr(a, b) ((PL_reentrant_retint = getnetbyaddr_r(a, b, &PL_reentrant_buffer->_netent_struct, &PL_reentrant_buffer->_netent_data)) == 0 ? &PL_reentrant_buffer->_netent_struct : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyaddr", a, b) : 0))
-#   endif
-#   if !defined(getnetbyaddr) && GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_LISD
-#       define getnetbyaddr(a, b) ((PL_reentrant_retint = getnetbyaddr_r(a, b, &PL_reentrant_buffer->_netent_struct, &PL_reentrant_buffer->_netent_data)) == 0 ? &PL_reentrant_buffer->_netent_struct : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyaddr", a, b) : 0))
-#   endif
-#   if !defined(getnetbyaddr) && GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_IISD
-#       define getnetbyaddr(a, b) ((PL_reentrant_retint = getnetbyaddr_r(a, b, &PL_reentrant_buffer->_netent_struct, &PL_reentrant_buffer->_netent_data)) == 0 ? &PL_reentrant_buffer->_netent_struct : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyaddr", a, b) : 0))
-#   endif
-#   if !defined(getnetbyaddr) && GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_uISBWRE
-#       define getnetbyaddr(a, b) ((PL_reentrant_retint = getnetbyaddr_r(a, b, &PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size, &PL_reentrant_buffer->_netent_ptr, &PL_reentrant_buffer->_netent_errno)) == 0 ? PL_reentrant_buffer->_netent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyaddr", a, b) : 0))
-#   endif
-#  endif
-#endif /* HAS_GETNETBYADDR_R */
-
-#ifdef HAS_GETNETBYNAME_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef getnetbyname
-#   if !defined(getnetbyname) && GETNETBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWRE
-#       define getnetbyname(a) ((PL_reentrant_retint = getnetbyname_r(a, &PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size, &PL_reentrant_buffer->_netent_ptr, &PL_reentrant_buffer->_netent_errno)) == 0 ? PL_reentrant_buffer->_netent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyname", a) : 0))
-#   endif
-#   if !defined(getnetbyname) && GETNETBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBI
-#       define getnetbyname(a) ((PL_reentrant_retint = getnetbyname_r(a, &PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size)) == 0 ? &PL_reentrant_buffer->_netent_struct : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyname", a) : 0))
-#   endif
-#   if !defined(getnetbyname) && GETNETBYNAME_R_PROTO == REENTRANT_PROTO_S_CSBI
-#       define getnetbyname(a) (getnetbyname_r(a, &PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size) ? &PL_reentrant_buffer->_netent_struct : ((errno == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyname", a) : 0))
-#   endif
-#   if !defined(getnetbyname) && GETNETBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD
-#       define getnetbyname(a) ((PL_reentrant_retint = getnetbyname_r(a, &PL_reentrant_buffer->_netent_struct, &PL_reentrant_buffer->_netent_data)) == 0 ? &PL_reentrant_buffer->_netent_struct : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyname", a) : 0))
-#   endif
-#  endif
-#endif /* HAS_GETNETBYNAME_R */
-
-#ifdef HAS_GETNETENT_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef getnetent
-#   if !defined(getnetent) && GETNETENT_R_PROTO == REENTRANT_PROTO_I_SBWRE
-#       define getnetent() ((PL_reentrant_retint = getnetent_r(&PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size, &PL_reentrant_buffer->_netent_ptr, &PL_reentrant_buffer->_netent_errno)) == 0 ? PL_reentrant_buffer->_netent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetent") : 0))
-#   endif
-#   if !defined(getnetent) && GETNETENT_R_PROTO == REENTRANT_PROTO_I_SBIE
-#       define getnetent() ((PL_reentrant_retint = getnetent_r(&PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size, &PL_reentrant_buffer->_netent_errno)) == 0 ? &PL_reentrant_buffer->_netent_struct : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetent") : 0))
-#   endif
-#   if !defined(getnetent) && GETNETENT_R_PROTO == REENTRANT_PROTO_S_SBIE
-#       define getnetent() (getnetent_r(&PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size, &PL_reentrant_buffer->_netent_errno) ? &PL_reentrant_buffer->_netent_struct : ((errno == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetent") : 0))
-#   endif
-#   if !defined(getnetent) && GETNETENT_R_PROTO == REENTRANT_PROTO_S_SBI
-#       define getnetent() (getnetent_r(&PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size) ? &PL_reentrant_buffer->_netent_struct : ((errno == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetent") : 0))
-#   endif
-#   if !defined(getnetent) && GETNETENT_R_PROTO == REENTRANT_PROTO_I_SBI
-#       define getnetent() ((PL_reentrant_retint = getnetent_r(&PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size)) == 0 ? &PL_reentrant_buffer->_netent_struct : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetent") : 0))
-#   endif
-#   if !defined(getnetent) && GETNETENT_R_PROTO == REENTRANT_PROTO_I_SD
-#       define getnetent() ((PL_reentrant_retint = getnetent_r(&PL_reentrant_buffer->_netent_struct, &PL_reentrant_buffer->_netent_data)) == 0 ? &PL_reentrant_buffer->_netent_struct : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetent") : 0))
-#   endif
-#  endif
-#endif /* HAS_GETNETENT_R */
-
-#ifdef HAS_GETPROTOBYNAME_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef getprotobyname
-#   if !defined(getprotobyname) && GETPROTOBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWR
-#       define getprotobyname(a) ((PL_reentrant_retint = getprotobyname_r(a, &PL_reentrant_buffer->_protoent_struct, PL_reentrant_buffer->_protoent_buffer, PL_reentrant_buffer->_protoent_size, &PL_reentrant_buffer->_protoent_ptr)) == 0 ? PL_reentrant_buffer->_protoent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct protoent *) Perl_reentrant_retry("getprotobyname", a) : 0))
-#   endif
-#   if !defined(getprotobyname) && GETPROTOBYNAME_R_PROTO == REENTRANT_PROTO_S_CSBI
-#       define getprotobyname(a) (getprotobyname_r(a, &PL_reentrant_buffer->_protoent_struct, PL_reentrant_buffer->_protoent_buffer, PL_reentrant_buffer->_protoent_size) ? &PL_reentrant_buffer->_protoent_struct : ((errno == ERANGE) ? (struct protoent *) Perl_reentrant_retry("getprotobyname", a) : 0))
-#   endif
-#   if !defined(getprotobyname) && GETPROTOBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD
-#       define getprotobyname(a) (REENTR_MEMZERO(&PL_reentrant_buffer->_protoent_data, sizeof(PL_reentrant_buffer->_protoent_data)),(PL_reentrant_retint = getprotobyname_r(a, &PL_reentrant_buffer->_protoent_struct, &PL_reentrant_buffer->_protoent_data)) == 0 ? &PL_reentrant_buffer->_protoent_struct : ((PL_reentrant_retint == ERANGE) ? (struct protoent *) Perl_reentrant_retry("getprotobyname", a) : 0))
-#   endif
-#  endif
-#endif /* HAS_GETPROTOBYNAME_R */
-
-#ifdef HAS_GETPROTOBYNUMBER_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef getprotobynumber
-#   if !defined(getprotobynumber) && GETPROTOBYNUMBER_R_PROTO == REENTRANT_PROTO_I_ISBWR
-#       define getprotobynumber(a) ((PL_reentrant_retint = getprotobynumber_r(a, &PL_reentrant_buffer->_protoent_struct, PL_reentrant_buffer->_protoent_buffer, PL_reentrant_buffer->_protoent_size, &PL_reentrant_buffer->_protoent_ptr)) == 0 ? PL_reentrant_buffer->_protoent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct protoent *) Perl_reentrant_retry("getprotobynumber", a) : 0))
-#   endif
-#   if !defined(getprotobynumber) && GETPROTOBYNUMBER_R_PROTO == REENTRANT_PROTO_S_ISBI
-#       define getprotobynumber(a) (getprotobynumber_r(a, &PL_reentrant_buffer->_protoent_struct, PL_reentrant_buffer->_protoent_buffer, PL_reentrant_buffer->_protoent_size) ? &PL_reentrant_buffer->_protoent_struct : ((errno == ERANGE) ? (struct protoent *) Perl_reentrant_retry("getprotobynumber", a) : 0))
-#   endif
-#   if !defined(getprotobynumber) && GETPROTOBYNUMBER_R_PROTO == REENTRANT_PROTO_I_ISD
-#       define getprotobynumber(a) (REENTR_MEMZERO(&PL_reentrant_buffer->_protoent_data, sizeof(PL_reentrant_buffer->_protoent_data)),(PL_reentrant_retint = getprotobynumber_r(a, &PL_reentrant_buffer->_protoent_struct, &PL_reentrant_buffer->_protoent_data)) == 0 ? &PL_reentrant_buffer->_protoent_struct : ((PL_reentrant_retint == ERANGE) ? (struct protoent *) Perl_reentrant_retry("getprotobynumber", a) : 0))
-#   endif
-#  endif
-#endif /* HAS_GETPROTOBYNUMBER_R */
-
-#ifdef HAS_GETPROTOENT_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef getprotoent
-#   if !defined(getprotoent) && GETPROTOENT_R_PROTO == REENTRANT_PROTO_I_SBWR
-#       define getprotoent() ((PL_reentrant_retint = getprotoent_r(&PL_reentrant_buffer->_protoent_struct, PL_reentrant_buffer->_protoent_buffer, PL_reentrant_buffer->_protoent_size, &PL_reentrant_buffer->_protoent_ptr)) == 0 ? PL_reentrant_buffer->_protoent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct protoent *) Perl_reentrant_retry("getprotoent") : 0))
-#   endif
-#   if !defined(getprotoent) && GETPROTOENT_R_PROTO == REENTRANT_PROTO_I_SBI
-#       define getprotoent() ((PL_reentrant_retint = getprotoent_r(&PL_reentrant_buffer->_protoent_struct, PL_reentrant_buffer->_protoent_buffer, PL_reentrant_buffer->_protoent_size)) == 0 ? &PL_reentrant_buffer->_protoent_struct : ((PL_reentrant_retint == ERANGE) ? (struct protoent *) Perl_reentrant_retry("getprotoent") : 0))
-#   endif
-#   if !defined(getprotoent) && GETPROTOENT_R_PROTO == REENTRANT_PROTO_S_SBI
-#       define getprotoent() (getprotoent_r(&PL_reentrant_buffer->_protoent_struct, PL_reentrant_buffer->_protoent_buffer, PL_reentrant_buffer->_protoent_size) ? &PL_reentrant_buffer->_protoent_struct : ((errno == ERANGE) ? (struct protoent *) Perl_reentrant_retry("getprotoent") : 0))
-#   endif
-#   if !defined(getprotoent) && GETPROTOENT_R_PROTO == REENTRANT_PROTO_I_SD
-#       define getprotoent() (REENTR_MEMZERO(&PL_reentrant_buffer->_protoent_data, sizeof(PL_reentrant_buffer->_protoent_data)),(PL_reentrant_retint = getprotoent_r(&PL_reentrant_buffer->_protoent_struct, &PL_reentrant_buffer->_protoent_data)) == 0 ? &PL_reentrant_buffer->_protoent_struct : ((PL_reentrant_retint == ERANGE) ? (struct protoent *) Perl_reentrant_retry("getprotoent") : 0))
-#   endif
-#  endif
-#endif /* HAS_GETPROTOENT_R */
-
-#ifdef HAS_GETPWENT_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef getpwent
-#   if !defined(getpwent) && GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBWR
-#       define getpwent() ((PL_reentrant_retint = getpwent_r(&PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size, &PL_reentrant_buffer->_pwent_ptr)) == 0 ? PL_reentrant_buffer->_pwent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwent") : 0))
-#   endif
-#   if !defined(getpwent) && GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBIR
-#       define getpwent() ((PL_reentrant_retint = getpwent_r(&PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size, &PL_reentrant_buffer->_pwent_ptr)) == 0 ? PL_reentrant_buffer->_pwent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwent") : 0))
-#   endif
-#   if !defined(getpwent) && GETPWENT_R_PROTO == REENTRANT_PROTO_S_SBW
-#       define getpwent() (getpwent_r(&PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size) ? &PL_reentrant_buffer->_pwent_struct : ((errno == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwent") : 0))
-#   endif
-#   if !defined(getpwent) && GETPWENT_R_PROTO == REENTRANT_PROTO_S_SBI
-#       define getpwent() (getpwent_r(&PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size) ? &PL_reentrant_buffer->_pwent_struct : ((errno == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwent") : 0))
-#   endif
-#   if !defined(getpwent) && GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBI
-#       define getpwent() ((PL_reentrant_retint = getpwent_r(&PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size)) == 0 ? &PL_reentrant_buffer->_pwent_struct : ((PL_reentrant_retint == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwent") : 0))
-#   endif
-#   if !defined(getpwent) && GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBIH
-#       define getpwent() ((PL_reentrant_retint = getpwent_r(&PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size, &PL_reentrant_buffer->_pwent_fptr)) == 0 ? &PL_reentrant_buffer->_pwent_struct : ((PL_reentrant_retint == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwent") : 0))
-#   endif
-#  endif
-#endif /* HAS_GETPWENT_R */
-
-#ifdef HAS_GETPWNAM_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef getpwnam
-#   if !defined(getpwnam) && GETPWNAM_R_PROTO == REENTRANT_PROTO_I_CSBWR
-#       define getpwnam(a) ((PL_reentrant_retint = getpwnam_r(a, &PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size, &PL_reentrant_buffer->_pwent_ptr)) == 0 ? PL_reentrant_buffer->_pwent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwnam", a) : 0))
-#   endif
-#   if !defined(getpwnam) && GETPWNAM_R_PROTO == REENTRANT_PROTO_I_CSBIR
-#       define getpwnam(a) ((PL_reentrant_retint = getpwnam_r(a, &PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size, &PL_reentrant_buffer->_pwent_ptr)) == 0 ? PL_reentrant_buffer->_pwent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwnam", a) : 0))
-#   endif
-#   if !defined(getpwnam) && GETPWNAM_R_PROTO == REENTRANT_PROTO_S_CSBI
-#       define getpwnam(a) (getpwnam_r(a, &PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size) ? &PL_reentrant_buffer->_pwent_struct : ((errno == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwnam", a) : 0))
-#   endif
-#   if !defined(getpwnam) && GETPWNAM_R_PROTO == REENTRANT_PROTO_I_CSBI
-#       define getpwnam(a) ((PL_reentrant_retint = getpwnam_r(a, &PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size)) == 0 ? &PL_reentrant_buffer->_pwent_struct : ((PL_reentrant_retint == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwnam", a) : 0))
-#   endif
-#  endif
-#endif /* HAS_GETPWNAM_R */
-
-#ifdef HAS_GETPWUID_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef getpwuid
-#   if !defined(getpwuid) && GETPWUID_R_PROTO == REENTRANT_PROTO_I_TSBWR
-#       define getpwuid(a) ((PL_reentrant_retint = getpwuid_r(a, &PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size, &PL_reentrant_buffer->_pwent_ptr)) == 0 ? PL_reentrant_buffer->_pwent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwuid", a) : 0))
-#   endif
-#   if !defined(getpwuid) && GETPWUID_R_PROTO == REENTRANT_PROTO_I_TSBIR
-#       define getpwuid(a) ((PL_reentrant_retint = getpwuid_r(a, &PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size, &PL_reentrant_buffer->_pwent_ptr)) == 0 ? PL_reentrant_buffer->_pwent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwuid", a) : 0))
-#   endif
-#   if !defined(getpwuid) && GETPWUID_R_PROTO == REENTRANT_PROTO_I_TSBI
-#       define getpwuid(a) ((PL_reentrant_retint = getpwuid_r(a, &PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size)) == 0 ? &PL_reentrant_buffer->_pwent_struct : ((PL_reentrant_retint == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwuid", a) : 0))
-#   endif
-#   if !defined(getpwuid) && GETPWUID_R_PROTO == REENTRANT_PROTO_S_TSBI
-#       define getpwuid(a) (getpwuid_r(a, &PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size) ? &PL_reentrant_buffer->_pwent_struct : ((errno == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwuid", a) : 0))
-#   endif
-#  endif
-#endif /* HAS_GETPWUID_R */
-
-#ifdef HAS_GETSERVBYNAME_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef getservbyname
-#   if !defined(getservbyname) && GETSERVBYNAME_R_PROTO == REENTRANT_PROTO_I_CCSBWR
-#       define getservbyname(a, b) ((PL_reentrant_retint = getservbyname_r(a, b, &PL_reentrant_buffer->_servent_struct, PL_reentrant_buffer->_servent_buffer, PL_reentrant_buffer->_servent_size, &PL_reentrant_buffer->_servent_ptr)) == 0 ? PL_reentrant_buffer->_servent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct servent *) Perl_reentrant_retry("getservbyname", a, b) : 0))
-#   endif
-#   if !defined(getservbyname) && GETSERVBYNAME_R_PROTO == REENTRANT_PROTO_S_CCSBI
-#       define getservbyname(a, b) (getservbyname_r(a, b, &PL_reentrant_buffer->_servent_struct, PL_reentrant_buffer->_servent_buffer, PL_reentrant_buffer->_servent_size) ? &PL_reentrant_buffer->_servent_struct : ((errno == ERANGE) ? (struct servent *) Perl_reentrant_retry("getservbyname", a, b) : 0))
-#   endif
-#   if !defined(getservbyname) && GETSERVBYNAME_R_PROTO == REENTRANT_PROTO_I_CCSD
-#       define getservbyname(a, b) (REENTR_MEMZERO(&PL_reentrant_buffer->_servent_data, sizeof(PL_reentrant_buffer->_servent_data)),(PL_reentrant_retint = getservbyname_r(a, b, &PL_reentrant_buffer->_servent_struct, &PL_reentrant_buffer->_servent_data)) == 0 ? &PL_reentrant_buffer->_servent_struct : ((PL_reentrant_retint == ERANGE) ? (struct servent *) Perl_reentrant_retry("getservbyname", a, b) : 0))
-#   endif
-#  endif
-#endif /* HAS_GETSERVBYNAME_R */
-
-#ifdef HAS_GETSERVBYPORT_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef getservbyport
-#   if !defined(getservbyport) && GETSERVBYPORT_R_PROTO == REENTRANT_PROTO_I_ICSBWR
-#       define getservbyport(a, b) ((PL_reentrant_retint = getservbyport_r(a, b, &PL_reentrant_buffer->_servent_struct, PL_reentrant_buffer->_servent_buffer, PL_reentrant_buffer->_servent_size, &PL_reentrant_buffer->_servent_ptr)) == 0 ? PL_reentrant_buffer->_servent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct servent *) Perl_reentrant_retry("getservbyport", a, b) : 0))
-#   endif
-#   if !defined(getservbyport) && GETSERVBYPORT_R_PROTO == REENTRANT_PROTO_S_ICSBI
-#       define getservbyport(a, b) (getservbyport_r(a, b, &PL_reentrant_buffer->_servent_struct, PL_reentrant_buffer->_servent_buffer, PL_reentrant_buffer->_servent_size) ? &PL_reentrant_buffer->_servent_struct : ((errno == ERANGE) ? (struct servent *) Perl_reentrant_retry("getservbyport", a, b) : 0))
-#   endif
-#   if !defined(getservbyport) && GETSERVBYPORT_R_PROTO == REENTRANT_PROTO_I_ICSD
-#       define getservbyport(a, b) (REENTR_MEMZERO(&PL_reentrant_buffer->_servent_data, sizeof(PL_reentrant_buffer->_servent_data)),(PL_reentrant_retint = getservbyport_r(a, b, &PL_reentrant_buffer->_servent_struct, &PL_reentrant_buffer->_servent_data)) == 0 ? &PL_reentrant_buffer->_servent_struct : ((PL_reentrant_retint == ERANGE) ? (struct servent *) Perl_reentrant_retry("getservbyport", a, b) : 0))
-#   endif
-#  endif
-#endif /* HAS_GETSERVBYPORT_R */
-
-#ifdef HAS_GETSERVENT_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef getservent
-#   if !defined(getservent) && GETSERVENT_R_PROTO == REENTRANT_PROTO_I_SBWR
-#       define getservent() ((PL_reentrant_retint = getservent_r(&PL_reentrant_buffer->_servent_struct, PL_reentrant_buffer->_servent_buffer, PL_reentrant_buffer->_servent_size, &PL_reentrant_buffer->_servent_ptr)) == 0 ? PL_reentrant_buffer->_servent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct servent *) Perl_reentrant_retry("getservent") : 0))
-#   endif
-#   if !defined(getservent) && GETSERVENT_R_PROTO == REENTRANT_PROTO_I_SBI
-#       define getservent() ((PL_reentrant_retint = getservent_r(&PL_reentrant_buffer->_servent_struct, PL_reentrant_buffer->_servent_buffer, PL_reentrant_buffer->_servent_size)) == 0 ? &PL_reentrant_buffer->_servent_struct : ((PL_reentrant_retint == ERANGE) ? (struct servent *) Perl_reentrant_retry("getservent") : 0))
-#   endif
-#   if !defined(getservent) && GETSERVENT_R_PROTO == REENTRANT_PROTO_S_SBI
-#       define getservent() (getservent_r(&PL_reentrant_buffer->_servent_struct, PL_reentrant_buffer->_servent_buffer, PL_reentrant_buffer->_servent_size) ? &PL_reentrant_buffer->_servent_struct : ((errno == ERANGE) ? (struct servent *) Perl_reentrant_retry("getservent") : 0))
-#   endif
-#   if !defined(getservent) && GETSERVENT_R_PROTO == REENTRANT_PROTO_I_SD
-#       define getservent() (REENTR_MEMZERO(&PL_reentrant_buffer->_servent_data, sizeof(PL_reentrant_buffer->_servent_data)),(PL_reentrant_retint = getservent_r(&PL_reentrant_buffer->_servent_struct, &PL_reentrant_buffer->_servent_data)) == 0 ? &PL_reentrant_buffer->_servent_struct : ((PL_reentrant_retint == ERANGE) ? (struct servent *) Perl_reentrant_retry("getservent") : 0))
-#   endif
-#  endif
-#endif /* HAS_GETSERVENT_R */
-
-#ifdef HAS_GETSPNAM_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef getspnam
-#   if !defined(getspnam) && GETSPNAM_R_PROTO == REENTRANT_PROTO_I_CSBWR
-#       define getspnam(a) ((PL_reentrant_retint = getspnam_r(a, &PL_reentrant_buffer->_spent_struct, PL_reentrant_buffer->_spent_buffer, PL_reentrant_buffer->_spent_size, &PL_reentrant_buffer->_spent_ptr)) == 0 ? PL_reentrant_buffer->_spent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct spwd *) Perl_reentrant_retry("getspnam", a) : 0))
-#   endif
-#   if !defined(getspnam) && GETSPNAM_R_PROTO == REENTRANT_PROTO_S_CSBI
-#       define getspnam(a) (getspnam_r(a, &PL_reentrant_buffer->_spent_struct, PL_reentrant_buffer->_spent_buffer, PL_reentrant_buffer->_spent_size) ? &PL_reentrant_buffer->_spent_struct : ((errno == ERANGE) ? (struct spwd *) Perl_reentrant_retry("getspnam", a) : 0))
-#   endif
-#  endif
-#endif /* HAS_GETSPNAM_R */
-
-#ifdef HAS_READDIR_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef readdir
-#   if !defined(readdir) && READDIR_R_PROTO == REENTRANT_PROTO_I_TSR
-#       define readdir(a) (readdir_r(a, PL_reentrant_buffer->_readdir_struct, &PL_reentrant_buffer->_readdir_ptr) == 0 ? PL_reentrant_buffer->_readdir_ptr : 0)
-#   endif
-#   if !defined(readdir) && READDIR_R_PROTO == REENTRANT_PROTO_I_TS
-#       define readdir(a) (readdir_r(a, PL_reentrant_buffer->_readdir_struct) == 0 ? PL_reentrant_buffer->_readdir_struct : 0)
-#   endif
-#  endif
-#endif /* HAS_READDIR_R */
-
-#ifdef HAS_READDIR64_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef readdir64
-#   if !defined(readdir64) && READDIR64_R_PROTO == REENTRANT_PROTO_I_TSR
-#       define readdir64(a) (readdir64_r(a, PL_reentrant_buffer->_readdir64_struct, &PL_reentrant_buffer->_readdir64_ptr) == 0 ? PL_reentrant_buffer->_readdir64_ptr : 0)
-#   endif
-#   if !defined(readdir64) && READDIR64_R_PROTO == REENTRANT_PROTO_I_TS
-#       define readdir64(a) (readdir64_r(a, PL_reentrant_buffer->_readdir64_struct) == 0 ? PL_reentrant_buffer->_readdir64_struct : 0)
-#   endif
-#  endif
-#endif /* HAS_READDIR64_R */
-
-#ifdef HAS_SETGRENT_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef setgrent
-#   if !defined(setgrent) && SETGRENT_R_PROTO == REENTRANT_PROTO_I_H
-#       define setgrent() (setgrent_r(&PL_reentrant_buffer->_grent_fptr) == 0 ? 1 : 0)
-#   endif
-#   if !defined(setgrent) && SETGRENT_R_PROTO == REENTRANT_PROTO_V_H
-#       define setgrent() setgrent_r(&PL_reentrant_buffer->_grent_fptr)
-#   endif
-#  endif
-#endif /* HAS_SETGRENT_R */
-
-#ifdef HAS_SETHOSTENT_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef sethostent
-#   if !defined(sethostent) && SETHOSTENT_R_PROTO == REENTRANT_PROTO_I_ID
-#       define sethostent(a) (sethostent_r(a, &PL_reentrant_buffer->_hostent_data) == 0 ? 1 : 0)
-#   endif
-#   if !defined(sethostent) && SETHOSTENT_R_PROTO == REENTRANT_PROTO_V_ID
-#       define sethostent(a) sethostent_r(a, &PL_reentrant_buffer->_hostent_data)
-#   endif
-#  endif
-#endif /* HAS_SETHOSTENT_R */
-
-#ifdef HAS_SETLOCALE_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef setlocale
-#   if !defined(setlocale) && SETLOCALE_R_PROTO == REENTRANT_PROTO_I_ICBI
-#       define setlocale(a, b) (setlocale_r(a, b, PL_reentrant_buffer->_setlocale_buffer, PL_reentrant_buffer->_setlocale_size) == 0 ? PL_reentrant_buffer->_setlocale_buffer : 0)
-#   endif
-#  endif
-#endif /* HAS_SETLOCALE_R */
-
-#ifdef HAS_SETNETENT_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef setnetent
-#   if !defined(setnetent) && SETNETENT_R_PROTO == REENTRANT_PROTO_I_ID
-#       define setnetent(a) (setnetent_r(a, &PL_reentrant_buffer->_netent_data) == 0 ? 1 : 0)
-#   endif
-#   if !defined(setnetent) && SETNETENT_R_PROTO == REENTRANT_PROTO_V_ID
-#       define setnetent(a) setnetent_r(a, &PL_reentrant_buffer->_netent_data)
-#   endif
-#  endif
-#endif /* HAS_SETNETENT_R */
-
-#ifdef HAS_SETPROTOENT_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef setprotoent
-#   if !defined(setprotoent) && SETPROTOENT_R_PROTO == REENTRANT_PROTO_I_ID
-#       define setprotoent(a) (setprotoent_r(a, &PL_reentrant_buffer->_protoent_data) == 0 ? 1 : 0)
-#   endif
-#   if !defined(setprotoent) && SETPROTOENT_R_PROTO == REENTRANT_PROTO_V_ID
-#       define setprotoent(a) setprotoent_r(a, &PL_reentrant_buffer->_protoent_data)
-#   endif
-#  endif
-#endif /* HAS_SETPROTOENT_R */
-
-#ifdef HAS_SETPWENT_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef setpwent
-#   if !defined(setpwent) && SETPWENT_R_PROTO == REENTRANT_PROTO_I_H
-#       define setpwent() (setpwent_r(&PL_reentrant_buffer->_pwent_fptr) == 0 ? 1 : 0)
-#   endif
-#   if !defined(setpwent) && SETPWENT_R_PROTO == REENTRANT_PROTO_V_H
-#       define setpwent() setpwent_r(&PL_reentrant_buffer->_pwent_fptr)
-#   endif
-#  endif
-#endif /* HAS_SETPWENT_R */
-
-#ifdef HAS_SETSERVENT_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef setservent
-#   if !defined(setservent) && SETSERVENT_R_PROTO == REENTRANT_PROTO_I_ID
-#       define setservent(a) (setservent_r(a, &PL_reentrant_buffer->_servent_data) == 0 ? 1 : 0)
-#   endif
-#   if !defined(setservent) && SETSERVENT_R_PROTO == REENTRANT_PROTO_V_ID
-#       define setservent(a) setservent_r(a, &PL_reentrant_buffer->_servent_data)
-#   endif
-#  endif
-#endif /* HAS_SETSERVENT_R */
-
-#ifdef HAS_STRERROR_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef strerror
-#   if !defined(strerror) && STRERROR_R_PROTO == REENTRANT_PROTO_I_IBW
-#       define strerror(a) (strerror_r(a, PL_reentrant_buffer->_strerror_buffer, PL_reentrant_buffer->_strerror_size) == 0 ? PL_reentrant_buffer->_strerror_buffer : 0)
-#   endif
-#   if !defined(strerror) && STRERROR_R_PROTO == REENTRANT_PROTO_I_IBI
-#       define strerror(a) (strerror_r(a, PL_reentrant_buffer->_strerror_buffer, PL_reentrant_buffer->_strerror_size) == 0 ? PL_reentrant_buffer->_strerror_buffer : 0)
-#   endif
-#   if !defined(strerror) && STRERROR_R_PROTO == REENTRANT_PROTO_B_IBW
-#       define strerror(a) strerror_r(a, PL_reentrant_buffer->_strerror_buffer, PL_reentrant_buffer->_strerror_size)
-#   endif
-#  endif
-#endif /* HAS_STRERROR_R */
-
-#ifdef HAS_TMPNAM_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef tmpnam
-#   if !defined(tmpnam) && TMPNAM_R_PROTO == REENTRANT_PROTO_B_B
-#       define tmpnam(a) tmpnam_r(a)
-#   endif
-#  endif
-#endif /* HAS_TMPNAM_R */
-
-#ifdef HAS_TTYNAME_R
-#  if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-#   undef ttyname
-#   if !defined(ttyname) && TTYNAME_R_PROTO == REENTRANT_PROTO_I_IBW
-#       define ttyname(a) (ttyname_r(a, PL_reentrant_buffer->_ttyname_buffer, PL_reentrant_buffer->_ttyname_size) == 0 ? PL_reentrant_buffer->_ttyname_buffer : 0)
-#   endif
-#   if !defined(ttyname) && TTYNAME_R_PROTO == REENTRANT_PROTO_I_IBI
-#       define ttyname(a) (ttyname_r(a, PL_reentrant_buffer->_ttyname_buffer, PL_reentrant_buffer->_ttyname_size) == 0 ? PL_reentrant_buffer->_ttyname_buffer : 0)
-#   endif
-#   if !defined(ttyname) && TTYNAME_R_PROTO == REENTRANT_PROTO_B_IBI
-#       define ttyname(a) ttyname_r(a, PL_reentrant_buffer->_ttyname_buffer, PL_reentrant_buffer->_ttyname_size)
-#   endif
-#  endif
-#endif /* HAS_TTYNAME_R */
-
-
 
 #endif /* USE_REENTRANT_API */
+
 #endif
 
 /* ex: set ro: */
index 7a074a3..00a36ec 100644 (file)
@@ -338,7 +338,7 @@ ${prefix}_VALt $match_name( const unsigned char * const key, const U16 key_len )
     U32 s;
     U32 n;
     do {
-        h ^= *ptr;
+        h ^= NATIVE_TO_LATIN1(*ptr);    /* table collated in Latin1 */
         h *= ${prefix}_FNV_CONST;
     } while ( ++ptr < ptr_end );
     n= h % ${prefix}_BUCKETS;
@@ -479,7 +479,7 @@ unless (caller) {
     my %hash;
     {
         no warnings;
-        do "../perl/lib/unicore/Heavy.pl";
+        do "../perl/lib/unicore/UCD.pl";
         %hash= %utf8::loose_to_file_of;
     }
     if ($ENV{MERGE_KEYS}) {
index bd09c2f..5ee8794 100644 (file)
 #define STMT_END while(0)
 #endif
 
-#ifndef STADTX_ALLOW_UNALIGNED_AND_LITTLE_ENDIAN
-/* STADTX_ALLOW_UNALIGNED_AND_LITTLE_ENDIAN only matters if nothing has defined U8TO64_LE etc,
- * and when built with Perl these should be defined before this file is loaded.
- */
-#ifdef U32_ALIGNMENT_REQUIRED
-#define STADTX_ALLOW_UNALIGNED_AND_LITTLE_ENDIAN 0
-#else
-#define STADTX_ALLOW_UNALIGNED_AND_LITTLE_ENDIAN 1
-#endif
-#endif
-
-#ifndef U8TO64_LE
-#if STADTX_ALLOW_UNALIGNED_AND_LITTLE_ENDIAN
-#define U8TO64_LE(ptr)  (*((const U64 *)(ptr)))
-#else
-#define U8TO64_LE(ptr)  (\
-    (U64)(ptr)[7] << 56 | \
-    (U64)(ptr)[6] << 48 | \
-    (U64)(ptr)[5] << 40 | \
-    (U64)(ptr)[4] << 32 | \
-    (U64)(ptr)[3] << 24 | \
-    (U64)(ptr)[2] << 16 | \
-    (U64)(ptr)[1] << 8  | \
-    (U64)(ptr)[0]         \
-)
-#endif
-#endif
-
-#ifndef U8TO32_LE
-#if STADTX_ALLOW_UNALIGNED_AND_LITTLE_ENDIAN
-#define U8TO32_LE(ptr)  (*((const U32 *)(ptr)))
-#else
-#define U8TO32_LE(ptr)  (\
-    (U32)(ptr)[3] << 24 | \
-    (U32)(ptr)[2] << 16 | \
-    (U32)(ptr)[1] << 8  | \
-    (U32)(ptr)[0]         \
-)
-#endif
-#endif
-
-#ifndef U8TO16_LE
-#if STADTX_ALLOW_UNALIGNED_AND_LITTLE_ENDIAN
-#define U8TO16_LE(ptr)  (*((const U16 *)(ptr)))
-#else
-#define U8TO16_LE(ptr)  (\
-    (U16)(ptr)[1] << 8  | \
-    (U16)(ptr)[0]         \
-)
-#endif
-#endif
-
 /* Find best way to ROTL32/ROTL64 */
 #if defined(_MSC_VER)
   #include <stdlib.h>  /* Microsoft put _rotl declaration in here */
diff --git a/gnu/usr.bin/perl/t/benchmark/gh7094-speed-up-keys-on-empty-hash.t b/gnu/usr.bin/perl/t/benchmark/gh7094-speed-up-keys-on-empty-hash.t
new file mode 100644 (file)
index 0000000..764ae73
--- /dev/null
@@ -0,0 +1,84 @@
+#!/usr/bin/perl -w
+use strict;
+use Benchmark;
+chdir 't' if -d 't';
+require './test.pl';
+plan(tests => 6);
+
+=head1 NAME
+
+gh7094 - benchmark speed for keys() on empty hashes
+
+=head1 DESCRIPTION
+
+If you have an empty hash, the speed of keys() depends
+on how many keys the hash previously held.
+
+For global hashes, getting the count for previously
+big hashes was substantially slower than for lexical hashes.
+
+This test checks that the speed difference for getting
+the number or list of keys from an empty hash is about the same
+(< 25%) for lexical and global hashes, both previously big and small.
+
+=head1 REFERENCE
+
+This test tests against GitHub ticket #7094
+
+L<https://github.com/Perl/perl5/issues/7094>
+
+=cut
+
+use vars qw(%h_big %h_small);
+my %l_big = (1..50000);
+my %l_small = (1..10);
+
+%h_big = (1..50000);
+%h_small = (1..10);
+
+delete @h_big{keys %h_big};
+delete @h_small{keys %h_small};
+delete @l_big{keys %l_big};
+delete @l_small{keys %l_small};
+
+my $res = timethese shift || -3, {
+    big => '1 for keys %h_big',
+    small => '1 for keys %h_small',
+    scalar_big => '$a = keys %h_big',
+    scalar_small => '$a = keys %h_small',
+
+    lex_big => '1 for keys %l_big',
+    lex_small => '1 for keys %l_small',
+    lex_scalar_big => '$a = keys %l_big',
+    lex_scalar_small => '$a = keys %l_small',
+}, 'none';
+
+sub iters_per_second {
+    $_[0]->iters / $_[0]->cpu_p
+}
+
+sub about_as_fast_ok {
+    my ($res, $key1, $key2, $name) = @_;
+    $name ||= "Speed difference between $key1 and $key2 is less than 25%";
+    my %iters_per_second = map { $_ => iters_per_second( $res->{ $_ }) } ($key1, $key2);
+
+    my $ratio = abs(1 - $iters_per_second{ $key1 } / ($iters_per_second{ $key2 } || 1 ));
+    if (! cmp_ok( $ratio, '<', 0.25, $name )) {
+        diag( sprintf "%20s: %12.2f/s\n", $key1, $iters_per_second{ $key1 } );
+        diag( sprintf "%20s: %12.2f/s\n", $key2, $iters_per_second{ $key2 } );
+    };
+};
+
+about_as_fast_ok( $res, 'scalar_big', 'scalar_small',"Checking the count of hash keys in an empty hash (global)");
+
+about_as_fast_ok( $res, 'big', 'small', "Checking the list of hash keys in an empty hash (global)");
+
+about_as_fast_ok( $res, 'lex_scalar_big', 'lex_scalar_small',"Checking the count of hash keys in an empty hash (lexical)");
+
+about_as_fast_ok( $res, 'lex_big', 'lex_small', "Checking the list of hash keys in an empty hash (lexical)");
+
+about_as_fast_ok( $res, 'lex_scalar_big', 'scalar_big',"Checking the count of hash keys in an empty hash, global vs. lexical");
+
+about_as_fast_ok( $res, 'lex_big', 'big', "Checking the list of hash keys in an empty hash, global vs. lexical");
+
+__END__
index 79b669d..b36b5ad 100644 (file)
@@ -10,12 +10,12 @@ BEGIN {
     set_up_inc( qw(. ../lib ) );
 }
 
-plan(5);
+plan(7);
 
 # [perl #130814] can reallocate lineptr while looking ahead for
 # "Missing $ on loop variable" diagnostic.
 my $result = fresh_perl(
-    " foreach m0\n\$" . ("0" x 0x2000),
+    " foreach m0\n\$" . ("v" x 0x2000),
     { stderr => 1 },
 );
 is($result . "\n", <<EXPECT);
@@ -24,6 +24,12 @@ syntax error at - line 3, near "foreach m0
 Identifier too long at - line 3.
 EXPECT
 
+fresh_perl_is(<<'EOS', <<'EXPECT', {}, "check zero vars");
+print $001;
+EOS
+Numeric variables with more than one digit may not start with '0' at - line 1.
+EXPECT
+
 fresh_perl_is(<<EOS, <<'EXPECT', {}, "linestart before bufptr");
 \${ \xB6eeeeeeeeeeee
 'x
@@ -55,5 +61,15 @@ syntax error at - line 1, at EOF
 Execution of - aborted due to compilation errors.
 EXPECTED
 
+{
+    my $work = tempfile;
+    open my $fh, ">", $work or die;
+    binmode $fh;
+    print $fh +("\n" x 50_000), "1;\n";
+    close $fh;
+    fresh_perl_is('require "./' . $work .'"; print "ok\n";', "ok\n",
+                  {}, "many blank lines doesn't crash");
+}
+
 __END__
 # ex: set ts=8 sts=4 sw=4 et:
index 03779a9..0f72de8 100644 (file)
@@ -20,7 +20,7 @@ run_multiple_progs('', \*DATA);
 done_testing();
 
 __END__
-# http://rt.perl.org/rt3/Ticket/Display.html?id=28106#txn-82657
+# https://github.com/Perl/perl5/issues/7207#issuecomment-543940952
 while (<DATA>) {
     chomp;
     print "$.: '$_'\n";
@@ -35,7 +35,7 @@ EXPECT
 2: '2'
 3: '3'
 ########
-# http://rt.perl.org/rt3/Ticket/Display.html?id=28106#txn-83113
+# https://github.com/Perl/perl5/issues/7207#issuecomment-543940955
 my $line1 = <DATA>;
 `echo foo`;
 my $line2 = <DATA>;
@@ -48,7 +48,7 @@ EXPECT
 ok 1
 ok 2
 ########
-# http://rt.perl.org/rt3/Ticket/Attachment/828796/403048/perlbug.rep.txt
+# https://github.com/Perl/perl5/issues/7207#issuecomment-543940992
 my @data_positions = tell(DATA);
 while (<DATA>){
     if (/^__DATA__$/) {
index 1a3fd2b..2075113 100644 (file)
@@ -1,7 +1,7 @@
 #!./perl
 
 # print should not return EINTR
-# fails under 5.14.x see https://rt.perl.org/rt3/Ticket/Display.html?id=119097
+# fails under 5.14.x see https://github.com/Perl/perl5/issues/13142
 # also fails under 5.8.x
 
 BEGIN {
@@ -20,7 +20,7 @@ use IO::Handle;
 
 skip_all("only for dev versions for now") if ((int($]*1000) & 1) == 0);
 skip_all("does not match platform whitelist")
-    unless ($^O =~ /^(linux|.*bsd|darwin|solaris)$/);
+    unless ($^O =~ /^(linux|android|.*bsd|darwin|solaris)$/);
 skip_all("ualarm() not implemented on this platform")
     unless Time::HiRes::d_ualarm();
 skip_all("usleep() not implemented on this platform")
index 8912f39..dad6af0 100644 (file)
@@ -39,7 +39,7 @@ my @perl = ( which_perl(), "-I../lib" );
 # the other reader reads one line, waits a few seconds and then
 # exits to test the waitpid function.
 #
-# Using 4+ arg open for the children that sleep so that that we're
+# Using 4+ arg open for the children that sleep so that we're
 # killing the perl process instead of an intermediate shell, this
 # allows harness to see the file handles closed sooner.  I didn't
 # convert them all since I wanted 3-arg open to continue to be
index 99d7e51..56c354b 100755 (executable)
@@ -11,7 +11,7 @@ BEGIN {
 use strict;
 use warnings;
 
-plan tests => 6;
+plan tests => 10;
 
 use Fcntl qw(:seek);
 
@@ -31,6 +31,16 @@ use Fcntl qw(:seek);
     is($data, "the right read stuff", "found the right stuff");
 }
 
-
+SKIP:
+{
+    ok((open my $fh, "+>>", undef), "open my \$fh, '+>>', undef")
+      or skip "can't open temp for append: $!", 3;
+    print $fh "abc";
+    ok(seek($fh, 0, SEEK_SET), "seek to zero");
+    print $fh "xyz";
+    ok(seek($fh, 0, SEEK_SET), "seek to zero again");
+    my $data = <$fh>;
+    is($data, "abcxyz", "check the second write appended");
+}
 
 
diff --git a/gnu/usr.bin/perl/t/lib/CannotParse.pm b/gnu/usr.bin/perl/t/lib/CannotParse.pm
new file mode 100644 (file)
index 0000000..a84195f
--- /dev/null
@@ -0,0 +1,2 @@
+# a module that fails parsing
+-
index b1e754c..de0221b 100644 (file)
@@ -51,3 +51,11 @@ use 5.01;
 default{}
 EXPECT
 Can't "default" outside a topicalizer at - line 2.
+########
+# NAME croak with read only $@
+eval '"a" =~ /${*@=\_})/';
+die;
+# this would previously recurse infinitely in the eval
+EXPECT
+Unmatched ) in regex; marked by <-- HERE in m/_) <-- HERE / at (eval 1) line 1.
+       ...propagated at - line 2.
index 0ba705e..a203f13 100644 (file)
@@ -4,28 +4,28 @@ __END__
 qr/\N{U+7FFFFFFFFFFFFFFF}/;
 qr/\N{U+1_0000_0000_0000_0000}/;
 EXPECT
-Use of code point 0x1_0000_0000_0000_0000 is not allowed; the permissible max is 0x7fffffffffffffff in regex; marked by <-- HERE in m/\N{U+1_0000_0000_0000_0000 <-- HERE }/ at - line 2.
+Use of code point 0x1_0000_0000_0000_0000 is not allowed; the permissible max is 0x7FFFFFFFFFFFFFFF in regex; marked by <-- HERE in m/\N{U+1_0000_0000_0000_0000 <-- HERE }/ at - line 2.
 ########
 # NAME \N{U+too large} on 32-bit machine
 # SKIP ? use Config; $Config{uvsize} > 4 && "Not 32 bit"
 qr/\N{U+7FFFFFFF}/;
 qr/\N{U+1_0000_0000}/;
 EXPECT
-Use of code point 0x1_0000_0000 is not allowed; the permissible max is 0x7fffffff in regex; marked by <-- HERE in m/\N{U+1_0000_0000 <-- HERE }/ at - line 2.
+Use of code point 0x1_0000_0000 is not allowed; the permissible max is 0x7FFFFFFF in regex; marked by <-- HERE in m/\N{U+1_0000_0000 <-- HERE }/ at - line 2.
 ########
 # NAME \N{U+100.too large} on 64-bit machine
 # SKIP ? use Config; $Config{uvsize} < 8 && "Not 64 bit"
 qr/\N{U+100.7FFFFFFFFFFFFFFF}/;
 qr/\N{U+100.1_0000_0000_0000_0000}/;
 EXPECT
-Use of code point 0x1_0000_0000_0000_0000 is not allowed; the permissible max is 0x7fffffffffffffff in regex; marked by <-- HERE in m/\N{U+100.1_0000_0000_0000_0000 <-- HERE }/ at - line 2.
+Use of code point 0x1_0000_0000_0000_0000 is not allowed; the permissible max is 0x7FFFFFFFFFFFFFFF in regex; marked by <-- HERE in m/\N{U+100.1_0000_0000_0000_0000 <-- HERE }/ at - line 2.
 ########
 # NAME \N{U+100.too large} on 32-bit machine
 # SKIP ? use Config; $Config{uvsize} > 4 && "Not 32 bit"
 qr/\N{U+100.7FFFFFFF}/;
 qr/\N{U+100.1_0000_0000}/;
 EXPECT
-Use of code point 0x1_0000_0000 is not allowed; the permissible max is 0x7fffffff in regex; marked by <-- HERE in m/\N{U+100.1_0000_0000 <-- HERE }/ at - line 2.
+Use of code point 0x1_0000_0000 is not allowed; the permissible max is 0x7FFFFFFF in regex; marked by <-- HERE in m/\N{U+100.1_0000_0000 <-- HERE }/ at - line 2.
 ########
 # NAME \N{U+.}
 my $p00="\\N{U+.}"; qr/$p00/;
@@ -63,6 +63,12 @@ my $p00="[\\x59\\N{U+.}]"; qr/$p00/ui;
 EXPECT
 Invalid hexadecimal number in \N{U+...} in regex; marked by <-- HERE in m/[\x59\N{U+. <-- HERE }]/ at - line 1.
 ########
+# NAME \N{U+...} leading underscore not allowed, medial is allowed
+my $p00='\N{U+FF_FF}'; qr/$p00/;
+$p00='\N{U+_FF}'; qr/$p00/;
+EXPECT
+Invalid hexadecimal number in \N{U+...} in regex; marked by <-- HERE in m/\N{U+_ <-- HERE FF}/ at - line 2.
+########
 # NAME ${^RE_COMPILE_RECURSION_LIMIT} [perl #131551]
 BEGIN { ${^RE_COMPILE_RECURSION_LIMIT} = ${^RE_COMPILE_RECURSION_LIMIT} = 2; }
 qr/(a)/;
@@ -70,3 +76,111 @@ qr/((a))/;
 EXPECT
 Too many nested open parens in regex; marked by <-- HERE in m/(( <-- HERE a))/ at - line 3.
 ########
+# NAME \K not permitted in lookahead
+qr/(?=a\Ka)a/;
+EXPECT
+\K not permitted in lookahead/lookbehind in regex; marked by <-- HERE in m/(?=a\K <-- HERE a)a/ at - line 1.
+########
+# NAME \K not permitted in lookahead (alpha)
+no warnings 'experimental::alpha_assertions';
+qr/(*positive_lookahead:a\Ka)a/;
+EXPECT
+\K not permitted in lookahead/lookbehind in regex; marked by <-- HERE in m/(*positive_lookahead:a\K <-- HERE a)a/ at - line 2.
+########
+# NAME \K not permitted in negative lookahead
+qr/(?!a\Ka)a/;
+EXPECT
+\K not permitted in lookahead/lookbehind in regex; marked by <-- HERE in m/(?!a\K <-- HERE a)a/ at - line 1.
+########
+# NAME \K not permitted in negative lookahead (alpha)
+no warnings 'experimental::alpha_assertions';
+qr/(*negative_lookahead:a\Ka)a/;
+EXPECT
+\K not permitted in lookahead/lookbehind in regex; marked by <-- HERE in m/(*negative_lookahead:a\K <-- HERE a)a/ at - line 2.
+########
+# NAME \K not permitted in lookbehind
+qr/(?<=a\Ka)a/;
+EXPECT
+\K not permitted in lookahead/lookbehind in regex; marked by <-- HERE in m/(?<=a\K <-- HERE a)a/ at - line 1.
+########
+# NAME \K not permitted in lookbehind (alpha)
+no warnings 'experimental::alpha_assertions';
+qr/(*positive_lookbehind:a\Ka)a/;
+EXPECT
+\K not permitted in lookahead/lookbehind in regex; marked by <-- HERE in m/(*positive_lookbehind:a\K <-- HERE a)a/ at - line 2.
+########
+# NAME \K not permitted in negative lookbehind
+qr/(?<!a\Ka)a/;
+EXPECT
+\K not permitted in lookahead/lookbehind in regex; marked by <-- HERE in m/(?<!a\K <-- HERE a)a/ at - line 1.
+########
+# NAME \K not permitted in negative lookbehind (alpha)
+no warnings 'experimental::alpha_assertions';
+qr/(*negative_lookbehind:a\Ka)a/;
+EXPECT
+\K not permitted in lookahead/lookbehind in regex; marked by <-- HERE in m/(*negative_lookbehind:a\K <-- HERE a)a/ at - line 2.
+########
+# NAME \K nesting in lookahead after lookahead
+qr{(?=(?=x)x\K)x};
+EXPECT
+\K not permitted in lookahead/lookbehind in regex; marked by <-- HERE in m/(?=(?=x)x\K <-- HERE )x/ at - line 1.
+########
+# NAME \K nesting in lookahead after negative lookahead
+qr{(?=(?!y)x\K)x};
+EXPECT
+\K not permitted in lookahead/lookbehind in regex; marked by <-- HERE in m/(?=(?!y)x\K <-- HERE )x/ at - line 1.
+########
+# NAME \K nesting in lookahead in negative lookahead
+qr{(?=(?!y\K)x)x};
+EXPECT
+\K not permitted in lookahead/lookbehind in regex; marked by <-- HERE in m/(?=(?!y\K <-- HERE )x)x/ at - line 1.
+########
+# NAME \K nesting in lookahead in lookahead
+qr{(?=(?=x\K)x)x};
+EXPECT
+\K not permitted in lookahead/lookbehind in regex; marked by <-- HERE in m/(?=(?=x\K <-- HERE )x)x/ at - line 1.
+########
+# NAME \K nesting in lookbehind after lookbehind
+qr{(?<=(?<=x)x\K)x};
+EXPECT
+\K not permitted in lookahead/lookbehind in regex; marked by <-- HERE in m/(?<=(?<=x)x\K <-- HERE )x/ at - line 1.
+########
+# NAME \K nesting in lookahead after lookbehind
+qr{(?=(?<=x)x\K)x};
+EXPECT
+\K not permitted in lookahead/lookbehind in regex; marked by <-- HERE in m/(?=(?<=x)x\K <-- HERE )x/ at - line 1.
+########
+# NAME \K nesting in lookbehind after lookahead
+qr{(?<=(?=x)x\K)x};
+EXPECT
+\K not permitted in lookahead/lookbehind in regex; marked by <-- HERE in m/(?<=(?=x)x\K <-- HERE )x/ at - line 1.
+########
+# NAME \K nesting in negative lookbehind after lookahead
+qr{(?<!(?=x)x\K)x};
+EXPECT
+\K not permitted in lookahead/lookbehind in regex; marked by <-- HERE in m/(?<!(?=x)x\K <-- HERE )x/ at - line 1.
+########
+# NAME \K is permitted after the lookahead GH#18123
+qr/(?=(?=x)x)\K/;
+qr/(?!(?=x)x)\K/;
+qr/(?=(?!x)x)\K/;
+qr/(?!(?!x)x)\K/;
+qr/(?<=(?=x)x)\K/;
+qr/(?<!(?=x)x)\K/;
+qr/(?<=(?!x)x)\K/;
+qr/(?<!(?!x)x)\K/;
+qr/(?=(?<=x)x)\K/;
+qr/(?!(?<=x)x)\K/;
+qr/(?=(?<!x)x)\K/;
+qr/(?!(?<!x)x)\K/;
+qr/(?<=(?<=x)x)\K/;
+qr/(?<!(?<=x)x)\K/;
+qr/(?<=(?<!x)x)\K/;
+qr/(?<!(?<!x)x)\K/;
+EXPECT
+OPTIONS nonfatal
+########
+# NAME numeric parsing buffer overflow in numeric.c
+0=~/\p{nV:-0}/
+EXPECT
+Can't find Unicode property definition "nV:-0" in regex; marked by <-- HERE in m/\p{nV:-0} <-- HERE / at - line 1.
diff --git a/gnu/usr.bin/perl/t/lib/feature/bits b/gnu/usr.bin/perl/t/lib/feature/bits
new file mode 100644 (file)
index 0000000..227f852
--- /dev/null
@@ -0,0 +1,45 @@
+Test specifically for things that cop_features broke
+
+__END__
+# NAME check clearing $^H clears the bits
+use feature 'say';
+BEGIN { %^H = () }
+say "Fail";
+EXPECT
+String found where operator expected at - line 3, near "say "Fail""
+       (Do you need to predeclare say?)
+syntax error at - line 3, near "say "Fail""
+Execution of - aborted due to compilation errors.
+########
+# NAME check copying $^H restores the bits
+use feature 'say';
+say "Hello";
+BEGIN { our %work = %^H; }
+no feature 'say';
+BEGIN { %^H = our %work }
+say "Goodbye";
+EXPECT
+Hello
+Goodbye
+########
+# NAME check deleting entries (via feature.pm) clears the bits
+use feature 'say';
+say "Hello";
+no feature 'say';
+say "Goodbye";
+EXPECT
+String found where operator expected at - line 4, near "say "Goodbye""
+       (Do you need to predeclare say?)
+syntax error at - line 4, near "say "Goodbye""
+Execution of - aborted due to compilation errors.
+########
+# NAME check deleting entries (bypass feature.pm) clears the bits
+use feature 'say';
+say "Hello";
+BEGIN { delete $^H{feature_say}; }
+say "Goodbye";
+EXPECT
+String found where operator expected at - line 4, near "say "Goodbye""
+       (Do you need to predeclare say?)
+syntax error at - line 4, near "say "Goodbye""
+Execution of - aborted due to compilation errors.
diff --git a/gnu/usr.bin/perl/t/lib/feature/indirect b/gnu/usr.bin/perl/t/lib/feature/indirect
new file mode 100644 (file)
index 0000000..cd96f89
--- /dev/null
@@ -0,0 +1,141 @@
+Test no feature indirect.
+
+__END__
+# NAME feature indirect
+use feature 'say';
+package Foo {
+  sub new { bless {}, shift }
+}
+# various indirect object look-alikes
+my $foox = "foox";
+print STDERR "Hello\n";
+printf STDERR "Test%s\n", "x";
+say STDERR "Hello";
+exec $foox "foo", "bar";
+system $foox "foo", "bar";
+my $x = new Foo;
+no feature "indirect";
+print STDERR "Hello\n";
+printf STDERR "Test%s\n", "x";
+say STDERR "Hello";
+exec $foox "foo", "bar";
+system $foox "foo", "bar";
+my $y = new Foo;
+EXPECT
+OPTIONS fatal
+Bareword found where operator expected at - line 19, near "new Foo"
+       (Do you need to predeclare new?)
+syntax error at - line 19, near "new Foo"
+Execution of - aborted due to compilation errors.
+########
+# NAME METHOD BLOCK
+use feature 'say';
+package Foo {
+  sub new { bless {}, shift }
+}
+# make sure this works (either way)
+my $st = STDOUT;
+print { $st } "Foo\n";
+say { $st } "Foo";
+
+# make sure this continues to work by default
+my $class = "Foo";
+my $x = new { $class };
+
+use feature "indirect";
+
+# and with it explicitly enabled
+
+print { $st } "Foo\n";
+say { $st } "Foo";
+
+my $y = new { $class };
+
+
+no feature "indirect";
+
+# and only the indirect now fails
+print { $st } "Foo\n";
+say { $st } "Foo";
+my $z = new { $class };
+
+EXPECT
+OPTIONS fatal
+syntax error at - line 29, near "new { "
+Execution of - aborted due to compilation errors.
+########
+# NAME METHOD SCALAR
+use feature 'say';
+package Foo {
+  sub new { bless {}, shift }
+}
+# make sure this works (either way)
+my $st = STDOUT;
+print $st "Foo\n";
+say $st "Foo";
+
+# make sure this continues to work by default
+my $class = "Foo";
+my $x = new $class;
+
+use feature "indirect";
+
+# and with it explicitly enabled
+
+print $st "Foo\n";
+say $st "Foo";
+
+my $y = new $class;
+
+
+no feature "indirect";
+
+# and only the indirect now fails
+print $st "Foo\n";
+say $st "Foo";
+my $z = new $class;
+
+EXPECT
+OPTIONS fatal
+Scalar found where operator expected at - line 29, near "new $class"
+       (Do you need to predeclare new?)
+syntax error at - line 29, near "new $class"
+Execution of - aborted due to compilation errors.
+########
+# NAME FUNCMETH SCALAR
+use feature 'say';
+package Foo {
+  sub new { bless {}, shift }
+}
+# make sure this works (either way)
+my $st = STDOUT;
+print $st ("Foo\n");
+say $st ("Foo");
+
+# make sure this continues to work by default
+my $class = "Foo";
+my $x = new $class ();
+
+use feature "indirect";
+
+# and with it explicitly enabled
+
+print $st ("Foo\n");
+say $st ("Foo");
+
+my $y = new $class ();
+
+
+no feature "indirect";
+
+# and only the indirect now fails
+print $st ("Foo\n");
+say $st ("Foo");
+my $z = new $class ();
+
+EXPECT
+OPTIONS fatal
+Scalar found where operator expected at - line 29, near "new $class"
+       (Do you need to predeclare new?)
+syntax error at - line 29, near "new $class "
+Execution of - aborted due to compilation errors.
index 2a2dcf4..2caf2d3 100644 (file)
@@ -16,7 +16,6 @@ __END__
 use warnings 'syntax' ;
 @ISA = qw(Fred); joe()
 EXPECT
-Can't locate package Fred for @main::ISA at - line 3.
 Undefined subroutine &main::joe called at - line 3.
 ########
 # gv.c
@@ -26,6 +25,86 @@ EXPECT
 Undefined subroutine &main::joe called at - line 3.
 ########
 # gv.c
+use warnings 'syntax' ;
+@ISA = qw(Fred); __PACKAGE__->joe()
+EXPECT
+While trying to resolve method call main->joe() can not locate package "Fred" yet it is mentioned in @main::ISA (perhaps you forgot to load "Fred"?) at - line 3.
+Can't locate object method "joe" via package "main" at - line 3.
+########
+# gv.c
+no warnings 'syntax' ;
+@ISA = qw(Fred); __PACKAGE__->joe()
+EXPECT
+Can't locate object method "joe" via package "main" at - line 3.
+########
+# gv.c
+use warnings 'syntax' ;
+{
+    package AA;    # this is a deliberate error
+#   package A;     # should be this
+    sub foo {
+       print STDERR "I'm in A's foo\n";
+    }
+}
+{
+   package B;
+   sub foo {
+       print STDERR "I'm in B's foo\n";
+   }
+}
+@C::ISA = qw(A B);
+$a = bless [], 'C';
+$a->foo();
+__END__
+EXPECT
+While trying to resolve method call C->foo() can not locate package "A" yet it is mentioned in @C::ISA (perhaps you forgot to load "A"?) at - line 18.
+I'm in B's foo
+########
+# gv.c
+no warnings 'syntax' ;
+{
+    package AA;    # this is a deliberate error
+#   package A;     # should be this
+    sub foo {
+       print STDERR "I'm in A's foo\n";
+    }
+}
+{
+   package B;
+   sub foo {
+       print STDERR "I'm in B's foo\n";
+   }
+}
+@C::ISA = qw(A B);
+$a = bless [], 'C';
+$a->foo();
+__END__
+EXPECT
+I'm in B's foo
+########
+# gv.c
+use warnings 'syntax' ;
+{
+#   package AA;    # this would be an error
+    package A;     # the right thing
+    sub foo {
+       print STDERR "I'm in A's foo\n";
+    }
+}
+{
+   package B;
+   sub foo {
+       print STDERR "I'm in B's foo\n";
+   }
+}
+@C::ISA = qw(A B);
+$a = bless [], 'C';
+$a->foo();
+__END__
+EXPECT
+I'm in A's foo
+########
+# gv.c
 $a = ${^ENCODING};
 $a = ${^E_NCODING};
 ${^E_NCODING} = 1; # We pretend this variable never existed.
@@ -38,7 +117,6 @@ use open qw( :utf8 :std );
 package Y;
 @ISA = qw(Fred); joe()
 EXPECT
-Can't locate package Fred for @Y::ISA at - line 6.
 Undefined subroutine &Y::joe called at - line 6.
 ########
 # gv.c
index bf2afe9..25fe4af 100644 (file)
@@ -140,7 +140,7 @@ EOE
     if ($::testing_caller) {
        # Perl_refcounted_he_fetch() insists that you have the key correctly
        # normalised for the way hashes store them. As this one isn't
-       # normalised down to bytes, it won't work with
+       # normalised down to bytes, it won't work with
        # Perl_refcounted_he_fetch()
        is(hint_fetch($k2), 2, "UTF-8 or not, it's the same");
     }
diff --git a/gnu/usr.bin/perl/t/op/cmpchain.t b/gnu/usr.bin/perl/t/op/cmpchain.t
new file mode 100644 (file)
index 0000000..236d5f9
--- /dev/null
@@ -0,0 +1,173 @@
+#!./perl
+
+BEGIN {
+    chdir 't' if -d 't';
+    require "./test.pl";
+    set_up_inc("../lib");
+}
+
+use feature "isa";
+no warnings qw(experimental::smartmatch experimental::isa);
+
+my @cheqop = qw(== != eq ne);
+my @nceqop = qw(<=> cmp ~~);
+my @chrelop = qw(< > <= >= lt gt le ge);
+my @ncrelop = qw(isa);
+
+foreach my $c0 (@nceqop) {
+    foreach my $c1 (@nceqop) {
+       is eval("sub { \$a $c0 \$b $c1 \$c }"), undef,
+           "$c0 $c1 non-associative";
+    }
+}
+foreach my $c (@nceqop) {
+    foreach my $e (@cheqop) {
+       is eval("sub { \$a $c \$b $e \$c }"), undef, "$c $e non-associative";
+       is eval("sub { \$a $e \$b $c \$c }"), undef, "$e $c non-associative";
+    }
+}
+foreach my $c (@nceqop) {
+    foreach my $e0 (@cheqop) {
+       foreach my $e1 (@cheqop) {
+           is eval("sub { \$a $c \$b $e0 \$c $e1 \$d }"), undef,
+               "$c $e0 $e1 non-associative";
+           is eval("sub { \$a $e0 \$b $e1 \$c $c \$d }"), undef,
+               "$e0 $e1 $c non-associative";
+       }
+    }
+}
+
+foreach my $c0 (@ncrelop) {
+    foreach my $c1 (@ncrelop) {
+       is eval("sub { \$a $c0 \$b $c1 \$c }"), undef,
+           "$c0 $c1 non-associative";
+    }
+}
+foreach my $c (@ncrelop) {
+    foreach my $e (@chrelop) {
+       is eval("sub { \$a $c \$b $e \$c }"), undef, "$c $e non-associative";
+       is eval("sub { \$a $e \$b $c \$c }"), undef, "$e $c non-associative";
+    }
+}
+foreach my $c (@ncrelop) {
+    foreach my $e0 (@chrelop) {
+       foreach my $e1 (@chrelop) {
+           is eval("sub { \$a $c \$b $e0 \$c $e1 \$d }"), undef,
+               "$c $e0 $e1 non-associative";
+           is eval("sub { \$a $e0 \$b $e1 \$c $c \$d }"), undef,
+               "$e0 $e1 $c non-associative";
+       }
+    }
+}
+
+foreach my $e0 (@cheqop) {
+    foreach my $e1 (@cheqop) {
+       isnt eval("sub { \$a $e0 \$b $e1 \$c }"), undef, "$e0 $e1 legal";
+    }
+}
+foreach my $r0 (@chrelop) {
+    foreach my $r1 (@chrelop) {
+       isnt eval("sub { \$a $r0 \$b $r1 \$c }"), undef, "$r0 $r1 legal";
+    }
+}
+foreach my $e0 (@cheqop) {
+    foreach my $e1 (@cheqop) {
+       foreach my $e2 (@cheqop) {
+           isnt eval("sub { \$a $e0 \$b $e1 \$c $e2 \$d }"), undef,
+               "$e0 $e1 $e2 legal";
+       }
+    }
+}
+foreach my $r0 (@chrelop) {
+    foreach my $r1 (@chrelop) {
+       foreach my $r2 (@chrelop) {
+           isnt eval("sub { \$a $r0 \$b $r1 \$c $r2 \$d }"), undef,
+               "$r0 $r1 $r2 legal";
+       }
+    }
+}
+
+foreach(
+    [5,3,2], [5,3,3], [5,3,4], [5,3,5], [5,3,6],
+    [5,5,4], [5,5,5], [5,5,6],
+    [5,7,4], [5,7,5], [5,7,6], [5,7,7], [5,7,8],
+) {
+    is join(",", "x", $_->[0] == $_->[1] != $_->[2], "y"),
+       join(",", "x", !!($_->[0] == $_->[1] && $_->[1] != $_->[2]), "y"),
+       "$_->[0] == $_->[1] != $_->[2]";
+    is join(",", "x", $_->[0] != $_->[1] == $_->[2], "y"),
+       join(",", "x", !!($_->[0] != $_->[1] && $_->[1] == $_->[2]), "y"),
+       "$_->[0] != $_->[1] == $_->[2]";
+    is join(",", "x", $_->[0] < $_->[1] <= $_->[2], "y"),
+       join(",", "x", !!($_->[0] < $_->[1] && $_->[1] <= $_->[2]), "y"),
+       "$_->[0] < $_->[1] <= $_->[2]";
+    is join(",", "x", $_->[0] > $_->[1] >= $_->[2], "y"),
+       join(",", "x", !!($_->[0] > $_->[1] && $_->[1] >= $_->[2]), "y"),
+       "$_->[0] > $_->[1] >= $_->[2]";
+    is join(",", "x", $_->[0] < $_->[1] > $_->[2], "y"),
+       join(",", "x", !!($_->[0] < $_->[1] && $_->[1] > $_->[2]), "y"),
+       "$_->[0] < $_->[1] > $_->[2]";
+    my $e = "";
+    is join(",", "x",
+           ($e .= "a", $_->[0]) == ($e .= "b", $_->[1]) !=
+               ($e .= "c", $_->[2]),
+           "y"),
+       join(",", "x", !!($_->[0] == $_->[1] && $_->[1] != $_->[2]), "y"),
+       "$_->[0] == $_->[1] != $_->[2] with side effects";
+    is $e, "ab".($_->[0] == $_->[1] ? "c" : ""), "operand evaluation order";
+    $e = "";
+    is join(",", "x",
+           ($e .= "a", $_->[0]) < ($e .= "b", $_->[1]) <= ($e .= "c", $_->[2]),
+           "y"),
+       join(",", "x", !!($_->[0] < $_->[1] && $_->[1] <= $_->[2]), "y"),
+       "$_->[0] < $_->[1] <= $_->[2] with side effects";
+    is $e, "ab".($_->[0] < $_->[1] ? "c" : ""), "operand evaluation order";
+    foreach my $p (1..9) {
+       is join(",", "x", $_->[0] == $_->[1] != $_->[2] == $p, "y"),
+           join(",", "x",
+               !!($_->[0] == $_->[1] && $_->[1] != $_->[2] && $_->[2] == $p),
+               "y"),
+           "$_->[0] == $_->[1] != $_->[2] == $p";
+       is join(",", "x", $_->[0] < $_->[1] <= $_->[2] > $p, "y"),
+           join(",", "x",
+               !!($_->[0] < $_->[1] && $_->[1] <= $_->[2] && $_->[2] > $p),
+               "y"),
+           "$_->[0] < $_->[1] <= $_->[2] > $p";
+       $e = "";
+       is join(",", "x",
+               ($e .= "a", $_->[0]) == ($e .= "b", $_->[1]) !=
+                   ($e .= "c", $_->[2]) == ($e .= "d", $p),
+               "y"),
+           join(",", "x",
+               !!($_->[0] == $_->[1] && $_->[1] != $_->[2] && $_->[2] == $p),
+               "y"),
+           "$_->[0] == $_->[1] != $_->[2] == $p with side effects";
+       is $e,
+           "ab".($_->[0] == $_->[1] ?
+                   ("c".($_->[1] != $_->[2] ? "d" : "")) : ""),
+           "operand evaluation order";
+       $e = "";
+       is join(",", "x",
+               ($e .= "a", $_->[0]) < ($e .= "b", $_->[1]) <=
+                   ($e .= "c", $_->[2]) > ($e .= "d", $p),
+               "y"),
+           join(",", "x",
+               !!($_->[0] < $_->[1] && $_->[1] <= $_->[2] && $_->[2] > $p),
+               "y"),
+           "$_->[0] < $_->[1] <= $_->[2] > $p with side effects";
+       is $e,
+           "ab".($_->[0] < $_->[1] ?
+                   ("c".($_->[1] <= $_->[2] ? "d" : "")) : ""),
+           "operand evaluation order";
+    }
+}
+
+# https://github.com/Perl/perl5/issues/18380
+fresh_perl_is(<<'CODE', "", {}, "stack underflow");
+no warnings "uninitialized";
+my $v;
+1 < $v < 2;
+2 < $v < 3;
+CODE
+
+done_testing();
diff --git a/gnu/usr.bin/perl/t/op/isa.t b/gnu/usr.bin/perl/t/op/isa.t
new file mode 100644 (file)
index 0000000..96a9c21
--- /dev/null
@@ -0,0 +1,49 @@
+#!./perl
+
+BEGIN {
+    chdir 't' if -d 't';
+    require './test.pl';
+    set_up_inc('../lib');
+    require Config;
+}
+
+use strict;
+use feature 'isa';
+no warnings 'experimental::isa';
+
+plan 11;
+
+package BaseClass {}
+package DerivedClass { our @ISA = qw(BaseClass) }
+package CustomClass {
+   sub isa { length($_[1]) == 9; }
+}
+
+my $baseobj = bless {}, "BaseClass";
+my $derivedobj = bless {}, "DerivedClass";
+my $customobj = bless {}, "CustomClass";
+
+# Bareword package name
+ok($baseobj isa BaseClass, '$baseobj isa BaseClass');
+ok(not($baseobj isa Another::Class), '$baseobj is not Another::Class');
+
+# String package name
+ok($baseobj isa "BaseClass",         '$baseobj isa BaseClass');
+ok(not($baseobj isa "DerivedClass"), '$baseobj is not DerivedClass');
+
+ok($derivedobj isa "DerivedClass", '$derivedobj isa DerivedClass');
+ok($derivedobj isa "BaseClass",    '$derivedobj isa BaseClass');
+
+# Expression giving a package name
+my $classname = "DerivedClass";
+ok($derivedobj isa $classname, '$derivedobj isa DerivedClass via SV');
+
+# Invoked on instance which overrides ->isa
+ok($customobj isa "Something",          '$customobj isa Something');
+ok(not($customobj isa "SomethingElse"), '$customobj isa SomethingElse');
+
+ok(not(undef isa "BaseClass"), 'undef is not BaseClass');
+ok(not([] isa "BaseClass"),    'ARRAYref is not BaseClass');
+
+# TODO: Consider 
+#    LHS = other class
index 1ddfd13..c53a9eb 100644 (file)
@@ -134,7 +134,7 @@ if ($r or not seek(BIG, 5_000_000_000, SEEK_SET)) {
 }
 
 # Either the print or (more likely, thanks to buffering) the close will
-# fail if there are are filesize limitations (process or fs).
+# fail if there are filesize limitations (process or fs).
 my $print = print BIG "big";
 print "# print failed: $!\n" unless $print;
 my $close = close BIG;
diff --git a/gnu/usr.bin/perl/t/op/signame_canonical.t b/gnu/usr.bin/perl/t/op/signame_canonical.t
new file mode 100644 (file)
index 0000000..241b57a
--- /dev/null
@@ -0,0 +1,75 @@
+#!perl -w
+
+# We assume that TestInit has been used.
+
+BEGIN {
+    chdir 't' if -d 't';
+    require './test.pl';
+    skip_all_if_miniperl();
+}
+
+use strict;
+use warnings;
+
+use Config;
+use Data::Dumper;
+$Data::Dumper::Sortkeys = 1;
+
+# Windows doesn't seem to be able to test signals.
+skip_all("Signals lock up tests on $^O") if $^O =~ /MSWin32/;
+
+$| = 1;
+
+# Extract the signals from %Config.
+my @SIGNAMES = split /\s+/, $Config{sig_name};
+my @SIGNUMS  = split /\s+/, $Config{sig_num};
+
+my %SIG_MAP;
+foreach my $i ( 0 .. ( scalar @SIGNAMES - 1 ) ) {
+    $SIG_MAP{ $SIGNAMES[$i] } = $SIGNUMS[$i];
+}
+
+# Find the canonical (first) signal names.
+my %CANONICAL_SIG;
+my @duplicate_signals;
+foreach my $sig (@SIGNAMES) {
+    my $signum = $SIG_MAP{$sig};
+    $CANONICAL_SIG{$signum} //= $sig;
+    push @duplicate_signals, $sig if $CANONICAL_SIG{$signum} ne $sig;
+}
+
+plan tests => scalar @duplicate_signals * 5;
+watchdog(25);
+
+# Define the duplicate signal handlers.
+my $sent = '';
+
+sub handler_is {
+    my $signame = shift;
+    my $signum  = $SIG_MAP{$signame};
+
+    my $canonical = $CANONICAL_SIG{$signum};
+
+    is( $signame, $canonical, "Signal name for $sent is recieved as the canonical '$canonical' name." );
+
+    return;
+}
+
+foreach my $dupe (@duplicate_signals) {
+    my $canonical_name = $CANONICAL_SIG{ $SIG_MAP{$dupe} };
+    note "Testing $dupe / $canonical_name signal pair";
+    {
+        local $SIG{$dupe} = \&handler_is;
+        is( $SIG{$dupe}, $SIG{$canonical_name}, "Both handlers for $canonical_name/$dupe are set" );
+
+        $sent = $dupe;
+        kill $dupe, $$;
+
+        $sent = $canonical_name;
+        kill $canonical_name, $$;
+    }
+
+    is( $SIG{$dupe},           undef, "The signal $dupe is cleared after local goes out of scope." );
+    is( $SIG{$canonical_name}, undef, "The signal $canonical_name is cleared after local goes out of scope." );
+}
+
index e01477c..9d08652 100644 (file)
@@ -3,10 +3,11 @@
 BEGIN {
     chdir 't' if -d 't';
     require './test.pl';
+    skip_all('ASCII sensitive') if $::IS_EBCDIC;
     set_up_inc('../lib');
 }
 
-plan tests => 1;
+plan tests => 2;
 
 { # This test is malloc senstive.  Right now on some platforms anyway, space
   # for the final \xff needs to be mallocd, and that's what caused the
@@ -17,4 +18,9 @@ plan tests => 1;
 
 }
 
+{   # gh#17277.  This caused errors with valgrind and asan
+    fresh_perl_is('no warnings qw(void uninitialized); s~~00~-y~Ë0~\x{E00}~',
+                  "", {}, 'gh#17227');
+}
+
 1;
index 0102e93..0172b7c 100644 (file)
@@ -24,8 +24,19 @@ if ( $ENV{TRAVIS} && defined $ENV{TRAVIS_COMMIT_RANGE} ) {
        #       all the more a pull request should not be impacted by blead being incorrect
        $revision_range = $ENV{TRAVIS_COMMIT_RANGE};
 }
+elsif( $ENV{GITHUB_ACTIONS} && length $ENV{GITHUB_BASE_REF} ) {
+    # Same as above, except for GitHub Actions
+    # https://help.github.com/en/actions/automating-your-workflow-with-github-actions/using-environment-variables
+
+    # This hardcoded origin/ isn't great, but I'm not sure how to better fix it
+    my $common_ancestor = `git merge-base "origin/$ENV{GITHUB_BASE_REF}" "HEAD~2" 2>/dev/null`;
+
+    chomp($common_ancestor);
+
+    $revision_range = "${common_ancestor}..HEAD" if length $common_ancestor
+}
 
 # This is the subset of "pretty=fuller" that checkAUTHORS.pl actually needs:
-print qx{git log --pretty=format:"Author: %an <%ae>" $revision_range | $^X Porting/checkAUTHORS.pl --tap -};
+print qx{git log --no-merges --pretty=format:"Author: %an <%ae>" $revision_range | $^X Porting/checkAUTHORS.pl --tap -};
 
 # EOF
index f8cb6ac..d898b49 100644 (file)
@@ -6,7 +6,7 @@
 # code on CPAN, and can break cflags.SH.
 #
 # Why do we test this?
-# See https://rt.perl.org/rt3/Ticket/Display.html?id=116989
+# See https://github.com/Perl/perl5/issues/12824
 #
 # It's broken - how do I fix it?
 # You added an initializer or static function to a header file that
index 03a9a8c..53b31b8 100755 (executable)
@@ -1,9 +1,8 @@
 #!/perl -w
 use strict;
 
-# See "Writing a test" in perlhack.pod for the instructions about the order that
-# testing directories run, and which constructions should be avoided in the
-# early tests.
+# See "TESTING" in perlhack.pod for the instructions about where test files
+# are located and which constructions should be avoided in the early tests.
 
 # This regression tests ensures that the rules aren't accidentally overlooked.
 
@@ -36,8 +35,13 @@ while (my $file = <$fh>) {
     # avoid PERL_UNICODE causing us to read non-UTF-8 files as UTF-8
     binmode $t;
     my $contents = <$t>;
-    # Make sure that we don't match ourselves
-    unlike($contents, qr/use\s+Test::More/, "$file doesn't use Test::\QMore");
+    # Don't 'use' Test::* modules under 't/' --
+    # but exclude this file from that test.
+    unlike(
+        $contents,
+        qr/use\s+Test::(?:Simple|More)/,
+        "$file doesn't use Test::Simple or Test::More"
+    ) unless ($file =~ m|porting/test_bootstrap\.t|);
     next unless $file =~ m!^base/! or $file =~ m!^comp!;
 
     # Remove only the excepted constructions for the specific files.
index d33cbb2..6cc34ef 100644 (file)
@@ -35,13 +35,15 @@ BEGIN {
 # NOTE:  If the pattern contains (?8) it will be upgraded to UTF-8 after
 #        stripping that
 
-# 2**32-1 or 2**64-1
-my $highest_cp_string = "F" x (($Config{uvsize} < 8) ? 8 : 16);
+use Unicode::UCD;
+my $highest_cp = $Unicode::UCD::MAX_CP;
+my $highest_cp_string = sprintf "%X", $highest_cp;
+$highest_cp_string = "$highest_cp_string";
 
-my $next_highest_cp_string = $highest_cp_string =~ s/ F $ /E/xr;
-
-my $highest_cp = "\\x{$highest_cp_string}";
-my $next_highest_cp = "\\x{$next_highest_cp_string}";
+my $infinity = $highest_cp_string;
+$infinity =~ s/^7/F/;  # Make infinity larger than the largest legal one, and
+                       # at the time of this writing, we really internally
+                       # allow UV_MAX to be infinity.
 
 sub  get_compiled ($) {
     # Convert platform-independent values to what is suitable for the
@@ -49,8 +51,8 @@ sub  get_compiled ($) {
 
     my $pattern = shift;
 
-    $pattern =~ s/\{INFTY\}/$highest_cp/g;
-    $pattern =~ s/\{INFTY_minus_1\}/$next_highest_cp/g;
+    $pattern =~ s/{INFTY}/\\x{$infinity}/g;
+    $pattern =~ s/{HIGHEST_CP}/\\x{$highest_cp_string}/g;
     my $use_utf8 = ($pattern =~ s/\Q(?8)//);
 
     $pattern = "my \$a = '$pattern';";
@@ -60,7 +62,7 @@ sub  get_compiled ($) {
 
     my $result = fresh_perl($actual_pattern);
     if ($? != 0) {  # Re-run so as to display STDERR.
-        fail($pattern);
+        fail($pattern, "Until this is fixed, the planned number of tests will be wrong");
         fresh_perl($actual_pattern, { stderr => 0, verbose => 1 });
         return;
     }
@@ -78,8 +80,8 @@ sub  get_compiled ($) {
     s/ ^ \s* \d+ : \s* //x;     # ... And the node number
 
     # Use platform-independent values
-    s/$highest_cp_string/INFTY/g;
-    s/$next_highest_cp_string/INFTY_minus_1/g;
+    s/$infinity/INFTY/ig;
+    s/$highest_cp_string/HIGHEST_CP/ig;
 
     return $_;
 }
@@ -137,8 +139,10 @@ my @tests = (
     '[_[:^blank:]]' => 'NPOSIXD[:blank:]',
     '[\xA0[:^blank:]]' => 'ANYOF[^\t ][0100-167F 1681-1FFF 200B-202E 2030-205E 2060-2FFF 3001-INFTY]',
     '(?d:[_[:^blank:]])' => 'NPOSIXD[:blank:]',
-    '[\x{07}-\x{0B}]' => 'ANYOF[\a\b\t\n\x0B]',
-    '(?il)[\x{212A}]' => 'ANYOFL{i}[{utf8 locale}Kk][212A]',
+    '[\x{07}-\x{0B}]' => 'ANYOFR[\a\b\t\n\x0B]',
+    '(?l)[\x{2029}]' => 'EXACTL <\x{2029}>',
+    '(?l)(?[\x{2029}])' => 'ANYOFL{utf8-locale-reqd}[2029]', # regex sets requires utf8 locale for /l
+    '(?il)[\x{212A}]' => 'EXACTFL <\\x{212a}>',
     '(?il)(?[\x{212A}])' => 'ANYOFL{utf8-locale-reqd}[Kk][212A]',
 
     '(?i)b[s]\xe0' => 'ANYOFM[Bb]',    # The s goes into a 2nd node
@@ -459,11 +463,12 @@ my @tests = (
     '(?i)(?u)[\D\w]' => 'SANY',
     '(?i)(?a)[\d\w]' => 'POSIXA[\w]',
     '(?i)(?a)[\D\w]' => 'SANY',
-    '(?l:[\x{212A}])' => 'ANYOFL[212A]',
+    '(?l:[\x{212A}])' => 'EXACTL <\x{212a}>',
     '(?l:[\s\x{212A}])' => 'ANYOFPOSIXL[\s][1680 2000-200A 2028-2029 202F 205F 212A 3000]',
     '(?l:[^\S\x{202F}])' => 'ANYOFPOSIXL[^\\S][1680 2000-200A 2028-2029 205F 3000]',
-    '(?li:[a-z])' => 'ANYOFL{i}[a-z{utf8 locale}\x{017F}\x{212A}]',
-
+    '(?li:[a-z])' => (($::IS_ASCII)
+                     ? 'ANYOFL{i}[a-z{utf8 locale}\x{017F}\x{212A}]'
+                     : 'ANYOFL{i}[a-ij-rs-z{utf8 locale}\x{017F}\x{212A}]'),
     '\p{All}' => 'SANY',
     '\P{All}' => 'OPFAIL',
     '[\p{Any}]' => 'ANYOF[\x00-\xFF][0100-10FFFF]',
@@ -476,163 +481,157 @@ my @tests = (
     '[^\p{All}\p{IsMyRuntimeProperty}]' => 'OPFAIL',
     '[\p{All}\p{IsMyRuntimeProperty}]' => 'SANY',
 
-    '[\x{00}-{INFTY_minus_1}]' => 'ANYOF[\x00-\xFF][0100-INFTY_minus_1]',
+    '[\x{00}-{HIGHEST_CP}]' => 'ANYOF[\x00-\xFF][0100-HIGHEST_CP]',
     '[\x{00}-{INFTY}]' => 'SANY',
-    '(?i)[\x{100}]' => 'ANYOFH[0100-0101]',
     '[\x{101}-{INFTY}]' => 'ANYOFH[0101-INFTY]',
-    '[\x{101}-{INFTY_minus_1}]' => 'ANYOFH[0101-INFTY_minus_1]',
-    '[\x{102}\x{104}]' => 'ANYOFH[0102 0104]',
-    '[\x{102}-\x{104}{INFTY}]' => 'ANYOFH[0102-0104 INFTY-INFTY]',
-    '[\x{102}-\x{104}{INFTY_minus_1}]' => 'ANYOFH[0102-0104 INFTY_minus_1]',
-    '[\x{102}-\x{104}\x{101}]' => 'ANYOFH[0101-0104]',
+    '[\x{101}-{HIGHEST_CP}]' => 'ANYOFH[0101-HIGHEST_CP]',
+    '[\x{102}\x{104}]' => 'ANYOFHb[0102 0104]',
+    '[\x{102}-\x{104}{HIGHEST_CP}]' => 'ANYOFH[0102-0104 HIGHEST_CP]',
+    '[\x{102}-\x{104}\x{101}]' => 'ANYOFRb[0101-0104]',
     '[\x{102}-\x{104}\x{101}-{INFTY}]' => 'ANYOFH[0101-INFTY]',
-    '[\x{102}-\x{104}\x{101}-{INFTY_minus_1}]' => 'ANYOFH[0101-INFTY_minus_1]',
-    '[\x{102}-\x{104}\x{102}]' => 'ANYOFH[0102-0104]',
+    '[\x{102}-\x{104}\x{101}-{HIGHEST_CP}]' => 'ANYOFH[0101-HIGHEST_CP]',
+    '[\x{102}-\x{104}\x{102}]' => 'ANYOFRb[0102-0104]',
     '[\x{102}-\x{104}\x{102}-{INFTY}]' => 'ANYOFH[0102-INFTY]',
-    '[\x{102}-\x{104}\x{102}-{INFTY_minus_1}]' => 'ANYOFH[0102-INFTY_minus_1]',
-    '[\x{102}-\x{104}\x{103}]' => 'ANYOFH[0102-0104]',
+    '[\x{102}-\x{104}\x{102}-{HIGHEST_CP}]' => 'ANYOFH[0102-HIGHEST_CP]',
+    '[\x{102}-\x{104}\x{103}]' => 'ANYOFRb[0102-0104]',
     '[\x{102}-\x{104}\x{103}-{INFTY}]' => 'ANYOFH[0102-INFTY]',
-    '[\x{102}-\x{104}\x{103}-{INFTY_minus_1}]' => 'ANYOFH[0102-INFTY_minus_1]',
-    '[\x{102}-\x{104}\x{104}]' => 'ANYOFH[0102-0104]',
+    '[\x{102}-\x{104}\x{103}-{HIGHEST_CP}]' => 'ANYOFH[0102-HIGHEST_CP]',
+    '[\x{102}-\x{104}\x{104}]' => 'ANYOFRb[0102-0104]',
     '[\x{102}-\x{104}\x{104}-{INFTY}]' => 'ANYOFH[0102-INFTY]',
-    '[\x{102}-\x{104}\x{104}-{INFTY_minus_1}]' => 'ANYOFH[0102-INFTY_minus_1]',
-    '[\x{102}-\x{104}\x{105}]' => 'ANYOFH[0102-0105]',
+    '[\x{102}-\x{104}\x{104}-{HIGHEST_CP}]' => 'ANYOFH[0102-HIGHEST_CP]',
+    '[\x{102}-\x{104}\x{105}]' => 'ANYOFRb[0102-0105]',
     '[\x{102}-\x{104}\x{105}-{INFTY}]' => 'ANYOFH[0102-INFTY]',
-    '[\x{102}-\x{104}\x{105}-{INFTY_minus_1}]' => 'ANYOFH[0102-INFTY_minus_1]',
-    '[\x{102}-\x{104}\x{106}]' => 'ANYOFH[0102-0104 0106]',
+    '[\x{102}-\x{104}\x{105}-{HIGHEST_CP}]' => 'ANYOFH[0102-HIGHEST_CP]',
+    '[\x{102}-\x{104}\x{106}]' => 'ANYOFHb[0102-0104 0106]',
     '[\x{102}-\x{104}\x{106}-{INFTY}]' => 'ANYOFH[0102-0104 0106-INFTY]',
-    '[\x{102}-\x{104}\x{106}-{INFTY_minus_1}]' => 'ANYOFH[0102-0104 0106-INFTY_minus_1]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}{INFTY}]' => 'ANYOFH[0102-0104 0108-010A INFTY-INFTY]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}{INFTY_minus_1}]' => 'ANYOFH[0102-0104 0108-010A INFTY_minus_1]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{101}]' => 'ANYOFH[0101-0104 0108-010A]',
+    '[\x{102}-\x{104}\x{106}-{HIGHEST_CP}]' => 'ANYOFH[0102-0104 0106-HIGHEST_CP]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}{HIGHEST_CP}]' => 'ANYOFH[0102-0104 0108-010A HIGHEST_CP]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{101}]' => 'ANYOFHb[0101-0104 0108-010A]',
     '[\x{102}-\x{104}\x{108}-\x{10A}\x{101}-{INFTY}]' => 'ANYOFH[0101-INFTY]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{101}-{INFTY_minus_1}]' => 'ANYOFH[0101-INFTY_minus_1]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{101}-\x{102}]' => 'ANYOFH[0101-0104 0108-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{101}-\x{103}]' => 'ANYOFH[0101-0104 0108-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{101}-\x{104}]' => 'ANYOFH[0101-0104 0108-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{101}-\x{105}]' => 'ANYOFH[0101-0105 0108-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{101}-\x{106}]' => 'ANYOFH[0101-0106 0108-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{101}-\x{107}]' => 'ANYOFH[0101-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{101}-\x{108}]' => 'ANYOFH[0101-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{101}-\x{109}]' => 'ANYOFH[0101-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{101}-\x{10A}]' => 'ANYOFH[0101-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{101}-\x{10B}]' => 'ANYOFH[0101-010B]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{102}]' => 'ANYOFH[0102-0104 0108-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{101}-{HIGHEST_CP}]' => 'ANYOFH[0101-HIGHEST_CP]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{101}-\x{102}]' => 'ANYOFHb[0101-0104 0108-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{101}-\x{103}]' => 'ANYOFHb[0101-0104 0108-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{101}-\x{104}]' => 'ANYOFHb[0101-0104 0108-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{101}-\x{105}]' => 'ANYOFHb[0101-0105 0108-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{101}-\x{106}]' => 'ANYOFHb[0101-0106 0108-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{101}-\x{107}]' => 'ANYOFRb[0101-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{101}-\x{108}]' => 'ANYOFRb[0101-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{101}-\x{109}]' => 'ANYOFRb[0101-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{101}-\x{10A}]' => 'ANYOFRb[0101-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{101}-\x{10B}]' => 'ANYOFRb[0101-010B]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{102}]' => 'ANYOFHb[0102-0104 0108-010A]',
     '[\x{102}-\x{104}\x{108}-\x{10A}\x{102}-{INFTY}]' => 'ANYOFH[0102-INFTY]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{102}-{INFTY_minus_1}]' => 'ANYOFH[0102-INFTY_minus_1]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{102}-\x{102}]' => 'ANYOFH[0102-0104 0108-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{102}-\x{103}]' => 'ANYOFH[0102-0104 0108-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{102}-\x{104}]' => 'ANYOFH[0102-0104 0108-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{102}-\x{105}]' => 'ANYOFH[0102-0105 0108-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{102}-\x{106}]' => 'ANYOFH[0102-0106 0108-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{102}-\x{107}]' => 'ANYOFH[0102-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{102}-\x{108}]' => 'ANYOFH[0102-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{102}-\x{109}]' => 'ANYOFH[0102-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{102}-\x{10A}]' => 'ANYOFH[0102-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{102}-\x{10B}]' => 'ANYOFH[0102-010B]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{102}-\x{10C}]' => 'ANYOFH[0102-010C]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{103}]' => 'ANYOFH[0102-0104 0108-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{102}-{HIGHEST_CP}]' => 'ANYOFH[0102-HIGHEST_CP]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{102}-\x{102}]' => 'ANYOFHb[0102-0104 0108-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{102}-\x{103}]' => 'ANYOFHb[0102-0104 0108-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{102}-\x{104}]' => 'ANYOFHb[0102-0104 0108-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{102}-\x{105}]' => 'ANYOFHb[0102-0105 0108-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{102}-\x{106}]' => 'ANYOFHb[0102-0106 0108-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{102}-\x{107}]' => 'ANYOFRb[0102-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{102}-\x{108}]' => 'ANYOFRb[0102-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{102}-\x{109}]' => 'ANYOFRb[0102-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{102}-\x{10A}]' => 'ANYOFRb[0102-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{102}-\x{10B}]' => 'ANYOFRb[0102-010B]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{102}-\x{10C}]' => 'ANYOFRb[0102-010C]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{103}]' => 'ANYOFHb[0102-0104 0108-010A]',
     '[\x{102}-\x{104}\x{108}-\x{10A}\x{103}-{INFTY}]' => 'ANYOFH[0102-INFTY]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{103}-{INFTY_minus_1}]' => 'ANYOFH[0102-INFTY_minus_1]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{103}-\x{104}]' => 'ANYOFH[0102-0104 0108-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{103}-\x{105}]' => 'ANYOFH[0102-0105 0108-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{103}-\x{106}]' => 'ANYOFH[0102-0106 0108-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{103}-\x{107}]' => 'ANYOFH[0102-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{103}-\x{108}]' => 'ANYOFH[0102-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{103}-\x{109}]' => 'ANYOFH[0102-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{103}-\x{10A}]' => 'ANYOFH[0102-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{103}-\x{10B}]' => 'ANYOFH[0102-010B]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{103}-\x{10C}]' => 'ANYOFH[0102-010C]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{104}]' => 'ANYOFH[0102-0104 0108-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{103}-{HIGHEST_CP}]' => 'ANYOFH[0102-HIGHEST_CP]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{103}-\x{104}]' => 'ANYOFHb[0102-0104 0108-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{103}-\x{105}]' => 'ANYOFHb[0102-0105 0108-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{103}-\x{106}]' => 'ANYOFHb[0102-0106 0108-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{103}-\x{107}]' => 'ANYOFRb[0102-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{103}-\x{108}]' => 'ANYOFRb[0102-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{103}-\x{109}]' => 'ANYOFRb[0102-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{103}-\x{10A}]' => 'ANYOFRb[0102-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{103}-\x{10B}]' => 'ANYOFRb[0102-010B]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{103}-\x{10C}]' => 'ANYOFRb[0102-010C]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{104}]' => 'ANYOFHb[0102-0104 0108-010A]',
     '[\x{102}-\x{104}\x{108}-\x{10A}\x{104}-{INFTY}]' => 'ANYOFH[0102-INFTY]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{104}-{INFTY_minus_1}]' => 'ANYOFH[0102-INFTY_minus_1]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{104}-\x{105}]' => 'ANYOFH[0102-0105 0108-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{104}-\x{106}]' => 'ANYOFH[0102-0106 0108-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{104}-\x{107}]' => 'ANYOFH[0102-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{104}-\x{108}]' => 'ANYOFH[0102-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{104}-\x{109}]' => 'ANYOFH[0102-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{104}-\x{10A}]' => 'ANYOFH[0102-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{104}-\x{10B}]' => 'ANYOFH[0102-010B]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{104}-\x{10C}]' => 'ANYOFH[0102-010C]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{105}]' => 'ANYOFH[0102-0105 0108-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{104}-{HIGHEST_CP}]' => 'ANYOFH[0102-HIGHEST_CP]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{104}-\x{105}]' => 'ANYOFHb[0102-0105 0108-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{104}-\x{106}]' => 'ANYOFHb[0102-0106 0108-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{104}-\x{107}]' => 'ANYOFRb[0102-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{104}-\x{108}]' => 'ANYOFRb[0102-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{104}-\x{109}]' => 'ANYOFRb[0102-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{104}-\x{10A}]' => 'ANYOFRb[0102-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{104}-\x{10B}]' => 'ANYOFRb[0102-010B]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{104}-\x{10C}]' => 'ANYOFRb[0102-010C]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{105}]' => 'ANYOFHb[0102-0105 0108-010A]',
     '[\x{102}-\x{104}\x{108}-\x{10A}\x{105}-{INFTY}]' => 'ANYOFH[0102-INFTY]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{105}-{INFTY_minus_1}]' => 'ANYOFH[0102-INFTY_minus_1]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{105}-\x{106}]' => 'ANYOFH[0102-0106 0108-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{105}-\x{107}]' => 'ANYOFH[0102-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{105}-\x{108}]' => 'ANYOFH[0102-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{105}-\x{109}]' => 'ANYOFH[0102-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{105}-\x{10A}]' => 'ANYOFH[0102-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{105}-\x{10B}]' => 'ANYOFH[0102-010B]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{105}-\x{10C}]' => 'ANYOFH[0102-010C]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{106}]' => 'ANYOFH[0102-0104 0106 0108-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{105}-{HIGHEST_CP}]' => 'ANYOFH[0102-HIGHEST_CP]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{105}-\x{106}]' => 'ANYOFHb[0102-0106 0108-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{105}-\x{107}]' => 'ANYOFRb[0102-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{105}-\x{108}]' => 'ANYOFRb[0102-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{105}-\x{109}]' => 'ANYOFRb[0102-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{105}-\x{10A}]' => 'ANYOFRb[0102-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{105}-\x{10B}]' => 'ANYOFRb[0102-010B]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{105}-\x{10C}]' => 'ANYOFRb[0102-010C]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{106}]' => 'ANYOFHb[0102-0104 0106 0108-010A]',
     '[\x{102}-\x{104}\x{108}-\x{10A}\x{106}-{INFTY}]' => 'ANYOFH[0102-0104 0106-INFTY]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{106}-{INFTY_minus_1}]' => 'ANYOFH[0102-0104 0106-INFTY_minus_1]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{106}-\x{107}]' => 'ANYOFH[0102-0104 0106-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{106}-\x{108}]' => 'ANYOFH[0102-0104 0106-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{106}-\x{109}]' => 'ANYOFH[0102-0104 0106-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{106}-\x{10A}]' => 'ANYOFH[0102-0104 0106-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{106}-\x{10B}]' => 'ANYOFH[0102-0104 0106-010B]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{106}-\x{10C}]' => 'ANYOFH[0102-0104 0106-010C]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{107}]' => 'ANYOFH[0102-0104 0107-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{108}]' => 'ANYOFH[0102-0104 0108-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{109}]' => 'ANYOFH[0102-0104 0108-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{10A}]' => 'ANYOFH[0102-0104 0108-010A]',
-    '[\x{102}-\x{104}\x{108}-\x{10A}\x{10B}]' => 'ANYOFH[0102-0104 0108-010B]',
-    '[\x{103}\x{102}]' => 'ANYOFH[0102-0103]',
-    '[\x{104}\x{102}]' => 'ANYOFH[0102 0104]',
-    '[\x{104}\x{102}\x{103}]' => 'ANYOFH[0102-0104]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{106}-{HIGHEST_CP}]' => 'ANYOFH[0102-0104 0106-HIGHEST_CP]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{106}-\x{107}]' => 'ANYOFHb[0102-0104 0106-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{106}-\x{108}]' => 'ANYOFHb[0102-0104 0106-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{106}-\x{109}]' => 'ANYOFHb[0102-0104 0106-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{106}-\x{10A}]' => 'ANYOFHb[0102-0104 0106-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{106}-\x{10B}]' => 'ANYOFHb[0102-0104 0106-010B]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{106}-\x{10C}]' => 'ANYOFHb[0102-0104 0106-010C]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{107}]' => 'ANYOFHb[0102-0104 0107-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{108}]' => 'ANYOFHb[0102-0104 0108-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{109}]' => 'ANYOFHb[0102-0104 0108-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{10A}]' => 'ANYOFHb[0102-0104 0108-010A]',
+    '[\x{102}-\x{104}\x{108}-\x{10A}\x{10B}]' => 'ANYOFHb[0102-0104 0108-010B]',
+    '[\x{103}\x{102}]' => 'EXACTFU_REQ8 <\x{103}>',
+    '[\x{104}\x{102}]' => 'ANYOFHb[0102 0104]',
+    '[\x{104}\x{102}\x{103}]' => 'ANYOFRb[0102-0104]',
     '[\x{106}-{INFTY}\x{104}]' => 'ANYOFH[0104 0106-INFTY]',
     '[\x{106}-{INFTY}\x{104}-{INFTY}]' => 'ANYOFH[0104-INFTY]',
-    '[\x{106}-{INFTY}\x{104}-{INFTY_minus_1}]' => 'ANYOFH[0104-INFTY]',
+    '[\x{106}-{INFTY}\x{104}-{HIGHEST_CP}]' => 'ANYOFH[0104-INFTY]',
     '[\x{106}-{INFTY}\x{104}-\x{105}]' => 'ANYOFH[0104-INFTY]',
     '[\x{106}-{INFTY}\x{104}-\x{106}]' => 'ANYOFH[0104-INFTY]',
     '[\x{106}-{INFTY}\x{104}-\x{107}]' => 'ANYOFH[0104-INFTY]',
     '[\x{106}-{INFTY}\x{105}]' => 'ANYOFH[0105-INFTY]',
     '[\x{106}-{INFTY}\x{105}-{INFTY}]' => 'ANYOFH[0105-INFTY]',
-    '[\x{106}-{INFTY}\x{105}-{INFTY_minus_1}]' => 'ANYOFH[0105-INFTY]',
+    '[\x{106}-{INFTY}\x{105}-{HIGHEST_CP}]' => 'ANYOFH[0105-INFTY]',
     '[\x{106}-{INFTY}\x{105}-\x{106}]' => 'ANYOFH[0105-INFTY]',
     '[\x{106}-{INFTY}\x{105}-\x{107}]' => 'ANYOFH[0105-INFTY]',
     '[\x{106}-{INFTY}\x{106}]' => 'ANYOFH[0106-INFTY]',
     '[\x{106}-{INFTY}\x{106}-{INFTY}]' => 'ANYOFH[0106-INFTY]',
-    '[\x{106}-{INFTY}\x{106}-{INFTY_minus_1}]' => 'ANYOFH[0106-INFTY]',
+    '[\x{106}-{INFTY}\x{106}-{HIGHEST_CP}]' => 'ANYOFH[0106-INFTY]',
     '[\x{106}-{INFTY}\x{106}-\x{107}]' => 'ANYOFH[0106-INFTY]',
     '[\x{106}-{INFTY}\x{107}]' => 'ANYOFH[0106-INFTY]',
     '[\x{106}-{INFTY}\x{107}-{INFTY}]' => 'ANYOFH[0106-INFTY]',
-    '[\x{106}-{INFTY}\x{107}-{INFTY_minus_1}]' => 'ANYOFH[0106-INFTY]',
+    '[\x{106}-{INFTY}\x{107}-{HIGHEST_CP}]' => 'ANYOFH[0106-INFTY]',
     '[\x{106}-{INFTY}\x{107}-\x{107}]' => 'ANYOFH[0106-INFTY]',
-    '[\x{10C}-{INFTY}{INFTY}]' => 'ANYOFH[010C-INFTY]',
-    '[\x{10C}-{INFTY}{INFTY_minus_1}]' => 'ANYOFH[010C-INFTY]',
-    '[\x{10C}-{INFTY}\x{00}-{INFTY_minus_1}]' => 'SANY',
+    '[\x{10C}-{INFTY}{HIGHEST_CP}]' => 'ANYOFH[010C-INFTY]',
+    '[\x{10C}-{INFTY}\x{00}-{HIGHEST_CP}]' => 'SANY',
     '[\x{10C}-{INFTY}\x{00}-{INFTY}]' => 'SANY',
     '[\x{10C}-{INFTY}\x{101}-{INFTY}]' => 'ANYOFH[0101-INFTY]',
-    '[\x{10C}-{INFTY}\x{101}-{INFTY_minus_1}]' => 'ANYOFH[0101-INFTY]',
+    '[\x{10C}-{INFTY}\x{101}-{HIGHEST_CP}]' => 'ANYOFH[0101-INFTY]',
     '[\x{10C}-{INFTY}\x{102}\x{104}]' => 'ANYOFH[0102 0104 010C-INFTY]',
-    '[\x{10C}-{INFTY}\x{102}-\x{104}{INFTY}]' => 'ANYOFH[0102-0104 010C-INFTY]',
-    '[\x{10C}-{INFTY}\x{102}-\x{104}{INFTY_minus_1}]' => 'ANYOFH[0102-0104 010C-INFTY]',
+    '[\x{10C}-{INFTY}\x{102}-\x{104}{HIGHEST_CP}]' => 'ANYOFH[0102-0104 010C-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{100}]' => 'ANYOFH[0100 0102-0104 010C-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{101}]' => 'ANYOFH[0101-0104 010C-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{101}-{INFTY}]' => 'ANYOFH[0101-INFTY]',
-    '[\x{10C}-{INFTY}\x{102}-\x{104}\x{101}-{INFTY_minus_1}]' => 'ANYOFH[0101-INFTY]',
+    '[\x{10C}-{INFTY}\x{102}-\x{104}\x{101}-{HIGHEST_CP}]' => 'ANYOFH[0101-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{102}]' => 'ANYOFH[0102-0104 010C-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{102}-{INFTY}]' => 'ANYOFH[0102-INFTY]',
-    '[\x{10C}-{INFTY}\x{102}-\x{104}\x{102}-{INFTY_minus_1}]' => 'ANYOFH[0102-INFTY]',
+    '[\x{10C}-{INFTY}\x{102}-\x{104}\x{102}-{HIGHEST_CP}]' => 'ANYOFH[0102-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{103}]' => 'ANYOFH[0102-0104 010C-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{103}-{INFTY}]' => 'ANYOFH[0102-INFTY]',
-    '[\x{10C}-{INFTY}\x{102}-\x{104}\x{103}-{INFTY_minus_1}]' => 'ANYOFH[0102-INFTY]',
+    '[\x{10C}-{INFTY}\x{102}-\x{104}\x{103}-{HIGHEST_CP}]' => 'ANYOFH[0102-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{104}]' => 'ANYOFH[0102-0104 010C-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{104}-{INFTY}]' => 'ANYOFH[0102-INFTY]',
-    '[\x{10C}-{INFTY}\x{102}-\x{104}\x{104}-{INFTY_minus_1}]' => 'ANYOFH[0102-INFTY]',
+    '[\x{10C}-{INFTY}\x{102}-\x{104}\x{104}-{HIGHEST_CP}]' => 'ANYOFH[0102-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{105}]' => 'ANYOFH[0102-0105 010C-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{105}-{INFTY}]' => 'ANYOFH[0102-INFTY]',
-    '[\x{10C}-{INFTY}\x{102}-\x{104}\x{105}-{INFTY_minus_1}]' => 'ANYOFH[0102-INFTY]',
+    '[\x{10C}-{INFTY}\x{102}-\x{104}\x{105}-{HIGHEST_CP}]' => 'ANYOFH[0102-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{106}]' => 'ANYOFH[0102-0104 0106 010C-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{106}-{INFTY}]' => 'ANYOFH[0102-0104 0106-INFTY]',
-    '[\x{10C}-{INFTY}\x{102}-\x{104}\x{106}-{INFTY_minus_1}]' => 'ANYOFH[0102-0104 0106-INFTY]',
-    '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}{INFTY}]' => 'ANYOFH[0102-0104 0108-010A 010C-INFTY]',
-    '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}{INFTY_minus_1}]' => 'ANYOFH[0102-0104 0108-010A 010C-INFTY]',
+    '[\x{10C}-{INFTY}\x{102}-\x{104}\x{106}-{HIGHEST_CP}]' => 'ANYOFH[0102-0104 0106-INFTY]',
+    '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}{HIGHEST_CP}]' => 'ANYOFH[0102-0104 0108-010A 010C-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{101}]' => 'ANYOFH[0101-0104 0108-010A 010C-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{101}-{INFTY}]' => 'ANYOFH[0101-INFTY]',
-    '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{101}-{INFTY_minus_1}]' => 'ANYOFH[0101-INFTY]',
+    '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{101}-{HIGHEST_CP}]' => 'ANYOFH[0101-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{101}-\x{102}]' => 'ANYOFH[0101-0104 0108-010A 010C-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{101}-\x{103}]' => 'ANYOFH[0101-0104 0108-010A 010C-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{101}-\x{104}]' => 'ANYOFH[0101-0104 0108-010A 010C-INFTY]',
@@ -645,7 +644,7 @@ my @tests = (
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{101}-\x{10B}]' => 'ANYOFH[0101-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{102}]' => 'ANYOFH[0102-0104 0108-010A 010C-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{102}-{INFTY}]' => 'ANYOFH[0102-INFTY]',
-    '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{102}-{INFTY_minus_1}]' => 'ANYOFH[0102-INFTY]',
+    '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{102}-{HIGHEST_CP}]' => 'ANYOFH[0102-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{102}-\x{102}]' => 'ANYOFH[0102-0104 0108-010A 010C-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{102}-\x{103}]' => 'ANYOFH[0102-0104 0108-010A 010C-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{102}-\x{104}]' => 'ANYOFH[0102-0104 0108-010A 010C-INFTY]',
@@ -659,7 +658,7 @@ my @tests = (
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{102}-\x{10C}]' => 'ANYOFH[0102-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{103}]' => 'ANYOFH[0102-0104 0108-010A 010C-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{103}-{INFTY}]' => 'ANYOFH[0102-INFTY]',
-    '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{103}-{INFTY_minus_1}]' => 'ANYOFH[0102-INFTY]',
+    '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{103}-{HIGHEST_CP}]' => 'ANYOFH[0102-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{103}-\x{104}]' => 'ANYOFH[0102-0104 0108-010A 010C-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{103}-\x{105}]' => 'ANYOFH[0102-0105 0108-010A 010C-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{103}-\x{106}]' => 'ANYOFH[0102-0106 0108-010A 010C-INFTY]',
@@ -671,7 +670,7 @@ my @tests = (
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{103}-\x{10C}]' => 'ANYOFH[0102-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{104}]' => 'ANYOFH[0102-0104 0108-010A 010C-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{104}-{INFTY}]' => 'ANYOFH[0102-INFTY]',
-    '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{104}-{INFTY_minus_1}]' => 'ANYOFH[0102-INFTY]',
+    '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{104}-{HIGHEST_CP}]' => 'ANYOFH[0102-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{104}-\x{105}]' => 'ANYOFH[0102-0105 0108-010A 010C-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{104}-\x{106}]' => 'ANYOFH[0102-0106 0108-010A 010C-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{104}-\x{107}]' => 'ANYOFH[0102-010A 010C-INFTY]',
@@ -682,7 +681,7 @@ my @tests = (
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{104}-\x{10C}]' => 'ANYOFH[0102-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{105}]' => 'ANYOFH[0102-0105 0108-010A 010C-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{105}-{INFTY}]' => 'ANYOFH[0102-INFTY]',
-    '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{105}-{INFTY_minus_1}]' => 'ANYOFH[0102-INFTY]',
+    '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{105}-{HIGHEST_CP}]' => 'ANYOFH[0102-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{105}-\x{106}]' => 'ANYOFH[0102-0106 0108-010A 010C-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{105}-\x{107}]' => 'ANYOFH[0102-010A 010C-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{105}-\x{108}]' => 'ANYOFH[0102-010A 010C-INFTY]',
@@ -692,7 +691,7 @@ my @tests = (
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{105}-\x{10C}]' => 'ANYOFH[0102-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{106}]' => 'ANYOFH[0102-0104 0106 0108-010A 010C-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{106}-{INFTY}]' => 'ANYOFH[0102-0104 0106-INFTY]',
-    '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{106}-{INFTY_minus_1}]' => 'ANYOFH[0102-0104 0106-INFTY]',
+    '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{106}-{HIGHEST_CP}]' => 'ANYOFH[0102-0104 0106-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{106}-\x{107}]' => 'ANYOFH[0102-0104 0106-010A 010C-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{106}-\x{108}]' => 'ANYOFH[0102-0104 0106-010A 010C-INFTY]',
     '[\x{10C}-{INFTY}\x{102}-\x{104}\x{108}-\x{10A}\x{106}-\x{109}]' => 'ANYOFH[0102-0104 0106-010A 010C-INFTY]',
@@ -707,21 +706,20 @@ my @tests = (
     '[\x{10C}-{INFTY}\x{103}\x{102}]' => 'ANYOFH[0102-0103 010C-INFTY]',
     '[\x{10C}-{INFTY}\x{104}\x{102}]' => 'ANYOFH[0102 0104 010C-INFTY]',
     '[\x{10C}-{INFTY}\x{104}\x{102}\x{103}]' => 'ANYOFH[0102-0104 010C-INFTY]',
-    '[{INFTY_minus_1}]' => 'ANYOFH[INFTY_minus_1]',
-    '[{INFTY}]' => 'ANYOFH[INFTY-INFTY]',
+    '[{HIGHEST_CP}]' => 'EXACT_REQ8 <\x{HIGHEST_CP}>',
 
-    '(?8)(?i)[\x{100}]' => 'EXACTFU_ONLY8 <\x{101}>',
-    '(?8)(?i)[\x{399}]' => 'EXACTFU_ONLY8 <\x{3b9}>',
-    '(?8)(?i)[\x{345}\x{399}\x{3B9}\x{1FBE}]' => 'EXACTFU_ONLY8 <\x{3b9}>',
-    '(?i)[\x{2b9}]' => 'ANYOFH[02B9]',           # Doesn't participate in a fold
-    '(?8)(?i)[\x{2b9}]' => 'EXACT_ONLY8 <\x{2b9}>',
-    '(?i)[\x{2bc}]' => 'EXACTFU_ONLY8 <\x{2bc}>', # Part of a multi-char fold, ASCII component
-    '(?i)[\x{390}]' => 'EXACTFU_ONLY8 <\x{3b9}\x{308}\x{301}>', # Part of a multi-char fold, no ASCII component
+    '(?8)(?i)[\x{410}]' => 'EXACTFU_REQ8 <\x{430}>',
+    '(?8)(?i)[\x{399}]' => 'EXACTFU_REQ8 <\x{3b9}>',
+    '(?8)(?i)[\x{345}\x{399}\x{3B9}\x{1FBE}]' => 'EXACTFU_REQ8 <\x{3b9}>',
+    '(?i)[\x{2b9}]' => 'EXACT_REQ8 <\x{2b9}>',           # Doesn't participate in a fold
+    '(?8)(?i)[\x{2b9}]' => 'EXACT_REQ8 <\x{2b9}>',
+    '(?i)[\x{2bc}]' => 'EXACTFU_REQ8 <\x{2bc}>', # Part of a multi-char fold, ASCII component
+    '(?i)[\x{390}]' => 'EXACTFU_REQ8 <\x{3b9}\x{308}\x{301}>', # Part of a multi-char fold, no ASCII component
 
     '(?i)[\x{1E9E}]' => 'EXACTFU <ss>',
     '(?iaa)[\x{1E9E}]' => 'EXACTFAA <\x{17f}\x{17f}>',
     '(?i)[\x{FB00}]' => 'EXACTFU <ff>',
-    '(?iaa)[\x{FB00}]' => 'ANYOFH[FB00]',
+    '(?iaa)[\x{FB00}]' => 'EXACT_REQ8 <\x{fb00}>',
     '(?i)[\x{FB00}]' => 'EXACTFU <ff>',
     '(?i)[\x{FB01}]' => 'EXACTFU <fi>',
     '(?i)[\x{FB02}]' => 'EXACTFU <fl>',
@@ -731,11 +729,11 @@ my @tests = (
     '(?i)[\x{FB06}]' => 'EXACTFU <st>',
 
     '[a][b]' => 'EXACT <ab>',
-    '[a]\x{100}' => 'EXACT_ONLY8 <a\x{100}>',
-    '(?8)[\x{100}]a' => 'EXACT_ONLY8 <\x{100}a>',
+    '[a]\x{100}' => 'EXACT_REQ8 <a\x{100}>',
+    '(?8)[\x{100}]a' => 'EXACT_REQ8 <\x{100}a>',
     '(?i)[b][c]' => 'EXACTFU <bc>',
-    '(?i)[b]\x{100}' => 'EXACTFU_ONLY8 <b\x{101}>',
-    '(?8)(?i)[\x{100}]b' => 'EXACTFU_ONLY8 <\x{101}b>',
+    '(?i)[b]\x{100}' => 'EXACTFU_REQ8 <b\x{101}>',
+    '(?8)(?i)[\x{100}]b' => 'EXACTFU_REQ8 <\x{101}b>',
     '(?i)b[s]' => 'EXACTFU <bs>',
     '(?i)b[s]c' => 'EXACTFU <bsc>',
     '(?i)bs[s]c' => 'EXACTF <bss>',  # The c goes into a 2nd node
@@ -785,6 +783,7 @@ my @single_chars_to_test =
     "\x{106}",
     "\x{107}",
     "\x{108}",
+    "\x{2029}",
 );
 
 my @single_tests;
@@ -820,29 +819,40 @@ for my $char (@single_chars_to_test) {
                     push @single_tests, get_compiled("$upgrade$modifiers\\x{$hex}");
                 }
                 else {
-                    my $interior = "";
-                    my @list = $cp;
+                    use feature 'fc';
+
+                    my %list = ( sprintf("%X", $cp) => 1 );
                     if ($fold) {
-                        if (lc $char ne $char) {
-                            push @list, ord lc $char;
-                        }
-                        elsif (uc $char ne $char) {
-                            push @list, ord uc $char;
+                        for my $op (qw(fc lc uc)) {
+                            my $result = eval "$op(\"$char\")";
+                            $list{sprintf "%X", ord $result} = 1;
                         }
                     }
-                    @list = sort { $a <=> $b } @list;
-                    if (@list == 1) {
-                        $interior = sprintf "%04X", $list[0];
-                    }
-                    elsif (@list == 2) {
-                        my $separator = ($list[1] == $list[0] + 1) ? '-' : ', ';
-                        $interior = sprintf "%04X$separator%04X", $list[0], $list[1];
+
+                    my $mod_cp = $cp;
+                    my $op;
+
+                    if (! $fold || scalar keys %list == 1) {
+                        $op = ($charset eq 'l')
+                                ? 'EXACTL'
+                                : ($cp < 256)
+                                ? 'EXACT'
+                                : 'EXACT_REQ8';
                     }
                     else {
-                        die join ", ", @list;
+                        $op = ($charset eq 'aa')
+                        ? 'EXACTFAA'
+                        : ($charset eq 'l')
+                            ? (($cp < 256)
+                            ? 'EXACTFL'
+                            : 'EXACTFLU8')
+                            : ($cp < 256)
+                            ? 'EXACTFU'
+                            : 'EXACTFU_REQ8';
+                        $mod_cp = ord fc $char;
                     }
-                    my $anyof = ($charset eq "l") ? "ANYOFL" : "ANYOFH";
-                    push @single_tests, "$anyof\[$interior\]";
+
+                    push @single_tests, sprintf "$op <\\x{%X}>", $mod_cp;
                 }
             }
         }
@@ -867,18 +877,17 @@ while (defined (my $test = shift @tests)) {
         skip("test not ported to EBCDIC", 1) if $skip_ebcdic;
 
         my $display_expected = $expected
-                                  =~ s/ INFTY_minus_1 /$next_highest_cp/xgr;
+                                        =~ s/ HIGHEST_CP /$highest_cp_string/xgr;
         my $test_name = "Verify compilation of $test displays as"
-                      . " $display_expected";
+                      . " $expected";
 
         my $result = get_compiled($test);
-        if ($expected =~ / ^ ANYOFH /x) {
+        if ($expected =~ / ^ ANYOF[HR] /x) {
             like($result, qr/ ^ \Q$expected\E (?:\Q (First UTF-8 byte=\x\E
-                              [[:xdigit:]]{2}\) )? $ /x, $test_name);
+                              [[:xdigit:]]{2} )? /x, $test_name);
         }
         else {
-            is($result, $expected,
-               "Verify compilation of $test displays as $test_name");
+            is($result, $expected, $test_name);
         }
     }
 }
diff --git a/gnu/usr.bin/perl/t/re/begin-once.t b/gnu/usr.bin/perl/t/re/begin-once.t
new file mode 100644 (file)
index 0000000..e41d431
--- /dev/null
@@ -0,0 +1,28 @@
+#!./perl
+
+use strict;
+use warnings;
+
+sub freeze_at_begin {
+    my ($var) = @_;
+
+    return $var =~ m{$var}o;
+}
+
+BEGIN {
+    chdir 't' if -d 't';
+    require './test.pl';
+
+    freeze_at_begin('frozen');
+}
+
+plan tests => 2;
+
+ok( !freeze_at_begin('not'),   "/o done at begin is preserved and a new string does not match" );
+ok( freeze_at_begin('frozen'), "/o done at begin is preserved and the original string matches" );
+
+1;
+
+#
+# ex: set ts=8 sts=4 sw=4 et:
+#
index 885ef0f..979af25 100644 (file)
@@ -7,7 +7,6 @@ print("1..0 # Skip No XS::APItest under miniperl\n"), exit 0 if
   !defined &DynaLoader::boot_DynaLoader;
 
 $no_null = 1;
-require XS::APItest;
 for $file ('./re/regexp.t', './t/re/regexp.t', ':re:regexp.t') {
   if (-r $file) {
     do $file or die $@;
index 4b4231c..768c609 100644 (file)
@@ -29,7 +29,7 @@ do '../lib/unicore/TestProp.pl';
 # Since TestProp.pl explicitly exits, we will only get here if it
 # could not load.
 if (defined &DynaLoader::boot_DynaLoader # not miniperl
- || eval 'require "unicore/Heavy.pl"'    # or tables are built
+ || eval 'require "unicore/UCD.pl"'    # or tables are built
 ) {
     die "Could not run lib/unicore/TestProp.pl: ", $@||$!;
 }
index 8895ae9..1de337e 100644 (file)
@@ -29,7 +29,7 @@ do '../lib/unicore/TestProp.pl';
 # Since TestProp.pl explicitly exits, we will only get here if it
 # could not load.
 if (defined &DynaLoader::boot_DynaLoader # not miniperl
- || eval 'require "unicore/Heavy.pl"'    # or tables are built
+ || eval 'require "unicore/UCD.pl"'    # or tables are built
 ) {
     die "Could not run lib/unicore/TestProp.pl: ", $@||$!;
 }
index c866407..54fd781 100644 (file)
@@ -29,7 +29,7 @@ do '../lib/unicore/TestProp.pl';
 # Since TestProp.pl explicitly exits, we will only get here if it
 # could not load.
 if (defined &DynaLoader::boot_DynaLoader # not miniperl
- || eval 'require "unicore/Heavy.pl"'    # or tables are built
+ || eval 'require "unicore/UCD.pl"'    # or tables are built
 ) {
     die "Could not run lib/unicore/TestProp.pl: ", $@||$!;
 }
index 7689df0..b1d206d 100644 (file)
@@ -29,7 +29,7 @@ do '../lib/unicore/TestProp.pl';
 # Since TestProp.pl explicitly exits, we will only get here if it
 # could not load.
 if (defined &DynaLoader::boot_DynaLoader # not miniperl
- || eval 'require "unicore/Heavy.pl"'    # or tables are built
+ || eval 'require "unicore/UCD.pl"'    # or tables are built
 ) {
     die "Could not run lib/unicore/TestProp.pl: ", $@||$!;
 }
index 0573377..68bbaf2 100644 (file)
@@ -29,7 +29,7 @@ do '../lib/unicore/TestProp.pl';
 # Since TestProp.pl explicitly exits, we will only get here if it
 # could not load.
 if (defined &DynaLoader::boot_DynaLoader # not miniperl
- || eval 'require "unicore/Heavy.pl"'    # or tables are built
+ || eval 'require "unicore/UCD.pl"'    # or tables are built
 ) {
     die "Could not run lib/unicore/TestProp.pl: ", $@||$!;
 }
index 74e6c45..6a3dabf 100644 (file)
@@ -29,7 +29,7 @@ do '../lib/unicore/TestProp.pl';
 # Since TestProp.pl explicitly exits, we will only get here if it
 # could not load.
 if (defined &DynaLoader::boot_DynaLoader # not miniperl
- || eval 'require "unicore/Heavy.pl"'    # or tables are built
+ || eval 'require "unicore/UCD.pl"'    # or tables are built
 ) {
     die "Could not run lib/unicore/TestProp.pl: ", $@||$!;
 }
index fe67954..97c8035 100644 (file)
@@ -29,7 +29,7 @@ do '../lib/unicore/TestProp.pl';
 # Since TestProp.pl explicitly exits, we will only get here if it
 # could not load.
 if (defined &DynaLoader::boot_DynaLoader # not miniperl
- || eval 'require "unicore/Heavy.pl"'    # or tables are built
+ || eval 'require "unicore/UCD.pl"'    # or tables are built
 ) {
     die "Could not run lib/unicore/TestProp.pl: ", $@||$!;
 }
index a9b412a..52d5036 100644 (file)
@@ -29,7 +29,7 @@ do '../lib/unicore/TestProp.pl';
 # Since TestProp.pl explicitly exits, we will only get here if it
 # could not load.
 if (defined &DynaLoader::boot_DynaLoader # not miniperl
- || eval 'require "unicore/Heavy.pl"'    # or tables are built
+ || eval 'require "unicore/UCD.pl"'    # or tables are built
 ) {
     die "Could not run lib/unicore/TestProp.pl: ", $@||$!;
 }
index c9b469b..d58aafa 100644 (file)
@@ -29,7 +29,7 @@ do '../lib/unicore/TestProp.pl';
 # Since TestProp.pl explicitly exits, we will only get here if it
 # could not load.
 if (defined &DynaLoader::boot_DynaLoader # not miniperl
- || eval 'require "unicore/Heavy.pl"'    # or tables are built
+ || eval 'require "unicore/UCD.pl"'    # or tables are built
 ) {
     die "Could not run lib/unicore/TestProp.pl: ", $@||$!;
 }
index 0d0e1ed..0b78d35 100644 (file)
@@ -29,7 +29,7 @@ do '../lib/unicore/TestProp.pl';
 # Since TestProp.pl explicitly exits, we will only get here if it
 # could not load.
 if (defined &DynaLoader::boot_DynaLoader # not miniperl
- || eval 'require "unicore/Heavy.pl"'    # or tables are built
+ || eval 'require "unicore/UCD.pl"'    # or tables are built
 ) {
     die "Could not run lib/unicore/TestProp.pl: ", $@||$!;
 }
index 8b629ae..a36d8bc 100644 (file)
@@ -4,18 +4,15 @@
  * Any changes made here will be lost!
  */
 
-/* The precision to use in "%.*e" formats */
-#define PL_E_FORMAT_PRECISION 2
-
 #define MPH_VALt I16
 
 /*
-rows: 7016
+rows: 7264
 seed: 1348825708
-full length of keys: 98325
-blob length: 9964
-ref length: 56128
-data size: 66092 (%67.22)
+full length of keys: 101931
+blob length: 10351
+ref length: 58112
+data size: 68463 (%67.17)
 */
 
 STATIC const unsigned char mph_blob[] =
@@ -29,151 +26,157 @@ STATIC const unsigned char mph_blob[] =
     "icsymbolsandpunctuationmathematicalalphanumericsymbolscjkunifiedi"
     "deographsextensionacjkunifiedideographsextensionbcjkunifiedideogr"
     "aphsextensionccjkunifiedideographsextensiondcjkunifiedideographse"
-    "xtensionecjkunifiedideographsextensionfcuneiformnumbersandpunctua"
-    "tionenclosedalphanumericsupplementsymbolsandpictographsextendedae"
-    "nclosedideographicsupplementmiscellaneoussymbolsandarrowsphonetic"
-    "extensionssupplementsupplementaryprivateuseareaasupplementarypriv"
-    "ateuseareabvariationselectorssupplementalphabeticpresentationform"
-    "sancientgreekmusicalnotationenclosedcjklettersandmonthsopticalcha"
-    "racterrecognitionprependedconcatenationmark=changeswhennfkccasefo"
-    "lded=conditionaljapanesestarterdefaultignorablecodepoint=halfwidt"
-    "handfullwidthformskatakanaphoneticextensionsconsonantinitialpostf"
-    "ixedfullcompositionexclusion=superscriptsandsubscriptssymbolsandp"
-    "ictographsextaarabicpresentationformsaarabicpresentationformsbcan"
-    "onicalcombiningclass=cjksymbolsandpunctuationcombiningmarksforsym"
-    "bolsconsonantsucceedingrephahighprivateusesurrogatesindicposition"
-    "alcategory=supsymbolsandpictographsbyzantinemusicalsymbolsconsona"
-    "ntprecedingrephageometricshapesextendedhangulcompatibilityjamolat"
-    "inextendedadditionalshorthandformatcontrolssupplementalpunctuatio"
-    "nbidipairedbrackettype=changeswhencasefolded=changeswhencasemappe"
-    "d=changeswhenlowercased=changeswhentitlecased=changeswhenuppercas"
-    "ed=cjkcompatideographssupcommonindicnumberformsdiacriticalsforsym"
-    "bolsearlydynasticcuneiformindicsyllabiccategory=logicalorderexcep"
-    "tion=miscellaneoustechnicalnoncharactercodepoint=spacingmodifierl"
-    "etterstransportandmapsymbolscjkcompatibilityformscjkradicalssuppl"
-    "ementcyrillicsupplementarygraphemeclusterbreak=hanifirohingyakinn"
-    "ayainscriptionalparthianmeeteimayekextensionspopdirectionalisolat"
-    "esinhalaarchaicnumbersyijinghexagramsymbolsanatolianhieroglyphsco"
-    "nnectorpunctuationconsonantplaceholderconsonantwithstackerglagoli"
-    "ticsupplementinscriptionalpahlavilefttorightembeddingnyiakengpuac"
-    "huehmongpopdirectionalformatrighttoleftembeddingterminalpunctuati"
-    "on=topandbottomandrightverticalorientation=ancientgreeknumbersbra"
-    "hmijoiningnumberburushaskiyehbarreeconsonantheadlettercountingrod"
-    "numeralsegyptianhieroglyphsenclosedalphanumsuphanguljamoextendeda"
-    "hanguljamoextendedbhangulsyllabletype=idstrinaryoperator=lefttori"
-    "ghtoverridemeroitichieroglyphsmodifiertonelettersmongoliansupplem"
-    "entottomansiyaqnumbersrighttoleftoverridesundanesesupplementsuppl"
-    "ementalarrowsasupplementalarrowsbsupplementalarrowscattachedabove"
-    "rightcherokeesupplementcombininghalfmarksconsonantsubjoinedcoptic"
-    "epactnumbersdecompositiontype=devanagariextendedethiopicsupplemen"
-    "teuropeanterminatorfirststrongisolategeneralpunctuationgeorgiansu"
-    "pplementidsbinaryoperator=initialpunctuationlatinextadditionallef"
-    "ttorightisolateornamentaldingbatsparagraphseparatorpatternwhitesp"
-    "ace=regionalindicator=righttoleftisolateruminumeralsymbolssmallka"
-    "naextensiontaixuanjingsymbolstopandleftandrighttransformedrotated"
-    "transformeduprightvariationselector=alchemicalsymbolsattachedbelo"
-    "wleftcanadiansyllabicscaucasianalbanianconsonantprefixedcyrillice"
-    "xtendedacyrillicextendedbcyrillicextendedcethiopicextendedaeurope"
-    "anseparatorindicsiyaqnumbersletterlikesymbolsmanichaeandhamedhman"
-    "ichaeanhundredmanichaeanthamedhscriptextensions=sentenceterminal="
-    "smallformvariantssuttonsignwritingunifiedideograph=arabicsuppleme"
-    "ntbopomofoextendedcantillationmarkcloseparenthesisclosepunctuatio"
-    "ncypriotsyllabaryfinalpunctuationgeneralcategory=georgianextended"
-    "halfandfullformshanifirohingyapahighpusurrogatesinvisiblestackerl"
-    "atin1supplementlinearbideogramslinearbsyllabarymanichaeandalethma"
-    "nichaeanlamedhmanichaeansamekhmanichaeantwentymiscmathsymbolsamis"
-    "cmathsymbolsbmyanmarextendedamyanmarextendedbotherpunctuationsegm"
-    "entseparatorsupmathoperatorssyllablemodifiersyriacsupplementtangu"
-    "tcomponentsvowelindependentarabicextendedabamumsupplementboundary"
-    "neutralbraillepatternscommonseparatorconsonantkillerconsonantmedi"
-    "alcontingentbreakcontrolpicturescurrencysymbolsdashpunctuationdia"
-    "criticalsextdiacriticalssupeastasianwidth=graphemeextend=hangulsy"
-    "llablesimperialaramaiclowercaselettermanichaeanalephmanichaeangim"
-    "elmanichaeansadhemanichaeanzayinmeroiticcursivemiscpictographsmod"
-    "ifyingletternfkcquickcheck=nfkdquickcheck=oldnortharabianoldsouth"
-    "arabianopenpunctuationregistershiftertamilsupplementtitlecaselett"
-    "eruppercaselettervedicextensionsvisualorderleftzanabazarsquareanc"
-    "ientsymbolsasciihexdigit=carriagereturncaseignorable=cjkcompatfor"
-    "mscomplexcontextconsonantfinaleuropeannumbergeminationmarkgreekan"
-    "dcoptichamzaonhehgoalhighsurrogateskanasupplementkangxiradicalsla"
-    "tinextendedblatinextendedclatinextendeddlatinextendedemandatorybr"
-    "eakmanichaeanayinmanichaeanbethmanichaeanfivemanichaeanhethmanich"
-    "aeankaphmanichaeanqophmanichaeanreshmanichaeantethmanichaeanyodhm"
-    "odifiersymbolnfcquickcheck=nfdquickcheck=nojoininggroupnonspacing"
-    "markpatternsyntax=phoneticextsuppostfixnumericpsalterpahlaviquota"
-    "tionmark=sentencebreak=spaceseparatorsuppunctuationtehmarbutagoal"
-    "voweldependent1000000000000aegeannumbersbidimirrored=blockelement"
-    "sbottomandleftconsonantdeaddecimalnumberenclosingmarkgraphemebase"
-    "=greekextendediotasubscriptipaextensionsjoininggroup=kanaextended"
-    "alineseparatorlowsurrogatesmalayalamlllamalayalamnnnamanichaeanme"
-    "mmanichaeannunmanichaeanonemanichaeantawmanichaeantenmanichaeanwa"
-    "wmayannumeralsmisctechnicalnotapplicablenumericvalue=prefixnumeri"
-    "cverticalformsalphabeticpfarabicletterarabicnumberbidicontrol=bre"
-    "aksymbolschesssymbolscyrillicextacyrillicextbcyrillicextcethiopic"
-    "extaextendnumletfinalsemkathglueafterzwjgunjalagondihebrewletteri"
-    "deographic=infixnumericjoincontrol=joiningtype=khmersymbolsletter"
-    "numbermahjongtilesmalayalambhamalayalamllamalayalamngamalayalamnn"
-    "amalayalamnyamalayalamssamalayalamttamanichaeanpemasaramgondimath"
-    "alphanummendekikakuinoncanonicalnotreorderednumberjoinernumericty"
-    "pe=oldhungarianotherneutralphaistosdiscplayingcardsrightjoiningtr"
-    "ailingjamoxidcontinue=africannoonalphabetic=breakbeforecasedlette"
-    "rdeprecated=dominotilesdoubleabovedoublebelowdoublequotedualjoini"
-    "ngexclamationinseparableinseperablejoincausingkanavoicingkatakana"
-    "extleadingjamoleftjoininglvtsyllablemalayalamjamalayalamramedefai"
-    "drinmiscsymbolsmyanmarextamyanmarextbnandinagariotherletterothern"
-    "umberothersymbolpahawhhmongrohingyayehsinglequotesoftdotted=soras"
-    "ompengstraightwawsuperandsubsylotinagritopandrighttransparentyehw"
+    "xtensionecjkunifiedideographsextensionfcjkunifiedideographsextens"
+    "iongcuneiformnumbersandpunctuationenclosedalphanumericsupplements"
+    "ymbolsandpictographsextendedaenclosedideographicsupplementmiscell"
+    "aneoussymbolsandarrowsphoneticextensionssupplementsupplementarypr"
+    "ivateuseareaasupplementaryprivateuseareabvariationselectorssupple"
+    "mentalphabeticpresentationformsancientgreekmusicalnotationenclose"
+    "dcjklettersandmonthsopticalcharacterrecognitionprependedconcatena"
+    "tionmark=changeswhennfkccasefolded=conditionaljapanesestarterdefa"
+    "ultignorablecodepoint=halfwidthandfullwidthformskatakanaphonetice"
+    "xtensionsconsonantinitialpostfixedfullcompositionexclusion=supers"
+    "criptsandsubscriptssymbolsandpictographsextasymbolsforlegacycompu"
+    "tingarabicpresentationformsaarabicpresentationformsbcanonicalcomb"
+    "iningclass=cjksymbolsandpunctuationcombiningmarksforsymbolsconson"
+    "antsucceedingrephahighprivateusesurrogatesindicpositionalcategory"
+    "=supsymbolsandpictographsbyzantinemusicalsymbolsconsonantprecedin"
+    "grephageometricshapesextendedhangulcompatibilityjamolatinextended"
+    "additionalshorthandformatcontrolssupplementalpunctuationbidipaire"
+    "dbrackettype=changeswhencasefolded=changeswhencasemapped=changesw"
+    "henlowercased=changeswhentitlecased=changeswhenuppercased=cjkcomp"
+    "atideographssupcommonindicnumberformsdiacriticalsforsymbolsearlyd"
+    "ynasticcuneiformindicsyllabiccategory=logicalorderexception=misce"
+    "llaneoustechnicalnoncharactercodepoint=spacingmodifierletterstran"
+    "sportandmapsymbolscjkcompatibilityformscjkradicalssupplementcyril"
+    "licsupplementaryextendedpictographic=graphemeclusterbreak=hanifir"
+    "ohingyakinnayainscriptionalparthianmeeteimayekextensionspopdirect"
+    "ionalisolatesinhalaarchaicnumbersyijinghexagramsymbolsanatolianhi"
+    "eroglyphsconnectorpunctuationconsonantplaceholderconsonantwithsta"
+    "ckerglagoliticsupplementinscriptionalpahlavilefttorightembeddingn"
+    "yiakengpuachuehmongpopdirectionalformatrighttoleftembeddingtermin"
+    "alpunctuation=topandbottomandrightverticalorientation=ancientgree"
+    "knumbersbrahmijoiningnumberburushaskiyehbarreeconsonantheadletter"
+    "countingrodnumeralsegyptianhieroglyphsenclosedalphanumsuphangulja"
+    "moextendedahanguljamoextendedbhangulsyllabletype=idstrinaryoperat"
+    "or=lefttorightoverridemeroitichieroglyphsmodifiertonelettersmongo"
+    "liansupplementottomansiyaqnumbersrighttoleftoverridesundanesesupp"
+    "lementsupplementalarrowsasupplementalarrowsbsupplementalarrowscto"
+    "pandbottomandleftattachedaboverightcherokeesupplementcombininghal"
+    "fmarksconsonantsubjoinedcopticepactnumbersdecompositiontype=devan"
+    "agariextendedemojimodifierbase=emojipresentation=ethiopicsuppleme"
+    "nteuropeanterminatorfirststrongisolategeneralpunctuationgeorgians"
+    "upplementidsbinaryoperator=initialpunctuationlatinextadditionalle"
+    "fttorightisolateornamentaldingbatsparagraphseparatorpatternwhites"
+    "pace=regionalindicator=righttoleftisolateruminumeralsymbolssmallk"
+    "anaextensiontaixuanjingsymbolstopandleftandrighttransformedrotate"
+    "dtransformeduprightvariationselector=alchemicalsymbolsattachedbel"
+    "owleftcanadiansyllabicscaucasianalbanianconsonantprefixedcyrillic"
+    "extendedacyrillicextendedbcyrillicextendedcethiopicextendedaeurop"
+    "eanseparatoridentifierstatus=indicsiyaqnumberskhitansmallscriptle"
+    "tterlikesymbolsmanichaeandhamedhmanichaeanhundredmanichaeanthamed"
+    "hscriptextensions=sentenceterminal=smallformvariantssuttonsignwri"
+    "tingunifiedideograph=arabicsupplementbopomofoextendedcantillation"
+    "markcloseparenthesisclosepunctuationcypriotsyllabaryfinalpunctuat"
+    "iongeneralcategory=georgianextendedhalfandfullformshanifirohingya"
+    "pahighpusurrogatesinvisiblestackerlatin1supplementlinearbideogram"
+    "slinearbsyllabarymanichaeandalethmanichaeanlamedhmanichaeansamekh"
+    "manichaeantwentymiscmathsymbolsamiscmathsymbolsbmyanmarextendedam"
+    "yanmarextendedbotherpunctuationsegmentseparatorsupmathoperatorssy"
+    "llablemodifiersyriacsupplementtangutcomponentstangutsupplementvow"
+    "elindependentarabicextendedabamumsupplementboundaryneutralbraille"
+    "patternscommonseparatorconsonantkillerconsonantmedialcontingentbr"
+    "eakcontrolpicturescurrencysymbolsdashpunctuationdiacriticalsextdi"
+    "acriticalssupeastasianwidth=emojicomponent=graphemeextend=hanguls"
+    "yllablesidentifiertype=imperialaramaiclowercaselettermanichaeanal"
+    "ephmanichaeangimelmanichaeansadhemanichaeanzayinmeroiticcursivemi"
+    "scpictographsmodifyingletternfkcquickcheck=nfkdquickcheck=oldnort"
+    "harabianoldsoutharabianopenpunctuationregistershiftertamilsupplem"
+    "enttitlecaseletteruppercaselettervedicextensionsvisualorderleftza"
+    "nabazarsquareancientsymbolsasciihexdigit=carriagereturncaseignora"
+    "ble=cjkcompatformscomplexcontextconsonantfinalemojimodifier=europ"
+    "eannumbergeminationmarkgreekandcoptichamzaonhehgoalhighsurrogates"
+    "kanasupplementkangxiradicalslatinextendedblatinextendedclatinexte"
+    "ndeddlatinextendedelisusupplementmandatorybreakmanichaeanayinmani"
+    "chaeanbethmanichaeanfivemanichaeanhethmanichaeankaphmanichaeanqop"
+    "hmanichaeanreshmanichaeantethmanichaeanyodhmodifiersymbolnfcquick"
+    "check=nfdquickcheck=nojoininggroupnonspacingmarkpatternsyntax=pho"
+    "neticextsuppostfixnumericpsalterpahlaviquotationmark=sentencebrea"
+    "k=spaceseparatorsuppunctuationtehmarbutagoalvoweldependent1000000"
+    "000000aegeannumbersbidimirrored=blockelementsconsonantdeaddecimal"
+    "numberenclosingmarkgraphemebase=greekextendediotasubscriptipaexte"
+    "nsionsjoininggroup=kanaextendedalineseparatorlowsurrogatesmalayal"
+    "amlllamalayalamnnnamanichaeanmemmanichaeannunmanichaeanonemanicha"
+    "eantawmanichaeantenmanichaeanwawmayannumeralsmisctechnicalnotappl"
+    "icablenumericvalue=prefixnumericverticalformsalphabeticpfarabicle"
+    "tterarabicnumberbidicontrol=breaksymbolschesssymbolscyrillicextac"
+    "yrillicextbcyrillicextcethiopicextaextendnumletfinalsemkathglueaf"
+    "terzwjgunjalagondihebrewletterideographic=infixnumericjoincontrol"
+    "=joiningtype=khmersymbolsletternumbermahjongtilesmalayalambhamala"
+    "yalamllamalayalamngamalayalamnnamalayalamnyamalayalamssamalayalam"
+    "ttamanichaeanpemasaramgondimathalphanummendekikakuinoncanonicalno"
+    "tcharacternotreorderednumberjoinernumerictype=oldhungarianotherne"
+    "utralphaistosdiscplayingcardsrightjoiningtrailingjamoxidcontinue="
+    "africannoonalphabetic=breakbeforecasedletterdeprecated=dominotile"
+    "sdoubleabovedoublebelowdoublequotedualjoiningexclamationinseparab"
+    "leinseperablejoincausingkanavoicingkatakanaextleadingjamoleftjoin"
+    "inglvtsyllablemalayalamjamalayalamramedefaidrinmiscsymbolsmyanmar"
+    "extamyanmarextbnandinagariotherletterothernumberothersymbolpahawh"
+    "hmongrecommendedrohingyayehsinglequotesoftdotted=sorasompengstrai"
+    "ghtwawsuperandsubsylotinagritopandrighttransparentuncommonuseyehw"
     "ithtailyisyllablesafricanfehafricanqafarabicextabasiclatinbelowri"
-    "ghtbidiclass=boxdrawingbreakaftercjkstrokescompatjamodalathrishdi"
-    "acritic=kharoshthiknottedhehlinebreak=lowercase=lvsyllablemiscarr"
-    "owsnonjoiningnonstarteroldpersianoldsogdianoverstruckphoenicianpr"
-    "esentin=purekillerreversedpesaurashtrasmallformssuparrowsasuparro"
-    "wsbsuparrowscunassigneduppercase=warangcitiwordbreak=wordjoineryi"
-    "radicals-5.00e-01aboveleftambiguousarabicpfaarabicpfbbhaiksukibre"
-    "akbothemoticonsextender=inheritedkhudawadilatinextblatinextclatin"
-    "extdmidlettermidnumletnabataeannewtailuenonjoinerolditalicoldperm"
-    "icoldturkicpalmyrenepaucinhausamaritanscontinuesyriacwawvoweljamo"
-    "wsegspacexidstart=1.00e-011.11e-011.25e-011.25e-021.43e-011.50e+0"
-    "01.50e-011.56e-021.67e-011.88e-012.00e-012.50e+002.50e-012.50e-02"
-    "200000003.12e-023.13e-023.13e-033.33e-013.50e+003.75e-013.75e-024"
-    ".00e-014.17e-014.50e+004.69e-025.00e-025.50e+005.83e-016.00e-016."
-    "25e-016.25e-026.25e-036.50e+006.67e-017.50e+007.50e-018.00e-018.3"
-    "3e-018.33e-028.50e+008.75e-019.17e-01armenianavagrahabalinesebass"
-    "avahbugineseduployanebasegazfarsiyehfractiongujaratigurmukhihirag"
-    "anaisolatedjamoextajamoextbjavanesekanaextalinefeedmahajaninextli"
-    "neradical=specialsswashkaftagbanwatifinaghtonemarkugariticaletter"
-    "avestanbengalicjkextacjkextbcjkextccjkextdcjkextecjkextfcompex=de"
-    "seretelbasanelymaicgranthagrbase=hanunoohyphen=kannadakayahliline"
-    "aramakasarmandaicmarchenmultaninewlinenfkcqc=nfkdqc=noblocknobrea"
-    "kolchikioletterosmanyaoverlaypatsyn=phagspascript=sharadashavians"
-    "iddhamsoyombosuppuaasuppuabtagalogtaithamtaiviettibetantirhutauca"
-    "sextunknownvisargawspace=zwspace216000300000400000432000500000600"
-    "000700000800000900000alpha=bidic=bidim=block=carianccc103ccc107cc"
-    "c118ccc122ccc129ccc130ccc132ccc133chakmacirclecwkcf=gothicgrext=h"
-    "atranjoinc=kaithikanbunkhojkilamadhlepchalower=lycianlydiannarrow"
-    "nchar=nfcqc=nfdqc=patws=qmark=rejangsterm=teluguthaanauideo=upper"
-    "=viramawanchoyudhhe1/1601/32011/12adlamahex=alaphatermbatakbindub"
-    "uhidccc14ccc15ccc16ccc17ccc18ccc19ccc20ccc21ccc22ccc23ccc24ccc25c"
-    "cc26ccc27ccc28ccc29ccc30ccc31ccc32ccc33ccc34ccc35ccc36ccc84ccc91c"
-    "ntrlcwcf=cwcm=dash=dografalseidsb=idst=inpc=insc=khaphlimbumath=m"
-    "aybenuktanushuoghamoriyaosagerunictailetakrivssupxidc=xids=zhain-"
-    "1/21/101/201/401/641/8010.011.011/212.113/215/217/23/163/203/643/"
-    "805/127/12adlmage=aghbahomalefarmiarmnataratblavstbatkbhksblk=bpt"
-    "=buhdcakmcansccc=cprtcwl=cwt=cwu=cyrldep=dia=dsrtfontgcb=gonggonm"
-    "grekgujrguruhanohluwhmnghmnphst=kalikhmrkndakthilanalaoolatnlinal"
-    "inblisuloe=medfmeemmercmiaomlymmroomteimymrnarbnbatnewankoonshuog"
-    "amolckorkhoryaosgepcm=phlpphnxplrdprtiqaacqaaiqaphrjngrohgrunrsam"
-    "rsarbscx=seensgnwshawshinshrdsogosyrctagstaletalutamltavttfngtglg"
-    "thaitibttruev100v110v120v121vaiiwchowidexpeoxsuxyiiizainzanbzinhz"
-    "yyyzzzz1/51/71/92/32/52022142182222242262282302322332342403.03.23"
-    "/43/54/55.15.25/65/86.16.37.07/89.09/2bc=behci=di=dt=ea=ebgfsigaf"
-    "gc=jg=jt=lb=lrelrilromimnsmnv=ocrpdfrehri=sd=smlsqrtahv20v21v30v3"
-    "1v32v40v41v50v51v52v60v61v62v63v70v80v90vo=vs=wb=yes3839444546474"
-    "849b2bkh2h3jljvkvl&l_vrxxzlzpzs_perl_problematic_locale_foldeds_i"
-    "s_in_multi_char_fold_perl_folds_to_perl_charname__perl_non_finabe"
-    "ginany_foldsquotemetaisxposixisposixblankprintishorizisxperlisper"
-    "lisspaceisvertisuni";
-/* mph_blob length: 9964 */
+    "ghtbidiclass=boxdrawingbreakafterchorasmiancjkstrokescompatjamoda"
+    "lathrishdiacritic=divesakuruhanreadingkharoshthiknottedhehlimited"
+    "uselinebreak=lowercase=lvsyllablemiscarrowsnonjoiningnonstarterol"
+    "dpersianoldsogdianoverstruckphoenicianpresentin=purekillerrestric"
+    "tedreversedpesaurashtrasmallformssuparrowsasuparrowsbsuparrowscun"
+    "assigneduppercase=warangcitiwordbreak=wordjoineryiradicals-5.00e-"
+    "01aboveleftambiguousarabicpfaarabicpfbbhaiksukibreakbothemoticons"
+    "extender=inclusioninheritedkhudawadilatinextblatinextclatinextdmi"
+    "dlettermidnumletnabataeannewtailuenonjoinerolditalicoldpermicoldt"
+    "urkicpalmyrenepaucinhausamaritanscontinuesyriacwawvoweljamowsegsp"
+    "acexidstart=1.00e-011.11e-011.25e-011.25e-021.43e-011.50e+001.50e"
+    "-011.56e-021.67e-011.88e-012.00e-012.50e+002.50e-012.50e-02200000"
+    "003.12e-023.13e-023.13e-033.33e-013.50e+003.75e-013.75e-024.00e-0"
+    "14.17e-014.50e+004.69e-025.00e-025.50e+005.83e-016.00e-016.25e-01"
+    "6.25e-026.25e-036.50e+006.67e-017.50e+007.50e-018.00e-018.33e-018"
+    ".33e-028.50e+008.75e-019.17e-01armenianavagrahabalinesebassavahbu"
+    "gineseduployanebasegazextpict=farsiyehfractiongujaratigurmukhihir"
+    "aganaisolatedjamoextajamoextbjavanesekanaextalinefeedmahajaninext"
+    "lineobsoleteradical=specialsswashkaftagbanwatifinaghtonemarkugari"
+    "ticaletterallowedavestanbengalicjkextacjkextbcjkextccjkextdcjkext"
+    "ecjkextfcjkextgcompex=deseretelbasanelymaicgranthagrbase=hanunooh"
+    "yphen=kannadakayahlilinearamakasarmandaicmarchenmultaninewlinenfk"
+    "cqc=nfkdqc=noblocknobreaknotnfkcolchikioletterosmanyaoverlaypatsy"
+    "n=phagspascript=sharadashaviansiddhamsoyombosuppuaasuppuabtagalog"
+    "taithamtaiviettibetantirhutaucasextunknownvisargawspace=zwspace21"
+    "6000300000400000432000500000600000700000800000900000alpha=bidic=b"
+    "idim=block=carianccc103ccc107ccc118ccc122ccc129ccc130ccc132ccc133"
+    "chakmacirclecwkcf=ecomp=emoji=epres=gothicgrext=hatranjoinc=kaith"
+    "ikanbunkhojkilamadhlepchalower=lycianlydiannarrownchar=nfcqc=nfdq"
+    "c=notxidpatws=qmark=rejangsterm=teluguthaanauideo=upper=viramawan"
+    "choyezidiyudhhe1/1601/32011/12adlamahex=alaphatermbatakbindubuhid"
+    "ccc14ccc15ccc16ccc17ccc18ccc19ccc20ccc21ccc22ccc23ccc24ccc25ccc26"
+    "ccc27ccc28ccc29ccc30ccc31ccc32ccc33ccc34ccc35ccc36ccc84ccc91cntrl"
+    "cwcf=cwcm=dash=dograemod=falseidsb=idst=inpc=insc=khaphlimbumath="
+    "maybenuktanushuoghamoriyaosagerunictailetakrivssupxidc=xids=zhain"
+    "-1/21/101/201/401/641/8010.011.011/212.113.013/215/217/23/163/203"
+    "/643/805/127/12adlmage=aghbahomalefarmiarmnataratblavstbatkbhksbl"
+    "k=bpt=buhdcakmcansccc=chrscprtcwl=cwt=cwu=cyrldep=dia=diakdsrtfon"
+    "tgcb=gonggonmgrekgujrguruhanohluwhmnghmnphst=kalikhmrkitskndakthi"
+    "lanalaoolatnlinalinbloe=medfmeemmercmiaomlymmroomteimymrnarbnbatn"
+    "ewankoonshuogamolckorkhoryaosgepcm=phlpphnxplrdprtiqaacqaaiqaphrj"
+    "ngrohgrunrsamrsarbscx=seensgnwshawshinshrdsogosyrctagstaletalutam"
+    "ltavttfngtglgthaitibttruev100v110v120v121v130vaiiwchowidexpeoxsux"
+    "yiiizainzanbzinhzyyyzzzz1/51/71/92/32/520221421822222422622823023"
+    "22332342403.23/43/54/55.15.25/65/86.16.37.07/89.09/2bc=behci=di=d"
+    "t=ea=ebgfsigafgc=jg=jt=lb=lrelrilromimnv=ocrpdfrehri=sd=smlsqrtah"
+    "v20v21v30v31v32v40v41v50v51v52v60v61v62v63v70v80v90vo=vs=wb=yes38"
+    "39444546474849b2bkh2h3jljvkvl&l_vrxxzlzpzs_perl_problematic_local"
+    "e_foldeds_is_in_multi_char_fold_perl_folds_to_perl_charname_begin"
+    "any_foldsquotemetaisxposixisposixblankprintishorizisxperlisperlis"
+    "spaceisvertisuni";
+/* mph_blob length: 10351 */
 
 struct mph_struct {
     U16 seed2;
@@ -185,7029 +188,7277 @@ struct mph_struct {
 };
 
 #define MPH_RSHIFT 8
-#define MPH_BUCKETS 7016
+#define MPH_BUCKETS 7264
 
 STATIC const U32 MPH_SEED1 = 0x5065726c;
 STATIC const U32 MPH_FNV_CONST = 0x01000193;
 
 /* The comments give the input key for the row it is in */
 STATIC const struct mph_struct mph_table[MPH_BUCKETS] = {
-  {     2,   184,  6948,   2,  10, UNI_MISCARROWS }   /* ismiscarrows */,
-  {     1,  3671,  6027,  17,   5, UNI_KHMR }   /* scriptextensions=khmer */,
-  {     0,  6472,  3470,   5,  14, UNI_INCAUCASIANALBANIAN }   /* incaucasianalbanian */,
-  {    10,  9365,  2608,   4,  19, UNI_EGYP }   /* scx=egyptianhieroglyphs */,
-  {     1,  9113,  7540,   4,   2, UNI_CCC__20 }   /* ccc=20 */,
-  {     2,  3671,  4672,  17,  15, UNI_SARB }   /* scriptextensions=oldsoutharabian */,
-  {     0,  6885,  1459,   3,  23, UNI_HIGHPUSURROGATES }   /* ishighprivateusesurrogates */,
-  {    16,  5325,     0,  14,   0, UNI_qmark_values_index }   /* quotationmark= */,
-  {     1,  9629,  8324,   3,   7, UNI_LB__XX }   /* lb=unknown */,
-  {     4,  5760,  8981,  13,   4, UNI_NV__1_SLASH_40 }   /* numericvalue=1/40 */,
-  {     6,  9093,  5907,   4,  12, UNI_ETHIOPICEXTA }   /* blk=ethiopicexta */,
-  {     1,  1911,  3788,  22,  16, UNI_INSC__CANTILLATIONMARK }   /* indicsyllabiccategory=cantillationmark */,
-  {     0,  8424,  5799,   6,  12, UNI_ALPHABETICPF }   /* block=alphabeticpf */,
-  {    12,  3671,  8679,  17,   5, UNI_ADLM }   /* scriptextensions=adlam */,
-  {     0,  9775,     0,   2,   0, UNI_ZL }   /* zl */,
-  {     1,    42,     0,   3,   0, UNI_CJK }   /* cjk */,
-  {     0,  5339,    49,  14,   2, UNI_SB__AT }   /* sentencebreak=at */,
-  {     0,  5339,  8198,  14,   7, UNI_SB__LE }   /* sentencebreak=oletter */,
-  {     1,  9093,  1618,   4,   4, UNI_JAMO }   /* blk=jamo */,
-  {     1,  3671,  6051,  17,   4, UNI_MAHJ }   /* scriptextensions=mahj */,
-  {     4,  8424,  9261,   6,   3, UNI_INMRO }   /* block=mro */,
-  {     1,   132,     0,   2,   0, UNI_LM }   /* lm */,
-  {     0,  3671,  4220,  17,   6, UNI_TANG }   /* scriptextensions=tangut */,
-  {     0,  9623,  5669,   3,  13, UNI_JG__MANICHAEANONE }   /* jg=manichaeanone */,
-  {     0,  9093,  5955,   4,  12, UNI_INGUNJALAGONDI }   /* blk=gunjalagondi */,
-  {     6,  9903,  7128,   6,   4, UNI_XPOSIXWORD }   /* xposixword */,
-  {     4,  2836,     0,   9,   0, UNI_SUND }   /* sundanese */,
-  {     0,  9623,  1456,   3,   3, UNI_JG__HAH }   /* jg=hah */,
-  {     0,  8424,    43,   7,  25, UNI_CJKCOMPATIDEOGRAPHS }   /* block=cjkcompatibilityideographs */,
-  {     7,  8871,  1164,   3,   2, UNI_LB__LF }   /* sb=lf */,
-  {     1,   184,  6646,   2,  11, UNI_HMNG }   /* ispahawhhmong */,
-  {     2,  3671,  9217,  17,   4, UNI_LAO }   /* scriptextensions=laoo */,
-  {     3,  3996,     0,  16,   0, UNI_LINEARBSYLLABARY }   /* linearbsyllabary */,
-  {     4,   184,  5734,   2,  13, UNI_MISCTECHNICAL }   /* ismisctechnical */,
-  {     3,  8954,  9734,   5,   3, UNI_XIDC }   /* xidc=yes */,
-  {     1,  1154,     0,   3,   0, UNI_DEP }   /* dep */,
-  {     3,   184,   779,   2,  22, UNI_ENCLOSEDIDEOGRAPHICSUP }   /* isenclosedideographicsup */,
-  {     0,  3671,  5967,  17,   6, UNI_HEBR }   /* scriptextensions=hebrew */,
-  {    34,  9429,     0,   4,   0, UNI_TIBT }   /* tibt */,
-  {     8,  7025,  9719,   3,   3, UNI_IN__8 }   /* in=v80 */,
-  {     1,  8634,  9734,   6,   3, UNI_UIDEO }   /* uideo=yes */,
-  {     1,  8520,   995,   6,   2, -UNI_JOINC }   /* joinc=no */,
-  {     3,  2211,     0,  21,   0, UNI_SINHALAARCHAICNUMBERS }   /* sinhalaarchaicnumbers */,
-  {     0,  8879,  2479,   5,   6, UNI_INPC__BOTTOM }   /* inpc=bottom */,
-  {     1,   184,  1057,   2,  26, UNI_PCM }   /* isprependedconcatenationmark */,
-  {     0,  6918,  1156,  10,   2, UNI_LB__PO }   /* linebreak=po */,
-  {     0,  8886,  9181,   3,   4, UNI_HLUW }   /* sc=hluw */,
-  {     2,  9365,  7788,   4,   8, UNI_BALI }   /* scx=balinese */,
-  {     1,  9365,  9285,   4,   3, UNI_NKO }   /* scx=nko */,
-  {     0,  4642,     0,  15,   0, UNI_nfkdqc_values_index }   /* nfkdquickcheck= */,
-  {     0,   184,    43,   3,  25, UNI_CJKCOMPATIDEOGRAPHS }   /* iscjkcompatibilityideographs */,
-  {     3,  2148,  2875,   3,  18, UNI_SUPARROWSB }   /* insupplementalarrowsb */,
-  {     1,  1691,     1,  22,   1, UNI_BPT__N }   /* bidipairedbrackettype=n */,
-  {     1,   184,  8079,   2,   7, UNI_GRAN }   /* isgrantha */,
-  {     0,  7128,  1188,  10,   8, UNI_WB__KA }   /* wordbreak=katakana */,
-  {     1,  9093,     0,   4,  34, UNI_UCAS }   /* blk=unifiedcanadianaboriginalsyllabics */,
-  {     1,  3671,   689,  17,   9, UNI_XSUX }   /* scriptextensions=cuneiform */,
-  {     3,  4705,  9430,   3,   3, UNI_TIBT }   /* istibt */,
-  {     0,  1911,  2313,  22,  20, UNI_INSC__CONSONANTWITHSTACKER }   /* indicsyllabiccategory=consonantwithstacker */,
-  {     8,  8886,  7239,   3,   9, UNI_SC__QAAI }   /* sc=inherited */,
-  {     3,  8424,  4672,   6,  15, UNI_SARB }   /* block=oldsoutharabian */,
-  {     0,  1497,  3228,  10,   8, UNI_Z }   /* category=separator */,
-  {     0,  8892,     0,   4,   0, UNI_PHLI }   /* phli */,
-  {     0,  7420,    26,   8,   1, UNI_IDS }   /* idstart=y */,
-  {     1,  2930,     0,  18,   0, UNI_CHEROKEESUP }   /* cherokeesupplement */,
-  {     2,  8424,   510,   7,  19, UNI_CJK }   /* block=cjkunifiedideographs */,
-  {     1,  6003,     0,  11,   0, UNI_JOINC }   /* joincontrol */,
-  {     1,  7025,  9581,   3,   3, UNI_IN__7 }   /* in=7.0 */,
-  {     1,  6918,  9759,  10,   2, UNI_LB__H3 }   /* linebreak=h3 */,
-  {     0,  8424,  8205,   6,   7, UNI_INOSMANYA }   /* block=osmanya */,
-  {     0,  5760,  9747,  13,   2, UNI_NV__47 }   /* numericvalue=47 */,
-  {     1,  6828,  2190,  10,  21, UNI_BC__PDI }   /* bidiclass=popdirectionalisolate */,
-  {     2,  8514,     0,   4,   0, UNI_HATR }   /* hatr */,
-  {     1,  9647,  8358,   3,   3, UNI_NV__300 }   /* nv=300 */,
-  {     1,  8282,     0,   7,   0, UNI_TGLG }   /* tagalog */,
-  {     4,  8886,  8430,   3,   4, UNI_CARI }   /* sc=cari */,
-  {     2,  9605,  2493,   3,   4, UNI_DT__VERT }   /* dt=vert */,
-  {     1,  5734,     0,  13,   0, UNI_MISCTECHNICAL }   /* misctechnical */,
-  {     4,  8879,  6998,   5,  10, UNI_INPC__OVERSTRUCK }   /* inpc=overstruck */,
-  {     3,  3671,  9053,  17,   4, UNI_AGHB }   /* scriptextensions=aghb */,
-  {     2,  3236,  9734,  18,   3, UNI__PERL_PATWS }   /* patternwhitespace=yes */,
-  {     0,  9608,  1162,   3,   9, UNI_EA__H }   /* ea=halfwidth */,
-  {     1,  3671,  5955,  17,  12, UNI_GONG }   /* scriptextensions=gunjalagondi */,
-  {     0,   184,  8699,   2,   5, UNI_BATK }   /* isbatak */,
-  {     0,  7420,     0,   8,   0, UNI_ids_values_index }   /* idstart= */,
-  {     0,  1362,  5409,  24,   2, UNI_CCC__10 }   /* canonicalcombiningclass=10 */,
-  {     0,  8424,  6991,   6,   7, UNI_INSOGDIAN }   /* block=sogdian */,
-  {     0,  8233,   689,   7,   9, UNI_XSUX }   /* script=cuneiform */,
-  {     1,  9093,  1338,   4,  24, UNI_ARABICPFB }   /* blk=arabicpresentationformsb */,
-  {     1,  1713,    26,  22,   1, UNI_CWCF }   /* changeswhencasefolded=y */,
-  {     5,   184,    74,   2,   2, UNI_ME }   /* isme */,
-  {     1,  9620,    24,   3,   1, UNI_L }   /* gc=l */,
-  {     1,  4705,  2022,   3,  21, UNI_TRANSPORTANDMAP }   /* istransportandmapsymbols */,
-  {     4,  7025,  9701,   3,   3, UNI_IN__5_DOT_2 }   /* in=v52 */,
-  {     1,  2106,   406,  21,   7, UNI_GCB__CN }   /* graphemeclusterbreak=control */,
-  {     1,  8233,  7788,   7,   8, UNI_BALI }   /* script=balinese */,
-  {     0,  9909,  9322,   3,   3, UNI_PHNX }   /* isphnx */,
-  {     0,  8886,  8502,   3,   4, UNI_GOTH }   /* sc=goth */,
-  {     0,  3671,  1599,  17,   6, UNI_HANG }   /* scriptextensions=hangul */,
-  {     2,  2148,  8269,   3,   6, UNI_SUPPUAA }   /* insuppuaa */,
-  {     2,  9365,  9109,   4,   4, UNI_CANS }   /* scx=cans */,
-  {     0,  8233,  8128,   7,   7, UNI_MAKA }   /* script=makasar */,
-  {     0,  1497,  5487,   9,  13, UNI_XPOSIXDIGIT }   /* category=decimalnumber */,
-  {     5,   184,  1154,   2,   3, UNI_DEP }   /* isdep */,
-  {     1,   184,     7,   3,   1, UNI_XPOSIXCNTRL }   /* iscc */,
-  {     6,  8424,    43,   7,   8, UNI_CJKCOMPAT }   /* block=cjkcompat */,
-  {    10,  3868,   406,  16,   7, UNI_XPOSIXCNTRL }   /* generalcategory=control */,
-  {     1,  8233,  9161,   7,   4, UNI_SC__GONM }   /* script=gonm */,
-  {     3,  5760,  7571,  13,   2, UNI_NV__33 }   /* numericvalue=33 */,
-  {     1,  3671,  7892,  17,   4, UNI_JAVA }   /* scriptextensions=java */,
-  {     3,  5269,     3,  14,   1, -UNI_PATSYN }   /* patternsyntax=f */,
-  {     0,  8886,  7844,   3,   8, UNI_SC__GUJR }   /* sc=gujarati */,
-  {     2,  8886,  9165,   3,   4, UNI_SC__GREK }   /* sc=grek */,
-  {     0,  6005,  8010,   3,   6, UNI_CJKEXTA }   /* incjkexta */,
-  {     0,  8424,  7275,   6,   9, UNI_LATINEXTD }   /* block=latinextd */,
-  {     1,  4447,    66,  15,   1, UNI_EA__H }   /* eastasianwidth=h */,
-  {     1,  5339,     7,  15,   1, UNI_SB__SC }   /* sentencebreak=sc */,
-  {     0,  2684,    24,  19,   1, UNI_GCB__L }   /* hangulsyllabletype=l */,
-  {     1,  8163,    17,   8,   1, UNI_NFKCQC__N }   /* nfkcqc=no */,
-  {     0,  8886,  9425,   3,   4, UNI_THAI }   /* sc=thai */,
-  {     2,  8424,  7374,   6,   9, UNI_INSAMARITAN }   /* block=samaritan */,
-  {     2,  8332,  7196,   4,   7, UNI_ARABICPFB }   /* isarabicpfb */,
-  {     1,  6015,     0,  12,   0, UNI_jt_values_index }   /* joiningtype= */,
-  {     3,  9623,  5931,   3,  12, UNI_JG__FINALSEMKATH }   /* jg=finalsemkath */,
-  {     0,  9647,  8981,   3,   3, UNI_NV__1_SLASH_4 }   /* nv=1/4 */,
-  {     2,  9365,  5955,   4,  12, UNI_GONG }   /* scx=gunjalagondi */,
-  {     8,  8332,  3758,   4,  14, UNI_ARABICSUP }   /* isarabicsupplement */,
-  {     0,  9659,   995,   3,   2, -UNI_RI }   /* ri=no */,
-  {     1,    21,  8568,   2,   6, UNI_INLYDIAN }   /* inlydian */,
-  {     4,   184,  8065,   2,   7, UNI_ELBA }   /* iselbasan */,
-  {     1,  9647,  7508,   3,   8, UNI_NV__1_SLASH_5 }   /* nv=2.00e-01 */,
-  {     5,  9093,  4975,   4,   7, UNI_KANASUP }   /* blk=kanasup */,
-  {     0,  8233,  9065,   7,   4, UNI_ARMI }   /* script=armi */,
-  {     3,  1136,     0,  26,   0, UNI_di_values_index }   /* defaultignorablecodepoint= */,
-  {     3,  8499,     0,   2,   0, UNI_CF }   /* cf */,
-  {     4,  3868,     0,  16,   0, UNI_gc_values_index }   /* generalcategory= */,
-  {     9,  8240,     0,   7,   0, UNI_SHRD }   /* sharada */,
-  {     1,  9093,  2589,   4,  11, UNI_COUNTINGROD }   /* blk=countingrod */,
-  {     0,  6949,  4851,   4,  11, UNI_CI }   /* iscaseignorable */,
-  {     1,   184,   570,   3,  29, UNI_CJKEXTC }   /* iscjkunifiedideographsextensionc */,
-  {     1,  8886,  9249,   3,   4, UNI_MERC }   /* sc=merc */,
-  {     1,    21,  9058,   3,   3, UNI_INAHOM }   /* inahom */,
-  {     7,  9153,  5346,   4,   2, UNI_WB__EB }   /* gcb=eb */,
-  {     2,  8233,  6602,   7,  11, UNI_SC__NAND }   /* script=nandinagari */,
-  {     0,  9647,  9741,   3,   2, UNI_NV__44 }   /* nv=44 */,
-  {     0,  1801,  9734,  22,   3, UNI_CWU }   /* changeswhenuppercased=yes */,
-  {     0,  3951,  2704,   3,  17, UNI_IDST }   /* isidstrinaryoperator */,
-  {     0,  8424,   328,   6,  21, UNI_MATHOPERATORS }   /* block=mathematicaloperators */,
-  {     4,  2204,  4141,   3,  15, UNI_PO }   /* isotherpunctuation */,
-  {     1,  8684,  9433,   5,   4, UNI_POSIXXDIGIT }   /* ahex=true */,
-  {     2,  8886,  8699,   3,   5, UNI_BATK }   /* sc=batak */,
-  {     2,  1773,     0,   5,   0, UNI_CASED }   /* cased */,
-  {     3,   184,   690,   3,  15, UNI_CUNEIFORMNUMBERS }   /* iscuneiformnumbers */,
-  {    18,  7018,  9566,  10,   3, UNI_IN__5_DOT_2 }   /* presentin=5.2 */,
-  {     2,  3868,  1532,  16,   1, UNI_Z }   /* generalcategory=z */,
-  {     4,  9599,    26,   3,   1, UNI_CI }   /* ci=y */,
-  {     0,  2212,  3933,   3,  15, UNI_HIGHPUSURROGATES }   /* inhighpusurrogates */,
-  {     0,  2589,     0,  19,   0, UNI_COUNTINGROD }   /* countingrodnumerals */,
-  {     1,  9365,  2532,   4,   4, UNI_BRAH }   /* scx=brah */,
-  {     2,  8233,  8310,   7,   4, UNI_SC__TIRH }   /* script=tirh */,
-  {     1,  3868,  5199,  16,  14, UNI_SK }   /* generalcategory=modifiersymbol */,
-  {     0,   184,  5835,   2,   5, UNI_BIDIC }   /* isbidic */,
-  {     8,  8886,  8254,   3,   7, UNI_SIDD }   /* sc=siddham */,
-  {     1,  8844,  8864,   5,   5, -UNI_CWCF }   /* cwcf=false */,
-  {     0,   184,  3164,   2,   9, UNI_LATINEXTA }   /* islatinexta */,
-  {     2,  9093,  6978,   4,  10, UNI_INOLDPERSIAN }   /* blk=oldpersian */,
-  {    26,  8233,  9189,   7,   4, UNI_HMNP }   /* script=hmnp */,
-  {     4,  1773,    36,   6,   1, UNI_CASED }   /* cased=t */,
-  {     0,  8424,  2232,   6,  21, UNI_YIJING }   /* block=yijinghexagramsymbols */,
-  {     1,  9113,  7555,   4,   2, UNI_CCC__23 }   /* ccc=23 */,
-  {     3,  9057,     0,   4,   0, UNI_AHOM }   /* ahom */,
-  {     5,  8886,  8079,   3,   4, UNI_SC__GRAN }   /* sc=gran */,
-  {     0,  7018,  9005,  10,   4, UNI_IN__12_DOT_1 }   /* presentin=12.1 */,
-  {     1,  8886,  9053,   3,   4, UNI_AGHB }   /* sc=aghb */,
-  {     0,  8886,  7332,   3,   4, UNI_ITAL }   /* sc=ital */,
-  {     0,   184,  3772,   2,   8, UNI_BOPO }   /* isbopomofo */,
-  {     0,  9779,     0,   2,   0, UNI_ZS }   /* zs */,
-  {     1,  8233,  9225,   7,   4, UNI_SC__LINA }   /* script=lina */,
-  {     1,   184,    47,   2,   1, UNI_M }   /* ism */,
-  {     1,  3110,     0,  18,   0, UNI_GEORGIANSUP }   /* georgiansupplement */,
-  {     0,  2532,     0,   6,   0, UNI_BRAH }   /* brahmi */,
-  {     0,  3671,  6646,  17,  11, UNI_HMNG }   /* scriptextensions=pahawhhmong */,
-  {     0,  8879,  7009,   3,   9, UNI_INPHOENICIAN }   /* inphoenician */,
-  {     1,   184,   400,   2,   6, UNI_CF }   /* isformat */,
-  {     0,  7347,     0,   9,   0, UNI_ORKH }   /* oldturkic */,
-  {     7,  8233,  2127,   7,  14, UNI_SC__ROHG }   /* script=hanifirohingya */,
-  {     1,   697,     0,   2,   0, UNI_MN }   /* mn */,
-  {     0,  6315,  8864,  12,   5, -UNI_XIDC }   /* xidcontinue=false */,
-  {    11,  9909,  9318,   3,   3, UNI_PHLP }   /* isphlp */,
-  {     4,  9629,  9154,   3,   2, UNI_LB__CB }   /* lb=cb */,
-  {     5,  8424,  7118,   6,  10, UNI_INWARANGCITI }   /* block=warangciti */,
-  {     0,  8634,    36,   6,   1, UNI_UIDEO }   /* uideo=t */,
-  {     1,   184,  5435,   2,  12, UNI_BIDIM }   /* isbidimirrored */,
-  {     1,  1243,  8864,  21,   5, -UNI_CE }   /* compositionexclusion=false */,
-  {     3,  8886,  7356,   3,   4, UNI_PALM }   /* sc=palm */,
-  {     2,  9605,  3852,   3,   5, UNI_DT__FIN }   /* dt=final */,
-  {     0,  3671,  8568,  17,   6, UNI_LYDI }   /* scriptextensions=lydian */,
-  {     0,  5435,     3,  13,   1, -UNI_BIDIM }   /* bidimirrored=f */,
-  {     2,  6003,   995,  12,   2, -UNI_JOINC }   /* joincontrol=no */,
-  {     8,  9365,  8924,   4,   5, UNI_ORYA }   /* scx=oriya */,
-  {     1,  5339,   339,  14,   2, UNI_SB__LO }   /* sentencebreak=lo */,
-  {     2,  5227,  9734,  14,   3, UNI_NFDQC__Y }   /* nfdquickcheck=yes */,
-  {     1,  8550,     0,   4,   0, UNI_LEPC }   /* lepc */,
-  {     0,  8568,     0,   4,   0, UNI_LYDI }   /* lydi */,
-  {     2,  5565,  9671,  13,   3, UNI_JG__TAH }   /* joininggroup=tah */,
-  {     0,  9113,  9524,   4,   3, UNI_CCC__L }   /* ccc=224 */,
-  {     0,  4778,  1099,   3,   3, UNI_UCAS }   /* isucas */,
-  {     0,  9731,  1164,   3,   2, UNI_LB__LF }   /* wb=lf */,
-  {     1,  9093,  5031,   4,  14, UNI_LATINEXTD }   /* blk=latinextendedd */,
-  {     2,  9629,  7176,   3,   9, UNI_LB__AI }   /* lb=ambiguous */,
-  {     3,  3671,  3620,  17,   4, UNI_MANI }   /* scriptextensions=mani */,
-  {     3,  3671,  6246,  17,   4, UNI_HUNG }   /* scriptextensions=hung */,
-  {     0,  8886,  8550,   3,   6, UNI_LEPC }   /* sc=lepcha */,
-  {     0,  9728,  9734,   3,   3, UNI_VS }   /* vs=yes */,
-  {     2,  4705,  8311,   3,   3, UNI_TIRH }   /* istirh */,
-  {     3,  8502,     0,   6,   0, UNI_GOTH }   /* gothic */,
-  {     2,  9647,  7158,   3,   9, UNI_NV___MINUS_1_SLASH_2 }   /* nv=-5.00e-01 */,
-  {     2,  9113,  2920,   4,   5, UNI_CCC__A }   /* ccc=above */,
-  {     0,  9731,  5919,   3,  12, UNI_WB__EX }   /* wb=extendnumlet */,
-  {     1,  8424,  4717,   6,   8, UNI_TAMILSUP }   /* block=tamilsup */,
-  {     0,  9129,  9433,   4,   4, UNI_CWU }   /* cwu=true */,
-  {     0,  1812,     0,   9,   0, UNI_XPOSIXUPPER }   /* uppercase */,
-  {     0,  9647,  7596,   3,   8, UNI_NV__3_SLASH_80 }   /* nv=3.75e-02 */,
-  {     4,  9173,     0,   4,   0, UNI_GURU }   /* guru */,
-  {     1,  9365,  9205,   4,   4, UNI_KNDA }   /* scx=knda */,
-  {     1,  3756,     0,   9,   0, UNI_ARABICSUP }   /* arabicsup */,
-  {     0,  9647,  8394,   3,   6, UNI_NV__800000 }   /* nv=800000 */,
-  {     0,  8556,  9433,   6,   4, UNI_XPOSIXLOWER }   /* lower=true */,
-  {     0,  1691,     0,  22,   0, UNI_bpt_values_index }   /* bidipairedbrackettype= */,
-  {     4,  8496,     1,   6,   1, -UNI_CWKCF }   /* cwkcf=n */,
-  {     0,  9093,  2646,   4,  10, UNI_JAMO }   /* blk=hanguljamo */,
-  {     5,  3671,  7956,  17,   4, UNI_TAGB }   /* scriptextensions=tagb */,
-  {     2,  8233,  4582,   7,  15, UNI_MERC }   /* script=meroiticcursive */,
-  {     1,  8233,  2837,   8,   8, UNI_SUND }   /* script=sundanese */,
-  {     4,  9365,  9249,   4,   4, UNI_MERC }   /* scx=merc */,
-  {    20,  7025,  7098,   3,  10, UNI_AGE__NA }   /* in=unassigned */,
-  {     0,  9647,  9569,   3,   3, UNI_NV__5_SLASH_6 }   /* nv=5/6 */,
-  {     0,  8170,  9734,   7,   3, UNI_DT__NONE }   /* nfkdqc=yes */,
-  {     0,  9623,  5708,   3,  13, UNI_JG__MANICHAEANWAW }   /* jg=manichaeanwaw */,
-  {     0,   117,   447,   3,  17, UNI_IDEOGRAPHICSYMBOLS }   /* inideographicsymbols */,
-  {    15,  5760,  8364,  13,   2, UNI_NV__40 }   /* numericvalue=40 */,
-  {     1,  3868,    27,  16,   2, UNI_LOWERCASELETTER }   /* generalcategory=ll */,
-  {     3,  9647,  9037,   3,   4, UNI_NV__5_SLASH_12 }   /* nv=5/12 */,
-  {     0,   184,  9349,   2,   4, UNI_ROHG }   /* isrohg */,
-  {     2,  8424,  5311,   6,  14, UNI_INPSALTERPAHLAVI }   /* block=psalterpahlavi */,
-  {     0,  8332,  1316,   4,  22, UNI_ARABICPFA }   /* isarabicpresentationformsa */,
-  {     1,  1497,  7098,   9,  10, UNI_CN }   /* category=unassigned */,
-  {     2,  9365,  9421,   4,   4, UNI_TGLG }   /* scx=tglg */,
-  {     0,  5760,  7540,  13,   5, UNI_NV__20000 }   /* numericvalue=20000 */,
-  {     6,  9097,  5678,   4,   4, UNI_BPT__N }   /* bpt=none */,
-  {     7,  4778,   513,   3,  15, UNI_UIDEO }   /* isunifiedideograph */,
-  {     1,   184,    43,   3,   2, UNI_CJK }   /* iscjk */,
-  {     0,  3739,    36,  17,   1, UNI_UIDEO }   /* unifiedideograph=t */,
-  {     3,  8424,  8310,   6,   7, UNI_INTIRHUTA }   /* block=tirhuta */,
-  {     1,  9093,  8149,   4,   7, UNI_INMULTANI }   /* blk=multani */,
-  {     4,  9365,  8310,   4,   4, UNI_TIRH }   /* scx=tirh */,
-  {     4,  1497,  6635,   9,  11, UNI_SO }   /* category=othersymbol */,
-  {     1,  6918,  6848,  10,  10, UNI_LB__BA }   /* linebreak=breakafter */,
-  {     1,   184,  8052,   3,   5, UNI_COMPEX }   /* iscompex */,
-  {     6,  8233,  7329,   7,   9, UNI_ITAL }   /* script=olditalic */,
-  {     2,  9629,  5520,   3,   5, UNI_LB__EB }   /* lb=ebase */,
-  {     0,  9093,   349,   4,  33, UNI_SUPSYMBOLSANDPICTOGRAPHS }   /* blk=supplementalsymbolsandpictographs */,
-  {     1,  3128,     1,  18,   1, -UNI_IDSB }   /* idsbinaryoperator=n */,
-  {     5,   184,  5513,   2,  12, UNI_GRBASE }   /* isgraphemebase */,
-  {     6,  8233,  8079,   7,   4, UNI_SC__GRAN }   /* script=gran */,
-  {     1,  2148,  8276,   3,   6, UNI_SUPPUAB }   /* insuppuab */,
-  {     1,   184,  7788,   2,   8, UNI_BALI }   /* isbalinese */,
-  {     0,  5213,    47,  14,   1, UNI_NFCQC__M }   /* nfcquickcheck=m */,
-  {     0,  8886,  9481,   3,   4, UNI_ZANB }   /* sc=zanb */,
-  {     0,  6918,  3248,  10,   5, UNI_LB__SP }   /* linebreak=space */,
-  {     1,  9365,  6246,   4,   4, UNI_HUNG }   /* scx=hung */,
-  {     0,   184,  1977,   2,  21, UNI__PERL_NCHAR }   /* isnoncharactercodepoint */,
-  {     0,  9141,     0,   4,   0, UNI_dia_values_index }   /* dia= */,
-  {     3,  6005,  8031,   3,   6, UNI_CJKEXTD }   /* incjkextd */,
-  {     3,   184,  1846,   3,  21, UNI_INDICNUMBERFORMS }   /* iscommonindicnumberforms */,
-  {     1,  6828,  3608,  10,   3, UNI_BC__RLI }   /* bidiclass=rli */,
-  {     1,  6315,     0,  12,   0, UNI_xidc_values_index }   /* xidcontinue= */,
-  {    16,  9602,     3,   3,   1, -UNI_DI }   /* di=f */,
-  {     1,  5760,  7691,  13,   2, UNI_NV__36 }   /* numericvalue=36 */,
-  {     4,  4492,     0,  15,   0, UNI_ARMI }   /* imperialaramaic */,
-  {     0,  9605,  1279,   3,   3, UNI_DT__SUB }   /* dt=sub */,
-  {     0,  2148,  7069,   3,   9, UNI_SUPARROWSA }   /* insuparrowsa */,
-  {     0,   184,   983,   2,   5, UNI_GREK }   /* isgreek */,
-  {     1,  8332,  7187,   4,   7, UNI_ARABICPFA }   /* isarabicpfa */,
-  {     0,   598,     0,   2,   0, UNI_XPOSIXCNTRL }   /* cc */,
-  {     2,  9093,  1823,   4,  22, UNI_CJKCOMPATIDEOGRAPHSSUP }   /* blk=cjkcompatideographssup */,
-  {     0,  7302,     0,   9,   0, UNI_NBAT }   /* nabataean */,
-  {     1,  9623,  4028,   3,  16, UNI_JG__MANICHAEANLAMEDH }   /* jg=manichaeanlamedh */,
-  {     4,  8233,  8699,   7,   5, UNI_BATK }   /* script=batak */,
-  {    13,  8233,  9349,   7,   4, UNI_SC__ROHG }   /* script=rohg */,
-  {     6,   184,  4204,   2,  16, UNI_SYRIACSUP }   /* issyriacsupplement */,
-  {     0,  8899,    26,   5,   1, UNI_MATH }   /* math=y */,
-  {     0,  8233,  9201,   7,   4, UNI_KHMR }   /* script=khmr */,
-  {     0,  3739,  9433,  17,   4, UNI_UIDEO }   /* unifiedideograph=true */,
-  {     5,  6828,     1,  11,   1, UNI_BC__BN }   /* bidiclass=bn */,
-  {     5,  9623,  9341,   3,   4, UNI_JG__QAPH }   /* jg=qaph */,
-  {     8,  8233,  8121,   7,   7, UNI_SC__LINA }   /* script=lineara */,
-  {     0,  3243,     0,  10,   0, UNI_XPOSIXSPACE }   /* whitespace */,
-  {     0,  1362,  8371,  24,   2, UNI_CCC__32 }   /* canonicalcombiningclass=32 */,
-  {     0,    78,     0,   4,   0, UNI_ARAB }   /* arab */,
-  {     1,  9593,   407,   3,   2, UNI_BC__ON }   /* bc=on */,
-  {     5,  4826,     0,   8,   0, UNI_XPOSIXXDIGIT }   /* hexdigit */,
-  {     1,  8424,  8502,   6,   6, UNI_INGOTHIC }   /* block=gothic */,
-  {     0,  1362,  8473,  25,   5, UNI_CCC__132 }   /* canonicalcombiningclass=ccc132 */,
-  {     0,  8424,  6988,   6,  10, UNI_INOLDSOGDIAN }   /* block=oldsogdian */,
-  {     2,  8652,     0,   6,   0, UNI_WCHO }   /* wancho */,
-  {     2,  8233,  3836,   7,   7, UNI_SC__CPRT }   /* script=cypriot */,
-  {     0,  3671,  2837,  18,   3, UNI_SUND }   /* scriptextensions=sund */,
-  {     0,  6338,     3,  11,   1, -UNI_XPOSIXALPHA }   /* alphabetic=f */,
-  {     0,  5979,     0,  12,   0, UNI_ideo_values_index }   /* ideographic= */,
-  {     0,  5565,  8658,  13,   4, UNI_JG__YUDH }   /* joininggroup=yudh */,
-  {     1,   184,   600,   3,  29, UNI_CJKEXTD }   /* iscjkunifiedideographsextensiond */,
-  {     1,  6005,    43,   3,   8, UNI_CJKCOMPAT }   /* incjkcompat */,
-  {     0,  9093,  8514,   4,   6, UNI_INHATRAN }   /* blk=hatran */,
-  {     1,  2204,  8925,   3,   4, UNI_ORYA }   /* isoriya */,
-  {    12,  9093,  3773,   5,  15, UNI_BOPOMOFOEXT }   /* blk=bopomofoextended */,
-  {     2,  6918,  9626,  10,   2, UNI_GCB__T }   /* linebreak=jt */,
-  {     1,  9946,  2837,   3,   8, UNI_SUND }   /* issundanese */,
-  {     0,  9647,  8364,   3,   6, UNI_NV__400000 }   /* nv=400000 */,
-  {     0,  8886,  9389,   3,   4, UNI_SOGO }   /* sc=sogo */,
-  {     0,  9113,  7435,   4,   2, UNI_CCC__11 }   /* ccc=11 */,
-  {     1,  5760,  7158,  13,   9, UNI_NV___MINUS_1_SLASH_2 }   /* numericvalue=-5.00e-01 */,
-  {     1,  9093,   779,   4,  29, UNI_ENCLOSEDIDEOGRAPHICSUP }   /* blk=enclosedideographicsupplement */,
-  {     0,  4762,     0,   8,   0, UNI_VEDICEXT }   /* vedicext */,
-  {     0,   184,  7257,   2,   9, UNI_LATINEXTB }   /* islatinextb */,
-  {     3,  9629,  6437,   3,  11, UNI_LB__EX }   /* lb=exclamation */,
-  {     2,   184,  5367,   2,  14, UNI_SUPPUNCTUATION }   /* issuppunctuation */,
-  {     0,  9365,  7118,   4,   4, UNI_WARA }   /* scx=wara */,
-  {     7,  7018,  9551,  10,   3, UNI_IN__3_DOT_2 }   /* presentin=3.2 */,
-  {     0,  9593,  4283,   4,  14, UNI_BC__BN }   /* bc=boundaryneutral */,
-  {     1,  4267,     0,   8,   0, UNI_BAMUMSUP }   /* bamumsup */,
-  {     2,  9365,  7995,   4,   7, UNI_AVST }   /* scx=avestan */,
-  {     6,  9662,    26,   3,   1, UNI_SD }   /* sd=y */,
-  {     3,  3671,  7356,  17,   9, UNI_PALM }   /* scriptextensions=palmyrene */,
-  {     9,  9113,  7683,   4,   2, UNI_CCC__26 }   /* ccc=26 */,
-  {     0,  9169,     0,   4,   0, UNI_GUJR }   /* gujr */,
-  {     3,  9909,     0,  12,   0, UNI_POSIXBLANK }   /* isposixblank */,
-  {     1,  7419,    36,   9,   1, UNI_XIDS }   /* xidstart=t */,
-  {     0,  8233,  7008,   7,  10, UNI_PHNX }   /* script=phoenician */,
-  {     1,  9153,    34,   4,   6, UNI_GCB__EX }   /* gcb=extend */,
-  {     2,  9365,  2333,   4,   4, UNI_GLAG }   /* scx=glag */,
-  {    12,  8233,  9229,   7,   4, UNI_SC__LINB }   /* script=linb */,
-  {     2,   184,  2931,   3,  17, UNI_CHEROKEESUP }   /* ischerokeesupplement */,
-  {     8,  8684,     1,   5,   1, -UNI_POSIXXDIGIT }   /* ahex=n */,
-  {     0,  3671,  8002,  17,   7, UNI_BENG }   /* scriptextensions=bengali */,
-  {     4,  8424,  8568,   6,   6, UNI_INLYDIAN }   /* block=lydian */,
-  {     2,  8233,  8191,   7,   7, UNI_OLCK }   /* script=olchiki */,
-  {     0,  3671,  1192,  17,   4, UNI_KANA }   /* scriptextensions=kana */,
-  {     0,  9593,   835,   3,   2, UNI_BC__WS }   /* bc=ws */,
-  {     1,   184,  3980,   2,  16, UNI_LINEARBIDEOGRAMS }   /* islinearbideograms */,
-  {    13,  5325,    26,  14,   1, UNI_QMARK }   /* quotationmark=y */,
-  {     0,  1773,    26,   6,   1, UNI_CASED }   /* cased=y */,
-  {     0,  6316,    26,  11,   1, UNI_IDC }   /* idcontinue=y */,
-  {     3,  9093,  2169,   4,  14, UNI_MEETEIMAYEKEXT }   /* blk=meeteimayekext */,
-  {     2,  9365,  2006,   4,   4, UNI_MODI }   /* scx=modi */,
-  {     2,  8233,  3984,   8,   3, UNI_SARB }   /* script=sarb */,
-  {     5,  9935,  3248,   5,   5, UNI_XPOSIXSPACE }   /* xperlspace */,
-  {     0,  9629,  6968,   3,  10, UNI_LB__NS }   /* lb=nonstarter */,
-  {     1,  9141,   995,   4,   2, -UNI_DIA }   /* dia=no */,
-  {     1,  1084,    26,  26,   1, UNI_CWKCF }   /* changeswhennfkccasefolded=y */,
-  {    14,  9593,    32,   3,   2, UNI_BC__CS }   /* bc=cs */,
-  {     0,  9093,  3290,   4,   4, UNI_RUMI }   /* blk=rumi */,
-  {     8,  8886,   829,   4,   3, UNI_SC__KNDA }   /* sc=knda */,
-  {     1,  4717,     0,   8,   0, UNI_TAMILSUP }   /* tamilsup */,
-  {     1,  9946,  6992,   3,   3, UNI_SOGD }   /* issogd */,
-  {     2,  1362,  8835,  25,   4, UNI_CCC__91 }   /* canonicalcombiningclass=ccc91 */,
-  {     1,  7128,  5625,  10,   2, UNI_WB__ML }   /* wordbreak=ml */,
-  {     3,  3002,  1279,  18,   3, UNI_DT__SUB }   /* decompositiontype=sub */,
-  {     0,  3290,     0,   4,   0, UNI_RUMI }   /* rumi */,
-  {     2,  1362,  6404,  24,  11, UNI_CCC__DB }   /* canonicalcombiningclass=doublebelow */,
-  {     4,  3210,     0,   8,   0, UNI_DINGBATS }   /* dingbats */,
-  {     5,  9365,  2127,   4,  14, UNI_ROHG }   /* scx=hanifirohingya */,
-  {     2,  5760,  9037,  13,   4, UNI_NV__5_SLASH_12 }   /* numericvalue=5/12 */,
-  {     5,  6567,   287,   6,  29, UNI_MISCMATHSYMBOLSB }   /* inmiscellaneousmathematicalsymbolsb */,
-  {     0,  8412,  9734,   6,   3, UNI_BIDIC }   /* bidic=yes */,
-  {     1,  9093,  1622,   4,  14, UNI_LATINEXTA }   /* blk=latinextendeda */,
-  {     0,  3705,     0,  17,   0, UNI_SMALLFORMS }   /* smallformvariants */,
-  {     1,  1362,  3441,  24,   9, UNI_CCC__BL }   /* canonicalcombiningclass=belowleft */,
-  {     1,  7844,     0,   8,   0, UNI_GUJR }   /* gujarati */,
-  {     8,  8233,  2532,   7,   6, UNI_BRAH }   /* script=brahmi */,
-  {     0,  9465,     0,   4,   0, UNI_XPEO }   /* xpeo */,
-  {     5,  6567,   206,   6,  11, UNI_MISCPICTOGRAPHS }   /* inmiscpictographs */,
-  {     2,  9093,  7812,   4,   8, UNI_INDUPLOYAN }   /* blk=duployan */,
-  {     0,  1924,     0,  10,   1, UNI_UPPERCASELETTER }   /* category=lu */,
-  {    11,  3671,  7375,  18,   8, UNI_SAMR }   /* scriptextensions=samaritan */,
-  {     1,  8424,  7365,   6,   9, UNI_INPAUCINHAU }   /* block=paucinhau */,
-  {     1,  9623,  5073,   3,  14, UNI_JG__MANICHAEANAYIN }   /* jg=manichaeanayin */,
-  {     2,  5339,   495,  14,   7, UNI_SB__NU }   /* sentencebreak=numeric */,
-  {     0,  6768,  4994,   3,   9, UNI_YIRADICALS }   /* isyiradicals */,
-  {     0,  2127,     0,   4,   0, UNI_HAN }   /* hani */,
-  {     6,  8233,  9281,   7,   4, UNI_NEWA }   /* script=newa */,
-  {     0,  3964,     0,  16,   0, UNI_LATIN1 }   /* latin1supplement */,
-  {     2,  6828,     8,  10,   2, UNI_BC__AN }   /* bidiclass=an */,
-  {     0,  8424,  8142,   6,   7, UNI_INMARCHEN }   /* block=marchen */,
-  {     0,  8886,  9317,   3,   4, UNI_SC__PHLP }   /* sc=phlp */,
-  {     0,  5809,     0,   2,   0, UNI_PF }   /* pf */,
-  {     0,  8424,    43,   7,  35, UNI_CJKCOMPATIDEOGRAPHSSUP }   /* block=cjkcompatibilityideographssupplement */,
-  {     4,   184,  6279,   2,  12, UNI_PLAYINGCARDS }   /* isplayingcards */,
-  {     0,  9093,  8016,   4,   7, UNI_CJKEXTB }   /* blk=cjkextb */,
-  {     0,  2238,     0,   3,   0, UNI_XPOSIXXDIGIT }   /* hex */,
-  {     0,  9623,  4562,   3,   5, UNI_JG__SADHE }   /* jg=sadhe */,
-  {     6,  8886,  8128,   3,   4, UNI_MAKA }   /* sc=maka */,
-  {     2,   184,  9333,   2,   4, UNI_COPT }   /* isqaac */,
-  {     1,  9623,  8964,   3,   5, UNI_JG__ZHAIN }   /* jg=zhain */,
-  {     1,  9593,  9653,   3,   3, UNI_BC__PDF }   /* bc=pdf */,
-  {     2,  9093,  4717,   4,   5, UNI_INTAMIL }   /* blk=tamil */,
-  {     0,  5565,  5669,  13,  13, UNI_JG__MANICHAEANONE }   /* joininggroup=manichaeanone */,
-  {     8,  8879,  2473,   5,   3, UNI_INPC__TOP }   /* inpc=top */,
-  {     6,  9731,   125,   3,   2, UNI_LB__CR }   /* wb=cr */,
-  {     1,   184,  3552,   2,  16, UNI_ETHIOPICEXT }   /* isethiopicextended */,
-  {     1,  6885,  1086,   3,   3, UNI_HANG }   /* ishang */,
-  {     4,  8886,  1599,   3,   6, UNI_SC__HANG }   /* sc=hangul */,
-  {     4,  8233,  9253,   7,   4, UNI_MIAO }   /* script=miao */,
-  {     1,  3398,    26,  18,   1, UNI_VS }   /* variationselector=y */,
-  {     0,  7018,  9701,  10,   3, UNI_IN__5_DOT_2 }   /* presentin=v52 */,
-  {     1,  9608,  1174,   3,   9, UNI_EA__F }   /* ea=fullwidth */,
-  {    12,  8960,    36,   4,   1, UNI_IDS }   /* ids=t */,
-  {     0,  3671,  9277,  17,   4, UNI_NBAT }   /* scriptextensions=nbat */,
-  {     0,  3671,  8502,  17,   4, UNI_GOTH }   /* scriptextensions=goth */,
-  {     1,  3671,  9305,  17,   4, UNI_ORYA }   /* scriptextensions=orya */,
-  {     1,  7221,     0,   9,   0, UNI_EMOTICONS }   /* emoticons */,
-  {     3,  9629,   414,   3,  11, UNI_LB__ID }   /* lb=ideographic */,
-  {     6,   512,     0,  16,   0, UNI_UIDEO }   /* unifiedideograph */,
-  {    32,  3868,    32,  16,   2, UNI__PERL_SURROGATE }   /* generalcategory=cs */,
-  {     0,  8418,    36,   6,   1, UNI_BIDIM }   /* bidim=t */,
-  {     2,  3002,  2493,  18,   8, UNI_DT__VERT }   /* decompositiontype=vertical */,
-  {     9,  6928,  8864,  10,   5, -UNI_XPOSIXLOWER }   /* lowercase=false */,
-  {     2,  8849,    36,   5,   1, UNI_CWCM }   /* cwcm=t */,
-  {     0,  5565,  6701,  13,  11, UNI_JG__STRAIGHTWAW }   /* joininggroup=straightwaw */,
-  {     1,  9623,  4954,   3,   3, UNI_JG__HEH }   /* jg=heh */,
-  {     0,   184,  3884,   2,  11, UNI_GEORGIANEXT }   /* isgeorgianext */,
-  {     2,  8879,  6268,   3,   7, UNI_PHAISTOS }   /* inphaistos */,
-  {     0,  8886,  7118,   3,   4, UNI_WARA }   /* sc=wara */,
-  {     0,  6918,    83,  10,   2, UNI_LB__CM }   /* linebreak=cm */,
-  {     3,   117,  1853,   4,  14, UNI_INDICNUMBERFORMS }   /* inindicnumberforms */,
-  {     1,  1497,  4747,   9,  15, UNI_UPPERCASELETTER }   /* category=uppercaseletter */,
-  {     0,  4961,     0,  14,   0, UNI_HIGHSURROGATES }   /* highsurrogates */,
-  {     2,  8233,  9277,   7,   4, UNI_NBAT }   /* script=nbat */,
-  {     2,  3518,     0,  17,   0, UNI_CYRILLICEXTB }   /* cyrillicextendedb */,
-  {     9,  1911,  3948,  22,  16, UNI_INSC__INVISIBLESTACKER }   /* indicsyllabiccategory=invisiblestacker */,
-  {     2,  3671,  9317,  17,   4, UNI_PHLP }   /* scriptextensions=phlp */,
-  {     0,  5617,     0,   9,   0, UNI_MLYM }   /* malayalam */,
-  {     6,  5760,  8669,  13,   5, UNI_NV__1_SLASH_320 }   /* numericvalue=1/320 */,
-  {     0,  3868,  4687,  16,  15, UNI_PS }   /* generalcategory=openpunctuation */,
-  {     9,  9093,  4172,   4,  16, UNI_SUPMATHOPERATORS }   /* blk=supmathoperators */,
-  {     2,  9093,  8538,   4,   6, UNI_INKHOJKI }   /* blk=khojki */,
-  {     1,  8635,  9433,   5,   4, UNI_IDEO }   /* ideo=true */,
-  {     1,  4826,   995,   9,   2, -UNI_XPOSIXXDIGIT }   /* hexdigit=no */,
-  {     0,  3671,  7356,  17,   4, UNI_PALM }   /* scriptextensions=palm */,
-  {     4,  3671,  1085,  17,   4, UNI_HANG }   /* scriptextensions=hang */,
-  {     4,  9093,  4863,   4,  14, UNI_CJKCOMPATFORMS }   /* blk=cjkcompatforms */,
-  {     1,  9909,    62,   7,   5, UNI_POSIXGRAPH }   /* isposixgraph */,
-  {     1,  3552,     0,  17,   0, UNI_ETHIOPICEXTA }   /* ethiopicextendeda */,
-  {     0,  8939,     0,   5,   0, UNI_TALE }   /* taile */,
-  {     0,  8424,  2931,   7,  17, UNI_CHEROKEESUP }   /* block=cherokeesupplement */,
-  {     3,   184,   878,   2,  14, UNI_PUA }   /* isprivateusearea */,
-  {     0,  8142,     0,   4,   0, UNI_MARC }   /* marc */,
-  {     0,   183,     0,  34,   0, UNI_MISCPICTOGRAPHS }   /* miscellaneoussymbolsandpictographs */,
-  {     2,  9113,  8832,   4,   2, UNI_CCC__84 }   /* ccc=84 */,
-  {    13,  9093,  8142,   4,   7, UNI_INMARCHEN }   /* blk=marchen */,
-  {     4,  3671,  8255,  18,   6, UNI_SIDD }   /* scriptextensions=siddham */,
-  {     0,  4361,  3095,   5,  15, UNI_INPUNCTUATION }   /* ingeneralpunctuation */,
-  {     4,  1362,  8822,  24,   2, UNI_CCC__35 }   /* canonicalcombiningclass=35 */,
-  {     0,  6885,  2647,   3,   9, UNI_JAMO }   /* ishanguljamo */,
-  {     1,  4076,     0,  16,   0, UNI_MISCMATHSYMBOLSA }   /* miscmathsymbolsa */,
-  {     0,  9113,  7507,   4,   2, UNI_CCC__12 }   /* ccc=12 */,
-  {     0,  8332,  8680,   3,   4, UNI_ADLM }   /* isadlam */,
-  {     0,  8886,  4108,   3,   7, UNI_SC__MYMR }   /* sc=myanmar */,
-  {     4,  9093,  1531,   5,  22, UNI_BYZANTINEMUSIC }   /* blk=byzantinemusicalsymbols */,
-  {     0,  8424,  5721,   6,  13, UNI_MAYANNUMERALS }   /* block=mayannumerals */,
-  {     0,  8598,    26,   6,   1, UNI__PERL_PATWS }   /* patws=y */,
-  {    22,  3671,  6691,  18,  10, UNI_SORA }   /* scriptextensions=sorasompeng */,
-  {     1,  9731,   108,   3,   2, UNI_WB__MB }   /* wb=mb */,
-  {     1,  8338,    36,   7,   1, UNI_XPOSIXSPACE }   /* wspace=t */,
-  {    19,  8233,  8502,   7,   4, UNI_GOTH }   /* script=goth */,
-  {     1,  1362,  8451,  24,   3, UNI_CCC__118 }   /* canonicalcombiningclass=118 */,
-  {     4,  9620,  2192,   3,   2, UNI_PD }   /* gc=pd */,
-  {     3,  3671,  8894,  17,   4, UNI_LIMB }   /* scriptextensions=limb */,
-  {     2,    21,  3964,   2,   6, UNI_LATIN1 }   /* inlatin1 */,
-  {     0,  9093,  1668,   4,  23, UNI_SUPPUNCTUATION }   /* blk=supplementalpunctuation */,
-  {     0,  8261,     0,   7,   0, UNI_SOYO }   /* soyombo */,
-  {     6,  5760,  7492,  13,   8, UNI_NV__1_SLASH_6 }   /* numericvalue=1.67e-01 */,
-  {     0,  8886,  7892,   3,   4, UNI_SC__JAVA }   /* sc=java */,
-  {     0,  8424,  1314,   6,  24, UNI_ARABICPFA }   /* block=arabicpresentationformsa */,
-  {     2,   184,  4124,   2,  16, UNI_MYANMAREXTB }   /* ismyanmarextendedb */,
-  {     0,  9125,     0,   3,   0, UNI_CWT }   /* cwt */,
-  {     2,   184,  7313,   3,   2, UNI_CWT }   /* iscwt */,
-  {    16,  5565,  5171,  13,  14, UNI_JG__MANICHAEANTETH }   /* joininggroup=manichaeanteth */,
-  {     2,  9623,  4060,   3,  16, UNI_JG__MANICHAEANTWENTY }   /* jg=manichaeantwenty */,
-  {     0,  1497,  3820,   9,  16, UNI_PE }   /* category=closepunctuation */,
-  {     0,   184,  5604,   2,  13, UNI_LOWSURROGATES }   /* islowsurrogates */,
-  {     0,  8296,     0,   7,   0, UNI_TAVT }   /* taiviet */,
-  {     6,  9113,  8455,   5,   5, UNI_CCC__122 }   /* ccc=ccc122 */,
-  {     1,   184,  7374,   2,   9, UNI_SAMR }   /* issamaritan */,
-  {     1,  9093,  8430,   4,   6, UNI_INCARIAN }   /* blk=carian */,
-  {     1,  7018,  7548,  10,   3, UNI_IN__3_DOT_1 }   /* presentin=3.1 */,
-  {     0,  8886,  9453,   3,   3, UNI_VAI }   /* sc=vai */,
-  {     1,  8886,    78,   3,   6, UNI_SC__ARAB }   /* sc=arabic */,
-  {     2,  8508,     1,   6,   1, -UNI_GREXT }   /* grext=n */,
-  {    13,  8871,   112,   3,   2, UNI_SB__SC }   /* sb=sc */,
-  {     1,  3002,   719,  18,   3, UNI_DT__ENC }   /* decompositiontype=enc */,
-  {    11,  1136,   995,  26,   2, -UNI_DI }   /* defaultignorablecodepoint=no */,
-  {     0,  9113,  8449,   5,   4, UNI_CCC__11 }   /* ccc=ccc11 */,
-  {     1,  9113,  8464,   4,   2, UNI_CCC__29 }   /* ccc=29 */,
-  {     0,  9593,    18,   3,   1, UNI_BC__R }   /* bc=r */,
-  {     0,  5325,    36,  14,   1, UNI_QMARK }   /* quotationmark=t */,
-  {     4,  1362,  9077,  24,   3, UNI_CCC__202 }   /* canonicalcombiningclass=atb */,
-  {     0,  8233,  9317,   7,   4, UNI_SC__PHLP }   /* script=phlp */,
-  {     8,  8424,  5526,   6,   8, UNI_GREEKEXT }   /* block=greekext */,
-  {    13,  9620,    74,   3,   2, UNI_ME }   /* gc=me */,
-  {     0,  1911,  6219,  22,  12, UNI_INSC__NUMBERJOINER }   /* indicsyllabiccategory=numberjoiner */,
-  {     2,  9093,  3552,   4,  17, UNI_ETHIOPICEXTA }   /* blk=ethiopicextendeda */,
-  {     0,  9623,  6123,   3,  12, UNI_JG__MALAYALAMSSA }   /* jg=malayalamssa */,
-  {     1,  6246,     0,   4,   0, UNI_HUNG }   /* hung */,
-  {     0,  3868,  4732,  16,  15, UNI_TITLE }   /* generalcategory=titlecaseletter */,
-  {     2,  9629,   721,   3,   2, UNI_LB__CL }   /* lb=cl */,
-  {     1,  9623,  5143,   3,  14, UNI_JG__MANICHAEANQOPH }   /* jg=manichaeanqoph */,
-  {     0,   184,     2,   3,   1, UNI_CI }   /* isci */,
-  {     2,  8424,  8679,   6,   5, UNI_INADLAM }   /* block=adlam */,
-  {     8,   184,  3772,   2,  16, UNI_BOPOMOFOEXT }   /* isbopomofoextended */,
-  {     8,  5435,     0,   5,   0, UNI_BIDIM }   /* bidim */,
-  {     0,  3722,     0,  17,   0, UNI_SUTTONSIGNWRITING }   /* suttonsignwriting */,
-  {     0,  8510,    26,   4,   1, UNI_EXT }   /* ext=y */,
-  {     0,  8871,   339,   3,   2, UNI_SB__LO }   /* sb=lo */,
-  {     0,   184,  9173,   2,   4, UNI_GURU }   /* isguru */,
-  {     5,  6885,  1600,   3,  22, UNI_COMPATJAMO }   /* ishangulcompatibilityjamo */,
-  {     1,  8886,  3110,   3,   8, UNI_SC__GEOR }   /* sc=georgian */,
-  {     5,  9365,  9349,   4,   4, UNI_ROHG }   /* scx=rohg */,
-  {     2,   184,  7078,   2,  10, UNI_SUPARROWSB }   /* issuparrowsb */,
-  {     2,  8886,  1845,   3,   6, UNI_SC__ZYYY }   /* sc=common */,
-  {     0,  5339,    72,  14,   2, UNI_SB__LE }   /* sentencebreak=le */,
-  {     0,  8640,  9433,   6,   4, UNI_XPOSIXUPPER }   /* upper=true */,
-  {     2,  9093,  3586,   4,  17, UNI_INDICSIYAQNUMBERS }   /* blk=indicsiyaqnumbers */,
-  {     1,  9365,  8128,   4,   7, UNI_MAKA }   /* scx=makasar */,
-  {     1,  7025,  5409,   3,   2, UNI_IN__10 }   /* in=10 */,
-  {     2,  9093,  8135,   4,   7, UNI_INMANDAIC }   /* blk=mandaic */,
-  {     0,  9093,  5003,   4,  14, UNI_LATINEXTB }   /* blk=latinextendedb */,
-  {     0,  6567,   254,   6,  29, UNI_MISCMATHSYMBOLSA }   /* inmiscellaneousmathematicalsymbolsa */,
-  {     6,  4717,     0,   5,   0, UNI_TAML }   /* tamil */,
-  {     0,  8424,  3110,   6,   8, UNI_INGEORGIAN }   /* block=georgian */,
-  {    17,  9623,  5381,   3,  10, UNI_JG__TEHMARBUTA }   /* jg=tehmarbuta */,
-  {     1,  4778,  4748,   3,  14, UNI_UPPERCASELETTER }   /* isuppercaseletter */,
-  {     3,  1362,  7763,  24,   2, UNI_CCC__19 }   /* canonicalcombiningclass=19 */,
-  {     1,  8233,  7203,   7,   9, UNI_BHKS }   /* script=bhaiksuki */,
-  {     0,  2106,  5520,  21,   5, UNI_WB__EB }   /* graphemeclusterbreak=ebase */,
-  {     5,  9113,  8457,   4,   3, UNI_CCC__122 }   /* ccc=122 */,
-  {     1,  8886,  9457,   3,   4, UNI_WCHO }   /* sc=wcho */,
-  {     7,  3868,  4507,  16,  15, UNI_LOWERCASELETTER }   /* generalcategory=lowercaseletter */,
-  {     1,  9093,  3416,   4,  17, UNI_ALCHEMICAL }   /* blk=alchemicalsymbols */,
-  {     1,  5760,  8400,  13,   2, UNI_NV__90 }   /* numericvalue=90 */,
-  {     4,  8332,  5423,   3,  12, UNI_AEGEANNUMBERS }   /* isaegeannumbers */,
-  {     5,  5760,  7644,  13,   8, UNI_NV__11_SLASH_2 }   /* numericvalue=5.50e+00 */,
-  {     0,  8424,  9253,   6,   4, UNI_INMIAO }   /* block=miao */,
-  {     2,  6885,    34,   3,   2, UNI_XPOSIXXDIGIT }   /* ishex */,
-  {     0,   382,     0,  32,   0, UNI_EGYPTIANHIEROGLYPHFORMATCONTROLS }   /* egyptianhieroglyphformatcontrols */,
-  {     0,  8424,  3308,   6,  12, UNI_SMALLKANAEXT }   /* block=smallkanaext */,
-  {     1,  8496,    36,   6,   1, UNI_CWKCF }   /* cwkcf=t */,
-  {     1,  9397,     0,   4,   0, UNI_TAGS }   /* tags */,
-  {     0,  4933,     0,  14,   0, UNI_INGREEK }   /* greekandcoptic */,
-  {     8,  8844,     1,   5,   1, -UNI_CWCF }   /* cwcf=n */,
-  {     0,   184,  9261,   2,   4, UNI_MRO }   /* ismroo */,
-  {     2,  9365,  9169,   4,   4, UNI_GUJR }   /* scx=gujr */,
-  {     0,  1362,  8352,  24,   3, UNI_CCC__216 }   /* canonicalcombiningclass=216 */,
-  {     0,  9365,  7812,   4,   8, UNI_DUPL }   /* scx=duployan */,
-  {     2,  8100,    36,   7,   1, UNI_HYPHEN }   /* hyphen=t */,
-  {    16,  9623,  4038,   3,   3, UNI_JG__LAM }   /* jg=lam */,
-  {     4,  1497,    45,   9,   2, UNI_CO }   /* category=co */,
-  {     0,  8233,   493,   7,   3, UNI_SC__HAN }   /* script=han */,
-  {     4,  3868,  4140,  16,   5, UNI_C }   /* generalcategory=other */,
-  {     1,   184,  3964,   2,   9, UNI_LATIN1 }   /* islatin1sup */,
-  {     1,  9049,  7508,   4,   3, UNI_AGE__2 }   /* age=2.0 */,
-  {     2,  9620,   206,   3,   2, UNI_PI }   /* gc=pi */,
-  {     0,  8424,  8065,   6,   7, UNI_INELBASAN }   /* block=elbasan */,
-  {     4,  5325,  8864,  14,   5, -UNI_QMARK }   /* quotationmark=false */,
-  {     3,  5513,     0,  13,   0, UNI_grbase_values_index }   /* graphemebase= */,
-  {     1,  9113,    24,   4,   1, UNI_CCC__L }   /* ccc=l */,
-  {     7,  7018,  9698,  10,   3, UNI_IN__5_DOT_1 }   /* presentin=v51 */,
-  {     0,  1192,     0,   4,   0, UNI_KANA }   /* kana */,
-  {     8,  8233,  9169,   7,   4, UNI_SC__GUJR }   /* script=gujr */,
-  {     0,  1576,     0,  15,   0, UNI_GEOMETRICSHAPES }   /* geometricshapes */,
-  {     4,  9629,  9757,   3,   2, UNI_LB__H2 }   /* lb=h2 */,
-  {     1,  6003,    26,  12,   1, UNI_JOINC }   /* joincontrol=y */,
-  {     1,  8960,    26,   4,   1, UNI_IDS }   /* ids=y */,
-  {     0,  9093,  7329,   4,   9, UNI_INOLDITALIC }   /* blk=olditalic */,
-  {     1,  9305,     0,   4,   0, UNI_ORYA }   /* orya */,
-  {    11,  8959,  8864,   5,   5, -UNI_XIDS }   /* xids=false */,
-  {    20,  5760,  8358,  13,   6, UNI_NV__300000 }   /* numericvalue=300000 */,
-  {     0,  9623,  5171,   3,  14, UNI_JG__MANICHAEANTETH }   /* jg=manichaeanteth */,
-  {     8,  9620,  9777,   3,   2, UNI_ZP }   /* gc=zp */,
-  {     4,  9728,     3,   3,   1, -UNI_VS }   /* vs=f */,
-  {     0,  6918,  4195,  10,   9, UNI_LB__EM }   /* linebreak=emodifier */,
-  {     1,  8879,  2479,   5,  14, UNI_INPC__BOTTOMANDRIGHT }   /* inpc=bottomandright */,
-  {     0,  9365,  7329,   4,   9, UNI_ITAL }   /* scx=olditalic */,
-  {     0,  5721,     0,  13,   0, UNI_MAYANNUMERALS }   /* mayannumerals */,
-  {     3,  3326,     0,  11,   0, UNI_TAIXUANJING }   /* taixuanjing */,
-  {     2,  1362,     0,  24,   0, UNI_ccc_values_index }   /* canonicalcombiningclass= */,
-  {     0,  8622,     0,   4,   0, UNI_TELU }   /* telu */,
-  {     6,  4462,   995,  15,   2, -UNI_GREXT }   /* graphemeextend=no */,
-  {     2,  7108,     0,  10,   0, UNI_upper_values_index }   /* uppercase= */,
-  {    16,  3671,  3110,  17,   8, UNI_GEOR }   /* scriptextensions=georgian */,
-  {     6,   184,  1955,   2,  22, UNI_MISCTECHNICAL }   /* ismiscellaneoustechnical */,
-  {     0,  8233,  9321,   7,   4, UNI_PHNX }   /* script=phnx */,
-  {     9,  9049,  9441,   4,   4, UNI_AGE__11 }   /* age=v110 */,
-  {     8,  8233,  7311,   7,   9, UNI_TALU }   /* script=newtailue */,
-  {     1,  6885,  1163,   3,  25, UNI_HALFANDFULLFORMS }   /* ishalfwidthandfullwidthforms */,
-  {     2,  9113,  5410,   4,   1, UNI_CCC__0 }   /* ccc=0 */,
-  {     0,  9093,  6580,   4,  11, UNI_MYANMAREXTA }   /* blk=myanmarexta */,
-  {    10,  6918,  1110,  10,  26, UNI_LB__CJ }   /* linebreak=conditionaljapanesestarter */,
-  {     1,  2453,   995,  20,   2, -UNI_TERM }   /* terminalpunctuation=no */,
-  {     0,  8233,  7812,   7,   4, UNI_SC__DUPL }   /* script=dupl */,
-  {     1,  8874,  8864,   5,   5, -UNI_IDST }   /* idst=false */,
-  {     7,  9904,   467,   5,   5, UNI_POSIXPUNCT }   /* posixpunct */,
-  {     0,  6885,  4994,   3,   3, UNI_HIRA }   /* ishira */,
-  {     0,  8884,  1553,   5,  23, UNI_INSC__CONSONANTPRECEDINGREPHA }   /* insc=consonantprecedingrepha */,
-  {     1,  6003,  9734,  12,   3, UNI_JOINC }   /* joincontrol=yes */,
-  {     2,  8886,  2127,   3,   4, UNI_SC__HAN }   /* sc=hani */,
-  {     0,  9365,  9225,   4,   4, UNI_LINA }   /* scx=lina */,
-  {     3,  9629,  9755,   3,   2, UNI_LB__BK }   /* lb=bk */,
-  {     0,  9093,   113,   4,  25, UNI_DIACRITICALS }   /* blk=combiningdiacriticalmarks */,
-  {     0,  7025,  9445,   3,   4, UNI_IN__12 }   /* in=v120 */,
-  {     1,  2106,  1057,  21,   7, UNI_GCB__PP }   /* graphemeclusterbreak=prepend */,
-  {     7,  9297,     0,   4,   0, UNI_OLCK }   /* olck */,
-  {     1,  3868,  9775,  16,   2, UNI_ZL }   /* generalcategory=zl */,
-  {     1,  9093,  7078,   4,  10, UNI_SUPARROWSB }   /* blk=suparrowsb */,
-  {     2,  9623,  7392,   3,   9, UNI_JG__SYRIACWAW }   /* jg=syriacwaw */,
-  {     4,  8424,  2855,   6,  19, UNI_SUPARROWSA }   /* block=supplementalarrowsa */,
-  {     4,  9365,  4205,   5,   5, UNI_SYRC }   /* scx=syriac */,
-  {     0,  3671,  9285,  17,   3, UNI_NKO }   /* scriptextensions=nko */,
-  {     1,  3254,  9734,  18,   3, UNI_RI }   /* regionalindicator=yes */,
-  {    17,  5979,  8864,  12,   5, -UNI_IDEO }   /* ideographic=false */,
-  {     1,  7812,     0,   8,   0, UNI_DUPL }   /* duployan */,
-  {     5,  5760,  7540,  13,   3, UNI_NV__200 }   /* numericvalue=200 */,
-  {     0,  9365,  9394,   5,   3, UNI_SYRC }   /* scx=syrc */,
-  {     3,  7108,     1,  10,   1, -UNI_XPOSIXUPPER }   /* uppercase=n */,
-  {     0,   184,  9285,   2,   4, UNI_NKO }   /* isnkoo */,
-  {     0,   569,     0,  30,   0, UNI_CJKEXTC }   /* cjkunifiedideographsextensionc */,
-  {     1,  1136,     3,  26,   1, -UNI_DI }   /* defaultignorablecodepoint=f */,
-  {     2,  5591,     0,  13,   0, UNI_ZL }   /* lineseparator */,
-  {     0,  5565,  9617,  13,   3, UNI_JG__GAF }   /* joininggroup=gaf */,
-  {     3,  1977,     3,  22,   1, -UNI__PERL_NCHAR }   /* noncharactercodepoint=f */,
-  {     1,   184,  3728,   2,  11, UNI_SGNW }   /* issignwriting */,
-  {     1,  4821,  9734,  14,   3, UNI_POSIXXDIGIT }   /* asciihexdigit=yes */,
-  {     2,  1536,   383,   3,  31, UNI_EGYPTIANHIEROGLYPHFORMATCONTROLS }   /* inegyptianhieroglyphformatcontrols */,
-  {     0,  7025,  9674,   3,   3, UNI_IN__2 }   /* in=v20 */,
-  {     2,  8424,  4220,   6,   6, UNI_INTANGUT }   /* block=tangut */,
-  {     8,  8628,     0,   4,   0, UNI_THAA }   /* thaa */,
-  {     8,  8424,  4373,   7,  14, UNI_CONTROLPICTURES }   /* block=controlpictures */,
-  {     1,  8233,  8079,   7,   7, UNI_SC__GRAN }   /* script=grantha */,
-  {    65,  9946,  6724,   3,   3, UNI_SYLO }   /* issylo */,
-  {     1,  8233,  3020,   7,   4, UNI_SC__DEVA }   /* script=deva */,
-  {     1,   184,  4108,   2,  16, UNI_MYANMAREXTA }   /* ismyanmarextendeda */,
-  {     0,  9113,  7614,   4,   2, UNI_CCC__17 }   /* ccc=17 */,
-  {    10,  5760,  8977,  13,   4, UNI_NV__1_SLASH_20 }   /* numericvalue=1/20 */,
-  {     1,  9365,  6051,   4,   4, UNI_MAHJ }   /* scx=mahj */,
-  {     0,  9781,  9883,   6,   9, UNI__PERL_ANY_FOLDS }   /* _perl_any_folds */,
-  {     0,  1757,  9734,  22,   3, UNI_CWL }   /* changeswhenlowercased=yes */,
-  {     1,  8886,  8205,   3,   7, UNI_OSMA }   /* sc=osmanya */,
-  {     3,  8886,  2836,   3,   4, UNI_SUND }   /* sc=sund */,
-  {     0,  6194,  3201,   3,  17, UNI_ORNAMENTALDINGBATS }   /* inornamentaldingbats */,
-  {     0,  9365,  4672,   4,  15, UNI_SARB }   /* scx=oldsoutharabian */,
-  {    14,  8424,  6646,   6,  11, UNI_INPAHAWHHMONG }   /* block=pahawhhmong */,
-  {     2,  8219,     0,   6,   0, UNI_PATSYN }   /* patsyn */,
-  {     0,  9093,  8924,   4,   5, UNI_INORIYA }   /* blk=oriya */,
-  {     0,  9365,  9173,   4,   4, UNI_GURU }   /* scx=guru */,
-  {     2,  9093,  3964,   4,   6, UNI_LATIN1 }   /* blk=latin1 */,
-  {     1,  8510,    36,   4,   1, UNI_EXT }   /* ext=t */,
-  {     2,  9113,  8715,   5,   4, UNI_CCC__14 }   /* ccc=ccc14 */,
-  {     2,  7419,     1,   9,   1, -UNI_XIDS }   /* xidstart=n */,
-  {     1,  1362,  1189,  24,   3, UNI_CCC__214 }   /* canonicalcombiningclass=ata */,
-  {     5,  9093,  4298,   5,  14, UNI_BRAI }   /* blk=braillepatterns */,
-  {     0,  9325,     0,   4,   0, UNI_MIAO }   /* plrd */,
-  {     0,   184,  1387,   3,  23, UNI_CJKSYMBOLS }   /* iscjksymbolsandpunctuation */,
-  {     4,  9137,  9734,   4,   3, UNI_DEP }   /* dep=yes */,
-  {     0,  9125,  9433,   4,   4, UNI_CWT }   /* cwt=true */,
-  {     1,  9629,   395,   3,   2, UNI_LB__GL }   /* lb=gl */,
-  {     0,   184,  3254,   2,  17, UNI_RI }   /* isregionalindicator */,
-  {     1,  8233,  7302,   7,   9, UNI_NBAT }   /* script=nabataean */,
-  {     1,  1497,  1410,   9,  13, UNI_M }   /* category=combiningmark */,
-  {     0,  6885,  2128,   3,   3, UNI_HAN }   /* ishani */,
-  {     0,  1757,  9433,  22,   4, UNI_CWL }   /* changeswhenlowercased=true */,
-  {     1,   184,  3837,   3,   6, UNI_CPRT }   /* iscypriot */,
-  {     0,  3671,  9345,  17,   4, UNI_RJNG }   /* scriptextensions=rjng */,
-  {    10,  3671,  9481,  17,   4, UNI_ZANB }   /* scriptextensions=zanb */,
-  {     1,  8424,  4792,   6,  15, UNI_INZANABAZARSQUARE }   /* block=zanabazarsquare */,
-  {     5,  9049,  7462,   4,   1, UNI_AGE__4 }   /* age=4 */,
-  {     0,  5760,  7555,  13,   2, UNI_NV__23 }   /* numericvalue=23 */,
-  {     4,  8886,  3980,   3,   7, UNI_SC__LINB }   /* sc=linearb */,
-  {     6,  9365,  9485,   4,   4, UNI_QAAI }   /* scx=zinh */,
-  {     0,  9921,     0,   5,   0, UNI_XPOSIXPRINT }   /* print */,
-  {     2,   184,    18,   2,   2, UNI_RI }   /* isri */,
-  {     3,    21,  7148,   2,  10, UNI_YIRADICALS }   /* inyiradicals */,
-  {     6,  4705,    47,   5,   1, UNI_TERM }   /* isterm */,
-  {     1,   184,  7068,   2,  10, UNI_SUPARROWSA }   /* issuparrowsa */,
-  {     9,  1911,  4612,  22,  15, UNI_INSC__MODIFYINGLETTER }   /* indicsyllabiccategory=modifyingletter */,
-  {     0,  5760,  8388,  13,   5, UNI_NV__70000 }   /* numericvalue=70000 */,
-  {     1,  3671,  8107,  17,   7, UNI_KNDA }   /* scriptextensions=kannada */,
-  {     0,  9365,  7956,   4,   8, UNI_TAGB }   /* scx=tagbanwa */,
-  {     0,  5003,     0,  14,   0, UNI_LATINEXTB }   /* latinextendedb */,
-  {     0,  1735,     3,  22,   1, -UNI_CWCM }   /* changeswhencasemapped=f */,
-  {     4,  8149,     0,   4,   0, UNI_MULT }   /* mult */,
-  {     2,  8424,  4267,   6,  15, UNI_BAMUMSUP }   /* block=bamumsupplement */,
-  {     0,   184,  2169,   2,  21, UNI_MEETEIMAYEKEXT }   /* ismeeteimayekextensions */,
-  {     8,  9097,   721,   4,   5, UNI_BPT__C }   /* bpt=close */,
-  {     0,  5339,  1164,  14,   2, UNI_LB__LF }   /* sentencebreak=lf */,
-  {     3,  6816,  1531,   3,  13, UNI_BYZANTINEMUSIC }   /* inbyzantinemusic */,
-  {     0,  8332,    15,   4,   2, UNI_ARAB }   /* isarab */,
-  {     5,  8219,     0,   7,   0, UNI_patsyn_values_index }   /* patsyn= */,
-  {     2,  8424,  1576,   6,  23, UNI_GEOMETRICSHAPESEXT }   /* block=geometricshapesextended */,
-  {     7,  8886,  2085,   3,   8, UNI_SC__CYRL }   /* sc=cyrillic */,
-  {     1,    42,     0,   9,   0, UNI_CJKCOMPAT }   /* cjkcompat */,
-  {     0,  5565,  9477,  13,   4, UNI_JG__ZAIN }   /* joininggroup=zain */,
-  {     6,  9946,  7942,   4,   6, UNI_SPECIALS }   /* isspecials */,
-  {     4,  1239,     3,  25,   1, -UNI_COMPEX }   /* fullcompositionexclusion=f */,
-  {     3,  8086,     0,   6,   0, UNI_GRBASE }   /* grbase */,
-  {     0,  2148,  4205,   3,   5, UNI_INSYRIAC }   /* insyriac */,
-  {     0,    21,  2232,   2,   6, UNI_YIJING }   /* inyijing */,
-  {     0,   316,     0,  33,   0, UNI_SUPMATHOPERATORS }   /* supplementalmathematicaloperators */,
-  {     0,  9731,  5952,   3,   3, UNI_LB__ZWJ }   /* wb=zwj */,
-  {     1,  9781,    25,  29,   1, UNI__PERL_PROBLEMATIC_LOCALE_FOLDS }   /* _perl_problematic_locale_folds */,
-  {     7,  4124,     0,  16,   0, UNI_MYANMAREXTB }   /* myanmarextendedb */,
-  {     8,  9093,  8030,   4,   7, UNI_CJKEXTD }   /* blk=cjkextd */,
-  {     2,  1801,     1,  22,   1, -UNI_CWU }   /* changeswhenuppercased=n */,
-  {     0,  1713,     0,  21,   0, UNI_CWCF }   /* changeswhencasefolded */,
-  {     2,  8424,  3964,   6,  16, UNI_LATIN1 }   /* block=latin1supplement */,
-  {     2,  9647,  8354,   3,   3, UNI_NV__600 }   /* nv=600 */,
-  {     0,  1911,  1553,  22,  23, UNI_INSC__CONSONANTPRECEDINGREPHA }   /* indicsyllabiccategory=consonantprecedingrepha */,
-  {     6,  8854,    26,   5,   1, UNI_DASH }   /* dash=y */,
-  {     0,  9049,  9689,   4,   3, UNI_AGE__4 }   /* age=v40 */,
-  {     0,  8233,  7356,   7,   4, UNI_PALM }   /* script=palm */,
-  {     0,  9321,     0,   4,   0, UNI_PHNX }   /* phnx */,
-  {     2,  6918,    58,  10,   2, UNI_LB__ID }   /* linebreak=id */,
-  {     0,  8496,    26,   6,   1, UNI_CWKCF }   /* cwkcf=y */,
-  {     0,  1668,     0,  23,   0, UNI_SUPPUNCTUATION }   /* supplementalpunctuation */,
-  {     3,  9599,  9734,   3,   3, UNI_CI }   /* ci=yes */,
-  {     0,  8934,     0,   5,   0, UNI_RUNR }   /* runic */,
-  {     0,  2453,     0,  19,   0, UNI_TERM }   /* terminalpunctuation */,
-  {     1,  4447,  8574,  15,   6, UNI_EA__NA }   /* eastasianwidth=narrow */,
-  {    11,  9365,  9181,   4,   4, UNI_HLUW }   /* scx=hluw */,
-  {     5,  2708,  7774,   4,   6, UNI_INARMENIAN }   /* inarmenian */,
-  {     2,   184,  9337,   2,   4, UNI_QAAI }   /* isqaai */,
-  {     0,  9093,  6382,   4,   6, UNI_DOMINO }   /* blk=domino */,
-  {     1,  1536,  3039,   3,   7, UNI_INETHIOPIC }   /* inethiopic */,
-  {     2,  9623,  5692,   3,   3, UNI_JG__TAW }   /* jg=taw */,
-  {     0,  9599,  8864,   3,   5, -UNI_CI }   /* ci=false */,
-  {     1,  9113,  7571,   4,   2, UNI_CCC__33 }   /* ccc=33 */,
-  {     0,  2333,     0,  13,   0, UNI_GLAGOLITICSUP }   /* glagoliticsup */,
-  {     0,  9731,   400,   3,   6, UNI_WB__FO }   /* wb=format */,
-  {     0,  8233,  8107,   7,   7, UNI_SC__KNDA }   /* script=kannada */,
-  {     0,  9401,     0,   4,   0, UNI_TALE }   /* tale */,
-  {     0,  9365,  6646,   4,  11, UNI_HMNG }   /* scx=pahawhhmong */,
-  {     1,  7018,  7668,  10,   3, UNI_IN__6_DOT_2 }   /* presentin=6.2 */,
-  {     2,  8233,  2006,   7,   4, UNI_SC__MODI }   /* script=modi */,
-  {     0,  8135,     0,   7,   0, UNI_MAND }   /* mandaic */,
-  {     2,  8886,  2333,   3,  10, UNI_SC__GLAG }   /* sc=glagolitic */,
-  {     0,  7900,     0,   8,   0, UNI_KANAEXTA }   /* kanaexta */,
-  {     4,  9623,  5097,   3,   4, UNI_JG__BETH }   /* jg=beth */,
-  {     8,  8424,  5872,   7,  11, UNI_CYRILLICEXTA }   /* block=cyrillicexta */,
-  {     3,  9365,  8262,   5,   3, UNI_SOYO }   /* scx=soyo */,
-  {     4,  5760,  8354,  13,   2, UNI_NV__60 }   /* numericvalue=60 */,
-  {     1,  9629,  2368,   3,   2, UNI_LB__HL }   /* lb=hl */,
-  {     0,  9093,  3756,   4,  16, UNI_ARABICSUP }   /* blk=arabicsupplement */,
-  {     2,  8424,  5617,   6,   9, UNI_INMALAYALAM }   /* block=malayalam */,
-  {     0,  8871,   495,   3,   2, UNI_SB__NU }   /* sb=nu */,
-  {     5,  1911,  7780,  22,   8, UNI_INSC__AVAGRAHA }   /* indicsyllabiccategory=avagraha */,
-  {     1,  8233,  8919,   7,   5, UNI_OGAM }   /* script=ogham */,
-  {     9,  9605,    45,   3,   3, UNI_DT__COM }   /* dt=com */,
-  {    12,  9623,  5241,   3,  14, UNI_JG__NOJOININGGROUP }   /* jg=nojoininggroup */,
-  {     0,  3671,  9337,  17,   4, UNI_QAAI }   /* scriptextensions=qaai */,
-  {     8,  8886,  8568,   3,   4, UNI_LYDI }   /* sc=lydi */,
-  {     0,  5565,  6547,  13,  11, UNI_JG__MALAYALAMRA }   /* joininggroup=malayalamra */,
-  {     3,   184,  8550,   2,   6, UNI_LEPC }   /* islepcha */,
-  {     2,  9909,  4828,   7,   6, UNI_POSIXXDIGIT }   /* isposixxdigit */,
-  {     0,  1851,     0,  16,   0, UNI_INDICNUMBERFORMS }   /* indicnumberforms */,
-  {     0,  9113,  7495,   4,   1, UNI_CCC__7 }   /* ccc=7 */,
-  {     5,  6316,     0,  11,   0, UNI_idc_values_index }   /* idcontinue= */,
-  {     0,  8635,    26,   5,   1, UNI_IDEO }   /* ideo=y */,
-  {     0,  5835,   995,  12,   2, -UNI_BIDIC }   /* bidicontrol=no */,
-  {     1,    21,  9233,   2,   4, UNI_LISU }   /* inlisu */,
-  {     0,  8886,  8622,   3,   6, UNI_SC__TELU }   /* sc=telugu */,
-  {     1,  5760,  8674,  13,   5, UNI_NV__11_SLASH_12 }   /* numericvalue=11/12 */,
-  {     0,  3671,  3984,  18,   3, UNI_SARB }   /* scriptextensions=sarb */,
-  {     0,  5760,  9018,  13,   3, UNI_NV__7_SLASH_2 }   /* numericvalue=7/2 */,
-  {     1,   184,  7804,   2,   8, UNI_BUGI }   /* isbuginese */,
-  {     1,  5565,  4947,  13,  14, UNI_JG__HAMZAONHEHGOAL }   /* joininggroup=hamzaonhehgoal */,
-  {     1,  9049,  9704,   4,   3, UNI_AGE__6 }   /* age=v60 */,
-  {     1,  9333,     0,   4,   0, UNI_COPT }   /* qaac */,
-  {     2,  4778,  3026,   3,   3, UNI_UGAR }   /* isugar */,
-  {     2,  1911,     0,  22,   0, UNI_insc_values_index }   /* indicsyllabiccategory= */,
-  {     1,  4172,     0,  16,   0, UNI_SUPMATHOPERATORS }   /* supmathoperators */,
-  {     0,  9093,  4268,   5,  14, UNI_BAMUMSUP }   /* blk=bamumsupplement */,
-  {     0,  9093,   283,   4,  33, UNI_MISCMATHSYMBOLSB }   /* blk=miscellaneousmathematicalsymbolsb */,
-  {     1,  8424,  6558,   6,  11, UNI_INMEDEFAIDRIN }   /* block=medefaidrin */,
-  {     9,  9647,  8989,   3,   3, UNI_NV__1_SLASH_8 }   /* nv=1/8 */,
-  {     8,  6816,  5590,   3,   7, UNI_INBALINESE }   /* inbalinese */,
-  {     2,  1362,    24,  24,   1, UNI_CCC__L }   /* canonicalcombiningclass=l */,
-  {    16,  9093,    78,   4,  10, UNI_ARABICMATH }   /* blk=arabicmath */,
+  {     2,  9768,  9632,   4,   4, UNI_LINA }   /* scx=lina */,
+  {     2,  5791,  6572,  13,   4, UNI_JG__NOON }   /* joininggroup=noon */,
+  {     1,  7325,  9384,   3,   4, UNI_IN__10 }   /* in=10.0 */,
+  {     2,  9488,  7188,   4,  10, UNI_INKHAROSHTHI }   /* blk=kharoshthi */,
+  {     1,  1417,    23,  24,   2, UNI_CCC__AL }   /* canonicalcombiningclass=al */,
+  {     0,   184,  2666,   3,  10, UNI_COUNTINGROD }   /* iscountingrod */,
+  {     0,  1654,     0,  23,   0, UNI_COMPATJAMO }   /* hangulcompatibilityjamo */,
+  {     8,  7158,  9836,  10,   4, UNI_DIA }   /* diacritic=true */,
+  {     2,  8780,  8373,   7,   6, UNI_CJKEXTD }   /* block=cjkextd */,
+  {     1,  5986,  9973,  13,   3, UNI_NV__5_SLASH_6 }   /* numericvalue=5/6 */,
+  {     1, 10027,  6323,   3,   5, UNI_JG__GAMAL }   /* jg=gamal */,
+  {     0,  8900,     0,   6,   0, UNI_KTHI }   /* kaithi */,
+  {     6,  1537,  2455,  24,   5, UNI_INPC__RIGHT }   /* indicpositionalcategory=right */,
+  {     0,  7398,     0,  10,   0, UNI_SUPARROWSC }   /* suparrowsc */,
+  {     1,  9002,     0,   6,   0, UNI_TELU }   /* telugu */,
+  {     4, 10024,  9503,   3,   2, UNI_MC }   /* gc=mc */,
+  {     0,  7218,    18,  10,   2, UNI_RI }   /* linebreak=ri */,
+  {     0,  1856,     0,  21,   0, UNI_CWU }   /* changeswhenuppercased */,
+  {     1,  2779,     0,   3,   0, UNI_IDS }   /* ids */,
+  {     8, 10048,  9061,   3,   4, UNI_NV__1_SLASH_12 }   /* nv=1/12 */,
+  {     0, 10006, 10135,   3,   3, UNI_DI }   /* di=yes */,
+  {     0,  8780,  5947,   6,  13, UNI_MAYANNUMERALS }   /* block=mayannumerals */,
+  {     1,  9444, 10108,   4,   3, UNI_AGE__6_DOT_1 }   /* age=v61 */,
+  {     0,  5186,     0,  14,   0, UNI_HIGHSURROGATES }   /* highsurrogates */,
+  {     0, 10333,  1528,   3,   8, UNI__PERL_SURROGATE }   /* issurrogate */,
+  {     1,  7739,     3,   8,   1, -UNI_IDS }   /* idstart=f */,
+  {     0,   184,  6840,   2,  11, UNI_NAND }   /* isnandinagari */,
+  {     0,   446,     0,  32,   0, UNI_IDEOGRAPHICSYMBOLS }   /* ideographicsymbolsandpunctuation */,
+  {     4,  9448,     0,   4,   0, UNI_AGHB }   /* aghb */,
+  {     3,  3836,  9712,  17,   4, UNI_OSGE }   /* scriptextensions=osge */,
+  {     0,  9270,  7685,   3,   8, UNI_INPAUCINHAU }   /* inpaucinhau */,
+  {     0, 10048,  9055,   3,   3, UNI_NV__1_SLASH_3 }   /* nv=1/3 */,
+  {     7,  1834, 10135,  22,   3, UNI_CWT }   /* changeswhentitlecased=yes */,
+  {     1,  9768,  8414,   4,   7, UNI_ELBA }   /* scx=elbasan */,
+  {     4,  8780,  1673,   6,   4, UNI_JAMO }   /* block=jamo */,
+  {     0,  8688,  5662,   3,  12, UNI_AEGEANNUMBERS }   /* isaegeannumbers */,
+  {     0,  1552,  5040,   9,   5, UNI_XPOSIXDIGIT }   /* category=digit */,
+  {     4, 10296,    25,   3,   1, UNI_PS }   /* isps */,
+  {     0,  1536,     0,   4,   0, UNI_SIND }   /* sind */,
+  {     0,  1417,  8807,  24,   3, UNI_CCC__118 }   /* canonicalcombiningclass=118 */,
+  {     5,  8774,  9836,   6,   4, UNI_BIDIM }   /* bidim=true */,
+  {     2,  9488,   283,   4,  33, UNI_MISCMATHSYMBOLSB }   /* blk=miscellaneousmathematicalsymbolsb */,
+  {     0,  1823,     0,   9,   0, UNI_XPOSIXLOWER }   /* lowercase */,
+  {     1,   184,  8924,   2,   4, UNI_LEPC }   /* islepc */,
+  {     0,  9277,  8243,   3,   8, UNI_SC__MAHJ }   /* sc=mahajani */,
+  {     1,  9277,  9315,   3,   5, UNI_SC__ORYA }   /* sc=oriya */,
+  {     3,  9768,  8936,   4,   6, UNI_LYCI }   /* scx=lycian */,
+  {     1,  5270,     0,  14,   0, UNI_LATINEXTE }   /* latinextendede */,
+  {     1,  3836,  4448,  17,   4, UNI_BAMU }   /* scriptextensions=bamu */,
+  {     0,  8267,    26,   8,   1, UNI_RADICAL }   /* radical=y */,
+  {     0,    32,     0,   2,   0, UNI__PERL_SURROGATE }   /* cs */,
+  {    16,  1417,  3564,  24,  13, UNI_CCC__202 }   /* canonicalcombiningclass=attachedbelow */,
+  {     0, 10024,  4943,   3,  15, UNI_TITLE }   /* gc=titlecaseletter */,
+  {     0,  2182,   406,  21,   7, UNI_GCB__CN }   /* graphemeclusterbreak=control */,
+  {     1,  6241,    24,  12,   1, UNI_JT__L }   /* joiningtype=l */,
+  {     0, 10048,  9973,   3,   3, UNI_NV__5_SLASH_6 }   /* nv=5/6 */,
+  {     1,    21,  7585,   2,   9, UNI_LATINEXTC }   /* inlatinextc */,
+  {     0,  3836,  9864,  17,   4, UNI_WCHO }   /* scriptextensions=wcho */,
+  {     1,  3367,    26,  18,   1, UNI__PERL_PATWS }   /* patternwhitespace=y */,
+  {     0,  8780,  2469,   6,  20, UNI_INNYIAKENGPUACHUEHMONG }   /* block=nyiakengpuachuehmong */,
+  {     1,  8780,   749,   6,  21, UNI_ENCLOSEDALPHANUM }   /* block=enclosedalphanumerics */,
+  {     2,   184,  9576,   2,   4, UNI_GURU }   /* isguru */,
+  {     0, 10333,  9793,   3,   3, UNI_SOGO }   /* issogo */,
+  {     0, 10048,  7771,   3,   8, UNI_NV__1_SLASH_80 }   /* nv=1.25e-02 */,
+  {     1,  9444,  9991,   4,   3, UNI_AGE__9 }   /* age=9.0 */,
+  {     0,  9488,   567,   4,   2, UNI_NB }   /* blk=nb */,
+  {     0,  9488,  1922,   4,  12, UNI_DIACRITICALS }   /* blk=diacriticals */,
+  {    13,  1537,  2555,  24,   6, UNI_INPC__BOTTOM }   /* indicpositionalcategory=bottom */,
+  {     1, 10024,  5497,   3,  11, UNI_MC }   /* gc=spacingmark */,
+  {     3,  2784,    80,   4,   8, UNI_ARABICMATH }   /* inarabicmath */,
+  {     0,  5791,  5620,  13,  14, UNI_JG__HAMZAONHEHGOAL }   /* joininggroup=tehmarbutagoal */,
+  {    32,  4791,  1595,   3,  13, UNI_MUSIC }   /* inmusicalsymbols */,
+  {     0,  8589,  2329,   7,  20, UNI_HLUW }   /* script=anatolianhieroglyphs */,
+  {     0,  7088,  3374,  10,  10, UNI_BC__WS }   /* bidiclass=whitespace */,
+  {     0,   184,  7168,   2,  10, UNI_DIAK }   /* isdivesakuru */,
+  {     0,   184,  9636,   2,   4, UNI_LINB }   /* islinb */,
+  {     0,  9488,  7684,   4,   9, UNI_INPAUCINHAU }   /* blk=paucinhau */,
+  {     0,  6939,     0,  11,   0, UNI_SORA }   /* sorasompeng */,
+  {     3,  9768,  8131,   4,   8, UNI_DUPL }   /* scx=duployan */,
+  {     1,  9488,   629,   4,  30, UNI_CJKEXTE }   /* blk=cjkunifiedideographsextensione */,
+  {     8,  9488,  2098,   4,  21, UNI_CJKCOMPATFORMS }   /* blk=cjkcompatibilityforms */,
+  {     1, 10290,    96,   6,   5, UNI_XPOSIXALPHA }   /* xposixalpha */,
+  {     1,  9732,     0,   4,   0, UNI_PRTI }   /* prti */,
+  {     0,  8589,  3241,   7,   8, UNI_SC__GEOR }   /* script=georgian */,
+  {     1,  5032,     0,  14,   0, UNI_ahex_values_index }   /* asciihexdigit= */,
+  {     1,  3529,    36,  18,   1, UNI_VS }   /* variationselector=t */,
+  {     0,  2569,   409,  20,   2, UNI_VO__TR }   /* verticalorientation=tr */,
+  {     3,  2182,  6763,  21,   3, UNI_LB__H3 }   /* graphemeclusterbreak=lvt */,
+  {     1,  9768,  8299,   4,   8, UNI_TFNG }   /* scx=tifinagh */,
+  {     0,  6553,     0,  11,   0, UNI_XIDC }   /* xidcontinue */,
+  {     0,  3836,  4793,  17,  15, UNI_MERC }   /* scriptextensions=meroiticcursive */,
+  {    10,   341,     0,   2,   0, UNI_PE }   /* pe */,
+  {     1,  3097,  8846,  18,   6, UNI_DT__ENC }   /* decompositiontype=circle */,
+  {     2,  4688,  6609,  15,  10, UNI_DEP }   /* identifiertype=deprecated */,
+  {     0,   184,  9231,   3,   3, UNI_CWCF }   /* iscwcf */,
+  {     2,  8780,  6829,   6,  11, UNI_MYANMAREXTB }   /* block=myanmarextb */,
+  {     0,  5986,  7781,  13,   1, UNI_NV__4 }   /* numericvalue=4 */,
+  {     1,     0,     0,  34,   0, UNI_UCAS }   /* unifiedcanadianaboriginalsyllabics */,
+  {     1,  1417,  3007,  24,  18, UNI_CCC__216 }   /* canonicalcombiningclass=attachedaboveright */,
+  {     1,  1966,  9090,  22,   5, UNI_INSC__BINDU }   /* indicsyllabiccategory=bindu */,
+  {     0,  6229,  1025,  12,   2, -UNI_JOINC }   /* joincontrol=no */,
+  {     2,  9997,  2893,   3,  19, UNI_BC__RLO }   /* bc=righttoleftoverride */,
+  {     5,  8780,   149,   7,  34, UNI_DIACRITICALSSUP }   /* block=combiningdiacriticalmarkssupplement */,
+  {     1,  9528,     0,   4,   0, UNI_cwu_values_index }   /* cwu= */,
+  {     0,  9277,  9440,   3,   4, UNI_SC__ADLM }   /* sc=adlm */,
+  {     1,  9488,  9032,   4,   6, UNI_INWANCHO }   /* blk=wancho */,
+  {     7, 10048,  8756,   3,   2, UNI_NV__90 }   /* nv=90 */,
+  {     0,  9277,  9812,   3,   4, UNI_SC__TAML }   /* sc=taml */,
+  {     8,  5986,  8720,  13,   6, UNI_NV__400000 }   /* numericvalue=400000 */,
+  {     1, 10009,  1253,   3,   4, UNI_DT__INIT }   /* dt=init */,
+  {     0,  7218,   866,  10,   2, UNI_LB__SP }   /* linebreak=sp */,
+  {     3,  9997,  2449,   3,  11, UNI_BC__L }   /* bc=lefttoright */,
+  {     2,  3115,     0,  13,   0, UNI_DEVANAGARIEXT }   /* devanagariext */,
+  {     1,  5791,  3785,  13,  17, UNI_JG__MANICHAEANDHAMEDH }   /* joininggroup=manichaeandhamedh */,
+  {     1,  9508,  7178,   4,  10, UNI_CCC__6 }   /* ccc=hanreading */,
+  {     4,  5986,  8750,  13,   3, UNI_NV__800 }   /* numericvalue=800 */,
+  {     5,  5060,  9255,  14,   5, -UNI_CI }   /* caseignorable=false */,
+  {     2,   184,  6818,   2,  11, UNI_MYANMAREXTA }   /* ismyanmarexta */,
+  {     0,  5037,     1,   9,   1, -UNI_XPOSIXXDIGIT }   /* hexdigit=n */,
+  {     0,    21,  5662,   3,  12, UNI_AEGEANNUMBERS }   /* inaegeannumbers */,
+  {     1,  4898,     0,  15,   0, UNI_PS }   /* openpunctuation */,
+  {     8,  5986,  8714,  13,   4, UNI_NV__3000 }   /* numericvalue=3000 */,
+  {     0,  8589,  9736,   7,   4, UNI_SC__COPT }   /* script=qaac */,
+  {     0,  7088, 10036,  10,   3, UNI_BC__LRE }   /* bidiclass=lre */,
+  {     2,  5564,  9836,  14,   4, UNI_QMARK }   /* quotationmark=true */,
+  {     1,  9277,  9864,   3,   4, UNI_WCHO }   /* sc=wcho */,
+  {     3,  9508,  7978,   4,   2, UNI_CCC__16 }   /* ccc=16 */,
+  {     2,  5564,    26,  14,   1, UNI_QMARK }   /* quotationmark=y */,
+  {     0,  6231,  2120,   3,  20, UNI_CJKRADICALSSUP }   /* incjkradicalssupplement */,
+  {     7, 10048,  8732,   3,   6, UNI_NV__500000 }   /* nv=500000 */,
+  {     1,  3836,  9660,  17,   4, UNI_MLYM }   /* scriptextensions=mlym */,
+  {     0,  1552,  1899,   9,   2, UNI_PC }   /* category=pc */,
+  {     0,  9768,    78,   4,   4, UNI_ARAB }   /* scx=arab */,
+  {    21, 10296,  7676,   3,   8, UNI_PALM }   /* ispalmyrene */,
+  {     0,    27,     0,   2,   0, UNI_LOWERCASELETTER }   /* ll */,
+  {     1,  1823,     0,   5,   0, UNI_XPOSIXLOWER }   /* lower */,
+  {     0, 10027,  6349,   3,  12, UNI_JG__MALAYALAMSSA }   /* jg=malayalamssa */,
+  {     3,  8780,  2203,   6,  14, UNI_INHANIFIROHINGYA }   /* block=hanifirohingya */,
+  {     2,   184,  8219,   2,   4, UNI_JAVA }   /* isjava */,
+  {     0,  9488,  4568,   4,  15, UNI_CURRENCYSYMBOLS }   /* blk=currencysymbols */,
+  {     1,  6420,  1061,   3,  26, UNI_OCR }   /* inopticalcharacterrecognition */,
+  {     2,  5791,  3802,  13,  17, UNI_JG__MANICHAEANHUNDRED }   /* joininggroup=manichaeanhundred */,
+  {    16,  1188,  8646,   3,   6, UNI_INTAITHAM }   /* intaitham */,
+  {     9,  1018,     0,   5,   0, UNI_MUSIC }   /* music */,
+  {     0,  9488,  7495,   4,   9, UNI_ARABICPFA }   /* blk=arabicpfa */,
+  {     1,  9260,     0,   5,   0, UNI_idsb_values_index }   /* idsb= */,
+  {     0,  8589,  9700,   7,   4, UNI_OLCK }   /* script=olck */,
+  {     0,  1417,  1756,  24,   2, UNI_CCC__BR }   /* canonicalcombiningclass=br */,
+  {     4,  9270,   472,   3,   2, UNI_PUA }   /* inpua */,
+  {     0,   184,  9652,   2,   4, UNI_MERC }   /* ismerc */,
+  {     4,  1189,     0,   3,   0, UNI_nt_values_index }   /* nt= */,
+  {     8,  9275,  4353,   5,  16, UNI_INSC__SYLLABLEMODIFIER }   /* insc=syllablemodifier */,
+  {     3, 10288,  2779,   3,   3, UNI_XIDS }   /* isxids */,
+  {     1,   184,     0,   4,   0, UNI_CE }   /* isce */,
+  {     3,  8688,  5019,   3,  13, UNI_ANCIENTSYMBOLS }   /* isancientsymbols */,
+  {     1,  9508,  8823,   5,   4, UNI_CCC__13 }   /* ccc=ccc13 */,
+  {     1,  9768,  8219,   4,   8, UNI_JAVA }   /* scx=javanese */,
+  {     2,  8400,    26,   7,   1, UNI_COMPEX }   /* compex=y */,
+  {     1, 10027,  7016,   3,  11, UNI_JG__YEHWITHTAIL }   /* jg=yehwithtail */,
+  {     1,  7155,    34,   3,   2, UNI_XPOSIXXDIGIT }   /* ishex */,
+  {     0,  5986,  7915,  13,   8, UNI_NV__3_SLASH_80 }   /* numericvalue=3.75e-02 */,
+  {    17,  9997,     1,   4,   1, UNI_BC__BN }   /* bc=bn */,
+  {     6,  1188,  2077,   3,  21, UNI_TRANSPORTANDMAP }   /* intransportandmapsymbols */,
+  {     0,   184, 10176,   2,   2, UNI_ZL }   /* iszl */,
+  {     2,  6469,    11,  12,   2, UNI_NT__DI }   /* numerictype=di */,
+  {     8, 10033,  7512,   3,   2, UNI_LB__BB }   /* lb=bb */,
+  {     0,  7325,  9985,   3,   3, UNI_IN__7 }   /* in=7.0 */,
+  {     0,  2224,     0,  21,   0, UNI_PRTI }   /* inscriptionalparthian */,
+  {     7,  9768,  9636,   4,   4, UNI_LINB }   /* scx=linb */,
+  {     1,  8936,     0,   6,   0, UNI_LYCI }   /* lycian */,
+  {     0,  9997,  3313,   3,  18, UNI_BC__LRI }   /* bc=lefttorightisolate */,
+  {     2,  8589,  8421,   7,   4, UNI_ELYM }   /* script=elym */,
+  {     2,  2182,  4305,  21,   5, UNI_GCB__XX }   /* graphemeclusterbreak=other */,
+  {     1,  8780,  8394,   7,   6, UNI_CJKEXTG }   /* block=cjkextg */,
+  {     5,  9864,     0,   4,   0, UNI_WCHO }   /* wcho */,
+  {     0,  9768,  9335,   4,   4, UNI_TAKR }   /* scx=takr */,
+  {     0,  1828,     0,   6,   0, UNI_cased_values_index }   /* cased= */,
+  {     2,   184,  4569,   3,  13, UNI_SC }   /* iscurrencysymbol */,
+  {     2,  8780,  2061,   6,   4, UNI_INMODI }   /* block=modi */,
+  {     2,   184,  3241,   2,   4, UNI_GEOR }   /* isgeor */,
+  {     8,  3836,  7651,  17,   4, UNI_ITAL }   /* scriptextensions=ital */,
+  {     0,   184,    62,   2,   5, UNI_XPOSIXGRAPH }   /* isgraph */,
+  {     0,  8589,  1628,   7,   4, UNI_SC__PHAG }   /* script=phag */,
+  {     0,  9014,  1025,   6,   2, -UNI_UIDEO }   /* uideo=no */,
+  {     2,   979,     0,  27,   0, UNI_ALPHABETICPF }   /* alphabeticpresentationforms */,
+  {     0,  8589,  2288,   8,   3, UNI_SC__SINH }   /* script=sinh */,
+  {     2,  8589,  5003,   7,  15, UNI_ZANB }   /* script=zanabazarsquare */,
+  {     4,  9277,  9704,   3,   4, UNI_ORKH }   /* sc=orkh */,
+  {     0,  5986,  7899,  13,   8, UNI_NV__7_SLASH_2 }   /* numericvalue=3.50e+00 */,
+  {     6,  9488,  8673,   4,   7, UNI_UCASEXT }   /* blk=ucasext */,
+  {     0,  8477,     0,   4,   0, UNI_MAKA }   /* maka */,
+  {     5,  1417,  8793,  25,   4, UNI_CCC__10 }   /* canonicalcombiningclass=ccc10 */,
+  {     0,  2245,     0,  14,   0, UNI_MEETEIMAYEKEXT }   /* meeteimayekext */,
+  {     0,  9277,  8876,   3,   4, UNI_GOTH }   /* sc=goth */,
+  {     0,   112,     0,   2,   0, UNI_SC }   /* sc */,
+  {     2,  3836,  9820,  17,   4, UNI_TFNG }   /* scriptextensions=tfng */,
+  {     1, 10048,  9361,   3,   3, UNI_NV__1_SLASH_2 }   /* nv=1/2 */,
+  {    11,  8509,   751,   4,  19, UNI_ENCLOSEDALPHANUM }   /* inenclosedalphanumerics */,
+  {     0,  8780,  3600,   8,  15, UNI_INCAUCASIANALBANIAN }   /* block=caucasianalbanian */,
+  {     0,  9488,  8171,   4,   8, UNI_INGUJARATI }   /* blk=gujarati */,
+  {     1,  8780,  2855,   6,   9, UNI_INMONGOLIAN }   /* block=mongolian */,
+  {     1,    21,  8203,   2,   8, UNI_JAMOEXTA }   /* injamoexta */,
+  {     5,  4916,  8653,   3,   6, UNI_TAVT }   /* istaiviet */,
+  {     0,  9488,   250,   4,  33, UNI_MISCMATHSYMBOLSA }   /* blk=miscellaneousmathematicalsymbolsa */,
+  {     0,  8688,  2469,   3,   2, UNI_ANY }   /* isany */,
+  {     0,  6241,     7,  12,   1, UNI_JT__C }   /* joiningtype=c */,
+  {     9,  8786,     0,   6,   0, UNI_CARI }   /* carian */,
+  {     8,  5256,     0,  14,   0, UNI_LATINEXTD }   /* latinextendedd */,
+  {     3,  5791,  5179,  13,   3, UNI_JG__HEH }   /* joininggroup=heh */,
+  {     0,  7218,   414,  10,  11, UNI_LB__ID }   /* linebreak=ideographic */,
+  {     0,  9277,  8107,   3,   8, UNI_BALI }   /* sc=balinese */,
+  {     3, 10048,  7835,   3,   8, UNI_NV__5_SLASH_2 }   /* nv=2.50e+00 */,
+  {     1,  8780,  4273,   6,  16, UNI_MYANMAREXTA }   /* block=myanmarextendeda */,
+  {     0,  9277,  8888,   3,   4, UNI_HATR }   /* sc=hatr */,
+  {     1,  7558,  6195,   4,   4, UNI_INHEBREW }   /* inhebrew */,
+  {     7,  8589,  8187,   7,   8, UNI_SC__HIRA }   /* script=hiragana */,
+  {     2, 10027,  5410,   3,  14, UNI_JG__MANICHAEANTETH }   /* jg=manichaeanteth */,
+  {     0,  1417, 10166,  24,   2, UNI_CCC__8 }   /* canonicalcombiningclass=kv */,
+  {     2,   184,  9640,   2,   3, UNI_LOE }   /* isloe */,
+  {     0,  8870,     1,   6,   1, -UNI_EPRES }   /* epres=n */,
+  {     4,  9524,     0,   4,   0, UNI_cwt_values_index }   /* cwt= */,
+  {     0,  1166,  9255,  26,   5, -UNI_DI }   /* defaultignorablecodepoint=false */,
+  {     1,  8780,  1922,   6,  12, UNI_DIACRITICALS }   /* block=diacriticals */,
+  {    13,  3836,  2684,  17,  19, UNI_EGYP }   /* scriptextensions=egyptianhieroglyphs */,
+  {     2,  8780,  8673,   6,   7, UNI_UCASEXT }   /* block=ucasext */,
+  {     0,  8780,  8645,   6,   7, UNI_INTAITHAM }   /* block=taitham */,
+  {     5,  5986,  7843,  13,   8, UNI_NV__1_SLASH_4 }   /* numericvalue=2.50e-01 */,
+  {     2,   217,     0,  33,   0, UNI_DIACRITICALSEXT }   /* combiningdiacriticalmarksextended */,
+  {     5, 10024,  6851,   3,  11, UNI_LO }   /* gc=otherletter */,
+  {     2,  9997,    23,   3,   2, UNI_BC__AL }   /* bc=al */,
+  {     6,  8780,  2912,   6,  12, UNI_SUNDANESESUP }   /* block=sundanesesup */,
+  {     1,  3836,  8659,  17,   7, UNI_TIBT }   /* scriptextensions=tibetan */,
+  {     0,  8645,     0,   7,   0, UNI_LANA }   /* taitham */,
+  {     2,  9277,  8786,   3,   6, UNI_CARI }   /* sc=carian */,
+  {     0,  7418,    26,  10,   1, UNI_XPOSIXUPPER }   /* uppercase=y */,
+  {    20,  7318, 10114,  10,   3, UNI_IN__6_DOT_3 }   /* presentin=v63 */,
+  {     5,  1188,  3458,   3,  10, UNI_TAIXUANJING }   /* intaixuanjing */,
+  {     3,   184,  9632,   2,   4, UNI_LINA }   /* islina */,
+  {     2,  9997,  2489,   3,  20, UNI_BC__PDF }   /* bc=popdirectionalformat */,
+  {     4,  8780,  8547,   6,   7, UNI_OLCK }   /* block=olchiki */,
+  {     0,  8942,     0,   4,   0, UNI_LYDI }   /* lydi */,
+  {     0,  6035,     0,   2,   0, UNI_PF }   /* pf */,
+  {     7,  9265, 10135,   5,   3, UNI_IDST }   /* idst=yes */,
+  {     0,   184,  2061,   2,  14, UNI_LM }   /* ismodifierletter */,
+  {     1,   184,  2287,   2,  21, UNI_SINHALAARCHAICNUMBERS }   /* issinhalaarchaicnumbers */,
+  {     3,  2569,   471,  20,   2, UNI_VO__TU }   /* verticalorientation=tu */,
+  {     2,   184,  1631,   2,  18, UNI_GEOMETRICSHAPESEXT }   /* isgeometricshapesext */,
+  {     4, 10048,  9924,   3,   2, UNI_NV__42 }   /* nv=42 */,
+  {     2,   184,   339,   2,   2, UNI_LO }   /* islo */,
+  {     1,  9768,  9330,   4,   5, UNI_TALE }   /* scx=taile */,
+  {     0,  9277,  6193,   3,   6, UNI_HEBR }   /* sc=hebrew */,
+  {     1,   184,  8491,   2,   4, UNI_MARC }   /* ismarc */,
+  {     0,  8780,   467,   6,  11, UNI_INPUNCTUATION }   /* block=punctuation */,
+  {    16,  9071,     1,   4,   1, -UNI_XPOSIXXDIGIT }   /* hex=n */,
+  {     1,  9270,  7309,   3,   9, UNI_INPHOENICIAN }   /* inphoenician */,
+  {    16,  3836,  8414,  17,   7, UNI_ELBA }   /* scriptextensions=elbasan */,
+  {     0,  3836,  8463,  17,   7, UNI_KALI }   /* scriptextensions=kayahli */,
+  {     0,  9768,  7188,   4,   4, UNI_KHAR }   /* scx=khar */,
+  {     0, 10296,  1629,   3,   3, UNI_PHAG }   /* isphag */,
+  {     2,  5746,    26,   6,   1, UNI_EBASE }   /* ebase=y */,
+  {     1,  8780,  8315,   6,   8, UNI_INUGARITIC }   /* block=ugaritic */,
+  {     0,  9277,  9632,   3,   4, UNI_SC__LINA }   /* sc=lina */,
+  {     5,  8884,  9255,   4,   5, -UNI_EXT }   /* ext=false */,
+  {     0, 10129,     3,   3,   1, -UNI_VS }   /* vs=f */,
+  {     3,  9528,    26,   4,   1, UNI_CWU }   /* cwu=y */,
+  {     1,  6229,     1,  12,   1, -UNI_JOINC }   /* joincontrol=n */,
+  {     5,   184,  9544,   2,   4, UNI_DIAK }   /* isdiak */,
+  {     5,  9704,     0,   4,   0, UNI_ORKH }   /* orkh */,
+  {     0,  9768,  7657,   4,   9, UNI_PERM }   /* scx=oldpermic */,
+  {     0,  9277,  8291,   3,   8, UNI_SC__TAGB }   /* sc=tagbanwa */,
+  {     1,  8780,  7531,   6,   9, UNI_EMOTICONS }   /* block=emoticons */,
+  {     1,  9488,  7504,   4,   9, UNI_ARABICPFB }   /* blk=arabicpfb */,
+  {     1,  8870,  9836,   6,   4, UNI_EPRES }   /* epres=true */,
+  {     1,  9270,     0,   5,   0, UNI_inpc_values_index }   /* inpc= */,
+  {     1,  8694,  9255,   7,   5, -UNI_XPOSIXSPACE }   /* wspace=false */,
+  {    16,  4791,  2837,   3,  18, UNI_MODIFIERTONELETTERS }   /* inmodifiertoneletters */,
+  {     1,  9277,  8414,   3,   4, UNI_ELBA }   /* sc=elba */,
+  {     1,  9768,  9516,   4,   4, UNI_CPRT }   /* scx=cprt */,
+  {     6,  7318, 10117,  10,   3, UNI_IN__7 }   /* presentin=v70 */,
+  {     1,  9640,  1025,   4,   2, -UNI_LOE }   /* loe=no */,
+  {     0,   184,  1587,   2,   1, UNI_Z }   /* isz */,
+  {     4,  7218,  9557,  10,   2, UNI_LB__CB }   /* linebreak=cb */,
+  {    16,  9275,  8307,   5,   8, UNI_INSC__TONEMARK }   /* insc=tonemark */,
+  {     0,  9277,  8936,   3,   6, UNI_LYCI }   /* sc=lycian */,
+  {     1,  2722,     0,  19,   0, UNI_JAMOEXTA }   /* hanguljamoextendeda */,
+  {     0,  8512,    17,   8,   1, UNI_NFKCQC__N }   /* nfkcqc=no */,
+  {     2,  9270,   909,   3,  13, UNI_PUA }   /* inprivateusearea */,
+  {     0,  9275,  5700,   5,  13, UNI_INSC__CONSONANTDEAD }   /* insc=consonantdead */,
+  {     2,  9484,     0,   4,   0, UNI_BHKS }   /* bhks */,
+  {     7,  9768,  4448,   4,   5, UNI_BAMU }   /* scx=bamum */,
+  {     1,  8589,  3115,   7,  10, UNI_SC__DEVA }   /* script=devanagari */,
+  {     0,  8852,     0,   6,   0, UNI_cwkcf_values_index }   /* cwkcf= */,
+  {     2,  6805,  2014,   6,  18, UNI_MISCTECHNICAL }   /* inmiscellaneoustechnical */,
+  {     4,  8589,  4001,   7,   7, UNI_SC__CPRT }   /* script=cypriot */,
+  {     4,  9488,  1192,   4,  26, UNI_HALFANDFULLFORMS }   /* blk=halfwidthandfullwidthforms */,
+  {     2,  8780,  5550,   6,  14, UNI_INPSALTERPAHLAVI }   /* block=psalterpahlavi */,
+  {     3,   132,     0,   2,   0, UNI_LM }   /* lm */,
+  {    16,  5986,  7851,  13,   8, UNI_NV__1_SLASH_40 }   /* numericvalue=2.50e-02 */,
+  {     2,  8780,  8442,   6,   7, UNI_INHANUNOO }   /* block=hanunoo */,
+  {     1,  9275,  8687,   5,   7, UNI_INSC__VISARGA }   /* insc=visarga */,
+  {     4, 10033,  8449,   3,   2, UNI_LB__HY }   /* lb=hy */,
+  {     0,  6805,   861,   6,   6, UNI_MISCARROWS }   /* inmiscarrows */,
+  {     0,  9488,   599,   4,  30, UNI_CJKEXTD }   /* blk=cjkunifiedideographsextensiond */,
+  {     0,  9277,  4478,   3,   7, UNI_BRAI }   /* sc=braille */,
+  {     0, 10033,    25,   3,   2, UNI_LB__SY }   /* lb=sy */,
+  {     0,  7325,     0,   3,   0, UNI_in_values_index }   /* in= */,
+  {     2,  7249,   533,   4,   2, UNI_CANS }   /* iscans */,
+  {     0,  4542,  1633,   4,  16, UNI_GEOMETRICSHAPESEXT }   /* ingeometricshapesext */,
+  {     3,  9488,  3598,   4,  17, UNI_INCAUCASIANALBANIAN }   /* blk=caucasianalbanian */,
+  {     1,  3836,  3241,  17,   4, UNI_GEOR }   /* scriptextensions=geor */,
+  {     0,  4033,  7408,  16,  10, UNI_CN }   /* generalcategory=unassigned */,
+  {     1,  2224,  3871,   3,  16, UNI_SMALLFORMS }   /* insmallformvariants */,
+  {     0,  3836,  4145,  17,   7, UNI_LINB }   /* scriptextensions=linearb */,
+  {     2,  9768,  2140,   4,   8, UNI_CYRL }   /* scx=cyrillic */,
+  {     0,  9070, 10135,   5,   3, UNI_POSIXXDIGIT }   /* ahex=yes */,
+  {    10,  8589,  6409,   7,   4, UNI_MEND }   /* script=mend */,
+  {     1,  6609,     0,  11,   0, UNI_dep_values_index }   /* deprecated= */,
+  {     0,  9277,  8491,   3,   7, UNI_MARC }   /* sc=marchen */,
+  {     2,  9508,  9101,   5,   4, UNI_CCC__14 }   /* ccc=ccc14 */,
+  {     5,   184,  3887,   2,  17, UNI_SUTTONSIGNWRITING }   /* issuttonsignwriting */,
+  {     1,    21,  9325,   2,   5, UNI_INRUNIC }   /* inrunic */,
+  {     2, 10024,  8855,   3,   2, UNI_CF }   /* gc=cf */,
+  {     8,  1417,  8823,  25,   4, UNI_CCC__13 }   /* canonicalcombiningclass=ccc13 */,
+  {     5,  4113,    25,   3,   1, UNI_INVS }   /* invs */,
+  {     2,  5986,  8011,  13,   8, UNI_NV__13_SLASH_2 }   /* numericvalue=6.50e+00 */,
+  {     2,  4853,     1,  15,   1, UNI_NFKDQC__N }   /* nfkdquickcheck=n */,
+  {     0, 10027,  4209,   3,  16, UNI_JG__MANICHAEANSAMEKH }   /* jg=manichaeansamekh */,
+  {     1,   569,     0,  30,   0, UNI_CJKEXTC }   /* cjkunifiedideographsextensionc */,
+  {     2,  9345,  9255,   5,   5, -UNI_XIDC }   /* xidc=false */,
+  {     1,  9488,  8936,   4,   6, UNI_INLYCIAN }   /* blk=lycian */,
+  {     0,   184,  3151,   2,  17, UNI_EPRES }   /* isemojipresentation */,
+  {     1,  8978,  1025,   6,   2, -UNI__PERL_PATWS }   /* patws=no */,
+  {     1, 10033,  7522,   3,   9, UNI_LB__B2 }   /* lb=breakboth */,
+  {     2,  1417,  2809,  24,   2, UNI_CCC__1 }   /* canonicalcombiningclass=ov */,
+  {     1,  8780,  8387,   7,   6, UNI_CJKEXTF }   /* block=cjkextf */,
+  {     3,  9015,    26,   5,   1, UNI_IDEO }   /* ideo=y */,
+  {     0,  1552,  6598,   9,  11, UNI_CASEDLETTER }   /* category=casedletter */,
+  {     1,  9540,  1025,   4,   2, -UNI_DIA }   /* dia=no */,
+  {     0,    21,  5830,   2,  13, UNI_LOWSURROGATES }   /* inlowsurrogates */,
+  {     0,  3259,    26,  18,   1, UNI_IDSB }   /* idsbinaryoperator=y */,
+  {     0,    57,     0,   2,   0, UNI_YI }   /* yi */,
+  {     1,   184,  2817,   2,  19, UNI_MERO }   /* ismeroitichieroglyphs */,
+  {     1,  8589,  9804,   7,   4, UNI_SC__TALE }   /* script=tale */,
+  {     2,  6609,     1,  11,   1, -UNI_DEP }   /* deprecated=n */,
+  {     2,  5986,  9055,  13,   4, UNI_NV__1_SLASH_32 }   /* numericvalue=1/32 */,
+  {     0,  9262,   400,   3,   6, UNI_SB__FO }   /* sb=format */,
+  {     8,  8780,  8414,   6,   7, UNI_INELBASAN }   /* block=elbasan */,
+  {     0,  7088,  6049,  10,  12, UNI_BC__AN }   /* bidiclass=arabicnumber */,
+  {     1, 10048,  9364,   3,   4, UNI_NV__1_SLASH_10 }   /* nv=1/10 */,
+  {     0,  8780,  6961,   6,  11, UNI_SUPERANDSUB }   /* block=superandsub */,
+  {     3,   184,  5284,   2,  14, UNI_LISUSUP }   /* islisusupplement */,
+  {     7,  9492,     7,   4,   1, UNI_BPT__C }   /* bpt=c */,
+  {     8,  9768,  8414,   4,   4, UNI_ELBA }   /* scx=elba */,
+  {     5, 10024,   467,   3,   5, UNI_P }   /* gc=punct */,
+  {     0,  1966,  8099,  22,   8, UNI_INSC__AVAGRAHA }   /* indicsyllabiccategory=avagraha */,
+  {     3,  9275,  4523,   5,  15, UNI_INSC__CONSONANTMEDIAL }   /* insc=consonantmedial */,
+  {     1,  8589,  9680,   7,   4, UNI_NBAT }   /* script=nbat */,
+  {     1, 10048,  7747,   3,   8, UNI_NV__1_SLASH_10 }   /* nv=1.00e-01 */,
+  {     1,  9488,  4065,   4,  16, UNI_HALFANDFULLFORMS }   /* blk=halfandfullforms */,
+  {    11,  7438,  8139,  10,   8, UNI_WB__EB }   /* wordbreak=ebasegaz */,
+  {     0,  2224,  2970,   3,  18, UNI_SUPARROWSC }   /* insupplementalarrowsc */,
+  {     0,  9524,    26,   4,   1, UNI_CWT }   /* cwt=y */,
+  {     1,  9277,  9572,   3,   4, UNI_SC__GUJR }   /* sc=gujr */,
+  {     4,  1552,   107,  10,   5, UNI_S }   /* category=symbol */,
+  {     0, 10048,  5648,   3,   4, UNI_NV__1000 }   /* nv=1000 */,
+  {     0, 10009,  8163,   3,   3, UNI_DT__FRA }   /* dt=fra */,
+  {     0,  7558,     0,   9,   0, UNI_QAAI }   /* inherited */,
+  {     3,  1768,    26,  22,   1, UNI_CWCF }   /* changeswhencasefolded=y */,
+  {     0,  3836,  2913,  18,   8, UNI_SUND }   /* scriptextensions=sundanese */,
+  {    10,  9277,  8547,   3,   7, UNI_OLCK }   /* sc=olchiki */,
+  {     0,  9488,    42,   4,  16, UNI_CJKCOMPAT }   /* blk=cjkcompatibility */,
+  {     2,  3836,  8315,  17,   4, UNI_UGAR }   /* scriptextensions=ugar */,
+  {     0,  8996,     0,   7,   0, UNI_STERM }   /* sterm=t */,
+  {     0,  9488,  4928,   4,  15, UNI_TAMILSUP }   /* blk=tamilsupplement */,
+  {     0,  3836,  7558,  17,   9, UNI_QAAI }   /* scriptextensions=inherited */,
+  {     0,  1552,    17,  10,   1, UNI_SO }   /* category=so */,
+  {     0,  9277,  7675,   3,   4, UNI_PALM }   /* sc=palm */,
+  {     0,  8780,  7513,   6,   9, UNI_INBHAIKSUKI }   /* block=bhaiksuki */,
+  {     1,  9250,     0,   5,   0, UNI_emod_values_index }   /* emod= */,
+  {     4,  8589,   719,   7,   9, UNI_XSUX }   /* script=cuneiform */,
+  {     0,  9240,  1025,   5,   2, -UNI_DASH }   /* dash=no */,
+  {     3,  8780,  6807,   6,  11, UNI_MISCSYMBOLS }   /* block=miscsymbols */,
+  {     1, 10048,  9055,   3,   5, UNI_NV__1_SLASH_320 }   /* nv=1/320 */,
+  {     1,  4628,     9,  15,   2, UNI_EA__NA }   /* eastasianwidth=na */,
+  {     0,   184,  1673,   2,   4, UNI_JAMO }   /* isjamo */,
+  {     3,  7155,  4098,   3,  15, UNI_HIGHPUSURROGATES }   /* ishighpusurrogates */,
+  {     3,  2779,    36,  19,   1, UNI_IDST }   /* idstrinaryoperator=t */,
+  {     2, 10027,  7348,   3,  10, UNI_JG__REVERSEDPE }   /* jg=reversedpe */,
+  {     6,  9488,  2224,   4,  21, UNI_ININSCRIPTIONALPARTHIAN }   /* blk=inscriptionalparthian */,
+  {     1,  7088,     0,  10,   0, UNI_bc_values_index }   /* bidiclass= */,
+  {     0,  8589,  8291,   7,   8, UNI_SC__TAGB }   /* script=tagbanwa */,
+  {     0,  4033, 10180,  16,   2, UNI_ZS }   /* generalcategory=zs */,
+  {     0,  8780,  1631,   6,  18, UNI_GEOMETRICSHAPESEXT }   /* block=geometricshapesext */,
+  {     0,  7318, 10111,  10,   3, UNI_IN__6_DOT_2 }   /* presentin=v62 */,
+  {     0,  8894,  1025,   6,   2, -UNI_JOINC }   /* joinc=no */,
+  {     2,  3836,  1115,  17,   4, UNI_HANG }   /* scriptextensions=hang */,
+  {     2,  9596,     9,   4,   2, UNI_HST__NA }   /* hst=na */,
+  {     1,  8780,   250,   6,  33, UNI_MISCMATHSYMBOLSA }   /* block=miscellaneousmathematicalsymbolsa */,
+  {     3, 10009,  2280,   3,   3, UNI_DT__ISO }   /* dt=iso */,
+  {     4,  9488,  5752,   4,  13, UNI_GREEKEXT }   /* blk=greekextended */,
+  {    17,  7378,     0,  10,   0, UNI_SUPARROWSA }   /* suparrowsa */,
+  {     2,  9520,     0,   3,   0, UNI_CWL }   /* cwl */,
+  {     2,  9556, 10174,   4,   2, UNI_GCB__XX }   /* gcb=xx */,
+  {     1, 10048,  7781,   3,   2, UNI_NV__43 }   /* nv=43 */,
+  {     1,  8780,  3115,   6,  13, UNI_DEVANAGARIEXT }   /* block=devanagariext */,
+  {     4,  3836,  6253,  17,   5, UNI_KHMR }   /* scriptextensions=khmer */,
+  {     8,  3836,  2288,  18,   6, UNI_SINH }   /* scriptextensions=sinhala */,
+  {     0, 10048, 10144,   3,   2, UNI_NV__45 }   /* nv=45 */,
+  {    42,  9488,   569,   4,  30, UNI_CJKEXTC }   /* blk=cjkunifiedideographsextensionc */,
+  {     9,  9536,    26,   4,   1, UNI_DEP }   /* dep=y */,
+  {     0,  1790,    26,  22,   1, UNI_CWCM }   /* changeswhencasemapped=y */,
+  {     2, 10048,  8710,   3,   4, UNI_NV__6000 }   /* nv=6000 */,
+  {    10,  9262,  1159,   3,   2, UNI_SB__ST }   /* sb=st */,
+  {     0,    21,  4129,   2,  16, UNI_LATIN1 }   /* inlatin1supplement */,
+  {     1,  3836,  7288,  17,  10, UNI_SOGO }   /* scriptextensions=oldsogdian */,
+  {     0,    21,  3295,   2,   9, UNI_LATINEXTA }   /* inlatinexta */,
+  {     1,   184,  9600,   2,   4, UNI_KALI }   /* iskali */,
+  {     3,  1552,  3359,  10,   8, UNI_Z }   /* category=separator */,
+  {    12,  5986,  5648,  13,  13, UNI_NV__1000000000000 }   /* numericvalue=1000000000000 */,
+  {     2,  3382,    26,   3,   1, UNI_CE }   /* ce=y */,
+  {     1,  5214,     0,  14,   0, UNI_KANGXI }   /* kangxiradicals */,
+  {     4,  9716,  9836,   4,   4, UNI_PCM }   /* pcm=true */,
+  {     0, 10132, 10174,   3,   2, UNI_WB__XX }   /* wb=xx */,
+  {     3,  8780,  6840,   6,  11, UNI_INNANDINAGARI }   /* block=nandinagari */,
+  {     0,  8589,  2608,   7,   6, UNI_BRAH }   /* script=brahmi */,
+  {     2,  9277,  9636,   3,   4, UNI_SC__LINB }   /* sc=linb */,
+  {     0,  3169,     0,  18,   0, UNI_ETHIOPICSUP }   /* ethiopicsupplement */,
+  {     2,  2224,  2913,   3,  11, UNI_SUNDANESESUP }   /* insundanesesup */,
+  {     2,  9275,  5102,   5,  14, UNI_INSC__CONSONANTFINAL }   /* insc=consonantfinal */,
+  {     0,  8780,  1906,   6,  16, UNI_INDICNUMBERFORMS }   /* block=indicnumberforms */,
+  {     5,  8780,  3547,   6,  10, UNI_ALCHEMICAL }   /* block=alchemical */,
+  {     0,  8780,   316,   6,  33, UNI_SUPMATHOPERATORS }   /* block=supplementalmathematicaloperators */,
+  {     3,    21,  8942,   2,   6, UNI_INLYDIAN }   /* inlydian */,
+  {     2,  9277,  2140,   3,   8, UNI_SC__CYRL }   /* sc=cyrillic */,
+  {     0,  1867,     0,   9,   0, UNI_XPOSIXUPPER }   /* uppercase */,
+  {     6,  7088,   865,  10,   2, UNI_BC__WS }   /* bidiclass=ws */,
+  {     1,  4033,  1287,  16,   2, UNI_UPPERCASELETTER }   /* generalcategory=lu */,
+  {     6,  7218,  6675,  10,  11, UNI_LB__EX }   /* linebreak=exclamation */,
+  {     0,  8589,  1900,   7,   6, UNI_SC__ZYYY }   /* script=common */,
+  {     1,  9768,  8428,   4,   4, UNI_GRAN }   /* scx=gran */,
+  {     0,  8596,     0,   7,   0, UNI_SHRD }   /* sharada */,
+  {     3,  1537,  3475,  24,  18, UNI_INPC__TOPANDLEFTANDRIGHT }   /* indicpositionalcategory=topandleftandright */,
+  {     1,  9488,  8942,   4,   6, UNI_INLYDIAN }   /* blk=lydian */,
+  {     0,  1552,  4305,   9,   5, UNI_C }   /* category=other */,
+  {     0,  9277,  8876,   3,   6, UNI_GOTH }   /* sc=gothic */,
+  {     0,   184,  7531,   2,   9, UNI_EMOTICONS }   /* isemoticons */,
+  {     0,  1966,  4508,  22,  15, UNI_INSC__CONSONANTKILLER }   /* indicsyllabiccategory=consonantkiller */,
+  {     1,  9556,  5746,   4,   5, UNI_WB__EB }   /* gcb=ebase */,
+  {     3,  9277,  6481,   3,  12, UNI_HUNG }   /* sc=oldhungarian */,
+  {     0,  4643,     0,  14,   0, UNI_ECOMP }   /* emojicomponent */,
+  {     3,  2224,  8618,   3,   6, UNI_INSOYOMBO }   /* insoyombo */,
+  {     5,  8780,  2817,   6,  19, UNI_MERO }   /* block=meroitichieroglyphs */,
+  {     3,  8435,     1,   7,   1, -UNI_GRBASE }   /* grbase=n */,
+  {     7,  8512,     0,   8,   0, UNI_NFKCQC__N }   /* nfkcqc=n */,
+  {     0,    48,     0,   1,   0, UNI_P }   /* p */,
+  {     1,  1812,  1025,  22,   2, -UNI_CWL }   /* changeswhenlowercased=no */,
+  {     0,  7155,  2204,   3,   3, UNI_HAN }   /* ishani */,
+  {     1,  9270,  2994,   5,  13, UNI_INPC__BOTTOMANDLEFT }   /* inpc=bottomandleft */,
+  {     0,   184,  8456,   2,   7, UNI_KNDA }   /* iskannada */,
+  {     0,  8762,    36,   6,   1, UNI_XPOSIXALPHA }   /* alpha=t */,
+  {     2,  3937,     0,  11,   0, UNI_BOPOMOFOEXT }   /* bopomofoext */,
+  {     7, 10024,  1066,   3,   2, UNI_CASEDLETTER }   /* gc=lc */,
+  {     2,  8477,     0,   7,   0, UNI_MAKA }   /* makasar */,
+  {     0,  9488,  2140,   4,  21, UNI_CYRILLICSUP }   /* blk=cyrillicsupplementary */,
+  {     0,  8780,   446,   6,  18, UNI_IDEOGRAPHICSYMBOLS }   /* block=ideographicsymbols */,
+  {     0,  9488,  9285,   4,   5, UNI_INLIMBU }   /* blk=limbu */,
+  {     1,  5986,  7795,  13,   8, UNI_NV__3_SLASH_20 }   /* numericvalue=1.50e-01 */,
+  {     0,  1417,  7477,  24,   9, UNI_CCC__AL }   /* canonicalcombiningclass=aboveleft */,
+  {     0,  9997,  3700,   3,  17, UNI_BC__ES }   /* bc=europeanseparator */,
+  {     2,   184,  6972,   2,  11, UNI_SYLO }   /* issylotinagri */,
+  {     0,  5032,  9255,  14,   5, -UNI_POSIXXDIGIT }   /* asciihexdigit=false */,
+  {     3,  8688,  3923,   4,   7, UNI_ARABICSUP }   /* isarabicsup */,
+  {     0,  8780,  2931,   6,  19, UNI_SUPARROWSA }   /* block=supplementalarrowsa */,
+  {     2,  9488,  2308,   4,  21, UNI_YIJING }   /* blk=yijinghexagramsymbols */,
+  {     0,  5661,     0,  13,   0, UNI_AEGEANNUMBERS }   /* aegeannumbers */,
+  {     5,  7076,  4479,   3,   6, UNI_BRAI }   /* inbraille */,
+  {     0,   184,  4245,   2,  10, UNI_SM }   /* ismathsymbol */,
+  {    13,  8780,  1585,   6,  14, UNI_BYZANTINEMUSIC }   /* block=byzantinemusic */,
+  {     0,  9508,  9106,   5,   4, UNI_CCC__15 }   /* ccc=ccc15 */,
+  {     2,  9768,  4385,   4,   6, UNI_TANG }   /* scx=tangut */,
+  {     3,  1537,  3343,   4,   6, UNI_DINGBATS }   /* indingbats */,
+  {     8,  9488,  2054,   4,  22, UNI_MODIFIERLETTERS }   /* blk=spacingmodifierletters */,
+  {     4,   539,     0,  30,   0, UNI_CJKEXTB }   /* cjkunifiedideographsextensionb */,
+  {     1,   184,  3439,   2,  12, UNI_SMALLKANAEXT }   /* issmallkanaext */,
+  {     0,  1269,     3,  25,   1, -UNI_COMPEX }   /* fullcompositionexclusion=f */,
+  {    26,  9275,  2646,   5,  19, UNI_INSC__CONSONANTHEADLETTER }   /* insc=consonantheadletter */,
+  {     1,  5986,  9428,  13,   4, UNI_NV__3_SLASH_80 }   /* numericvalue=3/80 */,
+  {     0,  8780,  8352,   7,   6, UNI_CJKEXTA }   /* block=cjkexta */,
+  {     1,  8884,    26,   4,   1, UNI_EXT }   /* ext=y */,
+  {     0,  9997,     8,   3,   2, UNI_BC__AN }   /* bc=an */,
+  {     6,  9736,     0,   4,   0, UNI_COPT }   /* qaac */,
+  {     0,  3097,  5012,  18,   6, UNI_DT__SQR }   /* decompositiontype=square */,
+  {     1,  2119,     0,  21,   0, UNI_CJKRADICALSSUP }   /* cjkradicalssupplement */,
+  {     0, 10048,  5648,   3,   6, UNI_NV__100000 }   /* nv=100000 */,
+  {     9,  9270,  3481,   5,  12, UNI_INPC__LEFTANDRIGHT }   /* inpc=leftandright */,
+  {     0,  8589,  2469,   7,  20, UNI_HMNP }   /* script=nyiakengpuachuehmong */,
+  {     4,  9488,  6277,   4,   7, UNI_MAHJONG }   /* blk=mahjong */,
+  {     6,  1552,   341,   9,   2, UNI_PE }   /* category=pe */,
+  {     0,  3097,  8533,  18,   7, UNI_DT__NB }   /* decompositiontype=nobreak */,
+  {     0,  3836,  6940,  18,  10, UNI_SORA }   /* scriptextensions=sorasompeng */,
+  {     0,  4033,   467,  16,   5, UNI_P }   /* generalcategory=punct */,
+  {     0,  8780,  3870,   6,  17, UNI_SMALLFORMS }   /* block=smallformvariants */,
+  {     3, 10333,  2913,   3,   3, UNI_SUND }   /* issund */,
+  {     2, 10024,   727,   3,   2, UNI_MN }   /* gc=mn */,
+  {     2,  6231,    43,   3,   8, UNI_CJKCOMPAT }   /* incjkcompat */,
+  {    17,  8589,  9797,   8,   3, UNI_SC__SYRC }   /* script=syrc */,
+  {     1,  1417,  8811,  25,   4, UNI_CCC__12 }   /* canonicalcombiningclass=ccc12 */,
+  {     1,  3379,    36,   6,   1, UNI_XPOSIXSPACE }   /* space=t */,
+  {     1, 10296,  1867,   7,   5, UNI_POSIXUPPER }   /* isposixupper */,
+  {     1,  3259,     3,  18,   1, -UNI_IDSB }   /* idsbinaryoperator=f */,
+  {     3,  1417,  3007,  24,  13, UNI_CCC__214 }   /* canonicalcombiningclass=attachedabove */,
+  {     1,  7028,  9039,   3,   5, UNI_YEZI }   /* isyezidi */,
+  {     4,  7218,  4360,  10,   9, UNI_EMOD }   /* linebreak=emodifier */,
+  {     1,  1417,  2455,  24,   5, UNI_CCC__R }   /* canonicalcombiningclass=right */,
+  {     0,  1273, 10135,  21,   3, UNI_CE }   /* compositionexclusion=yes */,
+  {     1,  8780,  8603,   6,   7, UNI_SHAW }   /* block=shavian */,
+  {     3,  9768,  8876,   4,   4, UNI_GOTH }   /* scx=goth */,
+  {     4,  2182,     0,  21,   0, UNI_gcb_values_index }   /* graphemeclusterbreak= */,
+  {     0,  8780,  8652,   6,   7, UNI_INTAIVIET }   /* block=taiviet */,
+  {     8,  9886,  5006,   5,  12, UNI_INZANABAZARSQUARE }   /* inzanabazarsquare */,
+  {     0,  8589,  8638,   7,   7, UNI_SC__TGLG }   /* script=tagalog */,
+  {    16,  1768,  1025,  22,   2, -UNI_CWCF }   /* changeswhencasefolded=no */,
+  {     1,  2224,  2951,   3,  18, UNI_SUPARROWSB }   /* insupplementalarrowsb */,
+  {     0,  6553,    36,  12,   1, UNI_XIDC }   /* xidcontinue=t */,
+  {     1,  9564,     0,   4,   0, UNI_GONM }   /* gonm */,
+  {     7,  8780,  8131,   6,   8, UNI_INDUPLOYAN }   /* block=duployan */,
+  {     1,  9768,  8786,   4,   4, UNI_CARI }   /* scx=cari */,
+  {     3,  9277,  1654,   3,   6, UNI_SC__HANG }   /* sc=hangul */,
+  {     0,   184,  3421,   2,   4, UNI_RUMI }   /* isrumi */,
+  {     3,  9768,  2817,   4,   4, UNI_MERO }   /* scx=mero */,
+  {     0,   184,  3785,   2,   4, UNI_MANI }   /* ismani */,
+  {    11,  9488,  5606,   4,  14, UNI_SUPPUNCTUATION }   /* blk=suppunctuation */,
+  {     1, 10250,  6556,  15,   8, UNI__PERL_CHARNAME_CONTINUE }   /* _perl_charname_continue */,
+  {     0,  8780,  8561,   6,   7, UNI_INOSMANYA }   /* block=osmanya */,
+  {     1, 10027,  9044,   3,   6, UNI_JG__YUDHHE }   /* jg=yudhhe */,
+  {     0,  9768,  8652,   4,   7, UNI_TAVT }   /* scx=taiviet */,
+  {     0, 10012,  1192,   3,   9, UNI_EA__H }   /* ea=halfwidth */,
+  {     3,  3836,  9704,  17,   4, UNI_ORKH }   /* scriptextensions=orkh */,
+  {     1,  7318, 10108,  10,   3, UNI_IN__6_DOT_1 }   /* presentin=v61 */,
+  {    12,  5791,  6349,  13,  12, UNI_JG__MALAYALAMSSA }   /* joininggroup=malayalamssa */,
+  {     0, 10048,  8744,   3,   4, UNI_NV__7000 }   /* nv=7000 */,
+  {     0,  3367,    36,  18,   1, UNI__PERL_PATWS }   /* patternwhitespace=t */,
+  {     0,  4853,     0,  15,   0, UNI_nfkdqc_values_index }   /* nfkdquickcheck= */,
+  {     2,  9488,   809,   4,  29, UNI_ENCLOSEDIDEOGRAPHICSUP }   /* blk=enclosedideographicsupplement */,
+  {     4,   184,   749,   2,  30, UNI_ENCLOSEDALPHANUMSUP }   /* isenclosedalphanumericsupplement */,
+  {     1,  9020, 10135,   6,   3, UNI_XPOSIXUPPER }   /* upper=yes */,
+  {     1,  5986,  8750,  13,   5, UNI_NV__80000 }   /* numericvalue=80000 */,
+  {     0,  9768,  8171,   4,   8, UNI_GUJR }   /* scx=gujarati */,
+  {     0,  3379, 10135,   6,   3, UNI_XPOSIXSPACE }   /* space=yes */,
+  {     1,  9768,  8582,   4,   7, UNI_PHAG }   /* scx=phagspa */,
+  {     0,  3836,  3785,  17,  10, UNI_MANI }   /* scriptextensions=manichaean */,
+  {     5,  9488,  4793,   4,  15, UNI_INMEROITICCURSIVE }   /* blk=meroiticcursive */,
+  {     0,   184,  6277,   2,  12, UNI_MAHJONG }   /* ismahjongtiles */,
+  {     0,  9997,  1353,   3,   3, UNI_BC__RLE }   /* bc=rle */,
+  {     2,   184,  9245,   2,   4, UNI_DOGR }   /* isdogr */,
+  {    32,  9768,  9644,   4,   4, UNI_MEDF }   /* scx=medf */,
+  {     0,  9768,  6409,   4,  12, UNI_MEND }   /* scx=mendekikakui */,
+  {     8, 10132,  5746,   3,   5, UNI_WB__EB }   /* wb=ebase */,
+  {     0, 10048,  7826,   3,   2, UNI_NV__12 }   /* nv=12 */,
+  {     6, 10132,  4856,   3,   2, UNI_WB__DQ }   /* wb=dq */,
+  {     9, 10132,    34,   3,   6, UNI_WB__EXTEND }   /* wb=extend */,
+  {     6, 10027,  4778,   3,  15, UNI_JG__MANICHAEANZAYIN }   /* jg=manichaeanzayin */,
+  {     0,  8484,     0,   7,   0, UNI_MAND }   /* mandaic */,
+  {     2,   184,  9888,   2,   4, UNI_ZANB }   /* iszanb */,
+  {     1,  3367,  9255,  18,   5, -UNI__PERL_PATWS }   /* patternwhitespace=false */,
+  {     1,  8589,  1222,   7,   4, UNI_SC__KANA }   /* script=kana */,
+  {    11, 10024,  2061,   3,  14, UNI_LM }   /* gc=modifierletter */,
+  {     2,  9488,  8786,   4,   6, UNI_INCARIAN }   /* blk=carian */,
+  {     3,  9488,    78,   4,   6, UNI_INARABIC }   /* blk=arabic */,
+  {     2,  5791,  7348,  13,  10, UNI_JG__REVERSEDPE }   /* joininggroup=reversedpe */,
+  {     4, 10296,  5718,   7,   5, UNI_POSIXALNUM }   /* isposixalnum */,
+  {     1,  8589,  6193,   7,   4, UNI_HEBR }   /* script=hebr */,
+  {     2, 10048, 10142,   3,   2, UNI_NV__44 }   /* nv=44 */,
+  {     1,  9070,  9255,   5,   5, -UNI_POSIXXDIGIT }   /* ahex=false */,
+  {     5,  9768,  9452,   4,   4, UNI_AHOM }   /* scx=ahom */,
+  {     6,  1966,  8307,  22,   8, UNI_INSC__TONEMARK }   /* indicsyllabiccategory=tonemark */,
+  {     8,  2032,     0,  22,   0, UNI_nchar_values_index }   /* noncharactercodepoint= */,
+  {     0,   184,  4049,   2,  16, UNI_GEORGIANEXT }   /* isgeorgianextended */,
+  {     0,  9488,   539,   4,  30, UNI_CJKEXTB }   /* blk=cjkunifiedideographsextensionb */,
+  {     0,   106,     0,   6,   0, UNI_S }   /* symbol */,
+  {     1,  8780,  6481,   6,  12, UNI_INOLDHUNGARIAN }   /* block=oldhungarian */,
+  {     2,  9997,     0,   4,   0, UNI_BC__B }   /* bc=b */,
+  {     1,  8780,  6818,   6,  11, UNI_MYANMAREXTA }   /* block=myanmarexta */,
+  {    12,  2760,  6763,  19,   3, UNI_LB__H3 }   /* hangulsyllabletype=lvt */,
+  {     1,  8780,  4129,   6,   6, UNI_LATIN1 }   /* block=latin1 */,
+  {     2,  5986,  7859,  13,   5, UNI_NV__20000 }   /* numericvalue=20000 */,
+  {     6,  7218, 10158,  10,   2, UNI_LB__H2 }   /* linebreak=h2 */,
+  {     0, 10048,  7931,   3,   8, UNI_NV__5_SLASH_12 }   /* nv=4.17e-01 */,
+  {    10,  4916,  9817,   3,   3, UNI_TAVT }   /* istavt */,
+  {     0,  4033,    25,  16,   1, UNI_S }   /* generalcategory=s */,
+  {     1,  8131,     0,   8,   0, UNI_DUPL }   /* duployan */,
+  {     1,  9716,    26,   4,   1, UNI_PCM }   /* pcm=y */,
+  {     8, 10180,     0,   2,   0, UNI_ZS }   /* zs */,
+  {     1,  9488,  3921,   4,  16, UNI_ARABICSUP }   /* blk=arabicsupplement */,
+  {     2, 10322,  3379,   5,   5, UNI_XPOSIXSPACE }   /* xperlspace */,
+  {     1,   184,   183,   2,  20, UNI_MISCSYMBOLS }   /* ismiscellaneoussymbols */,
+  {     0,  7318,  7931,  10,   3, UNI_IN__4_DOT_1 }   /* presentin=4.1 */,
+  {     3,  8978,     0,   5,   0, UNI__PERL_PATWS }   /* patws */,
+  {     0,  9556,    34,   4,   2, UNI_GCB__EX }   /* gcb=ex */,
+  {     4,  9020,     1,   6,   1, -UNI_XPOSIXUPPER }   /* upper=n */,
+  {     0,  5986,  8710,  13,   2, UNI_NV__60 }   /* numericvalue=60 */,
+  {     0,  9544,     0,   4,   0, UNI_DIAK }   /* diak */,
+  {     0, 10308,     0,   5,   0, UNI_XPOSIXPRINT }   /* print */,
+  {     2,  1966,  5634,  22,  14, UNI_INSC__VOWELDEPENDENT }   /* indicsyllabiccategory=voweldependent */,
+  {     1,  4033,  1171,  16,   2, UNI_TITLE }   /* generalcategory=lt */,
+  {     4,  6231,  6098,   3,  11, UNI_CYRILLICEXTA }   /* incyrillicexta */,
+  {     0,  7325,  9852,   3,   4, UNI_IN__12_DOT_1 }   /* in=v121 */,
+  {     1,  5564,    36,  14,   1, UNI_QMARK }   /* quotationmark=t */,
+  {     0,  9091,  8133,   4,   6, UNI_INDUPLOYAN }   /* induployan */,
+  {     0,  8780,  2308,   6,  21, UNI_YIJING }   /* block=yijinghexagramsymbols */,
+  {     8,  8930, 10135,   6,   3, UNI_XPOSIXLOWER }   /* lower=yes */,
+  {     0,  8954, 10135,   6,   3, UNI__PERL_NCHAR }   /* nchar=yes */,
+  {     2,   184,     3,   3,   1, UNI_CF }   /* iscf */,
+  {     1,  8589,  3169,   7,   4, UNI_ETHI }   /* script=ethi */,
+  {     7,  9637,  5690,   5,  10, UNI_BLOCKELEMENTS }   /* inblockelements */,
+  {     0,  9508,  9111,   5,   4, UNI_CCC__16 }   /* ccc=ccc16 */,
+  {     5,  8589,  9644,   7,   4, UNI_MEDF }   /* script=medf */,
+  {     8,  5466,     0,  15,   0, UNI_DT__CAN }   /* nfdquickcheck=n */,
+  {     1,  8589,  3079,   7,   6, UNI_SC__COPT }   /* script=coptic */,
+  {    10,  8688,   183,   4,   2, UNI_ARMI }   /* isarmi */,
+  {     4,  8589,  4703,   7,  15, UNI_ARMI }   /* script=imperialaramaic */,
+  {     0,  3836,  9285,  17,   4, UNI_LIMB }   /* scriptextensions=limb */,
+  {     0,  8589,  6884,   7,  11, UNI_HMNG }   /* script=pahawhhmong */,
+  {    17,   184,  1033,   2,  27, UNI_ENCLOSEDCJK }   /* isenclosedcjklettersandmonths */,
+  {     1,  8589,  9720,   7,   4, UNI_SC__PHLP }   /* script=phlp */,
+  {     1,   339,     0,   2,   0, UNI_LO }   /* lo */,
+  {     3,  9488,   838,   4,  29, UNI_MISCARROWS }   /* blk=miscellaneoussymbolsandarrows */,
+  {     4,  8966,    26,   6,   1, UNI_NFDQC__Y }   /* nfdqc=y */,
+  {     1,  8780,  4369,   6,  16, UNI_SYRIACSUP }   /* block=syriacsupplement */,
+  {     1,  1417,  9151,  25,   4, UNI_CCC__24 }   /* canonicalcombiningclass=ccc24 */,
+  {     0,    21,  5200,   2,   7, UNI_KANASUP }   /* inkanasup */,
+  {     5,  1273,     0,  20,   0, UNI_CE }   /* compositionexclusion */,
+  {     1,  8780,  2950,   6,  19, UNI_SUPARROWSB }   /* block=supplementalarrowsb */,
+  {     1,  3457,     0,  11,   0, UNI_TAIXUANJING }   /* taixuanjing */,
+  {     0,  5578,    36,  15,   1, UNI_SB__ST }   /* sentencebreak=st */,
+  {     2,   184,    43,   3,  35, UNI_CJKCOMPATIDEOGRAPHSSUP }   /* iscjkcompatibilityideographssupplement */,
+  {     0,   184,  4478,   2,   7, UNI_BRAI }   /* isbraille */,
+  {     1,  8589,  4385,   7,   6, UNI_TANG }   /* script=tangut */,
+  {     0, 10033,  9713,   3,   2, UNI_LB__SG }   /* lb=sg */,
+  {     0,  1192,     0,  26,   0, UNI_HALFANDFULLFORMS }   /* halfwidthandfullwidthforms */,
+  {     2,    38,     0,   2,   0, UNI_XPOSIXDIGIT }   /* nd */,
+  {     1,  8589,  9305,   7,   5, UNI_NSHU }   /* script=nushu */,
+  {     1,  9270,     9,   5,   2, UNI_INPC__NA }   /* inpc=na */,
+  {     4,  1552,  2268,   9,   2, UNI_PD }   /* category=pd */,
+  {     0,   629,     0,  30,   0, UNI_CJKEXTE }   /* cjkunifiedideographsextensione */,
+  {    12,  7249,  5062,   4,  11, UNI_CI }   /* iscaseignorable */,
+  {     3,  5986,  9412,  13,   4, UNI_NV__17_SLASH_2 }   /* numericvalue=17/2 */,
+  {     0,  8589,  9588,   7,   4, UNI_HMNG }   /* script=hmng */,
+  {     1,  7325,  9848,   3,   4, UNI_IN__12 }   /* in=v120 */,
+  {     0,  8780,  8275,   6,   8, UNI_SPECIALS }   /* block=specials */,
+  {     6,  9488,  7428,   4,  10, UNI_INWARANGCITI }   /* blk=warangciti */,
+  {     6,  7228,     1,  10,   1, -UNI_XPOSIXLOWER }   /* lowercase=n */,
+  {     6,  5986,  8726,  13,   6, UNI_NV__432000 }   /* numericvalue=432000 */,
+  {     1,  1537,  6621,   3,  10, UNI_DOMINO }   /* indominotiles */,
+  {     0,  9540,     3,   4,   1, -UNI_DIA }   /* dia=f */,
+  {     0,  7155,  1514,   3,  23, UNI_HIGHPUSURROGATES }   /* ishighprivateusesurrogates */,
+  {     0,  5032,  9836,  14,   4, UNI_POSIXXDIGIT }   /* asciihexdigit=true */,
+  {     0, 10033, 10154,   3,   2, UNI_LB__B2 }   /* lb=b2 */,
+  {     6,  3904,     0,  17,   0, UNI_uideo_values_index }   /* unifiedideograph= */,
+  {     1,  3385,  9255,  18,   5, -UNI_RI }   /* regionalindicator=false */,
+  {     0,  9488,  3734,   4,  17, UNI_INDICSIYAQNUMBERS }   /* blk=indicsiyaqnumbers */,
+  {     2,  9860,     0,   4,   0, UNI_VAI }   /* vaii */,
+  {     4,  5791,  4209,  13,  16, UNI_JG__MANICHAEANSAMEKH }   /* joininggroup=manichaeansamekh */,
+  {     0,  5791,    87,  13,   2, UNI_JG__HE }   /* joininggroup=he */,
+  {     0,  8589,  9335,   7,   5, UNI_SC__TAKR }   /* script=takri */,
+  {    13,  9277,  9708,   3,   4, UNI_SC__ORYA }   /* sc=orya */,
+  {     1,  9277,  2061,   3,   4, UNI_SC__MODI }   /* sc=modi */,
+  {     2, 10027,  6785,   3,  11, UNI_JG__MALAYALAMRA }   /* jg=malayalamra */,
+  {     1,  7567,     0,   9,   0, UNI_SIND }   /* khudawadi */,
+  {     0,   184,   728,   2,   6, UNI_N }   /* isnumber */,
+  {     0,  9708,     0,   4,   0, UNI_ORYA }   /* orya */,
+  {     1,  1906,     0,  16,   0, UNI_INDICNUMBERFORMS }   /* indicnumberforms */,
+  {     0,  8780,  8924,   6,   6, UNI_INLEPCHA }   /* block=lepcha */,
+  {     0, 10048,  9050,   3,   4, UNI_NV__1_SLASH_16 }   /* nv=1/16 */,
+  {     0, 10288,  5718,   8,   5, UNI_XPOSIXALNUM }   /* isxposixalnum */,
+  {     6,  9488,  5661,   4,  13, UNI_AEGEANNUMBERS }   /* blk=aegeannumbers */,
+  {     8,  3983,     0,  18,   0, UNI_PE }   /* isclosepunctuation */,
+  {    11,  3097,  4532,  18,   6, UNI_DT__MED }   /* decompositiontype=medial */,
+  {     0, 10132,  6169,   3,  12, UNI_WB__EB }   /* wb=glueafterzwj */,
+  {     0,  5791,  5895,  13,  13, UNI_JG__MANICHAEANONE }   /* joininggroup=manichaeanone */,
+  {     0,  8954,     3,   6,   1, -UNI__PERL_NCHAR }   /* nchar=f */,
+  {     3,  4658,    36,  15,   1, UNI_GREXT }   /* graphemeextend=t */,
+  {     2,  7418, 10135,  10,   3, UNI_XPOSIXUPPER }   /* uppercase=yes */,
+  {     1, 10296,     0,   4,   0, UNI_PO }   /* ispo */,
+  {     0,  8589,  3785,   7,   4, UNI_SC__MANI }   /* script=mani */,
+  {     1,  3836,  4703,  17,  15, UNI_ARMI }   /* scriptextensions=imperialaramaic */,
+  {     1,  2224,  2932,   3,  18, UNI_SUPARROWSA }   /* insupplementalarrowsa */,
+  {    13,  8780,  4401,   6,   9, UNI_TANGUTSUP }   /* block=tangutsup */,
+  {     8,  8780,  7129,   7,   9, UNI_CJKSTROKES }   /* block=cjkstrokes */,
+  {     0,    21,  8211,   2,   8, UNI_JAMOEXTB }   /* injamoextb */,
+  {     0,    45,     0,   2,   0, UNI_CO }   /* co */,
+  {     4,  3097,  6421,  18,   8, UNI_DT__NONCANON }   /* decompositiontype=noncanon */,
+  {    16,   184,  1166,   2,  25, UNI_DI }   /* isdefaultignorablecodepoint */,
+  {     2,  9277,  9860,   3,   3, UNI_VAI }   /* sc=vai */,
+  {     1,  8491,     0,   7,   0, UNI_MARC }   /* marchen */,
+  {     4,   184,  5564,   2,  13, UNI_QMARK }   /* isquotationmark */,
+  {     2, 10024,  5713,   3,  13, UNI_XPOSIXDIGIT }   /* gc=decimalnumber */,
+  {     1, 10033,   184,   3,   2, UNI_LB__IS }   /* lb=is */,
+  {     1,  9315,     0,   5,   0, UNI_ORYA }   /* oriya */,
+  {     0,  9812,     0,   4,   0, UNI_TAML }   /* taml */,
+  {     0,  4989,  1868,   3,   4, UNI_XPOSIXUPPER }   /* isupper */,
+  {     0,  5986,  5648,  13,   5, UNI_NV__10000 }   /* numericvalue=10000 */,
+  {    16,  8780,  3026,   7,  10, UNI_CHEROKEESUP }   /* block=cherokeesup */,
+  {     1,  8780,  8610,   6,   7, UNI_INSIDDHAM }   /* block=siddham */,
+  {     1,  2161,     3,  21,   1, -UNI_EXTPICT }   /* extendedpictographic=f */,
+  {     1,  9488,  8091,   4,   8, UNI_INARMENIAN }   /* blk=armenian */,
+  {     1,  9277,  9065,   3,   5, UNI_SC__ADLM }   /* sc=adlam */,
+  {    12,  3836,  8344,  17,   7, UNI_BENG }   /* scriptextensions=bengali */,
+  {     0,  2032,     0,  21,   0, UNI__PERL_NCHAR }   /* noncharactercodepoint */,
+  {     8,  3421,     0,  18,   0, UNI_RUMI }   /* ruminumeralsymbols */,
+  {     1,  9277,  8115,   3,   4, UNI_BASS }   /* sc=bass */,
+  {     1,   184,  3169,   2,   8, UNI_ETHI }   /* isethiopic */,
+  {     0,  3836,  9824,  17,   4, UNI_TGLG }   /* scriptextensions=tglg */,
+  {     0,   184,  8942,   2,   4, UNI_LYDI }   /* islydi */,
+  {     0,  1812,     0,  22,   0, UNI_cwl_values_index }   /* changeswhenlowercased= */,
+  {     3,  7318, 10105,  10,   3, UNI_IN__6 }   /* presentin=v60 */,
+  {     5, 10296,  9721,   3,   3, UNI_PHLP }   /* isphlp */,
+  {     3, 10132,  7603,   3,   9, UNI_WB__ML }   /* wb=midletter */,
+  {     4,  2224,  7694,   3,   8, UNI_INSAMARITAN }   /* insamaritan */,
+  {     4, 10048, 10148,   3,   2, UNI_NV__47 }   /* nv=47 */,
+  {     1,  5986,  9409,  13,   3, UNI_NV__5_SLASH_2 }   /* numericvalue=5/2 */,
+  {     5,   184,  4448,   2,   8, UNI_BAMUMSUP }   /* isbamumsup */,
+  {     2,  9488,   509,   4,  30, UNI_CJKEXTA }   /* blk=cjkunifiedideographsextensiona */,
+  {     0, 10027,  4733,   3,  15, UNI_JG__MANICHAEANALEPH }   /* jg=manichaeanaleph */,
+  {    13, 10033, 10030,   3,   2, UNI_GCB__T }   /* lb=jt */,
+  {     1,  9277,  6840,   3,   4, UNI_SC__NAND }   /* sc=nand */,
+  {     2,  9997,  2798,   3,  19, UNI_BC__LRO }   /* bc=lefttorightoverride */,
+  {     4,  1269, 10135,  25,   3, UNI_COMPEX }   /* fullcompositionexclusion=yes */,
+  {     1,  8780,  2684,   6,  19, UNI_INEGYPTIANHIEROGLYPHS }   /* block=egyptianhieroglyphs */,
+  {     0,  8589,  8611,   8,   3, UNI_SIDD }   /* script=sidd */,
+  {    15,  1591,  2685,   3,  18, UNI_INEGYPTIANHIEROGLYPHS }   /* inegyptianhieroglyphs */,
+  {     0, 10027,  7198,   3,  10, UNI_JG__KNOTTEDHEH }   /* jg=knottedheh */,
+  {     1,  8589,  8611,   8,   6, UNI_SIDD }   /* script=siddham */,
+  {     0,  9065,     0,   5,   0, UNI_ADLM }   /* adlam */,
+  {     1,  8589,  6973,   8,   3, UNI_SC__SYLO }   /* script=sylo */,
+  {     0,  1114,    26,  26,   1, UNI_CWKCF }   /* changeswhennfkccasefolded=y */,
+  {     1,  9768,  2288,   5,   3, UNI_SINH }   /* scx=sinh */,
+  {     7, 10009,  6421,   3,   8, UNI_DT__NONCANON }   /* dt=noncanon */,
+  {     0,  9768,  8115,   4,   4, UNI_BASS }   /* scx=bass */,
+  {    16,  6231,   720,   3,   8, UNI_INCUNEIFORM }   /* incuneiform */,
+  {    19,  1417,  9211,  25,   4, UNI_CCC__36 }   /* canonicalcombiningclass=ccc36 */,
+  {     9,  2569,  3511,  20,  18, UNI_VO__TU }   /* verticalorientation=transformedupright */,
+  {     2,  2529,     1,  20,   1, -UNI_TERM }   /* terminalpunctuation=n */,
+  {     0,   184,  1911,   2,  11, UNI_NUMBERFORMS }   /* isnumberforms */,
+  {     0,  3836,  5843,  17,   9, UNI_MLYM }   /* scriptextensions=malayalam */,
+  {     1,  9508,  9300,   4,   5, UNI_CCC__7 }   /* ccc=nukta */,
+  {     0,  5674,     1,  13,   1, -UNI_BIDIM }   /* bidimirrored=n */,
+  {     0, 10132,  1218,   3,   2, UNI_WB__KA }   /* wb=ka */,
+  {     6, 10182,    25,  29,   1, UNI__PERL_PROBLEMATIC_LOCALE_FOLDS }   /* _perl_problematic_locale_folds */,
+  {     0,  6554,    36,  11,   1, UNI_IDC }   /* idcontinue=t */,
+  {     0,  1417,  8813,  24,   3, UNI_CCC__122 }   /* canonicalcombiningclass=122 */,
+  {     1,  7218, 10160,  10,   2, UNI_LB__H3 }   /* linebreak=h3 */,
+  {    14,   184,  9496,   2,   4, UNI_BUHD }   /* isbuhd */,
+  {    21,  6231,   720,   3,  15, UNI_CUNEIFORMNUMBERS }   /* incuneiformnumbers */,
+  {     1,  9277,  9712,   3,   4, UNI_OSGE }   /* sc=osge */,
+  {     1, 10178,     0,   2,   0, UNI_ZP }   /* zp */,
+  {     5,  9488,  8840,   4,   6, UNI_INCHAKMA }   /* blk=chakma */,
+  {     2,  8589,  2429,   7,  20, UNI_PHLI }   /* script=inscriptionalpahlavi */,
+  {     1,  5791,  4081,  13,  16, UNI_JG__HANIFIROHINGYAPA }   /* joininggroup=hanifirohingyapa */,
+  {     2,  6928, 10135,  11,   3, UNI_SD }   /* softdotted=yes */,
+  {     1,  7088,  3403,  10,  18, UNI_BC__RLI }   /* bidiclass=righttoleftisolate */,
+  {     1,  8589,  1537,   8,   3, UNI_SC__SIND }   /* script=sind */,
+  {     0,  5986,  9428,  13,   3, UNI_NV__3_SLASH_8 }   /* numericvalue=3/8 */,
+  {     4,  3836,  4478,  17,   4, UNI_BRAI }   /* scriptextensions=brai */,
+  {     0,  8984,    36,   6,   1, UNI_QMARK }   /* qmark=t */,
+  {     0,  4791,  8499,   3,   6, UNI_INMULTANI }   /* inmultani */,
+  {     9, 10024,  1899,   3,   2, UNI_PC }   /* gc=pc */,
+  {     2,  3836,  9624,  17,   4, UNI_LAO }   /* scriptextensions=laoo */,
+  {     4,  9488,  8526,   4,   7, UNI_NB }   /* blk=noblock */,
+  {     1,  9277,  9038,   3,   6, UNI_SC__YEZI }   /* sc=yezidi */,
+  {     2,  9768,  8611,   5,   6, UNI_SIDD }   /* scx=siddham */,
+  {     0,  2741,     0,  19,   0, UNI_JAMOEXTB }   /* hanguljamoextendedb */,
+  {     8,  8589,  1013,   7,   5, UNI_SC__GREK }   /* script=greek */,
+  {     1,  9488,  7378,   4,  10, UNI_SUPARROWSA }   /* blk=suparrowsa */,
+  {     0, 10290, 10308,   6,   5, UNI_XPOSIXPRINT }   /* xposixprint */,
+  {     1,  5060,    26,  14,   1, UNI_CI }   /* caseignorable=y */,
+  {     3,   184,  2245,   2,  11, UNI_MTEI }   /* ismeeteimayek */,
+  {     1, 10063,     3,   3,   1, -UNI_SD }   /* sd=f */,
+  {     6,  7318,  7923,  10,   3, UNI_IN__4 }   /* presentin=4.0 */,
+  {     1,  8589,  4448,   7,   5, UNI_BAMU }   /* script=bamum */,
+  {     1,  5986,  8750,  13,   2, UNI_NV__80 }   /* numericvalue=80 */,
+  {     0,  9768,  9544,   4,   4, UNI_DIAK }   /* scx=diak */,
+  {     0,  7155,  1418,   3,   3, UNI_HANO }   /* ishano */,
+  {     3,  8780,  1442,   7,   9, UNI_CJKSYMBOLS }   /* block=cjksymbols */,
+  {     0, 10009,  4017,   3,   3, UNI_DT__FIN }   /* dt=fin */,
+  {     6,  8589,  7675,   7,   9, UNI_PALM }   /* script=palmyrene */,
+  {     0,  9488,  7657,   4,   9, UNI_INOLDPERMIC }   /* blk=oldpermic */,
+  {     4,  1417,  7178,  24,   4, UNI_CCC__6 }   /* canonicalcombiningclass=hanr */,
+  {     0,  6862,     0,  11,   0, UNI_NO }   /* othernumber */,
+  {     0,   867,     0,  18,   0, UNI_PHONETICEXT }   /* phoneticextensions */,
+  {     0, 10009,  3501,   3,   3, UNI_DT__MED }   /* dt=med */,
+  {     5,  1417,  9156,  25,   4, UNI_CCC__25 }   /* canonicalcombiningclass=ccc25 */,
+  {     3,  5986,  9055,  13,   5, UNI_NV__1_SLASH_320 }   /* numericvalue=1/320 */,
+  {     0,  8589,  6792,   8,   3, UNI_SAMR }   /* script=samr */,
+  {     0,  9488,  8463,   4,   7, UNI_KALI }   /* blk=kayahli */,
+  {    24,  7076,  3938,   3,  10, UNI_BOPOMOFOEXT }   /* inbopomofoext */,
+  {     1,  9508,     0,   4,   0, UNI_ccc_values_index }   /* ccc= */,
+  {     1,  8780,  2969,   6,  19, UNI_SUPARROWSC }   /* block=supplementalarrowsc */,
+  {    21,  4628,  4471,  15,   7, UNI_EA__N }   /* eastasianwidth=neutral */,
+  {     2,  9277,  9038,   3,   4, UNI_SC__YEZI }   /* sc=yezi */,
+  {     1,  8780,  5158,   6,  14, UNI_INGREEK }   /* block=greekandcoptic */,
+  {     4,  9508,  9116,   5,   4, UNI_CCC__17 }   /* ccc=ccc17 */,
+  {     5,  8780,  8366,   7,   6, UNI_CJKEXTC }   /* block=cjkextc */,
   {     0,   599,     0,  30,   0, UNI_CJKEXTD }   /* cjkunifiedideographsextensiond */,
-  {     1,  6885,  7861,   3,   7, UNI_HIRA }   /* ishiragana */,
-  {     0,  9365,  1085,   4,   4, UNI_HANG }   /* scx=hang */,
-  {     3,  9909,    25,   3,   1, UNI_PS }   /* isps */,
-  {     0,  8424,  7860,   6,   8, UNI_INHIRAGANA }   /* block=hiragana */,
-  {     1,  9193,  7401,   4,   9, UNI_GCB__V }   /* hst=voweljamo */,
-  {     1,  5760,  8985,  13,   3, UNI_NV__1_SLASH_6 }   /* numericvalue=1/6 */,
-  {     0,  9093,  5283,   4,  14, UNI_PHONETICEXTSUP }   /* blk=phoneticextsup */,
-  {     6,  3671,  9109,  17,   4, UNI_CANS }   /* scriptextensions=cans */,
-  {     3,   184,    62,   2,   5, UNI_XPOSIXGRAPH }   /* isgraph */,
-  {     1,  1497,   133,   9,   4, UNI_M }   /* category=mark */,
+  {     0,    21,  8219,   2,   8, UNI_INJAVANESE }   /* injavanese */,
+  {     0,  9262,    34,   3,   6, UNI_SB__EX }   /* sb=extend */,
+  {     1,  7438, 10174,  10,   2, UNI_WB__XX }   /* wordbreak=xx */,
+  {     0,  8589,  7684,   7,   9, UNI_PAUC }   /* script=paucinhau */,
+  {     0,  6469,    39,  12,   2, UNI_XPOSIXDIGIT }   /* numerictype=de */,
+  {     0, 10003,     0,   3,   0, UNI_ci_values_index }   /* ci= */,
+  {     0,  9488,  6253,   4,   5, UNI_INKHMER }   /* blk=khmer */,
+  {     0,  9015,    36,   5,   1, UNI_IDEO }   /* ideo=t */,
+  {     0,  1189,    39,   3,   2, UNI_XPOSIXDIGIT }   /* nt=de */,
+  {     1,  4916,  8646,   3,   6, UNI_LANA }   /* istaitham */,
+  {     4,  6193,     0,   6,   0, UNI_HEBR }   /* hebrew */,
+  {     2,  7318,  9396,  10,   4, UNI_IN__12_DOT_1 }   /* presentin=12.1 */,
+  {     7,  9488,  2703,   4,  19, UNI_ENCLOSEDALPHANUMSUP }   /* blk=enclosedalphanumsup */,
+  {     8,  9277,  7558,   3,   9, UNI_SC__QAAI }   /* sc=inherited */,
+  {     0,  8780,  3734,   6,  17, UNI_INDICSIYAQNUMBERS }   /* block=indicsiyaqnumbers */,
+  {     1,  1269,  1025,  25,   2, -UNI_COMPEX }   /* fullcompositionexclusion=no */,
+  {     1,  8966,     0,   8,   0, UNI_DT__CAN }   /* nfdqc=no */,
+  {     0, 10033,  1186,   3,   2, UNI_LB__PO }   /* lb=po */,
+  {     1,  8780,   114,   7,  34, UNI_DIACRITICALSFORSYMBOLS }   /* block=combiningdiacriticalmarksforsymbols */,
+  {     0,  1184,     0,   3,   0, UNI_DEP }   /* dep */,
+  {     1,  3836,  9560,  17,   4, UNI_GONG }   /* scriptextensions=gong */,
+  {    35,  9070,    36,   5,   1, UNI_POSIXXDIGIT }   /* ahex=t */,
+  {     0,  9768,  9572,   4,   4, UNI_GUJR }   /* scx=gujr */,
+  {     0,   184,  9736,   2,   4, UNI_COPT }   /* isqaac */,
+  {     0,  7249,    12,   5,   3, UNI_CARI }   /* iscarian */,
+  {     3, 10027,   341,   3,   2, UNI_JG__PE }   /* jg=pe */,
+  {     1, 10027,  5480,   3,  14, UNI_JG__NOJOININGGROUP }   /* jg=nojoininggroup */,
+  {     0,  7325, 10120,   3,   3, UNI_IN__8 }   /* in=v80 */,
+  {     2,  8780,  4340,   6,  13, UNI_MATHOPERATORS }   /* block=mathoperators */,
+  {     3,  9492,  5904,   4,   4, UNI_BPT__N }   /* bpt=none */,
+  {     4,   184,  8179,   2,   8, UNI_GURU }   /* isgurmukhi */,
+  {     0,  9346, 10135,   4,   3, UNI_IDC }   /* idc=yes */,
+  {     4,  7076,  1219,   3,   4, UNI_INBATAK }   /* inbatak */,
+  {     5,  6928,     3,  11,   1, -UNI_SD }   /* softdotted=f */,
+  {     0,   184,  9680,   2,   4, UNI_NBAT }   /* isnbat */,
+  {     0,  9488,  4369,   4,  16, UNI_SYRIACSUP }   /* blk=syriacsupplement */,
+  {     1,  8780,  5214,   6,   6, UNI_KANGXI }   /* block=kangxi */,
+  {     1, 10132,    34,   3,   2, UNI_WB__EX }   /* wb=ex */,
+  {     3,  9768,  8219,   4,   4, UNI_JAVA }   /* scx=java */,
+  {     9,  9768,  3751,   4,  17, UNI_KITS }   /* scx=khitansmallscript */,
+  {     5,  9556,  5633,   4,   2, UNI_LB__H2 }   /* gcb=lv */,
+  {     3, 10132,  8144,   3,   3, UNI_WB__EB }   /* wb=gaz */,
+  {     1,  4385,     0,   4,   0, UNI_TANG }   /* tang */,
+  {     1,  3734,     0,  17,   0, UNI_INDICSIYAQNUMBERS }   /* indicsiyaqnumbers */,
+  {     0,  9488,  4385,   4,  16, UNI_TANGUTCOMPONENTS }   /* blk=tangutcomponents */,
+  {     8, 10048,  8756,   3,   4, UNI_NV__9000 }   /* nv=9000 */,
+  {     6,  8780,  3457,   6,  18, UNI_TAIXUANJING }   /* block=taixuanjingsymbols */,
+  {     2,   184,  3026,   3,  17, UNI_CHEROKEESUP }   /* ischerokeesupplement */,
+  {     0,  9488,  8624,   4,   7, UNI_SUPPUAA }   /* blk=suppuaa */,
+  {     1,  8774,  1025,   6,   2, -UNI_BIDIM }   /* bidim=no */,
+  {     2,  7438,   108,  10,   2, UNI_WB__MB }   /* wordbreak=mb */,
+  {     2,  1910,     0,   2,   0, UNI_CN }   /* cn */,
+  {     4,  5564, 10135,  14,   3, UNI_QMARK }   /* quotationmark=yes */,
+  {     1,  7218,     3,  11,   1, UNI_LB__LF }   /* linebreak=lf */,
+  {     5,  4116,  5779,   3,  12, UNI_IPAEXT }   /* isipaextensions */,
+  {     8,  9262,   138,   3,   2, UNI_SB__FO }   /* sb=fo */,
+  {     0,  3097,  3439,  18,   5, UNI_DT__SML }   /* decompositiontype=small */,
+  {    10,  8589,  6385,   7,  12, UNI_SC__GONM }   /* script=masaramgondi */,
+  {     5,  4791,  2856,   3,  11, UNI_MONGOLIANSUP }   /* inmongoliansup */,
+  {     2,  8780,  6397,   6,  12, UNI_MATHALPHANUM }   /* block=mathalphanum */,
+  {    10,  8589,  2409,   7,  10, UNI_SC__GLAG }   /* script=glagolitic */,
+  {     0,  8589,  9692,   7,   4, UNI_NSHU }   /* script=nshu */,
+  {     0,  8780,  8491,   6,   7, UNI_INMARCHEN }   /* block=marchen */,
+  {     4,  9488,  2329,   4,  20, UNI_INANATOLIANHIEROGLYPHS }   /* blk=anatolianhieroglyphs */,
+  {    18,  3836,  9616,  17,   4, UNI_KTHI }   /* scriptextensions=kthi */,
+  {     1,  6420,  6482,   3,  11, UNI_INOLDHUNGARIAN }   /* inoldhungarian */,
+  {     0,  1505,  2254,   5,   5, UNI_GREEKEXT }   /* ingreekext */,
+  {     2,   184,  8526,   2,   7, UNI_NB }   /* isnoblock */,
+  {     0,   719,     0,  16,   0, UNI_CUNEIFORMNUMBERS }   /* cuneiformnumbers */,
+  {    20,  9488,  2741,   4,  19, UNI_JAMOEXTB }   /* blk=hanguljamoextendedb */,
+  {     0,  4688,  8259,  15,   8, UNI_IDENTIFIERTYPE__OBSOLETE }   /* identifiertype=obsolete */,
+  {     8,  9488,  3921,   4,   9, UNI_ARABICSUP }   /* blk=arabicsup */,
+  {     2,  5060, 10135,  14,   3, UNI_CI }   /* caseignorable=yes */,
+  {     3,  9488,  7388,   4,  10, UNI_SUPARROWSB }   /* blk=suparrowsb */,
+  {     9,  4033, 10178,  16,   2, UNI_ZP }   /* generalcategory=zp */,
+  {     4,  8589,  8477,   7,   7, UNI_MAKA }   /* script=makasar */,
+  {     0,  6469,   495,  12,   2, UNI_NT__NU }   /* numerictype=nu */,
+  {    18, 10027,  5843,   3,  13, UNI_JG__MALAYALAMLLLA }   /* jg=malayalamllla */,
+  {     0,  8780,  3052,   6,   9, UNI_HALFMARKS }   /* block=halfmarks */,
+  {     2,  8780,   283,   6,  33, UNI_MISCMATHSYMBOLSB }   /* block=miscellaneousmathematicalsymbolsb */,
+  {     3,  8978,    36,   6,   1, UNI__PERL_PATWS }   /* patws=t */,
+  {     8,  3836,  8652,  17,   7, UNI_TAVT }   /* scriptextensions=taiviet */,
+  {     5,  9444,  7408,   4,  10, UNI_AGE__NA }   /* age=unassigned */,
+  {    10,  9260,     3,   5,   1, -UNI_IDSB }   /* idsb=f */,
+  {     8,  4628,   865,  15,   1, UNI_EA__W }   /* eastasianwidth=w */,
+  {     1,  9768,  6840,   4,  11, UNI_NAND }   /* scx=nandinagari */,
+  {     2, 10048, 10146,   3,   2, UNI_NV__46 }   /* nv=46 */,
+  {     2,  9230,  9836,   5,   4, UNI_CWCF }   /* cwcf=true */,
+  {     4,  8894, 10135,   6,   3, UNI_JOINC }   /* joinc=yes */,
+  {     3,  2032,    26,  22,   1, UNI__PERL_NCHAR }   /* noncharactercodepoint=y */,
+  {     0,   184,  1066,   2,   2, UNI_CASEDLETTER }   /* islc */,
+  {     4, 10048,  7877,   3,   2, UNI_NV__13 }   /* nv=13 */,
+  {     0,  8780,  5214,   6,  14, UNI_KANGXI }   /* block=kangxiradicals */,
+  {     0,  3836,  9320,  17,   5, UNI_OSGE }   /* scriptextensions=osage */,
+  {     1, 10024,     0,   3,   0, UNI_gc_values_index }   /* gc= */,
+  {     1,    21,  7594,   2,   9, UNI_LATINEXTD }   /* inlatinextd */,
+  {     6,  9488,  5214,   4,   6, UNI_KANGXI }   /* blk=kangxi */,
+  {     8,  9508,  3564,   4,  17, UNI_WB__EB }   /* ccc=attachedbelowleft */,
+  {    26,  6193,     0,   4,   0, UNI_HEBR }   /* hebr */,
+  {     2,  4289,     0,  16,   0, UNI_MYANMAREXTB }   /* myanmarextendedb */,
+  {     4,  9277,  9804,   3,   4, UNI_SC__TALE }   /* sc=tale */,
+  {     0,  9230,     3,   5,   1, -UNI_CWCF }   /* cwcf=f */,
+  {    16,  6231,  7119,   3,   9, UNI_INCHORASMIAN }   /* inchorasmian */,
+  {     2, 10048,  5648,   3,   2, UNI_NV__10 }   /* nv=10 */,
+  {     0,  4916,  4402,   3,   8, UNI_TANGUTSUP }   /* istangutsup */,
+  {     0,  8449, 10135,   7,   3, UNI_HYPHEN }   /* hyphen=yes */,
+  {    16, 10182, 10270,   6,   9, UNI__PERL_ANY_FOLDS }   /* _perl_any_folds */,
+  {     0, 10027,  9884,   3,   4, UNI_JG__ZAIN }   /* jg=zain */,
+  {    12, 10250, 10265,  15,   5, UNI__PERL_CHARNAME_BEGIN }   /* _perl_charname_begin */,
+  {     0,  3836,   719,  17,   9, UNI_XSUX }   /* scriptextensions=cuneiform */,
+  {     0,  4033,   727,  16,   2, UNI_MN }   /* generalcategory=mn */,
+  {     0,   184,  3044,   3,  17, UNI_HALFMARKS }   /* iscombininghalfmarks */,
+  {    11,  7249,  1017,   4,   2, UNI_CAKM }   /* iscakm */,
+  {     0,  7358,     0,  10,   0, UNI_SAUR }   /* saurashtra */,
+  {     0, 10027,  5921,   3,  13, UNI_JG__MANICHAEANTEN }   /* jg=manichaeanten */,
+  {     1,  9277,  2608,   3,   6, UNI_BRAH }   /* sc=brahmi */,
+  {     0,    21,  4129,   2,   9, UNI_LATIN1 }   /* inlatin1sup */,
+  {     0,  7531,     0,   9,   0, UNI_EMOTICONS }   /* emoticons */,
+  {    13,  3836,  2608,  17,   4, UNI_BRAH }   /* scriptextensions=brah */,
+  {     4,  9640,  9255,   4,   5, -UNI_LOE }   /* loe=false */,
+  {     0,  8780,  3583,   8,  15, UNI_UCAS }   /* block=canadiansyllabics */,
+  {     0,  9592,     0,   4,   0, UNI_HMNP }   /* hmnp */,
+  {     9, 10027,  2637,   3,   3, UNI_JG__YEH }   /* jg=yeh */,
+  {     3,  8780,  6939,   6,  11, UNI_INSORASOMPENG }   /* block=sorasompeng */,
+  {     2,  6231,  6122,   3,  11, UNI_CYRILLICEXTC }   /* incyrillicextc */,
+  {     4,  4033,  5817,  16,  13, UNI_ZL }   /* generalcategory=lineseparator */,
+  {     1,  5791,  4733,  13,  15, UNI_JG__MANICHAEANALEPH }   /* joininggroup=manichaeanaleph */,
+  {     1,  3836,    57,  17,   2, UNI_YI }   /* scriptextensions=yi */,
+  {     5,  9444,  9396,   4,   4, UNI_AGE__12_DOT_1 }   /* age=12.1 */,
+  {     1,  7318,  8043,  10,   3, UNI_IN__8 }   /* presentin=8.0 */,
+  {     1,  5791,  6785,  13,  11, UNI_JG__MALAYALAMRA }   /* joininggroup=malayalamra */,
+  {     0,  8870,     0,   5,   0, UNI_EPRES }   /* epres */,
+  {     0,  8519,    26,   7,   1, UNI_DT__NONE }   /* nfkdqc=y */,
+  {     2,  5578,  1823,  14,   5, UNI_SB__LO }   /* sentencebreak=lower */,
+  {     1,  9277,  9728,   3,   4, UNI_MIAO }   /* sc=plrd */,
+  {     0,  9008,     0,   6,   0, UNI_THAA }   /* thaana */,
+  {     8,    25,     0,   1,   0, UNI_S }   /* s */,
+  {     2,  4989,  8316,   3,   7, UNI_UGAR }   /* isugaritic */,
+  {     0,  8984, 10135,   6,   3, UNI_QMARK }   /* qmark=yes */,
+  {     0,  4718,     0,  15,   0, UNI_LOWERCASELETTER }   /* lowercaseletter */,
+  {     0,   184,  4129,   2,   9, UNI_LATIN1 }   /* islatin1sup */,
+  {     0,  8780,  2287,   6,  21, UNI_SINHALAARCHAICNUMBERS }   /* block=sinhalaarchaicnumbers */,
+  {     0,  4033,  4718,  16,  15, UNI_LOWERCASELETTER }   /* generalcategory=lowercaseletter */,
+  {    32,  8780,   867,   6,  11, UNI_PHONETICEXT }   /* block=phoneticext */,
+  {     0,  7218,  6193,  10,  12, UNI_LB__HL }   /* linebreak=hebrewletter */,
+  {     1,  3133,     1,  18,   1, -UNI_EBASE }   /* emojimodifierbase=n */,
+  {     0,  8780,  5606,   6,  14, UNI_SUPPUNCTUATION }   /* block=suppunctuation */,
+  {     1,  1166,     0,  26,   0, UNI_di_values_index }   /* defaultignorablecodepoint= */,
+  {     0, 10012,  9868,   3,   4, UNI_EA__W }   /* ea=wide */,
+  {     1,  9488,  4479,   5,   6, UNI_BRAI }   /* blk=braille */,
+  {     0,  9508,  3007,   4,  13, UNI_CCC__214 }   /* ccc=attachedabove */,
+  {     1,  1417,  9161,  25,   4, UNI_CCC__26 }   /* canonicalcombiningclass=ccc26 */,
+  {     0,    21,  8912,   2,   6, UNI_INKHOJKI }   /* inkhojki */,
+  {     0,  8858,    26,   6,   1, UNI_ECOMP }   /* ecomp=y */,
+  {    16,  9768,  9724,   4,   4, UNI_PHNX }   /* scx=phnx */,
+  {     6,  9768,  8091,   4,   8, UNI_ARMN }   /* scx=armenian */,
+  {     4,  9277,  8107,   3,   4, UNI_BALI }   /* sc=bali */,
+  {     6, 10132, 10015,   3,   3, UNI_WB__EB }   /* wb=ebg */,
+  {     0,   689,     0,  30,   0, UNI_CJKEXTG }   /* cjkunifiedideographsextensiong */,
+  {     3,  6231,  3026,   3,  10, UNI_CHEROKEESUP }   /* incherokeesup */,
+  {     1,  4703,     0,  15,   0, UNI_ARMI }   /* imperialaramaic */,
+  {     0,  8589,  8924,   7,   6, UNI_LEPC }   /* script=lepcha */,
+  {     0,  1552,  6035,   9,   2, UNI_PF }   /* category=pf */,
+  {    18,   567,     0,   2,   0, UNI_NB }   /* nb */,
+  {     4,  7218,   908,  10,   2, UNI_LB__PR }   /* linebreak=pr */,
+  {     0,  4916,  9331,   3,   4, UNI_TALE }   /* istaile */,
+  {     0,    21,  9038,   2,   6, UNI_INYEZIDI }   /* inyezidi */,
+  {     6,  5986,  7789,  13,   2, UNI_NV__50 }   /* numericvalue=50 */,
+  {     5, 10315,  3379,   5,   5, UNI_XPOSIXBLANK }   /* horizspace */,
+  {     1,   184,  8841,   3,   5, UNI_CAKM }   /* ischakma */,
+  {     1,  8884,    36,   4,   1, UNI_EXT }   /* ext=t */,
+  {     0,  9768,  9812,   4,   4, UNI_TAML }   /* scx=taml */,
+  {     0,  8780,  6620,   6,   6, UNI_DOMINO }   /* block=domino */,
+  {     1,  8589,  8618,   8,   6, UNI_SOYO }   /* script=soyombo */,
+  {     3,  3836,  2224,  17,  21, UNI_PRTI }   /* scriptextensions=inscriptionalparthian */,
+  {     0,  8780,    43,   7,   2, UNI_CJK }   /* block=cjk */,
+  {     0,  7318, 10078,  10,   3, UNI_IN__2_DOT_1 }   /* presentin=v21 */,
+  {     5,  8780,  8359,   7,   6, UNI_CJKEXTB }   /* block=cjkextb */,
+  {     6,   184,  3133,   2,  17, UNI_EBASE }   /* isemojimodifierbase */,
+  {     0,  8780,  8912,   6,   6, UNI_INKHOJKI }   /* block=khojki */,
+  {     0,  9277,  3785,   3,  10, UNI_SC__MANI }   /* sc=manichaean */,
+  {     2, 10003,    36,   3,   1, UNI_CI }   /* ci=t */,
+  {     1,  9277,  9512,   3,   4, UNI_CHRS }   /* sc=chrs */,
+  {     3,  3367,     1,  18,   1, -UNI__PERL_PATWS }   /* patternwhitespace=n */,
+  {     3,  8123,     0,   8,   0, UNI_BUGI }   /* buginese */,
+  {     1, 10132,  4360,   3,   9, UNI_WB__EB }   /* wb=emodifier */,
+  {     8,  8780,  2703,   6,  19, UNI_ENCLOSEDALPHANUMSUP }   /* block=enclosedalphanumsup */,
+  {     1,  8780,   749,   6,  16, UNI_ENCLOSEDALPHANUM }   /* block=enclosedalphanum */,
+  {     3,  8666,     0,   7,   0, UNI_TIRH }   /* tirhuta */,
+  {     7,  9997, 10054,   3,   3, UNI_BC__PDF }   /* bc=pdf */,
+  {     2,  8589,  9085,   7,   5, UNI_BATK }   /* script=batak */,
+  {     1,  9488,    42,   4,   3, UNI_CJK }   /* blk=cjk */,
+  {     1, 10033,    18,   3,   2, UNI_RI }   /* lb=ri */,
+  {     1,  1188,  9003,   3,   5, UNI_INTELUGU }   /* intelugu */,
+  {    17,   184,  1018,   2,   5, UNI_MUSIC }   /* ismusic */,
+  {     3, 10024,  1587,   3,   1, UNI_Z }   /* gc=z */,
+  {     1,  8491,     0,   4,   0, UNI_MARC }   /* marc */,
+  {    14,  6231,    43,   3,  35, UNI_CJKCOMPATIDEOGRAPHSSUP }   /* incjkcompatibilityideographssupplement */,
+  {     0,  5037,  9836,   9,   4, UNI_XPOSIXXDIGIT }   /* hexdigit=true */,
+  {     0,  6420,  7279,   3,   9, UNI_INOLDPERSIAN }   /* inoldpersian */,
+  {     0,  9488,  8116,   5,   7, UNI_INBASSAVAH }   /* blk=bassavah */,
+  {     6,  9235,     0,   4,   0, UNI_CWCM }   /* cwcm */,
+  {     6,  9488,  7693,   4,   9, UNI_INSAMARITAN }   /* blk=samaritan */,
+  {     8,  1417,  9206,  25,   4, UNI_CCC__35 }   /* canonicalcombiningclass=ccc35 */,
+  {     0, 10296,     2,   3,   1, UNI_PI }   /* ispi */,
+  {     2,  9768,  9464,   4,   4, UNI_ARMN }   /* scx=armn */,
+  {     0,  5508,     3,  14,   1, -UNI_PATSYN }   /* patternsyntax=f */,
+  {     0,  1008,     0,   2,   0, UNI_CI }   /* ci */,
+  {     0,  9277,  7291,   3,   4, UNI_SC__SOGD }   /* sc=sogd */,
+  {    11,   184,  6840,   2,   4, UNI_NAND }   /* isnand */,
+  {    11,  8147,  1025,   8,   2, -UNI_EXTPICT }   /* extpict=no */,
+  {     0,   184,   720,   3,  29, UNI_CUNEIFORMNUMBERS }   /* iscuneiformnumbersandpunctuation */,
+  {     1,  5986,  7819,  13,   8, UNI_NV__3_SLASH_16 }   /* numericvalue=1.88e-01 */,
+  {     0,  9488,   183,   4,  20, UNI_MISCSYMBOLS }   /* blk=miscellaneoussymbols */,
+  {     0,  9488,  8407,   4,   7, UNI_DSRT }   /* blk=deseret */,
+  {     0, 10129,  9255,   3,   5, -UNI_VS }   /* vs=false */,
+  {     0,  5032,     3,  14,   1, -UNI_POSIXXDIGIT }   /* asciihexdigit=f */,
+  {     1,   184,  5284,   2,   7, UNI_LISUSUP }   /* islisusup */,
+  {     2,  9488,  8631,   4,   7, UNI_SUPPUAB }   /* blk=suppuab */,
+  {    10,  1552,     7,  10,   1, UNI_SC }   /* category=sc */,
+  {     4,   184,   720,   3,  15, UNI_CUNEIFORMNUMBERS }   /* iscuneiformnumbers */,
+  {    10,  3151,     0,  18,   0, UNI_epres_values_index }   /* emojipresentation= */,
+  {     6,  5791,  5382,  13,  14, UNI_JG__MANICHAEANQOPH }   /* joininggroup=manichaeanqoph */,
+  {     1,  8267,     0,   8,   0, UNI_radical_values_index }   /* radical= */,
+  {     3,  3374,    26,  11,   1, UNI_XPOSIXSPACE }   /* whitespace=y */,
+  {    10,  9464,     0,   4,   0, UNI_ARMN }   /* armn */,
+  {     3,  7028,  9039,   3,   3, UNI_YEZI }   /* isyezi */,
+  {     1,  8780,  3026,   7,   7, UNI_INCHEROKEE }   /* block=cherokee */,
+  {     0, 10063,     0,   3,   0, UNI_sd_values_index }   /* sd= */,
+  {     2,  3836,  1537,  18,   3, UNI_SIND }   /* scriptextensions=sind */,
+  {     0,  8894,     1,   6,   1, -UNI_JOINC }   /* joinc=n */,
+  {    10, 10296,  9729,   3,   3, UNI_MIAO }   /* isplrd */,
+  {     0,  9488,  2722,   4,  19, UNI_JAMOEXTA }   /* blk=hanguljamoextendeda */,
+  {     1, 10009,  8948,   3,   6, UNI_DT__NAR }   /* dt=narrow */,
+  {     1,  8780,  6884,   6,  11, UNI_INPAHAWHHMONG }   /* block=pahawhhmong */,
+  {     2,  3836,  7308,  17,  10, UNI_PHNX }   /* scriptextensions=phoenician */,
+  {     0,  9235,    36,   5,   1, UNI_CWCM }   /* cwcm=t */,
+  {     8,  8589,  9688,   7,   4, UNI_NKO }   /* script=nkoo */,
+  {     1,  9508,  7078,   4,  10, UNI_CCC__BR }   /* ccc=belowright */,
+  {     4,  6133,     0,  12,   0, UNI_ETHIOPICEXTA }   /* ethiopicexta */,
+  {     1, 10033, 10164,   3,   2, UNI_GCB__V }   /* lb=jv */,
+  {     3,  9768,  1222,   4,   4, UNI_KANA }   /* scx=kana */,
+  {     0, 10048,  9060,   3,   5, UNI_NV__11_SLASH_12 }   /* nv=11/12 */,
+  {     2,  4033,    48,  16,   1, UNI_P }   /* generalcategory=p */,
+  {     7,  9997,  4321,   3,  16, UNI_BC__S }   /* bc=segmentseparator */,
+  {     1,  9768,  9828,   4,   4, UNI_THAI }   /* scx=thai */,
+  {     0,   184,  5508,   2,  13, UNI_PATSYN }   /* ispatternsyntax */,
+  {     0,  9277,  2912,   3,   4, UNI_SUND }   /* sc=sund */,
+  {     0,  3836,  9532,  17,   4, UNI_CYRL }   /* scriptextensions=cyrl */,
+  {     1,   184,    43,   3,  15, UNI_CJKCOMPAT }   /* iscjkcompatibility */,
+  {     2,  3529,     1,  18,   1, -UNI_VS }   /* variationselector=n */,
+  {     0,  9768,  9668,   4,   4, UNI_MTEI }   /* scx=mtei */,
+  {     0,  8589,  9752,   7,   4, UNI_SC__ROHG }   /* script=rohg */,
+  {    14,  4583,     0,   4,   0, UNI_DASH }   /* dash */,
+  {     6,  5986, 10152,  13,   2, UNI_NV__49 }   /* numericvalue=49 */,
+  {     0,   184,  1060,   3,   3, UNI_COPT }   /* iscopt */,
+  {     7,   117,  1908,   4,  14, UNI_INDICNUMBERFORMS }   /* inindicnumberforms */,
+  {     3,  1899,     0,   2,   0, UNI_PC }   /* pc */,
+  {     0,  7155,  5187,   3,  13, UNI_HIGHSURROGATES }   /* ishighsurrogates */,
+  {     1,  2182,    34,  21,   2, UNI_GCB__EX }   /* graphemeclusterbreak=ex */,
+  {     0, 10048,  7754,   3,   2, UNI_NV__11 }   /* nv=11 */,
+  {     2,  3259,     0,  18,   0, UNI_idsb_values_index }   /* idsbinaryoperator= */,
+  {     0,    21,  1677,   2,   9, UNI_LATINEXTE }   /* inlatinexte */,
+  {     0,  8589,  2061,   7,   4, UNI_SC__MODI }   /* script=modi */,
+  {     6,  7158,  1025,  10,   2, -UNI_DIA }   /* diacritic=no */,
+  {     0, 10296,   909,   3,   9, UNI_CO }   /* isprivateuse */,
+  {     0,  1417,  9201,  25,   4, UNI_CCC__34 }   /* canonicalcombiningclass=ccc34 */,
+  {     0,  7739,    26,   8,   1, UNI_IDS }   /* idstart=y */,
+  {     0,   809,     0,  22,   0, UNI_ENCLOSEDIDEOGRAPHICSUP }   /* enclosedideographicsup */,
+  {     3,  9277,  2203,   3,  14, UNI_SC__ROHG }   /* sc=hanifirohingya */,
+  {     8,  1537,  4600,   4,  13, UNI_DIACRITICALSEXT }   /* indiacriticalsext */,
+  {    10,  3836,  9038,  17,   4, UNI_YEZI }   /* scriptextensions=yezi */,
+  {    15,  9997,  3403,   3,  18, UNI_BC__RLI }   /* bc=righttoleftisolate */,
+  {     0,   184,  6928,   2,  10, UNI_SD }   /* issoftdotted */,
+  {    12,  9444,     9,   4,   2, UNI_AGE__NA }   /* age=na */,
+  {     0,    21,  5256,   2,  14, UNI_LATINEXTD }   /* inlatinextendedd */,
+  {     1,  7739,  9255,   8,   5, -UNI_IDS }   /* idstart=false */,
+  {     3,   184,  3937,   2,   4, UNI_BOPO }   /* isbopo */,
+  {    22, 10290, 10303,   6,   5, UNI_XPOSIXBLANK }   /* xposixblank */,
+  {     1,  3151,     3,  18,   1, -UNI_EPRES }   /* emojipresentation=f */,
+  {     1,  5037,    36,   9,   1, UNI_XPOSIXXDIGIT }   /* hexdigit=t */,
+  {     1,  3025,     0,  18,   0, UNI_CHEROKEESUP }   /* cherokeesupplement */,
+  {     0,  7155,  4066,   3,  15, UNI_HALFANDFULLFORMS }   /* ishalfandfullforms */,
+  {     0, 10340,  3379,   6,   5, UNI_VERTSPACE }   /* isvertspace */,
+  {     4, 10012,     9,   3,   2, UNI_EA__NA }   /* ea=na */,
+  {     6,  8780,  8990,   6,   6, UNI_INREJANG }   /* block=rejang */,
+  {     0,  7228,    36,  10,   1, UNI_XPOSIXLOWER }   /* lowercase=t */,
+  {     8,  3836,  9860,  17,   4, UNI_VAI }   /* scriptextensions=vaii */,
+  {     0,  1417,  8799,  25,   5, UNI_CCC__107 }   /* canonicalcombiningclass=ccc107 */,
+  {     1,  6231,  6110,   3,  11, UNI_CYRILLICEXTB }   /* incyrillicextb */,
+  {     0,  9444,  7826,   4,   4, UNI_AGE__12 }   /* age=12.0 */,
+  {     4,  1812, 10135,  22,   3, UNI_CWL }   /* changeswhenlowercased=yes */,
+  {     0,   406,     0,   7,   0, UNI_XPOSIXCNTRL }   /* control */,
+  {     1,  9488,  6884,   4,  11, UNI_INPAHAWHHMONG }   /* blk=pahawhhmong */,
+  {    11,  8589,  9480,   7,   4, UNI_BATK }   /* script=batk */,
+  {     3,  5739,  9255,  13,   5, -UNI_GRBASE }   /* graphemebase=false */,
+  {     7,  8589,  8840,   7,   6, UNI_SC__CAKM }   /* script=chakma */,
+  {     0,  9488,  7398,   4,  10, UNI_SUPARROWSC }   /* blk=suparrowsc */,
+  {     0,  9768,  2409,   4,   4, UNI_GLAG }   /* scx=glag */,
+  {     1,  9277,  2287,   3,   7, UNI_SC__SINH }   /* sc=sinhala */,
+  {    12, 10024,   339,   3,   2, UNI_LO }   /* gc=lo */,
+  {     0,  7438,   125,  10,   2, UNI_LB__CR }   /* wordbreak=cr */,
+  {     0,  9277,  2855,   3,   9, UNI_SC__MONG }   /* sc=mongolian */,
+  {     1,  8414,     0,   7,   0, UNI_ELBA }   /* elbasan */,
+  {     0, 10296,  2571,   3,   3, UNI_PRTI }   /* isprti */,
+  {     1,  3836,  3025,  17,   8, UNI_CHER }   /* scriptextensions=cherokee */,
+  {     1,  1591,  3170,   3,   7, UNI_INETHIOPIC }   /* inethiopic */,
+  {     0,  8780,  6620,   6,  11, UNI_DOMINO }   /* block=dominotiles */,
+  {     0,  1417,  9166,  25,   4, UNI_CCC__27 }   /* canonicalcombiningclass=ccc27 */,
+  {     2,  4116,  3278,   3,  17, UNI_PI }   /* isinitialpunctuation */,
+  {    18,  8888,     0,   4,   0, UNI_HATR }   /* hatr */,
+  {     0,  8589,  7292,   8,   6, UNI_SC__SOGD }   /* script=sogdian */,
+  {     3,  4791,  2062,   3,   3, UNI_INMODI }   /* inmodi */,
+  {     1,  2218,  9689,   3,   2, UNI_INNKO }   /* innko */,
+  {     4,  8930,  9255,   6,   5, -UNI_XPOSIXLOWER }   /* lower=false */,
+  {     1,  3836,  1654,  17,   6, UNI_HANG }   /* scriptextensions=hangul */,
+  {     2,  8780,  1466,   7,  23, UNI_DIACRITICALSFORSYMBOLS }   /* block=combiningmarksforsymbols */,
+  {     2,  8589,  8936,   7,   4, UNI_LYCI }   /* script=lyci */,
+  {     6,   184,     7,   3,   1, UNI_XPOSIXCNTRL }   /* iscc */,
+  {     1,  9277,  8786,   3,   4, UNI_CARI }   /* sc=cari */,
+  {     2,   184,   114,   3,  24, UNI_DIACRITICALS }   /* iscombiningdiacriticalmarks */,
+  {     5,  9488,  7278,   4,  10, UNI_INOLDPERSIAN }   /* blk=oldpersian */,
+  {    20,  1552,   206,   9,   2, UNI_PI }   /* category=pi */,
+  {     1,  9508, 10172,   4,   2, UNI_CCC__9 }   /* ccc=vr */,
+  {     0,   184,  1442,   3,  23, UNI_CJKSYMBOLS }   /* iscjksymbolsandpunctuation */,
+  {     2, 10024,   598,   3,   2, UNI_XPOSIXCNTRL }   /* gc=cc */,
+  {    14,  7325, 10096,   3,   3, UNI_IN__5 }   /* in=v50 */,
+  {     0,  9277,  8680,   3,   7, UNI_ZZZZ }   /* sc=unknown */,
+  {     0,  9270,  2555,   5,   6, UNI_INPC__BOTTOM }   /* inpc=bottom */,
+  {     4,  8589,  1176,   8,   3, UNI_SORA }   /* script=sora */,
+  {     2,   659,     0,  30,   0, UNI_CJKEXTF }   /* cjkunifiedideographsextensionf */,
+  {     0,  8960,    17,   7,   1, UNI_COMPEX }   /* nfcqc=no */,
+  {     1,  1417,  9468,  24,   4, UNI_CCC__216 }   /* canonicalcombiningclass=atar */,
+  {     4,  8694,  1025,   7,   2, -UNI_XPOSIXSPACE }   /* wspace=no */,
+  {     0,  9888,     0,   4,   0, UNI_ZANB }   /* zanb */,
+  {    14,  8780,  3341,   6,   8, UNI_DINGBATS }   /* block=dingbats */,
+  {     1,  7218,  5746,  10,   5, UNI_EBASE }   /* linebreak=ebase */,
+  {     1,  8575,     1,   7,   1, -UNI_PATSYN }   /* patsyn=n */,
+  {     0, 10048,  9380,   3,   4, UNI_NV__1_SLASH_80 }   /* nv=1/80 */,
+  {     3,  9800,     0,   4,   0, UNI_TAGS }   /* tags */,
+  {     1, 10290,  5039,   6,   6, UNI_XPOSIXXDIGIT }   /* xposixxdigit */,
+  {     0,  9488,  2874,   4,  19, UNI_OTTOMANSIYAQNUMBERS }   /* blk=ottomansiyaqnumbers */,
+  {     1,  9997,  6049,   3,  12, UNI_BC__AN }   /* bc=arabicnumber */,
+  {     0,  4916,  8292,   3,   7, UNI_TAGB }   /* istagbanwa */,
+  {     1,  4628,     0,  15,   0, UNI_ea_values_index }   /* eastasianwidth= */,
+  {     0,   184,  8924,   2,   6, UNI_LEPC }   /* islepcha */,
+  {     0,  7693,     0,   9,   0, UNI_SAMR }   /* samaritan */,
+  {     0,  7318, 10075,  10,   3, UNI_IN__2 }   /* presentin=v20 */,
+  {     5,  9488,  1294,   4,  25, UNI_SUPERANDSUB }   /* blk=superscriptsandsubscripts */,
+  {     0, 10048,  7859,   3,   4, UNI_NV__2000 }   /* nv=2000 */,
+  {    12,    21,  7188,   2,  10, UNI_INKHAROSHTHI }   /* inkharoshthi */,
+  {     7,  3836,  3937,  17,   8, UNI_BOPO }   /* scriptextensions=bopomofo */,
+  {     0,  9556,  6178,   4,   3, UNI_LB__ZWJ }   /* gcb=zwj */,
+  {     2,   184,   149,   3,  34, UNI_DIACRITICALSSUP }   /* iscombiningdiacriticalmarkssupplement */,
+  {    14,  6420,  4869,   3,  14, UNI_NARB }   /* inoldnortharabian */,
+  {     0, 10030,     0,   4,   0, UNI_JT__L }   /* jt=l */,
+  {     1,  2203,     0,  14,   0, UNI_ROHG }   /* hanifirohingya */,
+  {     1,  5791,  6346,  13,   3, UNI_JG__NYA }   /* joininggroup=nya */,
+  {     0,  8780,  6505,   6,   8, UNI_PHAISTOS }   /* block=phaistos */,
+  {     4,   184,  9684,   2,   4, UNI_NEWA }   /* isnewa */,
+  {    32,  4033,   908,  16,  10, UNI_CO }   /* generalcategory=privateuse */,
+  {    12,  9277,  9484,   3,   4, UNI_BHKS }   /* sc=bhks */,
+  {     5,   509,     0,  20,   0, UNI_CJK }   /* cjkunifiedideographs */,
+  {     1, 10027,  7048,   3,  10, UNI_JG__AFRICANQAF }   /* jg=africanqaf */,
+  {     0,  7438,  5851,  10,   2, UNI_WB__ML }   /* wordbreak=ml */,
+  {     3,  9612,     0,   4,   0, UNI_KNDA }   /* knda */,
+  {     1,  9488,   148,   4,  35, UNI_DIACRITICALSSUP }   /* blk=combiningdiacriticalmarkssupplement */,
+  {     3,  7325,  7755,   3,   3, UNI_IN__1_DOT_1 }   /* in=1.1 */,
+  {     0,  1552,    32,   9,   2, UNI__PERL_SURROGATE }   /* category=cs */,
+  {     2,  9508,  6445,   4,  12, UNI_CCC__0 }   /* ccc=notreordered */,
+  {     0,  2218,  7631,   3,   8, UNI_INNEWTAILUE }   /* innewtailue */,
+  {     4,  9488,  8227,   4,   8, UNI_KANAEXTA }   /* blk=kanaexta */,
+  {     0,  1988,  1025,  22,   2, -UNI_LOE }   /* logicalorderexception=no */,
+  {    26,  8960,    47,   6,   1, UNI_NFCQC__M }   /* nfcqc=m */,
+  {     0,  5986,  7859,  13,   3, UNI_NV__200 }   /* numericvalue=200 */,
+  {     4,  3937,     0,   4,   0, UNI_BOPO }   /* bopo */,
+  {     0,  8894,  9255,   6,   5, -UNI_JOINC }   /* joinc=false */,
+  {     0,    21,  8924,   2,   6, UNI_INLEPCHA }   /* inlepcha */,
+  {     0,  6553,     0,  12,   0, UNI_xidc_values_index }   /* xidcontinue= */,
+  {     7,  7076,  4449,   3,   4, UNI_INBAMUM }   /* inbamum */,
+  {     1, 10027,  4773,   3,   3, UNI_JG__SAD }   /* jg=sad */,
+  {     0,  7218, 10174,  10,   2, UNI_LB__XX }   /* linebreak=xx */,
+  {     0,  8780,  5284,   6,   7, UNI_LISUSUP }   /* block=lisusup */,
+  {     0,  5578,  9080,  14,   5, UNI_SB__AT }   /* sentencebreak=aterm */,
+  {     0, 10033,  4360,   3,   9, UNI_EMOD }   /* lb=emodifier */,
+  {     1,  9277,  1536,   3,   4, UNI_SC__SIND }   /* sc=sind */,
+  {     1,  8589,  8484,   7,   7, UNI_SC__MAND }   /* script=mandaic */,
+  {     0,  3385,     0,  18,   0, UNI_ri_values_index }   /* regionalindicator= */,
+  {     6,  3836,  9888,  17,   4, UNI_ZANB }   /* scriptextensions=zanb */,
+  {     4,  9768,  2560,   4,   4, UNI_MAND }   /* scx=mand */,
+  {     0,  6517,     0,  12,   0, UNI_PLAYINGCARDS }   /* playingcards */,
+  {     1,  8780,    43,   7,  25, UNI_CJKCOMPATIDEOGRAPHS }   /* block=cjkcompatibilityideographs */,
+  {     3,  8147,     0,   9,   0, -UNI_EXTPICT }   /* extpict=f */,
+  {     0,  8780,  6517,   6,  12, UNI_PLAYINGCARDS }   /* block=playingcards */,
+  {     1, 10027,  5856,   3,  13, UNI_JG__MALAYALAMNNNA }   /* jg=malayalamnnna */,
+  {     1,  6420,  3332,   3,  17, UNI_ORNAMENTALDINGBATS }   /* inornamentaldingbats */,
+  {     0,  9277,   497,   5,   3, UNI_KHMR }   /* sc=khmer */,
+  {     0,  8780,  8942,   6,   6, UNI_INLYDIAN }   /* block=lydian */,
+  {     1,  9488,   749,   4,  21, UNI_ENCLOSEDALPHANUM }   /* blk=enclosedalphanumerics */,
+  {     0,  4033,   132,  16,   2, UNI_LM }   /* generalcategory=lm */,
+  {     0,  8780,  3457,   6,  11, UNI_TAIXUANJING }   /* block=taixuanjing */,
+  {     2,  2224,   896,   3,  27, UNI_SUPPUAA }   /* insupplementaryprivateuseareaa */,
+  {     0,  3379,  1025,   6,   2, -UNI_XPOSIXSPACE }   /* space=no */,
+  {     0,  1812,    26,  22,   1, UNI_CWL }   /* changeswhenlowercased=y */,
+  {     0,  9768,  9680,   4,   4, UNI_NBAT }   /* scx=nbat */,
+  {     0,  4791,   393,   3,   2, UNI_INMRO }   /* inmro */,
+  {     1,   184,  9664,   2,   3, UNI_MRO }   /* ismro */,
+  {     2,  9488,  5804,   4,  13, UNI_KANAEXTA }   /* blk=kanaextendeda */,
+  {     0, 10132,     0,   3,   0, UNI_wb_values_index }   /* wb= */,
+  {     0,  8924,     0,   4,   0, UNI_LEPC }   /* lepc */,
+  {     6,  8659,     0,   7,   0, UNI_TIBT }   /* tibetan */,
+  {     2,   184,  1060,   3,   5, UNI_COPT }   /* iscoptic */,
+  {    22,  9508,  9026,   4,   6, UNI_CCC__9 }   /* ccc=virama */,
+  {     1,  9270,   868,   3,  10, UNI_PHONETICEXT }   /* inphoneticext */,
+  {     0,  1677,     0,   5,   0, UNI_LATN }   /* latin */,
+  {     1,  3385,  9836,  18,   4, UNI_RI }   /* regionalindicator=true */,
+  {     0,  1790,    36,  22,   1, UNI_CWCM }   /* changeswhencasemapped=t */,
+  {     3,  8589,  9660,   7,   4, UNI_SC__MLYM }   /* script=mlym */,
+  {     0, 10033,  6169,   3,   4, UNI_LB__GL }   /* lb=glue */,
+  {     4,  1537,  2988,  24,  19, UNI_INPC__TOPANDBOTTOMANDLEFT }   /* indicpositionalcategory=topandbottomandleft */,
+  {     3,  5791,  3819,  13,  17, UNI_JG__MANICHAEANTHAMEDH }   /* joininggroup=manichaeanthamedh */,
+  {     4,  5986, 10150,  13,   2, UNI_NV__48 }   /* numericvalue=48 */,
+  {     4,   184,  6796,   2,  11, UNI_MEDF }   /* ismedefaidrin */,
+  {    18,  3382,    36,   3,   1, UNI_CE }   /* ce=t */,
+  {     8, 10048,  7978,   3,   2, UNI_NV__16 }   /* nv=16 */,
+  {     1,  7438,    73,  10,   2, UNI_WB__EB }   /* wordbreak=em */,
+  {     2,  1417,  9196,  25,   4, UNI_CCC__33 }   /* canonicalcombiningclass=ccc33 */,
+  {    19,  9768,  9620,   4,   4, UNI_LANA }   /* scx=lana */,
+  {     2,  3382, 10135,   3,   3, UNI_CE }   /* ce=yes */,
+  {    17,  8780,  4883,   6,  15, UNI_SARB }   /* block=oldsoutharabian */,
+  {    17,  8243,     0,   8,   0, UNI_MAHJ }   /* mahajani */,
+  {     1,  5674,     0,  13,   0, UNI_bidim_values_index }   /* bidimirrored= */,
+  {     2,  9488,   867,   4,  18, UNI_PHONETICEXT }   /* blk=phoneticextensions */,
+  {     0,  6229,    36,  12,   1, UNI_JOINC }   /* joincontrol=t */,
+  {    16,  3836,  9576,  17,   4, UNI_GURU }   /* scriptextensions=guru */,
+  {     4,  5791,  5620,  13,  10, UNI_JG__TEHMARBUTA }   /* joininggroup=tehmarbuta */,
+  {     2, 10048,  9055,   3,   4, UNI_NV__1_SLASH_32 }   /* nv=1/32 */,
+  {     0,    21,  5270,   2,  14, UNI_LATINEXTE }   /* inlatinextendede */,
+  {     1, 10030,     0,   3,   1, UNI_JT__U }   /* jt=u */,
+  {     0,   184,  9226,   3,   4, UNI_XPOSIXCNTRL }   /* iscntrl */,
+  {     0,  7218,    25,  10,   2, UNI_LB__SY }   /* linebreak=sy */,
+  {     7,  3097, 10066,  18,   3, UNI_DT__SML }   /* decompositiontype=sml */,
+  {    12,   184,  9533,   3,   3, UNI_CYRL }   /* iscyrl */,
+  {     1,  4791,  2856,   3,  18, UNI_MONGOLIANSUP }   /* inmongoliansupplement */,
+  {    10,  4658,  9836,  15,   4, UNI_GREXT }   /* graphemeextend=true */,
+  {     9,  7218, 10156,  10,   2, UNI_LB__BK }   /* linebreak=bk */,
+  {     1,  9488,  4673,   4,  15, UNI_INHANGUL }   /* blk=hangulsyllables */,
+  {     3,   184,  2010,   2,  22, UNI_MISCTECHNICAL }   /* ismiscellaneoustechnical */,
+  {     3,  4033,  5592,  16,  14, UNI_ZS }   /* generalcategory=spaceseparator */,
+  {     1, 10048,  9413,   3,   3, UNI_NV__7_SLASH_2 }   /* nv=7/2 */,
+  {     0,  7088,  3773,  10,   3, UNI_BC__RLI }   /* bidiclass=rli */,
+  {     4,  9488,  3683,   4,  17, UNI_ETHIOPICEXTA }   /* blk=ethiopicextendeda */,
+  {     2,  9230,    26,   5,   1, UNI_CWCF }   /* cwcf=y */,
+  {     0,  8589,  9002,   7,   6, UNI_SC__TELU }   /* script=telugu */,
+  {     0, 10009,    45,   3,   6, UNI_DT__COM }   /* dt=compat */,
+  {     0,  9240,  9255,   5,   5, -UNI_DASH }   /* dash=false */,
+  {     0, 10024,  4718,   3,  15, UNI_LOWERCASELETTER }   /* gc=lowercaseletter */,
+  {     1,  5986,  8720,  13,   3, UNI_NV__400 }   /* numericvalue=400 */,
+  {     0,  2280,  9316,   3,   4, UNI_ORYA }   /* isoriya */,
+  {     0,  3374,  1025,  11,   2, -UNI_XPOSIXSPACE }   /* whitespace=no */,
+  {     1,  8688,  2314,   3,   3, UNI_POSIXXDIGIT }   /* isahex */,
+  {     6,  9768,  9664,   4,   4, UNI_MRO }   /* scx=mroo */,
+  {     0,  9768,  2855,   4,   9, UNI_MONG }   /* scx=mongolian */,
+  {     0,  8780,  6086,   7,  11, UNI_CHESSSYMBOLS }   /* block=chesssymbols */,
+  {     3,   184,   895,   2,  28, UNI_SUPPUAA }   /* issupplementaryprivateuseareaa */,
+  {     8,  8882, 10135,   6,   3, UNI_GREXT }   /* grext=yes */,
+  {     0,  9768,  9748,   4,   4, UNI_RJNG }   /* scx=rjng */,
+  {     2,  8780,   690,   7,  29, UNI_CJKEXTG }   /* block=cjkunifiedideographsextensiong */,
+  {     8,  2218,  8527,   3,   6, UNI_NB }   /* innoblock */,
+  {     2,  8589,  9664,   7,   3, UNI_MRO }   /* script=mro */,
+  {     0, 10063,  9255,   3,   5, -UNI_SD }   /* sd=false */,
+  {    20,  4033,   106,  16,   6, UNI_S }   /* generalcategory=symbol */,
+  {     2, 10027,  9456,   3,   4, UNI_JG__ALEF }   /* jg=alef */,
+  {     0,  4916,  9009,   3,   5, UNI_THAA }   /* isthaana */,
+  {     7,  7325,  7827,   3,   3, UNI_IN__2 }   /* in=2.0 */,
+  {     0,  1417,  9131,  25,   4, UNI_CCC__20 }   /* canonicalcombiningclass=ccc20 */,
+  {     1,  3374,     0,  10,   0, UNI_XPOSIXSPACE }   /* whitespace */,
+  {     2,   184,  1700,   2,  23, UNI_SHORTHANDFORMATCONTROLS }   /* isshorthandformatcontrols */,
+  {     0,  8638,     0,   7,   0, UNI_TGLG }   /* tagalog */,
+  {     9,  8780,  9002,   6,   6, UNI_INTELUGU }   /* block=telugu */,
+  {    10,  9488,  1654,   4,   6, UNI_INHANGUL }   /* blk=hangul */,
+  {     4,  9488,  8610,   4,   7, UNI_INSIDDHAM }   /* blk=siddham */,
+  {     1, 10012,  4471,   3,   7, UNI_EA__N }   /* ea=neutral */,
+  {     1,  3836,  9732,  17,   4, UNI_PRTI }   /* scriptextensions=prti */,
+  {     1,   184,  1218,   2,  26, UNI_KATAKANAEXT }   /* iskatakanaphoneticextensions */,
+  {     7,  9277,  7569,   5,   7, UNI_SC__SIND }   /* sc=khudawadi */,
+  {     0, 10291,    62,   5,   5, UNI_POSIXGRAPH }   /* posixgraph */,
+  {    23,   184,  6620,   2,  11, UNI_DOMINO }   /* isdominotiles */,
+  {     0,  9896,     0,   4,   0, UNI_ZYYY }   /* zyyy */,
+  {     0, 10027,  5354,   3,  14, UNI_JG__MANICHAEANHETH }   /* jg=manichaeanheth */,
+  {     4,  5986,  7468,  13,   9, UNI_NV___MINUS_1_SLASH_2 }   /* numericvalue=-5.00e-01 */,
+  {     0, 10048,  8043,   3,   8, UNI_NV__4_SLASH_5 }   /* nv=8.00e-01 */,
+  {     0,  3836,  7657,  17,   9, UNI_PERM }   /* scriptextensions=oldpermic */,
+  {     1,   184,  1835,   3,  20, UNI_CWT }   /* ischangeswhentitlecased */,
+  {     4,  9488,  1677,   4,  23, UNI_LATINEXTADDITIONAL }   /* blk=latinextendedadditional */,
+  {     1,  2280,  9709,   3,   3, UNI_ORYA }   /* isorya */,
+  {     2,  3836,  8924,  17,   6, UNI_LEPC }   /* scriptextensions=lepcha */,
+  {     1,  9768,  6193,   4,   4, UNI_HEBR }   /* scx=hebr */,
+  {     2,  9488,  5816,   5,   7, UNI_INBALINESE }   /* blk=balinese */,
+  {     1,  9508,  2455,   4,   5, UNI_CCC__R }   /* ccc=right */,
+  {     0,  1677,     0,   9,   0, UNI_LATINEXTE }   /* latinexte */,
+  {     0,  9277,  2409,   3,   4, UNI_SC__GLAG }   /* sc=glag */,
+  {     2,  9488,  5522,   4,  14, UNI_PHONETICEXTSUP }   /* blk=phoneticextsup */,
+  {     0,  7438,  6917,  10,  11, UNI_WB__SQ }   /* wordbreak=singlequote */,
+  {     1,  2182,  5633,  21,   2, UNI_LB__H2 }   /* graphemeclusterbreak=lv */,
+  {    40,  6231,  3026,   3,  17, UNI_CHEROKEESUP }   /* incherokeesupplement */,
+  {     6,   467,     0,   5,   0, UNI_P }   /* punct */,
+  {     1, 10024,  5817,   3,  13, UNI_ZL }   /* gc=lineseparator */,
+  {     0,  9768,  8337,   4,   7, UNI_AVST }   /* scx=avestan */,
+  {     1,   184,   114,   3,  34, UNI_DIACRITICALSFORSYMBOLS }   /* iscombiningdiacriticalmarksforsymbols */,
+  {     4,  9488,  1513,   4,  24, UNI_HIGHPUSURROGATES }   /* blk=highprivateusesurrogates */,
+  {     0,  9277,  4001,   3,   7, UNI_SC__CPRT }   /* sc=cypriot */,
+  {     0,  5986,  9380,  13,   4, UNI_NV__1_SLASH_80 }   /* numericvalue=1/80 */,
+  {     0, 10291,  5040,   5,   5, UNI_POSIXDIGIT }   /* posixdigit */,
+  {     6,  8589,  9310,   7,   5, UNI_OGAM }   /* script=ogham */,
+  {     0,   184,  2245,   2,  21, UNI_MEETEIMAYEKEXT }   /* ismeeteimayekextensions */,
+  {     1,  3836,  8442,  17,   7, UNI_HANO }   /* scriptextensions=hanunoo */,
+  {     1,  6241,  7258,  12,  10, UNI_JT__U }   /* joiningtype=nonjoining */,
+  {     2, 10009,  4017,   3,   5, UNI_DT__FIN }   /* dt=final */,
+  {     9,  3836,  6277,  17,   4, UNI_MAHJ }   /* scriptextensions=mahj */,
+  {     3,  4989,  1129,   3,   3, UNI_UCAS }   /* isucas */,
+  {     2,  8509,  2705,   4,  17, UNI_ENCLOSEDALPHANUMSUP }   /* inenclosedalphanumsup */,
+  {     5, 10051,     0,   3,   0, UNI_OCR }   /* ocr */,
+  {     1,  3717,  8330,  17,   7, UNI_IDENTIFIERSTATUS__ALLOWED }   /* identifierstatus=allowed */,
+  {     0,  9768,  1628,   4,   4, UNI_PHAG }   /* scx=phag */,
+  {     1, 10024,  6265,   3,  12, UNI_NL }   /* gc=letternumber */,
+  {     0,  8996,  9837,   7,   3, UNI_STERM }   /* sterm=true */,
+  {     0,  9488,  3683,   4,  11, UNI_ETHIOPICEXT }   /* blk=ethiopicext */,
+  {     1,  9768,  6484,   4,   4, UNI_HUNG }   /* scx=hung */,
+  {     9,  9038,     0,   6,   0, UNI_YEZI }   /* yezidi */,
+  {     0,  6231,  7129,   3,   9, UNI_CJKSTROKES }   /* incjkstrokes */,
+  {     2, 10033,     0,   3,   0, UNI_lb_values_index }   /* lb= */,
+  {     0,  8960,     0,   7,   0, UNI_COMPEX }   /* nfcqc=n */,
+  {     0,  1189,  5713,   3,   7, UNI_XPOSIXDIGIT }   /* nt=decimal */,
+  {     4,  6241,     6,  12,   1, UNI_JT__D }   /* joiningtype=d */,
+  {     0,  9277,  4883,   3,  15, UNI_SARB }   /* sc=oldsoutharabian */,
+  {     0,  6805,   206,   6,  11, UNI_MISCPICTOGRAPHS }   /* inmiscpictographs */,
+  {     8, 10024,   467,   3,  11, UNI_P }   /* gc=punctuation */,
+  {     9,  9768,  8187,   4,   4, UNI_HIRA }   /* scx=hira */,
+  {     4,   184,  7513,   2,   9, UNI_BHKS }   /* isbhaiksuki */,
+  {     2,  5986,  9376,  13,   4, UNI_NV__1_SLASH_64 }   /* numericvalue=1/64 */,
+  {    21,  9488,  7531,   4,   9, UNI_EMOTICONS }   /* blk=emoticons */,
+  {     6,  7684,     0,   4,   0, UNI_PAUC }   /* pauc */,
+  {    12,  4273,     0,   7,   0, UNI_MYMR }   /* myanmar */,
+  {    12,  7657,     0,   9,   0, UNI_PERM }   /* oldpermic */,
+  {     0,  6231,   510,   3,  19, UNI_CJK }   /* incjkunifiedideographs */,
+  {     8,   184,  9644,   2,   4, UNI_MEDF }   /* ismedf */,
+  {     3,   951,     0,  18,   0, UNI_INVS }   /* variationselectors */,
+  {     0,  8780,  5018,   6,  14, UNI_ANCIENTSYMBOLS }   /* block=ancientsymbols */,
+  {     5,  1417,  3015,  24,  10, UNI_CCC__AR }   /* canonicalcombiningclass=aboveright */,
+  {     1,  4116,  3260,   3,   3, UNI_IDSB }   /* isidsb */,
+  {    68,  1966,  2389,  22,  20, UNI_INSC__CONSONANTWITHSTACKER }   /* indicsyllabiccategory=consonantwithstacker */,
+  {     3, 10126,    18,   3,   1, UNI_VO__R }   /* vo=r */,
+  {     8,  8688,  9441,   3,   3, UNI_ADLM }   /* isadlm */,
+  {     6,  9277,  2608,   3,   4, UNI_BRAH }   /* sc=brah */,
+  {    10, 10333,     6,   3,   1, UNI_SD }   /* issd */,
+  {     0,  4033,    27,  16,   2, UNI_LOWERCASELETTER }   /* generalcategory=ll */,
+  {     9,  5791,  4778,  13,  15, UNI_JG__MANICHAEANZAYIN }   /* joininggroup=manichaeanzayin */,
+  {     0,  8780,  1631,   6,  15, UNI_GEOMETRICSHAPES }   /* block=geometricshapes */,
+  {     0,  8870,     0,   6,   0, UNI_epres_values_index }   /* epres= */,
+  {     1,  9716,    36,   4,   1, UNI_PCM }   /* pcm=t */,
+  {     0,  3836,  8498,  17,   7, UNI_MULT }   /* scriptextensions=multani */,
+  {     0,   184,  4360,   2,   4, UNI_EMOD }   /* isemod */,
+  {     0, 10033,    42,   3,   2, UNI_LB__CJ }   /* lb=cj */,
+  {     1,  5986,  8744,  13,   4, UNI_NV__7000 }   /* numericvalue=7000 */,
+  {     0,  1591,  7533,   4,   7, UNI_EMOTICONS }   /* inemoticons */,
+  {     2,  9488, 10051,   4,   3, UNI_OCR }   /* blk=ocr */,
+  {     9,  9768,  7292,   5,   3, UNI_SOGD }   /* scx=sogd */,
+  {     0,  9768,  9564,   4,   4, UNI_GONM }   /* scx=gonm */,
+  {     2,  3836,  8477,  17,   7, UNI_MAKA }   /* scriptextensions=makasar */,
+  {    34,  3836,  6973,  18,  10, UNI_SYLO }   /* scriptextensions=sylotinagri */,
+  {     2,  1417,  4134,  24,   1, UNI_CCC__1 }   /* canonicalcombiningclass=1 */,
+  {     9,  9556,  6763,   4,   3, UNI_LB__H3 }   /* gcb=lvt */,
+  {     0,   184,  1585,   2,  23, UNI_BYZANTINEMUSIC }   /* isbyzantinemusicalsymbols */,
+  {     0,  1537,     0,  24,   0, UNI_inpc_values_index }   /* indicpositionalcategory= */,
+  {     0,  1979,  4720,  11,  13, UNI_LOWERCASELETTER }   /* category=lowercaseletter */,
+  {     0,  5986,  9404,  13,   4, UNI_NV__13_SLASH_2 }   /* numericvalue=13/2 */,
+  {     0,  8780,   779,   6,  30, UNI_SYMBOLSANDPICTOGRAPHSEXTA }   /* block=symbolsandpictographsextendeda */,
+  {    17,  9277,  8428,   3,   4, UNI_SC__GRAN }   /* sc=gran */,
+  {     0,  9768,  9692,   4,   4, UNI_NSHU }   /* scx=nshu */,
+  {     0,  4273,     0,  16,   0, UNI_MYANMAREXTA }   /* myanmarextendeda */,
+  {     0,  7218,  6178,  10,   3, UNI_LB__ZWJ }   /* linebreak=zwj */,
+  {     1,  8768,     3,   6,   1, -UNI_BIDIC }   /* bidic=f */,
+  {     3,  8930,  1025,   6,   2, -UNI_XPOSIXLOWER }   /* lower=no */,
+  {     8, 10048,  7933,   3,   2, UNI_NV__17 }   /* nv=17 */,
+  {     1,  1417,  9191,  25,   4, UNI_CCC__32 }   /* canonicalcombiningclass=ccc32 */,
+  {     5,  9444, 10084,   4,   3, UNI_AGE__3_DOT_1 }   /* age=v31 */,
+  {     0,  9488,  8582,   4,   7, UNI_INPHAGSPA }   /* blk=phagspa */,
+  {     4,  8589,  2817,   7,   4, UNI_MERO }   /* script=mero */,
+  {     8,  8449,     3,   7,   1, -UNI_HYPHEN }   /* hyphen=f */,
+  {    13,  8997,     3,   5,   1, -UNI_TERM }   /* term=f */,
+  {     0, 10048,  8708,   3,   6, UNI_NV__216000 }   /* nv=216000 */,
+  {     0,  7438,  1194,  10,   2, UNI_LB__LF }   /* wordbreak=lf */,
+  {     1,  3836,  6884,  17,  11, UNI_HMNG }   /* scriptextensions=pahawhhmong */,
+  {     1, 10027,  9772,   3,   4, UNI_JG__SEEN }   /* jg=seen */,
+  {     9,  3836,  9448,  17,   4, UNI_AGHB }   /* scriptextensions=aghb */,
+  {     0,  3836,  3895,  18,   3, UNI_SGNW }   /* scriptextensions=sgnw */,
+  {    32, 10030,    36,   3,   1, UNI_JT__T }   /* jt=t */,
+  {    10,  3836,  8171,  17,   8, UNI_GUJR }   /* scriptextensions=gujarati */,
+  {    15,    21,  5228,   2,  14, UNI_LATINEXTB }   /* inlatinextendedb */,
+  {     1,  9444,  9985,   4,   3, UNI_AGE__7 }   /* age=7.0 */,
+  {     9,  4422,  3117,   4,  16, UNI_DEVANAGARIEXT }   /* indevanagariextended */,
+  {     0,   184,  9480,   2,   4, UNI_BATK }   /* isbatk */,
+  {     1, 10333,  7292,   3,   3, UNI_SOGD }   /* issogd */,
+  {     0,  1812,    36,  22,   1, UNI_CWL }   /* changeswhenlowercased=t */,
+  {     0,  8864,  1025,   6,   2, -UNI_EMOJI }   /* emoji=no */,
+  {     2,  9508,  8795,   4,   3, UNI_CCC__103 }   /* ccc=103 */,
+  {     6,  8603,     0,   7,   0, UNI_SHAW }   /* shavian */,
+  {     0,  4145,     0,   7,   0, UNI_LINB }   /* linearb */,
+  {     1,  1979,  1045,  10,   5, UNI_L }   /* category=letter */,
+  {     4,  8456,     0,   7,   0, UNI_KNDA }   /* kannada */,
+  {     0,  1552,  3349,   9,  18, UNI_ZP }   /* category=paragraphseparator */,
+  {     2,  9277,  8421,   3,   4, UNI_ELYM }   /* sc=elym */,
+  {     2,  4688,  7005,  15,  11, UNI_IDENTIFIERTYPE__UNCOMMONUSE }   /* identifiertype=uncommonuse */,
+  {     1,  4688,  6895,  15,  11, UNI_IDENTIFIERTYPE__RECOMMENDED }   /* identifiertype=recommended */,
+  {     0,  1417,  9136,  25,   4, UNI_CCC__21 }   /* canonicalcombiningclass=ccc21 */,
+  {     0,  8688,  1395,   4,  22, UNI_ARABICPFB }   /* isarabicpresentationformsb */,
+  {     1,  2224,  7292,   3,   6, UNI_INSOGDIAN }   /* insogdian */,
+  {     9,  8589,  7630,   7,   9, UNI_TALU }   /* script=newtailue */,
+  {     1,  8780,  4385,   6,  16, UNI_TANGUTCOMPONENTS }   /* block=tangutcomponents */,
+  {     3,  4033,  3349,  16,  18, UNI_ZP }   /* generalcategory=paragraphseparator */,
+  {     4, 10048,  7963,   3,   8, UNI_NV__11_SLASH_2 }   /* nv=5.50e+00 */,
+  {     2,  8768,     0,   6,   0, UNI_bidic_values_index }   /* bidic= */,
+  {     6,   184,   923,   2,  28, UNI_SUPPUAB }   /* issupplementaryprivateuseareab */,
+  {     3,  9262, 10174,   3,   2, UNI_SB__XX }   /* sb=xx */,
+  {     2,  2224,  7369,   3,   9, UNI_SMALLFORMS }   /* insmallforms */,
+  {     0,  8864, 10135,   6,   3, UNI_EMOJI }   /* emoji=yes */,
+  {    10, 10024,   132,   3,   2, UNI_LM }   /* gc=lm */,
+  {     0,  8780,  4433,   6,  15, UNI_ARABICEXTA }   /* block=arabicextendeda */,
+  {     5,  1171,     0,   2,   0, UNI_TITLE }   /* lt */,
+  {     0,  9444, 10117,   4,   3, UNI_AGE__7 }   /* age=v70 */,
+  {     0,  8589,    78,   7,   6, UNI_SC__ARAB }   /* script=arabic */,
+  {     1,  8780,  9330,   6,   5, UNI_INTAILE }   /* block=taile */,
+  {     6,  9277,  3785,   3,   4, UNI_SC__MANI }   /* sc=mani */,
+  {     0,  9997,  6037,   3,  12, UNI_BC__AL }   /* bc=arabicletter */,
+  {     5,  6241,     0,  12,   0, UNI_jt_values_index }   /* joiningtype= */,
+  {     0,  4791,  6819,   3,  10, UNI_MYANMAREXTA }   /* inmyanmarexta */,
+  {     3,  9277,  8617,   3,   7, UNI_SOYO }   /* sc=soyombo */,
+  {     0,  2288,  1195,   5,  23, UNI_HALFANDFULLFORMS }   /* inhalfwidthandfullwidthforms */,
+  {     2,  8470,     0,   7,   0, UNI_LINA }   /* lineara */,
+  {     5,  3374,  9836,  11,   4, UNI_XPOSIXSPACE }   /* whitespace=true */,
+  {     5,  9014,    26,   6,   1, UNI_UIDEO }   /* uideo=y */,
+  {     0,  9768,  9824,   4,   4, UNI_TGLG }   /* scx=tglg */,
+  {    12,  5578, 10174,  14,   2, UNI_SB__XX }   /* sentencebreak=xx */,
+  {     2,  1537,  2449,  24,   4, UNI_INPC__LEFT }   /* indicpositionalcategory=left */,
+  {     2,  9488,   867,   4,  28, UNI_PHONETICEXTSUP }   /* blk=phoneticextensionssupplement */,
+  {     1,   184,  3115,   2,  10, UNI_DEVA }   /* isdevanagari */,
+  {     3,  9262,    49,   3,   2, UNI_SB__AT }   /* sb=at */,
+  {     9,  8589,  8498,   7,   7, UNI_SC__MULT }   /* script=multani */,
+  {     0,  9277,  9824,   3,   4, UNI_SC__TGLG }   /* sc=tglg */,
+  {     2,  1087,    36,  27,   1, UNI_PCM }   /* prependedconcatenationmark=t */,
+  {     0,  3311,     0,   3,   0, UNI_ALL }   /* all */,
+  {     1,  8930,     1,   6,   1, -UNI_XPOSIXLOWER }   /* lower=n */,
+  {     4,  3901,  6184,   5,   9, UNI_INGUNJALAGONDI }   /* ingunjalagondi */,
+  {     0,  6420,  7667,   3,   8, UNI_INOLDTURKIC }   /* inoldturkic */,
+  {     1,  8589,  9892,   7,   4, UNI_SC__QAAI }   /* script=zinh */,
+  {     0,   184,  8876,   2,   4, UNI_GOTH }   /* isgoth */,
+  {     5, 10003,    26,   3,   1, UNI_CI }   /* ci=y */,
+  {     1, 10182,  8979,   7,   4, UNI__PERL_PATWS }   /* _perl_patws */,
+  {    14,  7158,     1,  10,   1, -UNI_DIA }   /* diacritic=n */,
+  {     1,  9488,  6253,   4,  12, UNI_KHMERSYMBOLS }   /* blk=khmersymbols */,
+  {     5,  9290,    36,   5,   1, UNI_MATH }   /* math=t */,
+  {     0,   184,   435,   2,   5, UNI__PERL_NCHAR }   /* isnchar */,
+  {     3,  9596,  5633,   4,   2, UNI_LB__H2 }   /* hst=lv */,
+  {     2,  9277,  9452,   3,   4, UNI_AHOM }   /* sc=ahom */,
+  {     0,   184,  8477,   2,   4, UNI_MAKA }   /* ismaka */,
+  {     3,  7594,     0,   9,   0, UNI_LATINEXTD }   /* latinextd */,
+  {     1,  9277,  7358,   3,   4, UNI_SAUR }   /* sc=saur */,
+  {     3,  9488,  5284,   4,   7, UNI_LISUSUP }   /* blk=lisusup */,
+  {     0,  9020,     0,   6,   0, UNI_upper_values_index }   /* upper= */,
+  {     6,  8864,     0,   6,   0, UNI_emoji_values_index }   /* emoji= */,
+  {     0,  4422,  3117,   4,  11, UNI_DEVANAGARIEXT }   /* indevanagariext */,
+  {     0,  8688,    80,   4,  33, UNI_ARABICMATH }   /* isarabicmathematicalalphabeticsymbols */,
+  {     1,  3836,     0,  17,   0, UNI_scx_values_index }   /* scriptextensions= */,
+  {     4,  9488,  7308,   4,  10, UNI_INPHOENICIAN }   /* blk=phoenician */,
+  {     3,  5791,  6313,  13,  12, UNI_JG__MALAYALAMNGA }   /* joininggroup=malayalamnga */,
+  {     9,  3836,  7168,  17,  10, UNI_DIAK }   /* scriptextensions=divesakuru */,
+  {     1,  9277,  1219,   4,   7, UNI_SC__KANA }   /* sc=katakana */,
+  {     0,  4033,   133,  16,   4, UNI_M }   /* generalcategory=mark */,
+  {     1, 10048,  7939,   3,   8, UNI_NV__9_SLASH_2 }   /* nv=4.50e+00 */,
+  {     1,  2288,  4098,   3,  15, UNI_HIGHPUSURROGATES }   /* inhighpusurrogates */,
+  {     4,  9277,  9664,   3,   3, UNI_MRO }   /* sc=mro */,
+  {     2,  7291,     0,   7,   0, UNI_SOGD }   /* sogdian */,
+  {     1,  1417,  8837,  24,   3, UNI_WB__EB }   /* canonicalcombiningclass=133 */,
+  {     0,  4033,   339,  16,   2, UNI_LO }   /* generalcategory=lo */,
+  {     0,  7540,    36,   9,   1, UNI_EXT }   /* extender=t */,
+  {     3, 10296,     6,   3,   1, UNI_PD }   /* ispd */,
+  {     9,  9508,    24,   4,   1, UNI_CCC__L }   /* ccc=l */,
+  {     0,  1417,  9952,  24,   3, UNI_CCC__IS }   /* canonicalcombiningclass=240 */,
+  {     0,  7438,   727,  10,   2, UNI_WB__MN }   /* wordbreak=mn */,
+  {    32,  9488,  1878,   4,  22, UNI_CJKCOMPATIDEOGRAPHSSUP }   /* blk=cjkcompatideographssup */,
+  {    48,   184,  4145,   2,  16, UNI_LINEARBIDEOGRAMS }   /* islinearbideograms */,
+  {     0,  3836,  9245,  17,   4, UNI_DOGR }   /* scriptextensions=dogr */,
+  {     0,  1552,  6862,   9,  11, UNI_NO }   /* category=othernumber */,
+  {    14,   184,  9656,   2,   4, UNI_MIAO }   /* ismiao */,
+  {     0,  6576,    36,  11,   1, UNI_XPOSIXALPHA }   /* alphabetic=t */,
+  {     0,  5791,  6162,  13,   7, UNI_JG__SEMKATH }   /* joininggroup=semkath */,
+  {     5,   184,  8219,   2,   8, UNI_JAVA }   /* isjavanese */,
+  {     3,  3836,  8491,  17,   7, UNI_MARC }   /* scriptextensions=marchen */,
+  {     4,  4033,   400,  16,   6, UNI_CF }   /* generalcategory=format */,
+  {     9,  8780,  4369,   6,   9, UNI_SYRIACSUP }   /* block=syriacsup */,
+  {     0,  9488,  3581,   4,  17, UNI_UCAS }   /* blk=canadiansyllabics */,
+  {     0, 10027,  2627,   3,  19, UNI_JG__BURUSHASKIYEHBARREE }   /* jg=burushaskiyehbarree */,
+  {     1,  8780,  3080,   7,  17, UNI_COPTICEPACTNUMBERS }   /* block=copticepactnumbers */,
+  {     1,  9277,  2287,   3,   4, UNI_SC__SINH }   /* sc=sinh */,
+  {     6,  9716,  1025,   4,   2, -UNI_PCM }   /* pcm=no */,
+  {     0,   184,  3937,   2,  16, UNI_BOPOMOFOEXT }   /* isbopomofoextended */,
+  {     0,  8870,     3,   6,   1, -UNI_EPRES }   /* epres=f */,
+  {     0,  3223,     0,  18,   0, UNI_INPUNCTUATION }   /* generalpunctuation */,
+  {     3,  8589,  6277,   7,   4, UNI_SC__MAHJ }   /* script=mahj */,
+  {     3,  9997,    32,   3,   2, UNI_BC__CS }   /* bc=cs */,
+  {     0,  3151,  1025,  18,   2, -UNI_EPRES }   /* emojipresentation=no */,
+  {     0,   184,  1677,   2,   9, UNI_LATINEXTE }   /* islatinexte */,
+  {     0,  7438,     0,   4,   0, UNI_XPOSIXWORD }   /* word */,
+  {     0,  4033,   112,  16,   2, UNI_SC }   /* generalcategory=sc */,
+  {     1,  9488,  7621,   4,   9, UNI_INNABATAEAN }   /* blk=nabataean */,
+  {     0,  9277,  9672,   3,   4, UNI_SC__MYMR }   /* sc=mymr */,
+  {     3,  7218,   533,  10,   2, UNI_LB__NS }   /* linebreak=ns */,
+  {     2,  8780,  8115,   6,   8, UNI_INBASSAVAH }   /* block=bassavah */,
+  {     3,   951,     0,  17,   0, UNI_VS }   /* variationselector */,
+  {     1,  8589,  9038,   7,   4, UNI_SC__YEZI }   /* script=yezi */,
+  {     6,  9277,  9736,   3,   4, UNI_SC__COPT }   /* sc=qaac */,
+  {     0,  8688,    97,   3,   4, UNI_XPOSIXALPHA }   /* isalpha */,
+  {     2,  4033,  4305,  16,  16, UNI_PO }   /* generalcategory=otherpunctuation */,
+  {     1, 10132,  6193,   3,  12, UNI_LB__HL }   /* wb=hebrewletter */,
+  {    17,  1417,  6719,  24,  11, UNI_CCC__8 }   /* canonicalcombiningclass=kanavoicing */,
+  {     2,  1188,  4386,   3,   5, UNI_INTANGUT }   /* intangut */,
+  {     1,  9277,  4273,   3,   7, UNI_SC__MYMR }   /* sc=myanmar */,
+  {    46,  8924,     0,   6,   0, UNI_LEPC }   /* lepcha */,
+  {     1,  1417,  5649,  24,   1, UNI_CCC__0 }   /* canonicalcombiningclass=0 */,
+  {     1,  8589,  9896,   7,   4, UNI_SC__ZYYY }   /* script=zyyy */,
+  {    16, 10009,     0,   3,   0, UNI_dt_values_index }   /* dt= */,
+  {     6,  2784,   863,   4,   4, UNI_ARROWS }   /* inarrows */,
+  {    16,  9277,  4478,   3,   4, UNI_BRAI }   /* sc=brai */,
+  {    11,  9444, 10081,   4,   3, UNI_AGE__3 }   /* age=v30 */,
+  {    10,  9516,     0,   4,   0, UNI_CPRT }   /* cprt */,
+  {     2,   184,  9668,   2,   4, UNI_MTEI }   /* ismtei */,
+  {     0,   184,  6961,   2,  11, UNI_SUPERANDSUB }   /* issuperandsub */,
+  {     0, 10048,  7930,   3,   2, UNI_NV__14 }   /* nv=14 */,
+  {     1,  9270,   868,   3,  27, UNI_PHONETICEXTSUP }   /* inphoneticextensionssupplement */,
+  {     0,   184,  5214,   2,   6, UNI_KANGXI }   /* iskangxi */,
+  {     0,  9277,  8187,   3,   4, UNI_SC__HIRA }   /* sc=hira */,
+  {     0,   184,   133,   2,   4, UNI_M }   /* ismark */,
+  {     3,  7188,     0,  10,   0, UNI_KHAR }   /* kharoshthi */,
+  {     0,  2280,  8549,   4,   5, UNI_OLCK }   /* isolchiki */,
+  {     1,   184,  8131,   2,   4, UNI_DUPL }   /* isdupl */,
+  {     0,  9444,  7806,   4,   1, UNI_AGE__6 }   /* age=6 */,
+  {     0,  1417,  9186,  25,   4, UNI_CCC__31 }   /* canonicalcombiningclass=ccc31 */,
+  {     0,  1878,     0,  19,   0, UNI_CJKCOMPATIDEOGRAPHS }   /* cjkcompatideographs */,
+  {     2,  1417,  6642,  24,  11, UNI_CCC__DB }   /* canonicalcombiningclass=doublebelow */,
+  {     0,  4916,  8292,   3,   3, UNI_TAGB }   /* istagb */,
+  {     5, 10027,  6162,   3,   7, UNI_JG__SEMKATH }   /* jg=semkath */,
+  {     6,   184,  2061,   2,   4, UNI_MODI }   /* ismodi */,
+  {     4,  2784,  7497,   4,   7, UNI_ARABICPFA }   /* inarabicpfa */,
+  {     0,  8780,  5778,   6,   6, UNI_IPAEXT }   /* block=ipaext */,
+  {     1,  3836,  4149,  18,   3, UNI_SARB }   /* scriptextensions=sarb */,
+  {     1, 10027,  4225,   3,  16, UNI_JG__MANICHAEANTWENTY }   /* jg=manichaeantwenty */,
+  {     1,    21,  5242,   2,  14, UNI_LATINEXTC }   /* inlatinextendedc */,
+  {     1,  5986,  7787,  13,   8, UNI_NV__3_SLASH_2 }   /* numericvalue=1.50e+00 */,
+  {     2,   184,  7567,   2,   9, UNI_SIND }   /* iskhudawadi */,
+  {    21,   184,  3169,   2,  11, UNI_ETHIOPICSUP }   /* isethiopicsup */,
+  {     1,  2533,   982,   5,  24, UNI_ALPHABETICPF }   /* inalphabeticpresentationforms */,
+  {     2,  9310,     0,   5,   0, UNI_OGAM }   /* ogham */,
+  {    10,  5986,  9368,  13,   4, UNI_NV__1_SLASH_20 }   /* numericvalue=1/20 */,
+  {     1,  7088,  3349,  10,  18, UNI_BC__B }   /* bidiclass=paragraphseparator */,
+  {     5, 10048,  9392,   3,   4, UNI_NV__11_SLASH_2 }   /* nv=11/2 */,
+  {     5, 10024,    27,   3,   2, UNI_LOWERCASELETTER }   /* gc=ll */,
+  {     8,  9488,   749,   4,  16, UNI_ENCLOSEDALPHANUM }   /* blk=enclosedalphanum */,
+  {     0,  9071,     3,   4,   1, -UNI_XPOSIXXDIGIT }   /* hex=f */,
+  {     0,  9997,     0,   3,   0, UNI_bc_values_index }   /* bc= */,
+  {     0,  5564,     1,  14,   1, -UNI_QMARK }   /* quotationmark=n */,
+  {     0,  4113,   952,   3,  27, UNI_VSSUP }   /* invariationselectorssupplement */,
+  {     7,   382,     0,   4,   0, UNI_EGYP }   /* egyp */,
+  {     2,  7088,  5829,  10,   3, UNI_BC__RLO }   /* bidiclass=rlo */,
+  {     1,  9488,   183,   4,  34, UNI_MISCPICTOGRAPHS }   /* blk=miscellaneoussymbolsandpictographs */,
+  {     0,  8912,     0,   6,   0, UNI_KHOJ }   /* khojki */,
+  {     1,  9804,     0,   4,   0, UNI_TALE }   /* tale */,
+  {     0,  8688,  1007,   3,  16, UNI_ANCIENTGREEKMUSIC }   /* isancientgreekmusic */,
+  {     6,  8575,     0,   7,   0, UNI_patsyn_values_index }   /* patsyn= */,
+  {     2,  9768,  6385,   4,  12, UNI_GONM }   /* scx=masaramgondi */,
+  {    20,  3385,    36,  18,   1, UNI_RI }   /* regionalindicator=t */,
+  {    14,    21,  4129,   2,   6, UNI_LATIN1 }   /* inlatin1 */,
+  {     7,  8780,   446,   6,  32, UNI_IDEOGRAPHICSYMBOLS }   /* block=ideographicsymbolsandpunctuation */,
+  {     1,  8589,  7648,   7,   9, UNI_ITAL }   /* script=olditalic */,
+  {     4,  5791, 10072,  13,   3, UNI_JG__TAH }   /* joininggroup=tah */,
+  {     9,  1188,  4929,   3,  14, UNI_TAMILSUP }   /* intamilsupplement */,
+  {     0,  9488,  8337,   4,   7, UNI_INAVESTAN }   /* blk=avestan */,
+  {     0, 10033,  8449,   3,   6, UNI_LB__HY }   /* lb=hyphen */,
+  {     0, 10333,  2529,   3,   4, UNI_STERM }   /* issterm */,
+  {    11,  9508,  6719,   4,  11, UNI_CCC__8 }   /* ccc=kanavoicing */,
+  {     1,  3836,  9315,  17,   5, UNI_ORYA }   /* scriptextensions=oriya */,
+  {     4,  1287,     0,   2,   0, UNI_UPPERCASELETTER }   /* lu */,
+  {     4,  1417,  7859,  24,   3, UNI_WB__EB }   /* canonicalcombiningclass=200 */,
+  {    10,   184,   478,   2,  31, UNI_MATHALPHANUM }   /* ismathematicalalphanumericsymbols */,
+  {    18, 10033,   202,   3,   2, UNI_LB__SA }   /* lb=sa */,
+  {     0,  1417,  9472,  24,   4, UNI_WB__EB }   /* canonicalcombiningclass=atbl */,
+  {     0, 10296,  1823,   7,   5, UNI_POSIXLOWER }   /* isposixlower */,
+  {     1,  1417,  9141,  25,   4, UNI_CCC__22 }   /* canonicalcombiningclass=ccc22 */,
+  {     1, 10288, 10308,   8,   5, UNI_XPOSIXPRINT }   /* isxposixprint */,
+  {     0,   113,     0,  25,   0, UNI_DIACRITICALS }   /* combiningdiacriticalmarks */,
+  {     2,  7218,    42,  10,   2, UNI_LB__CJ }   /* linebreak=cj */,
+  {    20,  2287,     0,   7,   0, UNI_SINH }   /* sinhala */,
+  {     6,  9768,  9588,   4,   4, UNI_HMNG }   /* scx=hmng */,
+  {     4,  2280,  6852,   3,  10, UNI_LO }   /* isotherletter */,
+  {     0,  6205,     0,  12,   0, UNI_ideo_values_index }   /* ideographic= */,
+  {     8,  8780,  7139,   7,   9, UNI_COMPATJAMO }   /* block=compatjamo */,
+  {     0,  9488,   779,   4,  30, UNI_SYMBOLSANDPICTOGRAPHSEXTA }   /* blk=symbolsandpictographsextendeda */,
+  {     0, 10027,  4177,   3,  16, UNI_JG__MANICHAEANDALETH }   /* jg=manichaeandaleth */,
+  {     3, 10024,  1910,   3,   2, UNI_CN }   /* gc=cn */,
+  {     0,  1188,  3458,   3,  17, UNI_TAIXUANJING }   /* intaixuanjingsymbols */,
+  {     0,  9640,    26,   4,   1, UNI_LOE }   /* loe=y */,
+  {     2,  8688,  1371,   4,  22, UNI_ARABICPFA }   /* isarabicpresentationformsa */,
+  {     0,  8589,  7660,   7,   4, UNI_SC__PERM }   /* script=perm */,
+  {     3,  8852,  9836,   6,   4, UNI_CWKCF }   /* cwkcf=true */,
+  {     0,  1845,     0,   5,   0, UNI_TITLE }   /* title */,
+  {    70,  5986,  7875,  13,   8, UNI_NV__1_SLASH_32 }   /* numericvalue=3.13e-02 */,
+  {     1,  1812,     0,  21,   0, UNI_CWL }   /* changeswhenlowercased */,
+  {    13,  9548,     0,   4,   0, UNI_DSRT }   /* dsrt */,
+  {     0,  1269,    26,  25,   1, UNI_COMPEX }   /* fullcompositionexclusion=y */,
+  {     1,  8780,  8227,   6,   8, UNI_KANAEXTA }   /* block=kanaexta */,
+  {     0,  3836,  9245,  17,   5, UNI_DOGR }   /* scriptextensions=dogra */,
+  {     0,  5804,     0,  13,   0, UNI_KANAEXTA }   /* kanaextendeda */,
+  {     4,  1966,  1244,  22,   9, UNI_INSC__CONSONANT }   /* indicsyllabiccategory=consonant */,
+  {     1,  3836,  1218,  17,   8, UNI_KANA }   /* scriptextensions=katakana */,
+  {     0,  9277,  9684,   3,   4, UNI_NEWA }   /* sc=newa */,
+  {     5,  7155,  6194,   3,   5, UNI_HEBR }   /* ishebrew */,
+  {     0,  3836,  9896,  17,   4, UNI_ZYYY }   /* scriptextensions=zyyy */,
+  {    28,  4791,  2338,  10,  11, UNI_MERO }   /* inmeroitichieroglyphs */,
+  {     1,  6609,     3,  11,   1, -UNI_DEP }   /* deprecated=f */,
+  {     0,   184,  3223,   2,  18, UNI_INPUNCTUATION }   /* isgeneralpunctuation */,
+  {     0,  8780,  4973,   6,  15, UNI_VEDICEXT }   /* block=vedicextensions */,
+  {     8,  9488,  7069,   5,   9, UNI_ASCII }   /* blk=basiclatin */,
+  {     1,  6505,     0,   8,   0, UNI_PHAISTOS }   /* phaistos */,
+  {     0,  8780,  7458,   6,  10, UNI_YIRADICALS }   /* block=yiradicals */,
+  {     4,  7621,     0,   9,   0, UNI_NBAT }   /* nabataean */,
+  {     1,  5986,  8732,  13,   4, UNI_NV__5000 }   /* numericvalue=5000 */,
+  {     1,  8589,  9476,   7,   4, UNI_AVST }   /* script=avst */,
+  {     0,  8966, 10135,   6,   3, UNI_NFDQC__Y }   /* nfdqc=yes */,
+  {     2,  8780,  3937,   6,  11, UNI_BOPOMOFOEXT }   /* block=bopomofoext */,
+  {     2,    21,  1007,   3,  16, UNI_ANCIENTGREEKMUSIC }   /* inancientgreekmusic */,
+  {     2, 10048,  9910,   3,   3, UNI_NV__1_SLASH_9 }   /* nv=1/9 */,
+  {     0,  1417,  8831,  24,   3, UNI_CCC__132 }   /* canonicalcombiningclass=132 */,
+  {     1, 10033,   395,   3,   2, UNI_LB__GL }   /* lb=gl */,
+  {     3,   184,  8906,   2,   6, UNI_KANBUN }   /* iskanbun */,
+  {     0,  8589,   865,  10,   1, UNI_SHAW }   /* script=shaw */,
+  {     5,  9277,  9008,   3,   6, UNI_SC__THAA }   /* sc=thaana */,
+  {     2, 10048,  8750,   3,   2, UNI_NV__80 }   /* nv=80 */,
+  {     0,  1631,     0,  18,   0, UNI_GEOMETRICSHAPESEXT }   /* geometricshapesext */,
+  {    33, 10327,     0,   4,   0, UNI_PE }   /* ispe */,
+  {     1,  8780,  5960,   6,  13, UNI_MISCTECHNICAL }   /* block=misctechnical */,
+  {     2,   184,   867,   2,  28, UNI_PHONETICEXTSUP }   /* isphoneticextensionssupplement */,
+  {     0,  9488,  7630,   4,   9, UNI_INNEWTAILUE }   /* blk=newtailue */,
+  {     0,  9277,  8315,   3,   8, UNI_UGAR }   /* sc=ugaritic */,
+  {     1,  8884,     0,   4,   0, UNI_ext_values_index }   /* ext= */,
+  {     0,   184,   720,   3,   8, UNI_XSUX }   /* iscuneiform */,
+  {     0,  9275,  2844,   5,  10, UNI_INSC__TONELETTER }   /* insc=toneletter */,
+  {     0,  5791,  5420,  13,   4, UNI_JG__TETH }   /* joininggroup=teth */,
+  {     1,    21,  5200,   2,  14, UNI_KANASUP }   /* inkanasupplement */,
+  {     3,   186,     0,   2,   0, UNI_CE }   /* ce */,
+  {     4,  9250,    26,   5,   1, UNI_EMOD }   /* emod=y */,
+  {     1,  9235, 10135,   5,   3, UNI_CWCM }   /* cwcm=yes */,
+  {     1,  2061,     0,  14,   0, UNI_LM }   /* modifierletter */,
+  {     4,  9768,  9700,   4,   4, UNI_OLCK }   /* scx=olck */,
+  {     0,  3382,     1,   3,   1, -UNI_CE }   /* ce=n */,
+  {    20,  9270,  8583,   3,   6, UNI_INPHAGSPA }   /* inphagspa */,
+  {     1,  7218,  6587,  10,  11, UNI_LB__BB }   /* linebreak=breakbefore */,
+  {     0,  9768,  8491,   4,   7, UNI_MARC }   /* scx=marchen */,
+  {     0,  9444,  9856,   4,   4, UNI_AGE__13 }   /* age=v130 */,
+  {     0,  7418,     3,  10,   1, -UNI_XPOSIXUPPER }   /* uppercase=f */,
+  {     1,  7651,     0,   4,   0, UNI_ITAL }   /* ital */,
+  {     3,   184,    43,   3,   8, UNI_CJKCOMPAT }   /* iscjkcompat */,
+  {     1,  3836,  9756,  17,   4, UNI_RUNR }   /* scriptextensions=runr */,
+  {     2,  9277,  8924,   3,   6, UNI_LEPC }   /* sc=lepcha */,
+  {     0,  9768,  3785,   4,   4, UNI_MANI }   /* scx=mani */,
+  {     0,   184,   510,   3,  19, UNI_CJK }   /* iscjkunifiedideographs */,
+  {     1, 10027,  5172,   3,  14, UNI_JG__HAMZAONHEHGOAL }   /* jg=hamzaonhehgoal */,
+  {     4,  9492,     0,   4,   0, UNI_bpt_values_index }   /* bpt= */,
+  {    13,  4791,  6411,   4,  10, UNI_INMENDEKIKAKUI }   /* inmendekikakui */,
+  {     3,  9768,  6792,   5,   3, UNI_SAMR }   /* scx=samr */,
+  {     2,  5791,  9648,  13,   4, UNI_JG__MEEM }   /* joininggroup=meem */,
+  {     0,  9768,  9804,   4,   4, UNI_TALE }   /* scx=tale */,
+  {     1,  9488,  1465,   4,  24, UNI_DIACRITICALSFORSYMBOLS }   /* blk=combiningmarksforsymbols */,
+  {     8, 10048, 10138,   3,   2, UNI_NV__38 }   /* nv=38 */,
+  {     0,  3379, 10183,   5,   4, UNI_XPOSIXSPACE }   /* spaceperl */,
+  {     5,  2224,   924,   3,  27, UNI_SUPPUAB }   /* insupplementaryprivateuseareab */,
+  {     1,  8589,  8618,   8,   3, UNI_SOYO }   /* script=soyo */,
+  {     8,  4838,    26,  15,   1, UNI_NFKCQC__Y }   /* nfkcquickcheck=y */,
+  {    10,  3836,  2913,  18,   3, UNI_SUND }   /* scriptextensions=sund */,
+  {     1,  1417,  7814,  24,   1, UNI_CCC__7 }   /* canonicalcombiningclass=7 */,
+  {    34,  1417,    78,  24,   2, UNI_CCC__AR }   /* canonicalcombiningclass=ar */,
+  {     0, 10333,  3895,   3,   3, UNI_SGNW }   /* issgnw */,
+  {     1,   184,  7139,   3,   9, UNI_COMPATJAMO }   /* iscompatjamo */,
+  {     6,  1186,     0,   2,   0, UNI_PO }   /* po */,
+  {    40, 10048,  9108,   3,   2, UNI_NV__15 }   /* nv=15 */,
+  {     0,  9488,  1906,   4,  16, UNI_INDICNUMBERFORMS }   /* blk=indicnumberforms */,
+  {     1,  9351,  9255,   4,   5, -UNI_IDS }   /* ids=false */,
+  {    32,  3421,     0,   4,   0, UNI_RUMI }   /* rumi */,
+  {    21,  9576,     0,   4,   0, UNI_GURU }   /* guru */,
+  {    10, 10048,  7899,   3,   8, UNI_NV__7_SLASH_2 }   /* nv=3.50e+00 */,
+  {     4,   184,  7594,   2,   9, UNI_LATINEXTD }   /* islatinextd */,
+  {     1,  5986, 10144,  13,   2, UNI_NV__45 }   /* numericvalue=45 */,
+  {    58,  9768,  8912,   4,   4, UNI_KHOJ }   /* scx=khoj */,
+  {     0,  3836,  9310,  17,   5, UNI_OGAM }   /* scriptextensions=ogham */,
+  {     0,  9351,    36,   4,   1, UNI_IDS }   /* ids=t */,
+  {    16,  8864,     3,   6,   1, -UNI_EMOJI }   /* emoji=f */,
+  {     1,  1417,  9181,  25,   4, UNI_CCC__30 }   /* canonicalcombiningclass=ccc30 */,
+  {     0,   184,  8407,   2,   7, UNI_DSRT }   /* isdeseret */,
+  {     0,  9444,  7814,   4,   1, UNI_AGE__7 }   /* age=7 */,
+  {    14,  7088,    37,  10,   2, UNI_BC__EN }   /* bidiclass=en */,
+  {    16,   184,  3115,   2,   4, UNI_DEVA }   /* isdeva */,
+  {     0,  8589,  3785,   7,  10, UNI_SC__MANI }   /* script=manichaean */,
+  {     8, 10296,  5039,   7,   6, UNI_POSIXXDIGIT }   /* isposixxdigit */,
+  {     2,  9250,     0,  10,   0, -UNI_EMOD }   /* emod=false */,
+  {     2,  9277,  2429,   3,  20, UNI_PHLI }   /* sc=inscriptionalpahlavi */,
+  {     6,  1417,  7874,  24,   2, UNI_CCC__23 }   /* canonicalcombiningclass=23 */,
+  {     0,  9488,  1700,   4,  23, UNI_SHORTHANDFORMATCONTROLS }   /* blk=shorthandformatcontrols */,
+  {    32,  9277,  8123,   3,   4, UNI_SC__BUGI }   /* sc=bugi */,
+  {    10,  4033,  9503,  16,   2, UNI_MC }   /* generalcategory=mc */,
+  {     0,  9872,     0,   4,   0, UNI_XPEO }   /* xpeo */,
+  {    20,  9540,  9836,   4,   4, UNI_DIA }   /* dia=true */,
+  {     0,  2912,     0,  12,   0, UNI_SUNDANESESUP }   /* sundanesesup */,
+  {     0,  7218,  5564,  10,   9, UNI_LB__QU }   /* linebreak=quotation */,
+  {     6,  9768,  7168,   4,  10, UNI_DIAK }   /* scx=divesakuru */,
+  {     0,  1465,     0,  24,   0, UNI_DIACRITICALSFORSYMBOLS }   /* combiningmarksforsymbols */,
+  {    16,  3836,  8936,  17,   6, UNI_LYCI }   /* scriptextensions=lycian */,
+  {     8,  8589,  2409,   7,   4, UNI_SC__GLAG }   /* script=glag */,
+  {    32,  9768,  9604,   4,   4, UNI_KHMR }   /* scx=khmr */,
+  {    17,  8780,  3768,   6,  17, UNI_LETTERLIKESYMBOLS }   /* block=letterlikesymbols */,
+  {     2,  8694,     0,   7,   0, UNI_wspace_values_index }   /* wspace= */,
+  {     7,  8978, 10135,   6,   3, UNI__PERL_PATWS }   /* patws=yes */,
+  {     5,  9275,  2369,   5,  20, UNI_INSC__CONSONANTPLACEHOLDER }   /* insc=consonantplaceholder */,
+  {     1,  9768,  8291,   4,   8, UNI_TAGB }   /* scx=tagbanwa */,
+  {     3,  3133,     0,  17,   0, UNI_EBASE }   /* emojimodifierbase */,
+  {     0,  7218,    83,  10,   2, UNI_LB__CM }   /* linebreak=cm */,
+  {     0,  9277,  9245,   3,   4, UNI_SC__DOGR }   /* sc=dogr */,
+  {     0,  8780,  6193,   6,   6, UNI_INHEBREW }   /* block=hebrew */,
+  {     1, 10288,  9877,   3,   3, UNI_XSUX }   /* isxsux */,
+  {     0,  1417,  8793,  25,   5, UNI_CCC__103 }   /* canonicalcombiningclass=ccc103 */,
+  {    16,   184,  3768,   2,  17, UNI_LETTERLIKESYMBOLS }   /* isletterlikesymbols */,
+  {     0,  8780,  7675,   6,   9, UNI_PALM }   /* block=palmyrene */,
+  {     0,  8780,  8582,   6,   7, UNI_INPHAGSPA }   /* block=phagspa */,
+  {     0,  3115,     0,   4,   0, UNI_DEVA }   /* deva */,
+  {     0,  1552,  4943,   9,  15, UNI_TITLE }   /* category=titlecaseletter */,
+  {     1,  8780,  8428,   6,   7, UNI_INGRANTHA }   /* block=grantha */,
+  {     0,  8435,     3,   7,   1, -UNI_GRBASE }   /* grbase=f */,
+  {     2,  9768,  9480,   4,   4, UNI_BATK }   /* scx=batk */,
+  {     0,  8589,  9820,   7,   4, UNI_TFNG }   /* script=tfng */,
+  {     4, 10132,  5012,   3,   2, UNI_WB__SQ }   /* wb=sq */,
+  {     0, 10027, 10045,   3,   3, UNI_JG__MIM }   /* jg=mim */,
+  {    12,  7218,    34,  10,   2, UNI_LB__EX }   /* linebreak=ex */,
+  {     0,  1790,     0,  22,   0, UNI_cwcm_values_index }   /* changeswhencasemapped= */,
+  {     8,  4097,     0,  16,   0, UNI_HIGHPUSURROGATES }   /* highpusurrogates */,
+  {     4,  1417,  3572,  24,   9, UNI_CCC__BL }   /* canonicalcombiningclass=belowleft */,
+  {     2,  6609,  9836,  11,   4, UNI_DEP }   /* deprecated=true */,
+  {     0,  3097,  4017,  18,   3, UNI_DT__FIN }   /* decompositiontype=fin */,
+  {     0,  8589,  9572,   7,   4, UNI_SC__GUJR }   /* script=gujr */,
+  {     2,  1033,     0,  11,   0, UNI_ENCLOSEDCJK }   /* enclosedcjk */,
+  {     2,  1591,  3684,   3,  16, UNI_ETHIOPICEXTA }   /* inethiopicextendeda */,
+  {     2,  1790,  9836,  22,   4, UNI_CWCM }   /* changeswhencasemapped=true */,
+  {     1,  1417,  9146,  25,   4, UNI_CCC__23 }   /* canonicalcombiningclass=ccc23 */,
+  {     0,  9345,    36,   5,   1, UNI_XIDC }   /* xidc=t */,
+  {     2,  9277,  9584,   3,   4, UNI_HLUW }   /* sc=hluw */,
+  {    32,  8858,    36,   6,   1, UNI_ECOMP }   /* ecomp=t */,
+  {     0,   184,  5739,   2,  12, UNI_GRBASE }   /* isgraphemebase */,
+  {     5,   184,  4161,   2,  16, UNI_LINEARBSYLLABARY }   /* islinearbsyllabary */,
+  {     0,   184,    17,   3,   1, UNI_CO }   /* isco */,
+  {     0,  1966,  4417,  22,  16, UNI_INSC__VOWELINDEPENDENT }   /* indicsyllabiccategory=vowelindependent */,
+  {     0,  3836,  5550,  17,  14, UNI_PHLP }   /* scriptextensions=psalterpahlavi */,
+  {     1,  1025,     0,   2,   0, UNI_NO }   /* no */,
+  {     0,  5986,  7883,  13,   8, UNI_NV__1_SLASH_320 }   /* numericvalue=3.13e-03 */,
+  {     1,  5791,  9456,  13,   4, UNI_JG__ALEF }   /* joininggroup=alef */,
+  {     1,  8589,  7188,   7,   4, UNI_KHAR }   /* script=khar */,
+  {     0,  3836,  8888,  17,   4, UNI_HATR }   /* scriptextensions=hatr */,
+  {     0,  9640, 10135,   4,   3, UNI_LOE }   /* loe=yes */,
+  {    11,  7228,  9255,  10,   5, -UNI_XPOSIXLOWER }   /* lowercase=false */,
+  {     1,  8512,  9295,   7,   5, UNI_NFCQC__M }   /* nfkcqc=maybe */,
+  {    33,  9508,  7859,   4,   2, UNI_CCC__20 }   /* ccc=20 */,
+  {     8,  1856,    26,  22,   1, UNI_CWU }   /* changeswhenuppercased=y */,
+  {     1,  8780,  9085,   6,   5, UNI_INBATAK }   /* block=batak */,
+  {     9,  9536,  1025,   4,   2, -UNI_DEP }   /* dep=no */,
+  {    17,  8688,  4435,   4,  13, UNI_ARABICEXTA }   /* isarabicextendeda */,
+  {     0,  8780,  7630,   6,   9, UNI_INNEWTAILUE }   /* block=newtailue */,
+  {     1, 10024,  4305,   3,  16, UNI_PO }   /* gc=otherpunctuation */,
+  {     0,  8997,  1025,   5,   2, -UNI_TERM }   /* term=no */,
+  {    65,  6554, 10135,  11,   3, UNI_IDC }   /* idcontinue=yes */,
+  {    32,  9508,  9211,   5,   4, UNI_CCC__36 }   /* ccc=ccc36 */,
+  {    10, 10033,  6697,   3,  11, UNI_LB__IN }   /* lb=inseperable */,
+  {     1,  8936,     0,   4,   0, UNI_LYCI }   /* lyci */,
+  {     2,  1269,     0,  24,   0, UNI_COMPEX }   /* fullcompositionexclusion */,
+  {     0,  8589,  8291,   7,   4, UNI_SC__TAGB }   /* script=tagb */,
+  {     1,  8780,  4161,   6,  16, UNI_LINEARBSYLLABARY }   /* block=linearbsyllabary */,
+  {     1,   184,  9740,   2,   4, UNI_QAAI }   /* isqaai */,
+  {     2,  8780,  8219,   6,   8, UNI_INJAVANESE }   /* block=javanese */,
+  {     0,  8780,  2224,   6,  21, UNI_ININSCRIPTIONALPARTHIAN }   /* block=inscriptionalparthian */,
+  {     3,  2874,     0,  19,   0, UNI_OTTOMANSIYAQNUMBERS }   /* ottomansiyaqnumbers */,
+  {     6,  3259,     1,  18,   1, -UNI_IDSB }   /* idsbinaryoperator=n */,
+  {     8,  2569,  3504,  20,   7, UNI_VO__R }   /* verticalorientation=rotated */,
+  {    34,  9768,  7188,   4,  10, UNI_KHAR }   /* scx=kharoshthi */,
+  {    16,   184,  1025,   2,   2, UNI_NO }   /* isno */,
+  {     1, 10024,   133,   3,   4, UNI_M }   /* gc=mark */,
+  {     2, 10024,    45,   3,   2, UNI_CO }   /* gc=co */,
+  {     1,  9488,  3768,   4,  17, UNI_LETTERLIKESYMBOLS }   /* blk=letterlikesymbols */,
+  {    81,  2224,  4338,   3,  15, UNI_SUPMATHOPERATORS }   /* insupmathoperators */,
+  {    12,  2224,   317,   3,  32, UNI_SUPMATHOPERATORS }   /* insupplementalmathematicaloperators */,
+  {     8,  7088,  4493,  10,  15, UNI_BC__CS }   /* bidiclass=commonseparator */,
+  {     1, 10048,  9380,   3,   3, UNI_NV__1_SLASH_8 }   /* nv=1/8 */,
+  {     1,   184,  1791,   3,  20, UNI_CWCM }   /* ischangeswhencasemapped */,
+  {     2,  1834,     0,  21,   0, UNI_CWT }   /* changeswhentitlecased */,
+  {     1,  9277,  7278,   3,  10, UNI_XPEO }   /* sc=oldpersian */,
+  {     0,  3097,     7,  18,   3, UNI_DT__CAN }   /* decompositiontype=can */,
+  {    20,   184,  7358,   2,  10, UNI_SAUR }   /* issaurashtra */,
+  {     0,  5116, 10135,  14,   3, UNI_EMOD }   /* emojimodifier=yes */,
+  {     3, 10296,     3,   3,   1, UNI_PF }   /* ispf */,
+  {     0, 10132,    18,   3,   2, UNI_RI }   /* wb=ri */,
+  {     7,  8512,     0,   7,   0, UNI_nfkcqc_values_index }   /* nfkcqc= */,
+  {    16,  9488,  2912,   4,   9, UNI_INSUNDANESE }   /* blk=sundanese */,
+  {     4,  9768,  8187,   4,   8, UNI_HIRA }   /* scx=hiragana */,
+  {     2,  9608,     0,   4,   0, UNI_KITS }   /* kits */,
+  {     5,  9768,  5550,   4,  14, UNI_PHLP }   /* scx=psalterpahlavi */,
+  {     1,  1552,  4017,   9,  16, UNI_PF }   /* category=finalpunctuation */,
+  {     0,  9512,     0,   4,   0, UNI_CHRS }   /* chrs */,
+  {     1,  7325, 10102,   3,   3, UNI_IN__5_DOT_2 }   /* in=v52 */,
+  {    32,  9277,  8115,   3,   8, UNI_BASS }   /* sc=bassavah */,
+  {     0,  7218,  8701,  10,   7, UNI_LB__ZW }   /* linebreak=zwspace */,
+  {     4,  3836,  7567,  17,   9, UNI_SIND }   /* scriptextensions=khudawadi */,
+  {     4, 10048,  7814,   3,   1, UNI_NV__7 }   /* nv=7 */,
+  {     0,  9768,  8942,   4,   6, UNI_LYDI }   /* scx=lydian */,
+  {     2,  8930,     0,   6,   0, UNI_lower_values_index }   /* lower= */,
+  {     5,  9768,  2913,   5,   8, UNI_SUND }   /* scx=sundanese */,
+  {     0,   184,  2950,   2,  19, UNI_SUPARROWSB }   /* issupplementalarrowsb */,
+  {     0,  3836,  9008,  17,   4, UNI_THAA }   /* scriptextensions=thaa */,
+  {     0, 10048,  7971,   3,   8, UNI_NV__7_SLASH_12 }   /* nv=5.83e-01 */,
+  {    12,  8589,  8414,   7,   4, UNI_ELBA }   /* script=elba */,
+  {     0,  7738,    26,   9,   1, UNI_XIDS }   /* xidstart=y */,
+  {     1,  8400, 10135,   7,   3, UNI_COMPEX }   /* compex=yes */,
+  {     0,  9596,  6741,   4,  11, UNI_GCB__L }   /* hst=leadingjamo */,
+  {     1,  8780,  4401,   6,  16, UNI_TANGUTSUP }   /* block=tangutsupplement */,
+  {     1,  8589,  2913,   8,   3, UNI_SUND }   /* script=sund */,
+  {     0, 10182,  6554,   6,   6, UNI__PERL_IDCONT }   /* _perl_idcont */,
+  {     1,  9488,  9828,   4,   4, UNI_INTHAI }   /* blk=thai */,
+  {     1,  8589,  9504,   7,   4, UNI_CANS }   /* script=cans */,
+  {     2,  8589,  9496,   7,   4, UNI_SC__BUHD }   /* script=buhd */,
+  {     1,  8780,  4145,   6,  16, UNI_LINEARBIDEOGRAMS }   /* block=linearbideograms */,
+  {     0,  8780,  8477,   6,   7, UNI_INMAKASAR }   /* block=makasar */,
+  {     0,  1552,  1587,   9,   1, UNI_Z }   /* category=z */,
+  {     1, 10048, 10140,   3,   2, UNI_NV__39 }   /* nv=39 */,
+  {     2,  9588,     0,   4,   0, UNI_HMNG }   /* hmng */,
+  {     0,  2760,  6763,  19,  11, UNI_LB__H3 }   /* hangulsyllabletype=lvtsyllable */,
+  {     3,  8978,     1,   6,   1, -UNI__PERL_PATWS }   /* patws=n */,
+  {     5,  5791,  9355,  13,   5, UNI_JG__ZHAIN }   /* joininggroup=zhain */,
+  {     2,  8589,  2485,   7,   4, UNI_SC__MONG }   /* script=mong */,
+  {     0,  9556,    24,   4,   1, UNI_GCB__L }   /* gcb=l */,
+  {     2,  9444, 10087,   4,   3, UNI_AGE__3_DOT_2 }   /* age=v32 */,
+  {     1,  1417,  7806,  24,   1, UNI_CCC__6 }   /* canonicalcombiningclass=6 */,
+  {     0,  5986,  8750,  13,   4, UNI_NV__8000 }   /* numericvalue=8000 */,
+  {     3,  9488,  1631,   4,  15, UNI_GEOMETRICSHAPES }   /* blk=geometricshapes */,
+  {     5,  8780,  2409,   6,  20, UNI_GLAGOLITICSUP }   /* block=glagoliticsupplement */,
+  {     1,  8780,  7358,   6,  10, UNI_INSAURASHTRA }   /* block=saurashtra */,
+  {     3,  4791,  4290,   3,  15, UNI_MYANMAREXTB }   /* inmyanmarextendedb */,
+  {    16,  7076,  8116,   3,   7, UNI_INBASSAVAH }   /* inbassavah */,
+  {     1,  9528,  9836,   4,   4, UNI_CWU }   /* cwu=true */,
+  {     5,  4033,  5497,  16,  11, UNI_MC }   /* generalcategory=spacingmark */,
+  {     0,  5986, 10142,  13,   2, UNI_NV__44 }   /* numericvalue=44 */,
+  {     4,  8780,     0,  12,   0, UNI_INCARIAN }   /* block=carian */,
+  {     2,  9277,  8582,   3,   7, UNI_SC__PHAG }   /* sc=phagspa */,
+  {     0,  9277,  9516,   3,   4, UNI_SC__CPRT }   /* sc=cprt */,
+  {     5,  9444,  7781,   4,   1, UNI_AGE__4 }   /* age=4 */,
+  {     0,  4113,  6013,   3,  12, UNI_VERTICALFORMS }   /* inverticalforms */,
+  {     0,  5791,     3,  15,   1, UNI_JG__KAF }   /* joininggroup=kaf */,
+  {    12, 10006,  1025,   3,   2, -UNI_DI }   /* di=no */,
+  {    34,  1505,  5755,   5,  10, UNI_GREEKEXT }   /* ingreekextended */,
+  {     2,  8589,  7675,   7,   4, UNI_PALM }   /* script=palm */,
+  {     1,  1417,  7858,  24,   2, UNI_CCC__22 }   /* canonicalcombiningclass=22 */,
+  {    17,  1417,  4912,  24,   2, UNI_CCC__0 }   /* canonicalcombiningclass=nr */,
+  {     0,  7155,  8443,   3,   6, UNI_HANO }   /* ishanunoo */,
+  {     2,  6061,  1025,  12,   2, -UNI_BIDIC }   /* bidicontrol=no */,
+  {     1,  7438,    72,  10,   2, UNI_WB__LE }   /* wordbreak=le */,
+  {     0,  8997,     0,   5,   0, UNI_term_values_index }   /* term= */,
+  {     0, 10290,  5718,   6,   5, UNI_XPOSIXALNUM }   /* xposixalnum */,
+  {     7, 10048,  9424,   3,   4, UNI_NV__3_SLASH_64 }   /* nv=3/64 */,
+  {     0,   478,     0,  31,   0, UNI_MATHALPHANUM }   /* mathematicalalphanumericsymbols */,
+  {     0,  1979,     7,  10,   1, UNI_CASEDLETTER }   /* category=lc */,
+  {     0,  1114,  9836,  26,   4, UNI_CWKCF }   /* changeswhennfkccasefolded=true */,
+  {     1,    21,  1677,   2,  14, UNI_LATINEXTA }   /* inlatinextendeda */,
+  {     2,  9997,  3349,   3,  18, UNI_BC__B }   /* bc=paragraphseparator */,
+  {     0,    42,     0,   3,   0, UNI_CJK }   /* cjk */,
+  {    15, 10333,  1176,   3,   3, UNI_SORA }   /* issora */,
+  {    10,  9488,  4868,   4,  15, UNI_NARB }   /* blk=oldnortharabian */,
+  {    15,  9488,  2855,   4,   9, UNI_INMONGOLIAN }   /* blk=mongolian */,
+  {     0,  2203,     0,   4,   0, UNI_HAN }   /* hani */,
+  {     0,  4116,   447,   3,  17, UNI_IDEOGRAPHICSYMBOLS }   /* isideographicsymbols */,
+  {     5, 10012,   865,   3,   1, UNI_EA__W }   /* ea=w */,
+  {     3,  8688,    29,   4,   4, UNI_ARAB }   /* isarabic */,
+  {     1,  8589,  4273,   7,   7, UNI_SC__MYMR }   /* script=myanmar */,
+  {    12,  7218,  6697,  10,  11, UNI_LB__IN }   /* linebreak=inseperable */,
+  {     1,  6420,  9311,   3,   4, UNI_INOGHAM }   /* inogham */,
+  {     5,  7228,    26,  10,   1, UNI_XPOSIXLOWER }   /* lowercase=y */,
+  {     0,  7218,   751,  10,   2, UNI_LB__CL }   /* linebreak=cl */,
+  {     8,  9508,  1179,   4,   2, UNI_CCC__BL }   /* ccc=bl */,
+  {    19,  2760,  5973,  19,  13, UNI_HST__NA }   /* hangulsyllabletype=notapplicable */,
+  {     8,  8589,  2140,   7,   8, UNI_SC__CYRL }   /* script=cyrillic */,
+  {     0,  5739,  1025,  13,   2, -UNI_GRBASE }   /* graphemebase=no */,
+  {     0,  3133,    36,  18,   1, UNI_EBASE }   /* emojimodifierbase=t */,
+  {     0,   184,  1631,   2,  23, UNI_GEOMETRICSHAPESEXT }   /* isgeometricshapesextended */,
+  {     1,  8589,  4448,   7,   4, UNI_BAMU }   /* script=bamu */,
+  {     4,  9488,  3043,   4,  18, UNI_HALFMARKS }   /* blk=combininghalfmarks */,
+  {     2,  1393,     0,  24,   0, UNI_ARABICPFB }   /* arabicpresentationformsb */,
+  {     0,  9277,  4868,   3,  15, UNI_NARB }   /* sc=oldnortharabian */,
+  {     1, 10290,    62,   6,   5, UNI_XPOSIXGRAPH }   /* xposixgraph */,
+  {     0, 10027,  5420,   3,   4, UNI_JG__TETH }   /* jg=teth */,
+  {     2,   184,  4569,   3,  14, UNI_CURRENCYSYMBOLS }   /* iscurrencysymbols */,
+  {     2, 10024,   106,   3,   6, UNI_S }   /* gc=symbol */,
+  {     1, 10048,  8756,   3,   5, UNI_NV__90000 }   /* nv=90000 */,
+  {     0,  3836,  3751,  17,  17, UNI_KITS }   /* scriptextensions=khitansmallscript */,
+  {     0,   184,  3080,   3,  17, UNI_COPTICEPACTNUMBERS }   /* iscopticepactnumbers */,
+  {     6,  8780,  8179,   6,   8, UNI_INGURMUKHI }   /* block=gurmukhi */,
+  {     3,  3439,     0,  18,   0, UNI_SMALLKANAEXT }   /* smallkanaextension */,
+  {     6,  1537,  2994,  24,  13, UNI_INPC__BOTTOMANDLEFT }   /* indicpositionalcategory=bottomandleft */,
+  {     2,  1417,  9919,  24,   3, UNI_CCC__202 }   /* canonicalcombiningclass=202 */,
+  {    64,  6231,  1467,   4,  22, UNI_DIACRITICALSFORSYMBOLS }   /* incombiningmarksforsymbols */,
+  {     0,  8780,  1700,   6,  23, UNI_SHORTHANDFORMATCONTROLS }   /* block=shorthandformatcontrols */,
+  {     0,    21,  3549,   4,   8, UNI_ALCHEMICAL }   /* inalchemical */,
+  {     7,    21,  5284,   2,   7, UNI_LISUSUP }   /* inlisusup */,
+  {     1,  2224,  3440,   3,  17, UNI_SMALLKANAEXT }   /* insmallkanaextension */,
+  {     0,   184,     1,   3,   1, UNI_CN }   /* iscn */,
+  {     0, 10132,   400,   3,   6, UNI_WB__FO }   /* wb=format */,
+  {     1,  3836,  8942,  17,   6, UNI_LYDI }   /* scriptextensions=lydian */,
+  {     3,  5060,     0,  14,   0, UNI_ci_values_index }   /* caseignorable= */,
+  {    34,  9768,  3598,   4,  17, UNI_AGHB }   /* scx=caucasianalbanian */,
+  {     1,  8509,   751,   4,  28, UNI_ENCLOSEDALPHANUMSUP }   /* inenclosedalphanumericsupplement */,
+  {    11,  1822,     0,   2,   0, UNI_NL }   /* nl */,
+  {     8,  9277,  4703,   3,  15, UNI_ARMI }   /* sc=imperialaramaic */,
+  {     9,  8780,  5752,   6,  13, UNI_GREEKEXT }   /* block=greekextended */,
+  {     0,  8589,  8123,   7,   8, UNI_SC__BUGI }   /* script=buginese */,
+  {     6,   184,  3026,   3,   7, UNI_CHER }   /* ischerokee */,
+  {     0,  1537,  2549,  24,  12, UNI_INPC__TOPANDBOTTOM }   /* indicpositionalcategory=topandbottom */,
+  {     2,  9540,     1,   4,   1, -UNI_DIA }   /* dia=n */,
+  {     0,  7318, 10102,  10,   3, UNI_IN__5_DOT_2 }   /* presentin=v52 */,
+  {     0,  9508,  9468,   4,   4, UNI_CCC__216 }   /* ccc=atar */,
+  {     0,   184,  9560,   2,   4, UNI_GONG }   /* isgong */,
+  {     0,  2161,     0,  20,   0, UNI_EXTPICT }   /* extendedpictographic */,
+  {     0,  8768,  1025,   6,   2, -UNI_BIDIC }   /* bidic=no */,
+  {    14,  8780,  3295,   6,   9, UNI_LATINEXTA }   /* block=latinexta */,
+  {     2,  2280,  2875,   3,  18, UNI_OTTOMANSIYAQNUMBERS }   /* isottomansiyaqnumbers */,
+  {     3, 10296,  8979,   3,   4, UNI__PERL_PATWS }   /* ispatws */,
+  {     1,  9508,  7778,   4,   2, UNI_CCC__21 }   /* ccc=21 */,
+  {     3,  7325,  9397,   3,   3, UNI_IN__2_DOT_1 }   /* in=2.1 */,
+  {     4,  4868,     0,  15,   0, UNI_NARB }   /* oldnortharabian */,
+  {    32,  2098,     0,  21,   0, UNI_CJKCOMPATFORMS }   /* cjkcompatibilityforms */,
+  {     0,  3295,     0,   9,   0, UNI_LATINEXTA }   /* latinexta */,
+  {     3,  3836,  8123,  17,   8, UNI_BUGI }   /* scriptextensions=buginese */,
+  {     1,  9488,  3241,   4,  11, UNI_GEORGIANSUP }   /* blk=georgiansup */,
+  {     8,  1417,  8805,  25,   5, UNI_CCC__118 }   /* canonicalcombiningclass=ccc118 */,
+  {     2,  9277,  7666,   3,   9, UNI_ORKH }   /* sc=oldturkic */,
+  {     1,  8774, 10135,   6,   3, UNI_BIDIM }   /* bidim=yes */,
+  {     5,  8954,     0,   7,   0, -UNI__PERL_NCHAR }   /* nchar=n */,
+  {     0,   184,  1822,   2,   2, UNI_NL }   /* isnl */,
+  {     0, 10310,  8301,   4,   6, UNI_INTIFINAGH }   /* intifinagh */,
+  {     0,  8780,   114,   7,  24, UNI_DIACRITICALS }   /* block=combiningdiacriticalmarks */,
+  {     0,  1677,     0,  23,   0, UNI_LATINEXTADDITIONAL }   /* latinextendedadditional */,
+  {     3,  2161,     1,  21,   1, -UNI_EXTPICT }   /* extendedpictographic=n */,
+  {     2,  1552,   406,   9,   7, UNI_XPOSIXCNTRL }   /* category=control */,
+  {    11,  7218,    58,  10,   2, UNI_LB__ID }   /* linebreak=id */,
+  {    16,  4916,  1116,   3,   3, UNI_TANG }   /* istang */,
+  {     0,  5578,   495,  14,   7, UNI_SB__NU }   /* sentencebreak=numeric */,
+  {     0,  1417,  8825,  24,   3, UNI_CCC__130 }   /* canonicalcombiningclass=130 */,
+  {     1, 10288,  5039,   8,   6, UNI_XPOSIXXDIGIT }   /* isxposixxdigit */,
+  {     1,  9444,  9852,   4,   4, UNI_AGE__12_DOT_1 }   /* age=v121 */,
+  {     0,  9277,  9448,   3,   4, UNI_AGHB }   /* sc=aghb */,
+  {     0,  5986,  7827,  13,   8, UNI_NV__1_SLASH_5 }   /* numericvalue=2.00e-01 */,
+  {     3,  1188,  8653,   3,   6, UNI_INTAIVIET }   /* intaiviet */,
+  {     4,  2182,  5497,  21,  11, UNI_GCB__SM }   /* graphemeclusterbreak=spacingmark */,
+  {     1,  8589,  9676,   7,   4, UNI_NARB }   /* script=narb */,
+  {     2,  4369,     0,   6,   0, UNI_SYRC }   /* syriac */,
+  {     2,  4305,     0,  16,   0, UNI_PO }   /* otherpunctuation */,
+  {     0,  9524,  1025,   4,   2, -UNI_CWT }   /* cwt=no */,
+  {     2,  1966,   728,  22,   6, UNI_INSC__NUMBER }   /* indicsyllabiccategory=number */,
+  {    12,  2287,     0,   4,   0, UNI_SINH }   /* sinh */,
+  {     0, 10009,  5012,   3,   6, UNI_DT__SQR }   /* dt=square */,
+  {     0,  9488,  8421,   4,   7, UNI_INELYMAIC }   /* blk=elymaic */,
+  {     1,  9277,  7657,   3,   9, UNI_SC__PERM }   /* sc=oldpermic */,
+  {     2,  9340,     0,   5,   0, UNI_VSSUP }   /* vssup */,
+  {     1,  8882,     0,   6,   0, UNI_grext_values_index }   /* grext= */,
+  {     0,  9277,  8219,   3,   8, UNI_SC__JAVA }   /* sc=javanese */,
+  {     3,  5791,  2637,  13,   3, UNI_JG__YEH }   /* joininggroup=yeh */,
+  {    21,  3836,  8498,  17,   4, UNI_MULT }   /* scriptextensions=mult */,
+  {     5,  8774,     1,   6,   1, -UNI_BIDIM }   /* bidim=n */,
+  {    16,  1188,  9336,   3,   4, UNI_INTAKRI }   /* intakri */,
+  {    18, 10048,  7806,   3,   1, UNI_NV__6 }   /* nv=6 */,
+  {     1,  3836,  8131,  17,   8, UNI_DUPL }   /* scriptextensions=duployan */,
+  {     2,  5739,     1,  13,   1, -UNI_GRBASE }   /* graphemebase=n */,
+  {     1,  8978,  9836,   6,   4, UNI__PERL_PATWS }   /* patws=true */,
+  {     5,  9351,  1025,   4,   2, -UNI_IDS }   /* ids=no */,
+  {     1, 10033,    96,   3,  10, UNI_LB__AL }   /* lb=alphabetic */,
+  {     0,  7325, 10099,   3,   3, UNI_IN__5_DOT_1 }   /* in=v51 */,
+  {     0,  1537,  6621,   3,   5, UNI_DOMINO }   /* indomino */,
+  {     1,  9488,   719,   4,   9, UNI_INCUNEIFORM }   /* blk=cuneiform */,
+  {    10,  9488,  8603,   4,   7, UNI_SHAW }   /* blk=shavian */,
+  {    12,  9240,     0,   5,   0, UNI_dash_values_index }   /* dash= */,
+  {     5, 10027,  6373,   3,  12, UNI_JG__MANICHAEANPE }   /* jg=manichaeanpe */,
+  {     0,  1552,  4305,   9,  16, UNI_PO }   /* category=otherpunctuation */,
+  {     1,   184,  8115,   2,   8, UNI_BASS }   /* isbassavah */,
+  {     3,  8894,    36,   6,   1, UNI_JOINC }   /* joinc=t */,
+  {     0,  9488,  6409,   4,  12, UNI_INMENDEKIKAKUI }   /* blk=mendekikakui */,
+  {     0,  8449,  9255,   7,   5, -UNI_HYPHEN }   /* hyphen=false */,
+  {     0,  8762,    26,   6,   1, UNI_XPOSIXALPHA }   /* alpha=y */,
+  {     2,  9277,  7428,   3,  10, UNI_WARA }   /* sc=warangciti */,
+  {     0,  2569,  3493,  20,  18, UNI_VO__TR }   /* verticalorientation=transformedrotated */,
+  {     0,  3836,  8315,  17,   8, UNI_UGAR }   /* scriptextensions=ugaritic */,
+  {     0,  8589,  5843,   7,   9, UNI_SC__MLYM }   /* script=malayalam */,
+  {     1,  1585,     0,  14,   0, UNI_BYZANTINEMUSIC }   /* byzantinemusic */,
+  {     0, 10027,  8155,   3,   8, UNI_JG__FARSIYEH }   /* jg=farsiyeh */,
+  {     0,  6805,   287,   6,  29, UNI_MISCMATHSYMBOLSB }   /* inmiscellaneousmathematicalsymbolsb */,
+  {     2,  9488,  9310,   4,   5, UNI_INOGHAM }   /* blk=ogham */,
+  {     4,  6231,  3796,   3,   3, UNI_INCHAM }   /* incham */,
+  {     8,   184,  2931,   2,  19, UNI_SUPARROWSA }   /* issupplementalarrowsa */,
+  {    17,  7076,  7069,   3,   9, UNI_ASCII }   /* inbasiclatin */,
+  {     0,  1441,     0,  24,   0, UNI_CJKSYMBOLS }   /* cjksymbolsandpunctuation */,
+  {     2,  8589,  4145,   7,   7, UNI_SC__LINB }   /* script=linearb */,
+  {     4,  7660,     0,   4,   0, UNI_PERM }   /* perm */,
+  {    18,  9768,  3937,   4,   8, UNI_BOPO }   /* scx=bopomofo */,
+  {     0,  9277,  3079,   3,   4, UNI_SC__COPT }   /* sc=copt */,
+  {     3,  8617,     0,   7,   0, UNI_SOYO }   /* soyombo */,
+  {     2,  4916,  8300,   3,   7, UNI_TFNG }   /* istifinagh */,
+  {     2,  3836,  8912,  17,   4, UNI_KHOJ }   /* scriptextensions=khoj */,
+  {    13,  9508,  7859,   4,   3, UNI_WB__EB }   /* ccc=200 */,
+  {     0,  9768,  9732,   4,   4, UNI_PRTI }   /* scx=prti */,
+  {     0,  2784,  7506,   4,   7, UNI_ARABICPFB }   /* inarabicpfb */,
+  {     1,  6061,     0,  11,   0, UNI_BIDIC }   /* bidicontrol */,
+  {     0,  9444,  7469,   4,   1, UNI_AGE__5 }   /* age=5 */,
+  {     1,  9768,  9325,   4,   5, UNI_RUNR }   /* scx=runic */,
+  {     0,  6231,  2141,   3,  20, UNI_CYRILLICSUP }   /* incyrillicsupplementary */,
+  {     1,  8589,  9008,   7,   4, UNI_SC__THAA }   /* script=thaa */,
+  {     0,   184,  5040,   2,   5, UNI_XPOSIXDIGIT }   /* isdigit */,
+  {     1,  8589,  8876,   7,   6, UNI_GOTH }   /* script=gothic */,
+  {     8,  9768,    57,   4,   2, UNI_YI }   /* scx=yi */,
+  {     0,  4049,     0,  16,   0, UNI_GEORGIANEXT }   /* georgianextended */,
+  {     0,  1189,   495,   3,   2, UNI_NT__NU }   /* nt=nu */,
+  {     0,  3374,    36,  11,   1, UNI_XPOSIXSPACE }   /* whitespace=t */,
+  {     0,   206,     0,   2,   0, UNI_PI }   /* pi */,
+  {     2,  3379,     0,   5,   0, UNI_XPOSIXSPACE }   /* space */,
+  {    20,  3836,  9285,  17,   5, UNI_LIMB }   /* scriptextensions=limbu */,
+  {     5,  3836,  3169,  17,   4, UNI_ETHI }   /* scriptextensions=ethi */,
+  {     0,  5578,    34,  14,   6, UNI_SB__EX }   /* sentencebreak=extend */,
+  {     0,  3836,  7666,  17,   9, UNI_ORKH }   /* scriptextensions=oldturkic */,
+  {     0,  8780,  9325,   6,   5, UNI_INRUNIC }   /* block=runic */,
+  {     1,  9014,     0,   5,   0, UNI_UIDEO }   /* uideo */,
+  {     2, 10024,   406,   3,   7, UNI_XPOSIXCNTRL }   /* gc=control */,
+  {     8,   184,  3349,   2,  18, UNI_ZP }   /* isparagraphseparator */,
+  {     1, 10126,  3504,   3,   7, UNI_VO__R }   /* vo=rotated */,
+  {     0, 10009,  2569,   3,   8, UNI_DT__VERT }   /* dt=vertical */,
+  {     3,  5674,     3,  13,   1, -UNI_BIDIM }   /* bidimirrored=f */,
+  {     0,  9488,   951,   4,  28, UNI_VSSUP }   /* blk=variationselectorssupplement */,
+  {    37,  5324,  6279,   4,  10, UNI_MAHJONG }   /* inmahjongtiles */,
+  {    18,  9508,  8801,   4,   3, UNI_CCC__107 }   /* ccc=107 */,
+  {     0,  9768,  6884,   4,  11, UNI_HMNG }   /* scx=pahawhhmong */,
+  {     1,  5986, 10148,  13,   2, UNI_NV__47 }   /* numericvalue=47 */,
+  {     1,  8780,  5200,   6,   7, UNI_KANASUP }   /* block=kanasup */,
+  {     4,  9768,     0,   4,   0, UNI_scx_values_index }   /* scx= */,
+  {    28,  7738,     0,   4,   0, UNI_XIDS }   /* xids */,
+  {     0,  5778,     0,  13,   0, UNI_IPAEXT }   /* ipaextensions */,
+  {     2,  7738,  9836,   9,   4, UNI_XIDS }   /* xidstart=true */,
+  {     0,  1768,  9255,  22,   5, -UNI_CWCF }   /* changeswhencasefolded=false */,
+  {     0, 10048,  9913,   3,   3, UNI_NV__2_SLASH_3 }   /* nv=2/3 */,
+  {     2,  6609,    26,  11,   1, UNI_DEP }   /* deprecated=y */,
+  {    34,    21,  1007,   3,  26, UNI_ANCIENTGREEKMUSIC }   /* inancientgreekmusicalnotation */,
+  {     0,  2182,  5585,  21,   2, UNI_WB__EB }   /* graphemeclusterbreak=eb */,
+  {     0,  1988, 10135,  22,   3, UNI_LOE }   /* logicalorderexception=yes */,
+  {     0,   184,  3367,   2,  17, UNI__PERL_PATWS }   /* ispatternwhitespace */,
+  {     2,  3385,    26,  18,   1, UNI_RI }   /* regionalindicator=y */,
+  {     1,   184,  6012,   2,  13, UNI_VERTICALFORMS }   /* isverticalforms */,
+  {     1,  9270,  6885,   3,  10, UNI_INPAHAWHHMONG }   /* inpahawhhmong */,
+  {     1,  9768,  7428,   4,   4, UNI_WARA }   /* scx=wara */,
+  {     1,  8780,  2076,   6,  15, UNI_TRANSPORTANDMAP }   /* block=transportandmap */,
+  {     2,    78,     0,   4,   0, UNI_ARAB }   /* arab */,
+  {     0,  9275,  1489,   5,  24, UNI_INSC__CONSONANTSUCCEEDINGREPHA }   /* insc=consonantsucceedingrepha */,
+  {    12,  9277,  7660,   3,   4, UNI_SC__PERM }   /* sc=perm */,
+  {     3,   184,  1922,   2,  22, UNI_DIACRITICALSFORSYMBOLS }   /* isdiacriticalsforsymbols */,
+  {     2,  8589,  9283,   7,   4, UNI_PHLI }   /* script=phli */,
+  {     6, 10024,  1025,   3,   2, UNI_NO }   /* gc=no */,
+  {     0, 10009,  2569,   3,   4, UNI_DT__VERT }   /* dt=vert */,
+  {     6,  4033,  2349,  16,  20, UNI_PC }   /* generalcategory=connectorpunctuation */,
+  {     0, 10027,  5908,   3,  13, UNI_JG__MANICHAEANTAW }   /* jg=manichaeantaw */,
+  {     9, 10132,  1218,   3,   8, UNI_WB__KA }   /* wb=katakana */,
+  {     8,  7228,     0,  10,   0, UNI_lower_values_index }   /* lowercase= */,
+  {     0,  8780,  8841,   7,   5, UNI_INCHAKMA }   /* block=chakma */,
+  {     1,   184,     2,   3,   1, UNI_CI }   /* isci */,
+  {     0,  9768,  4928,   4,   5, UNI_TAML }   /* scx=tamil */,
+  {     3,  5746, 10135,   6,   3, UNI_EBASE }   /* ebase=yes */,
+  {     1,  9768,  1218,   4,   8, UNI_KANA }   /* scx=katakana */,
+  {     1,  2224,  4370,   3,   8, UNI_SYRIACSUP }   /* insyriacsup */,
+  {     0, 10024,  1822,   3,   2, UNI_NL }   /* gc=nl */,
+  {    16,   184,  1823,   2,   9, UNI_XPOSIXLOWER }   /* islowercase */,
+  {    16, 10048,  7979,   3,   8, UNI_NV__3_SLASH_5 }   /* nv=6.00e-01 */,
+  {     3,  3379,     1,   6,   1, -UNI_XPOSIXSPACE }   /* space=n */,
+  {     4,  1552,  1186,   9,   2, UNI_PO }   /* category=po */,
+  {     0,  6623,  2876,   4,  17, UNI_OTTOMANSIYAQNUMBERS }   /* inottomansiyaqnumbers */,
+  {    17,  9277,  8171,   3,   8, UNI_SC__GUJR }   /* sc=gujarati */,
+  {     4,  9508,  9201,   5,   4, UNI_CCC__34 }   /* ccc=ccc34 */,
+  {     2,  9488,    42,   4,  36, UNI_CJKCOMPATIDEOGRAPHSSUP }   /* blk=cjkcompatibilityideographssupplement */,
+  {     0, 10048,  9420,   3,   4, UNI_NV__3_SLASH_20 }   /* nv=3/20 */,
+  {     2,  9346,     0,   4,   0, UNI_idc_values_index }   /* idc= */,
+  {     0, 10027,  1511,   3,   3, UNI_JG__HAH }   /* jg=hah */,
+  {     0, 10027,  5340,   3,  14, UNI_JG__MANICHAEANFIVE }   /* jg=manichaeanfive */,
+  {     0,  2912,     0,  19,   0, UNI_SUNDANESESUP }   /* sundanesesupplement */,
+  {    17,  9768,   719,   4,   9, UNI_XSUX }   /* scx=cuneiform */,
+  {     0,  3259,     0,   4,   0, UNI_IDSB }   /* idsb */,
+  {     0,  8589,  8582,   7,   7, UNI_SC__PHAG }   /* script=phagspa */,
+  {    17,  1552,  9503,   9,   2, UNI_MC }   /* category=mc */,
+  {    14,  3836,  7684,  17,   9, UNI_PAUC }   /* scriptextensions=paucinhau */,
+  {     0,  4916,  4944,   3,  14, UNI_TITLE }   /* istitlecaseletter */,
+  {     5,  9496,     0,   4,   0, UNI_BUHD }   /* buhd */,
+  {     0,  9508,  7858,   4,   2, UNI_CCC__22 }   /* ccc=22 */,
+  {     1,   184,  1319,   2,  25, UNI_SYMBOLSANDPICTOGRAPHSEXTA }   /* issymbolsandpictographsexta */,
+  {     1, 10296,     0,  12,   0, UNI_POSIXBLANK }   /* isposixblank */,
+  {     1,  6928,     1,  11,   1, -UNI_SD }   /* softdotted=n */,
+  {     2,  3836,  9002,  17,   4, UNI_TELU }   /* scriptextensions=telu */,
+  {     6,   184,  3683,   2,  11, UNI_ETHIOPICEXT }   /* isethiopicext */,
+  {     9,  9290,  9255,   5,   5, -UNI_MATH }   /* math=false */,
+  {     0,  8780,   895,   6,  28, UNI_SUPPUAA }   /* block=supplementaryprivateuseareaa */,
+  {    16,  8219,     0,   4,   0, UNI_JAVA }   /* java */,
+  {     0,  9488,  8442,   4,   7, UNI_INHANUNOO }   /* blk=hanunoo */,
+  {     0,  5791,  4225,  13,  16, UNI_JG__MANICHAEANTWENTY }   /* joininggroup=manichaeantwenty */,
+  {    19,   184,  6409,   2,   4, UNI_MEND }   /* ismend */,
+  {     3,  5037,  9255,   9,   5, -UNI_XPOSIXXDIGIT }   /* hexdigit=false */,
+  {     9,  9560,     0,   4,   0, UNI_GONG }   /* gong */,
+  {     0,   117,  2226,   4,  19, UNI_ININSCRIPTIONALPARTHIAN }   /* ininscriptionalparthian */,
+  {     3,  8589,  9512,   7,   4, UNI_CHRS }   /* script=chrs */,
+  {     3,  5739,     0,  13,   0, UNI_grbase_values_index }   /* graphemebase= */,
+  {     0,  7218,  6169,  10,   4, UNI_LB__GL }   /* linebreak=glue */,
+  {     0,   184,  1901,   3,  21, UNI_INDICNUMBERFORMS }   /* iscommonindicnumberforms */,
+  {     0, 10024,     7,   3,   1, UNI_C }   /* gc=c */,
+  {     1,   117,  5779,   3,   5, UNI_IPAEXT }   /* inipaext */,
+  {     1,  8688,    15,   4,   2, UNI_ARAB }   /* isarab */,
+  {     4,  9444,  9848,   4,   4, UNI_AGE__12 }   /* age=v120 */,
+  {     3,  9768,  9664,   4,   3, UNI_MRO }   /* scx=mro */,
+  {    16,  9460,     0,   4,   0, UNI_ARMI }   /* armi */,
+  {     1,  8589,  3895,   8,   3, UNI_SGNW }   /* script=sgnw */,
+  {     2,  3836,  8407,  17,   7, UNI_DSRT }   /* scriptextensions=deseret */,
+  {     0, 10048,  9050,   3,   5, UNI_NV__1_SLASH_160 }   /* nv=1/160 */,
+  {     1,  9768,  9008,   4,   4, UNI_THAA }   /* scx=thaa */,
+  {    14,  8960,     0,   6,   0, UNI_nfcqc_values_index }   /* nfcqc= */,
+  {     3,  9262,  8554,   3,   7, UNI_SB__LE }   /* sb=oletter */,
+  {     1,  8267,    36,   8,   1, UNI_RADICAL }   /* radical=t */,
+  {     0,  8855,     0,   2,   0, UNI_CF }   /* cf */,
+  {     8,  1417,   184,  24,   2, UNI_CCC__IS }   /* canonicalcombiningclass=is */,
+  {     0,  9250,    36,   5,   1, UNI_EMOD }   /* emod=t */,
+  {     0,  7155,  8188,   3,   7, UNI_HIRA }   /* ishiragana */,
+  {    19,  9556,  5497,   4,  11, UNI_GCB__SM }   /* gcb=spacingmark */,
+  {     2,   184,  6061,   2,   5, UNI_BIDIC }   /* isbidic */,
+  {     2,  7540, 10135,   9,   3, UNI_EXT }   /* extender=yes */,
+  {     3,  8780,  8470,   6,   7, UNI_INLINEARA }   /* block=lineara */,
+  {     8, 10291, 10308,   5,   5, UNI_POSIXPRINT }   /* posixprint */,
+  {     0, 10027,  6313,   3,  12, UNI_JG__MALAYALAMNGA }   /* jg=malayalamnga */,
+  {     3, 10048,  7469,   3,   1, UNI_NV__5 }   /* nv=5 */,
+  {    51,  9351,    26,   4,   1, UNI_IDS }   /* ids=y */,
+  {     1,  9997,  5829,   3,   3, UNI_BC__RLO }   /* bc=rlo */,
+  {     0,  9488,  9684,   4,   4, UNI_INNEWA }   /* blk=newa */,
+  {     2,  9768,  3025,   4,   8, UNI_CHER }   /* scx=cherokee */,
+  {     0,  1417, 10172,  24,   2, UNI_CCC__9 }   /* canonicalcombiningclass=vr */,
+  {    15, 10333,     7,   3,   1, UNI_SC }   /* issc */,
+  {     0,  7318,  7950,  10,   1, UNI_IN__9 }   /* presentin=9 */,
+  {     0,  2288,  5187,   3,  13, UNI_HIGHSURROGATES }   /* inhighsurrogates */,
+  {    14, 10009,  4532,   3,   6, UNI_DT__MED }   /* dt=medial */,
+  {     0,  6231,  2099,   3,  20, UNI_CJKCOMPATFORMS }   /* incjkcompatibilityforms */,
+  {    16,  3241,     0,   8,   0, UNI_GEOR }   /* georgian */,
+  {     0,  9270,  6506,   3,  11, UNI_PHAISTOS }   /* inphaistosdisc */,
+  {     8,  4643,     0,  15,   0, UNI_ecomp_values_index }   /* emojicomponent= */,
+  {    17,  5791,  8283,  13,   8, UNI_JG__SWASHKAF }   /* joininggroup=swashkaf */,
+  {     0,  5986,  9050,  13,   4, UNI_NV__1_SLASH_16 }   /* numericvalue=1/16 */,
+  {     5,  9508,  3015,   4,  10, UNI_CCC__AR }   /* ccc=aboveright */,
+  {     4,  2280,  9713,   3,   3, UNI_OSGE }   /* isosge */,
+  {     1,  9768,  4868,   4,  15, UNI_NARB }   /* scx=oldnortharabian */,
+  {     1,  9260,     1,   5,   1, -UNI_IDSB }   /* idsb=n */,
+  {     1,  5986,  7803,  13,   8, UNI_NV__1_SLASH_64 }   /* numericvalue=1.56e-02 */,
+  {     2,  8179,     0,   8,   0, UNI_GURU }   /* gurmukhi */,
+  {     3,  9488,  8179,   4,   8, UNI_INGURMUKHI }   /* blk=gurmukhi */,
+  {     0,  9277,  7648,   3,   9, UNI_ITAL }   /* sc=olditalic */,
+  {     1,  8882,    36,   6,   1, UNI_GREXT }   /* grext=t */,
+  {    32,  9768,  9315,   4,   5, UNI_ORYA }   /* scx=oriya */,
+  {     0, 10024,  3358,   3,   9, UNI_Z }   /* gc=separator */,
+  {     1,  2429,     0,  20,   0, UNI_PHLI }   /* inscriptionalpahlavi */,
+  {     3,  5986, 10146,  13,   2, UNI_NV__46 }   /* numericvalue=46 */,
+  {    22, 10048,  8042,   3,   2, UNI_NV__18 }   /* nv=18 */,
+  {     5,  8954,  9836,   6,   4, UNI__PERL_NCHAR }   /* nchar=true */,
+  {     0,  4401,     0,  16,   0, UNI_TANGUTSUP }   /* tangutsupplement */,
+  {     0,  8780,  5284,   6,   4, UNI_INLISU }   /* block=lisu */,
+  {     0,  9536,    36,   4,   1, UNI_DEP }   /* dep=t */,
+  {    19,    21,  7027,   2,  11, UNI_YISYLLABLES }   /* inyisyllables */,
+  {     0,  9444,  7765,   4,   1, UNI_AGE__2 }   /* age=2 */,
+  {     0,  9768,  3115,   4,  10, UNI_DEVA }   /* scx=devanagari */,
+  {     0,   184,  3295,   2,   9, UNI_LATINEXTA }   /* islatinexta */,
+  {     2,  4422,  8409,   4,   5, UNI_DSRT }   /* indeseret */,
+  {     2,  4478,     0,  15,   0, UNI_BRAI }   /* braillepatterns */,
+  {     0,  8589,  8470,   7,   7, UNI_SC__LINA }   /* script=lineara */,
+  {     9,  1988,     1,  22,   1, -UNI_LOE }   /* logicalorderexception=n */,
+  {     1,  1417,  7859,  24,   2, UNI_CCC__20 }   /* canonicalcombiningclass=20 */,
+  {    13,  9488,  6517,   4,  12, UNI_PLAYINGCARDS }   /* blk=playingcards */,
+  {     2,   895,     0,  28,   0, UNI_SUPPUAA }   /* supplementaryprivateuseareaa */,
+  {     0, 10027,  6950,   3,  11, UNI_JG__STRAIGHTWAW }   /* jg=straightwaw */,
+  {     0,  2722,     0,  10,   0, UNI_JAMO }   /* hanguljamo */,
+  {     1,  2224,  5607,   3,  13, UNI_SUPPUNCTUATION }   /* insuppunctuation */,
+  {     0,  9277,  3079,   3,   6, UNI_SC__COPT }   /* sc=coptic */,
+  {     1,  5032,     0,   5,   0, UNI_ASCII }   /* ascii */,
+  {     0,  3836,  9484,  17,   4, UNI_BHKS }   /* scriptextensions=bhks */,
+  {     0, 10006,    26,   3,   1, UNI_DI }   /* di=y */,
+  {     1, 10048,  9432,   3,   4, UNI_NV__5_SLASH_12 }   /* nv=5/12 */,
+  {     0,  1979,    47,  10,   1, UNI_LM }   /* category=lm */,
+  {     5,  9688,     0,   3,   0, UNI_NKO }   /* nko */,
+  {     2,  9700,     0,   4,   0, UNI_OLCK }   /* olck */,
+  {     1,  9580,     0,   4,   0, UNI_HANO }   /* hano */,
+  {     3,  2182,  1910,  21,   2, UNI_GCB__CN }   /* graphemeclusterbreak=cn */,
+  {     0,  8780,  9038,   6,   6, UNI_INYEZIDI }   /* block=yezidi */,
+  {     0,  6553, 10135,  12,   3, UNI_XIDC }   /* xidcontinue=yes */,
+  {     0,   184,  7428,   2,   4, UNI_WARA }   /* iswara */,
+  {     9,  7088,  2798,  10,  19, UNI_BC__LRO }   /* bidiclass=lefttorightoverride */,
+  {     1,  9768,  6409,   4,   4, UNI_MEND }   /* scx=mend */,
+  {     4,  1417,   756,  24,   2, UNI_CCC__DA }   /* canonicalcombiningclass=da */,
+  {     1,  9768,  6940,   5,  10, UNI_SORA }   /* scx=sorasompeng */,
+  {    13,   400,     0,   6,   0, UNI_CF }   /* format */,
+  {     3,  2182,  3385,  21,  17, UNI_RI }   /* graphemeclusterbreak=regionalindicator */,
+  {     0, 10288,   467,   8,   5, UNI_XPOSIXPUNCT }   /* isxposixpunct */,
+  {     0,  5452,     0,  14,   0, UNI_nfcqc_values_index }   /* nfcquickcheck= */,
+  {     4, 10296,   131,   3,   3, UNI_PALM }   /* ispalm */,
+  {     1,  4033,  1527,  16,   9, UNI__PERL_SURROGATE }   /* generalcategory=surrogate */,
+  {     9,  3836,  4370,  18,   5, UNI_SYRC }   /* scriptextensions=syriac */,
+  {     7,  8984,  1025,   6,   2, -UNI_QMARK }   /* qmark=no */,
+  {     0,  4033,    32,  16,   2, UNI__PERL_SURROGATE }   /* generalcategory=cs */,
+  {     2,  8575,     0,   6,   0, UNI_PATSYN }   /* patsyn */,
+  {    15,  9488,  3295,   4,  18, UNI_LATINEXTADDITIONAL }   /* blk=latinextadditional */,
+  {     1,  8589,  9864,   7,   4, UNI_WCHO }   /* script=wcho */,
+  {     0,  8435,  1025,   7,   2, -UNI_GRBASE }   /* grbase=no */,
+  {    11,  9277,  9796,   3,   4, UNI_SC__SYRC }   /* sc=syrc */,
+  {     0,  8780,  3887,   6,  17, UNI_SUTTONSIGNWRITING }   /* block=suttonsignwriting */,
+  {     1,  9277,  2560,   3,   4, UNI_SC__MAND }   /* sc=mand */,
+  {    20,  3151,     0,  17,   0, UNI_EPRES }   /* emojipresentation */,
+  {    41, 10012,  8948,   3,   6, UNI_EA__NA }   /* ea=narrow */,
+  {     2,   184,  8414,   2,   7, UNI_ELBA }   /* iselbasan */,
+  {     8,  8589,  7666,   7,   9, UNI_ORKH }   /* script=oldturkic */,
+  {     1,  5578,  2529,  15,   4, UNI_SB__ST }   /* sentencebreak=sterm */,
+  {     1,  9277,  7118,   3,  10, UNI_CHRS }   /* sc=chorasmian */,
+  {     2,  4433,     0,  15,   0, UNI_ARABICEXTA }   /* arabicextendeda */,
+  {     0,  2855,     0,  12,   0, UNI_MONGOLIANSUP }   /* mongoliansup */,
+  {     1,  1166,     0,  25,   0, UNI_DI }   /* defaultignorablecodepoint */,
+  {     0,  5508,     0,  13,   0, UNI_PATSYN }   /* patternsyntax */,
+  {     0,  6796,     0,  11,   0, UNI_MEDF }   /* medefaidrin */,
   {     0,   184,   218,   3,  32, UNI_DIACRITICALSEXT }   /* iscombiningdiacriticalmarksextended */,
-  {     5,  9105,     0,   4,   0, UNI_CAKM }   /* cakm */,
-  {     0,  9093,  2211,   4,   7, UNI_INSINHALA }   /* blk=sinhala */,
-  {     2,  9093,  1599,   4,  23, UNI_COMPATJAMO }   /* blk=hangulcompatibilityjamo */,
-  {     4,  3868,  6360,  16,  11, UNI_CASEDLETTER }   /* generalcategory=casedletter */,
-  {     0,  9093,  5552,   4,  13, UNI_IPAEXT }   /* blk=ipaextensions */,
-  {     4,  3948,   922,   3,  17, UNI_INVS }   /* invariationselectors */,
-  {     0,  8424,   114,   7,  24, UNI_DIACRITICALS }   /* block=combiningdiacriticalmarks */,
-  {     4,  5760,  7631,  13,   1, UNI_NV__9 }   /* numericvalue=9 */,
-  {    13,  9647,  9506,   3,   3, UNI_NV__2_SLASH_3 }   /* nv=2/3 */,
-  {     4,   184,  6569,   2,  11, UNI_MISCSYMBOLS }   /* ismiscsymbols */,
-  {     3,  7128,  1767,  10,   2, UNI_WB__NL }   /* wordbreak=nl */,
-  {     1,  9361,     0,   4,   0, UNI_SARB }   /* sarb */,
-  {     0,   400,     0,   6,   0, UNI_CF }   /* format */,
-  {     0,  1158,  4718,   3,   7, UNI_TAMILSUP }   /* intamilsup */,
-  {     0,    21,  6027,   2,   5, UNI_INKHMER }   /* inkhmer */,
-  {     0,  8886,  9385,   3,   4, UNI_SC__SHRD }   /* sc=shrd */,
-  {     3,  5760,  9557,  13,   3, UNI_NV__3_SLASH_5 }   /* numericvalue=3/5 */,
-  {     0,  3671,  9253,  17,   4, UNI_MIAO }   /* scriptextensions=miao */,
-  {     0,  3671,  8093,  17,   7, UNI_HANO }   /* scriptextensions=hanunoo */,
-  {     1,  8616,  8864,   6,   5, -UNI_STERM }   /* sterm=false */,
-  {     0,  8869,  9433,   5,   4, UNI_IDSB }   /* idsb=true */,
-  {     4,  5325,  9433,  14,   4, UNI_QMARK }   /* quotationmark=true */,
-  {     0,  3002,  3370,  18,   3, UNI_DT__MED }   /* decompositiontype=med */,
-  {     9,  9093,  6382,   4,  11, UNI_DOMINO }   /* blk=dominotiles */,
-  {     0,  9620,  1257,   3,   2, UNI_UPPERCASELETTER }   /* gc=lu */,
-  {     0,  8424,   837,   6,  28, UNI_PHONETICEXTSUP }   /* block=phoneticextensionssupplement */,
-  {     2,  5513,     1,  13,   1, -UNI_GRBASE }   /* graphemebase=n */,
-  {     1,   184,   779,   2,  29, UNI_ENCLOSEDIDEOGRAPHICSUP }   /* isenclosedideographicsupplement */,
-  {     6,  3772,     0,  16,   0, UNI_BOPOMOFOEXT }   /* bopomofoextended */,
-  {     0,  9121,     1,   4,   1, -UNI_CWL }   /* cwl=n */,
-  {    12,  6315,    36,  12,   1, UNI_XIDC }   /* xidcontinue=t */,
-  {     2,  5492,     0,   5,   0, UNI_XPOSIXALNUM }   /* alnum */,
-  {     1,  8424,  7078,   6,  10, UNI_SUPARROWSB }   /* block=suparrowsb */,
-  {     1,  9113,  8730,   5,   4, UNI_CCC__17 }   /* ccc=ccc17 */,
-  {     1,  8869,     1,   5,   1, -UNI_IDSB }   /* idsb=n */,
-  {     1,  4462,  9433,  15,   4, UNI_GREXT }   /* graphemeextend=true */,
-  {     0,  8424,  3092,   6,  18, UNI_INPUNCTUATION }   /* block=generalpunctuation */,
-  {     1,  7025,  7668,   3,   3, UNI_IN__6_DOT_2 }   /* in=6.2 */,
-  {     0,   184,  3631,   3,   3, UNI_CHAM }   /* ischam */,
-  {     3,  8424,  7329,   6,   9, UNI_INOLDITALIC }   /* block=olditalic */,
-  {     8,  9903,  1768,   6,   5, UNI_XPOSIXLOWER }   /* xposixlower */,
-  {     0,  3251,     1,   3,   1, -UNI_CE }   /* ce=n */,
-  {     5,  5760,  5409,  13,   9, UNI_NV__100000000 }   /* numericvalue=100000000 */,
-  {     0,  5325,     1,  14,   1, -UNI_QMARK }   /* quotationmark=n */,
-  {     1,  2703,    26,  19,   1, UNI_IDST }   /* idstrinaryoperator=y */,
-  {     1,  9049,  7463,   4,   1, UNI_AGE__3 }   /* age=3 */,
-  {     9,  8424,   893,   6,  28, UNI_SUPPUAB }   /* block=supplementaryprivateuseareab */,
-  {     8,  8886,  2984,   3,   6, UNI_SC__COPT }   /* sc=coptic */,
-  {     4,  3671,  7995,  17,   7, UNI_AVST }   /* scriptextensions=avestan */,
-  {     0,  3671,  8610,  17,   6, UNI_RJNG }   /* scriptextensions=rejang */,
-  {     5,  9093,   808,   4,  29, UNI_MISCARROWS }   /* blk=miscellaneoussymbolsandarrows */,
-  {     1,  9659,    26,   3,   1, UNI_RI }   /* ri=y */,
-  {     1,  3980,     0,  16,   0, UNI_LINEARBIDEOGRAMS }   /* linearbideograms */,
-  {     5,  9093,  1845,   4,  22, UNI_INDICNUMBERFORMS }   /* blk=commonindicnumberforms */,
-  {     2,  6171,     0,  12,   0, UNI_MATHALPHANUM }   /* mathalphanum */,
-  {     2,  1410,     0,  24,   0, UNI_DIACRITICALSFORSYMBOLS }   /* combiningmarksforsymbols */,
-  {     1,   184,   382,   2,   4, UNI_EGYP }   /* isegyp */,
-  {     0,  9093,  3020,   4,  18, UNI_DEVANAGARIEXT }   /* blk=devanagariextended */,
-  {     4,   749,     0,  30,   0, UNI_SYMBOLSANDPICTOGRAPHSEXTA }   /* symbolsandpictographsextendeda */,
-  {     8,  9093,  5449,   5,  12, UNI_BLOCKELEMENTS }   /* blk=blockelements */,
-  {     6,   184,  3519,   3,  16, UNI_CYRILLICEXTB }   /* iscyrillicextendedb */,
-  {     0,  5565,  3620,  13,  17, UNI_JG__MANICHAEANDHAMEDH }   /* joininggroup=manichaeandhamedh */,
-  {     1,  9113,  9530,   4,   3, UNI_CCC__AL }   /* ccc=228 */,
-  {     1,  9629,  9310,   3,   2, UNI_LB__SG }   /* lb=sg */,
-  {     0,  6918,  5520,  10,   5, UNI_LB__EB }   /* linebreak=ebase */,
-  {     5,  9623,  4552,   3,  15, UNI_JG__MANICHAEANSADHE }   /* jg=manichaeansadhe */,
-  {     0,  3739,  9734,  17,   3, UNI_UIDEO }   /* unifiedideograph=yes */,
-  {     1,  9153,  4797,   5,   2, UNI_WB__EB }   /* gcb=gaz */,
-  {     0,  9909,  1768,   7,   5, UNI_POSIXLOWER }   /* isposixlower */,
-  {     9,  8424,  9057,   6,   4, UNI_INAHOM }   /* block=ahom */,
-  {     1,   184,  5884,   3,  11, UNI_CYRILLICEXTB }   /* iscyrillicextb */,
-  {     1,  5565,  6909,  14,   9, UNI_JG__KNOTTEDHEH }   /* joininggroup=knottedheh */,
-  {     1,  4108,     0,  16,   0, UNI_MYANMAREXTA }   /* myanmarextendeda */,
-  {     3,  1084,   995,  26,   2, -UNI_CWKCF }   /* changeswhennfkccasefolded=no */,
-  {     3,  5227,     0,  15,   0, UNI_DT__CAN }   /* nfdquickcheck=n */,
-  {     0,   184,  8065,   2,   4, UNI_ELBA }   /* iselba */,
-  {     0,  9093,  3469,   4,   4, UNI_UCAS }   /* blk=ucas */,
-  {     0,  8086,  9734,   7,   3, UNI_GRBASE }   /* grbase=yes */,
-  {    15,  8886,    78,   3,   4, UNI_SC__ARAB }   /* sc=arab */,
-  {     3,  8854,     3,   5,   1, -UNI_DASH }   /* dash=f */,
-  {     5,  8424,  6869,   7,   9, UNI_COMPATJAMO }   /* block=compatjamo */,
-  {     0,  9093,  4124,   4,  16, UNI_MYANMAREXTB }   /* blk=myanmarextendedb */,
-  {     1,  9365,  8107,   4,   7, UNI_KNDA }   /* scx=kannada */,
-  {     8,  8424,  2021,   6,  22, UNI_TRANSPORTANDMAP }   /* block=transportandmapsymbols */,
-  {     1,  1482,  4434,   4,  13, UNI_DIACRITICALSSUP }   /* indiacriticalssup */,
-  {     0,  8886,  1622,   3,   5, UNI_SC__LATN }   /* sc=latin */,
-  {     0,  1156,     0,   2,   0, UNI_PO }   /* po */,
-  {     8,  9093,  2401,   4,   3, UNI_PUA }   /* blk=pua */,
-  {     0,    21,   977,   3,  16, UNI_ANCIENTGREEKMUSIC }   /* inancientgreekmusic */,
-  {     9,  5760,  8394,  13,   3, UNI_NV__800 }   /* numericvalue=800 */,
-  {     1,  8884,  8909,   5,   5, UNI_INSC__NUKTA }   /* insc=nukta */,
-  {     2,  9365,  2741,   4,   4, UNI_MERO }   /* scx=mero */,
-  {     1,  8233,  9473,   7,   4, UNI_SC__YI }   /* script=yiii */,
-  {     1,  8424,  6712,   6,  11, UNI_SUPERANDSUB }   /* block=superandsub */,
-  {     3,  3002,  4351,  18,   6, UNI_DT__MED }   /* decompositiontype=medial */,
-  {     0,  9093,  3980,   4,  16, UNI_LINEARBIDEOGRAMS }   /* blk=linearbideograms */,
-  {     1,  8874,  9433,   5,   4, UNI_IDST }   /* idst=true */,
-  {     0,  9620,  4140,   3,  16, UNI_PO }   /* gc=otherpunctuation */,
-  {     1,  6194,  6989,   3,   9, UNI_INOLDSOGDIAN }   /* inoldsogdian */,
-  {     0,  9089,     0,   4,   0, UNI_BHKS }   /* bhks */,
-  {     0,  8886,  8072,   3,   7, UNI_ELYM }   /* sc=elymaic */,
-  {     9,  1801,  9433,  22,   4, UNI_CWU }   /* changeswhenuppercased=true */,
-  {     2,   878,     0,  14,   0, UNI_PUA }   /* privateusearea */,
-  {     2,  5565,  6087,  13,  12, UNI_JG__MALAYALAMNGA }   /* joininggroup=malayalamnga */,
-  {     0,  4462,     0,  15,   0, UNI_grext_values_index }   /* graphemeextend= */,
-  {     2,  4826,    36,   9,   1, UNI_XPOSIXXDIGIT }   /* hexdigit=t */,
-  {     4,  1779,     0,  22,   0, UNI_cwt_values_index }   /* changeswhentitlecased= */,
-  {     4,  9093,   328,   4,  21, UNI_MATHOPERATORS }   /* blk=mathematicaloperators */,
-  {     4,  9113,  8358,   4,   2, UNI_CCC__30 }   /* ccc=30 */,
-  {    17,  7239,  5969,   4,   4, UNI_INHEBREW }   /* inhebrew */,
-  {     1,  5760,  9572,  13,   3, UNI_NV__5_SLASH_8 }   /* numericvalue=5/8 */,
-  {     0,  2106,     0,  21,   0, UNI_gcb_values_index }   /* graphemeclusterbreak= */,
-  {    11,  9647,  8376,   3,   6, UNI_NV__500000 }   /* nv=500000 */,
-  {     2,  3671,  8892,  17,   4, UNI_PHLI }   /* scriptextensions=phli */,
-  {     1,  9093,  7852,   4,   8, UNI_INGURMUKHI }   /* blk=gurmukhi */,
-  {     0,  9626,  6745,   3,  11, UNI_JT__T }   /* jt=transparent */,
-  {     4,  8886,  6978,   3,  10, UNI_XPEO }   /* sc=oldpersian */,
-  {     0,  9946,    47,   3,   1, UNI_SM }   /* issm */,
-  {    11,  8424,  8562,   6,   6, UNI_INLYCIAN }   /* block=lycian */,
-  {     2,  2457,  5802,   5,   9, UNI_ALPHABETICPF }   /* inalphabeticpf */,
-  {     0,  3251,     0,   3,   0, UNI_ce_values_index }   /* ce= */,
-  {     1,  6005,   150,   4,  33, UNI_DIACRITICALSSUP }   /* incombiningdiacriticalmarkssupplement */,
-  {     1,  9113,  8646,   4,   6, UNI_CCC__9 }   /* ccc=virama */,
-  {     0,  9093,  6492,   4,  11, UNI_KATAKANAEXT }   /* blk=katakanaext */,
-  {     0,  3671,  9133,  17,   4, UNI_CYRL }   /* scriptextensions=cyrl */,
-  {     9,   184,  5591,   2,  13, UNI_ZL }   /* islineseparator */,
-  {     1,  9647,  5409,   3,   8, UNI_NV__10000000 }   /* nv=10000000 */,
-  {     0,  3671,  9145,  17,   4, UNI_DSRT }   /* scriptextensions=dsrt */,
-  {     8,  9864,   436,   7,   4, UNI__PERL_NCHAR }   /* _perl_nchar */,
-  {    24,  9629,  1156,   3,   2, UNI_LB__PO }   /* lb=po */,
-  {     0,  8424,   749,   6,  30, UNI_SYMBOLSANDPICTOGRAPHSEXTA }   /* block=symbolsandpictographsextendeda */,
-  {     1,  6828,  2013,  10,   3, UNI_BC__RLE }   /* bidiclass=rle */,
-  {    15,   184,  9201,   2,   4, UNI_KHMR }   /* iskhmr */,
-  {     0,  8635,    36,   5,   1, UNI_IDEO }   /* ideo=t */,
-  {     0,  7025,  9722,   3,   3, UNI_IN__9 }   /* in=v90 */,
-  {     0,  9909,  2495,   3,   3, UNI_PRTI }   /* isprti */,
-  {     7,  8233,  2085,   7,   8, UNI_SC__CYRL }   /* script=cyrillic */,
-  {     3,  9629,  2564,   3,   2, UNI_LB__BA }   /* lb=ba */,
-  {     1,  9153,    73,   4,   2, UNI_WB__EB }   /* gcb=em */,
-  {     0,  1158,  4221,   3,   5, UNI_INTANGUT }   /* intangut */,
-  {     2,   184,  8502,   2,   6, UNI_GOTH }   /* isgothic */,
-  {     1,  8424,  1162,   6,  26, UNI_HALFANDFULLFORMS }   /* block=halfwidthandfullwidthforms */,
-  {     0,  5760,  8358,  13,   3, UNI_NV__300 }   /* numericvalue=300 */,
-  {     0,  9946,     0,   7,   0, UNI_XPOSIXSPACE }   /* isspace */,
-  {     0,  9093,  5578,   4,  13, UNI_KANAEXTA }   /* blk=kanaextendeda */,
-  {     0,  4447,  1174,  15,   9, UNI_EA__F }   /* eastasianwidth=fullwidth */,
-  {     3,  9093,  7356,   4,   9, UNI_PALM }   /* blk=palmyrene */,
-  {     7,  9909,  1574,   3,   3, UNI_PHAG }   /* isphag */,
-  {     1,  8424,  1576,   6,  15, UNI_GEOMETRICSHAPES }   /* block=geometricshapes */,
-  {     4,   837,     0,  18,   0, UNI_PHONETICEXT }   /* phoneticextensions */,
-  {     0,  9113,  7540,   4,   3, UNI_WB__EB }   /* ccc=200 */,
-  {     0,  4241,  3022,   4,  16, UNI_DEVANAGARIEXT }   /* indevanagariextended */,
-  {     2,  7420,  8864,   8,   5, -UNI_IDS }   /* idstart=false */,
-  {     0,  8886,  9485,   3,   4, UNI_SC__QAAI }   /* sc=zinh */,
-  {     2,  8886,  7804,   3,   8, UNI_SC__BUGI }   /* sc=buginese */,
-  {     0,  9620,  4080,   3,  10, UNI_SM }   /* gc=mathsymbol */,
-  {     1,  5835,    36,  12,   1, UNI_BIDIC }   /* bidicontrol=t */,
-  {     3,  1713,  9433,  22,   4, UNI_CWCF }   /* changeswhencasefolded=true */,
-  {     0,   184,  4975,   2,   7, UNI_KANASUP }   /* iskanasup */,
-  {     2,  1458,     0,  24,   0, UNI_HIGHPUSURROGATES }   /* highprivateusesurrogates */,
-  {     0,  9629,   495,   3,   2, UNI_LB__NU }   /* lb=nu */,
-  {     1,  6679,     3,  11,   1, -UNI_SD }   /* softdotted=f */,
-  {     4,  8332,  3417,   3,   9, UNI_ALCHEMICAL }   /* isalchemical */,
-  {     9,  7230,     3,   9,   1, -UNI_EXT }   /* extender=f */,
-  {    17,  8233,  1482,   8,   3, UNI_SC__SIND }   /* script=sind */,
-  {     7,  7018,  9437,  10,   4, UNI_IN__10 }   /* presentin=v100 */,
-  {     0,  2204,  4659,   4,  13, UNI_NARB }   /* isoldnortharabian */,
-  {     8,  9623,  6097,   3,   5, UNI_JG__GAMAL }   /* jg=gamal */,
-  {     0,  8233,  7375,   8,   8, UNI_SAMR }   /* script=samaritan */,
-  {     4,  8424,   630,   7,  29, UNI_CJKEXTE }   /* block=cjkunifiedideographsextensione */,
-  {     0,  9125,     3,   4,   1, -UNI_CWT }   /* cwt=f */,
-  {     0,  9901,  7420,   3,   7, UNI_XIDS }   /* isxidstart */,
-  {     1,  9365,  8628,   4,   6, UNI_THAA }   /* scx=thaana */,
-  {     5,  3671,  8149,  17,   4, UNI_MULT }   /* scriptextensions=mult */,
-  {     4,  5565,  1456,  13,   3, UNI_JG__HAH }   /* joininggroup=hah */,
-  {    20,  5760,  7484,  13,   8, UNI_NV__1_SLASH_64 }   /* numericvalue=1.56e-02 */,
-  {     8,  9623,   726,   3,   3, UNI_JG__DAL }   /* jg=dal */,
-  {     0,  5565,  6123,  13,  12, UNI_JG__MALAYALAMSSA }   /* joininggroup=malayalamssa */,
-  {     2,  5565,  4038,  13,   3, UNI_JG__LAM }   /* joininggroup=lam */,
-  {     3,  7025,  9710,   3,   3, UNI_IN__6_DOT_2 }   /* in=v62 */,
-  {    10,  3254,     1,  18,   1, -UNI_RI }   /* regionalindicator=n */,
-  {     0,  9093,  6171,   4,  12, UNI_MATHALPHANUM }   /* blk=mathalphanum */,
-  {     1,  9365,  8526,   4,   6, UNI_KTHI }   /* scx=kaithi */,
-  {     0,  1497,  4387,   9,  14, UNI_SC }   /* category=currencysymbol */,
-  {     0,  3671,  7329,  17,   9, UNI_ITAL }   /* scriptextensions=olditalic */,
-  {     2,  9623,  5656,   3,  13, UNI_JG__MANICHAEANNUN }   /* jg=manichaeannun */,
-  {     0,   184,  3020,   2,   4, UNI_DEVA }   /* isdeva */,
-  {     0,  3552,     0,  16,   0, UNI_ETHIOPICEXT }   /* ethiopicextended */,
-  {     5,  8884,  4236,   5,   5, UNI_INSC__VOWEL }   /* insc=vowel */,
-  {     1,  3868,  8839,  16,   5, UNI_XPOSIXCNTRL }   /* generalcategory=cntrl */,
-  {     0,  9365,  6602,   4,  11, UNI_NAND }   /* scx=nandinagari */,
-  {     0,   184,  2949,   3,  17, UNI_HALFMARKS }   /* iscombininghalfmarks */,
-  {     0,  4705,  4221,   3,  15, UNI_TANGUTCOMPONENTS }   /* istangutcomponents */,
-  {     0,  8233,  4108,   7,   7, UNI_SC__MYMR }   /* script=myanmar */,
-  {     1,   184,  8894,   2,   4, UNI_LIMB }   /* islimb */,
-  {     1,  8233,  8892,   7,   4, UNI_PHLI }   /* script=phli */,
-  {     2,   184,  4417,   2,  15, UNI_DIACRITICALSEXT }   /* isdiacriticalsext */,
-  {     1,  5760,  7444,  13,   8, UNI_NV__1_SLASH_8 }   /* numericvalue=1.25e-01 */,
-  {    10,  9623,   341,   3,   2, UNI_JG__PE }   /* jg=pe */,
-  {     0,  8424,  7068,   6,  10, UNI_SUPARROWSA }   /* block=suparrowsa */,
-  {     8,  3671,  5617,  17,   9, UNI_MLYM }   /* scriptextensions=malayalam */,
-  {     5,  9946,    44,   3,   1, UNI_SK }   /* issk */,
-  {     1,  8884,  2966,   5,  18, UNI_INSC__CONSONANTSUBJOINED }   /* insc=consonantsubjoined */,
-  {     3,  1911,  4891,  22,  14, UNI_INSC__CONSONANTFINAL }   /* indicsyllabiccategory=consonantfinal */,
-  {     0,  8886,  9169,   3,   4, UNI_SC__GUJR }   /* sc=gujr */,
-  {    11,  7025,  9575,   3,   3, UNI_IN__6_DOT_1 }   /* in=6.1 */,
-  {     1,  1362,  8765,  25,   4, UNI_CCC__24 }   /* canonicalcombiningclass=ccc24 */,
-  {     2,   567,     0,   2,   0, UNI_NB }   /* nb */,
-  {     0,  9093,  8652,   4,   6, UNI_INWANCHO }   /* blk=wancho */,
-  {     2,  9365,  9297,   4,   4, UNI_OLCK }   /* scx=olck */,
-  {     1,  2148,  4173,   3,  15, UNI_SUPMATHOPERATORS }   /* insupmathoperators */,
-  {     0,   184,  2855,   2,  19, UNI_SUPARROWSA }   /* issupplementalarrowsa */,
-  {     9,  9659,    36,   3,   1, UNI_RI }   /* ri=t */,
-  {     1,  9923,  7966,   4,   6, UNI_INTIFINAGH }   /* intifinagh */,
-  {     0,  8884,   698,   5,   6, UNI_INSC__NUMBER }   /* insc=number */,
-  {     0,  6338,     0,  11,   0, UNI_alpha_values_index }   /* alphabetic= */,
-  {     0,  7230,   995,   9,   2, -UNI_EXT }   /* extender=no */,
-  {     2,  7025,  7631,   3,   1, UNI_IN__9 }   /* in=9 */,
-  {     1,  9901,   467,   8,   5, UNI_XPOSIXPUNCT }   /* isxposixpunct */,
-  {     0,  1779,    36,  22,   1, UNI_CWT }   /* changeswhentitlecased=t */,
-  {     0,  5031,     0,  14,   0, UNI_LATINEXTD }   /* latinextendedd */,
-  {     0,  2106,    24,  21,   1, UNI_GCB__L }   /* graphemeclusterbreak=l */,
-  {     0,   184,  4402,   2,   4, UNI_DASH }   /* isdash */,
-  {     0,  4849,  9734,  14,   3, UNI_CI }   /* caseignorable=yes */,
-  {     1,  8886,  2006,   3,   4, UNI_SC__MODI }   /* sc=modi */,
-  {     6,  5565,  6536,  13,  11, UNI_JG__MALAYALAMJA }   /* joininggroup=malayalamja */,
-  {     1,  8100,     0,   6,   0, UNI_HYPHEN }   /* hyphen */,
-  {     2,  9093,  3020,   4,  13, UNI_DEVANAGARIEXT }   /* blk=devanagariext */,
-  {     1,  6918,  5773,  10,  13, UNI_LB__PR }   /* linebreak=prefixnumeric */,
-  {     2,  9365,  8149,   4,   4, UNI_MULT }   /* scx=mult */,
-  {     3,   184,  6159,   2,  12, UNI_GONM }   /* ismasaramgondi */,
-  {     4,  8233,  5617,   7,   9, UNI_SC__MLYM }   /* script=malayalam */,
-  {     0,  7108,   995,  10,   2, -UNI_XPOSIXUPPER }   /* uppercase=no */,
-  {     0,  3671,  6648,  18,   3, UNI_SHAW }   /* scriptextensions=shaw */,
-  {     6,   184,  2086,   3,  20, UNI_CYRILLICSUP }   /* iscyrillicsupplementary */,
-  {     4,  9620,  5487,   3,  13, UNI_XPOSIXDIGIT }   /* gc=decimalnumber */,
-  {     2,  6567,  1968,   6,   9, UNI_MISCTECHNICAL }   /* inmisctechnical */,
-  {     8,  8233,  1085,   7,   4, UNI_SC__HANG }   /* script=hang */,
-  {    12,  8871,   836,   3,   2, UNI_SB__SP }   /* sb=sp */,
-  {     8,  6838,     0,  10,   0, UNI_BOXDRAWING }   /* boxdrawing */,
-  {     1,  9599,   995,   3,   2, -UNI_CI }   /* ci=no */,
-  {     9,  5835,     0,  11,   0, UNI_BIDIC }   /* bidicontrol */,
-  {     2,  3671,  6898,  17,  10, UNI_KHAR }   /* scriptextensions=kharoshthi */,
-  {     0,  8424,   878,   6,  10, UNI_PUA }   /* block=privateuse */,
-  {     1,  5979,    26,  12,   1, UNI_IDEO }   /* ideographic=y */,
-  {    18,  6194,  7339,   3,   8, UNI_INOLDPERMIC }   /* inoldpermic */,
-  {     1,  1136,  9433,  26,   4, UNI_DI }   /* defaultignorablecodepoint=true */,
-  {     0,  9093,  7266,   4,   9, UNI_LATINEXTC }   /* blk=latinextc */,
-  {    10,  9049,  7724,   4,   3, UNI_AGE__8 }   /* age=8.0 */,
-  {     8,  8009,     0,   7,   0, UNI_CJKEXTA }   /* cjkexta */,
-  {     8,  9049,  7098,   4,  10, UNI_AGE__NA }   /* age=unassigned */,
-  {     3,  1924,  4509,  11,  13, UNI_LOWERCASELETTER }   /* category=lowercaseletter */,
-  {     0,  6918,    21,  10,   2, UNI_LB__IN }   /* linebreak=in */,
-  {     8,  9365,  9217,   4,   3, UNI_LAO }   /* scx=lao */,
-  {     2,  6918,  6437,  10,  11, UNI_LB__EX }   /* linebreak=exclamation */,
-  {     4,  9623,  9061,   3,   4, UNI_JG__ALEF }   /* jg=alef */,
-  {     1,  5085,  8130,   4,   5, UNI_INMAKASAR }   /* inmakasar */,
-  {     0,  9647,  8822,   3,   2, UNI_NV__35 }   /* nv=35 */,
-  {     1,  9365,  9417,   4,   4, UNI_TFNG }   /* scx=tfng */,
-  {     0,  1536,  3039,   3,  17, UNI_ETHIOPICSUP }   /* inethiopicsupplement */,
-  {     0,  9113,  2379,   4,   5, UNI_CCC__R }   /* ccc=right */,
-  {     2,  8859,     0,   5,   0, UNI_DOGR }   /* dogra */,
-  {     8,  8233,  8135,   7,   7, UNI_SC__MAND }   /* script=mandaic */,
-  {     1,  6768,  9474,   3,   3, UNI_YI }   /* isyiii */,
-  {     0,  1911,  5395,  22,  14, UNI_INSC__VOWELDEPENDENT }   /* indicsyllabiccategory=voweldependent */,
-  {     4,  2665,     0,  19,   0, UNI_JAMOEXTB }   /* hanguljamoextendedb */,
-  {     2,  2148,  6992,   3,   6, UNI_INSOGDIAN }   /* insogdian */,
-  {     1,  8496,     0,   5,   0, UNI_CWKCF }   /* cwkcf */,
-  {     8,  5760,  7446,  13,   2, UNI_NV__25 }   /* numericvalue=25 */,
-  {     1,  9647,  7572,   3,   8, UNI_NV__1_SLASH_3 }   /* nv=3.33e-01 */,
-  {     0,  9113,  8822,   4,   2, UNI_CCC__35 }   /* ccc=35 */,
-  {     4,  9093,  8191,   4,   7, UNI_OLCK }   /* blk=olchiki */,
-  {     4,  8424,  7980,   6,   8, UNI_INUGARITIC }   /* block=ugaritic */,
-  {     1,  6005,  2044,   3,  20, UNI_CJKCOMPATFORMS }   /* incjkcompatibilityforms */,
-  {     0,  9647,  7516,   3,   8, UNI_NV__5_SLASH_2 }   /* nv=2.50e+00 */,
-  {     5,  6316,     3,  11,   1, -UNI_IDC }   /* idcontinue=f */,
-  {     2,  5258,     0,  11,   0, UNI_MC }   /* spacingmark */,
-  {     0,  9629,  3248,   3,   5, UNI_LB__SP }   /* lb=space */,
-  {     2,   184,  2608,   2,  19, UNI_EGYP }   /* isegyptianhieroglyphs */,
-  {     0,  3868,   995,  16,   2, UNI_NO }   /* generalcategory=no */,
-  {     0,  9620,  6360,   3,  11, UNI_CASEDLETTER }   /* gc=casedletter */,
-  {     3,  1911,  2532,  22,  19, UNI_INSC__BRAHMIJOININGNUMBER }   /* indicsyllabiccategory=brahmijoiningnumber */,
-  {     1,  9365,  2779,   4,   9, UNI_MONG }   /* scx=mongolian */,
-  {     1,  3671,  2741,  17,   4, UNI_MERO }   /* scriptextensions=mero */,
-  {     0,  9113,  7631,   4,   1, UNI_CCC__9 }   /* ccc=9 */,
-  {     4,  5565,  7038,  13,  10, UNI_JG__REVERSEDPE }   /* joininggroup=reversedpe */,
-  {     3,  5760,  7700,  13,   8, UNI_NV__2_SLASH_3 }   /* numericvalue=6.67e-01 */,
-  {     2,  8424,  2253,   6,  20, UNI_INANATOLIANHIEROGLYPHS }   /* block=anatolianhieroglyphs */,
-  {     7,  9953,  4764,   4,   6, UNI_VEDICEXT }   /* isvedicext */,
-  {     3,  9093,  2836,   4,  12, UNI_SUNDANESESUP }   /* blk=sundanesesup */,
-  {     0,  2169,     0,  11,   0, UNI_MTEI }   /* meeteimayek */,
-  {     1,  9093,  5786,   4,  13, UNI_VERTICALFORMS }   /* blk=verticalforms */,
-  {     7,  8233,  9285,   7,   3, UNI_NKO }   /* script=nko */,
-  {     0,  8424,  5031,   6,  14, UNI_LATINEXTD }   /* block=latinextendedd */,
-  {     0,  8622,     0,   6,   0, UNI_TELU }   /* telugu */,
-  {     0,  8424,  2006,   6,  15, UNI_MODIFIERLETTERS }   /* block=modifierletters */,
-  {     1,  9647,  9001,   3,   4, UNI_NV__11_SLASH_2 }   /* nv=11/2 */,
-  {     6,  1159,   495,   3,   7, UNI_NT__NU }   /* nt=numeric */,
-  {     0,  9121,     0,   4,   0, UNI_cwl_values_index }   /* cwl= */,
-  {     0,  9133,     0,   4,   0, UNI_CYRL }   /* cyrl */,
-  {     6,  8424,   988,   6,   5, UNI_MUSIC }   /* block=music */,
-  {     1,  5760,  9584,  13,   3, UNI_NV__7_SLASH_8 }   /* numericvalue=7/8 */,
-  {     0,  2684,  6525,  19,   3, UNI_LB__H3 }   /* hangulsyllabletype=lvt */,
-  {     9,  8849,  8864,   5,   5, -UNI_CWCM }   /* cwcm=false */,
-  {     0,  3671,  8628,  17,   4, UNI_THAA }   /* scriptextensions=thaa */,
-  {     0,  9093,  2779,   4,  19, UNI_MONGOLIANSUP }   /* blk=mongoliansupplement */,
-  {     0,  4778,     1,   3,  41, UNI_UCASEXT }   /* isunifiedcanadianaboriginalsyllabicsextended */,
-  {     0,  9909,     2,   3,   1, UNI_PI }   /* ispi */,
-  {     2,  9365,  9233,   4,   4, UNI_LISU }   /* scx=lisu */,
-  {     0,  9629,  7202,   3,   2, UNI_LB__BB }   /* lb=bb */,
-  {     1,  9365,  2837,   5,   3, UNI_SUND }   /* scx=sund */,
-  {     6,  8424,  4124,   6,  16, UNI_MYANMAREXTB }   /* block=myanmarextendedb */,
-  {     2,  5760,  7460,  13,   8, UNI_NV__1_SLASH_7 }   /* numericvalue=1.43e-01 */,
-  {     0,  1911,  4236,  22,  16, UNI_INSC__VOWELINDEPENDENT }   /* indicsyllabiccategory=vowelindependent */,
-  {     0,  8424,  2211,   6,   7, UNI_INSINHALA }   /* block=sinhala */,
-  {     1,   184,   690,   3,   8, UNI_XSUX }   /* iscuneiform */,
-  {     0,  6567,   187,   6,  30, UNI_MISCPICTOGRAPHS }   /* inmiscellaneoussymbolsandpictographs */,
-  {     2,  5760,  8989,  13,   3, UNI_NV__1_SLASH_8 }   /* numericvalue=1/8 */,
-  {     1,  6918,  1472,  10,   9, UNI_LB__SG }   /* linebreak=surrogate */,
-  {     2,  5760,  7463,  13,   1, UNI_NV__3 }   /* numericvalue=3 */,
-  {     0,   921,     0,  18,   0, UNI_INVS }   /* variationselectors */,
-  {     0,  9365,  4220,   4,   4, UNI_TANG }   /* scx=tang */,
-  {     2,  9909,  4829,   7,   5, UNI_POSIXDIGIT }   /* isposixdigit */,
-  {     1,  6828,  9653,  10,   3, UNI_BC__PDF }   /* bidiclass=pdf */,
-  {     0,  9365,    78,   4,   4, UNI_ARAB }   /* scx=arab */,
-  {     9,  4580,  6185,   4,  10, UNI_INMENDEKIKAKUI }   /* inmendekikakui */,
-  {     0,  9731,   697,   3,   2, UNI_WB__MN }   /* wb=mn */,
-  {     0,  8233,  7341,   7,   4, UNI_SC__PERM }   /* script=perm */,
-  {     9,  9620,  3218,   3,  18, UNI_ZP }   /* gc=paragraphseparator */,
-  {     2,  8886,  3728,   3,  11, UNI_SGNW }   /* sc=signwriting */,
-  {     1,  8610,     0,   6,   0, UNI_RJNG }   /* rejang */,
-  {     0,  6005,   219,   4,  31, UNI_DIACRITICALSEXT }   /* incombiningdiacriticalmarksextended */,
-  {     9,  9629,  5325,   3,   9, UNI_LB__QU }   /* lb=quotation */,
-  {     0,  8233,  9289,   7,   4, UNI_NSHU }   /* script=nshu */,
-  {     0,  8424,  3884,   6,  16, UNI_GEORGIANEXT }   /* block=georgianextended */,
-  {     1,  8424,   660,   7,  29, UNI_CJKEXTF }   /* block=cjkunifiedideographsextensionf */,
-  {     2,  8424,  3502,   7,  16, UNI_CYRILLICEXTA }   /* block=cyrillicextendeda */,
-  {    15,  8065,     0,   4,   0, UNI_ELBA }   /* elba */,
-  {     2,  3671,  8894,  17,   5, UNI_LIMB }   /* scriptextensions=limbu */,
-  {     3,  9620,  4687,   3,  15, UNI_PS }   /* gc=openpunctuation */,
-  {     3,  9129,     0,   4,   0, UNI_cwu_values_index }   /* cwu= */,
-  {     2,  9946,  8276,   3,   6, UNI_SUPPUAB }   /* issuppuab */,
-  {     0,  1622,     0,   9,   0, UNI_LATINEXTE }   /* latinexte */,
-  {     8,  8899,     1,   5,   1, -UNI_MATH }   /* math=n */,
-  {     4,  5565,  9641,  13,   3, UNI_JG__MIM }   /* joininggroup=mim */,
-  {     0,  5760,  8394,  13,   5, UNI_NV__80000 }   /* numericvalue=80000 */,
-  {     3,   184,  1530,   2,  14, UNI_BYZANTINEMUSIC }   /* isbyzantinemusic */,
-  {     2,  7025,  7507,   3,   4, UNI_IN__12 }   /* in=12.0 */,
-  {     1,  9093,  2043,   4,  21, UNI_CJKCOMPATFORMS }   /* blk=cjkcompatibilityforms */,
-  {     0,  9623,  5682,   3,  13, UNI_JG__MANICHAEANTAW }   /* jg=manichaeantaw */,
-  {     0,  6005,  3837,   3,  15, UNI_CYPRIOTSYLLABARY }   /* incypriotsyllabary */,
-  {     2,  8508,     0,   6,   0, UNI_grext_values_index }   /* grext= */,
-  {     1,  8424,  4267,   6,   5, UNI_INBAMUM }   /* block=bamum */,
-  {     0,  3254,  9433,  18,   4, UNI_RI }   /* regionalindicator=true */,
-  {     8,  9946,  2837,   3,   3, UNI_SUND }   /* issund */,
-  {     7,  1622,     0,   5,   0, UNI_LATN }   /* latin */,
-  {     4,  9909,  6268,   3,   7, UNI_PHAISTOS }   /* isphaistos */,
-  {     0,  7025,  9707,   3,   3, UNI_IN__6_DOT_1 }   /* in=v61 */,
-  {     1,  9629,  7138,   3,  10, UNI_LB__WJ }   /* lb=wordjoiner */,
-  {     5,  8586,     0,   7,   0, UNI_COMPEX }   /* nfcqc=n */,
-  {     0,  8424,  8699,   6,   5, UNI_INBATAK }   /* block=batak */,
-  {     2,  9593,     8,   3,   2, UNI_BC__AN }   /* bc=an */,
-  {     1,  9629,   202,   3,   2, UNI_LB__SA }   /* lb=sa */,
-  {     0,  5760,  7452,  13,   8, UNI_NV__1_SLASH_80 }   /* numericvalue=1.25e-02 */,
-  {     6,  4705,  2221,   3,   3, UNI_THAI }   /* isthai */,
-  {     0,  3671,  9117,  17,   4, UNI_CPRT }   /* scriptextensions=cprt */,
-  {     2,  2106,    34,  21,   6, UNI_GCB__EX }   /* graphemeclusterbreak=extend */,
-  {     1,  1713,     3,  22,   1, -UNI_CWCF }   /* changeswhencasefolded=f */,
-  {     2,  5760,  8370,  13,   6, UNI_NV__432000 }   /* numericvalue=432000 */,
-  {     1,  4618,  2335,   4,   8, UNI_INGLAGOLITIC }   /* inglagolitic */,
-  {     4,  1362,  8780,  25,   4, UNI_CCC__27 }   /* canonicalcombiningclass=ccc27 */,
-  {     7,  5760,  9017,  13,   4, UNI_NV__17_SLASH_2 }   /* numericvalue=17/2 */,
-  {     2,   184,  5003,   2,  14, UNI_LATINEXTB }   /* islatinextendedb */,
-  {     3,  9093,   509,   4,  20, UNI_CJK }   /* blk=cjkunifiedideographs */,
-  {     0,  9093,     0,   4,  42, UNI_UCASEXT }   /* blk=unifiedcanadianaboriginalsyllabicsextended */,
-  {     0,  8424,  8628,   6,   6, UNI_INTHAANA }   /* block=thaana */,
-  {     8,    42,     0,  36,   0, UNI_CJKCOMPATIDEOGRAPHSSUP }   /* cjkcompatibilityideographssupplement */,
-  {     8,   184,  6183,   2,  12, UNI_MEND }   /* ismendekikakui */,
-  {     4,  6005,  4388,   3,  14, UNI_CURRENCYSYMBOLS }   /* incurrencysymbols */,
-  {     0,  5435,    36,  13,   1, UNI_BIDIM }   /* bidimirrored=t */,
-  {     1,  1735,    26,  22,   1, UNI_CWCM }   /* changeswhencasemapped=y */,
-  {     1,  1497,   406,   9,   7, UNI_XPOSIXCNTRL }   /* category=control */,
-  {     1,  9093,  3020,   4,  10, UNI_INDEVANAGARI }   /* blk=devanagari */,
-  {     0,  6005,  2086,   3,  17, UNI_CYRILLICSUP }   /* incyrillicsupplement */,
-  {     8,  6828,  5811,  10,  12, UNI_BC__AL }   /* bidiclass=arabicletter */,
-  {    14,  9946,  4205,   3,   5, UNI_SYRC }   /* issyriac */,
-  {     0,  9365,  7239,   4,   9, UNI_QAAI }   /* scx=inherited */,
-  {     0,  8233,  9293,   7,   4, UNI_OGAM }   /* script=ogam */,
-  {     0,  1159,    11,   3,   2, UNI_NT__DI }   /* nt=di */,
-  {     1,  6005,   630,   3,  29, UNI_CJKEXTE }   /* incjkunifiedideographsextensione */,
-  {    10,  6005,  3631,   3,   3, UNI_INCHAM }   /* incham */,
-  {     3,  3671,  3110,  17,   4, UNI_GEOR }   /* scriptextensions=geor */,
-  {     3,  6558,     0,  11,   0, UNI_MEDF }   /* medefaidrin */,
-  {     1,  6828,  3569,  10,  17, UNI_BC__ES }   /* bidiclass=europeanseparator */,
-  {     0,  9605,  9665,   3,   3, UNI_DT__SML }   /* dt=sml */,
-  {     1,  9485,     0,   4,   0, UNI_QAAI }   /* zinh */,
-  {     0,  8634,     3,   6,   1, -UNI_UIDEO }   /* uideo=f */,
-  {     1,  8954,  9433,   5,   4, UNI_XIDC }   /* xidc=true */,
-  {     4,  1084,     1,  26,   1, -UNI_CWKCF }   /* changeswhennfkccasefolded=n */,
-  {     0,  9909,   468,   3,   4, UNI_P }   /* ispunct */,
-  {    16,  9365,  6988,   4,  10, UNI_SOGO }   /* scx=oldsogdian */,
-  {     0,  4580,  4109,   3,  15, UNI_MYANMAREXTA }   /* inmyanmarextendeda */,
-  {     0,  3671,  4582,  17,  15, UNI_MERC }   /* scriptextensions=meroiticcursive */,
-  {     1,   184,  5255,   2,  14, UNI_MN }   /* isnonspacingmark */,
-  {     1,  9093,  2646,   4,  19, UNI_JAMOEXTA }   /* blk=hanguljamoextendeda */,
-  {     6,  8886,  8135,   3,   7, UNI_SC__MAND }   /* sc=mandaic */,
-  {     4,  7018,  9677,  10,   3, UNI_IN__2_DOT_1 }   /* presentin=v21 */,
-  {    20,  9113,  8481,   4,   3, UNI_WB__EB }   /* ccc=133 */,
-  {    17,  3671,  9413,  17,   4, UNI_TAVT }   /* scriptextensions=tavt */,
-  {     0,  8586,     0,   6,   0, UNI_nfcqc_values_index }   /* nfcqc= */,
-  {     2,  8233,  8002,   7,   7, UNI_SC__BENG }   /* script=bengali */,
-  {     2,  8016,     0,   7,   0, UNI_CJKEXTB }   /* cjkextb */,
-  {     0,  9629,  4357,   3,  15, UNI_LB__CB }   /* lb=contingentbreak */,
-  {     0,   414,     0,  11,   0, UNI_IDEO }   /* ideographic */,
-  {    10,  8233,  8430,   7,   6, UNI_CARI }   /* script=carian */,
-  {    11,  9365,  8484,   4,   6, UNI_CAKM }   /* scx=chakma */,
-  {     1,  5760,  8664,  13,   4, UNI_NV__1_SLASH_16 }   /* numericvalue=1/16 */,
-  {     0,  9093,  8296,   4,   7, UNI_INTAIVIET }   /* blk=taiviet */,
-  {     2,  9193,     0,   4,   0, UNI_hst_values_index }   /* hst= */,
-  {     4,  9193,  6525,   4,   3, UNI_LB__H3 }   /* hst=lvt */,
-  {     1,  3688,   995,  17,   2, -UNI_STERM }   /* sentenceterminal=no */,
-  {     1,  9623,  6327,   3,  11, UNI_JG__AFRICANNOON }   /* jg=africannoon */,
-  {     2,  9647,  7558,   3,   2, UNI_NV__13 }   /* nv=13 */,
-  {     0,  9365,  1622,   4,   5, UNI_LATN }   /* scx=latin */,
-  {     0,  9901,  1812,   8,   5, UNI_XPOSIXUPPER }   /* isxposixupper */,
-  {     1,   184,  8024,   3,   6, UNI_CJKEXTC }   /* iscjkextc */,
-  {     0,  9647,  8358,   3,   2, UNI_NV__30 }   /* nv=30 */,
-  {     0,   184,  9269,   2,   4, UNI_MYMR }   /* ismymr */,
-  {     8,  8886,  8430,   3,   6, UNI_CARI }   /* sc=carian */,
-  {    26,  9647,  8400,   3,   6, UNI_NV__900000 }   /* nv=900000 */,
-  {     0,  8233,  9453,   7,   3, UNI_VAI }   /* script=vai */,
-  {     0,  9365,  8514,   4,   6, UNI_HATR }   /* scx=hatran */,
-  {     0,  8424,  5283,   6,  14, UNI_PHONETICEXTSUP }   /* block=phoneticextsup */,
-  {     8,  8886,  7311,   3,   9, UNI_TALU }   /* sc=newtailue */,
-  {     0,  9909,     6,   3,   1, UNI_PD }   /* ispd */,
-  {     4,  8886,  9469,   3,   4, UNI_XSUX }   /* sc=xsux */,
-  {     0,  9093,  4989,   4,   6, UNI_KANGXI }   /* blk=kangxi */,
-  {     3,  2779,     0,  12,   0, UNI_MONGOLIANSUP }   /* mongoliansup */,
-  {     8,  9093,  1030,   4,  27, UNI_OCR }   /* blk=opticalcharacterrecognition */,
-  {     1,  2106,  5943,  21,  12, UNI_WB__EB }   /* graphemeclusterbreak=glueafterzwj */,
-  {     0,  7025,  9689,   3,   3, UNI_IN__4 }   /* in=v40 */,
-  {     0,  6918,  4357,  10,  15, UNI_LB__CB }   /* linebreak=contingentbreak */,
-  {     1,  5760,  9014,  13,   3, UNI_NV__5_SLASH_2 }   /* numericvalue=5/2 */,
-  {     2,  9909,  1812,   7,   5, UNI_POSIXUPPER }   /* isposixupper */,
-  {     4,  8556,    26,   6,   1, UNI_XPOSIXLOWER }   /* lower=y */,
-  {     3,  9647,  7724,   3,   8, UNI_NV__4_SLASH_5 }   /* nv=8.00e-01 */,
-  {     0,  8424,  1955,   6,  22, UNI_MISCTECHNICAL }   /* block=miscellaneoustechnical */,
-  {     8,  2703,  9734,  19,   3, UNI_IDST }   /* idstrinaryoperator=yes */,
-  {     0,  8424,   719,   6,  30, UNI_ENCLOSEDALPHANUMSUP }   /* block=enclosedalphanumericsupplement */,
-  {     1,  8233,  9329,   7,   4, UNI_PRTI }   /* script=prti */,
-  {     0,  9909,  7009,   3,   9, UNI_PHNX }   /* isphoenician */,
-  {     0,  9113,  8835,   5,   4, UNI_CCC__91 }   /* ccc=ccc91 */,
-  {     2,  8424,  1506,   6,  24, UNI_SUPSYMBOLSANDPICTOGRAPHS }   /* block=supsymbolsandpictographs */,
-  {     2,  9620,  3852,   3,  16, UNI_PF }   /* gc=finalpunctuation */,
-  {     8,  8879,   838,   3,  10, UNI_PHONETICEXT }   /* inphoneticext */,
-  {     1,  3671,  9089,  17,   4, UNI_BHKS }   /* scriptextensions=bhks */,
-  {    18,  9605,  3852,   3,   3, UNI_DT__FIN }   /* dt=fin */,
-  {     1,  6003,     0,  12,   0, UNI_joinc_values_index }   /* joincontrol= */,
-  {     1,  8424,  1622,   6,  14, UNI_LATINEXTA }   /* block=latinextendeda */,
-  {     0,  5565,  4954,  13,   3, UNI_JG__HEH }   /* joininggroup=heh */,
-  {     0,  9093,  3200,   4,  18, UNI_ORNAMENTALDINGBATS }   /* blk=ornamentaldingbats */,
-  {     2,  8406,    36,   6,   1, UNI_XPOSIXALPHA }   /* alpha=t */,
-  {     2,  8424,  4108,   6,  16, UNI_MYANMAREXTA }   /* block=myanmarextendeda */,
-  {     1,  1735,  8864,  22,   5, -UNI_CWCM }   /* changeswhencasemapped=false */,
-  {     2,  8424,   570,   7,  29, UNI_CJKEXTC }   /* block=cjkunifiedideographsextensionc */,
-  {     1,  4361,  3886,   4,  14, UNI_GEORGIANEXT }   /* ingeorgianextended */,
-  {     4,  1757,  8864,  22,   5, -UNI_CWL }   /* changeswhenlowercased=false */,
-  {     5,  9365,  9277,   4,   4, UNI_NBAT }   /* scx=nbat */,
-  {     1,  9365,  8296,   4,   7, UNI_TAVT }   /* scx=taiviet */,
-  {     1,  1497,  3852,   9,  16, UNI_PF }   /* category=finalpunctuation */,
-  {     2,  6385,  2800,   4,  17, UNI_OTTOMANSIYAQNUMBERS }   /* inottomansiyaqnumbers */,
-  {     1,  9093,  1531,   5,  13, UNI_BYZANTINEMUSIC }   /* blk=byzantinemusic */,
-  {     3,  4108,     0,   7,   0, UNI_MYMR }   /* myanmar */,
-  {     0,  3868,  1187,  16,   2, UNI_SK }   /* generalcategory=sk */,
-  {    12,  8163,    26,   7,   1, UNI_NFKCQC__Y }   /* nfkcqc=y */,
-  {     0,  8844,  9433,   5,   4, UNI_CWCF }   /* cwcf=true */,
-  {     0,  9093,  5859,   4,  12, UNI_CHESSSYMBOLS }   /* blk=chesssymbols */,
-  {     0,  5565,  5181,  13,   4, UNI_JG__TETH }   /* joininggroup=teth */,
-  {    17,  2106,  1855,  21,   2, UNI_GCB__CN }   /* graphemeclusterbreak=cn */,
-  {    11,  8332,  9058,   3,   3, UNI_AHOM }   /* isahom */,
-  {     0,  7932,     3,   8,   1, -UNI_RADICAL }   /* radical=f */,
-  {     1,  8233,  7338,   7,   9, UNI_SC__PERM }   /* script=oldpermic */,
-  {     2,  8332,   833,   4,   4, UNI_ARROWS }   /* isarrows */,
-  {    10,  5500,     0,  13,   0, UNI_ME }   /* enclosingmark */,
-  {     0,  2106,   262,  21,   2, UNI_GCB__SM }   /* graphemeclusterbreak=sm */,
-  {     0,  8886,  9321,   3,   4, UNI_PHNX }   /* sc=phnx */,
-  {     0,  9620,  5255,   3,  14, UNI_MN }   /* gc=nonspacingmark */,
-  {     2,  8107,     0,   7,   0, UNI_KNDA }   /* kannada */,
-  {     1,  3868,    47,  16,   1, UNI_M }   /* generalcategory=m */,
-  {    12,  9620,  4140,   3,   5, UNI_C }   /* gc=other */,
-  {     2,  8424,  3326,   6,  18, UNI_TAIXUANJING }   /* block=taixuanjingsymbols */,
-  {     3,  6338,    36,  11,   1, UNI_XPOSIXALPHA }   /* alphabetic=t */,
-  {     2,  1497,  3146,   9,  18, UNI_PI }   /* category=initialpunctuation */,
-  {     1,  8884,  5395,   5,  14, UNI_INSC__VOWELDEPENDENT }   /* insc=voweldependent */,
-  {     0,  9629,   533,   3,   2, UNI_LB__NS }   /* lb=ns */,
-  {     5,  7018,  7508,  10,   3, UNI_IN__2 }   /* presentin=2.0 */,
-  {     1,  8424,  2006,   6,   4, UNI_INMODI }   /* block=modi */,
-  {     0,  9365,  9305,   4,   4, UNI_ORYA }   /* scx=orya */,
-  {    16,  6918,  5952,  10,   2, UNI_LB__ZW }   /* linebreak=zw */,
-  {     8,  3671,  7956,  17,   8, UNI_TAGB }   /* scriptextensions=tagbanwa */,
-  {     3,  9113,  5539,   4,  13, UNI_CCC__IS }   /* ccc=iotasubscript */,
-  {     2,  5760,  5410,  13,   1, UNI_NV__0 }   /* numericvalue=0 */,
-  {     0,  9113,  6818,   4,  10, UNI_CCC__BR }   /* ccc=belowright */,
-  {     8,  9481,     0,   4,   0, UNI_ZANB }   /* zanb */,
-  {    23,  8233,  9413,   7,   4, UNI_TAVT }   /* script=tavt */,
-  {    23,  8886,  4672,   3,  15, UNI_SARB }   /* sc=oldsoutharabian */,
-  {     0,  2204,  4688,   3,  14, UNI_PS }   /* isopenpunctuation */,
-  {     0,  1159,     0,   3,   0, UNI_nt_values_index }   /* nt= */,
-  {    16,  8233,  7980,   7,   4, UNI_UGAR }   /* script=ugar */,
-  {     0,  9093,  9233,   4,   4, UNI_LISU }   /* blk=lisu */,
-  {    12,  9946,  8269,   3,   6, UNI_SUPPUAA }   /* issuppuaa */,
-  {     2,   184,  3688,   2,  16, UNI_STERM }   /* issentenceterminal */,
-  {     1,  8424,  7812,   6,   8, UNI_INDUPLOYAN }   /* block=duployan */,
-  {     0,   184,  2931,   3,   7, UNI_CHER }   /* ischerokee */,
-  {     0,  3951,  1852,   3,  15, UNI_INDICNUMBERFORMS }   /* isindicnumberforms */,
-  {     0,  1084,  9433,  26,   4, UNI_CWKCF }   /* changeswhennfkccasefolded=true */,
-  {     1,  7018,     0,  10,   0, UNI_in_values_index }   /* presentin= */,
-  {     8,  6828,  2413,  10,  20, UNI_BC__PDF }   /* bidiclass=popdirectionalformat */,
-  {     0,  3671,  6724,  18,  10, UNI_SYLO }   /* scriptextensions=sylotinagri */,
-  {     1,   878,     0,  10,   0, UNI_CO }   /* privateuse */,
-  {     7,  8616,    26,   6,   1, UNI_STERM }   /* sterm=y */,
-  {     2,  9153,  9773,   4,   2, UNI_GCB__XX }   /* gcb=xx */,
-  {    13,  1497,  2273,   9,  20, UNI_PC }   /* category=connectorpunctuation */,
-  {     2,  9113,  6481,   4,  11, UNI_CCC__8 }   /* ccc=kanavoicing */,
-  {     0,   184,  1532,   2,   1, UNI_Z }   /* isz */,
-  {     0,  9113,  3433,   4,  13, UNI_CCC__202 }   /* ccc=attachedbelow */,
-  {     1,  1801,     0,  21,   0, UNI_CWU }   /* changeswhenuppercased */,
-  {     9,  8886,  8149,   3,   7, UNI_SC__MULT }   /* sc=multani */,
-  {     3,  3671,  7302,  17,   9, UNI_NBAT }   /* scriptextensions=nabataean */,
-  {     0,    34,     0,   3,   0, UNI_EXT }   /* ext */,
-  {     2,  8424,  4821,   6,   5, UNI_ASCII }   /* block=ascii */,
-  {     1,  8685,  9734,   4,   3, UNI_XPOSIXXDIGIT }   /* hex=yes */,
-  {     5,  9365,  3772,   4,   4, UNI_BOPO }   /* scx=bopo */,
-  {     0,  1767,     0,   2,   0, UNI_NL }   /* nl */,
-  {     1,  9365,  9257,   4,   4, UNI_MLYM }   /* scx=mlym */,
-  {     1,  9620,   106,   3,   6, UNI_S }   /* gc=symbol */,
-  {     3,  3002,  9668,  18,   3, UNI_DT__SQR }   /* decompositiontype=sqr */,
-  {    16,  2703,     1,  19,   1, -UNI_IDST }   /* idstrinaryoperator=n */,
-  {     3,  1362,  8755,  25,   4, UNI_CCC__22 }   /* canonicalcombiningclass=ccc22 */,
-  {     0,  9113,  9533,   4,   3, UNI_CCC__A }   /* ccc=230 */,
-  {     2,  6816,  6809,   3,   9, UNI_ASCII }   /* inbasiclatin */,
-  {     1,  7025,  7159,   3,   3, UNI_IN__5 }   /* in=5.0 */,
-  {     2,  9049,  7502,   4,   1, UNI_AGE__8 }   /* age=8 */,
-  {     2,  9647,  9009,   3,   4, UNI_NV__13_SLASH_2 }   /* nv=13/2 */,
-  {    11,  9620,  2273,   3,  20, UNI_PC }   /* gc=connectorpunctuation */,
-  {     9,  8886,  2211,   3,   7, UNI_SC__SINH }   /* sc=sinhala */,
-  {     2,    78,     0,  35,   0, UNI_ARABICMATH }   /* arabicmathematicalalphabeticsymbols */,
-  {     3,  2493,  3362,  20,  18, UNI_VO__TR }   /* verticalorientation=transformedrotated */,
-  {     1,  3868,  1036,  16,   2, UNI_CASEDLETTER }   /* generalcategory=lc */,
-  {     0,  2493,   471,  20,   2, UNI_VO__TU }   /* verticalorientation=tu */,
-  {     0,  8160,   721,   4,  28, UNI_ENCLOSEDALPHANUMSUP }   /* inenclosedalphanumericsupplement */,
-  {     7,  7025,  7463,   3,   1, UNI_IN__3 }   /* in=3 */,
-  {     0,  1239,   995,  25,   2, -UNI_COMPEX }   /* fullcompositionexclusion=no */,
-  {     1,  9161,     0,   4,   0, UNI_GONM }   /* gonm */,
-  {     9,  8844,    26,   5,   1, UNI_CWCF }   /* cwcf=y */,
-  {     8,  9365,  8944,   4,   4, UNI_TAKR }   /* scx=takr */,
-  {    10,  3243,     1,  11,   1, -UNI_XPOSIXSPACE }   /* whitespace=n */,
-  {     5,  6918,   340,  10,   2, UNI_LB__OP }   /* linebreak=op */,
-  {     0,  6567,  1959,   6,  18, UNI_MISCTECHNICAL }   /* inmiscellaneoustechnical */,
-  {    10,  2169,     0,  14,   0, UNI_MEETEIMAYEKEXT }   /* meeteimayekext */,
-  {     0,   184,  6492,   2,  11, UNI_KATAKANAEXT }   /* iskatakanaext */,
-  {     6,   976,     0,  27,   0, UNI_ANCIENTGREEKMUSIC }   /* ancientgreekmusicalnotation */,
-  {    42,  1362,  7539,  24,   2, UNI_CCC__22 }   /* canonicalcombiningclass=22 */,
-  {     0,  6624,     0,  11,   0, UNI_NO }   /* othernumber */,
-  {     0,  3868,  3227,  16,   9, UNI_Z }   /* generalcategory=separator */,
-  {     0,  3200,     0,  18,   0, UNI_ORNAMENTALDINGBATS }   /* ornamentaldingbats */,
-  {     5,   184,  7118,   2,   4, UNI_WARA }   /* iswara */,
-  {     0,  9093,  6267,   4,  12, UNI_PHAISTOS }   /* blk=phaistosdisc */,
-  {     3,  8886,  9253,   3,   4, UNI_MIAO }   /* sc=miao */,
-  {     1,  1933,  9433,  22,   4, UNI_LOE }   /* logicalorderexception=true */,
-  {     0,  9313,     0,   3,   0, UNI_PCM }   /* pcm */,
-  {     0,  1243,     1,  21,   1, -UNI_CE }   /* compositionexclusion=n */,
-  {     2,  9093,  4807,   4,  14, UNI_ANCIENTSYMBOLS }   /* blk=ancientsymbols */,
-  {     1,  9365,  7049,   5,   3, UNI_SAUR }   /* scx=saur */,
-  {     4,  1362,  8449,  25,   5, UNI_CCC__118 }   /* canonicalcombiningclass=ccc118 */,
-  {     1,  9623,  6788,   3,  10, UNI_JG__AFRICANQAF }   /* jg=africanqaf */,
-  {     2,   184,  5578,   2,  13, UNI_KANAEXTA }   /* iskanaextendeda */,
-  {     0,  3671,  9225,  17,   4, UNI_LINA }   /* scriptextensions=lina */,
-  {     1,  8886,  2984,   3,   4, UNI_SC__COPT }   /* sc=copt */,
-  {     0,  8233,  7812,   7,   8, UNI_SC__DUPL }   /* script=duployan */,
-  {     0,  8051,    36,   7,   1, UNI_COMPEX }   /* compex=t */,
-  {     3,  8886,  9117,   3,   4, UNI_SC__CPRT }   /* sc=cprt */,
-  {     0,  1779,  9734,  22,   3, UNI_CWT }   /* changeswhentitlecased=yes */,
-  {    24,  3326,     0,  18,   0, UNI_TAIXUANJING }   /* taixuanjingsymbols */,
-  {     9,  9946,  8262,   3,   3, UNI_SOYO }   /* issoyo */,
-  {     9,  9647,  7571,   3,   2, UNI_NV__33 }   /* nv=33 */,
-  {     0,  8233,  2393,   7,  20, UNI_HMNP }   /* script=nyiakengpuachuehmong */,
-  {     2,  8424,  8121,   6,   7, UNI_INLINEARA }   /* block=lineara */,
-  {     0,  2493,  3248,   4,   5, UNI_VERTSPACE }   /* vertspace */,
-  {    10,  6015,     6,  12,   1, UNI_JT__D }   /* joiningtype=d */,
-  {     5,  9608,  4290,   3,   7, UNI_EA__N }   /* ea=neutral */,
-  {     1,  9623,  9656,   3,   3, UNI_JG__REH }   /* jg=reh */,
-  {     8,  8424,  2779,   6,   9, UNI_INMONGOLIAN }   /* block=mongolian */,
-  {     1,  9662,     3,   3,   1, -UNI_SD }   /* sd=f */,
-  {     1,  3002,  7868,  18,   8, UNI_DT__ISO }   /* decompositiontype=isolated */,
-  {     0,   184,  8031,   3,   6, UNI_CJKEXTD }   /* iscjkextd */,
-  {     6,  9647,  7636,   3,   8, UNI_NV__1_SLASH_20 }   /* nv=5.00e-02 */,
-  {     2,  1497,  5500,   9,  13, UNI_ME }   /* category=enclosingmark */,
-  {     1,  8960,     3,   4,   1, -UNI_IDS }   /* ids=f */,
-  {     1,  8233,  9045,   7,   4, UNI_SC__ADLM }   /* script=adlm */,
-  {     1,  9365,  8248,   5,   6, UNI_SHAW }   /* scx=shavian */,
-  {     0,  6371,     1,  11,   1, -UNI_DEP }   /* deprecated=n */,
-  {    10,  9093,  8939,   4,   5, UNI_INTAILE }   /* blk=taile */,
-  {     0,   184,  9273,   2,   4, UNI_NARB }   /* isnarb */,
-  {     2,  8849,     3,   5,   1, -UNI_CWCM }   /* cwcm=f */,
-  {     1,  2684,  6938,  19,  10, UNI_LB__H2 }   /* hangulsyllabletype=lvsyllable */,
-  {     0,  8604,  9734,   6,   3, UNI_QMARK }   /* qmark=yes */,
-  {     1,  9728,    26,   3,   1, UNI_VS }   /* vs=y */,
-  {     3,  8233,  1573,   7,   4, UNI_SC__PHAG }   /* script=phag */,
-  {     5,  5760,  9009,  13,   4, UNI_NV__13_SLASH_2 }   /* numericvalue=13/2 */,
-  {     4,  3164,     0,  18,   0, UNI_LATINEXTADDITIONAL }   /* latinextadditional */,
-  {     0,  8086,    26,   7,   1, UNI_GRBASE }   /* grbase=y */,
-  {     9,  5760,  7659,  13,   2, UNI_NV__16 }   /* numericvalue=16 */,
-  {     2,  8424,  8296,   6,   7, UNI_INTAIVIET }   /* block=taiviet */,
-  {     0,  5604,     0,  13,   0, UNI_LOWSURROGATES }   /* lowsurrogates */,
-  {     1,  6918,  7138,  10,  10, UNI_LB__WJ }   /* linebreak=wordjoiner */,
-  {     8,  2148,  7941,   3,   7, UNI_SPECIALS }   /* inspecials */,
-  {     1,  6828,    18,  10,   1, UNI_BC__R }   /* bidiclass=r */,
-  {     1,  3671,  6159,  17,  12, UNI_GONM }   /* scriptextensions=masaramgondi */,
-  {     1,  9365,  8310,   4,   7, UNI_TIRH }   /* scx=tirhuta */,
-  {     0,  9923,  8305,   4,   5, UNI_INTIBETAN }   /* intibetan */,
-  {     9,  1362,  8455,  25,   5, UNI_CCC__122 }   /* canonicalcombiningclass=ccc122 */,
-  {     0,  9909,  8220,   3,   5, UNI_PATSYN }   /* ispatsyn */,
-  {     8,  8886,  8894,   3,   4, UNI_SC__LIMB }   /* sc=limb */,
-  {     0,  8556,     0,   6,   0, UNI_lower_values_index }   /* lower= */,
-  {     3,  6949,   533,   4,   2, UNI_CANS }   /* iscans */,
-  {     0,  3671,  1482,  18,   3, UNI_SIND }   /* scriptextensions=sind */,
-  {     0,  5760,  9590,  13,   3, UNI_NV__9_SLASH_2 }   /* numericvalue=9/2 */,
-  {     0,  5227,     0,  16,   0, UNI_DT__CAN }   /* nfdquickcheck=no */,
-  {     1,  8886,  9421,   3,   4, UNI_SC__TGLG }   /* sc=tglg */,
-  {     0,  9093,  2085,   4,  11, UNI_CYRILLICSUP }   /* blk=cyrillicsup */,
-  {     2,  9365,  8121,   4,   7, UNI_LINA }   /* scx=lineara */,
-  {     0,  9097,     1,   4,   1, UNI_BPT__N }   /* bpt=n */,
-  {     0,  1911,  3484,  22,  17, UNI_INSC__CONSONANTPREFIXED }   /* indicsyllabiccategory=consonantprefixed */,
-  {     0,  6051,     0,  12,   0, UNI_MAHJONG }   /* mahjongtiles */,
-  {     0,  9093,  8275,   4,   7, UNI_SUPPUAB }   /* blk=suppuab */,
-  {     1,  1497,     0,  10,   0, UNI_S }   /* category=s */,
-  {     3,  6885,  9190,   3,   3, UNI_HMNP }   /* ishmnp */,
-  {     0,  8233,  3620,   7,  10, UNI_SC__MANI }   /* script=manichaean */,
-  {     0,  5760,  8394,  13,   2, UNI_NV__80 }   /* numericvalue=80 */,
-  {     6,  8268,     0,   7,   0, UNI_SUPPUAA }   /* suppuaa */,
-  {     2,  8886,  6602,   3,  11, UNI_SC__NAND }   /* sc=nandinagari */,
-  {     0,  9093,  3773,   5,  10, UNI_BOPOMOFOEXT }   /* blk=bopomofoext */,
-  {     2,  8886,  3620,   3,   4, UNI_SC__MANI }   /* sc=mani */,
-  {     1,  8332,  9046,   3,   3, UNI_ADLM }   /* isadlm */,
-  {     9,    21,  4975,   2,   7, UNI_KANASUP }   /* inkanasup */,
-  {     0,  8886,  8919,   3,   5, UNI_OGAM }   /* sc=ogham */,
-  {     0,  1158,  8228,   3,   3, UNI_TAGS }   /* intags */,
-  {     0,  9953,  9454,   3,   3, UNI_VAI }   /* isvaii */,
-  {     0,  6005,  4379,   9,   8, UNI_CONTROLPICTURES }   /* incontrolpictures */,
-  {     4,  4204,     0,  16,   0, UNI_SYRIACSUP }   /* syriacsupplement */,
-  {     0,  7108,  8864,  10,   5, -UNI_XPOSIXUPPER }   /* uppercase=false */,
-  {     9,  8556,    36,   6,   1, UNI_XPOSIXLOWER }   /* lower=t */,
-  {     1,   184,  4402,   2,  15, UNI_PD }   /* isdashpunctuation */,
-  {     1,  9113,  8212,   4,   7, UNI_CCC__1 }   /* ccc=overlay */,
-  {     0,  1362,  8443,  25,   5, UNI_CCC__107 }   /* canonicalcombiningclass=ccc107 */,
-  {     0,  2127,     0,  14,   0, UNI_ROHG }   /* hanifirohingya */,
-  {     7,  6005,  3536,   3,  16, UNI_CYRILLICEXTC }   /* incyrillicextendedc */,
-  {     4,  5760,  8388,  13,   6, UNI_NV__700000 }   /* numericvalue=700000 */,
-  {     1,  9629,  1767,   3,   2, UNI_LB__NL }   /* lb=nl */,
-  {     0,    21,  2514,   3,  18, UNI_ANCIENTGREEKNUMBERS }   /* inancientgreeknumbers */,
-  {     4,  9113,  8760,   5,   4, UNI_CCC__23 }   /* ccc=ccc23 */,
-  {     1,  9731,  8156,   3,   7, UNI_WB__NL }   /* wb=newline */,
-  {     2,  3671,  8255,  18,   3, UNI_SIDD }   /* scriptextensions=sidd */,
-  {     0,  5339,  4140,  14,   5, UNI_SB__XX }   /* sentencebreak=other */,
-  {     0,  5760,  7159,  13,   1, UNI_NV__5 }   /* numericvalue=5 */,
-  {     0,   184,  3038,   2,   8, UNI_ETHI }   /* isethiopic */,
-  {     2,  8338,     3,   7,   1, -UNI_XPOSIXSPACE }   /* wspace=f */,
-  {     1,  1362,  2379,  24,   5, UNI_CCC__R }   /* canonicalcombiningclass=right */,
-  {     0,  7266,     0,   9,   0, UNI_LATINEXTC }   /* latinextc */,
-  {     2,  9153,    70,   4,   2, UNI_GCB__PP }   /* gcb=pp */,
-  {     0,  9629,   125,   3,   2, UNI_LB__CR }   /* lb=cr */,
-  {     0,  9365,  8135,   4,   7, UNI_MAND }   /* scx=mandaic */,
-  {     0,  9647,  7540,   3,   3, UNI_NV__200 }   /* nv=200 */,
-  {     8,  3688,     3,  17,   1, -UNI_STERM }   /* sentenceterminal=f */,
-  {     7,   184,  2836,   2,  19, UNI_SUNDANESESUP }   /* issundanesesupplement */,
-  {     0,  9725,  3373,   3,   7, UNI_VO__R }   /* vo=rotated */,
-  {     8,  8233,  6978,   7,  10, UNI_XPEO }   /* script=oldpersian */,
-  {     1,  6888,     1,  10,   1, -UNI_DIA }   /* diacritic=n */,
-  {     0,  3398,  9433,  18,   4, UNI_VS }   /* variationselector=true */,
-  {     1,  6828,  2373,  10,  11, UNI_BC__L }   /* bidiclass=lefttoright */,
-  {    10,  7018,  9445,  10,   4, UNI_IN__12 }   /* presentin=v120 */,
-  {     0,  5565,  6327,  13,  11, UNI_JG__AFRICANNOON }   /* joininggroup=africannoon */,
-  {     0,  2148,  1265,   3,  24, UNI_SUPERANDSUB }   /* insuperscriptsandsubscripts */,
-  {     9,  3671,  4297,  17,   4, UNI_BRAI }   /* scriptextensions=brai */,
-  {     5,  3868,  1472,  16,   9, UNI__PERL_SURROGATE }   /* generalcategory=surrogate */,
-  {     4,  8684,    26,   5,   1, UNI_POSIXXDIGIT }   /* ahex=y */,
-  {     0,  8233,  2212,   8,   6, UNI_SC__SINH }   /* script=sinhala */,
-  {     1,  8338,  9433,   7,   4, UNI_XPOSIXSPACE }   /* wspace=true */,
-  {     0,   184,  2836,   2,  12, UNI_SUNDANESESUP }   /* issundanesesup */,
-  {    18,  9593,  5823,   3,  12, UNI_BC__AN }   /* bc=arabicnumber */,
-  {     0,  9093,  9285,   4,   3, UNI_INNKO }   /* blk=nko */,
-  {     1,  9093,   949,   4,  27, UNI_ALPHABETICPF }   /* blk=alphabeticpresentationforms */,
-  {     1,  9647,  9010,   3,   3, UNI_NV__3_SLASH_2 }   /* nv=3/2 */,
-  {     1,  3836,     0,  16,   0, UNI_CYPRIOTSYLLABARY }   /* cypriotsyllabary */,
-  {     0,  8233,  9109,   7,   4, UNI_CANS }   /* script=cans */,
-  {     6,  3671,  8562,  17,   6, UNI_LYCI }   /* scriptextensions=lycian */,
-  {     8,  9113,  8443,   5,   5, UNI_CCC__107 }   /* ccc=ccc107 */,
-  {     3,  8886,  7341,   3,   4, UNI_SC__PERM }   /* sc=perm */,
-  {     6,  8879,  3344,   5,  10, UNI_INPC__TOPANDLEFT }   /* inpc=topandleft */,
-  {     0,  8886,  8894,   3,   5, UNI_SC__LIMB }   /* sc=limbu */,
-  {     2,  1497,    44,  10,   1, UNI_SK }   /* category=sk */,
-  {     1,  9049,  9437,   4,   4, UNI_AGE__10 }   /* age=v100 */,
-  {     3,  8886,  4297,   3,   7, UNI_BRAI }   /* sc=braille */,
-  {     3,  5565,  6063,  13,  12, UNI_JG__MALAYALAMBHA }   /* joininggroup=malayalambha */,
-  {     0,  9365,  8939,   4,   5, UNI_TALE }   /* scx=taile */,
-  {     1,  3110,     0,  11,   0, UNI_GEORGIANSUP }   /* georgiansup */,
-  {     0,   184,  5031,   2,  14, UNI_LATINEXTD }   /* islatinextendedd */,
-  {     1,  1264,     0,  25,   0, UNI_SUPERANDSUB }   /* superscriptsandsubscripts */,
-  {     2,  3671,  8072,  17,   7, UNI_ELYM }   /* scriptextensions=elymaic */,
-  {     5,  9623,  9596,   3,   3, UNI_JG__BEH }   /* jg=beh */,
-  {     2,  7088,     0,  10,   0, UNI_SUPARROWSC }   /* suparrowsc */,
-  {     8,  7025,  7487,   3,   1, UNI_IN__6 }   /* in=6 */,
-  {     9,  6918,    18,  10,   2, UNI_RI }   /* linebreak=ri */,
-  {     2,  7025,  9441,   3,   4, UNI_IN__11 }   /* in=v110 */,
-  {     1,   184,  8121,   2,   7, UNI_LINA }   /* islineara */,
-  {     2,  9647,  8394,   3,   4, UNI_NV__8000 }   /* nv=8000 */,
-  {     3,  8424,  6602,   6,  11, UNI_INNANDINAGARI }   /* block=nandinagari */,
-  {     5,  6005,   570,   3,  29, UNI_CJKEXTC }   /* incjkunifiedideographsextensionc */,
-  {     3,  5565,  9061,  13,   4, UNI_JG__ALEF }   /* joininggroup=alef */,
-  {     3,  6816,  1189,   3,   4, UNI_INBATAK }   /* inbatak */,
-  {     0,  5565,  4522,  13,  15, UNI_JG__MANICHAEANALEPH }   /* joininggroup=manichaeanaleph */,
-  {     0,  9129,     1,   4,   1, -UNI_CWU }   /* cwu=n */,
-  {     4,  9365,  9453,   4,   3, UNI_VAI }   /* scx=vai */,
-  {     0,  3868,   878,  16,  10, UNI_CO }   /* generalcategory=privateuse */,
-  {     2,   184,  6591,   2,  11, UNI_MYANMAREXTB }   /* ismyanmarextb */,
-  {     2,   184,  5353,   2,  14, UNI_ZS }   /* isspaceseparator */,
-  {    13,  8424,  2741,   6,  19, UNI_MERO }   /* block=meroitichieroglyphs */,
-  {     0,  2006,     0,  15,   0, UNI_MODIFIERLETTERS }   /* modifierletters */,
-  {     0,  1362,  8782,  24,   2, UNI_CCC__27 }   /* canonicalcombiningclass=27 */,
-  {     1,  9117,     0,   4,   0, UNI_CPRT }   /* cprt */,
-  {     2,   184,  6712,   2,  11, UNI_SUPERANDSUB }   /* issuperandsub */,
-  {     1,  8219,   995,   7,   2, -UNI_PATSYN }   /* patsyn=no */,
-  {    11,   184,  3722,   2,  17, UNI_SUTTONSIGNWRITING }   /* issuttonsignwriting */,
-  {     5,  9193,    36,   4,   1, UNI_GCB__T }   /* hst=t */,
-  {     0,    21,  9217,   2,   3, UNI_INLAO }   /* inlao */,
-  {    10,  9647,  7159,   3,   1, UNI_NV__5 }   /* nv=5 */,
-  {     2,  9093,  3038,   4,  11, UNI_ETHIOPICSUP }   /* blk=ethiopicsup */,
-  {     0,  9593,  4156,   3,  16, UNI_BC__S }   /* bc=segmentseparator */,
-  {     1,  7025,  9680,   3,   3, UNI_IN__3 }   /* in=v30 */,
-  {     1,  3671,  9221,  17,   4, UNI_LATN }   /* scriptextensions=latn */,
-  {     0,  6315,     0,   4,   0, UNI_XIDC }   /* xidc */,
-  {     0,  6005,  2931,   3,   7, UNI_INCHEROKEE }   /* incherokee */,
-  {     1,  6918,   414,  10,  11, UNI_LB__ID }   /* linebreak=ideographic */,
-  {     8,  8871,   495,   3,   7, UNI_SB__NU }   /* sb=numeric */,
-  {     1,  9647,  8722,   3,   2, UNI_NV__15 }   /* nv=15 */,
-  {     2,  4220,     0,  16,   0, UNI_TANGUTCOMPONENTS }   /* tangutcomponents */,
-  {     8,  8418,  9734,   6,   3, UNI_BIDIM }   /* bidim=yes */,
-  {     3,  5760,  8973,  13,   4, UNI_NV__1_SLASH_10 }   /* numericvalue=1/10 */,
-  {     3,  5979,     1,  12,   1, -UNI_IDEO }   /* ideographic=n */,
-  {    16,  8424,  1846,   7,  21, UNI_INDICNUMBERFORMS }   /* block=commonindicnumberforms */,
-  {     0,  9365,  9321,   4,   4, UNI_PHNX }   /* scx=phnx */,
-  {     0,  8869,   995,   5,   2, -UNI_IDSB }   /* idsb=no */,
-  {     3,    21,  3996,   2,  16, UNI_LINEARBSYLLABARY }   /* inlinearbsyllabary */,
-  {     8,  9093,  2836,   4,  19, UNI_SUNDANESESUP }   /* blk=sundanesesupplement */,
-  {     0,  6918,  8100,  10,   2, UNI_LB__HY }   /* linebreak=hy */,
-  {     0,  8510,     1,   4,   1, -UNI_EXT }   /* ext=n */,
-  {     1,  8685,  9433,   4,   4, UNI_XPOSIXXDIGIT }   /* hex=true */,
-  {     1,  9365,  7332,   4,   4, UNI_ITAL }   /* scx=ital */,
-  {     0,   184,  2741,   2,  19, UNI_MERO }   /* ismeroitichieroglyphs */,
-  {     5,  9647,  7159,   3,   8, UNI_NV__1_SLASH_2 }   /* nv=5.00e-01 */,
-  {     1,  3951,     6,   3,   2, UNI_IDC }   /* isidc */,
-  {     0,  5760,  8358,  13,   2, UNI_NV__30 }   /* numericvalue=30 */,
-  {     0,   184,  4297,   2,  15, UNI_BRAI }   /* isbraillepatterns */,
-  {     8,  9093,  6712,   4,  11, UNI_SUPERANDSUB }   /* blk=superandsub */,
-  {     3,  9593,    23,   3,   2, UNI_BC__AL }   /* bc=al */,
-  {     6,  7128,  7825,  10,   3, UNI_WB__EB }   /* wordbreak=gaz */,
-  {     1,  9623,  5643,   3,  13, UNI_JG__MANICHAEANMEM }   /* jg=manichaeanmem */,
-  {     0,  1911,  7972,  22,   8, UNI_INSC__TONEMARK }   /* indicsyllabiccategory=tonemark */,
-  {     0,  3671,  9105,  17,   4, UNI_CAKM }   /* scriptextensions=cakm */,
-  {     0,  9728,    36,   3,   1, UNI_VS }   /* vs=t */,
-  {     1,  3671,  9417,  17,   4, UNI_TFNG }   /* scriptextensions=tfng */,
-  {     3,  6928,     0,  10,   0, UNI_lower_values_index }   /* lowercase= */,
-  {    18,  9623,  5695,   3,  13, UNI_JG__MANICHAEANTEN }   /* jg=manichaeanten */,
-  {     2,  6005,  8485,   3,   5, UNI_INCHAKMA }   /* inchakma */,
-  {     0,  4705,  4718,   3,  14, UNI_TAMILSUP }   /* istamilsupplement */,
-  {     1,  5760,  8722,  13,   2, UNI_NV__15 }   /* numericvalue=15 */,
-  {     0,  8954,     1,   5,   1, -UNI_XIDC }   /* xidc=n */,
-  {     0,  6338,  8864,  11,   5, -UNI_XPOSIXALPHA }   /* alphabetic=false */,
-  {     2,  9097,     7,   4,   1, UNI_BPT__C }   /* bpt=c */,
-  {     3,  4361,  1578,   4,  13, UNI_GEOMETRICSHAPES }   /* ingeometricshapes */,
-  {     0,  5760,  9013,  13,   4, UNI_NV__15_SLASH_2 }   /* numericvalue=15/2 */,
-  {     3,  6885,  2128,   3,  13, UNI_ROHG }   /* ishanifirohingya */,
-  {     0,  1497,  4829,   9,   5, UNI_XPOSIXDIGIT }   /* category=digit */,
-  {     7,  1713,  9734,  22,   3, UNI_CWCF }   /* changeswhencasefolded=yes */,
-  {     2,  9620,  1014,   3,   6, UNI_L }   /* gc=letter */,
-  {     0,  4732,     0,  15,   0, UNI_TITLE }   /* titlecaseletter */,
-  {     2,  3671,  9457,  17,   4, UNI_WCHO }   /* scriptextensions=wcho */,
-  {     0,  9365,  7852,   4,   8, UNI_GURU }   /* scx=gurmukhi */,
-  {     9,  4849,    26,  14,   1, UNI_CI }   /* caseignorable=y */,
-  {     6,  9049,  9578,   4,   3, UNI_AGE__6_DOT_3 }   /* age=6.3 */,
-  {    15,  9365,  6724,   5,   3, UNI_SYLO }   /* scx=sylo */,
-  {     1,  9620,   878,   3,  10, UNI_CO }   /* gc=privateuse */,
-  {     2,  9769,     0,   2,   0, UNI_CASEDLETTER }   /* l_ */,
-  {     0,  2067,     0,   7,   0, UNI_RADICAL }   /* radical */,
-  {     5,  1497,    48,   9,   1, UNI_P }   /* category=p */,
-  {     0,    21,  5045,   2,  14, UNI_LATINEXTE }   /* inlatinextendede */,
-  {     2,  2836,     0,   4,   0, UNI_SUND }   /* sund */,
-  {     1,  8424,   878,   6,  14, UNI_PUA }   /* block=privateusearea */,
-  {     0,  2106,  5952,  21,   3, UNI_LB__ZWJ }   /* graphemeclusterbreak=zwj */,
-  {     4,  5085,  6173,   4,  10, UNI_MATHALPHANUM }   /* inmathalphanum */,
-  {    64,  9093,  8919,   4,   5, UNI_INOGHAM }   /* blk=ogham */,
-  {     2,  2148,  4205,   3,   8, UNI_SYRIACSUP }   /* insyriacsup */,
-  {     0,  9620,   133,   3,   4, UNI_M }   /* gc=mark */,
-  {     4,  9953,  3248,   6,   5, UNI_VERTSPACE }   /* isvertspace */,
-  {     1,  9647,  8358,   3,   4, UNI_NV__3000 }   /* nv=3000 */,
-  {     2,  8520,    26,   6,   1, UNI_JOINC }   /* joinc=y */,
-  {     1,  9093,  6767,   4,  11, UNI_YISYLLABLES }   /* blk=yisyllables */,
-  {     0,  9093,   921,   4,  28, UNI_VSSUP }   /* blk=variationselectorssupplement */,
-  {     3,  9093,   599,   4,  30, UNI_CJKEXTD }   /* blk=cjkunifiedideographsextensiond */,
-  {     2,  9365,  8859,   4,   4, UNI_DOGR }   /* scx=dogr */,
-  {     0,  6918,  7212,  10,   9, UNI_LB__B2 }   /* linebreak=breakboth */,
-  {     6,  9093,  5799,   4,  12, UNI_ALPHABETICPF }   /* blk=alphabeticpf */,
-  {     0,   893,     0,  28,   0, UNI_SUPPUAB }   /* supplementaryprivateuseareab */,
-  {    20,  3671,  7892,  17,   8, UNI_JAVA }   /* scriptextensions=javanese */,
-  {     1,   117,  4493,   3,  14, UNI_INIMPERIALARAMAIC }   /* inimperialaramaic */,
-  {     8,  9605,  2709,   3,   3, UNI_DT__NAR }   /* dt=nar */,
-  {    14,  9093,  8622,   4,   6, UNI_INTELUGU }   /* blk=telugu */,
-  {     0,  9093,  2608,   4,  19, UNI_INEGYPTIANHIEROGLYPHS }   /* blk=egyptianhieroglyphs */,
-  {     0,  9049,  9695,   4,   3, UNI_AGE__5 }   /* age=v50 */,
-  {    19,  1911,  4236,  22,   5, UNI_INSC__VOWEL }   /* indicsyllabiccategory=vowel */,
-  {     0,  9365,  8255,   5,   6, UNI_SIDD }   /* scx=siddham */,
-  {     3,  9093,    78,   4,   6, UNI_INARABIC }   /* blk=arabic */,
-  {     0,  3671,  7788,  17,   4, UNI_BALI }   /* scriptextensions=bali */,
-  {     2,  5269,     0,  13,   0, UNI_PATSYN }   /* patternsyntax */,
-  {     4,  9113,  8765,   5,   4, UNI_CCC__24 }   /* ccc=ccc24 */,
-  {     1,  8886,  3038,   3,   4, UNI_ETHI }   /* sc=ethi */,
-  {     4,  3671,  4267,  17,   4, UNI_BAMU }   /* scriptextensions=bamu */,
-  {     0,  8886,  8310,   3,   4, UNI_SC__TIRH }   /* sc=tirh */,
-  {     1,  1362,  8445,  24,   3, UNI_CCC__107 }   /* canonicalcombiningclass=107 */,
-  {     2,  6679,  9734,  11,   3, UNI_SD }   /* softdotted=yes */,
-  {     4,  9093,  8240,   4,   7, UNI_INSHARADA }   /* blk=sharada */,
-  {     0,  2204,  6636,   3,  10, UNI_SO }   /* isothersymbol */,
-  {     1,  1691,   722,  23,   4, UNI_BPT__C }   /* bidipairedbrackettype=close */,
-  {     2,  8233,  9465,   7,   4, UNI_XPEO }   /* script=xpeo */,
-  {     3,  1362,  9542,  24,   3, UNI_CCC__DA }   /* canonicalcombiningclass=234 */,
-  {     3,  1410,     0,  13,   0, UNI_M }   /* combiningmark */,
-  {     4,  7025,  7159,   3,   1, UNI_IN__5 }   /* in=5 */,
-  {    12,  9093,  7964,   4,   8, UNI_INTIFINAGH }   /* blk=tifinagh */,
-  {     6,  9647,  8464,   3,   2, UNI_NV__29 }   /* nv=29 */,
-  {     5,  9647,  8376,   3,   5, UNI_NV__50000 }   /* nv=50000 */,
-  {    15,  9365,  3020,   4,   4, UNI_DEVA }   /* scx=deva */,
-  {     2,  1057,     1,  27,   1, -UNI_PCM }   /* prependedconcatenationmark=n */,
-  {     0,  7420,  9433,   8,   4, UNI_IDS }   /* idstart=true */,
-  {     0,  8332,    80,   4,  33, UNI_ARABICMATH }   /* isarabicmathematicalalphabeticsymbols */,
-  {     7,  9909,  3248,   7,   5, UNI_POSIXSPACE }   /* isposixspace */,
-  {    10,  9137,    36,   4,   1, UNI_DEP }   /* dep=t */,
-  {     1,  1933,    36,  22,   1, UNI_LOE }   /* logicalorderexception=t */,
-  {     1,  5565,  2147,  13,   3, UNI_JG__AIN }   /* joininggroup=ain */,
-  {     0,  5760,  8358,  13,   5, UNI_NV__30000 }   /* numericvalue=30000 */,
-  {     0,  8233,  8628,   7,   6, UNI_SC__THAA }   /* script=thaana */,
-  {     1,  5760,  7516,  13,   8, UNI_NV__5_SLASH_2 }   /* numericvalue=2.50e+00 */,
-  {     0,  8424,  8914,   6,   5, UNI_INNUSHU }   /* block=nushu */,
-  {     1,  4580,  2761,   3,  18, UNI_MODIFIERTONELETTERS }   /* inmodifiertoneletters */,
-  {     1,  3951,   447,   3,  17, UNI_IDEOGRAPHICSYMBOLS }   /* isideographicsymbols */,
-  {     3,  9365,  8093,   4,   7, UNI_HANO }   /* scx=hanunoo */,
-  {     3,  9365,  8914,   4,   5, UNI_NSHU }   /* scx=nushu */,
-  {     1,  5835,  9433,  12,   4, UNI_BIDIC }   /* bidicontrol=true */,
-  {     1,  9647,  7659,   3,   2, UNI_NV__16 }   /* nv=16 */,
-  {    20,  3236,     1,  18,   1, -UNI__PERL_PATWS }   /* patternwhitespace=n */,
-  {     0,  9731,     0,   3,   0, UNI_wb_values_index }   /* wb= */,
-  {     1,  8424,  2333,   6,  20, UNI_GLAGOLITICSUP }   /* block=glagoliticsupplement */,
-  {     1,  5565,  6075,  13,  12, UNI_JG__MALAYALAMLLA }   /* joininggroup=malayalamlla */,
-  {     1,  9049,  7612,   4,   3, UNI_AGE__4_DOT_1 }   /* age=4.1 */,
-  {     8,  8879,   838,   3,  27, UNI_PHONETICEXTSUP }   /* inphoneticextensionssupplement */,
-  {     1,  8160,   721,   4,  14, UNI_ENCLOSEDALPHANUM }   /* inenclosedalphanum */,
-  {     1,  9093,  5883,   4,  12, UNI_CYRILLICEXTB }   /* blk=cyrillicextb */,
-  {     0,  1362,  8785,  25,   4, UNI_CCC__28 }   /* canonicalcombiningclass=ccc28 */,
-  {     0,  1536,  3553,   3,  16, UNI_ETHIOPICEXTA }   /* inethiopicextendeda */,
-  {     0,  3248,  9734,   6,   3, UNI_XPOSIXSPACE }   /* space=yes */,
-  {     6,  5760,  8364,  13,   5, UNI_NV__40000 }   /* numericvalue=40000 */,
-  {     5,  3868,  9108,  16,   2, UNI_MC }   /* generalcategory=mc */,
-  {     0,   184,  4267,   2,   4, UNI_BAMU }   /* isbamu */,
-  {     4,  3002,  8184,  18,   7, UNI_DT__NB }   /* decompositiontype=nobreak */,
-  {     0,    21,  8680,   3,   4, UNI_INADLAM }   /* inadlam */,
-  {     4,  9365,   983,   4,   5, UNI_GREK }   /* scx=greek */,
-  {     0,  3586,     0,  17,   0, UNI_INDICSIYAQNUMBERS }   /* indicsiyaqnumbers */,
-  {     0,  1911,  8646,  22,   6, UNI_INSC__VIRAMA }   /* indicsyllabiccategory=virama */,
-  {     0,  5565,  3654,  13,  17, UNI_JG__MANICHAEANTHAMEDH }   /* joininggroup=manichaeanthamedh */,
-  {     1,  9093,   113,   4,  35, UNI_DIACRITICALSFORSYMBOLS }   /* blk=combiningdiacriticalmarksforsymbols */,
-  {     4,  9049,  9716,   4,   3, UNI_AGE__7 }   /* age=v70 */,
-  {     9,  8886,  7892,   3,   8, UNI_SC__JAVA }   /* sc=javanese */,
-  {     4,  5565,  5073,  13,  14, UNI_JG__MANICHAEANAYIN }   /* joininggroup=manichaeanayin */,
-  {     0,  8424,  6939,   6,   2, UNI_INVS }   /* block=vs */,
-  {     3,  3868,  5255,  16,  14, UNI_MN }   /* generalcategory=nonspacingmark */,
-  {     1,   184,  3980,   2,   7, UNI_LINB }   /* islinearb */,
-  {     3,  8424,  3772,   6,  16, UNI_BOPOMOFOEXT }   /* block=bopomofoextended */,
-  {     0,   184,  6580,   2,  11, UNI_MYANMAREXTA }   /* ismyanmarexta */,
-  {     4,  9605,  8184,   3,   7, UNI_DT__NB }   /* dt=nobreak */,
-  {     0,  8886,  9345,   3,   4, UNI_RJNG }   /* sc=rjng */,
-  {     9,  8871,  9773,   3,   2, UNI_SB__XX }   /* sb=xx */,
-  {     0,  9623,  3916,   3,  16, UNI_JG__HANIFIROHINGYAPA }   /* jg=hanifirohingyapa */,
-  {     0,    21,  7892,   2,   8, UNI_INJAVANESE }   /* injavanese */,
-  {     9,  8886,  2393,   3,  20, UNI_HMNP }   /* sc=nyiakengpuachuehmong */,
-  {     2,  1362,  7603,  24,   2, UNI_CCC__24 }   /* canonicalcombiningclass=24 */,
-  {     1,  4849,  8864,  14,   5, -UNI_CI }   /* caseignorable=false */,
-  {     0,  9129,  9734,   4,   3, UNI_CWU }   /* cwu=yes */,
-  {     8,  7956,     0,   4,   0, UNI_TAGB }   /* tagb */,
-  {     1,  1239,    36,  25,   1, UNI_COMPEX }   /* fullcompositionexclusion=t */,
-  {     4,  8233,  9425,   7,   4, UNI_THAI }   /* script=thai */,
-  {     6,  9365,  9281,   4,   4, UNI_NEWA }   /* scx=newa */,
-  {     3,  2212,  1165,   5,  23, UNI_HALFANDFULLFORMS }   /* inhalfwidthandfullwidthforms */,
-  {     0,  9647,  7446,   3,   1, UNI_NV__2 }   /* nv=2 */,
-  {     1,  9053,     0,   4,   0, UNI_AGHB }   /* aghb */,
-  {     6,  9093,  1003,   4,  27, UNI_ENCLOSEDCJK }   /* blk=enclosedcjklettersandmonths */,
-  {     1,  1243,    36,  21,   1, UNI_CE }   /* compositionexclusion=t */,
-  {     1,  9629,  1110,   3,  26, UNI_LB__CJ }   /* lb=conditionaljapanesestarter */,
-  {     0,  1924,    47,  10,   1, UNI_LM }   /* category=lm */,
-  {     2,  8616,     0,   6,   0, UNI_sterm_values_index }   /* sterm= */,
-  {     1,  7860,     0,   4,   0, UNI_HIRA }   /* hira */,
-  {    28,  9647,  7668,   3,   8, UNI_NV__5_SLASH_8 }   /* nv=6.25e-01 */,
-  {     1,  8929,     0,   5,   0, UNI_OSGE }   /* osage */,
-  {     3,  8412,     1,   6,   1, -UNI_BIDIC }   /* bidic=n */,
-  {     1,  9093,  1539,   4,  14, UNI_MUSIC }   /* blk=musicalsymbols */,
-  {     2,  9413,     0,   4,   0, UNI_TAVT }   /* tavt */,
-  {     0,  1362,  8730,  25,   4, UNI_CCC__17 }   /* canonicalcombiningclass=ccc17 */,
-  {     3,  9647,  7723,   3,   2, UNI_NV__18 }   /* nv=18 */,
-  {     1,  8233,  8058,   7,   7, UNI_DSRT }   /* script=deseret */,
-  {     0,  9365,  9081,   4,   4, UNI_AVST }   /* scx=avst */,
-  {     3,  8580,    26,   6,   1, UNI__PERL_NCHAR }   /* nchar=y */,
-  {     0,  1482,  2479,  24,   6, UNI_INPC__BOTTOM }   /* indicpositionalcategory=bottom */,
-  {     0,  1450,   986,   5,   2, UNI_INGREEK }   /* ingreek */,
-  {     1,  4705,  8940,   3,   4, UNI_TALE }   /* istaile */,
-  {     3,   184,  2393,   2,  20, UNI_HMNP }   /* isnyiakengpuachuehmong */,
-  {     9,  1497,  6360,   9,  11, UNI_CASEDLETTER }   /* category=casedletter */,
-  {     0,  9121,    36,   4,   1, UNI_CWL }   /* cwl=t */,
-  {     5,  9093,  3110,   4,   8, UNI_INGEORGIAN }   /* blk=georgian */,
-  {     9,  1482,  5461,  24,  13, UNI_INPC__BOTTOMANDLEFT }   /* indicpositionalcategory=bottomandleft */,
-  {     1,  4447,  1162,  15,   9, UNI_EA__H }   /* eastasianwidth=halfwidth */,
-  {     0,  3671,  7860,  17,   8, UNI_HIRA }   /* scriptextensions=hiragana */,
-  {     5,  3671,  7008,  17,  10, UNI_PHNX }   /* scriptextensions=phoenician */,
-  {     0,  9620,  9769,   3,   2, UNI_CASEDLETTER }   /* gc=l_ */,
-  {     5,  9153,  5952,   4,   3, UNI_LB__ZWJ }   /* gcb=zwj */,
-  {     0,  8233,  8142,   7,   7, UNI_MARC }   /* script=marchen */,
-  {     4,  9365,     7,   4,  18, UNI_CANS }   /* scx=canadianaboriginal */,
-  {     7,  3671,  2006,  17,   4, UNI_MODI }   /* scriptextensions=modi */,
-  {     0,  3932,     0,  16,   0, UNI_HIGHPUSURROGATES }   /* highpusurrogates */,
-  {     0,  8233,  9181,   7,   4, UNI_HLUW }   /* script=hluw */,
-  {    25,  9093,  6569,   4,  11, UNI_MISCSYMBOLS }   /* blk=miscsymbols */,
-  {     8,  5760,  7540,  13,   2, UNI_NV__20 }   /* numericvalue=20 */,
-  {     2,  9093,  8502,   4,   6, UNI_INGOTHIC }   /* blk=gothic */,
-  {     0,   184,  8859,   2,   5, UNI_DOGR }   /* isdogra */,
-  {     0,  8233,  2608,   7,  19, UNI_EGYP }   /* script=egyptianhieroglyphs */,
-  {     1,  6918,  8345,  10,   7, UNI_LB__ZW }   /* linebreak=zwspace */,
-  {     0,  6279,     0,  12,   0, UNI_PLAYINGCARDS }   /* playingcards */,
-  {     2,  5760,  5409,  13,   2, UNI_NV__10 }   /* numericvalue=10 */,
-  {     0,  9113,  9077,   4,   3, UNI_CCC__202 }   /* ccc=atb */,
-  {     0,    21,  4989,   2,   6, UNI_KANGXI }   /* inkangxi */,
-  {     8,  9113,  3441,   4,   9, UNI_CCC__BL }   /* ccc=belowleft */,
-  {     3,  6816,  2533,   3,   5, UNI_INBRAHMI }   /* inbrahmi */,
-  {     0,  3671,  7118,  17,   4, UNI_WARA }   /* scriptextensions=wara */,
-  {     8,  9629,    18,   3,   2, UNI_RI }   /* lb=ri */,
-  {    16,  8233,  9485,   7,   4, UNI_SC__QAAI }   /* script=zinh */,
-  {     9,  1773,  9734,   6,   3, UNI_CASED }   /* cased=yes */,
-  {     2,  9093,  8247,   4,   7, UNI_SHAW }   /* blk=shavian */,
-  {     2,  6679,     0,  11,   0, UNI_sd_values_index }   /* softdotted= */,
-  {    22,   184,  8338,   2,   6, UNI_XPOSIXSPACE }   /* iswspace */,
-  {     4,  8604,   995,   6,   2, -UNI_QMARK }   /* qmark=no */,
-  {     9,  4705,  8283,   3,   6, UNI_TGLG }   /* istagalog */,
-  {     0,  4580,  2262,  10,  11, UNI_MERO }   /* inmeroitichieroglyphs */,
-  {     0,  9365,  3772,   4,   8, UNI_BOPO }   /* scx=bopomofo */,
-  {     5,  9620,  1410,   3,  13, UNI_M }   /* gc=combiningmark */,
-  {     0,   184,  6051,   2,   7, UNI_MAHJONG }   /* ismahjong */,
-  {     0,  5760,  5409,  13,  13, UNI_NV__1000000000000 }   /* numericvalue=1000000000000 */,
-  {     0,  9365,  9453,   4,   4, UNI_VAI }   /* scx=vaii */,
-  {     1,  9365,  2930,   4,   4, UNI_CHER }   /* scx=cher */,
-  {     4,  1482,  3344,  24,  10, UNI_INPC__TOPANDLEFT }   /* indicpositionalcategory=topandleft */,
-  {     0,    42,     0,  26,   0, UNI_CJKCOMPATIDEOGRAPHS }   /* cjkcompatibilityideographs */,
-  {     4,   184,  1768,   2,   5, UNI_XPOSIXLOWER }   /* islower */,
-  {     8,  9731,  3254,   3,  17, UNI_RI }   /* wb=regionalindicator */,
-  {    18,   184,  6558,   2,  11, UNI_MEDF }   /* ismedefaidrin */,
-  {     0,  1823,     0,  19,   0, UNI_CJKCOMPATIDEOGRAPHS }   /* cjkcompatideographs */,
-  {     0,  3671,  7332,  17,   4, UNI_ITAL }   /* scriptextensions=ital */,
-  {     6,    24,     0,   1,   0, UNI_L }   /* l */,
-  {     0,  9365,  2532,   4,   6, UNI_BRAH }   /* scx=brahmi */,
-  {     0,  6816,  4298,   3,  14, UNI_BRAI }   /* inbraillepatterns */,
-  {     0,  3671,    57,  17,   2, UNI_YI }   /* scriptextensions=yi */,
-  {     0,  7128,  4140,  10,   5, UNI_WB__XX }   /* wordbreak=other */,
-  {     1,  9093,   509,   4,  30, UNI_CJKEXTA }   /* blk=cjkunifiedideographsextensiona */,
-  {     0,   184,  9345,   2,   4, UNI_RJNG }   /* isrjng */,
-  {     4,   184,  2169,   2,  14, UNI_MEETEIMAYEKEXT }   /* ismeeteimayekext */,
-  {     0,  6567,  4096,   6,  12, UNI_MISCMATHSYMBOLSB }   /* inmiscmathsymbolsb */,
-  {     4,  5565,   341,  13,   2, UNI_JG__PE }   /* joininggroup=pe */,
-  {     0,  1691,     0,  23,   0, UNI_BPT__C }   /* bidipairedbrackettype=c */,
-  {     0,  2855,     0,  19,   0, UNI_SUPARROWSA }   /* supplementalarrowsa */,
-  {     1,    21,  6027,   2,  12, UNI_KHMERSYMBOLS }   /* inkhmersymbols */,
-  {    15,  5339,   721,  14,   5, UNI_SB__CL }   /* sentencebreak=close */,
-  {     1,  8424,  4933,   6,  14, UNI_INGREEK }   /* block=greekandcoptic */,
-  {     2,  8886,  9429,   3,   4, UNI_TIBT }   /* sc=tibt */,
-  {     6,  9113,  8790,   5,   4, UNI_CCC__29 }   /* ccc=ccc29 */,
-  {     0,  9647,  5409,   3,   6, UNI_NV__100000 }   /* nv=100000 */,
-  {     8,  3671,  7964,  17,   8, UNI_TFNG }   /* scriptextensions=tifinagh */,
-  {     3,  7025,  9548,   3,   3, UNI_IN__3 }   /* in=3.0 */,
-  {     9,  8233,  7347,   7,   9, UNI_ORKH }   /* script=oldturkic */,
-  {     2,  5760,  7740,  13,   8, UNI_NV__1_SLASH_12 }   /* numericvalue=8.33e-02 */,
-  {     0,  3951,   447,   3,  31, UNI_IDEOGRAPHICSYMBOLS }   /* isideographicsymbolsandpunctuation */,
-  {     3,  3671,  7049,  18,   9, UNI_SAUR }   /* scriptextensions=saurashtra */,
-  {     0,  9093,  7185,   4,   9, UNI_ARABICPFA }   /* blk=arabicpfa */,
-  {     1,  8424,  6492,   6,  11, UNI_KATAKANAEXT }   /* block=katakanaext */,
-  {     0,  2148,  2837,   3,   8, UNI_INSUNDANESE }   /* insundanese */,
-  {     0,  8424,  7796,   6,   8, UNI_INBASSAVAH }   /* block=bassavah */,
-  {     0,  9620,    38,   3,   2, UNI_XPOSIXDIGIT }   /* gc=nd */,
-  {     0,    21,  7257,   2,   9, UNI_LATINEXTB }   /* inlatinextb */,
-  {     2,  9620,  8499,   3,   2, UNI_CF }   /* gc=cf */,
-  {     1,  6679,     0,  10,   0, UNI_SD }   /* softdotted */,
-  {     0,  8886,  9173,   3,   4, UNI_SC__GURU }   /* sc=guru */,
-  {     2,  6005,   690,   3,  15, UNI_CUNEIFORMNUMBERS }   /* incuneiformnumbers */,
-  {     0,  6918,   184,  10,   2, UNI_LB__IS }   /* linebreak=is */,
-  {     2,  8424,  7940,   6,   8, UNI_SPECIALS }   /* block=specials */,
-  {     0,  3688,     0,  17,   0, UNI_sterm_values_index }   /* sentenceterminal= */,
-  {     8,  9647,  7683,   3,   2, UNI_NV__26 }   /* nv=26 */,
-  {     0,  9647,  5409,   3,   3, UNI_NV__100 }   /* nv=100 */,
-  {     3,  9620,   406,   3,   7, UNI_XPOSIXCNTRL }   /* gc=control */,
-  {     1,  8093,     0,   7,   0, UNI_HANO }   /* hanunoo */,
-  {     0,   184,  7796,   2,   4, UNI_BASS }   /* isbass */,
-  {     2,   184,  1576,   2,  15, UNI_GEOMETRICSHAPES }   /* isgeometricshapes */,
-  {     1,  9620,     7,   3,   1, UNI_C }   /* gc=c */,
-  {     0,  8871,   400,   3,   6, UNI_SB__FO }   /* sb=format */,
-  {     0,  8616,     1,   6,   1, -UNI_STERM }   /* sterm=n */,
-  {     0,  9365,  8255,   5,   3, UNI_SIDD }   /* scx=sidd */,
-  {     0,  9093,  8065,   4,   7, UNI_INELBASAN }   /* blk=elbasan */,
-  {     0,  6816,  3773,   3,  15, UNI_BOPOMOFOEXT }   /* inbopomofoextended */,
-  {     0,  3739,     3,  17,   1, -UNI_UIDEO }   /* unifiedideograph=f */,
-  {     3,  7100,     0,   8,   0, UNI_ASSIGNED }   /* assigned */,
-  {     9,  3671,  8430,  17,   6, UNI_CARI }   /* scriptextensions=carian */,
-  {     7,  9093,  7772,   4,   8, UNI_INARMENIAN }   /* blk=armenian */,
-  {    20,  9626,     6,   3,   1, UNI_JT__D }   /* jt=d */,
-  {     1,  9623,  5125,   3,   4, UNI_JG__HETH }   /* jg=heth */,
-  {     5,  1362,  8825,  25,   4, UNI_CCC__36 }   /* canonicalcombiningclass=ccc36 */,
-  {     1,  8424,  3964,   6,   6, UNI_LATIN1 }   /* block=latin1 */,
-  {     4,  7980,     0,   4,   0, UNI_UGAR }   /* ugar */,
-  {     8,  5565,  5157,  13,  14, UNI_JG__MANICHAEANRESH }   /* joininggroup=manichaeanresh */,
-  {     0,  1735,     0,  22,   0, UNI_cwcm_values_index }   /* changeswhencasemapped= */,
-  {     4,  8233,  2779,   7,   9, UNI_SC__MONG }   /* script=mongolian */,
-  {     1,  9093,  5871,   4,  12, UNI_CYRILLICEXTA }   /* blk=cyrillicexta */,
-  {     0,  9593,  4905,   3,  14, UNI_BC__EN }   /* bc=europeannumber */,
-  {     1,  8233,  7892,   7,   8, UNI_SC__JAVA }   /* script=javanese */,
-  {     6,   184,  1768,   2,   9, UNI_XPOSIXLOWER }   /* islowercase */,
-  {     6,  5760,  9737,  13,   2, UNI_NV__38 }   /* numericvalue=38 */,
-  {     0,  9647,  8388,   3,   6, UNI_NV__700000 }   /* nv=700000 */,
-  {     0,  9602,    36,   3,   1, UNI_DI }   /* di=t */,
-  {     0,  9647,  7524,   3,   8, UNI_NV__1_SLASH_4 }   /* nv=2.50e-01 */,
-  {    16,  9605,    68,   3,   3, UNI_DT__SUP }   /* dt=sup */,
-  {     0,  8424,  2044,   7,  20, UNI_CJKCOMPATFORMS }   /* block=cjkcompatibilityforms */,
-  {     0,  9647,  8388,   3,   5, UNI_NV__70000 }   /* nv=70000 */,
-  {    13,  9593,     1,   4,   1, UNI_BC__BN }   /* bc=bn */,
-  {     9,  9903,  9921,   6,   5, UNI_XPOSIXPRINT }   /* xposixprint */,
-  {     5,  1362,  7495,  24,   1, UNI_CCC__7 }   /* canonicalcombiningclass=7 */,
-  {     0,  8424,  2532,   6,   6, UNI_INBRAHMI }   /* block=brahmi */,
-  {     9,  8886,  9085,   3,   4, UNI_BATK }   /* sc=batk */,
-  {     0,  9620,  1029,   3,   2, UNI_SO }   /* gc=so */,
-  {     0,  9093,  9397,   4,   4, UNI_TAGS }   /* blk=tags */,
-  {     5,  9365,  3620,   4,  10, UNI_MANI }   /* scx=manichaean */,
-  {     0,  1158,  8623,   3,   5, UNI_INTELUGU }   /* intelugu */,
-  {     0,  9365,  8205,   4,   4, UNI_OSMA }   /* scx=osma */,
-  {     2,  9365,  9133,   4,   4, UNI_CYRL }   /* scx=cyrl */,
-  {    75,  9093,  6988,   4,  10, UNI_INOLDSOGDIAN }   /* blk=oldsogdian */,
-  {     6,  9093,  8949,   4,   5, UNI_VSSUP }   /* blk=vssup */,
-  {     0,  9093,  8610,   4,   6, UNI_INREJANG }   /* blk=rejang */,
-  {     0,  9093,  4672,   4,  15, UNI_SARB }   /* blk=oldsoutharabian */,
-  {     8,  8886,  8514,   3,   6, UNI_HATR }   /* sc=hatran */,
-  {     1,  3671,  7844,  17,   8, UNI_GUJR }   /* scriptextensions=gujarati */,
-  {     1,   184,  8610,   2,   6, UNI_RJNG }   /* isrejang */,
-  {     0,  6885,  8094,   3,   6, UNI_HANO }   /* ishanunoo */,
-  {     1,  9605,  3308,   3,   5, UNI_DT__SML }   /* dt=small */,
-  {     3,  8886,  5955,   3,  12, UNI_SC__GONG }   /* sc=gunjalagondi */,
-  {     6,  1508,     0,   2,   0, UNI_PS }   /* ps */,
-  {     1,  9629,  3254,   3,  17, UNI_RI }   /* lb=regionalindicator */,
-  {     0,  1362,  8464,  24,   2, UNI_CCC__29 }   /* canonicalcombiningclass=29 */,
-  {     0,  7018,  9441,  10,   4, UNI_IN__11 }   /* presentin=v110 */,
-  {     4,  1243,    26,  21,   1, UNI_CE }   /* compositionexclusion=y */,
-  {     0,  9647,  5409,   3,  11, UNI_NV__10000000000 }   /* nv=10000000000 */,
-  {     1,  3671,  8142,  17,   4, UNI_MARC }   /* scriptextensions=marc */,
-  {     0,  7420,   995,   8,   2, -UNI_IDS }   /* idstart=no */,
-  {    10,  9629,    73,   3,   2, UNI_LB__EM }   /* lb=em */,
-  {     8,  3254,    36,  18,   1, UNI_RI }   /* regionalindicator=t */,
-  {     1,  8424,  3756,   6,   9, UNI_ARABICSUP }   /* block=arabicsup */,
-  {    21,  8058,     0,   7,   0, UNI_DSRT }   /* deseret */,
-  {     2,  8592,     0,   6,   0, UNI_nfdqc_values_index }   /* nfdqc= */,
-  {     0,  2703,  8864,  19,   5, -UNI_IDST }   /* idstrinaryoperator=false */,
-  {     6,    11,     0,   2,   0, UNI_DI }   /* di */,
-  {    13,  3772,     0,   4,   0, UNI_BOPO }   /* bopo */,
-  {     8,  9647,  8388,   3,   2, UNI_NV__70 }   /* nv=70 */,
-  {     3,  8849,     0,   4,   0, UNI_CWCM }   /* cwcm */,
-  {     1,  5760,  5409,  13,  11, UNI_NV__10000000000 }   /* numericvalue=10000000000 */,
-  {  1025,  6231,  5487,  12,   7, UNI_XPOSIXDIGIT }   /* numerictype=decimal */,
-  {     3,  9093,  7884,   4,   8, UNI_JAMOEXTB }   /* blk=jamoextb */,
-  {     5,  8424,  2401,   6,   3, UNI_PUA }   /* block=pua */,
-  {     2,  4826,     3,   9,   1, -UNI_XPOSIXXDIGIT }   /* hexdigit=f */,
-  {     0,  8886,  8254,   3,   4, UNI_SIDD }   /* sc=sidd */,
-  {     0,  9093,  4492,   4,  15, UNI_INIMPERIALARAMAIC }   /* blk=imperialaramaic */,
-  {     8,  9909,  9326,   3,   3, UNI_MIAO }   /* isplrd */,
-  {     0,  9121,    26,   4,   1, UNI_CWL }   /* cwl=y */,
-  {     1,  9093,  8289,   4,   7, UNI_INTAITHAM }   /* blk=taitham */,
-  {     3,  8424,  3469,   6,   4, UNI_UCAS }   /* block=ucas */,
-  {     0,  7018,  9707,  10,   3, UNI_IN__6_DOT_1 }   /* presentin=v61 */,
-  {     2,  6888,     0,  10,   0, UNI_dia_values_index }   /* diacritic= */,
-  {     1,  5565,    65,  15,   2, UNI_JG__KAPH }   /* joininggroup=kaph */,
-  {     2,  3671,  8934,  17,   5, UNI_RUNR }   /* scriptextensions=runic */,
-  {     5,  3868,  1855,  16,   2, UNI_CN }   /* generalcategory=cn */,
-  {     0,  9093,  1645,   4,  23, UNI_SHORTHANDFORMATCONTROLS }   /* blk=shorthandformatcontrols */,
-  {     1,  8233,  6724,   8,  10, UNI_SC__SYLO }   /* script=sylotinagri */,
-  {    18,   184,  9225,   2,   4, UNI_LINA }   /* islina */,
-  {     0,  4989,     0,  14,   0, UNI_KANGXI }   /* kangxiradicals */,
-  {     4,  7128,     0,   4,   0, UNI_XPOSIXWORD }   /* word */,
-  {     3,  9153,     0,   4,   0, UNI_gcb_values_index }   /* gcb= */,
-  {     2,  9365,  5617,   4,   9, UNI_MLYM }   /* scx=malayalam */,
-  {     2,  9647,     0,   3,   0, UNI_nv_values_index }   /* nv= */,
-  {     3,  9623,  5185,   3,  14, UNI_JG__MANICHAEANYODH }   /* jg=manichaeanyodh */,
-  {     1,  4821,     0,  14,   0, UNI_ahex_values_index }   /* asciihexdigit= */,
-  {     2,  8233,  9185,   7,   4, UNI_HMNG }   /* script=hmng */,
-  {     6,  1497,   698,   9,   6, UNI_N }   /* category=number */,
-  {     0,  2212,  2960,   5,   6, UNI_HALFMARKS }   /* inhalfmarks */,
-  {     1,  6918,   836,  10,   2, UNI_LB__SP }   /* linebreak=sp */,
-  {     1,  6602,     0,   4,   0, UNI_NAND }   /* nand */,
-  {     8,  1497,   467,   9,  11, UNI_P }   /* category=punctuation */,
-  {     4,  6768,  2233,   3,   5, UNI_YIJING }   /* isyijing */,
-  {     1,  9365,  1845,   4,   6, UNI_ZYYY }   /* scx=common */,
-  {     0,   184,  6859,   3,   9, UNI_CJKSTROKES }   /* iscjkstrokes */,
-  {     4,  1497,  1508,   9,   2, UNI_PS }   /* category=ps */,
-  {    88,  9365,  2253,   4,  20, UNI_HLUW }   /* scx=anatolianhieroglyphs */,
-  {     1,  8424,   349,   6,  33, UNI_SUPSYMBOLSANDPICTOGRAPHS }   /* block=supplementalsymbolsandpictographs */,
-  {     1,    21,  7876,   2,   8, UNI_JAMOEXTA }   /* injamoexta */,
-  {    12,  8233,  2333,   7,  10, UNI_SC__GLAG }   /* script=glagolitic */,
-  {    10,   988,     0,   5,   0, UNI_MUSIC }   /* music */,
-  {     1,  8163,    47,   7,   1, UNI_NFCQC__M }   /* nfkcqc=m */,
-  {     0,  4826,  9734,   9,   3, UNI_XPOSIXXDIGIT }   /* hexdigit=yes */,
-  {     0,   184,  1539,   2,  14, UNI_MUSIC }   /* ismusicalsymbols */,
-  {     5,  8886,  8562,   3,   4, UNI_LYCI }   /* sc=lyci */,
-  {     8,  3671,  8484,  17,   6, UNI_CAKM }   /* scriptextensions=chakma */,
-  {     1,  3002,    68,  18,   3, UNI_DT__SUP }   /* decompositiontype=sup */,
-  {     2,  6885,  6095,   3,   3, UNI_HMNG }   /* ishmng */,
-  {     3,  9193,  6303,   4,  12, UNI_GCB__T }   /* hst=trailingjamo */,
-  {     1,  2148,  8262,   3,   6, UNI_INSOYOMBO }   /* insoyombo */,
-  {    16,  5435,  9433,  13,   4, UNI_BIDIM }   /* bidimirrored=true */,
-  {     0,   184,  7884,   2,   8, UNI_JAMOEXTB }   /* isjamoextb */,
-  {    11,  6828,  9635,  10,   3, UNI_BC__LRI }   /* bidiclass=lri */,
-  {     1,  4705,  3327,   3,  17, UNI_TAIXUANJING }   /* istaixuanjingsymbols */,
-  {     8,  8424,  3020,   6,  18, UNI_DEVANAGARIEXT }   /* block=devanagariextended */,
-  {     2,  3671,  8058,  17,   7, UNI_DSRT }   /* scriptextensions=deseret */,
-  {     3,  8233,  3467,   7,  17, UNI_AGHB }   /* script=caucasianalbanian */,
-  {    16,  4705,  5624,   3,   3, UNI_TAML }   /* istaml */,
-  {    10,  9049,  7548,   4,   3, UNI_AGE__3_DOT_1 }   /* age=3.1 */,
-  {     0,  8886,  9301,   3,   4, UNI_ORKH }   /* sc=orkh */,
-  {    65,  6567,  4080,   6,  12, UNI_MISCMATHSYMBOLSA }   /* inmiscmathsymbolsa */,
-  {     1,  3836,     0,   7,   0, UNI_CPRT }   /* cypriot */,
-  {     0,  6828,  5823,  10,  12, UNI_BC__AN }   /* bidiclass=arabicnumber */,
-  {     1,  8233,  1146,   8,   3, UNI_SORA }   /* script=sora */,
-  {     3,   184,  3620,   2,  10, UNI_MANI }   /* ismanichaean */,
-  {     0,  5760,  9033,  13,   4, UNI_NV__3_SLASH_80 }   /* numericvalue=3/80 */,
-  {     0,  9045,     0,   4,   0, UNI_ADLM }   /* adlm */,
-  {     0,  9904,  8839,   5,   5, UNI_POSIXCNTRL }   /* posixcntrl */,
-  {     1,  1779,  8864,  22,   5, -UNI_CWT }   /* changeswhentitlecased=false */,
-  {     0,  9365,  9053,   4,   4, UNI_AGHB }   /* scx=aghb */,
-  {     1,  3671,  3038,  17,   4, UNI_ETHI }   /* scriptextensions=ethi */,
-  {     9,  1239,  9433,  25,   4, UNI_COMPEX }   /* fullcompositionexclusion=true */,
-  {    16,  3398,     0,  18,   0, UNI_vs_values_index }   /* variationselector= */,
-  {     1,   184,  1846,   3,   5, UNI_ZYYY }   /* iscommon */,
-  {     3,  8233,  8205,   7,   4, UNI_OSMA }   /* script=osma */,
-  {    17,  9093,  6602,   4,  11, UNI_INNANDINAGARI }   /* blk=nandinagari */,
-  {     0,  9781,  7420,   6,   7, UNI__PERL_IDSTART }   /* _perl_idstart */,
-  {    21,  3671,  8205,  17,   7, UNI_OSMA }   /* scriptextensions=osmanya */,
-  {     8,  8871,  1768,   3,   5, UNI_SB__LO }   /* sb=lower */,
-  {     5,  2212,  8095,   4,   5, UNI_INHANUNOO }   /* inhanunoo */,
-  {     0,  9193,  5747,   4,  13, UNI_HST__NA }   /* hst=notapplicable */,
-  {     2,   184,    43,   3,   8, UNI_CJKCOMPAT }   /* iscjkcompat */,
-  {     0,  9647,  7555,   3,   2, UNI_NV__23 }   /* nv=23 */,
-  {     4,  9365,  2393,   4,  20, UNI_HMNP }   /* scx=nyiakengpuachuehmong */,
-  {    18,  5760,  8400,  13,   4, UNI_NV__9000 }   /* numericvalue=9000 */,
-  {     0,  9125,   995,   4,   2, -UNI_CWT }   /* cwt=no */,
-  {     1,    21,  3164,   2,   9, UNI_LATINEXTA }   /* inlatinexta */,
-  {     2,  9605,  6195,   3,  12, UNI_DT__NONCANON }   /* dt=noncanonical */,
-  {     1,   184,  8114,   2,   7, UNI_KALI }   /* iskayahli */,
-  {     6,  7892,     0,   4,   0, UNI_JAVA }   /* java */,
-  {     0,  6888,    26,  10,   1, UNI_DIA }   /* diacritic=y */,
-  {     2,  8886,  9145,   3,   4, UNI_DSRT }   /* sc=dsrt */,
-  {     1,  8424,  2985,   7,  17, UNI_COPTICEPACTNUMBERS }   /* block=copticepactnumbers */,
-  {    17,  1779,   995,  22,   2, -UNI_CWT }   /* changeswhentitlecased=no */,
-  {     1,  9113,  8735,   5,   4, UNI_CCC__18 }   /* ccc=ccc18 */,
-  {    17,  1362,  8810,  25,   4, UNI_CCC__33 }   /* canonicalcombiningclass=ccc33 */,
-  {     8,   184,  1506,   2,  24, UNI_SUPSYMBOLSANDPICTOGRAPHS }   /* issupsymbolsandpictographs */,
-  {     0,  9093,  1410,   4,  24, UNI_DIACRITICALSFORSYMBOLS }   /* blk=combiningmarksforsymbols */,
-  {     8,  9093,  6159,   4,  12, UNI_INMASARAMGONDI }   /* blk=masaramgondi */,
-  {     2,  3739,    26,  17,   1, UNI_UIDEO }   /* unifiedideograph=y */,
-  {     0,   184,  2169,   2,  11, UNI_MTEI }   /* ismeeteimayek */,
-  {     1,  2798,     0,  19,   0, UNI_OTTOMANSIYAQNUMBERS }   /* ottomansiyaqnumbers */,
-  {     2,  5085,  6053,   4,   5, UNI_MAHJONG }   /* inmahjong */,
-  {     2,  3671,   493,  17,   3, UNI_HAN }   /* scriptextensions=han */,
-  {     9,   184,   719,   2,  30, UNI_ENCLOSEDALPHANUMSUP }   /* isenclosedalphanumericsupplement */,
-  {    16,  8418,     3,   6,   1, -UNI_BIDIM }   /* bidim=f */,
-  {     0,  1362,  8437,  25,   4, UNI_CCC__10 }   /* canonicalcombiningclass=ccc10 */,
-  {     1,  9129,    36,   4,   1, UNI_CWU }   /* cwu=t */,
-  {     0,   117,  2150,   4,  19, UNI_ININSCRIPTIONALPARTHIAN }   /* ininscriptionalparthian */,
-  {     8,  8424,  6159,   6,  12, UNI_INMASARAMGONDI }   /* block=masaramgondi */,
-  {     0,  3248,  8864,   6,   5, -UNI_XPOSIXSPACE }   /* space=false */,
-  {     8,  8684,   995,   5,   2, -UNI_POSIXXDIGIT }   /* ahex=no */,
-  {     8,  9647,  8664,   3,   4, UNI_NV__1_SLASH_16 }   /* nv=1/16 */,
-  {     1,  9421,     0,   4,   0, UNI_TGLG }   /* tglg */,
-  {     0,  5269,     1,  14,   1, -UNI_PATSYN }   /* patternsyntax=n */,
-  {     3,  6005,   115,   4,  33, UNI_DIACRITICALSFORSYMBOLS }   /* incombiningdiacriticalmarksforsymbols */,
-  {     0,  5895,     0,  12,   0, UNI_CYRILLICEXTC }   /* cyrillicextc */,
-  {     4,  9659,     3,   3,   1, -UNI_RI }   /* ri=f */,
-  {    11,  3688,  9433,  17,   4, UNI_STERM }   /* sentenceterminal=true */,
-  {     0,  8424,  6382,   6,   6, UNI_DOMINO }   /* block=domino */,
-  {     8,  3868,    74,  16,   2, UNI_ME }   /* generalcategory=me */,
-  {     3,  6051,     0,   7,   0, UNI_MAHJONG }   /* mahjong */,
-  {     0,    21,  8894,   2,   5, UNI_INLIMBU }   /* inlimbu */,
-  {     1,  5435,  8864,  13,   5, -UNI_BIDIM }   /* bidimirrored=false */,
-  {     1,   983,     0,   5,   0, UNI_GREK }   /* greek */,
-  {     4,  9629,  3804,   3,  16, UNI_LB__CP }   /* lb=closeparenthesis */,
-  {     1,  8332,    29,   4,   4, UNI_ARAB }   /* isarabic */,
-  {    11,  8598,  9433,   6,   4, UNI__PERL_PATWS }   /* patws=true */,
-  {     1,  1855,     0,   2,   0, UNI_CN }   /* cn */,
-  {     2,  9113,  3441,   4,   5, UNI_CCC__B }   /* ccc=below */,
-  {     0,  9940,    47,   5,   1, UNI_PERM }   /* isperm */,
-  {     1,  8886,  9277,   3,   4, UNI_NBAT }   /* sc=nbat */,
-  {     2,  8886,  8628,   3,   4, UNI_SC__THAA }   /* sc=thaa */,
-  {     0,  9365,  9481,   4,   4, UNI_ZANB }   /* scx=zanb */,
-  {     0,  2106,   881,  21,   1, UNI_GCB__V }   /* graphemeclusterbreak=v */,
-  {     0,  2204,  8206,   3,   6, UNI_OSMA }   /* isosmanya */,
-  {     1,  8640,     1,   6,   1, -UNI_XPOSIXUPPER }   /* upper=n */,
-  {     4,  8424,  2169,   6,  21, UNI_MEETEIMAYEKEXT }   /* block=meeteimayekextensions */,
-  {     8,  3671,  9353,  17,   4, UNI_RUNR }   /* scriptextensions=runr */,
-  {     1,  8886,  1481,   3,   4, UNI_SC__SIND }   /* sc=sind */,
-  {     0,  7025,  9006,   3,   3, UNI_IN__2_DOT_1 }   /* in=2.1 */,
-  {     0,  9093,  8058,   4,   7, UNI_DSRT }   /* blk=deseret */,
-  {     1,  1530,     0,  14,   0, UNI_BYZANTINEMUSIC }   /* byzantinemusic */,
-  {     1,  3671,  9394,  18,   3, UNI_SYRC }   /* scriptextensions=syrc */,
-  {     0,  8871,    34,   3,   2, UNI_SB__EX }   /* sb=ex */,
-  {     0,  9093,  8532,   4,   6, UNI_KANBUN }   /* blk=kanbun */,
-  {     8,  3671,  3020,  17,   4, UNI_DEVA }   /* scriptextensions=deva */,
-  {     9,  8424,     0,  12,   0, UNI_INCARIAN }   /* block=carian */,
-  {     1,  6315,  9433,  12,   4, UNI_XIDC }   /* xidcontinue=true */,
-  {     0,  6885,  5346,   3,   3, UNI_HEBR }   /* ishebr */,
-  {    10,   184,  6371,   2,  10, UNI_DEP }   /* isdeprecated */,
-  {     0,  9725,     0,   3,   0, UNI_vo_values_index }   /* vo= */,
-  {     8,  8424,  4076,   6,  16, UNI_MISCMATHSYMBOLSA }   /* block=miscmathsymbolsa */,
-  {     0,  9647,  9584,   3,   3, UNI_NV__7_SLASH_8 }   /* nv=7/8 */,
-  {     0,  8886,  9269,   3,   4, UNI_SC__MYMR }   /* sc=mymr */,
-  {     3,  9093,  9253,   4,   4, UNI_INMIAO }   /* blk=miao */,
-  {     6,    21,  4808,   3,  13, UNI_ANCIENTSYMBOLS }   /* inancientsymbols */,
-  {     1,  9620,  3146,   3,  18, UNI_PI }   /* gc=initialpunctuation */,
-  {     1,  1362,  7167,  24,   9, UNI_CCC__AL }   /* canonicalcombiningclass=aboveleft */,
-  {     4,  8424,  7892,   6,   8, UNI_INJAVANESE }   /* block=javanese */,
-  {     9,  8886,  6991,   3,   4, UNI_SC__SOGD }   /* sc=sogd */,
-  {     2,  8424,   976,   6,  27, UNI_ANCIENTGREEKMUSIC }   /* block=ancientgreekmusicalnotation */,
-  {     4,  6918,  4687,  10,  15, UNI_LB__OP }   /* linebreak=openpunctuation */,
-  {     0,   184,  9205,   2,   4, UNI_KNDA }   /* isknda */,
-  {     0,  2148,  3723,   3,  16, UNI_SUTTONSIGNWRITING }   /* insuttonsignwriting */,
-  {     8,  3671,  8079,  17,   4, UNI_GRAN }   /* scriptextensions=gran */,
-  {     1,  9365,  9165,   4,   4, UNI_GREK }   /* scx=grek */,
-  {    10,  3020,     0,   4,   0, UNI_DEVA }   /* deva */,
-  {     3,  8899,    36,   5,   1, UNI_MATH }   /* math=t */,
-  {     0,  9093,  7876,   4,   8, UNI_JAMOEXTA }   /* blk=jamoexta */,
-  {     0,  9647,  8664,   3,   5, UNI_NV__1_SLASH_160 }   /* nv=1/160 */,
-  {     2,   184,  8604,   2,   5, UNI_QMARK }   /* isqmark */,
-  {     1,  5760,  5409,  13,   3, UNI_NV__100 }   /* numericvalue=100 */,
-  {     0,  1472,     0,   9,   0, UNI__PERL_SURROGATE }   /* surrogate */,
-  {     0,  8233,  7860,   7,   8, UNI_SC__HIRA }   /* script=hiragana */,
-  {    21,  3254,    26,  18,   1, UNI_RI }   /* regionalindicator=y */,
-  {     0,  8886,  9413,   3,   4, UNI_TAVT }   /* sc=tavt */,
-  {     0,  9093,  6051,   4,   7, UNI_MAHJONG }   /* blk=mahjong */,
-  {     0,  7419,    26,   9,   1, UNI_XIDS }   /* xidstart=y */,
-  {     0,  6316,    36,  11,   1, UNI_IDC }   /* idcontinue=t */,
-  {    13,   184,  4432,   2,  15, UNI_DIACRITICALSSUP }   /* isdiacriticalssup */,
-  {    11,  9593,  5811,   3,  12, UNI_BC__AL }   /* bc=arabicletter */,
-  {    17,  5339,   138,  14,   2, UNI_SB__FO }   /* sentencebreak=fo */,
-  {     2,  9629,  7212,   3,   9, UNI_LB__B2 }   /* lb=breakboth */,
-  {     4,  8424,  8177,   6,   7, UNI_NB }   /* block=noblock */,
-  {     0,  8233,  7365,   7,   4, UNI_PAUC }   /* script=pauc */,
-  {    17,   184,  1085,   3,  24, UNI_CWKCF }   /* ischangeswhennfkccasefolded */,
-  {    12,  8233,  6646,   7,  11, UNI_HMNG }   /* script=pahawhhmong */,
-  {     0,  9605,     7,   3,   3, UNI_DT__CAN }   /* dt=can */,
-  {     2,  9125,     0,   4,   0, UNI_cwt_values_index }   /* cwt= */,
-  {     9,  8424,  2086,   7,   7, UNI_INCYRILLIC }   /* block=cyrillic */,
-  {     1,  3671,  2212,  18,   3, UNI_SINH }   /* scriptextensions=sinh */,
-  {     1,  9946,  9390,   3,   3, UNI_SOGO }   /* issogo */,
-  {     1,  9365,  7860,   4,   8, UNI_HIRA }   /* scx=hiragana */,
-  {     0,  8233,  3620,   7,   4, UNI_SC__MANI }   /* script=mani */,
-  {     0,   184,  7812,   2,   8, UNI_DUPL }   /* isduployan */,
-  {     0,  8163,     0,   8,   0, UNI_NFKCQC__N }   /* nfkcqc=n */,
-  {     2,  4821,     0,  13,   0, UNI_POSIXXDIGIT }   /* asciihexdigit */,
-  {     0,  9903,  9916,   6,   5, UNI_XPOSIXBLANK }   /* xposixblank */,
-  {     0,  6316,     0,  10,   0, UNI_IDC }   /* idcontinue */,
-  {     0,  9599,  9433,   3,   4, UNI_CI }   /* ci=true */,
-  {     0,  8424,  6569,   6,  11, UNI_MISCSYMBOLS }   /* block=miscsymbols */,
-  {     0,  6816,  3773,   3,   7, UNI_INBOPOMOFO }   /* inbopomofo */,
-  {     1,  8424,   316,   6,  33, UNI_SUPMATHOPERATORS }   /* block=supplementalmathematicaloperators */,
-  {     7,  6194,  8930,   3,   4, UNI_INOSAGE }   /* inosage */,
-  {     3,    21,  7884,   2,   8, UNI_JAMOEXTB }   /* injamoextb */,
-  {     1,  9093,  1823,   4,  19, UNI_CJKCOMPATIDEOGRAPHS }   /* blk=cjkcompatideographs */,
-  {     0,  8424,  5907,   6,  12, UNI_ETHIOPICEXTA }   /* block=ethiopicexta */,
-  {     0,  2493,  3380,  20,  18, UNI_VO__TU }   /* verticalorientation=transformedupright */,
-  {     1,  5435,     1,  13,   1, -UNI_BIDIM }   /* bidimirrored=n */,
-  {     3,  8869,  9734,   5,   3, UNI_IDSB }   /* idsb=yes */,
-  {    17,   184,   808,   2,  29, UNI_MISCARROWS }   /* ismiscellaneoussymbolsandarrows */,
-  {     0,  9365,  8944,   4,   5, UNI_TAKR }   /* scx=takri */,
-  {    16,  9909,     7,   3,   1, UNI_PC }   /* ispc */,
-  {     0,   184,  7892,   2,   4, UNI_JAVA }   /* isjava */,
-  {     0,   184,  3445,   3,   2, UNI_CWL }   /* iscwl */,
-  {     0,  2957,     0,   9,   0, UNI_HALFMARKS }   /* halfmarks */,
-  {     0,  8510,   995,   4,   2, -UNI_EXT }   /* ext=no */,
-  {     1,  6828,  2373,  10,  20, UNI_BC__LRE }   /* bidiclass=lefttorightembedding */,
-  {     4,  8886,  4492,   3,  15, UNI_ARMI }   /* sc=imperialaramaic */,
-  {    23,  1362,  7614,  24,   2, UNI_CCC__17 }   /* canonicalcombiningclass=17 */,
-  {     1,  2453,  9734,  20,   3, UNI_TERM }   /* terminalpunctuation=yes */,
-  {    62,  6371,   995,  11,   2, -UNI_DEP }   /* deprecated=no */,
-  {     0,  3868,  4402,  16,  15, UNI_PD }   /* generalcategory=dashpunctuation */,
-  {     0,  4778,  7099,   3,   9, UNI_CN }   /* isunassigned */,
-  {     8,  3671,  3772,  17,   8, UNI_BOPO }   /* scriptextensions=bopomofo */,
-  {     1,   184,  8526,   2,   6, UNI_KTHI }   /* iskaithi */,
-  {     3,  6005,   690,   3,   8, UNI_INCUNEIFORM }   /* incuneiform */,
-  {     5,  6828,  3218,  10,  18, UNI_BC__B }   /* bidiclass=paragraphseparator */,
-  {     2,  9365,  9189,   4,   4, UNI_HMNP }   /* scx=hmnp */,
-  {     0,  4821,    26,  14,   1, UNI_POSIXXDIGIT }   /* asciihexdigit=y */,
-  {     0,  8886,  7788,   3,   4, UNI_BALI }   /* sc=bali */,
-  {     2,  1481,     0,   4,   0, UNI_SIND }   /* sind */,
-  {    14,  8886,  9401,   3,   4, UNI_SC__TALE }   /* sc=tale */,
-  {     1,  8886,  8924,   3,   5, UNI_SC__ORYA }   /* sc=oriya */,
-  {     1,  2708,    80,   4,  33, UNI_ARABICMATH }   /* inarabicmathematicalalphabeticsymbols */,
-  {     1,  5760,  8364,  13,   3, UNI_NV__400 }   /* numericvalue=400 */,
-  {     2,   184,  6051,   2,   4, UNI_MAHJ }   /* ismahj */,
-  {     0,  8233,  4297,   7,   4, UNI_BRAI }   /* script=brai */,
-  {     2,  9113,  8479,   5,   5, UNI_WB__EB }   /* ccc=ccc133 */,
-  {     3,  9093,  7248,   4,   9, UNI_INKHUDAWADI }   /* blk=khudawadi */,
-  {     8,  9365,  7049,   5,   9, UNI_SAUR }   /* scx=saurashtra */,
-  {     2,  9647,  7548,   3,   8, UNI_NV__1_SLASH_32 }   /* nv=3.12e-02 */,
-  {     0,  9946,  8262,   3,   6, UNI_SOYO }   /* issoyombo */,
-  {     1,  8886,  9161,   3,   4, UNI_SC__GONM }   /* sc=gonm */,
-  {     1,   184,  5448,   2,  13, UNI_BLOCKELEMENTS }   /* isblockelements */,
-  {     0,  9093,   719,   4,  30, UNI_ENCLOSEDALPHANUMSUP }   /* blk=enclosedalphanumericsupplement */,
-  {     0,  1239,  8864,  25,   5, -UNI_COMPEX }   /* fullcompositionexclusion=false */,
-  {     0,  8886,  7008,   3,  10, UNI_PHNX }   /* sc=phoenician */,
-  {    14,  9141,  9734,   4,   3, UNI_DIA }   /* dia=yes */,
-  {    12,  9647,  7540,   3,   2, UNI_NV__20 }   /* nv=20 */,
-  {     4,  5760,  9749,  13,   2, UNI_NV__48 }   /* numericvalue=48 */,
-  {     0,  9093,  4717,   4,  15, UNI_TAMILSUP }   /* blk=tamilsupplement */,
-  {     0,   184,  1645,   2,  23, UNI_SHORTHANDFORMATCONTROLS }   /* isshorthandformatcontrols */,
-  {     4,  8233,  4267,   7,   5, UNI_BAMU }   /* script=bamum */,
-  {     1,  8424,  4297,   6,  15, UNI_BRAI }   /* block=braillepatterns */,
-  {     1,  9953,  1696,   3,   2, UNI_VAI }   /* isvai */,
-  {     2,  8418,     0,   6,   0, UNI_bidim_values_index }   /* bidim= */,
-  {     0,  1362,  8795,  25,   4, UNI_CCC__30 }   /* canonicalcombiningclass=ccc30 */,
-  {     1,  8884,  3484,   5,  17, UNI_INSC__CONSONANTPREFIXED }   /* insc=consonantprefixed */,
-  {     0,  1713,    36,  22,   1, UNI_CWCF }   /* changeswhencasefolded=t */,
-  {     4,  9049,  8993,   4,   4, UNI_AGE__10 }   /* age=10.0 */,
-  {     3,  9113,  8805,   5,   4, UNI_CCC__32 }   /* ccc=ccc32 */,
-  {     1,  6885,  4962,   3,  13, UNI_HIGHSURROGATES }   /* ishighsurrogates */,
-  {     0,  6918,  9773,  10,   2, UNI_LB__XX }   /* linebreak=xx */,
-  {     1,  2106,  7825,  21,   3, UNI_WB__EB }   /* graphemeclusterbreak=gaz */,
-  {     3,    21,   977,   3,  26, UNI_ANCIENTGREEKMUSIC }   /* inancientgreekmusicalnotation */,
-  {     2,    21,  7275,   2,   9, UNI_LATINEXTD }   /* inlatinextd */,
-  {     3,  9113,    16,   4,   1, UNI_CCC__B }   /* ccc=b */,
-  {     1,  6005,  2086,   3,  10, UNI_CYRILLICSUP }   /* incyrillicsup */,
-  {     5,  8418,    26,   6,   1, UNI_BIDIM }   /* bidim=y */,
-  {    17,  4462,     0,  14,   0, UNI_GREXT }   /* graphemeextend */,
-  {     1,  3128,     3,  18,   1, -UNI_IDSB }   /* idsbinaryoperator=f */,
-  {     1,  9365,  4792,   4,  15, UNI_ZANB }   /* scx=zanabazarsquare */,
-  {     1,  1362,  8481,  24,   3, UNI_WB__EB }   /* canonicalcombiningclass=133 */,
-  {     0,  8886,    57,   3,   2, UNI_SC__YI }   /* sc=yi */,
-  {     0,  8955,     1,   4,   1, -UNI_IDC }   /* idc=n */,
-  {    10,  3671,  8526,  17,   6, UNI_KTHI }   /* scriptextensions=kaithi */,
-  {    14,  6005,  2931,   3,  10, UNI_CHEROKEESUP }   /* incherokeesup */,
-  {     2,    21,  3290,   2,  18, UNI_RUMI }   /* inruminumeralsymbols */,
-  {     0,  8424,  1867,   6,  22, UNI_DIACRITICALSFORSYMBOLS }   /* block=diacriticalsforsymbols */,
-  {     0,  9237,  8864,   4,   5, -UNI_LOE }   /* loe=false */,
-  {     0,  7018,  7487,  10,   1, UNI_IN__6 }   /* presentin=6 */,
-  {     0,  3671,  2393,  17,  20, UNI_HMNP }   /* scriptextensions=nyiakengpuachuehmong */,
-  {     0,  8051,     0,   6,   0, UNI_COMPEX }   /* compex */,
-  {     0,  6885,  9182,   3,   3, UNI_HLUW }   /* ishluw */,
-  {     1,  8424,  3164,   6,   9, UNI_LATINEXTA }   /* block=latinexta */,
-  {     1,  9602,     1,   3,   1, -UNI_DI }   /* di=n */,
-  {     2,  8879,  4777,   5,  15, UNI_LOE }   /* inpc=visualorderleft */,
-  {     0,  1362,  7631,  24,   1, UNI_CCC__9 }   /* canonicalcombiningclass=9 */,
-  {    18,  9593,  9614,   3,   3, UNI_BC__FSI }   /* bc=fsi */,
-  {    19,  6005,  1847,   4,  20, UNI_INDICNUMBERFORMS }   /* incommonindicnumberforms */,
-  {     0,  8233,  4220,   7,   4, UNI_TANG }   /* script=tang */,
-  {     0,  8886,  7980,   3,   4, UNI_UGAR }   /* sc=ugar */,
-  {     0,  3951,  6317,   3,   9, UNI_IDC }   /* isidcontinue */,
-  {     0,  8424,  4172,   6,  16, UNI_SUPMATHOPERATORS }   /* block=supmathoperators */,
-  {     6,  9647,  7716,   3,   8, UNI_NV__3_SLASH_4 }   /* nv=7.50e-01 */,
-  {     1,  8871,  4140,   3,   5, UNI_SB__XX }   /* sb=other */,
-  {     0,  8424,  7311,   6,   9, UNI_INNEWTAILUE }   /* block=newtailue */,
-  {     0,  8886,  8550,   3,   4, UNI_LEPC }   /* sc=lepc */,
-  {     0,  8886,  9281,   3,   4, UNI_NEWA }   /* sc=newa */,
-  {     0,  8634,  8864,   6,   5, -UNI_UIDEO }   /* uideo=false */,
-  {     0,  9093,  4792,   4,  15, UNI_INZANABAZARSQUARE }   /* blk=zanabazarsquare */,
-  {     2,  3002,  8574,  18,   6, UNI_DT__NAR }   /* decompositiontype=narrow */,
-  {    13,  7932,   995,   8,   2, -UNI_RADICAL }   /* radical=no */,
-  {     9,  5269,  9734,  14,   3, UNI_PATSYN }   /* patternsyntax=yes */,
-  {     2,  9647,  7628,   3,   8, UNI_NV__3_SLASH_64 }   /* nv=4.69e-02 */,
-  {    10,  1977,    36,  22,   1, UNI__PERL_NCHAR }   /* noncharactercodepoint=t */,
-  {     1,  8886,     8,   4,   3, UNI_SC__KANA }   /* sc=kana */,
-  {    10,  8233,  7118,   7,  10, UNI_WARA }   /* script=warangciti */,
-  {    10,  8634,   995,   6,   2, -UNI_UIDEO }   /* uideo=no */,
-  {     2,  8424,  7772,   6,   8, UNI_INARMENIAN }   /* block=armenian */,
-  {     1,  9093,  8310,   4,   7, UNI_INTIRHUTA }   /* blk=tirhuta */,
-  {     1,  7194,     0,   9,   0, UNI_ARABICPFB }   /* arabicpfb */,
-  {     8,  8233,  9401,   7,   4, UNI_SC__TALE }   /* script=tale */,
-  {     0,  9647,  7631,   3,   1, UNI_NV__9 }   /* nv=9 */,
-  {     1,  9946,  7049,   3,   3, UNI_SAUR }   /* issaur */,
-  {    18,  8640,  9734,   6,   3, UNI_XPOSIXUPPER }   /* upper=yes */,
-  {     7,   184,  9779,   2,   2, UNI_ZS }   /* iszs */,
-  {     2,  3671,  8226,  17,   7, UNI_PHAG }   /* scriptextensions=phagspa */,
-  {     1,  5760,  9500,  13,   3, UNI_NV__1_SLASH_7 }   /* numericvalue=1/7 */,
-  {     0,  5269,     0,  14,   0, UNI_patsyn_values_index }   /* patternsyntax= */,
-  {     0,  9605,     0,   3,   0, UNI_dt_values_index }   /* dt= */,
-  {     2,  8886,  9065,   3,   4, UNI_ARMI }   /* sc=armi */,
-  {     1,  7128,  1164,  10,   2, UNI_LB__LF }   /* wordbreak=lf */,
-  {     9,  8709,     0,   5,   0, UNI_BUHD }   /* buhid */,
-  {     1,  5760,  7676,  13,   8, UNI_NV__1_SLASH_16 }   /* numericvalue=6.25e-02 */,
-  {     0,  6918,  9761,  10,   2, UNI_GCB__L }   /* linebreak=jl */,
-  {     6,  9904,  9921,   5,   5, UNI_POSIXPRINT }   /* posixprint */,
-  {     2,  5760,  5409,  13,   6, UNI_NV__100000 }   /* numericvalue=100000 */,
-  {     0,  3951,  7421,   3,   6, UNI_IDS }   /* isidstart */,
-  {     0,  9093,  8072,   4,   7, UNI_INELYMAIC }   /* blk=elymaic */,
-  {     8,  8418,   995,   6,   2, -UNI_BIDIM }   /* bidim=no */,
-  {     3,   184,  1780,   3,  20, UNI_CWT }   /* ischangeswhentitlecased */,
-  {    12,  9093,  9650,   4,   3, UNI_OCR }   /* blk=ocr */,
-  {     4,  9647,  8988,   3,   2, UNI_NV__41 }   /* nv=41 */,
-  {     8,  7128,  2368,  10,   2, UNI_LB__HL }   /* wordbreak=hl */,
-  {     9,  9153,  1164,   4,   2, UNI_LB__LF }   /* gcb=lf */,
-  {     8,  8886,  8108,   4,   6, UNI_SC__KNDA }   /* sc=kannada */,
-  {     0,  9113,  7763,   4,   2, UNI_CCC__19 }   /* ccc=19 */,
-  {     1,  9647,  9029,   3,   4, UNI_NV__3_SLASH_64 }   /* nv=3/64 */,
-  {     0,  2148,  7059,   3,   9, UNI_SMALLFORMS }   /* insmallforms */,
-  {     2,  8684,     3,   5,   1, -UNI_POSIXXDIGIT }   /* ahex=f */,
-  {    12,  9093,  2930,   4,  18, UNI_CHEROKEESUP }   /* blk=cherokeesupplement */,
-  {     0,  5565,  5129,  13,  14, UNI_JG__MANICHAEANKAPH }   /* joininggroup=manichaeankaph */,
-  {    17,  9093,  4252,   4,  15, UNI_ARABICEXTA }   /* blk=arabicextendeda */,
-  {     5,  8233,  7980,   7,   8, UNI_UGAR }   /* script=ugaritic */,
-  {     1,  8160,  2629,   4,  17, UNI_ENCLOSEDALPHANUMSUP }   /* inenclosedalphanumsup */,
-  {     0,  9093,  1188,   4,  26, UNI_KATAKANAEXT }   /* blk=katakanaphoneticextensions */,
-  {     0,  8869,     0,   5,   0, UNI_idsb_values_index }   /* idsb= */,
-  {     1,  9093,  1576,   4,  23, UNI_GEOMETRICSHAPESEXT }   /* blk=geometricshapesextended */,
-  {     3,  9605,  9461,   3,   4, UNI_EA__F }   /* dt=wide */,
-  {     0,  5760,  7724,  13,   8, UNI_NV__4_SLASH_5 }   /* numericvalue=8.00e-01 */,
-  {    20,  8508,    26,   6,   1, UNI_GREXT }   /* grext=y */,
-  {     3,  9093,  8628,   4,   6, UNI_INTHAANA }   /* blk=thaana */,
-  {     1,   184,  3852,   2,  16, UNI_PF }   /* isfinalpunctuation */,
-  {     1,  9113,  9545,   4,   3, UNI_CCC__IS }   /* ccc=240 */,
-  {     1,  8884,  7972,   5,   8, UNI_INSC__TONEMARK }   /* insc=tonemark */,
-  {     1,  8886,  8859,   3,   4, UNI_SC__DOGR }   /* sc=dogr */,
-  {     4,  9365,  8550,   4,   4, UNI_LEPC }   /* scx=lepc */,
-  {     3,  6918,  4877,  10,  14, UNI_LB__SA }   /* linebreak=complexcontext */,
-  {     0,  3671,  9213,  17,   4, UNI_LANA }   /* scriptextensions=lana */,
-  {     1,  3671,  6724,  18,   3, UNI_SYLO }   /* scriptextensions=sylo */,
-  {    11,  1768,     0,   5,   0, UNI_XPOSIXLOWER }   /* lower */,
-  {     1,  5085,     0,  12,   0, UNI_INMANICHAEAN }   /* inmanichaean */,
-  {     1,  7365,     0,   9,   0, UNI_PAUC }   /* paucinhau */,
-  {     0,  8617,     0,   5,   0, UNI_term_values_index }   /* term= */,
-  {    11,  9731,  5346,   3,   2, UNI_WB__EB }   /* wb=eb */,
-  {     0,  8634,    26,   6,   1, UNI_UIDEO }   /* uideo=y */,
-  {     0,  8424,  7203,   6,   9, UNI_INBHAIKSUKI }   /* block=bhaiksuki */,
-  {     4,  4462,    36,  15,   1, UNI_GREXT }   /* graphemeextend=t */,
-  {     0,  8233,  8205,   7,   7, UNI_OSMA }   /* script=osmanya */,
-  {     1,  3671,  8205,  17,   4, UNI_OSMA }   /* scriptextensions=osma */,
-  {     0,  9093,  8679,   4,   5, UNI_INADLAM }   /* blk=adlam */,
-  {    10,  8705,  7814,   4,   6, UNI_INDUPLOYAN }   /* induployan */,
-  {     0,  8424,  7844,   6,   8, UNI_INGUJARATI }   /* block=gujarati */,
-  {    14,  9365,  9285,   4,   4, UNI_NKO }   /* scx=nkoo */,
-  {    12,  9417,     0,   4,   0, UNI_TFNG }   /* tfng */,
-  {    15,  8233,  4205,   8,   5, UNI_SC__SYRC }   /* script=syriac */,
-  {     2,  4580,  2171,   4,  12, UNI_MEETEIMAYEKEXT }   /* inmeeteimayekext */,
-  {     1,  3671,  2353,  17,  20, UNI_PHLI }   /* scriptextensions=inscriptionalpahlavi */,
-  {     9,  9647,  7476,   3,   8, UNI_NV__3_SLASH_20 }   /* nv=1.50e-01 */,
-  {     0,  9237,     3,   4,   1, -UNI_LOE }   /* loe=f */,
-  {     8,  3671,  7311,  17,   9, UNI_TALU }   /* scriptextensions=newtailue */,
-  {     1,  1362,  7507,  24,   2, UNI_CCC__12 }   /* canonicalcombiningclass=12 */,
-  {     1,  8424,   114,   7,  34, UNI_DIACRITICALSFORSYMBOLS }   /* block=combiningdiacriticalmarksforsymbols */,
-  {     0,  8886,  7048,   3,   4, UNI_SAUR }   /* sc=saur */,
-  {     0,  8332,  3417,   3,  16, UNI_ALCHEMICAL }   /* isalchemicalsymbols */,
-  {     1,  9233,     0,   4,   0, UNI_LISU }   /* lisu */,
-  {     1,  2589,     0,  11,   0, UNI_COUNTINGROD }   /* countingrod */,
-  {     3,  8886,  7356,   3,   9, UNI_PALM }   /* sc=palmyrene */,
-  {     0,  1911,  1214,  22,   9, UNI_INSC__CONSONANT }   /* indicsyllabiccategory=consonant */,
-  {     0,   184,  3996,   2,  16, UNI_LINEARBSYLLABARY }   /* islinearbsyllabary */,
-  {     0,  9647,  7484,   3,   8, UNI_NV__1_SLASH_64 }   /* nv=1.56e-02 */,
-  {     0,  9650,     0,   3,   0, UNI_OCR }   /* ocr */,
-  {     1,  3951,  2149,   3,  20, UNI_PRTI }   /* isinscriptionalparthian */,
-  {     9,  8899,  8864,   5,   5, -UNI_MATH }   /* math=false */,
-  {     8,  1924,     0,  10,   0, UNI_L }   /* category=l */,
-  {     0,  8871,     0,   3,   0, UNI_sb_values_index }   /* sb= */,
-  {    20,  8424,  3038,   6,  11, UNI_ETHIOPICSUP }   /* block=ethiopicsup */,
-  {     0,  9093,  5734,   4,  13, UNI_MISCTECHNICAL }   /* blk=misctechnical */,
-  {     5,  7128,  6668,  10,  11, UNI_WB__SQ }   /* wordbreak=singlequote */,
-  {    11,  7025,  7612,   3,   3, UNI_IN__4_DOT_1 }   /* in=4.1 */,
-  {     0,  8424,   837,   6,  18, UNI_PHONETICEXT }   /* block=phoneticextensions */,
-  {     9,  8849,  9734,   5,   3, UNI_CWCM }   /* cwcm=yes */,
-  {     5,  3469,     0,   4,   0, UNI_UCAS }   /* ucas */,
-  {     0,  5760,  9743,  13,   2, UNI_NV__45 }   /* numericvalue=45 */,
-  {     5,  2930,     0,   8,   0, UNI_CHER }   /* cherokee */,
-  {     6,  1362,  9512,  24,   3, UNI_CCC__202 }   /* canonicalcombiningclass=202 */,
-  {     1,  9093,  2779,   4,   9, UNI_INMONGOLIAN }   /* blk=mongolian */,
-  {    12,  9620,    45,   3,   2, UNI_CO }   /* gc=co */,
-  {     5,  6194,  6244,   3,  11, UNI_INOLDHUNGARIAN }   /* inoldhungarian */,
-  {     1,  8424,  3200,   6,  18, UNI_ORNAMENTALDINGBATS }   /* block=ornamentaldingbats */,
-  {     0,  9620,   400,   3,   6, UNI_CF }   /* gc=format */,
-  {     7,  3002,  9665,  18,   3, UNI_DT__SML }   /* decompositiontype=sml */,
-  {    15,  5565,  5101,  13,  14, UNI_JG__MANICHAEANFIVE }   /* joininggroup=manichaeanfive */,
-  {     0,  8424,  7995,   6,   7, UNI_INAVESTAN }   /* block=avestan */,
-  {     1,  3002,  1362,  18,   9, UNI_DT__CAN }   /* decompositiontype=canonical */,
-  {    17,  9113,  8800,   5,   4, UNI_CCC__31 }   /* ccc=ccc31 */,
-  {     0,  8233,    57,   7,   2, UNI_SC__YI }   /* script=yi */,
-  {     8,  1362,  8469,  24,   3, UNI_CCC__130 }   /* canonicalcombiningclass=130 */,
-  {     2,  9093,  6243,   4,  12, UNI_INOLDHUNGARIAN }   /* blk=oldhungarian */,
-  {    14,  1362,  9521,  24,   3, UNI_CCC__BR }   /* canonicalcombiningclass=222 */,
-  {     2,  9593,   426,   3,   2, UNI_BC__ES }   /* bc=es */,
-  {     3,  4747,     0,  15,   0, UNI_UPPERCASELETTER }   /* uppercaseletter */,
-  {     5,  8275,     0,   7,   0, UNI_SUPPUAB }   /* suppuab */,
-  {     3,  9473,     0,   4,   0, UNI_YI }   /* yiii */,
-  {     6,   184,  3620,   2,   4, UNI_MANI }   /* ismani */,
-  {     3,  9365,  2212,   5,   3, UNI_SINH }   /* scx=sinh */,
-  {     7,  9093,  1188,   4,   8, UNI_INKATAKANA }   /* blk=katakana */,
-  {     2,  9725,  3391,   3,   7, UNI_VO__U }   /* vo=upright */,
-  {     0,  3671,  8114,  17,   7, UNI_KALI }   /* scriptextensions=kayahli */,
-  {     5,  9113,     8,   4,   1, UNI_CCC__A }   /* ccc=a */,
-  {     1,  6194,  4673,   3,  14, UNI_SARB }   /* inoldsoutharabian */,
-  {     0,  8332,    97,   3,   9, UNI_XPOSIXALPHA }   /* isalphabetic */,
-  {     9,  9285,     0,   3,   0, UNI_NKO }   /* nko */,
-  {     2,  3671,  9177,  17,   4, UNI_HANO }   /* scriptextensions=hano */,
-  {    17,  9113,  2920,   4,  10, UNI_CCC__AR }   /* ccc=aboveright */,
-  {     0,  8886,  9109,   3,   4, UNI_CANS }   /* sc=cans */,
-  {     0,  9113,  8830,   5,   4, UNI_CCC__84 }   /* ccc=ccc84 */,
-  {     0,  8424,  7257,   6,   9, UNI_LATINEXTB }   /* block=latinextb */,
-  {     0,  8424,  3900,   6,  16, UNI_HALFANDFULLFORMS }   /* block=halfandfullforms */,
-  {    18,  8886,  2333,   3,   4, UNI_SC__GLAG }   /* sc=glag */,
-  {     3,    21,  8538,   2,   6, UNI_INKHOJKI }   /* inkhojki */,
-  {     0,  3671,  7347,  17,   9, UNI_ORKH }   /* scriptextensions=oldturkic */,
-  {    15,  5760,  8802,  13,   2, UNI_NV__31 }   /* numericvalue=31 */,
-  {     0,  9093,  1851,   4,  16, UNI_INDICNUMBERFORMS }   /* blk=indicnumberforms */,
-  {     6,  9365,  7804,   4,   4, UNI_BUGI }   /* scx=bugi */,
-  {    24,  9365,  9269,   4,   4, UNI_MYMR }   /* scx=mymr */,
-  {     2,  4447,     1,  15,   1, UNI_EA__N }   /* eastasianwidth=n */,
-  {     1,   133,     0,   4,   0, UNI_M }   /* mark */,
-  {     1,  6005,  8024,   3,   6, UNI_CJKEXTC }   /* incjkextc */,
-  {     0,  8617,     1,   5,   1, -UNI_TERM }   /* term=n */,
-  {    12,  6005,   690,   3,  29, UNI_CUNEIFORMNUMBERS }   /* incuneiformnumbersandpunctuation */,
-  {     5,  8886,  8142,   3,   4, UNI_MARC }   /* sc=marc */,
-  {     0,  9093,  1576,   4,  18, UNI_GEOMETRICSHAPESEXT }   /* blk=geometricshapesext */,
-  {     1,  9365,  8065,   4,   4, UNI_ELBA }   /* scx=elba */,
-  {     1,  8886,  6159,   3,  12, UNI_SC__GONM }   /* sc=masaramgondi */,
-  {     0,  8233,  8562,   7,   4, UNI_LYCI }   /* script=lyci */,
-  {     1,  8233,  8514,   7,   6, UNI_HATR }   /* script=hatran */,
-  {     1,   184,  4989,   2,   6, UNI_KANGXI }   /* iskangxi */,
-  {     4,  1362,   184,  24,   2, UNI_CCC__IS }   /* canonicalcombiningclass=is */,
+  {     1,  9488,  4973,   4,  15, UNI_VEDICEXT }   /* blk=vedicextensions */,
+  {     4,  8400,    36,   7,   1, UNI_COMPEX }   /* compex=t */,
+  {     0,  3836,   382,  17,   4, UNI_EGYP }   /* scriptextensions=egyp */,
+  {     1,  9014,    36,   6,   1, UNI_UIDEO }   /* uideo=t */,
+  {     1,  5791,  5179,  13,   7, UNI_JG__HEHGOAL }   /* joininggroup=hehgoal */,
+  {     1,  6205,  9836,  12,   4, UNI_IDEO }   /* ideographic=true */,
+  {     0,  8882,  1025,   6,   2, -UNI_GREXT }   /* grext=no */,
+  {     1,  3259, 10135,  18,   3, UNI_IDSB }   /* idsbinaryoperator=yes */,
+  {     9,  9275,  6463,   5,   6, UNI_LB__ZWJ }   /* insc=joiner */,
+  {     0,   184,    43,   3,  25, UNI_CJKCOMPATIDEOGRAPHS }   /* iscjkcompatibilityideographs */,
+  {     0, 10030,  7258,   3,  10, UNI_JT__U }   /* jt=nonjoining */,
+  {     0,  7318, 10096,  10,   3, UNI_IN__5 }   /* presentin=v50 */,
+  {     4, 10027,  5378,   3,   4, UNI_JG__KAPH }   /* jg=kaph */,
+  {    18, 10048,  5648,   3,  11, UNI_NV__10000000000 }   /* nv=10000000000 */,
+  {     0,  9345,    26,   5,   1, UNI_XIDC }   /* xidc=y */,
+  {     0,  8997, 10135,   5,   3, UNI_TERM }   /* term=yes */,
+  {     5,  8780,  7585,   6,   9, UNI_LATINEXTC }   /* block=latinextc */,
+  {     5, 10030,     0,   3,   0, UNI_jt_values_index }   /* jt= */,
+  {     4,   867,     0,  11,   0, UNI_PHONETICEXT }   /* phoneticext */,
+  {     1,  8780,    43,   7,  15, UNI_CJKCOMPAT }   /* block=cjkcompatibility */,
+  {     1,  3097,  9552,  18,   4, UNI_DT__FONT }   /* decompositiontype=font */,
+  {     0,   184,  8936,   2,   4, UNI_LYCI }   /* islyci */,
+  {     5,  7585,     0,   9,   0, UNI_LATINEXTC }   /* latinextc */,
+  {     0,  9488,  8638,   4,   7, UNI_INTAGALOG }   /* blk=tagalog */,
+  {     3,  9508,  7874,   4,   2, UNI_CCC__23 }   /* ccc=23 */,
+  {    40,  7218,  1751,  10,   2, UNI_LB__AI }   /* linebreak=ai */,
+  {     0,  9508,  9206,   5,   4, UNI_CCC__35 }   /* ccc=ccc35 */,
+  {     0,  9488,  5830,   4,  13, UNI_LOWSURROGATES }   /* blk=lowsurrogates */,
+  {     0,  9488,  7027,   4,  11, UNI_YISYLLABLES }   /* blk=yisyllables */,
+  {     1,  4791,  2247,   4,   9, UNI_INMEETEIMAYEK }   /* inmeeteimayek */,
+  {     8,  6231,  4569,   3,  14, UNI_CURRENCYSYMBOLS }   /* incurrencysymbols */,
+  {     3,  9768,  2817,   4,  19, UNI_MERO }   /* scx=meroitichieroglyphs */,
+  {     1,  8780,  2874,   6,  19, UNI_OTTOMANSIYAQNUMBERS }   /* block=ottomansiyaqnumbers */,
+  {     0, 10048,  7781,   3,   1, UNI_NV__4 }   /* nv=4 */,
+  {     0,  8780,  3937,   6,  16, UNI_BOPOMOFOEXT }   /* block=bopomofoextended */,
+  {     6,  9508,  3564,   4,  13, UNI_CCC__202 }   /* ccc=attachedbelow */,
+  {     1,  7076,  4479,   3,  14, UNI_BRAI }   /* inbraillepatterns */,
+  {     4,  2280,  4306,   3,   4, UNI_C }   /* isother */,
+  {     0,  9488,  8243,   4,   8, UNI_INMAHAJANI }   /* blk=mahajani */,
+  {    17,  8780,   809,   6,  29, UNI_ENCLOSEDIDEOGRAPHICSUP }   /* block=enclosedideographicsupplement */,
+  {     2,  9768,  8243,   4,   8, UNI_MAHJ }   /* scx=mahajani */,
+  {     1,  9492,  4898,   4,   4, UNI_BPT__O }   /* bpt=open */,
+  {     9,  5791,  7048,  13,  10, UNI_JG__AFRICANQAF }   /* joininggroup=africanqaf */,
+  {     0,  4916,  2532,   5,  16, UNI_TERM }   /* isterminalpunctuation */,
+  {     1,  5986,  8714,  13,   6, UNI_NV__300000 }   /* numericvalue=300000 */,
+  {     0,  4116,   415,   3,  10, UNI_IDEO }   /* isideographic */,
+  {    21,  1465,     0,  13,   0, UNI_M }   /* combiningmark */,
+  {     0,  8780,   923,   6,  28, UNI_SUPPUAB }   /* block=supplementaryprivateuseareab */,
+  {     2,  9768,  6481,   4,  12, UNI_HUNG }   /* scx=oldhungarian */,
+  {     2,  1417,  9026,  24,   6, UNI_CCC__9 }   /* canonicalcombiningclass=virama */,
+  {     1,  9277,  7684,   3,   9, UNI_PAUC }   /* sc=paucinhau */,
+  {     1,   184,   951,   2,  17, UNI_VS }   /* isvariationselector */,
+  {     0,   184,  9604,   2,   4, UNI_KHMR }   /* iskhmr */,
+  {    10,  6576,    26,  11,   1, UNI_XPOSIXALPHA }   /* alphabetic=y */,
+  {    11,  7318,  7821,  10,   1, UNI_IN__8 }   /* presentin=8 */,
+  {     1,  3097,   567,  18,   2, UNI_DT__NB }   /* decompositiontype=nb */,
+  {     2,  7325,  9844,   3,   4, UNI_IN__11 }   /* in=v110 */,
+  {     0,  8780,  9320,   6,   5, UNI_INOSAGE }   /* block=osage */,
+  {     0,  4643,  1025,  15,   2, -UNI_ECOMP }   /* emojicomponent=no */,
+  {     8,  3259,  9255,  18,   5, -UNI_IDSB }   /* idsbinaryoperator=false */,
+  {     2,   184,  3341,   2,   8, UNI_DINGBATS }   /* isdingbats */,
+  {     0,   184,  8227,   2,   8, UNI_KANAEXTA }   /* iskanaexta */,
+  {     8,  8780,  8666,   6,   7, UNI_INTIRHUTA }   /* block=tirhuta */,
+  {     1,  8589,  8344,   7,   7, UNI_SC__BENG }   /* script=bengali */,
+  {     0,  5032,     1,  14,   1, -UNI_POSIXXDIGIT }   /* asciihexdigit=n */,
+  {     6,  1417,  9300,  24,   5, UNI_CCC__7 }   /* canonicalcombiningclass=nukta */,
+  {     1, 10298,     0,  10,   0, UNI_POSIXBLANK }   /* posixblank */,
+  {     3, 10009, 10069,   3,   3, UNI_DT__SQR }   /* dt=sqr */,
+  {    67,  8589,  8888,   7,   6, UNI_HATR }   /* script=hatran */,
+  {     0,  2182, 10015,  21,   3, UNI_WB__EB }   /* graphemeclusterbreak=ebg */,
+  {     3,  1417,  5765,  24,  13, UNI_CCC__IS }   /* canonicalcombiningclass=iotasubscript */,
+  {    11,  5003,     0,  15,   0, UNI_ZANB }   /* zanabazarsquare */,
+  {    24,  9277,  8123,   3,   8, UNI_SC__BUGI }   /* sc=buginese */,
+  {     2,  9508,    78,   4,   2, UNI_CCC__AR }   /* ccc=ar */,
+  {     0,  5432,     0,   3,   0, UNI_ANY }   /* any */,
+  {     1,  8589,  9628,   7,   4, UNI_SC__LATN }   /* script=latn */,
+  {     0, 10048,  9428,   3,   4, UNI_NV__3_SLASH_80 }   /* nv=3/80 */,
+  {     1,  7438,     0,  10,   0, UNI_wb_values_index }   /* wordbreak= */,
+  {    10,   184,  6229,   2,   5, UNI_JOINC }   /* isjoinc */,
+  {     1,  9488,  8652,   4,   7, UNI_INTAIVIET }   /* blk=taiviet */,
+  {     0,  8147,    26,   8,   1, UNI_EXTPICT }   /* extpict=y */,
+  {     8, 10048,  9203,   3,   2, UNI_NV__34 }   /* nv=34 */,
+  {     0,  9528,  9255,   4,   5, -UNI_CWU }   /* cwu=false */,
+  {     1,  6553,    26,  12,   1, UNI_XIDC }   /* xidcontinue=y */,
+  {     1,  3836,  6796,  17,  11, UNI_MEDF }   /* scriptextensions=medefaidrin */,
+  {    16,  3836,  2409,  17,  10, UNI_GLAG }   /* scriptextensions=glagolitic */,
+  {     2,  1114,     0,  26,   0, UNI_cwkcf_values_index }   /* changeswhennfkccasefolded= */,
+  {    10,  9508,  9919,   4,   3, UNI_CCC__202 }   /* ccc=202 */,
+  {    11,  8589,  9812,   7,   4, UNI_SC__TAML }   /* script=taml */,
+  {     5,  9444,  7782,   4,   1, UNI_AGE__3 }   /* age=3 */,
+  {     4,   184,  2969,   2,  19, UNI_SUPARROWSC }   /* issupplementalarrowsc */,
+  {     2, 10048,  8082,   3,   2, UNI_NV__19 }   /* nv=19 */,
+  {     1,  6231,    43,   3,   2, UNI_CJK }   /* incjk */,
+  {     0,  5074,     0,  14,   0, UNI_CJKCOMPATFORMS }   /* cjkcompatforms */,
+  {     0,  8435,     0,   7,   0, UNI_grbase_values_index }   /* grbase= */,
+  {     1,  8509,  1035,   4,  25, UNI_ENCLOSEDCJK }   /* inenclosedcjklettersandmonths */,
+  {     3,  9508,  7178,   4,   4, UNI_CCC__6 }   /* ccc=hanr */,
+  {     2,  6253,     0,   5,   0, UNI_KHMR }   /* khmer */,
+  {     0,  8589,  3241,   7,   4, UNI_SC__GEOR }   /* script=geor */,
+  {     8,  9488,  1586,   5,  22, UNI_BYZANTINEMUSIC }   /* blk=byzantinemusicalsymbols */,
+  {     1, 10027,  2637,   3,   9, UNI_JG__YEHBARREE }   /* jg=yehbarree */,
+  {     2, 10027,  5336,   3,   4, UNI_JG__BETH }   /* jg=beth */,
+  {     0,  5986,  9379,  13,   2, UNI_NV__41 }   /* numericvalue=41 */,
+  {     0,  7218,  8680,  10,   7, UNI_LB__XX }   /* linebreak=unknown */,
+  {     4,  4658,  1025,  15,   2, -UNI_GREXT }   /* graphemeextend=no */,
+  {     1,  8876,     0,   6,   0, UNI_GOTH }   /* gothic */,
+  {     2,  7410,     0,   8,   0, UNI_ASSIGNED }   /* assigned */,
+  {     1,  2912,     0,   9,   0, UNI_SUND }   /* sundanese */,
+  {     2,  8780,  8638,   6,   7, UNI_INTAGALOG }   /* block=tagalog */,
+  {     0,  7318,  9848,  10,   4, UNI_IN__12 }   /* presentin=v120 */,
+  {     1,  1417,  9168,  24,   2, UNI_CCC__27 }   /* canonicalcombiningclass=27 */,
+  {     3,   923,     0,  28,   0, UNI_SUPPUAB }   /* supplementaryprivateuseareab */,
+  {     2,  9488,  2409,   4,  13, UNI_GLAGOLITICSUP }   /* blk=glagoliticsup */,
+  {     5,    21,  6253,   2,   5, UNI_INKHMER }   /* inkhmer */,
+  {     0,  5986,  7859,  13,   6, UNI_NV__200000 }   /* numericvalue=200000 */,
+  {     0,  4989,     1,   3,  33, UNI_UCAS }   /* isunifiedcanadianaboriginalsyllabics */,
+  {     2,  9520,     3,   4,   1, -UNI_CWL }   /* cwl=f */,
+  {     4,  9768,     7,   4,  18, UNI_CANS }   /* scx=canadianaboriginal */,
+  {     6,  8780,  7657,   6,   9, UNI_INOLDPERMIC }   /* block=oldpermic */,
+  {     1,  3581,     0,  17,   0, UNI_UCAS }   /* canadiansyllabics */,
+  {     0,  7325, 10123,   3,   3, UNI_IN__9 }   /* in=v90 */,
+  {     0,  4791,  4274,   3,  15, UNI_MYANMAREXTA }   /* inmyanmarextendeda */,
+  {     2,  1979,    24,  10,   1, UNI_LOWERCASELETTER }   /* category=ll */,
+  {     3,  3133,     0,  13,   0, UNI_EMOD }   /* emojimodifier */,
+  {    85,  9277,  8421,   3,   7, UNI_ELYM }   /* sc=elymaic */,
+  {     0,  8780,  1631,   6,  23, UNI_GEOMETRICSHAPESEXT }   /* block=geometricshapesextended */,
+  {     9,  5578,  4305,  14,   5, UNI_SB__XX }   /* sentencebreak=other */,
+  {     2,  8688,    80,   4,   8, UNI_ARABICMATH }   /* isarabicmath */,
+  {     0, 10030,    18,   3,   1, UNI_JT__R }   /* jt=r */,
+  {    33, 10012,    66,   3,   1, UNI_EA__H }   /* ea=h */,
+  {     5,  3836,  8604,  18,   6, UNI_SHAW }   /* scriptextensions=shavian */,
+  {     2,  9488,  2469,   4,  20, UNI_INNYIAKENGPUACHUEHMONG }   /* blk=nyiakengpuachuehmong */,
+  {     0,  6231,    43,   3,  25, UNI_CJKCOMPATIDEOGRAPHS }   /* incjkcompatibilityideographs */,
+  {     0,  3836,  2608,  17,   6, UNI_BRAH }   /* scriptextensions=brahmi */,
+  {     1, 10048,  9916,   3,   3, UNI_NV__2_SLASH_5 }   /* nv=2/5 */,
+  {     0,  9277,  9888,   3,   4, UNI_ZANB }   /* sc=zanb */,
+  {     0,  8509,   751,   4,  14, UNI_ENCLOSEDALPHANUM }   /* inenclosedalphanum */,
+  {     5, 10033,  5536,   3,  14, UNI_LB__PO }   /* lb=postfixnumeric */,
+  {     0,  7739,  9836,   8,   4, UNI_IDS }   /* idstart=true */,
+  {     4, 10033,  4538,   3,  15, UNI_LB__CB }   /* lb=contingentbreak */,
+  {    18,  9277,  9644,   3,   4, UNI_MEDF }   /* sc=medf */,
+  {    18,  9556,   125,   4,   2, UNI_LB__CR }   /* gcb=cr */,
+  {     3,  3836,  8611,  18,   6, UNI_SIDD }   /* scriptextensions=siddham */,
+  {     3,  6265,     0,  12,   0, UNI_NL }   /* letternumber */,
+  {    33,   184,   316,   2,  33, UNI_SUPMATHOPERATORS }   /* issupplementalmathematicaloperators */,
+  {     1,  9997,  5130,   3,  14, UNI_BC__EN }   /* bc=europeannumber */,
+  {    14,  9488,  7138,   4,  10, UNI_COMPATJAMO }   /* blk=compatjamo */,
+  {     0,  8780,  8498,   6,   7, UNI_INMULTANI }   /* block=multani */,
+  {     2,  9768,  8666,   4,   4, UNI_TIRH }   /* scx=tirh */,
+  {     2,  8780,  1018,   6,   5, UNI_MUSIC }   /* block=music */,
+  {     3,  9488,  3115,   4,  13, UNI_DEVANAGARIEXT }   /* blk=devanagariext */,
+  {     1,  9277,  6972,   3,  11, UNI_SC__SYLO }   /* sc=sylotinagri */,
+  {     0,  3836,  7660,  17,   4, UNI_PERM }   /* scriptextensions=perm */,
+  {     0,  8589,  8337,   7,   7, UNI_AVST }   /* script=avestan */,
+  {     4,  8589,  8456,   7,   7, UNI_SC__KNDA }   /* script=kannada */,
+  {     6,  9768,  9560,   4,   4, UNI_GONG }   /* scx=gong */,
+  {     0,  9768,  9660,   4,   4, UNI_MLYM }   /* scx=mlym */,
+  {     0,  2280,  6323,   3,   3, UNI_OGAM }   /* isogam */,
+  {     0,  8780,  7567,   6,   9, UNI_INKHUDAWADI }   /* block=khudawadi */,
+  {     0,  9277,  7168,   3,  10, UNI_DIAK }   /* sc=divesakuru */,
+  {     0,  7318, 10099,  10,   3, UNI_IN__5_DOT_1 }   /* presentin=v51 */,
+  {     3,  8589,  8561,   7,   7, UNI_OSMA }   /* script=osmanya */,
+  {     1,  8780,   951,   6,  18, UNI_INVS }   /* block=variationselectors */,
+  {     9,  2665,     0,  19,   0, UNI_COUNTINGROD }   /* countingrodnumerals */,
+  {     0,  8688,    97,   3,   9, UNI_XPOSIXALPHA }   /* isalphabetic */,
+  {     3,  3374,     0,  11,   0, UNI_wspace_values_index }   /* whitespace= */,
+  {     8,  9277,    18,   6,   1, UNI_KHAR }   /* sc=khar */,
+  {     2,  6231,   115,   4,  23, UNI_DIACRITICALS }   /* incombiningdiacriticalmarks */,
+  {    16,  9640,    36,   4,   1, UNI_LOE }   /* loe=t */,
+  {     9,  1591,   383,   3,  31, UNI_EGYPTIANHIEROGLYPHFORMATCONTROLS }   /* inegyptianhieroglyphformatcontrols */,
+  {    20,  9488,  2140,   4,  18, UNI_CYRILLICSUP }   /* blk=cyrillicsupplement */,
+  {     2,  8780,  2666,   7,  10, UNI_COUNTINGROD }   /* block=countingrod */,
+  {     5,  8589,  8315,   7,   8, UNI_UGAR }   /* script=ugaritic */,
+  {     0,  5986,  8738,  13,   6, UNI_NV__600000 }   /* numericvalue=600000 */,
+  {    14,  1537,  2555,  24,  14, UNI_INPC__BOTTOMANDRIGHT }   /* indicpositionalcategory=bottomandright */,
+  {    18,  8780,  7576,   6,   9, UNI_LATINEXTB }   /* block=latinextb */,
+  {     1, 10296,   467,   7,   5, UNI_POSIXPUNCT }   /* isposixpunct */,
+  {     2,  9020,  9255,   6,   5, -UNI_XPOSIXUPPER }   /* upper=false */,
+  {     1,  4049,     0,  11,   0, UNI_GEORGIANEXT }   /* georgianext */,
+  {     7,  3025,     0,   8,   0, UNI_CHER }   /* cherokee */,
+  {     0,  8589,  9592,   7,   4, UNI_HMNP }   /* script=hmnp */,
+  {     4, 10048,  7987,   3,   8, UNI_NV__5_SLASH_8 }   /* nv=6.25e-01 */,
+  {     0, 10033,  1140,   3,  26, UNI_LB__CJ }   /* lb=conditionaljapanesestarter */,
+  {     0,  6241,  6708,  12,  11, UNI_JT__C }   /* joiningtype=joincausing */,
+  {     0,  2122,     0,   7,   0, UNI_RADICAL }   /* radical */,
+  {     0,  3836,  3025,  17,   4, UNI_CHER }   /* scriptextensions=cher */,
+  {     0, 10027,  5620,   3,  14, UNI_JG__HAMZAONHEHGOAL }   /* jg=tehmarbutagoal */,
+  {     0,  7068,     0,  10,   0, UNI_ASCII }   /* basiclatin */,
+  {     0,  3836,  9335,  17,   5, UNI_TAKR }   /* scriptextensions=takri */,
+  {     9,   328,     0,  21,   0, UNI_MATHOPERATORS }   /* mathematicaloperators */,
+  {     0,    21,  1218,   2,   8, UNI_INKATAKANA }   /* inkatakana */,
+  {     2,   184,  6086,   3,  11, UNI_CHESSSYMBOLS }   /* ischesssymbols */,
+  {    37, 10012,     0,   3,   0, UNI_ea_values_index }   /* ea= */,
+  {     1,  5324,  6387,   4,  10, UNI_INMASARAMGONDI }   /* inmasaramgondi */,
+  {     0,  8589,  7684,   7,   4, UNI_PAUC }   /* script=pauc */,
+  {    16,  2140,     0,  11,   0, UNI_CYRILLICSUP }   /* cyrillicsup */,
+  {     1,  5986, 10138,  13,   2, UNI_NV__38 }   /* numericvalue=38 */,
+  {     3,  9488,  4097,   4,  16, UNI_HIGHPUSURROGATES }   /* blk=highpusurrogates */,
+  {     1,  9488,  8124,   5,   7, UNI_INBUGINESE }   /* blk=buginese */,
+  {     5,   184,   382,   2,   4, UNI_EGYP }   /* isegyp */,
+  {     2,  8780,  3683,   6,  11, UNI_ETHIOPICEXT }   /* block=ethiopicext */,
+  {    43,  1552,  5498,  10,  10, UNI_MC }   /* category=spacingmark */,
+  {     4, 10048,  8750,   3,   3, UNI_NV__800 }   /* nv=800 */,
+  {     1,  3529,     3,  18,   1, -UNI_VS }   /* variationselector=f */,
+  {    12,  9768,  9002,   4,   4, UNI_TELU }   /* scx=telu */,
+  {     0,  7028,     2,   3,   1, UNI_YI }   /* isyi */,
+  {     0,  9528,  1025,   4,   2, -UNI_CWU }   /* cwu=no */,
+  {     1,  4643,     1,  15,   1, -UNI_ECOMP }   /* emojicomponent=n */,
+  {     0, 10009,  1294,   3,   5, UNI_DT__SUP }   /* dt=super */,
+  {     1,  9524,    36,   4,   1, UNI_CWT }   /* cwt=t */,
+  {    27,  8589,  3937,   7,   4, UNI_SC__BOPO }   /* script=bopo */,
+  {     1,  7088,  5130,  10,  14, UNI_BC__EN }   /* bidiclass=europeannumber */,
+  {     0, 10291,  5718,   5,   5, UNI_POSIXALNUM }   /* posixalnum */,
+  {    14,  8858,  1025,   6,   2, -UNI_ECOMP }   /* ecomp=no */,
+  {    25,  8780,  1879,   7,  18, UNI_CJKCOMPATIDEOGRAPHS }   /* block=cjkcompatideographs */,
+  {     3,  8780,   510,   7,  19, UNI_CJK }   /* block=cjkunifiedideographs */,
+  {     1,  4001,     0,   7,   0, UNI_CPRT }   /* cypriot */,
+  {     1,  5986,  9055,  13,   3, UNI_NV__1_SLASH_3 }   /* numericvalue=1/3 */,
+  {     9,  9997,  6493,   3,  12, UNI_BC__ON }   /* bc=otherneutral */,
+  {    15,  9508,  6642,   4,  11, UNI_CCC__DB }   /* ccc=doublebelow */,
+  {     6,  8780,  9684,   6,   4, UNI_INNEWA }   /* block=newa */,
+  {     0, 10033,    21,   3,   2, UNI_LB__IN }   /* lb=in */,
+  {     2,  1537,  2549,  24,   3, UNI_INPC__TOP }   /* indicpositionalcategory=top */,
+  {    28,  4017,     0,  16,   0, UNI_PF }   /* finalpunctuation */,
+  {     0,  8996,    26,   6,   1, UNI_STERM }   /* sterm=y */,
+  {     3,  8780,  1060,   6,  27, UNI_OCR }   /* block=opticalcharacterrecognition */,
+  {     5, 10333,  8611,   3,   3, UNI_SIDD }   /* issidd */,
+  {     0,  2140,     0,   8,   0, UNI_CYRL }   /* cyrillic */,
+  {     0, 10048,  7782,   3,   1, UNI_NV__3 }   /* nv=3 */,
+  {     4,  9997,  3773,   3,   3, UNI_BC__RLI }   /* bc=rli */,
+  {     2,  3836,  3785,  17,   4, UNI_MANI }   /* scriptextensions=mani */,
+  {     1, 10126,     0,   3,   1, UNI_VO__U }   /* vo=u */,
+  {     2,   184,  5497,   2,  11, UNI_MC }   /* isspacingmark */,
+  {     2,  2779,    26,  19,   1, UNI_IDST }   /* idstrinaryoperator=y */,
+  {     3,   184,  2855,   2,  19, UNI_MONGOLIANSUP }   /* ismongoliansupplement */,
+  {     2, 10033,  8236,   4,   7, UNI_LB__LF }   /* lb=linefeed */,
+  {    38,  1768,     0,  22,   0, UNI_cwcf_values_index }   /* changeswhencasefolded= */,
+  {    18, 10333,    47,   3,   1, UNI_SM }   /* issm */,
+  {     0,   908,     0,  14,   0, UNI_PUA }   /* privateusearea */,
   {     1,   184,   510,   3,  29, UNI_CJKEXTA }   /* iscjkunifiedideographsextensiona */,
-  {    22,  9647,  8985,   3,   3, UNI_NV__1_SLASH_6 }   /* nv=1/6 */,
-  {     0,  4140,     0,   5,   0, UNI_C }   /* other */,
-  {     1,  2148,  2212,   3,  20, UNI_SINHALAARCHAICNUMBERS }   /* insinhalaarchaicnumbers */,
-  {     3,  8424,  1856,   6,  11, UNI_NUMBERFORMS }   /* block=numberforms */,
-  {     4,  3671,  8241,  18,   6, UNI_SHRD }   /* scriptextensions=sharada */,
-  {     1,  9093,  2333,   4,  10, UNI_INGLAGOLITIC }   /* blk=glagolitic */,
-  {     3,  8072,     0,   4,   0, UNI_ELYM }   /* elym */,
-  {     0,  9608,     8,   3,   1, UNI_EA__A }   /* ea=a */,
-  {     0,  9946,  9386,   3,   3, UNI_SHRD }   /* isshrd */,
-  {     0,  1362,    16,  24,   1, UNI_CCC__B }   /* canonicalcombiningclass=b */,
-  {     3,  9623,  3654,   3,  17, UNI_JG__MANICHAEANTHAMEDH }   /* jg=manichaeanthamedh */,
-  {     7,  9093,  3603,   4,  17, UNI_LETTERLIKESYMBOLS }   /* blk=letterlikesymbols */,
-  {     0,   184,  2086,   3,   7, UNI_CYRL }   /* iscyrillic */,
-  {     0,  1243,  9433,  21,   4, UNI_CE }   /* compositionexclusion=true */,
-  {     0,  7185,     0,   9,   0, UNI_ARABICPFA }   /* arabicpfa */,
-  {     0,  7419,  8864,   9,   5, -UNI_XIDS }   /* xidstart=false */,
-  {    40,  7025,  7436,   3,   3, UNI_IN__1_DOT_1 }   /* in=1.1 */,
-  {     1,  8424,   719,   6,  16, UNI_ENCLOSEDALPHANUM }   /* block=enclosedalphanum */,
-  {     0,  9097,     0,   4,   0, UNI_bpt_values_index }   /* bpt= */,
-  {     3,    21,  7118,   2,  10, UNI_INWARANGCITI }   /* inwarangciti */,
-  {     0,  3128,  9433,  18,   4, UNI_IDSB }   /* idsbinaryoperator=true */,
-  {     0,  8233,  9409,   7,   4, UNI_SC__TAML }   /* script=taml */,
-  {     0,  9365,  9101,   4,   4, UNI_BUHD }   /* scx=buhd */,
-  {    10,  8886,  9241,   3,   4, UNI_MEDF }   /* sc=medf */,
-  {     0,  9623,  4567,   3,  15, UNI_JG__MANICHAEANZAYIN }   /* jg=manichaeanzayin */,
-  {     6,  7018,  7159,  10,   3, UNI_IN__5 }   /* presentin=5.0 */,
-  {     0,  3868,  1508,  16,   2, UNI_PS }   /* generalcategory=ps */,
-  {     1,  3671,  9249,  17,   4, UNI_MERC }   /* scriptextensions=merc */,
-  {     1,  8051,     3,   7,   1, -UNI_COMPEX }   /* compex=f */,
-  {     0,  8424,  8924,   6,   5, UNI_INORIYA }   /* block=oriya */,
-  {     0,  9623,  6756,   3,  11, UNI_JG__YEHWITHTAIL }   /* jg=yehwithtail */,
-  {     1,  8496,     3,   6,   1, -UNI_CWKCF }   /* cwkcf=f */,
-  {     0,  7128,    72,  10,   2, UNI_WB__LE }   /* wordbreak=le */,
-  {     1,  9647,  9517,   3,   2, UNI_NV__42 }   /* nv=42 */,
-  {     1,  7018,  9683,  10,   3, UNI_IN__3_DOT_1 }   /* presentin=v31 */,
-  {     1,  9662,    36,   3,   1, UNI_SD }   /* sd=t */,
-  {     0,  8114,     0,   7,   0, UNI_KALI }   /* kayahli */,
-  {    19,  5760,  7556,  13,   8, UNI_NV__1_SLASH_32 }   /* numericvalue=3.13e-02 */,
-  {     0,  2204,  7331,   4,   7, UNI_ITAL }   /* isolditalic */,
-  {     1,  9093,  4220,   4,   6, UNI_INTANGUT }   /* blk=tangut */,
-  {     3,  9113,  7459,   4,   2, UNI_CCC__21 }   /* ccc=21 */,
-  {     5,  8424,  2760,   6,  19, UNI_MODIFIERTONELETTERS }   /* block=modifiertoneletters */,
-  {     9,  9620,  1036,   3,   2, UNI_CASEDLETTER }   /* gc=lc */,
-  {    18,  8424,  2513,   6,  19, UNI_ANCIENTGREEKNUMBERS }   /* block=ancientgreeknumbers */,
-  {     3,  3671,  8914,  17,   5, UNI_NSHU }   /* scriptextensions=nushu */,
-  {    77,  9153,  5944,   5,  11, UNI_WB__EB }   /* gcb=glueafterzwj */,
-  {     3,  8886,  7964,   3,   8, UNI_TFNG }   /* sc=tifinagh */,
-  {     0,  2684,     0,  19,   0, UNI_hst_values_index }   /* hangulsyllabletype= */,
-  {     0,  8424,  2931,   7,   7, UNI_INCHEROKEE }   /* block=cherokee */,
-  {     0,  8508,     3,   6,   1, -UNI_GREXT }   /* grext=f */,
-  {    16,  3671,  8562,  17,   4, UNI_LYCI }   /* scriptextensions=lyci */,
-  {     0,  9113,  4701,   4,   2, UNI_CCC__0 }   /* ccc=nr */,
-  {    21,  6918,  5953,  10,   2, UNI_LB__WJ }   /* linebreak=wj */,
-  {     2,  8616,     0,   5,   0, UNI_STERM }   /* sterm */,
-  {    16,   184,     0,   3,   0, UNI_C }   /* isc */,
-  {     1,  9623,  6536,   3,  11, UNI_JG__MALAYALAMJA }   /* jg=malayalamja */,
-  {    16,  4361,  1578,   4,  21, UNI_GEOMETRICSHAPESEXT }   /* ingeometricshapesextended */,
-  {    16,  8886,  9185,   3,   4, UNI_HMNG }   /* sc=hmng */,
-  {    14,  1158,  2022,   3,  14, UNI_TRANSPORTANDMAP }   /* intransportandmap */,
-  {    20,  8886,  9353,   3,   4, UNI_RUNR }   /* sc=runr */,
-  {     1,  9093,  8107,   4,   7, UNI_INKANNADA }   /* blk=kannada */,
-  {     5,  9093,  6316,   4,   3, UNI_INIDC }   /* blk=idc */,
-  {    13,  3671,  8262,  18,   3, UNI_SOYO }   /* scriptextensions=soyo */,
-  {     6,  9093,   878,   4,  10, UNI_PUA }   /* blk=privateuse */,
-  {     4,  8924,     0,   5,   0, UNI_ORYA }   /* oriya */,
-  {     5,  9620,  4507,   3,  15, UNI_LOWERCASELETTER }   /* gc=lowercaseletter */,
-  {     3,  3948,   922,   3,  27, UNI_VSSUP }   /* invariationselectorssupplement */,
-  {     0,  4705,  8304,   3,   6, UNI_TIBT }   /* istibetan */,
-  {     1,  3671,  9085,  17,   4, UNI_BATK }   /* scriptextensions=batk */,
-  {    30,  1497,     0,   9,   0, UNI_gc_values_index }   /* category= */,
-  {     4,  8556,     3,   6,   1, -UNI_XPOSIXLOWER }   /* lower=f */,
-  {     0,  7025,  9437,   3,   4, UNI_IN__10 }   /* in=v100 */,
-  {     0,  5760,  8388,  13,   4, UNI_NV__7000 }   /* numericvalue=7000 */,
-  {     0,  8233,  7332,   7,   4, UNI_ITAL }   /* script=ital */,
-  {     1,  8886,  9285,   3,   3, UNI_NKO }   /* sc=nko */,
-  {    17,  9605,  2204,   3,   3, UNI_DT__ISO }   /* dt=iso */,
-  {     0,  9901,  6316,   3,   3, UNI_XIDC }   /* isxidc */,
-  {     0,  9620,  6039,   3,  12, UNI_NL }   /* gc=letternumber */,
-  {     0,  5269,   995,  14,   2, -UNI_PATSYN }   /* patternsyntax=no */,
-  {     2,  9113,  9527,   4,   3, UNI_CCC__R }   /* ccc=226 */,
-  {     0,  8051,     0,   7,   0, UNI_compex_values_index }   /* compex= */,
-  {     0,  2148,  1669,   3,  22, UNI_SUPPUNCTUATION }   /* insupplementalpunctuation */,
-  {     7,  8424,  6767,   6,  11, UNI_YISYLLABLES }   /* block=yisyllables */,
-  {     2,  9731,  7284,   3,   9, UNI_WB__ML }   /* wb=midletter */,
-  {    23,  8886,  7302,   3,   9, UNI_NBAT }   /* sc=nabataean */,
-  {     0,  9365,  4946,   4,   4, UNI_CHAM }   /* scx=cham */,
-  {    16,  1955,     0,  22,   0, UNI_MISCTECHNICAL }   /* miscellaneoustechnical */,
-  {     0,  1362,  7435,  24,   2, UNI_CCC__11 }   /* canonicalcombiningclass=11 */,
-  {     4,  9781,  6316,   6,   6, UNI__PERL_IDCONT }   /* _perl_idcont */,
-  {    21,   184,  3884,   2,  16, UNI_GEORGIANEXT }   /* isgeorgianextended */,
-  {     2,  1362,  6818,  24,  10, UNI_CCC__BR }   /* canonicalcombiningclass=belowright */,
-  {     0,  3671,  6898,  17,   4, UNI_KHAR }   /* scriptextensions=khar */,
-  {    17,  1691,    17,  22,   1, UNI_BPT__O }   /* bidipairedbrackettype=o */,
-  {     6,  8854,    36,   5,   1, UNI_DASH }   /* dash=t */,
-  {     0,  2142,    16,   3,   1, UNI_NB }   /* innb */,
-  {     1,   184,  4092,   2,  16, UNI_MISCMATHSYMBOLSB }   /* ismiscmathsymbolsb */,
-  {     0,  3671,  3467,  17,  17, UNI_AGHB }   /* scriptextensions=caucasianalbanian */,
-  {     2,  5213,  8904,  14,   5, UNI_NFCQC__M }   /* nfcquickcheck=maybe */,
-  {     0,   184,  3772,   2,  11, UNI_BOPOMOFOEXT }   /* isbopomofoext */,
-  {     3,  9217,     0,   4,   0, UNI_LAO }   /* laoo */,
-  {     3,  2148,  2856,   3,  18, UNI_SUPARROWSA }   /* insupplementalarrowsa */,
-  {     1,  8233,  4672,   7,  15, UNI_SARB }   /* script=oldsoutharabian */,
-  {     3,  9093,   183,   4,  20, UNI_MISCSYMBOLS }   /* blk=miscellaneoussymbols */,
-  {     1,  9731,  7293,   3,   6, UNI_WB__MN }   /* wb=midnum */,
-  {     3,  3868,  3852,  16,  16, UNI_PF }   /* generalcategory=finalpunctuation */,
-  {     5,  2106,    18,  21,   2, UNI_RI }   /* graphemeclusterbreak=ri */,
-  {     0,  8886,  9157,   3,   4, UNI_SC__GONG }   /* sc=gong */,
-  {     1,  2204,  1031,   3,  26, UNI_OCR }   /* isopticalcharacterrecognition */,
-  {     3,   184,  1239,   2,  24, UNI_COMPEX }   /* isfullcompositionexclusion */,
-  {     8,  3293,     1,   3,  33, UNI_UCAS }   /* inunifiedcanadianaboriginalsyllabics */,
-  {    10,  4778,  1813,   3,   8, UNI_XPOSIXUPPER }   /* isuppercase */,
-  {     5,  9365,  7796,   4,   4, UNI_BASS }   /* scx=bass */,
-  {     2,  9093,   893,   4,  28, UNI_SUPPUAB }   /* blk=supplementaryprivateuseareab */,
-  {     0,  5760,  9745,  13,   2, UNI_NV__46 }   /* numericvalue=46 */,
-  {     0,  9153,  7820,   4,   8, UNI_WB__EB }   /* gcb=ebasegaz */,
-  {    11,  8233,   835,  10,   1, UNI_SHAW }   /* script=shaw */,
-  {     2,  5760,  5409,  13,   4, UNI_NV__1000 }   /* numericvalue=1000 */,
-  {     1,  8233,  5955,   7,  12, UNI_SC__GONG }   /* script=gunjalagondi */,
-  {     1,  9728,     1,   3,   1, -UNI_VS }   /* vs=n */,
-  {     0,  5760,  9001,  13,   4, UNI_NV__11_SLASH_2 }   /* numericvalue=11/2 */,
-  {     2,   184,   567,   2,   2, UNI_NB }   /* isnb */,
-  {    11,  9623,  7828,   3,   8, UNI_JG__FARSIYEH }   /* jg=farsiyeh */,
-  {     0,  8233,  4267,   7,   4, UNI_BAMU }   /* script=bamu */,
-  {     0,  2142,  9282,   3,   3, UNI_INNEWA }   /* innewa */,
-  {     8,   184,  6183,   2,   4, UNI_MEND }   /* ismend */,
-  {     0,  9383,  8242,   4,   5, UNI_INSHARADA }   /* insharada */,
-  {     1,  8233,  8484,   7,   6, UNI_SC__CAKM }   /* script=chakma */,
-  {     0,  5565,  6135,  13,  12, UNI_JG__MALAYALAMTTA }   /* joininggroup=malayalamtta */,
-  {     0,  8219,  9433,   7,   4, UNI_PATSYN }   /* patsyn=true */,
-  {    11,   184,  3705,   2,  17, UNI_SMALLFORMS }   /* issmallformvariants */,
-  {     1,  9731,  7825,   3,   3, UNI_WB__EB }   /* wb=gaz */,
-  {     0,  1159,  5678,   3,   4, UNI_NV__NAN }   /* nt=none */,
-  {     0,  9647,  8674,   3,   5, UNI_NV__11_SLASH_12 }   /* nv=11/12 */,
-  {     0,   184,  3210,   2,   8, UNI_DINGBATS }   /* isdingbats */,
-  {     8,  5760,  7748,  13,   8, UNI_NV__17_SLASH_2 }   /* numericvalue=8.50e+00 */,
-  {     0,  5085,  5723,   4,  11, UNI_MAYANNUMERALS }   /* inmayannumerals */,
-  {     1,  5760,  9025,  13,   4, UNI_NV__3_SLASH_20 }   /* numericvalue=3/20 */,
-  {    16,  7025,  9698,   3,   3, UNI_IN__5_DOT_1 }   /* in=v51 */,
-  {     4,  9081,     0,   4,   0, UNI_AVST }   /* avst */,
-  {     0,  8532,     0,   6,   0, UNI_KANBUN }   /* kanbun */,
-  {     1,  8871,  7383,   3,   9, UNI_SB__SC }   /* sb=scontinue */,
-  {     0,  9365,  8241,   5,   6, UNI_SHRD }   /* scx=sharada */,
-  {     8,  9593,  2433,   3,  11, UNI_BC__R }   /* bc=righttoleft */,
-  {     3,  9620,  9775,   3,   2, UNI_ZL }   /* gc=zl */,
-  {     8,  8886,  7772,   3,   8, UNI_SC__ARMN }   /* sc=armenian */,
-  {     0,  5760,  8817,  13,   2, UNI_NV__34 }   /* numericvalue=34 */,
-  {    96,  8233,  9285,   7,   4, UNI_NKO }   /* script=nkoo */,
-  {     2,  8424,  2393,   6,  20, UNI_INNYIAKENGPUACHUEHMONG }   /* block=nyiakengpuachuehmong */,
-  {     0,  9647,  8400,   3,   2, UNI_NV__90 }   /* nv=90 */,
-  {     1,  8954,    36,   5,   1, UNI_XIDC }   /* xidc=t */,
-  {     0,  8635,     3,   5,   1, -UNI_IDEO }   /* ideo=f */,
-  {     6,  6918,  7202,  10,   2, UNI_LB__BB }   /* linebreak=bb */,
-  {     2,   446,     0,  18,   0, UNI_IDEOGRAPHICSYMBOLS }   /* ideographicsymbols */,
-  {     2,  2148,  7089,   3,   9, UNI_SUPARROWSC }   /* insuparrowsc */,
-  {     0,  8424,  8058,   6,   7, UNI_DSRT }   /* block=deseret */,
-  {     3,  9049,  9587,   4,   3, UNI_AGE__9 }   /* age=9.0 */,
-  {     0,  9725,   471,   3,   2, UNI_VO__TU }   /* vo=tu */,
-  {     1,  9365,  8114,   4,   7, UNI_KALI }   /* scx=kayahli */,
-  {     1,  8424,  1003,   6,  27, UNI_ENCLOSEDCJK }   /* block=enclosedcjklettersandmonths */,
-  {     8,   184,  1867,   2,  12, UNI_DIACRITICALS }   /* isdiacriticals */,
-  {     1,  6005,  8045,   3,   6, UNI_CJKEXTF }   /* incjkextf */,
-  {    24,  9647,  8669,   3,   3, UNI_NV__1_SLASH_3 }   /* nv=1/3 */,
-  {    82,  8424,  7356,   6,   9, UNI_PALM }   /* block=palmyrene */,
-  {    22,  6679,    36,  11,   1, UNI_SD }   /* softdotted=t */,
-  {    15,  4826,     0,   9,   0, UNI_hex_values_index }   /* hexdigit= */,
-  {     0,  9093,  8929,   4,   5, UNI_INOSAGE }   /* blk=osage */,
-  {     2,  6885,  4827,   3,   7, UNI_XPOSIXXDIGIT }   /* ishexdigit */,
-  {     8,  5339,   495,  14,   2, UNI_SB__NU }   /* sentencebreak=nu */,
-  {     4,  8879,   879,   3,  13, UNI_PUA }   /* inprivateusearea */,
-  {     1,  5760,  7636,  13,   8, UNI_NV__1_SLASH_20 }   /* numericvalue=5.00e-02 */,
-  {     7,  8886,  2779,   3,   9, UNI_SC__MONG }   /* sc=mongolian */,
-  {     1,  1977,     1,  22,   1, -UNI__PERL_NCHAR }   /* noncharactercodepoint=n */,
-  {     5,  9113,  8909,   4,   5, UNI_CCC__7 }   /* ccc=nukta */,
-  {     8,  4863,     0,  14,   0, UNI_CJKCOMPATFORMS }   /* cjkcompatforms */,
-  {     0,  8424,  3110,   6,  18, UNI_GEORGIANSUP }   /* block=georgiansupplement */,
-  {     0,  8886,  6988,   3,  10, UNI_SOGO }   /* sc=oldsogdian */,
-  {     2,   184,  9221,   2,   4, UNI_LATN }   /* islatn */,
-  {    45,  1362,  8358,  24,   2, UNI_CCC__30 }   /* canonicalcombiningclass=30 */,
-  {     7,  6567,   831,   6,   6, UNI_MISCARROWS }   /* inmiscarrows */,
-  {     1,  1136,     1,  26,   1, -UNI_DI }   /* defaultignorablecodepoint=n */,
-  {    17,  9623,  9617,   3,   3, UNI_JG__GAF }   /* jg=gaf */,
-  {     0,  9469,     0,   4,   0, UNI_XSUX }   /* xsux */,
-  {     0,  8233,  8128,   7,   4, UNI_MAKA }   /* script=maka */,
-  {     0,  7128,   108,  10,   2, UNI_WB__MB }   /* wordbreak=mb */,
-  {     1,  7108,     3,  10,   1, -UNI_XPOSIXUPPER }   /* uppercase=f */,
-  {     1,   184,   540,   3,  29, UNI_CJKEXTB }   /* iscjkunifiedideographsextensionb */,
-  {     1,  5760,  8376,  13,   4, UNI_NV__5000 }   /* numericvalue=5000 */,
-  {     4,  1362,  9524,  24,   3, UNI_CCC__L }   /* canonicalcombiningclass=224 */,
-  {     3,  9365,  7844,   4,   8, UNI_GUJR }   /* scx=gujarati */,
-  {    73,  8424,    78,   6,   6, UNI_INARABIC }   /* block=arabic */,
-  {     0,  7230,    36,   9,   1, UNI_EXT }   /* extender=t */,
-  {     9,  8424,  8107,   6,   7, UNI_INKANNADA }   /* block=kannada */,
-  {    17,  6918,  9763,  10,   2, UNI_GCB__V }   /* linebreak=jv */,
-  {    23,  9093,  2513,   4,  19, UNI_ANCIENTGREEKNUMBERS }   /* blk=ancientgreeknumbers */,
-  {     1,  8424,  6591,   6,  11, UNI_MYANMAREXTB }   /* block=myanmarextb */,
-  {     0,  8233,  8289,   7,   7, UNI_LANA }   /* script=taitham */,
-  {     0,  9365,  4297,   4,   4, UNI_BRAI }   /* scx=brai */,
-  {     0,  8886,  3038,   3,   8, UNI_ETHI }   /* sc=ethiopic */,
-  {     3,  9647,  9747,   3,   2, UNI_NV__47 }   /* nv=47 */,
-  {     0,  5760,  7764,  13,   8, UNI_NV__11_SLASH_12 }   /* numericvalue=9.17e-01 */,
-  {     1,   184,  5500,   2,  13, UNI_ME }   /* isenclosingmark */,
-  {     9,  9113,  8461,   5,   5, UNI_CCC__129 }   /* ccc=ccc129 */,
-  {    14,  8580,     0,   7,   0, -UNI__PERL_NCHAR }   /* nchar=n */,
-  {     0,  3671,  9045,  17,   4, UNI_ADLM }   /* scriptextensions=adlm */,
-  {     2,  8412,    26,   6,   1, UNI_BIDIC }   /* bidic=y */,
-  {     0,  9623,  6852,   3,   3, UNI_JG__KAF }   /* jg=kaf */,
-  {    11,  5760,  7524,  13,   8, UNI_NV__1_SLASH_4 }   /* numericvalue=2.50e-01 */,
-  {   129,  9113,  7603,   4,   2, UNI_CCC__24 }   /* ccc=24 */,
-  {     0,  4361,  3112,   4,  16, UNI_GEORGIANSUP }   /* ingeorgiansupplement */,
-  {     1,  3254,     0,  17,   0, UNI_RI }   /* regionalindicator */,
-  {     1,  8886,  7956,   3,   4, UNI_SC__TAGB }   /* sc=tagb */,
-  {     8,   184,    27,   2,   2, UNI_LOWERCASELETTER }   /* isll */,
-  {     7,  2142,  8190,   3,   2, UNI_INNKO }   /* innko */,
-  {     3,  5565,  8890,  14,   4, UNI_JG__KHAPH }   /* joininggroup=khaph */,
-  {     0,  3951,  4493,   3,  14, UNI_ARMI }   /* isimperialaramaic */,
-  {    11,  4821,     0,   5,   0, UNI_ASCII }   /* ascii */,
-  {     2,  9777,     0,   2,   0, UNI_ZP }   /* zp */,
-  {     0,  9909,  9921,   7,   5, UNI_POSIXPRINT }   /* isposixprint */,
-  {     0,  2212,  3903,   5,  13, UNI_HALFANDFULLFORMS }   /* inhalfandfullforms */,
-  {     1,  9113,  8439,   4,   3, UNI_CCC__103 }   /* ccc=103 */,
-  {     2,   184,     1,   2,   1, UNI_N }   /* isn */,
-  {     0,  5435,     0,  13,   0, UNI_bidim_values_index }   /* bidimirrored= */,
-  {     0,  9593,    24,   3,   1, UNI_BC__L }   /* bc=l */,
-  {     1,  9731,  4140,   3,   5, UNI_WB__XX }   /* wb=other */,
-  {     2,  9903,   467,   6,   5, UNI_XPOSIXPUNCT }   /* xposixpunct */,
-  {     6,  9097,  4687,   4,   4, UNI_BPT__O }   /* bpt=open */,
-  {     3,   184,   988,   2,   5, UNI_MUSIC }   /* ismusic */,
-  {     1,  9365,  9405,   4,   4, UNI_TALU }   /* scx=talu */,
-  {     2,  8886,  5967,   3,   4, UNI_HEBR }   /* sc=hebr */,
-  {     9,  8685,    26,   4,   1, UNI_XPOSIXXDIGIT }   /* hex=y */,
-  {     8,  1362,  5138,  24,   2, UNI_CCC__7 }   /* canonicalcombiningclass=nk */,
-  {     4,  9901,  3248,   8,   5, UNI_XPOSIXSPACE }   /* isxposixspace */,
-  {     3,  8424,  2065,   7,  20, UNI_CJKRADICALSSUP }   /* block=cjkradicalssupplement */,
-  {     0,  7128,  8156,  10,   7, UNI_WB__NL }   /* wordbreak=newline */,
-  {     2,  7374,     0,   9,   0, UNI_SAMR }   /* samaritan */,
-  {     5,  8424,    78,   6,  10, UNI_ARABICMATH }   /* block=arabicmath */,
-  {    21,  9093,  3620,   4,  10, UNI_INMANICHAEAN }   /* blk=manichaean */,
-  {     0,  9049,  9719,   4,   3, UNI_AGE__8 }   /* age=v80 */,
-  {     0,  8886,  9105,   3,   4, UNI_SC__CAKM }   /* sc=cakm */,
-  {     1,  1735,     1,  22,   1, -UNI_CWCM }   /* changeswhencasemapped=n */,
-  {     3,  9093,  8254,   4,   7, UNI_INSIDDHAM }   /* blk=siddham */,
-  {     9,  9093,   382,   4,  32, UNI_EGYPTIANHIEROGLYPHFORMATCONTROLS }   /* blk=egyptianhieroglyphformatcontrols */,
-  {     0,  1924,  9768,  10,   1, UNI_CASEDLETTER }   /* category=l& */,
-  {     5,  8233,  9053,   7,   4, UNI_AGHB }   /* script=aghb */,
-  {     4,  1239,     1,  25,   1, -UNI_COMPEX }   /* fullcompositionexclusion=n */,
-  {    14,   184,  9289,   2,   4, UNI_NSHU }   /* isnshu */,
-  {     0,  6231,    11,  12,   2, UNI_NT__DI }   /* numerictype=di */,
-  {     1,  1482,  3344,  24,  18, UNI_INPC__TOPANDLEFTANDRIGHT }   /* indicpositionalcategory=topandleftandright */,
-  {    36,   184,  8002,   2,   7, UNI_BENG }   /* isbengali */,
-  {     1,  9629,   836,   3,   2, UNI_LB__SP }   /* lb=sp */,
-  {     0,  4849,     0,  13,   0, UNI_CI }   /* caseignorable */,
-  {     2,  4989,     0,   6,   0, UNI_KANGXI }   /* kangxi */,
-  {     8,  6828,  9632,  10,   3, UNI_BC__LRE }   /* bidiclass=lre */,
-  {     1,  9909,  8599,   3,   4, UNI__PERL_PATWS }   /* ispatws */,
-  {     4,  6194,  7330,   3,   8, UNI_INOLDITALIC }   /* inolditalic */,
-  {     0,  8879,  2473,   5,  12, UNI_INPC__TOPANDBOTTOM }   /* inpc=topandbottom */,
-  {     8,  3671,  9289,  17,   4, UNI_NSHU }   /* scriptextensions=nshu */,
-  {     0,  3948,    67,   3,   4, UNI_VSSUP }   /* invssup */,
-  {     2,  3671,  4205,  18,   5, UNI_SYRC }   /* scriptextensions=syriac */,
-  {     0,  3248,  9782,   5,   4, UNI_XPOSIXSPACE }   /* spaceperl */,
-  {     1,  9620,  5258,   3,  11, UNI_MC }   /* gc=spacingmark */,
-  {     0,  8955,    36,   4,   1, UNI_IDC }   /* idc=t */,
-  {     1,  3671,  9257,  17,   4, UNI_MLYM }   /* scriptextensions=mlym */,
-  {     1,  8635,  9734,   5,   3, UNI_IDEO }   /* ideo=yes */,
-  {     7,     7,     0,   1,   0, UNI_C }   /* c */,
-  {    20,  2192,     0,   2,   0, UNI_PD }   /* pd */,
-  {     1,  9731,  9773,   3,   2, UNI_WB__XX }   /* wb=xx */,
-  {     1,  6828,    23,  10,   2, UNI_BC__AL }   /* bidiclass=al */,
-  {     0,  8955,    26,   4,   1, UNI_IDC }   /* idc=y */,
-  {     2,  9093,  5526,   4,   8, UNI_GREEKEXT }   /* blk=greekext */,
-  {     0,  1757,    36,  22,   1, UNI_CWL }   /* changeswhenlowercased=t */,
-  {    12,  8886,  7788,   3,   8, UNI_BALI }   /* sc=balinese */,
-  {     6,  9049,  9563,   4,   3, UNI_AGE__5_DOT_1 }   /* age=5.1 */,
-  {     2,  9285,     0,   4,   0, UNI_NKO }   /* nkoo */,
-  {     0,  9093,   865,   4,  28, UNI_SUPPUAA }   /* blk=supplementaryprivateuseareaa */,
-  {     1,   184,  8550,   2,   4, UNI_LEPC }   /* islepc */,
-  {     0,  9605,  5678,   3,   4, UNI_DT__NONE }   /* dt=none */,
-  {     0,  2708,  3758,   4,   7, UNI_ARABICSUP }   /* inarabicsup */,
-  {     1,   184,  7203,   2,   9, UNI_BHKS }   /* isbhaiksuki */,
-  {     0,  5760,  7462,  13,   2, UNI_NV__43 }   /* numericvalue=43 */,
-  {     0,  8424,  7964,   6,   8, UNI_INTIFINAGH }   /* block=tifinagh */,
-  {     0,   184,  9085,   2,   4, UNI_BATK }   /* isbatk */,
-  {     9,  1243,  9734,  21,   3, UNI_CE }   /* compositionexclusion=yes */,
-  {     5,  3868,   339,  16,   2, UNI_LO }   /* generalcategory=lo */,
-  {     1,  9620,  5809,   3,   2, UNI_PF }   /* gc=pf */,
-  {     0,  9137,     3,   4,   1, -UNI_DEP }   /* dep=f */,
-  {     0,   184,  3772,   2,   4, UNI_BOPO }   /* isbopo */,
-  {     1,  7329,     0,   9,   0, UNI_ITAL }   /* olditalic */,
-  {    40,  4241,  3022,   4,   8, UNI_INDEVANAGARI }   /* indevanagari */,
-  {     1,  9629,  9763,   3,   2, UNI_GCB__V }   /* lb=jv */,
-  {     0,  9093,  6809,   5,   9, UNI_ASCII }   /* blk=basiclatin */,
-  {     1,  3756,     0,  16,   0, UNI_ARABICSUP }   /* arabicsupplement */,
-  {     0,  9365,  5967,   4,   4, UNI_HEBR }   /* scx=hebr */,
-  {     9,  9093,  6279,   4,  12, UNI_PLAYINGCARDS }   /* blk=playingcards */,
-  {     1,  8233,  6554,   8,   3, UNI_SAMR }   /* script=samr */,
-  {     1,  5339,  6318,  15,   8, UNI_SB__SC }   /* sentencebreak=scontinue */,
-  {     0,  8233,  8002,   7,   4, UNI_SC__BENG }   /* script=beng */,
-  {     4,  8332,  2254,   3,  19, UNI_HLUW }   /* isanatolianhieroglyphs */,
-  {     0,  6885,  4478,   3,  14, UNI_INHANGUL }   /* ishangulsyllables */,
-  {     0,  9904,    62,   5,   5, UNI_POSIXGRAPH }   /* posixgraph */,
-  {     0,    11,     0,   3,   0, UNI_DIA }   /* dia */,
-  {    13,   184,   339,   2,   2, UNI_LO }   /* islo */,
-  {     5,  9093,  6267,   4,   8, UNI_PHAISTOS }   /* blk=phaistos */,
-  {     5,  9141,     1,   4,   1, -UNI_DIA }   /* dia=n */,
-  {     0,  2204,  9302,   3,   3, UNI_ORKH }   /* isorkh */,
-  {     3,   217,     0,  33,   0, UNI_DIACRITICALSEXT }   /* combiningdiacriticalmarksextended */,
-  {     7,  3868,   467,  16,   5, UNI_P }   /* generalcategory=punct */,
-  {     0,  8886,     7,   3,  18, UNI_CANS }   /* sc=canadianaboriginal */,
-  {     0,  7128,  5520,  10,   5, UNI_WB__EB }   /* wordbreak=ebase */,
-  {    18,  1497,  4080,   9,  10, UNI_SM }   /* category=mathsymbol */,
-  {     0,  9217,     0,   3,   0, UNI_LAO }   /* lao */,
-  {     0,  5760,  9580,  13,   2, UNI_NV__37 }   /* numericvalue=37 */,
-  {     4,  8886,  3467,   3,  17, UNI_AGHB }   /* sc=caucasianalbanian */,
-  {     3,   184,    17,   3,   1, UNI_CO }   /* isco */,
-  {     3,  4849,     1,  14,   1, -UNI_CI }   /* caseignorable=n */,
-  {     2,  6918,  2564,  10,   2, UNI_LB__BA }   /* linebreak=ba */,
-  {    15,  8424,   690,   7,  29, UNI_CUNEIFORMNUMBERS }   /* block=cuneiformnumbersandpunctuation */,
-  {     1,  8886,  4267,   3,   5, UNI_BAMU }   /* sc=bamum */,
-  {     2,   184,  1802,   3,  20, UNI_CWU }   /* ischangeswhenuppercased */,
-  {     6,  3671,  9069,  17,   4, UNI_ARMN }   /* scriptextensions=armn */,
-  {     3,  8954,    26,   5,   1, UNI_XIDC }   /* xidc=y */,
-  {     0,  2684,  7401,  19,   9, UNI_GCB__V }   /* hangulsyllabletype=voweljamo */,
-  {    70,  9629,  8345,   3,   7, UNI_LB__ZW }   /* lb=zwspace */,
-  {     1,  5760,  7159,  13,   8, UNI_NV__1_SLASH_2 }   /* numericvalue=5.00e-01 */,
-  {     0,  6005,  8038,   3,   6, UNI_CJKEXTE }   /* incjkexte */,
-  {     0,  6679,    26,  11,   1, UNI_SD }   /* softdotted=y */,
-  {     3,  9093,     0,   4,   0, UNI_blk_values_index }   /* blk= */,
-  {     0,  7932,  9433,   8,   4, UNI_RADICAL }   /* radical=true */,
-  {     0,  8424,  4297,   6,   7, UNI_BRAI }   /* block=braille */,
-  {     1,  9365,  9065,   4,   4, UNI_ARMI }   /* scx=armi */,
-  {     0,  8233,  4492,   7,  15, UNI_ARMI }   /* script=imperialaramaic */,
-  {     0,  8424,  9217,   6,   3, UNI_INLAO }   /* block=lao */,
-  {     0,  2930,     0,  11,   0, UNI_CHEROKEESUP }   /* cherokeesup */,
-  {     0,  8502,     0,   4,   0, UNI_GOTH }   /* goth */,
-  {     1,  1362,  7571,  24,   2, UNI_CCC__33 }   /* canonicalcombiningclass=33 */,
-  {     4,  8051,   995,   7,   2, -UNI_COMPEX }   /* compex=no */,
-  {     4,  1362,  8479,  25,   5, UNI_WB__EB }   /* canonicalcombiningclass=ccc133 */,
-  {     0,  9093,   976,   4,  27, UNI_ANCIENTGREEKMUSIC }   /* blk=ancientgreekmusicalnotation */,
-  {     0,  1536,  5908,   3,  11, UNI_ETHIOPICEXTA }   /* inethiopicexta */,
-  {     0,  3671,  8149,  17,   7, UNI_MULT }   /* scriptextensions=multani */,
-  {    64,  8418,  8864,   6,   5, -UNI_BIDIM }   /* bidim=false */,
-  {     0,  1482,  2373,  24,   4, UNI_INPC__LEFT }   /* indicpositionalcategory=left */,
-  {     0,  8191,     0,   7,   0, UNI_OLCK }   /* olchiki */,
-  {     1,  8324,     0,   7,   0, UNI_ZZZZ }   /* unknown */,
-  {     0,  5339,   400,  14,   6, UNI_SB__FO }   /* sentencebreak=format */,
-  {    17,  9629,  5773,   3,  13, UNI_LB__PR }   /* lb=prefixnumeric */,
-  {     0,  9093,  3038,   4,  18, UNI_ETHIOPICSUP }   /* blk=ethiopicsupplement */,
-  {     0,   184,   328,   2,  21, UNI_MATHOPERATORS }   /* ismathematicaloperators */,
-  {     0,  5760,  8970,  13,   3, UNI_NV__1_SLASH_2 }   /* numericvalue=1/2 */,
-  {     3,  4642,     1,  15,   1, UNI_NFKDQC__N }   /* nfkdquickcheck=n */,
-  {     2,  9365,  5967,   4,   6, UNI_HEBR }   /* scx=hebrew */,
-  {     5,  9113,  1149,   4,   2, UNI_CCC__BL }   /* ccc=bl */,
-  {     8,  8233,  8652,   7,   6, UNI_WCHO }   /* script=wancho */,
-  {    10,  3868,   206,  16,   2, UNI_PI }   /* generalcategory=pi */,
-  {     0,  9605,  9149,   3,   4, UNI_DT__FONT }   /* dt=font */,
-  {     5,  8233,  6243,   7,  12, UNI_HUNG }   /* script=oldhungarian */,
-  {     0,  8233,  6898,   7,   4, UNI_KHAR }   /* script=khar */,
-  {     2,  8424,  6580,   6,  11, UNI_MYANMAREXTA }   /* block=myanmarexta */,
-  {    19,  8424,  4432,   6,  15, UNI_DIACRITICALSSUP }   /* block=diacriticalssup */,
-  {    10,  9365,  9333,   4,   4, UNI_COPT }   /* scx=qaac */,
-  {     0,  9093,  3110,   4,  11, UNI_GEORGIANSUP }   /* blk=georgiansup */,
-  {     0,  9113,  5409,   4,   2, UNI_CCC__10 }   /* ccc=10 */,
-  {     0,  6885,  8515,   3,   5, UNI_HATR }   /* ishatran */,
-  {     0,   184,  9233,   2,   4, UNI_LISU }   /* islisu */,
-  {     7,  3236,     0,  18,   0, UNI_patws_values_index }   /* patternwhitespace= */,
-  {     1,  9313,  9433,   4,   4, UNI_PCM }   /* pcm=true */,
-  {     9,  9365,  9161,   4,   4, UNI_GONM }   /* scx=gonm */,
-  {     2,  9121,     3,   4,   1, -UNI_CWL }   /* cwl=f */,
-  {     0,  1057,    26,  27,   1, UNI_PCM }   /* prependedconcatenationmark=y */,
-  {     1,  8886,  9329,   3,   4, UNI_PRTI }   /* sc=prti */,
-  {     5,  9620,   132,   3,   2, UNI_LM }   /* gc=lm */,
-  {     0,   184,  6382,   2,   6, UNI_DOMINO }   /* isdomino */,
-  {     0,  9049,  9005,   4,   4, UNI_AGE__12_DOT_1 }   /* age=12.1 */,
-  {     0,  3671,  2333,  17,   4, UNI_GLAG }   /* scriptextensions=glag */,
-  {     1,  3671,  4297,  17,   7, UNI_BRAI }   /* scriptextensions=braille */,
-  {     0,  9113,  8782,   4,   2, UNI_CCC__27 }   /* ccc=27 */,
-  {     8,  9647,  8376,   3,   3, UNI_NV__500 }   /* nv=500 */,
-  {     1,  8869,     3,   5,   1, -UNI_IDSB }   /* idsb=f */,
-  {     0,  2142,  8178,   3,   6, UNI_NB }   /* innoblock */,
-  {    10,  9093,  6723,   4,  11, UNI_INSYLOTINAGRI }   /* blk=sylotinagri */,
-  {     0,  9093,   217,   4,  33, UNI_DIACRITICALSEXT }   /* blk=combiningdiacriticalmarksextended */,
-  {    13,  4762,     0,  15,   0, UNI_VEDICEXT }   /* vedicextensions */,
-  {     0,  7008,     0,  10,   0, UNI_PHNX }   /* phoenician */,
-  {     1,  8233,  8262,   8,   6, UNI_SOYO }   /* script=soyombo */,
-  {     0,  9093,  2589,   4,  19, UNI_COUNTINGROD }   /* blk=countingrodnumerals */,
-  {     0,  1136,     0,  25,   0, UNI_DI }   /* defaultignorablecodepoint */,
-  {    13,  8886,  8205,   3,   4, UNI_OSMA }   /* sc=osma */,
-  {     1,  9647,  8977,   3,   4, UNI_NV__1_SLASH_20 }   /* nv=1/20 */,
-  {    22,  2333,     0,  20,   0, UNI_GLAGOLITICSUP }   /* glagoliticsupplement */,
-  {     1,  9593,    25,   3,   1, UNI_BC__S }   /* bc=s */,
-  {     8,  8051,  8864,   7,   5, -UNI_COMPEX }   /* compex=false */,
-  {     5,  1845,     0,   6,   0, UNI_ZYYY }   /* common */,
-  {     1,   478,     0,  31,   0, UNI_MATHALPHANUM }   /* mathematicalalphanumericsymbols */,
-  {     3,  1362,  2733,  24,   2, UNI_CCC__1 }   /* canonicalcombiningclass=ov */,
-  {     2,  5760,  7747,  13,   2, UNI_NV__28 }   /* numericvalue=28 */,
-  {     2,  8424,  5578,   6,  13, UNI_KANAEXTA }   /* block=kanaextendeda */,
-  {     0,  9605,  8574,   3,   6, UNI_DT__NAR }   /* dt=narrow */,
-  {    36,  9093,  2874,   4,  19, UNI_SUPARROWSB }   /* blk=supplementalarrowsb */,
-  {     0,  6183,     0,  12,   0, UNI_MEND }   /* mendekikakui */,
-  {     0,  3671,  8079,  17,   7, UNI_GRAN }   /* scriptextensions=grantha */,
-  {     0,  8685,    36,   4,   1, UNI_XPOSIXXDIGIT }   /* hex=t */,
-  {     0,  1141,     0,   2,   0, UNI_TITLE }   /* lt */,
-  {     0,  8233,  7956,   7,   8, UNI_SC__TAGB }   /* script=tagbanwa */,
-  {     2,  8886,  9225,   3,   4, UNI_SC__LINA }   /* sc=lina */,
-  {    12,  1497,  5259,  10,  10, UNI_MC }   /* category=spacingmark */,
-  {     0,  9623,  6099,   3,  12, UNI_JG__MALAYALAMNNA }   /* jg=malayalamnna */,
-  {    11,  8233,  7796,   7,   4, UNI_BASS }   /* script=bass */,
-  {     1,  9093,  7892,   4,   8, UNI_INJAVANESE }   /* blk=javanese */,
-  {    10,  7932,  8864,   8,   5, -UNI_RADICAL }   /* radical=false */,
-  {     2,  9602,  9734,   3,   3, UNI_DI }   /* di=yes */,
-  {     0,  9623,  6147,   3,  12, UNI_JG__MANICHAEANPE }   /* jg=manichaeanpe */,
-  {     0,  9113,  7539,   4,   3, UNI_CCC__B }   /* ccc=220 */,
-  {     1,  8424,  1889,   6,  22, UNI_EARLYDYNASTICCUNEIFORM }   /* block=earlydynasticcuneiform */,
-  {     0,  3868,  2273,  16,  20, UNI_PC }   /* generalcategory=connectorpunctuation */,
-  {    16,  8424,  3469,   8,  15, UNI_INCAUCASIANALBANIAN }   /* block=caucasianalbanian */,
-  {     3,    21,  8107,   2,   7, UNI_INKANNADA }   /* inkannada */,
-  {     0,  1482,     9,  24,   2, UNI_INPC__NA }   /* indicpositionalcategory=na */,
-  {     0,   698,     0,   6,   0, UNI_N }   /* number */,
-  {     0,  1924,    36,  10,   1, UNI_TITLE }   /* category=lt */,
-  {     0,  5760,  8969,  13,   4, UNI_NV___MINUS_1_SLASH_2 }   /* numericvalue=-1/2 */,
-  {     0,  9365,  2148,   4,  21, UNI_PRTI }   /* scx=inscriptionalparthian */,
-  {     1,  5760,  9560,  13,   3, UNI_NV__4_SLASH_5 }   /* numericvalue=4/5 */,
-  {    83,  3671,  9241,  17,   4, UNI_MEDF }   /* scriptextensions=medf */,
-  {     0,  7980,     0,   8,   0, UNI_UGAR }   /* ugaritic */,
-  {     0,  5565,  6795,  13,   3, UNI_JG__QAF }   /* joininggroup=qaf */,
-  {     0,  9731,   495,   3,   2, UNI_WB__NU }   /* wb=nu */,
-  {     0,  9365,  9273,   4,   4, UNI_NARB }   /* scx=narb */,
-  {     2,  2106,  5394,  21,   2, UNI_LB__H2 }   /* graphemeclusterbreak=lv */,
-  {     4,  2948,     0,  18,   0, UNI_HALFMARKS }   /* combininghalfmarks */,
-  {     0,  8233,  6027,   7,   5, UNI_KHMR }   /* script=khmer */,
-  {     4,  9623,  4537,   3,  15, UNI_JG__MANICHAEANGIMEL }   /* jg=manichaeangimel */,
-  {     0,  9623,  9671,   3,   3, UNI_JG__TAH }   /* jg=tah */,
-  {     0,  2211,     0,   4,   0, UNI_SINH }   /* sinh */,
-  {     0,  7230,  8864,   9,   5, -UNI_EXT }   /* extender=false */,
-  {     8,  1497,  9779,   9,   2, UNI_ZS }   /* category=zs */,
-  {     0,  8886,  2930,   3,   8, UNI_CHER }   /* sc=cherokee */,
-  {    10,  9049,  9566,   4,   3, UNI_AGE__5_DOT_2 }   /* age=5.2 */,
-  {     0,  4807,     0,  14,   0, UNI_ANCIENTSYMBOLS }   /* ancientsymbols */,
-  {     4,  9113,    23,   4,   2, UNI_CCC__AL }   /* ccc=al */,
-  {     0,  9605,  6195,   3,   8, UNI_DT__NONCANON }   /* dt=noncanon */,
-  {     5,  9093,  8009,   4,   7, UNI_CJKEXTA }   /* blk=cjkexta */,
-  {     0,  6015,     0,  12,   1, UNI_JT__U }   /* joiningtype=u */,
-  {     0,  9901,  4829,   3,   5, UNI_XPOSIXXDIGIT }   /* isxdigit */,
-  {     2,  7018,  9581,  10,   3, UNI_IN__7 }   /* presentin=7.0 */,
-  {     1,  8886,  8079,   3,   7, UNI_SC__GRAN }   /* sc=grantha */,
-  {    26,  8317,     0,   7,   0, UNI_UCASEXT }   /* ucasext */,
-  {    10,  8886,  4717,   3,   5, UNI_SC__TAML }   /* sc=tamil */,
-  {    10,  1536,  7223,   4,   7, UNI_EMOTICONS }   /* inemoticons */,
-  {     0,  3671,  8859,  17,   5, UNI_DOGR }   /* scriptextensions=dogra */,
-  {     0,  9647,  8370,   3,   6, UNI_NV__432000 }   /* nv=432000 */,
-  {     0,  8233,  8255,   8,   3, UNI_SIDD }   /* script=sidd */,
-  {     6,  6194,  1031,   3,  26, UNI_OCR }   /* inopticalcharacterrecognition */,
-  {     3,  9113,  8755,   5,   4, UNI_CCC__22 }   /* ccc=ccc22 */,
-  {     0,  9629,  5991,   3,  12, UNI_LB__IS }   /* lb=infixnumeric */,
-  {     8,  5513,     0,  12,   0, UNI_GRBASE }   /* graphemebase */,
-  {     7,  6928,     1,  10,   1, -UNI_XPOSIXLOWER }   /* lowercase=n */,
-  {     6,  8233,    78,   7,   4, UNI_SC__ARAB }   /* script=arab */,
-  {     0,  7018,  7436,  10,   3, UNI_IN__1_DOT_1 }   /* presentin=1.1 */,
-  {     6,   184,   921,   2,  17, UNI_VS }   /* isvariationselector */,
-  {     1,  9647,  8354,   3,   2, UNI_NV__60 }   /* nv=60 */,
-  {     1,  9479,  4795,   5,  12, UNI_INZANABAZARSQUARE }   /* inzanabazarsquare */,
-  {     1,  3671,  9405,  17,   4, UNI_TALU }   /* scriptextensions=talu */,
-  {     0,  9909,   472,   3,   2, UNI_PUA }   /* ispua */,
-  {     0,  3951,  2354,   3,  19, UNI_PHLI }   /* isinscriptionalpahlavi */,
-  {     0,  9365,  9197,   4,   4, UNI_KALI }   /* scx=kali */,
-  {     0,  9605,   567,   3,   2, UNI_DT__NB }   /* dt=nb */,
-  {     3,  8310,     0,   4,   0, UNI_TIRH }   /* tirh */,
-  {     0,  1014,     0,   6,   0, UNI_L }   /* letter */,
-  {    16,  3251,  8864,   3,   5, -UNI_CE }   /* ce=false */,
-  {     0,    21,  8550,   2,   6, UNI_INLEPCHA }   /* inlepcha */,
-  {     4,  1622,     0,  23,   0, UNI_LATINEXTADDITIONAL }   /* latinextendedadditional */,
-  {     1,  8233,  9390,   8,   3, UNI_SOGO }   /* script=sogo */,
-  {     3,  6918,   721,  10,   2, UNI_LB__CL }   /* linebreak=cl */,
-  {     2,  9093,  4204,   4,  16, UNI_SYRIACSUP }   /* blk=syriacsupplement */,
-  {     0,  9093,  3326,   4,  11, UNI_TAIXUANJING }   /* blk=taixuanjing */,
-  {     1,  9129,   995,   4,   2, -UNI_CWU }   /* cwu=no */,
-  {     0,  9365,  9457,   4,   4, UNI_WCHO }   /* scx=wcho */,
-  {    11,  3951,  2704,   3,   3, UNI_IDST }   /* isidst */,
-  {    65,  9623,  9369,   3,   4, UNI_JG__SEEN }   /* jg=seen */,
-  {     1,  2148,   350,   3,  32, UNI_SUPSYMBOLSANDPICTOGRAPHS }   /* insupplementalsymbolsandpictographs */,
-  {     0,  9093,  3836,   4,  16, UNI_CYPRIOTSYLLABARY }   /* blk=cypriotsyllabary */,
-  {    40,  5565,  2551,  13,  19, UNI_JG__BURUSHASKIYEHBARREE }   /* joininggroup=burushaskiyehbarree */,
-  {    36,  8424,  3416,   6,  10, UNI_ALCHEMICAL }   /* block=alchemical */,
-  {    14,  8886,  9177,   3,   4, UNI_SC__HANO }   /* sc=hano */,
-  {     1,  8959,     0,   5,   0, UNI_xids_values_index }   /* xids= */,
-  {     8,  5565,  5718,  13,   3, UNI_JG__WAW }   /* joininggroup=waw */,
-  {     1,  9620,     1,   3,   1, UNI_N }   /* gc=n */,
-  {    11,  9731,  2368,   3,   2, UNI_LB__HL }   /* wb=hl */,
-  {     0,  8424,   983,   6,   5, UNI_INGREEK }   /* block=greek */,
-  {     1,  3020,     0,  18,   0, UNI_DEVANAGARIEXT }   /* devanagariextended */,
-  {    10,  6918,   395,  10,   2, UNI_LB__GL }   /* linebreak=gl */,
-  {     0,   184,  4582,   2,  15, UNI_MERC }   /* ismeroiticcursive */,
-  {     2,  8424,  1188,   6,   8, UNI_INKATAKANA }   /* block=katakana */,
-  {     0,  7796,     0,   4,   0, UNI_BASS }   /* bass */,
-  {     3,  8886,  8289,   3,   7, UNI_LANA }   /* sc=taitham */,
-  {    16,  9093,  4597,   4,  15, UNI_MISCPICTOGRAPHS }   /* blk=miscpictographs */,
-  {     1,  4849,  9433,  14,   4, UNI_CI }   /* caseignorable=true */,
-  {     0,  8871,  3227,   3,   3, UNI_SB__SE }   /* sb=sep */,
-  {     6,  9365,  9057,   4,   4, UNI_AHOM }   /* scx=ahom */,
-  {     3,  5760,  5409,  13,   5, UNI_NV__10000 }   /* numericvalue=10000 */,
-  {     3,  6194,  8206,   3,   6, UNI_INOSMANYA }   /* inosmanya */,
-  {     1,  1362,  7691,  24,   2, UNI_CCC__36 }   /* canonicalcombiningclass=36 */,
-  {     0,  2353,     0,  20,   0, UNI_PHLI }   /* inscriptionalpahlavi */,
-  {     0,  3552,     0,  11,   0, UNI_ETHIOPICEXT }   /* ethiopicext */,
-  {     0,  3535,     0,  17,   0, UNI_CYRILLICEXTC }   /* cyrillicextendedc */,
-  {     0,  8635,  8864,   5,   5, -UNI_IDEO }   /* ideo=false */,
-  {     1,   509,     0,  30,   0, UNI_CJKEXTA }   /* cjkunifiedideographsextensiona */,
-  {     0,   184,   837,   2,  28, UNI_PHONETICEXTSUP }   /* isphoneticextensionssupplement */,
-  {     0,  3290,     0,  18,   0, UNI_RUMI }   /* ruminumeralsymbols */,
-  {    17,  9365,  9473,   4,   4, UNI_YI }   /* scx=yiii */,
-  {     0,  5760,  8669,  13,   3, UNI_NV__1_SLASH_3 }   /* numericvalue=1/3 */,
-  {     0,  3868,  3820,  16,  16, UNI_PE }   /* generalcategory=closepunctuation */,
-  {     2,   184,  7088,   2,  10, UNI_SUPARROWSC }   /* issuparrowsc */,
-  {    14,  9193,    24,   4,   1, UNI_GCB__L }   /* hst=l */,
-  {    17,  9093,  8562,   4,   6, UNI_INLYCIAN }   /* blk=lycian */,
-  {     0,  3002,  9149,  18,   4, UNI_DT__FONT }   /* decompositiontype=font */,
-  {    10,  9141,  8864,   4,   5, -UNI_DIA }   /* dia=false */,
-  {    11,  9593,  3056,   3,  18, UNI_BC__ET }   /* bc=europeanterminator */,
-  {     0,  7230,     1,   9,   1, -UNI_EXT }   /* extender=n */,
-  {     2,  3671,  8065,  17,   4, UNI_ELBA }   /* scriptextensions=elba */,
-  {     1,  9365,  8002,   4,   4, UNI_BENG }   /* scx=beng */,
-  {     5,   184,  9130,   3,   2, UNI_CWU }   /* iscwu */,
-  {     0,    21,  8526,   2,   6, UNI_INKAITHI }   /* inkaithi */,
-  {     4,  9125,     1,   4,   1, -UNI_CWT }   /* cwt=n */,
-  {     1,  3868,     7,  16,   1, UNI_C }   /* generalcategory=c */,
-  {     8,   435,     0,   5,   0, UNI__PERL_NCHAR }   /* nchar */,
-  {     5,  9129,     0,   3,   0, UNI_CWU }   /* cwu */,
-  {     0,  8886,  9273,   3,   4, UNI_NARB }   /* sc=narb */,
-  {     3,  9113,  8722,   4,   2, UNI_CCC__15 }   /* ccc=15 */,
-  {     0,  3671,  1188,  17,   8, UNI_KANA }   /* scriptextensions=katakana */,
-  {     0,  8233,  8296,   7,   7, UNI_TAVT }   /* script=taiviet */,
-  {     1,  9093,  1867,   4,  22, UNI_DIACRITICALSFORSYMBOLS }   /* blk=diacriticalsforsymbols */,
-  {     0,  8884,  2532,   5,  19, UNI_INSC__BRAHMIJOININGNUMBER }   /* insc=brahmijoiningnumber */,
-  {     0,  9365,  6159,   4,  12, UNI_GONM }   /* scx=masaramgondi */,
-  {     2,  9113,     0,   4,   0, UNI_ccc_values_index }   /* ccc= */,
-  {     0,  1362,    23,  24,   2, UNI_CCC__AL }   /* canonicalcombiningclass=al */,
-  {     0,  8086,     3,   7,   1, -UNI_GRBASE }   /* grbase=f */,
-  {     2,  9781,  1129,  33,   5, UNI__PERL_PROBLEMATIC_LOCALE_FOLDEDS_START }   /* _perl_problematic_locale_foldeds_start */,
-  {     0,  9141,    36,   4,   1, UNI_DIA }   /* dia=t */,
-  {     0,  3254,     3,  18,   1, -UNI_RI }   /* regionalindicator=f */,
-  {     5,  3002,  2204,  18,   3, UNI_DT__ISO }   /* decompositiontype=iso */,
-  {     0,  9849,  9878,  15,   5, UNI__PERL_CHARNAME_BEGIN }   /* _perl_charname_begin */,
-  {    11,  9113,  8455,   5,   4, UNI_CCC__12 }   /* ccc=ccc12 */,
-  {     5,  9093,  3900,   4,  16, UNI_HALFANDFULLFORMS }   /* blk=halfandfullforms */,
-  {     0,  9093,  7048,   4,  10, UNI_INSAURASHTRA }   /* blk=saurashtra */,
-  {     0,  9629,  6349,   3,  11, UNI_LB__BB }   /* lb=breakbefore */,
-  {     1,  3671,  7852,  17,   8, UNI_GURU }   /* scriptextensions=gurmukhi */,
-  {     4,  3884,     0,  11,   0, UNI_GEORGIANEXT }   /* georgianext */,
-  {     0,  9365,  8514,   4,   4, UNI_HATR }   /* scx=hatr */,
-  {    68,   779,     0,  22,   0, UNI_ENCLOSEDIDEOGRAPHICSUP }   /* enclosedideographicsup */,
-  {    16,  4477,     0,  15,   0, UNI_INHANGUL }   /* hangulsyllables */,
-  {     0,  9946,     7,   3,   1, UNI_SC }   /* issc */,
-  {     0,  9093,  3996,   4,  16, UNI_LINEARBSYLLABARY }   /* blk=linearbsyllabary */,
-  {     0,  9647,  8358,   3,   6, UNI_NV__300000 }   /* nv=300000 */,
-  {    29,  9189,     0,   4,   0, UNI_HMNP }   /* hmnp */,
-  {     2,  8233,    78,   7,   6, UNI_SC__ARAB }   /* script=arabic */,
-  {     0,  2204,  4141,   3,   4, UNI_C }   /* isother */,
-  {     4,  9629,    83,   3,   2, UNI_LB__CM }   /* lb=cm */,
-  {     3,  1497,   341,   9,   2, UNI_PE }   /* category=pe */,
-  {    22,  2703,     0,   3,   0, UNI_IDS }   /* ids */,
-  {     0,  9946,  2453,   3,   4, UNI_STERM }   /* issterm */,
-  {     0,  8233,  9105,   7,   4, UNI_SC__CAKM }   /* script=cakm */,
-  {     2,   976,     0,  17,   0, UNI_ANCIENTGREEKMUSIC }   /* ancientgreekmusic */,
-  {     0,  9093,  2855,   4,  19, UNI_SUPARROWSA }   /* blk=supplementalarrowsa */,
-  {    58,  9153,  5520,   4,   5, UNI_WB__EB }   /* gcb=ebase */,
-  {     2,  9049,  9707,   4,   3, UNI_AGE__6_DOT_1 }   /* age=v61 */,
-  {     0,  9599,     0,   3,   0, UNI_ci_values_index }   /* ci= */,
-  {     0,  8884,  2570,   5,  19, UNI_INSC__CONSONANTHEADLETTER }   /* insc=consonantheadletter */,
-  {     4,  5979,   995,  12,   2, -UNI_IDEO }   /* ideographic=no */,
-  {     2,  8233,  3110,   7,   8, UNI_SC__GEOR }   /* script=georgian */,
-  {    19,   921,     0,  28,   0, UNI_VSSUP }   /* variationselectorssupplement */,
-  {     3,   184,  6898,   2,  10, UNI_KHAR }   /* iskharoshthi */,
-  {     4,  7128,     0,  10,   0, UNI_wb_values_index }   /* wordbreak= */,
-  {     1,  5565,  5666,  13,   3, UNI_JG__NUN }   /* joininggroup=nun */,
-  {    34,  8233,  6691,   8,  10, UNI_SORA }   /* script=sorasompeng */,
-  {     7,  9365,  7980,   4,   4, UNI_UGAR }   /* scx=ugar */,
-  {     2,   184,  1576,   2,  23, UNI_GEOMETRICSHAPESEXT }   /* isgeometricshapesextended */,
-  {     3,  8233,  3038,   7,   8, UNI_ETHI }   /* script=ethiopic */,
-  {     1,  9049,  7487,   4,   1, UNI_AGE__6 }   /* age=6 */,
-  {     9,  9093,  7900,   4,   8, UNI_KANAEXTA }   /* blk=kanaexta */,
-  {     1,  8538,     0,   4,   0, UNI_KHOJ }   /* khoj */,
-  {     9,  9153,    36,   4,   1, UNI_GCB__T }   /* gcb=t */,
-  {     1,   184,  5721,   2,  13, UNI_MAYANNUMERALS }   /* ismayannumerals */,
-  {     3,  8424,  2627,   6,  19, UNI_ENCLOSEDALPHANUMSUP }   /* block=enclosedalphanumsup */,
-  {    14,  2984,     0,   6,   0, UNI_COPT }   /* coptic */,
-  {     0,  8617,  8864,   5,   5, -UNI_TERM }   /* term=false */,
-  {     0,  6918,  5943,  10,   4, UNI_LB__GL }   /* linebreak=glue */,
-  {     2,   184,  7302,   2,   9, UNI_NBAT }   /* isnabataean */,
-  {     6,  8142,     0,   7,   0, UNI_MARC }   /* marchen */,
-  {    52,  9365,  8262,   5,   6, UNI_SOYO }   /* scx=soyombo */,
-  {     8,  9273,     0,   4,   0, UNI_NARB }   /* narb */,
-  {     1,  9365,  8562,   4,   4, UNI_LYCI }   /* scx=lyci */,
-  {     1,  6567,     0,  13,   0, UNI_MISCSYMBOLS }   /* inmiscsymbols */,
-  {    12,  9093,  7058,   4,  10, UNI_SMALLFORMS }   /* blk=smallforms */,
-  {     7,  3868,  5487,  16,  13, UNI_XPOSIXDIGIT }   /* generalcategory=decimalnumber */,
-  {     0,  7772,     0,   8,   0, UNI_ARMN }   /* armenian */,
-  {     0,  3248,   995,   6,   2, -UNI_XPOSIXSPACE }   /* space=no */,
-  {     0,  9365,  9229,   4,   4, UNI_LINB }   /* scx=linb */,
-  {     2,  4267,     0,  15,   0, UNI_BAMUMSUP }   /* bamumsupplement */,
-  {     0,  9093,  8044,   4,   7, UNI_CJKEXTF }   /* blk=cjkextf */,
-  {     0,  3671,  2212,  18,   6, UNI_SINH }   /* scriptextensions=sinhala */,
-  {     5,  3671,  8303,  17,   7, UNI_TIBT }   /* scriptextensions=tibetan */,
-  {     0,  1645,     0,  23,   0, UNI_SHORTHANDFORMATCONTROLS }   /* shorthandformatcontrols */,
-  {    61,  1497,  9777,   9,   2, UNI_ZP }   /* category=zp */,
-  {     0,  8886,  9133,   3,   4, UNI_SC__CYRL }   /* sc=cyrl */,
-  {     2,  8406,     0,   6,   0, UNI_alpha_values_index }   /* alpha= */,
-  {     1,  5199,     0,  14,   0, UNI_SK }   /* modifiersymbol */,
-  {     0,  9365,  9221,   4,   4, UNI_LATN }   /* scx=latn */,
-  {     2,  9093,  8710,   5,   4, UNI_INBUHID }   /* blk=buhid */,
-  {     3,  9049,  9006,   4,   3, UNI_AGE__2_DOT_1 }   /* age=2.1 */,
-  {     1,  1362,  8832,  24,   2, UNI_CCC__84 }   /* canonicalcombiningclass=84 */,
-  {     0,  8233,  8072,   7,   7, UNI_ELYM }   /* script=elymaic */,
-  {     1,  5565,  9245,  13,   4, UNI_JG__MEEM }   /* joininggroup=meem */,
-  {     1,  3852,     0,  16,   0, UNI_PF }   /* finalpunctuation */,
-  {     2,  8233,  3772,   7,   4, UNI_SC__BOPO }   /* script=bopo */,
-  {     9,  9093,  3308,   4,  12, UNI_SMALLKANAEXT }   /* blk=smallkanaext */,
-  {    40,  8424,  3552,   6,  16, UNI_ETHIOPICEXT }   /* block=ethiopicextended */,
-  {     0,  9365,  9469,   4,   4, UNI_XSUX }   /* scx=xsux */,
-  {     0,  5565,  3637,  13,  17, UNI_JG__MANICHAEANHUNDRED }   /* joininggroup=manichaeanhundred */,
-  {     1,  9365,  8622,   4,   4, UNI_TELU }   /* scx=telu */,
-  {     0,  9946,  2212,   3,   3, UNI_SINH }   /* issinh */,
-  {     1,  9623,  4012,   3,  16, UNI_JG__MANICHAEANDALETH }   /* jg=manichaeandaleth */,
-  {     1,  9237,  9433,   4,   4, UNI_LOE }   /* loe=true */,
-  {     1,  9620,  9779,   3,   2, UNI_ZS }   /* gc=zs */,
-  {    16,  8233,  9165,   7,   4, UNI_SC__GREK }   /* script=grek */,
-  {     0,  5565,  7948,  13,   8, UNI_JG__SWASHKAF }   /* joininggroup=swashkaf */,
-  {     0,  8884,  3788,   5,  16, UNI_INSC__CANTILLATIONMARK }   /* insc=cantillationmark */,
-  {     3,   184,  9209,   2,   4, UNI_KTHI }   /* iskthi */,
-  {     1,  9365,  7338,   4,   9, UNI_PERM }   /* scx=oldpermic */,
-  {    17,  9647,  7540,   3,   6, UNI_NV__200000 }   /* nv=200000 */,
-  {     6,  6316,  9734,  11,   3, UNI_IDC }   /* idcontinue=yes */,
-  {     3,  2064,     0,  21,   0, UNI_CJKRADICALSSUP }   /* cjkradicalssupplement */,
-  {     1,   184,  2006,   2,  15, UNI_MODIFIERLETTERS }   /* ismodifierletters */,
-  {     2,  8424,  8282,   6,   7, UNI_INTAGALOG }   /* block=tagalog */,
-  {     3,  9365,  2984,   4,   6, UNI_COPT }   /* scx=coptic */,
-  {    44,  8886,  9333,   3,   4, UNI_SC__COPT }   /* sc=qaac */,
-  {    17,  3243,  8864,  11,   5, -UNI_XPOSIXSPACE }   /* whitespace=false */,
-  {     1,  6828,    24,  10,   1, UNI_BC__L }   /* bidiclass=l */,
-  {     2,  6888,  9734,  10,   3, UNI_DIA }   /* diacritic=yes */,
-  {     3,  8424,   382,   6,  32, UNI_EGYPTIANHIEROGLYPHFORMATCONTROLS }   /* block=egyptianhieroglyphformatcontrols */,
-  {     2,  3248,    36,   6,   1, UNI_XPOSIXSPACE }   /* space=t */,
-  {    22,  9093,  6591,   4,  11, UNI_MYANMAREXTB }   /* blk=myanmarextb */,
-  {     1,  8424,    78,   6,  35, UNI_ARABICMATH }   /* block=arabicmathematicalalphabeticsymbols */,
-  {     0,  9629,  5346,   3,   2, UNI_LB__EB }   /* lb=eb */,
-  {     1,   328,     0,  21,   0, UNI_MATHOPERATORS }   /* mathematicaloperators */,
-  {     0,  8002,     0,   7,   0, UNI_BENG }   /* bengali */,
-  {     1,   184,  9213,   2,   4, UNI_LANA }   /* islana */,
-  {     0,  8424,  3837,   7,  15, UNI_CYPRIOTSYLLABARY }   /* block=cypriotsyllabary */,
-  {     1,  9093,  5422,   4,  13, UNI_AEGEANNUMBERS }   /* blk=aegeannumbers */,
-  {    11,  9113,  3969,   4,   1, UNI_CCC__1 }   /* ccc=1 */,
-  {     0,  7128,  4195,  10,   9, UNI_WB__EB }   /* wordbreak=emodifier */,
-  {     1,  9153,  6525,   4,   3, UNI_LB__H3 }   /* gcb=lvt */,
-  {     0,  3868,  1156,  16,   2, UNI_PO }   /* generalcategory=po */,
-  {     1,    21,  6492,   2,  11, UNI_KATAKANAEXT }   /* inkatakanaext */,
-  {     0,  9049,  9710,   4,   3, UNI_AGE__6_DOT_2 }   /* age=v62 */,
-  {     0,   184,  1003,   2,  11, UNI_ENCLOSEDCJK }   /* isenclosedcjk */,
-  {    19,  9365,  1482,   5,   3, UNI_SIND }   /* scx=sind */,
-  {     0,  8884,  1214,   5,  25, UNI_INSC__CONSONANTINITIALPOSTFIXED }   /* insc=consonantinitialpostfixed */,
-  {     1,  9365,  2930,   4,   8, UNI_CHER }   /* scx=cherokee */,
-  {     0,  5565,  5185,  13,  14, UNI_JG__MANICHAEANYODH }   /* joininggroup=manichaeanyodh */,
-  {     2,   184,  3218,   2,  18, UNI_ZP }   /* isparagraphseparator */,
-  {     3,  8886,  5242,   5,   2, UNI_SC__KHOJ }   /* sc=khoj */,
-  {     0,  3243,  9734,  11,   3, UNI_XPOSIXSPACE }   /* whitespace=yes */,
-  {    27,  9093,  7088,   4,  10, UNI_SUPARROWSC }   /* blk=suparrowsc */,
-  {    13,  9093,   689,   4,  16, UNI_CUNEIFORMNUMBERS }   /* blk=cuneiformnumbers */,
-  {     3,  8424,  5955,   6,  12, UNI_INGUNJALAGONDI }   /* block=gunjalagondi */,
-  {     0,  2064,     0,  14,   0, UNI_CJKRADICALSSUP }   /* cjkradicalssup */,
-  {     0,  1618,     0,   4,   0, UNI_JAMO }   /* jamo */,
-  {     4,  7876,     0,   8,   0, UNI_JAMOEXTA }   /* jamoexta */,
-  {     0,   414,     0,  32,   0, UNI_INIDC }   /* ideographicdescriptioncharacters */,
-  {     0,  9093,  6991,   4,   7, UNI_INSOGDIAN }   /* blk=sogdian */,
-  {     6,  8424,  2874,   6,  19, UNI_SUPARROWSB }   /* block=supplementalarrowsb */,
-  {     3,  8233,  6602,   7,   4, UNI_SC__NAND }   /* script=nand */,
-  {     3,  6816,  8004,   4,   5, UNI_INBENGALI }   /* inbengali */,
-  {     8,  2453,     0,  20,   0, UNI_term_values_index }   /* terminalpunctuation= */,
-  {     3,   539,     0,  30,   0, UNI_CJKEXTB }   /* cjkunifiedideographsextensionb */,
-  {     1,  3671,  6988,  17,  10, UNI_SOGO }   /* scriptextensions=oldsogdian */,
-  {    17,  4297,     0,  15,   0, UNI_BRAI }   /* braillepatterns */,
-  {     1,  7956,     0,   8,   0, UNI_TAGB }   /* tagbanwa */,
-  {    13,  6918,     0,  10,   0, UNI_lb_values_index }   /* linebreak= */,
-  {     0,  1779,     3,  22,   1, -UNI_CWT }   /* changeswhentitlecased=f */,
-  {     4,  3671,  8514,  17,   4, UNI_HATR }   /* scriptextensions=hatr */,
-  {     1,   184,  9169,   2,   4, UNI_GUJR }   /* isgujr */,
-  {    11,  9153,  4140,   4,   5, UNI_GCB__XX }   /* gcb=other */,
-  {     2,  7025,  9677,   3,   3, UNI_IN__2_DOT_1 }   /* in=v21 */,
-  {     4,  9141,    26,   4,   1, UNI_DIA }   /* dia=y */,
-  {     1,  6828,   426,  10,   2, UNI_BC__ES }   /* bidiclass=es */,
-  {     2,  4402,     0,   4,   0, UNI_DASH }   /* dash */,
-  {     0,   184,  4297,   2,   4, UNI_BRAI }   /* isbrai */,
-  {     3,  3671,  2984,  17,   6, UNI_COPT }   /* scriptextensions=coptic */,
-  {     1,  9647,  7708,   3,   8, UNI_NV__15_SLASH_2 }   /* nv=7.50e+00 */,
-  {     2,  9113,  7659,   4,   2, UNI_CCC__16 }   /* ccc=16 */,
-  {     1,  5565,  5643,  13,  13, UNI_JG__MANICHAEANMEM }   /* joininggroup=manichaeanmem */,
-  {    18,  5760,  7572,  13,   8, UNI_NV__1_SLASH_3 }   /* numericvalue=3.33e-01 */,
-  {     0,  8899,     3,   5,   1, -UNI_MATH }   /* math=f */,
-  {     0,  8844,     0,   5,   0, UNI_cwcf_values_index }   /* cwcf= */,
-  {    33,  8418,  9433,   6,   4, UNI_BIDIM }   /* bidim=true */,
-  {     4,   184,  2590,   3,  18, UNI_COUNTINGROD }   /* iscountingrodnumerals */,
-  {     9,  9093,  4108,   4,   7, UNI_INMYANMAR }   /* blk=myanmar */,
-  {     5,  9365,  9157,   4,   4, UNI_GONG }   /* scx=gong */,
-  {     1,  9193,  6503,   4,  11, UNI_GCB__L }   /* hst=leadingjamo */,
-  {    18,   184,  1003,   2,  27, UNI_ENCLOSEDCJK }   /* isenclosedcjklettersandmonths */,
-  {     0,  8886,  2532,   3,   6, UNI_BRAH }   /* sc=brahmi */,
-  {   128,  9605,  2493,   3,   8, UNI_DT__VERT }   /* dt=vertical */,
-  {     0,  8424,  1599,   6,  23, UNI_COMPATJAMO }   /* block=hangulcompatibilityjamo */,
-  {    16,  9113,  8720,   5,   4, UNI_CCC__15 }   /* ccc=ccc15 */,
-  {     3,  8424,  9285,   6,   3, UNI_INNKO }   /* block=nko */,
-  {     0,  7048,     0,  10,   0, UNI_SAUR }   /* saurashtra */,
-  {     0,  8233,  7995,   7,   7, UNI_AVST }   /* script=avestan */,
-  {     1,   184,  8497,   3,   4, UNI_CWKCF }   /* iscwkcf */,
-  {     0,  9093,  3164,   4,  18, UNI_LATINEXTADDITIONAL }   /* blk=latinextadditional */,
-  {     0,  2142,  6604,   4,   9, UNI_INNANDINAGARI }   /* innandinagari */,
-  {     6,  9093,   446,   4,  32, UNI_IDEOGRAPHICSYMBOLS }   /* blk=ideographicsymbolsandpunctuation */,
-  {     4,  3671,  7203,  17,   9, UNI_BHKS }   /* scriptextensions=bhaiksuki */,
-  {     3,  9093,  6798,   4,  10, UNI_ARABICEXTA }   /* blk=arabicexta */,
-  {     8,  4642,  9734,  15,   3, UNI_DT__NONE }   /* nfkdquickcheck=yes */,
-  {     2,  6231,   495,  12,   2, UNI_NT__NU }   /* numerictype=nu */,
-  {     2,   184,  5258,   2,  11, UNI_MC }   /* isspacingmark */,
-  {     0,  9093,    42,   4,   9, UNI_CJKCOMPAT }   /* blk=cjkcompat */,
-  {     1,   184,  4388,   3,  13, UNI_SC }   /* iscurrencysymbol */,
-  {     0,  6472,  3452,   4,  15, UNI_UCAS }   /* incanadiansyllabics */,
-  {    17,  1497,  5809,   9,   2, UNI_PF }   /* category=pf */,
-  {     4,  9365,  7788,   4,   4, UNI_BALI }   /* scx=bali */,
-  {     1,  9385,     0,   4,   0, UNI_SHRD }   /* shrd */,
-  {     0,  5760,  7539,  13,   2, UNI_NV__22 }   /* numericvalue=22 */,
-  {     0,  9605,  3370,   3,   3, UNI_DT__MED }   /* dt=med */,
-  {     0,  9049,  7159,   4,   1, UNI_AGE__5 }   /* age=5 */,
-  {     8,   184,  2333,   2,  20, UNI_GLAGOLITICSUP }   /* isglagoliticsupplement */,
-  {     0,  2148,   750,   3,  29, UNI_SYMBOLSANDPICTOGRAPHSEXTA }   /* insymbolsandpictographsextendeda */,
-  {     0,   184,  2333,   2,  10, UNI_GLAG }   /* isglagolitic */,
-  {     1,  8684,  8864,   5,   5, -UNI_POSIXXDIGIT }   /* ahex=false */,
-  {     1,  8634,     1,   6,   1, -UNI_UIDEO }   /* uideo=n */,
-  {     0,   184,   133,   2,   4, UNI_M }   /* ismark */,
-  {     0,  1622,     0,  14,   0, UNI_LATINEXTA }   /* latinextendeda */,
-  {     5,  3671,  8262,  18,   6, UNI_SOYO }   /* scriptextensions=soyombo */,
-  {     3,  7018,  5409,  10,   2, UNI_IN__10 }   /* presentin=10 */,
-  {    16,  9093,  8177,   4,   7, UNI_NB }   /* blk=noblock */,
-  {     0,  3739,  8864,  17,   5, -UNI_UIDEO }   /* unifiedideograph=false */,
-  {   135,  3236,     0,  17,   0, UNI__PERL_PATWS }   /* patternwhitespace */,
-  {     2,  3671,  4946,  17,   4, UNI_CHAM }   /* scriptextensions=cham */,
-  {     1,  9731,  4195,   3,   9, UNI_WB__EB }   /* wb=emodifier */,
-  {     1,  8233,  8568,   7,   6, UNI_LYDI }   /* script=lydian */,
-  {     0,  4580,  2007,   3,  14, UNI_MODIFIERLETTERS }   /* inmodifierletters */,
-  {     3,  8233,  8934,   7,   5, UNI_RUNR }   /* script=runic */,
-  {     0,  8261,     0,   4,   0, UNI_SOYO }   /* soyo */,
-  {     2,   148,     0,  35,   0, UNI_DIACRITICALSSUP }   /* combiningdiacriticalmarkssupplement */,
-  {     0,  9629,    25,   3,   2, UNI_LB__SY }   /* lb=sy */,
-  {     0,  9365,  7916,   4,   8, UNI_MAHJ }   /* scx=mahajani */,
-  {     0,  8233,  8324,   7,   7, UNI_ZZZZ }   /* script=unknown */,
-  {    23,  1084,  9734,  26,   3, UNI_CWKCF }   /* changeswhennfkccasefolded=yes */,
-  {     4,  8871,   138,   3,   2, UNI_SB__FO }   /* sb=fo */,
-  {    18,  2148,  5368,   3,  13, UNI_SUPPUNCTUATION }   /* insuppunctuation */,
-  {     0,  9121,  9734,   4,   3, UNI_CWL }   /* cwl=yes */,
-  {     2,   184,  6723,   2,  11, UNI_SYLO }   /* issylotinagri */,
-  {    19,  8879,  7366,   3,   8, UNI_INPAUCINHAU }   /* inpaucinhau */,
-  {     9,  9229,     0,   4,   0, UNI_LINB }   /* linb */,
-  {     1,  7025,  8997,   3,   4, UNI_IN__11 }   /* in=11.0 */,
-  {     0,  6918,  3804,  10,  16, UNI_LB__CP }   /* linebreak=closeparenthesis */,
-  {     6,  3951,  3129,   3,  16, UNI_IDSB }   /* isidsbinaryoperator */,
-  {     2,  9049,  9692,   4,   3, UNI_AGE__4_DOT_1 }   /* age=v41 */,
-  {     3,  9620,    47,   3,   1, UNI_M }   /* gc=m */,
-  {     0,  9383,  8249,   4,   5, UNI_SHAW }   /* inshavian */,
-  {     1,   184,  8562,   2,   4, UNI_LYCI }   /* islyci */,
-  {     0,  8871,   125,   3,   2, UNI_LB__CR }   /* sb=cr */,
-  {     1,  8886,  8892,   3,   4, UNI_PHLI }   /* sc=phli */,
-  {     0,  8871,    69,   3,   2, UNI_SB__UP }   /* sb=up */,
-  {     5,  8338,  9734,   7,   3, UNI_XPOSIXSPACE }   /* wspace=yes */,
-  {     3,  3671,  8944,  17,   5, UNI_TAKR }   /* scriptextensions=takri */,
-  {     0,   689,     0,  30,   0, UNI_CUNEIFORMNUMBERS }   /* cuneiformnumbersandpunctuation */,
-  {     0,  6015,  6745,  12,  11, UNI_JT__T }   /* joiningtype=transparent */,
-  {     1,  8424,  4961,   6,  14, UNI_HIGHSURROGATES }   /* block=highsurrogates */,
-  {     0,  9605,  4801,   3,   6, UNI_DT__SQR }   /* dt=square */,
-  {     8,  3020,     0,  13,   0, UNI_DEVANAGARIEXT }   /* devanagariext */,
-  {     2,  8086,  9433,   7,   4, UNI_GRBASE }   /* grbase=true */,
-  {    11,  1158,  8283,   3,   6, UNI_INTAGALOG }   /* intagalog */,
-  {     0,  3868,    38,  16,   2, UNI_XPOSIXDIGIT }   /* generalcategory=nd */,
-  {     2,  8424,  5884,   7,  11, UNI_CYRILLICEXTB }   /* block=cyrillicextb */,
-  {   130,  8886,  1573,   3,   4, UNI_SC__PHAG }   /* sc=phag */,
-  {     3,  9647,  9737,   3,   2, UNI_NV__38 }   /* nv=38 */,
-  {     2,  1536,  8066,   3,   6, UNI_INELBASAN }   /* inelbasan */,
-  {     3,  8886,  9325,   3,   4, UNI_MIAO }   /* sc=plrd */,
-  {     4,  2204,  2799,   3,  18, UNI_OTTOMANSIYAQNUMBERS }   /* isottomansiyaqnumbers */,
-  {     0,  9113,  8371,   4,   2, UNI_CCC__32 }   /* ccc=32 */,
-  {     2,  1977,  9734,  22,   3, UNI__PERL_NCHAR }   /* noncharactercodepoint=yes */,
-  {     2,  2204,  8193,   4,   5, UNI_OLCK }   /* isolchiki */,
-  {     0,   689,     0,   9,   0, UNI_XSUX }   /* cuneiform */,
-  {     6,  5565,  5381,  13,  14, UNI_JG__HAMZAONHEHGOAL }   /* joininggroup=tehmarbutagoal */,
-  {     4,  8424,  2169,   6,  11, UNI_INMEETEIMAYEK }   /* block=meeteimayek */,
-  {     3,  4580,  8150,   3,   6, UNI_INMULTANI }   /* inmultani */,
-  {     0,  9093,  2148,   4,  21, UNI_ININSCRIPTIONALPARTHIAN }   /* blk=inscriptionalparthian */,
-  {     0,  7018,  9575,  10,   3, UNI_IN__6_DOT_1 }   /* presentin=6.1 */,
-  {     2,  3251,  9433,   3,   4, UNI_CE }   /* ce=true */,
-  {     9,  9093,    42,   4,   3, UNI_CJK }   /* blk=cjk */,
-  {     0,  9602,   995,   3,   2, -UNI_DI }   /* di=no */,
-  {     0,  5339,    69,  14,   2, UNI_SB__UP }   /* sentencebreak=up */,
-  {     2,  9365,  7892,   4,   4, UNI_JAVA }   /* scx=java */,
-  {     0,  9093,  2169,   4,  11, UNI_INMEETEIMAYEK }   /* blk=meeteimayek */,
-  {     0,  9265,     0,   4,   0, UNI_MTEI }   /* mtei */,
-  {     0,  8886,  8914,   3,   5, UNI_NSHU }   /* sc=nushu */,
-  {    23,  9731,  7988,   3,   7, UNI_WB__LE }   /* wb=aletter */,
-  {     0,  9365,  7365,   4,   4, UNI_PAUC }   /* scx=pauc */,
-  {     0,  8424,   183,   6,  34, UNI_MISCPICTOGRAPHS }   /* block=miscellaneoussymbolsandpictographs */,
-  {     0,  6828,  9644,  10,   3, UNI_BC__NSM }   /* bidiclass=nsm */,
-  {     4,  3739,     1,  17,   1, -UNI_UIDEO }   /* unifiedideograph=n */,
-  {     0,  9373,     0,   4,   0, UNI_SGNW }   /* sgnw */,
-  {     1,   184,  3964,   2,   6, UNI_LATIN1 }   /* islatin1 */,
-  {    74,   250,     0,  33,   0, UNI_MISCMATHSYMBOLSA }   /* miscellaneousmathematicalsymbolsa */,
-  {     1,  8233,  7118,   7,   4, UNI_WARA }   /* script=wara */,
-  {     1,   406,     0,   7,   0, UNI_XPOSIXCNTRL }   /* control */,
-  {    10,  9629,  5952,   3,   2, UNI_LB__ZW }   /* lb=zw */,
-  {     0,  4361,  3112,   4,   9, UNI_GEORGIANSUP }   /* ingeorgiansup */,
-  {     0,  8871,   721,   3,   5, UNI_SB__CL }   /* sb=close */,
-  {     3,  1084,  8864,  26,   5, -UNI_CWKCF }   /* changeswhennfkccasefolded=false */,
-  {     1,  1362,  8461,  25,   5, UNI_CCC__129 }   /* canonicalcombiningclass=ccc129 */,
-  {     1,  9623,  5115,   3,  14, UNI_JG__MANICHAEANHETH }   /* jg=manichaeanheth */,
-  {     1,  9647,  8400,   3,   5, UNI_NV__90000 }   /* nv=90000 */,
-  {     5,    78,     0,  10,   0, UNI_ARABICMATH }   /* arabicmath */,
-  {     5,  7932,     1,   8,   1, -UNI_RADICAL }   /* radical=n */,
-  {     1,  8424,  8532,   6,   6, UNI_KANBUN }   /* block=kanbun */,
-  {     0,  8424,  9453,   6,   3, UNI_INVAI }   /* block=vai */,
-  {    17,  8233,  9265,   7,   4, UNI_MTEI }   /* script=mtei */,
-  {     5,  8310,     0,   7,   0, UNI_TIRH }   /* tirhuta */,
-  {     0,  8508,  9433,   6,   4, UNI_GREXT }   /* grext=true */,
-  {     2,  8424,  7876,   6,   8, UNI_JAMOEXTA }   /* block=jamoexta */,
-  {     0,  8954,  8864,   5,   5, -UNI_XIDC }   /* xidc=false */,
-  {     0,  8424,  8114,   6,   7, UNI_KALI }   /* block=kayahli */,
-  {     4,  5367,     0,  14,   0, UNI_SUPPUNCTUATION }   /* suppunctuation */,
-  {    30,  9093,   250,   4,  33, UNI_MISCMATHSYMBOLSA }   /* blk=miscellaneousmathematicalsymbolsa */,
-  {     0,  5760,  9029,  13,   4, UNI_NV__3_SLASH_64 }   /* numericvalue=3/64 */,
-  {    18,  6885,  5968,   3,   5, UNI_HEBR }   /* ishebrew */,
-  {     4,  3671,  3729,  18,  10, UNI_SGNW }   /* scriptextensions=signwriting */,
-  {    12,  1497,   598,   9,   2, UNI_XPOSIXCNTRL }   /* category=cc */,
-  {     0,  9093,  4204,   4,   9, UNI_SYRIACSUP }   /* blk=syriacsup */,
-  {    16,  8886,  8065,   3,   4, UNI_ELBA }   /* sc=elba */,
-  {     0,  9629,  1472,   3,   9, UNI_LB__SG }   /* lb=surrogate */,
-  {     3,  3398,  8864,  18,   5, -UNI_VS }   /* variationselector=false */,
-  {     0,  7118,     0,  10,   0, UNI_WARA }   /* warangciti */,
-  {     2,  1029,     0,   2,   0, UNI_SO }   /* so */,
-  {     4,  2148,  6724,   3,  10, UNI_INSYLOTINAGRI }   /* insylotinagri */,
-  {     0,  8879,   472,   3,   2, UNI_PUA }   /* inpua */,
-  {     1,  5760,  7612,  13,   8, UNI_NV__5_SLASH_12 }   /* numericvalue=4.17e-01 */,
-  {    23,  5760,  9497,  13,   3, UNI_NV__1_SLASH_5 }   /* numericvalue=1/5 */,
-  {     1,  3868,   112,  16,   2, UNI_SC }   /* generalcategory=sc */,
-  {     0,  8886,  7329,   3,   9, UNI_ITAL }   /* sc=olditalic */,
-  {    50,  8886,  9465,   3,   4, UNI_XPEO }   /* sc=xpeo */,
-  {     0,  5565,  5936,  13,   7, UNI_JG__SEMKATH }   /* joininggroup=semkath */,
-  {    12,  8886,  4220,   3,   4, UNI_TANG }   /* sc=tang */,
-  {     0,  3671,  9165,  17,   4, UNI_GREK }   /* scriptextensions=grek */,
-  {     1,  9049,  9674,   4,   3, UNI_AGE__2 }   /* age=v20 */,
-  {     9,  3671,  8310,  17,   7, UNI_TIRH }   /* scriptextensions=tirhuta */,
-  {    34,  9193,  6525,   4,  11, UNI_LB__H3 }   /* hst=lvtsyllable */,
-  {     0,  5760,  7502,  13,   1, UNI_NV__8 }   /* numericvalue=8 */,
-  {     8,  6768,     2,   3,   1, UNI_YI }   /* isyi */,
-  {     1,  9093,  2211,   4,  21, UNI_SINHALAARCHAICNUMBERS }   /* blk=sinhalaarchaicnumbers */,
-  {     0,  8424,  1576,   6,  18, UNI_GEOMETRICSHAPESEXT }   /* block=geometricshapesext */,
-  {     4,  5760,  7468,  13,   8, UNI_NV__3_SLASH_2 }   /* numericvalue=1.50e+00 */,
-  {    10,  8100,  9734,   7,   3, UNI_HYPHEN }   /* hyphen=yes */,
-  {     0,    21,  8934,   2,   5, UNI_INRUNIC }   /* inrunic */,
-  {     0,  3671,  8135,  17,   7, UNI_MAND }   /* scriptextensions=mandaic */,
-  {     9,  8874,     1,   5,   1, -UNI_IDST }   /* idst=n */,
-  {     2,  8955,  9433,   4,   4, UNI_IDC }   /* idc=true */,
-  {     4,  1933,     3,  22,   1, -UNI_LOE }   /* logicalorderexception=f */,
-  {     1,  9728,  8864,   3,   5, -UNI_VS }   /* vs=false */,
-  {     1,  1497,  1474,  11,   7, UNI__PERL_SURROGATE }   /* category=surrogate */,
-  {     1,   184,   698,   2,   6, UNI_N }   /* isnumber */,
-  {     1,  1599,     0,   6,   0, UNI_HANG }   /* hangul */,
-  {     0,  5565,  4954,  13,   7, UNI_JG__HEHGOAL }   /* joininggroup=hehgoal */,
-  {     0,  9620,  1141,   3,   2, UNI_TITLE }   /* gc=lt */,
-  {     0,  6231,  4829,  12,   5, UNI_NT__DI }   /* numerictype=digit */,
-  {    35,  8684,    36,   5,   1, UNI_POSIXXDIGIT }   /* ahex=t */,
-  {     0,  6315,  9734,  12,   3, UNI_XIDC }   /* xidcontinue=yes */,
-  {     0,  3671,  9161,  17,   4, UNI_GONM }   /* scriptextensions=gonm */,
-  {     3,   184,  2741,   2,   4, UNI_MERO }   /* ismero */,
-  {     0,  5760,  7540,  13,   4, UNI_NV__2000 }   /* numericvalue=2000 */,
-  {    57,  9593,  2013,   3,   3, UNI_BC__RLE }   /* bc=rle */,
-  {    32,  9365,  7375,   5,   8, UNI_SAMR }   /* scx=samaritan */,
-  {    19,  9620,    48,   3,   1, UNI_P }   /* gc=p */,
-  {     5,  8233,  2984,   7,   6, UNI_SC__COPT }   /* script=coptic */,
-  {     0,  1482,  6998,  24,  10, UNI_INPC__OVERSTRUCK }   /* indicpositionalcategory=overstruck */,
-  {     0,  8424,  4252,   6,  15, UNI_ARABICEXTA }   /* block=arabicextendeda */,
-  {     4,  8424,  7088,   6,  10, UNI_SUPARROWSC }   /* block=suparrowsc */,
-  {    20,  7025,  9578,   3,   3, UNI_IN__6_DOT_3 }   /* in=6.3 */,
-  {     8,  9313,  8864,   4,   5, -UNI_PCM }   /* pcm=false */,
-  {     3,  8617,     0,   6,   0, UNI_TERM }   /* term=t */,
-  {    12,  9731,  4801,   3,   2, UNI_WB__SQ }   /* wb=sq */,
-  {     0,  9623,  3637,   3,  17, UNI_JG__MANICHAEANHUNDRED }   /* jg=manichaeanhundred */,
-  {     4,  9365,  8628,   4,   4, UNI_THAA }   /* scx=thaa */,
-  {     0,  2703,     3,  19,   1, -UNI_IDST }   /* idstrinaryoperator=f */,
-  {     0,  5760,  8782,  13,   2, UNI_NV__27 }   /* numericvalue=27 */,
-  {     0,  5435,     0,  12,   0, UNI_BIDIM }   /* bidimirrored */,
-  {    49,  8886,  7860,   3,   8, UNI_SC__HIRA }   /* sc=hiragana */,
-  {     0,  8424,  2021,   6,  15, UNI_TRANSPORTANDMAP }   /* block=transportandmap */,
-  {     0,  4447,     9,  15,   2, UNI_EA__NA }   /* eastasianwidth=na */,
-  {     0,  6005,  1824,   3,  18, UNI_CJKCOMPATIDEOGRAPHS }   /* incjkcompatideographs */,
-  {     1,    38,     0,   2,   0, UNI_XPOSIXDIGIT }   /* nd */,
-  {     0,  8332,   950,   3,  26, UNI_ALPHABETICPF }   /* isalphabeticpresentationforms */,
-  {     4,  8424,  8072,   6,   7, UNI_INELYMAIC }   /* block=elymaic */,
-  {     0,  5760,  9554,  13,   3, UNI_NV__3_SLASH_4 }   /* numericvalue=3/4 */,
-  {     0,  9909,  9922,   3,   4, UNI_XPOSIXPRINT }   /* isprint */,
-  {     1,  5565,     3,  15,   1, UNI_JG__KAF }   /* joininggroup=kaf */,
-  {     1,  9623,  5139,   3,   4, UNI_JG__KAPH }   /* jg=kaph */,
-  {     0,  6918,  5297,  10,  14, UNI_LB__PO }   /* linebreak=postfixnumeric */,
-  {     8,  9365,  4108,   4,   7, UNI_MYMR }   /* scx=myanmar */,
-  {     0,  3671,  7916,  17,   8, UNI_MAHJ }   /* scriptextensions=mahajani */,
-  {     4,  8233,  3110,   7,   4, UNI_SC__GEOR }   /* script=geor */,
-  {     2,  2836,     0,  12,   0, UNI_SUNDANESESUP }   /* sundanesesup */,
-  {     2,  9237,    36,   4,   1, UNI_LOE }   /* loe=t */,
-  {     5,  9093,   837,   4,  18, UNI_PHONETICEXT }   /* blk=phoneticextensions */,
-  {     5,  9093,  4477,   4,  15, UNI_INHANGUL }   /* blk=hangulsyllables */,
-  {     4,  9365,  2353,   4,  20, UNI_PHLI }   /* scx=inscriptionalpahlavi */,
-  {     0,  3671,  2127,  17,  14, UNI_ROHG }   /* scriptextensions=hanifirohingya */,
-  {    36,  9901,  4828,   8,   6, UNI_XPOSIXXDIGIT }   /* isxposixxdigit */,
-  {     0,  9093,  3964,   4,   9, UNI_LATIN1 }   /* blk=latin1sup */,
-  {     0,  8886,  8709,   3,   5, UNI_SC__BUHD }   /* sc=buhid */,
-  {     1,  8886,  8296,   3,   7, UNI_TAVT }   /* sc=taiviet */,
-  {     0,   184,  3536,   3,  16, UNI_CYRILLICEXTC }   /* iscyrillicextendedc */,
-  {     7,   184,  7230,   2,   8, UNI_EXT }   /* isextender */,
-  {     0,  9647,  7540,   3,   5, UNI_NV__20000 }   /* nv=20000 */,
-  {     2,  1362,  9765,  24,   2, UNI_CCC__8 }   /* canonicalcombiningclass=kv */,
-  {     2,   184,  5896,   3,  11, UNI_CYRILLICEXTC }   /* iscyrillicextc */,
-  {     8,  9365,  2984,   4,   4, UNI_COPT }   /* scx=copt */,
-  {    12,  8424,  3452,   8,  15, UNI_UCAS }   /* block=canadiansyllabics */,
-  {     8,  8954,   995,   5,   2, -UNI_XIDC }   /* xidc=no */,
-  {     0,  1085,     0,   4,   0, UNI_HANG }   /* hang */,
-  {    11,   117,  2355,   4,  18, UNI_ININSCRIPTIONALPAHLAVI }   /* ininscriptionalpahlavi */,
-  {    18,  1243,     3,  21,   1, -UNI_CE }   /* compositionexclusion=f */,
-  {     0,  6828,  9614,  10,   3, UNI_BC__FSI }   /* bidiclass=fsi */,
-  {     1,  9093,  1622,   4,   9, UNI_LATINEXTE }   /* blk=latinexte */,
-  {    17,  8424,  8149,   6,   7, UNI_INMULTANI }   /* block=multani */,
-  {     6,  8233,  9221,   7,   4, UNI_SC__LATN }   /* script=latn */,
-  {     0,  3671,  3836,  17,   7, UNI_CPRT }   /* scriptextensions=cypriot */,
-  {     2,  3671,  9197,  17,   4, UNI_KALI }   /* scriptextensions=kali */,
-  {     0,  3772,     0,   8,   0, UNI_BOPO }   /* bopomofo */,
-  {     5,  8886,  6555,   5,   2, UNI_KHMR }   /* sc=khmr */,
-  {     0,  9626,     0,   3,   1, UNI_JT__U }   /* jt=u */,
-  {     1,  8884,  5474,   5,  13, UNI_INSC__CONSONANTDEAD }   /* insc=consonantdead */,
-  {     1,  6613,     0,  11,   0, UNI_LO }   /* otherletter */,
-  {     8,  3951,  3587,   3,  16, UNI_INDICSIYAQNUMBERS }   /* isindicsiyaqnumbers */,
-  {     0,  6015,    24,  12,   1, UNI_JT__L }   /* joiningtype=l */,
-  {     0,  8100,     0,   7,   0, UNI_hyphen_values_index }   /* hyphen= */,
-  {     0,  6003,  9433,  12,   4, UNI_JOINC }   /* joincontrol=true */,
-  {     1,  8002,     0,   4,   0, UNI_BENG }   /* beng */,
-  {     1,  9093,  2798,   4,  19, UNI_OTTOMANSIYAQNUMBERS }   /* blk=ottomansiyaqnumbers */,
-  {     2,  9725,    18,   3,   1, UNI_VO__R }   /* vo=r */,
-  {     4,  9313,     0,   4,   0, UNI_pcm_values_index }   /* pcm= */,
-  {     1,  3671,  9261,  17,   3, UNI_MRO }   /* scriptextensions=mro */,
-  {     0,  8233,  9453,   7,   4, UNI_VAI }   /* script=vaii */,
-  {    19,  9608,     0,   3,   0, UNI_ea_values_index }   /* ea= */,
-  {     0,  9093,  5721,   4,  13, UNI_MAYANNUMERALS }   /* blk=mayannumerals */,
-  {     8,  9605,  8490,   3,   6, UNI_DT__ENC }   /* dt=circle */,
-  {     0,   719,     0,  16,   0, UNI_ENCLOSEDALPHANUM }   /* enclosedalphanum */,
-  {     0,  9093,  8128,   4,   7, UNI_INMAKASAR }   /* blk=makasar */,
-  {     0,  8233,  9145,   7,   4, UNI_DSRT }   /* script=dsrt */,
-  {     0,  9629,  5967,   3,  12, UNI_LB__HL }   /* lb=hebrewletter */,
-  {     4,  8886,  3772,   3,   4, UNI_SC__BOPO }   /* sc=bopo */,
-  {    10,  9365,  7772,   4,   8, UNI_ARMN }   /* scx=armenian */,
-  {     1,  7230,  9734,   9,   3, UNI_EXT }   /* extender=yes */,
-  {     2,  3671,  8919,  17,   5, UNI_OGAM }   /* scriptextensions=ogham */,
-  {    32,  8849,     1,   5,   1, -UNI_CWCM }   /* cwcm=n */,
-  {     0,  6885,  6247,   3,   3, UNI_HUNG }   /* ishung */,
-  {     0,   184,   921,   2,  18, UNI_INVS }   /* isvariationselectors */,
-  {     1,    21,  4975,   2,  14, UNI_KANASUP }   /* inkanasupplement */,
-  {     1,  5760,  7588,  13,   8, UNI_NV__3_SLASH_8 }   /* numericvalue=3.75e-01 */,
-  {     1,  8233,   983,   7,   5, UNI_SC__GREK }   /* script=greek */,
-  {     3,  5760,  7620,  13,   8, UNI_NV__9_SLASH_2 }   /* numericvalue=4.50e+00 */,
-  {    34,  2006,     0,  14,   0, UNI_LM }   /* modifierletter */,
-  {     0,   184,  3092,   2,  18, UNI_INPUNCTUATION }   /* isgeneralpunctuation */,
-  {     0,  6570,     0,   4,   0, UNI__PERL_SURROGATE }   /* iscs */,
-  {     0,  8886,  8226,   3,   7, UNI_SC__PHAG }   /* sc=phagspa */,
-  {     0,  7128,  6415,  10,  11, UNI_WB__DQ }   /* wordbreak=doublequote */,
-  {     0,  8233,  1188,   7,   8, UNI_SC__KANA }   /* script=katakana */,
-  {    32,  9629,  5059,   3,  14, UNI_LB__BK }   /* lb=mandatorybreak */,
-  {     4,  9093,   183,   4,  34, UNI_MISCPICTOGRAPHS }   /* blk=miscellaneoussymbolsandpictographs */,
-  {     5,  9629,    34,   3,   2, UNI_LB__EX }   /* lb=ex */,
-  {    74,  8886,  9417,   3,   4, UNI_TFNG }   /* sc=tfng */,
-  {     2,  9909,     0,   4,   0, UNI_PO }   /* ispo */,
-  {     0,  9781,  8599,   7,   4, UNI__PERL_PATWS }   /* _perl_patws */,
-  {     1,  9137,     0,   4,   0, UNI_dep_values_index }   /* dep= */,
-  {    17,  2106,  7820,  21,   8, UNI_WB__EB }   /* graphemeclusterbreak=ebasegaz */,
-  {     0,  8886,  2353,   3,  20, UNI_PHLI }   /* sc=inscriptionalpahlavi */,
-  {     1,  4821,  9433,  14,   4, UNI_POSIXXDIGIT }   /* asciihexdigit=true */,
-  {     0,  8886,   382,   3,   4, UNI_EGYP }   /* sc=egyp */,
-  {     5,  8886,  2211,   3,   4, UNI_SC__SINH }   /* sc=sinh */,
-  {     2,  5760,  7660,  13,   8, UNI_NV__3_SLASH_5 }   /* numericvalue=6.00e-01 */,
-  {    20,  8233,  2984,   7,   4, UNI_SC__COPT }   /* script=copt */,
-  {     2,  1243,     0,  21,   0, UNI_ce_values_index }   /* compositionexclusion= */,
-  {    18,  8899,   995,   5,   2, -UNI_MATH }   /* math=no */,
-  {    10,  9903,  5492,   6,   5, UNI_XPOSIXALNUM }   /* xposixalnum */,
-  {     5,  9626,     0,   3,   0, UNI_jt_values_index }   /* jt= */,
-  {     2,  8520,     1,   6,   1, -UNI_JOINC }   /* joinc=n */,
-  {    12,  8233,  2169,   7,  11, UNI_MTEI }   /* script=meeteimayek */,
-  {     7,  9093,  2930,   4,   8, UNI_INCHEROKEE }   /* blk=cherokee */,
-  {     1,  9629,    42,   3,   2, UNI_LB__CJ }   /* lb=cj */,
-  {    44,  1497,  8499,   9,   2, UNI_CF }   /* category=cf */,
-  {     1,   106,     0,   6,   0, UNI_S }   /* symbol */,
-  {     1,  6918,   202,  10,   2, UNI_LB__SA }   /* linebreak=sa */,
-  {     1,  8424,  5526,   6,  13, UNI_GREEKEXT }   /* block=greekextended */,
-  {     1,  9647,  9041,   3,   4, UNI_NV__7_SLASH_12 }   /* nv=7/12 */,
-  {     0,  9647,  7556,   3,   8, UNI_NV__1_SLASH_32 }   /* nv=3.13e-02 */,
-  {     1,  9365,  9289,   4,   4, UNI_NSHU }   /* scx=nshu */,
-  {    32,  9909,  7366,   3,   8, UNI_PAUC }   /* ispaucinhau */,
-  {     1,  8424,  8894,   6,   5, UNI_INLIMBU }   /* block=limbu */,
-  {     0,  8086,     0,   7,   0, UNI_grbase_values_index }   /* grbase= */,
-  {     0,  8844,     0,   4,   0, UNI_CWCF }   /* cwcf */,
-  {     5,   184,  2590,   3,  10, UNI_COUNTINGROD }   /* iscountingrod */,
-  {     0,  8332,   977,   3,  26, UNI_ANCIENTGREEKMUSIC }   /* isancientgreekmusicalnotation */,
-  {    36,  8233,  9089,   7,   4, UNI_BHKS }   /* script=bhks */,
-  {     0,  9153,  1855,   4,   2, UNI_GCB__CN }   /* gcb=cn */,
-  {     0,  9623,     0,   3,   0, UNI_jg_values_index }   /* jg= */,
-  {     0,  3868,   341,  16,   2, UNI_PE }   /* generalcategory=pe */,
-  {    64,  8424,   600,   7,  29, UNI_CJKEXTD }   /* block=cjkunifiedideographsextensiond */,
-  {     3,  7419,  9433,   9,   4, UNI_XIDS }   /* xidstart=true */,
-  {    16,  1735,   995,  22,   2, -UNI_CWCM }   /* changeswhencasemapped=no */,
-  {     1,  9093,  5367,   4,  14, UNI_SUPPUNCTUATION }   /* blk=suppunctuation */,
-  {     0,  9093,    42,   4,  16, UNI_CJKCOMPAT }   /* blk=cjkcompatibility */,
-  {     2,  1362,  8837,  24,   2, UNI_CCC__91 }   /* canonicalcombiningclass=91 */,
-  {     2,  1057,   995,  27,   2, -UNI_PCM }   /* prependedconcatenationmark=no */,
-  {     0,  9113,  8469,   4,   3, UNI_CCC__130 }   /* ccc=130 */,
-  {     3,  7025,     0,   3,   0, UNI_in_values_index }   /* in= */,
-  {     0,  9093,  3092,   4,  18, UNI_INPUNCTUATION }   /* blk=generalpunctuation */,
-  {    49,  5339,     0,  16,   0, UNI_SB__SP }   /* sentencebreak=sp */,
-  {     0,  8424,  8002,   6,   7, UNI_INBENGALI }   /* block=bengali */,
-  {     2,  1573,     0,   4,   0, UNI_PHAG }   /* phag */,
-  {     0,  8149,     0,   7,   0, UNI_MULT }   /* multani */,
-  {     2,  9647,  8400,   3,   3, UNI_NV__900 }   /* nv=900 */,
-  {     1,  9647,  7740,   3,   8, UNI_NV__1_SLASH_12 }   /* nv=8.33e-02 */,
-  {     0,  6712,     0,  11,   0, UNI_SUPERANDSUB }   /* superandsub */,
-  {    11,  3868,  2006,  16,  14, UNI_LM }   /* generalcategory=modifierletter */,
-  {     1,  6828,  2433,  10,  11, UNI_BC__R }   /* bidiclass=righttoleft */,
-  {     0,  6918,  7909,  11,   7, UNI_LB__LF }   /* linebreak=linefeed */,
-  {     0,  9901,  4829,   8,   5, UNI_XPOSIXDIGIT }   /* isxposixdigit */,
-  {     0,  9137,    26,   4,   1, UNI_DEP }   /* dep=y */,
-  {     6,  9093,  2984,   4,  18, UNI_COPTICEPACTNUMBERS }   /* blk=copticepactnumbers */,
-  {     0,  1362,  1700,  24,   2, UNI_CCC__DB }   /* canonicalcombiningclass=db */,
-  {     5,  9365,  7356,   4,   9, UNI_PALM }   /* scx=palmyrene */,
-  {    11,  8886,  8002,   3,   4, UNI_SC__BENG }   /* sc=beng */,
-  {     3,   283,     0,  33,   0, UNI_MISCMATHSYMBOLSB }   /* miscellaneousmathematicalsymbolsb */,
-  {     4,  9269,     0,   4,   0, UNI_MYMR }   /* mymr */,
-  {     0,  7025,  9713,   3,   3, UNI_IN__6_DOT_3 }   /* in=v63 */,
-  {     0,  9620,  9767,   3,   2, UNI_CASEDLETTER }   /* gc=l& */,
-  {     2,  8617,    26,   5,   1, UNI_TERM }   /* term=y */,
-  {     1,  9093,  8226,   4,   7, UNI_INPHAGSPA }   /* blk=phagspa */,
-  {     0,  1757,   995,  22,   2, -UNI_CWL }   /* changeswhenlowercased=no */,
-  {    34,  9193,   881,   4,   1, UNI_GCB__V }   /* hst=v */,
-  {     2,  8886,  8934,   3,   5, UNI_RUNR }   /* sc=runic */,
-  {     0,  5565,  6147,  13,  12, UNI_JG__MANICHAEANPE }   /* joininggroup=manichaeanpe */,
-  {     2,  9623,  7038,   3,  10, UNI_JG__REVERSEDPE }   /* jg=reversedpe */,
-  {     2,  9647,  8394,   3,   2, UNI_NV__80 }   /* nv=80 */,
-  {     0,  7230,     0,   8,   0, UNI_EXT }   /* extender */,
-  {     0,   184,   865,   2,  28, UNI_SUPPUAA }   /* issupplementaryprivateuseareaa */,
-  {     0,  5760,  7603,  13,   2, UNI_NV__24 }   /* numericvalue=24 */,
-  {    71,  6005,  1412,   4,  22, UNI_DIACRITICALSFORSYMBOLS }   /* incombiningmarksforsymbols */,
-  {     1,   184,  2779,   2,  12, UNI_MONGOLIANSUP }   /* ismongoliansup */,
-  {    58,  2703,     0,  19,   0, UNI_idst_values_index }   /* idstrinaryoperator= */,
-  {    72,   184,  2874,   2,  19, UNI_SUPARROWSB }   /* issupplementalarrowsb */,
-  {     1,  8424,  3020,   6,  10, UNI_INDEVANAGARI }   /* block=devanagari */,
-  {     3,  1362,  8770,  25,   4, UNI_CCC__25 }   /* canonicalcombiningclass=ccc25 */,
-  {     0,  9602,     0,   3,   0, UNI_di_values_index }   /* di= */,
-  {     0,  8424,  6267,   6,  12, UNI_PHAISTOS }   /* block=phaistosdisc */,
-  {     0,  7128,  7293,  10,   9, UNI_WB__MB }   /* wordbreak=midnumlet */,
-  {     1,  9731,  7820,   3,   8, UNI_WB__EB }   /* wb=ebasegaz */,
-  {     2,  4447,   835,  15,   1, UNI_EA__W }   /* eastasianwidth=w */,
-  {     0,  9093,   988,   4,   5, UNI_MUSIC }   /* blk=music */,
-  {    11,   184,  9217,   2,   4, UNI_LAO }   /* islaoo */,
-  {     0,  8899,  9734,   5,   3, UNI_MATH }   /* math=yes */,
-  {     6,  6949,  3452,   4,  15, UNI_UCAS }   /* iscanadiansyllabics */,
-  {     0,  8424,  6051,   6,  12, UNI_MAHJONG }   /* block=mahjongtiles */,
-  {     0,  1497,  4140,   9,   5, UNI_C }   /* category=other */,
-  {     2,  2484,     0,   4,   0, UNI_MAND }   /* mand */,
-  {     0,  6918,   878,  10,   2, UNI_LB__PR }   /* linebreak=pr */,
-  {     1,  2684,  5394,  19,   2, UNI_LB__H2 }   /* hangulsyllabletype=lv */,
-  {     3,  9129,     3,   4,   1, -UNI_CWU }   /* cwu=f */,
-  {    84,  8424,   690,   7,   8, UNI_INCUNEIFORM }   /* block=cuneiform */,
-  {     2,  3868,  3146,  16,  18, UNI_PI }   /* generalcategory=initialpunctuation */,
-  {     1,  8886,  6183,   3,   4, UNI_MEND }   /* sc=mend */,
-  {     0,  9093,  7257,   4,   9, UNI_LATINEXTB }   /* blk=latinextb */,
-  {     0,  9728,  9433,   3,   4, UNI_VS }   /* vs=true */,
-  {     0,   184,  3110,   2,   4, UNI_GEOR }   /* isgeor */,
-  {     0,  9626,  6291,   3,  12, UNI_JT__R }   /* jt=rightjoining */,
-  {     1,  9953,    25,   3,   1, UNI_VS }   /* isvs */,
-  {     7,  2453,     1,  20,   1, -UNI_TERM }   /* terminalpunctuation=n */,
-  {     8,  9093,  3290,   4,  18, UNI_RUMI }   /* blk=ruminumeralsymbols */,
-  {     2,  8233,  9337,   7,   4, UNI_SC__QAAI }   /* script=qaai */,
-  {     3,  1239,    26,  25,   1, UNI_COMPEX }   /* fullcompositionexclusion=y */,
-  {     9,  7118,     0,   4,   0, UNI_WARA }   /* wara */,
-  {     0,  1536,  3039,   3,  10, UNI_ETHIOPICSUP }   /* inethiopicsup */,
-  {     0,  9620,  1508,   3,   2, UNI_PS }   /* gc=ps */,
-  {     0,  8332,  3758,   4,   7, UNI_ARABICSUP }   /* isarabicsup */,
-  {     1,  3038,     0,   4,   0, UNI_ETHI }   /* ethi */,
-  {     0,  8424,   976,   6,  17, UNI_ANCIENTGREEKMUSIC }   /* block=ancientgreekmusic */,
-  {     7,  1362,   726,  24,   2, UNI_CCC__DA }   /* canonicalcombiningclass=da */,
-  {     0,  3868,   400,  16,   6, UNI_CF }   /* generalcategory=format */,
-  {     0,  9731,  6668,   3,  11, UNI_WB__SQ }   /* wb=singlequote */,
-  {     2,  9605,  1362,   3,   9, UNI_DT__CAN }   /* dt=canonical */,
-  {    16,  8424,  2333,   6,  13, UNI_GLAGOLITICSUP }   /* block=glagoliticsup */,
-  {    35,  5979,     3,  12,   1, -UNI_IDEO }   /* ideographic=f */,
-  {     4,  9365,  6691,   5,  10, UNI_SORA }   /* scx=sorasompeng */,
-  {     2,  8424,  8045,   7,   6, UNI_CJKEXTF }   /* block=cjkextf */,
-  {     9,  1158,  3327,   3,  10, UNI_TAIXUANJING }   /* intaixuanjing */,
-  {     0,  8233,  9217,   7,   4, UNI_LAO }   /* script=laoo */,
-  {     1,  9281,     0,   4,   0, UNI_NEWA }   /* newa */,
-  {     0,  9623,  6701,   3,  11, UNI_JG__STRAIGHTWAW }   /* jg=straightwaw */,
-  {     0,  6039,     0,  12,   0, UNI_NL }   /* letternumber */,
-  {     5,   184,  9237,   2,   3, UNI_LOE }   /* isloe */,
-  {     0,  9946,  1473,   3,   8, UNI__PERL_SURROGATE }   /* issurrogate */,
-  {     0,  9365,  9185,   4,   4, UNI_HMNG }   /* scx=hmng */,
-  {     0,  9725,  3380,   3,  18, UNI_VO__TU }   /* vo=transformedupright */,
-  {    16,  2148,  7375,   3,   8, UNI_INSAMARITAN }   /* insamaritan */,
-  {     8,  2401,     0,   3,   0, UNI_PUA }   /* pua */,
-  {     1,   184,  8010,   3,   6, UNI_CJKEXTA }   /* iscjkexta */,
-  {    82,  3671,  7804,  17,   4, UNI_BUGI }   /* scriptextensions=bugi */,
-  {     3,  9647,  7691,   3,   2, UNI_NV__36 }   /* nv=36 */,
-  {     3,  1362,  8740,  25,   4, UNI_CCC__19 }   /* canonicalcombiningclass=ccc19 */,
-  {     1,  8580,    36,   6,   1, UNI__PERL_NCHAR }   /* nchar=t */,
-  {     0,  3951,  5553,   3,   5, UNI_IPAEXT }   /* isipaext */,
-  {     8,  9903,  4829,   6,   5, UNI_XPOSIXDIGIT }   /* xposixdigit */,
-  {     0,  9113,  8817,   4,   2, UNI_CCC__34 }   /* ccc=34 */,
-  {     0,  9365,  9105,   4,   4, UNI_CAKM }   /* scx=cakm */,
-  {     0,    96,     0,   5,   0, UNI_XPOSIXALPHA }   /* alpha */,
-  {     0,  1362,  2912,  24,  18, UNI_CCC__216 }   /* canonicalcombiningclass=attachedaboveright */,
-  {     3,  8233,  7796,   7,   8, UNI_BASS }   /* script=bassavah */,
-  {     0,  6005,  2591,   4,   9, UNI_COUNTINGROD }   /* incountingrod */,
-  {    19,  3868,  5809,  16,   2, UNI_PF }   /* generalcategory=pf */,
-  {     1,  8424,  7008,   6,  10, UNI_INPHOENICIAN }   /* block=phoenician */,
-  {     7,  8879,  5284,   3,  13, UNI_PHONETICEXTSUP }   /* inphoneticextsup */,
-  {     0,  9093,  3932,   4,  16, UNI_HIGHPUSURROGATES }   /* blk=highpusurrogates */,
-  {   104,  3293,  1099,   3,   3, UNI_UCAS }   /* inucas */,
-  {     1,  8886,  9189,   3,   4, UNI_HMNP }   /* sc=hmnp */,
-  {     1,  2148,  1290,   3,  24, UNI_SYMBOLSANDPICTOGRAPHSEXTA }   /* insymbolsandpictographsexta */,
-  {     0,  6194,  4658,   3,  14, UNI_NARB }   /* inoldnortharabian */,
-  {     1,   184,  8485,   3,   5, UNI_CAKM }   /* ischakma */,
-  {     0,  9093,  4933,   4,  14, UNI_INGREEK }   /* blk=greekandcoptic */,
-  {    32,  2148,  3309,   3,  17, UNI_SMALLKANAEXT }   /* insmallkanaextension */,
-  {     0,  8332,  4822,   3,  12, UNI_POSIXXDIGIT }   /* isasciihexdigit */,
-  {     2,  8424,  5017,   6,  14, UNI_LATINEXTC }   /* block=latinextendedc */,
-  {     6,  9365,  4297,   4,   7, UNI_BRAI }   /* scx=braille */,
-  {     7,   184,  7221,   2,   9, UNI_EMOTICONS }   /* isemoticons */,
-  {     1,  5448,     0,  13,   0, UNI_BLOCKELEMENTS }   /* blockelements */,
-  {     0,  8954,     0,   5,   0, UNI_xidc_values_index }   /* xidc= */,
-  {     0,  1576,     0,  23,   0, UNI_GEOMETRICSHAPESEXT }   /* geometricshapesextended */,
-  {     5,  9093,  1856,   4,  11, UNI_NUMBERFORMS }   /* blk=numberforms */,
-  {     2,  6918,  7176,  10,   9, UNI_LB__AI }   /* linebreak=ambiguous */,
-  {     1,   184,  8072,   2,   4, UNI_ELYM }   /* iselym */,
-  {     3,  8954,     3,   5,   1, -UNI_XIDC }   /* xidc=f */,
-  {     0,  9049,  9722,   4,   3, UNI_AGE__9 }   /* age=v90 */,
-  {    20,  8289,     0,   7,   0, UNI_LANA }   /* taitham */,
-  {     7,  8424,  8038,   7,   6, UNI_CJKEXTE }   /* block=cjkexte */,
-  {     6,  3948,  1696,   3,   2, UNI_INVAI }   /* invai */,
-  {     0,  9365,  8430,   4,   4, UNI_CARI }   /* scx=cari */,
-  {     0,  8424,  1824,   7,  21, UNI_CJKCOMPATIDEOGRAPHSSUP }   /* block=cjkcompatideographssup */,
-  {     0,  8424,  3020,   6,  13, UNI_DEVANAGARIEXT }   /* block=devanagariext */,
-  {     0,   184,  4975,   2,  14, UNI_KANASUP }   /* iskanasupplement */,
-  {     0,  9093,  3038,   4,   8, UNI_INETHIOPIC }   /* blk=ethiopic */,
-  {     2,  4204,     0,   6,   0, UNI_SYRC }   /* syriac */,
-  {     0,  8233,  6898,   7,  10, UNI_KHAR }   /* script=kharoshthi */,
-  {     4,  6918,  5325,  10,   9, UNI_LB__QU }   /* linebreak=quotation */,
-  {     0,  8604,    36,   6,   1, UNI_QMARK }   /* qmark=t */,
-  {     0,  9365,  7980,   4,   8, UNI_UGAR }   /* scx=ugaritic */,
-  {     2,  9901,  9916,   8,   5, UNI_XPOSIXBLANK }   /* isxposixblank */,
-  {     3,  9093,  6898,   4,  10, UNI_INKHAROSHTHI }   /* blk=kharoshthi */,
-  {     0,  3868,  1014,  16,   6, UNI_L }   /* generalcategory=letter */,
-  {     2,  1362,  6393,  24,  11, UNI_CCC__DA }   /* canonicalcombiningclass=doubleabove */,
-  {    10,  6918,  9310,  10,   2, UNI_LB__SG }   /* linebreak=sg */,
-  {     0,  8233,  8072,   7,   4, UNI_ELYM }   /* script=elym */,
-  {     7,  8424,  2590,   7,  10, UNI_COUNTINGROD }   /* block=countingrod */,
-  {     0,  8233,  9493,   7,   4, UNI_ZZZZ }   /* script=zzzz */,
-  {     0,  1482,     0,  24,   0, UNI_inpc_values_index }   /* indicpositionalcategory= */,
-  {     1,  1158,  8297,   3,   6, UNI_INTAIVIET }   /* intaiviet */,
-  {     3,  6828,  2192,  10,   3, UNI_BC__PDI }   /* bidiclass=pdi */,
-  {     0,  8886,  8282,   3,   7, UNI_SC__TGLG }   /* sc=tagalog */,
-  {    10,  9113,  2373,   4,   4, UNI_CCC__L }   /* ccc=left */,
-  {     0,  2212,  7861,   3,   7, UNI_INHIRAGANA }   /* inhiragana */,
-  {    10,  9153,  4195,   4,   9, UNI_WB__EB }   /* gcb=emodifier */,
-  {     3,   184,   183,   2,  20, UNI_MISCSYMBOLS }   /* ismiscellaneoussymbols */,
-  {     6,  9365,  8538,   4,   4, UNI_KHOJ }   /* scx=khoj */,
-  {     3,  3236,   995,  18,   2, -UNI__PERL_PATWS }   /* patternwhitespace=no */,
-  {    68,  8424,   510,   7,  29, UNI_CJKEXTA }   /* block=cjkunifiedideographsextensiona */,
-  {     1,  8233,  7804,   7,   4, UNI_SC__BUGI }   /* script=bugi */,
-  {     0,  9599,     1,   3,   1, -UNI_CI }   /* ci=n */,
-  {     0,  4297,     0,   4,   0, UNI_BRAI }   /* brai */,
-  {     0,  9629,  1696,   3,   2, UNI_LB__AI }   /* lb=ai */,
-  {    13,  9093,  9425,   4,   4, UNI_INTHAI }   /* blk=thai */,
-  {     1,  8886,  8261,   3,   7, UNI_SOYO }   /* sc=soyombo */,
-  {     3,  5760,  7446,  13,   1, UNI_NV__2 }   /* numericvalue=2 */,
-  {    36,  8338,    26,   7,   1, UNI_XPOSIXSPACE }   /* wspace=y */,
-  {     0,  9365,  7892,   4,   8, UNI_JAVA }   /* scx=javanese */,
-  {     6,  7275,     0,   9,   0, UNI_LATINEXTD }   /* latinextd */,
-  {     0,  8424,  3519,   7,  16, UNI_CYRILLICEXTB }   /* block=cyrillicextendedb */,
-  {     2,  1362,  2920,  24,   5, UNI_CCC__A }   /* canonicalcombiningclass=above */,
-  {     0,  5760,  9010,  13,   3, UNI_NV__3_SLASH_2 }   /* numericvalue=3/2 */,
-  {     2,  8424,  1289,   6,  25, UNI_SYMBOLSANDPICTOGRAPHSEXTA }   /* block=symbolsandpictographsexta */,
-  {     2,  8886,  3620,   3,  10, UNI_SC__MANI }   /* sc=manichaean */,
-  {     0,  8874,    36,   5,   1, UNI_IDST }   /* idst=t */,
-  {     1,  4826,  9433,   9,   4, UNI_XPOSIXXDIGIT }   /* hexdigit=true */,
-  {     9,  9093,  8859,   4,   5, UNI_INDOGRA }   /* blk=dogra */,
-  {     0,  9365,  8149,   4,   7, UNI_MULT }   /* scx=multani */,
-  {     0,  9940,  3248,   6,   5, UNI_POSIXSPACE }   /* isperlspace */,
-  {    22,  8332,  9054,   3,   3, UNI_AGHB }   /* isaghb */,
-  {     0,  6051,     0,   4,   0, UNI_MAHJ }   /* mahj */,
-  {    32,   184,  8017,   3,   6, UNI_CJKEXTB }   /* iscjkextb */,
-  {     3,  9602,  9433,   3,   4, UNI_DI }   /* di=true */,
-  {     1,   184,  6679,   2,  10, UNI_SD }   /* issoftdotted */,
-  {     0,  9946,  9782,   7,   4, UNI_XPOSIXSPACE }   /* isspaceperl */,
-  {     1,    21,  5578,   2,  13, UNI_KANAEXTA }   /* inkanaextendeda */,
-  {     3,   184,  8850,   3,   3, UNI_CWCM }   /* iscwcm */,
-  {     2,  8886,  9217,   3,   4, UNI_LAO }   /* sc=laoo */,
-  {   130,   467,     0,   5,   0, UNI_P }   /* punct */,
-  {     0,  8886,  8002,   3,   7, UNI_SC__BENG }   /* sc=bengali */,
-  {    18,   184,  9489,   2,   4, UNI_ZYYY }   /* iszyyy */,
-  {     0,  2106,    34,  21,   2, UNI_GCB__EX }   /* graphemeclusterbreak=ex */,
-  {     0,  1933,     0,  22,   0, UNI_loe_values_index }   /* logicalorderexception= */,
-  {   128,  8685,     0,   4,   0, UNI_hex_values_index }   /* hex= */,
-  {     0,  8586,  9734,   6,   3, UNI_NFCQC__Y }   /* nfcqc=yes */,
-  {     3,  9662,  9734,   3,   3, UNI_SD }   /* sd=yes */,
-  {    77,  8592,  9734,   6,   3, UNI_NFDQC__Y }   /* nfdqc=yes */,
-  {     4,  4657,     0,  15,   0, UNI_NARB }   /* oldnortharabian */,
-  {     0,  4975,     0,  14,   0, UNI_KANASUP }   /* kanasupplement */,
+  {     1,  8435,     0,   6,   0, UNI_GRBASE }   /* grbase */,
+  {     0, 10048,  9208,   3,   2, UNI_NV__35 }   /* nv=35 */,
+  {     0,  7218,   495,  10,   2, UNI_LB__NU }   /* linebreak=nu */,
+  {     0, 10048,  8744,   3,   6, UNI_NV__700000 }   /* nv=700000 */,
+  {    17,   184,  9628,   2,   4, UNI_LATN }   /* islatn */,
+  {     0,  8589,  9568,   7,   4, UNI_SC__GREK }   /* script=grek */,
+  {     0,  8575,     3,   7,   1, -UNI_PATSYN }   /* patsyn=f */,
+  {     1,  9508,  9191,   5,   4, UNI_CCC__32 }   /* ccc=ccc32 */,
+  {     0, 10333,  8618,   3,   3, UNI_SOYO }   /* issoyo */,
+  {     8,  7576,     0,   9,   0, UNI_LATINEXTB }   /* latinextb */,
+  {    13,  3836,  8219,  17,   4, UNI_JAVA }   /* scriptextensions=java */,
+  {     3,  3836,  9476,  17,   4, UNI_AVST }   /* scriptextensions=avst */,
+  {     2,  9640,     0,   3,   0, UNI_LOE }   /* loe */,
+  {     1,  1966,  6463,  22,   6, UNI_LB__ZWJ }   /* indicsyllabiccategory=joiner */,
+  {     0,  6805,   254,   6,  29, UNI_MISCMATHSYMBOLSA }   /* inmiscellaneousmathematicalsymbolsa */,
+  {     0,  8780,  7058,   6,  10, UNI_ARABICEXTA }   /* block=arabicexta */,
+  {     0,   184,  9325,   2,   5, UNI_RUNR }   /* isrunic */,
+  {     7, 10024,  9225,   3,   5, UNI_XPOSIXCNTRL }   /* gc=cntrl */,
+  {     8,  9596,   911,   4,   1, UNI_GCB__V }   /* hst=v */,
+  {     0,  9277,  4385,   3,   6, UNI_TANG }   /* sc=tangut */,
+  {    64,  8780,  1911,   6,  11, UNI_NUMBERFORMS }   /* block=numberforms */,
+  {    38,  5986,  8720,  13,   2, UNI_NV__40 }   /* numericvalue=40 */,
+  {     1,  8780,     0,   6,  34, UNI_UCAS }   /* block=unifiedcanadianaboriginalsyllabics */,
+  {     1,   184,  7585,   2,   9, UNI_LATINEXTC }   /* islatinextc */,
+  {     1,  3836,  9572,  17,   4, UNI_GUJR }   /* scriptextensions=gujr */,
+  {     1,  8589,  2245,   7,  11, UNI_MTEI }   /* script=meeteimayek */,
+  {    12,  9488,  3649,   4,  17, UNI_CYRILLICEXTB }   /* blk=cyrillicextendedb */,
+  {     4,  7438,  8144,  10,   3, UNI_WB__EB }   /* wordbreak=gaz */,
+  {    10,  7155,  5038,   3,   7, UNI_XPOSIXXDIGIT }   /* ishexdigit */,
+  {     0,  7540,     1,   9,   1, -UNI_EXT }   /* extender=n */,
+  {     0,    21,  7567,   2,   9, UNI_INKHUDAWADI }   /* inkhudawadi */,
+  {     9,  9488,  1219,   5,   4, UNI_INBATAK }   /* blk=batak */,
+  {     2,  7088,   426,  10,   2, UNI_BC__ES }   /* bidiclass=es */,
+  {     2,  3836,  9676,  17,   4, UNI_NARB }   /* scriptextensions=narb */,
+  {     2,  1417,  8002,  24,   2, UNI_CCC__26 }   /* canonicalcombiningclass=26 */,
+  {     4, 10063,     1,   3,   1, -UNI_SD }   /* sd=n */,
+  {     0,  4033,  1587,  16,   1, UNI_Z }   /* generalcategory=z */,
+  {     6,    18,     0,   2,   0, UNI_RI }   /* ri */,
+  {     0,  6554,    26,  11,   1, UNI_IDC }   /* idcontinue=y */,
+  {     6,  6829,     0,  11,   0, UNI_MYANMAREXTB }   /* myanmarextb */,
+  {     1,  7318,  9991,  10,   3, UNI_IN__9 }   /* presentin=9.0 */,
+  {     0,  9277,  9330,   3,   5, UNI_SC__TALE }   /* sc=taile */,
+  {     0,  9480,     0,   4,   0, UNI_BATK }   /* batk */,
+  {    31,  1979,     0,  11,   0, UNI_LO }   /* category=lo */,
+  {     2,  4116,  7559,   3,   8, UNI_QAAI }   /* isinherited */,
+  {     0,  1417,  7778,  24,   2, UNI_CCC__21 }   /* canonicalcombiningclass=21 */,
+  {     2,  8780,  6133,   6,  12, UNI_ETHIOPICEXTA }   /* block=ethiopicexta */,
+  {     5,  7228, 10135,  10,   3, UNI_XPOSIXLOWER }   /* lowercase=yes */,
+  {     0,  9277,  7308,   3,  10, UNI_PHNX }   /* sc=phoenician */,
+  {     2,  9720,     0,   4,   0, UNI_PHLP }   /* phlp */,
+  {     0,  8589,  9668,   7,   4, UNI_MTEI }   /* script=mtei */,
+  {     0,  9768,  8876,   4,   6, UNI_GOTH }   /* scx=gothic */,
+  {     0,  2224,  2913,   3,   8, UNI_INSUNDANESE }   /* insundanese */,
+  {    41,  8780,  1344,   6,  25, UNI_SYMBOLSFORLEGACYCOMPUTING }   /* block=symbolsforlegacycomputing */,
+  {     0,   184,  9748,   2,   4, UNI_RJNG }   /* isrjng */,
+  {     1, 10048,  8744,   3,   2, UNI_NV__70 }   /* nv=70 */,
+  {     0,  5843,     0,   9,   0, UNI_MLYM }   /* malayalam */,
+  {     7,  9275,  4417,   5,  16, UNI_INSC__VOWELINDEPENDENT }   /* insc=vowelindependent */,
+  {     9,  9488,  8456,   4,   7, UNI_INKANNADA }   /* blk=kannada */,
+  {     8, 10129,    26,   3,   1, UNI_VS }   /* vs=y */,
+  {     1,  8780,  4973,   6,   8, UNI_VEDICEXT }   /* block=vedicext */,
+  {     1, 10182,   435,   6,   5, UNI__PERL_NCHAR }   /* _perl_nchar */,
+  {     2,  4791,  2247,   4,  19, UNI_MEETEIMAYEKEXT }   /* inmeeteimayekextensions */,
+  {    28,   184,  1585,   2,  14, UNI_BYZANTINEMUSIC }   /* isbyzantinemusic */,
+  {     3,  9270,   909,   3,   9, UNI_PUA }   /* inprivateuse */,
+  {     1,  2182,  8144,  21,   3, UNI_WB__EB }   /* graphemeclusterbreak=gaz */,
+  {     0,  9290, 10135,   5,   3, UNI_MATH }   /* math=yes */,
+  {     0,  9277,  9310,   3,   5, UNI_OGAM }   /* sc=ogham */,
+  {     0,  8449,     0,   6,   0, UNI_HYPHEN }   /* hyphen */,
+  {    16,    11,     0,   2,   0, UNI_DI }   /* di */,
+  {     0,  8688,  8338,   3,   6, UNI_AVST }   /* isavestan */,
+  {     2, 10033,  7486,   3,   9, UNI_LB__AI }   /* lb=ambiguous */,
+  {     0,  1828,     3,   6,   1, -UNI_CASED }   /* cased=f */,
+  {     0, 10288,  9225,   8,   5, UNI_XPOSIXCNTRL }   /* isxposixcntrl */,
+  {     7,  3169,     0,   4,   0, UNI_ETHI }   /* ethi */,
+  {    24,  1552,  5713,   9,  13, UNI_XPOSIXDIGIT }   /* category=decimalnumber */,
+  {     0,  8780,    78,   6,   6, UNI_INARABIC }   /* block=arabic */,
+  {     1,  8780,   382,   6,  32, UNI_EGYPTIANHIEROGLYPHFORMATCONTROLS }   /* block=egyptianhieroglyphformatcontrols */,
+  {     2,  1417,  9171,  25,   4, UNI_CCC__28 }   /* canonicalcombiningclass=ccc28 */,
+  {     4,  8589,  7428,   7,   4, UNI_WARA }   /* script=wara */,
+  {    50,  1768, 10135,  22,   3, UNI_CWCF }   /* changeswhencasefolded=yes */,
+  {     0,  7438,  3385,  10,  17, UNI_RI }   /* wordbreak=regionalindicator */,
+  {     0,  9536,  9255,   4,   5, -UNI_DEP }   /* dep=false */,
+  {    32,  7218,  3379,  10,   5, UNI_LB__SP }   /* linebreak=space */,
+  {     3,  1552,  5438,   9,  14, UNI_SK }   /* category=modifiersymbol */,
+  {     5,  5791, 10045,  13,   3, UNI_JG__MIM }   /* joininggroup=mim */,
+  {     2,    42,     0,  36,   0, UNI_CJKCOMPATIDEOGRAPHSSUP }   /* cjkcompatibilityideographssupplement */,
+  {     7,  8780,  8596,   6,   7, UNI_SC__SHRD }   /* block=sharada */,
+  {     3,  9488,  8414,   4,   7, UNI_INELBASAN }   /* blk=elbasan */,
+  {     9,  9488,  5778,   4,  13, UNI_IPAEXT }   /* blk=ipaextensions */,
+  {    19,  7288,     0,  10,   0, UNI_SOGO }   /* oldsogdian */,
+  {     1, 10296,    83,   3,   2, UNI_PCM }   /* ispcm */,
+  {     0,  6231,  6086,   3,  11, UNI_CHESSSYMBOLS }   /* inchesssymbols */,
+  {     2,  3632,     0,  17,   0, UNI_CYRILLICEXTA }   /* cyrillicextendeda */,
+  {     0,  8780,  9664,   6,   3, UNI_INMRO }   /* block=mro */,
+  {     4, 10009,  9552,   3,   4, UNI_DT__FONT }   /* dt=font */,
+  {     3,  5986,  8744,  13,   6, UNI_NV__700000 }   /* numericvalue=700000 */,
+  {     6,  7438,  8323,  10,   7, UNI_WB__LE }   /* wordbreak=aletter */,
+  {     0,  8930,  9836,   6,   4, UNI_XPOSIXLOWER }   /* lower=true */,
+  {     4,  1417,  3015,  24,   5, UNI_CCC__A }   /* canonicalcombiningclass=above */,
+  {     2,  9488,  8187,   4,   8, UNI_INHIRAGANA }   /* blk=hiragana */,
+  {     0,  8780,  1677,   6,   9, UNI_LATINEXTE }   /* block=latinexte */,
+  {     1,  5324,  8493,   4,   5, UNI_INMARCHEN }   /* inmarchen */,
+  {     0,  9508,  7765,   4,   2, UNI_CCC__25 }   /* ccc=25 */,
+  {    10,  9245,     0,   5,   0, UNI_DOGR }   /* dogra */,
+  {    16,   184,  4658,   2,  14, UNI_GREXT }   /* isgraphemeextend */,
+  {     0,  1966,  4823,  22,  15, UNI_INSC__MODIFYINGLETTER }   /* indicsyllabiccategory=modifyingletter */,
+  {     0,  2182,    34,  21,   6, UNI_GCB__EX }   /* graphemeclusterbreak=extend */,
+  {     0,  9508,  9196,   5,   4, UNI_CCC__33 }   /* ccc=ccc33 */,
+  {     0,  5986, 10140,  13,   2, UNI_NV__39 }   /* numericvalue=39 */,
+  {     4,  8780,   720,   7,  15, UNI_CUNEIFORMNUMBERS }   /* block=cuneiformnumbers */,
+  {    14,  8780,  1013,   6,   5, UNI_INGREEK }   /* block=greek */,
+  {     0,  4129,     0,   9,   0, UNI_LATIN1 }   /* latin1sup */,
+  {     0, 10048,  7995,   3,   8, UNI_NV__1_SLASH_16 }   /* nv=6.25e-02 */,
+  {     6,  9070,    26,   5,   1, UNI_POSIXXDIGIT }   /* ahex=y */,
+  {     1,  8589,  2684,   7,  19, UNI_EGYP }   /* script=egyptianhieroglyphs */,
+  {     0,  7218,  6178,  10,   2, UNI_LB__ZW }   /* linebreak=zw */,
+  {     0,   184,  1677,   2,  23, UNI_LATINEXTADDITIONAL }   /* islatinextendedadditional */,
+  {     0,  8589,  9065,   7,   5, UNI_SC__ADLM }   /* script=adlam */,
+  {    32,  6231,   219,   4,  31, UNI_DIACRITICALSEXT }   /* incombiningdiacriticalmarksextended */,
+  {     4,  8589,  4793,   7,  15, UNI_MERC }   /* script=meroiticcursive */,
+  {     0,  3836,  9700,  17,   4, UNI_OLCK }   /* scriptextensions=olck */,
+  {     0,  1966,  4417,  22,   5, UNI_INSC__VOWEL }   /* indicsyllabiccategory=vowel */,
+  {     1, 10048,  5648,   3,  13, UNI_NV__1000000000000 }   /* nv=1000000000000 */,
+  {     0, 10024,  4898,   3,  15, UNI_PS }   /* gc=openpunctuation */,
+  {     1,  2218,  2470,   3,  19, UNI_INNYIAKENGPUACHUEHMONG }   /* innyiakengpuachuehmong */,
+  {     0,   184,  7068,   2,  10, UNI_ASCII }   /* isbasiclatin */,
+  {     2,  9488,  8131,   4,   8, UNI_INDUPLOYAN }   /* blk=duployan */,
+  {     0,  5986,  7987,  13,   8, UNI_NV__5_SLASH_8 }   /* numericvalue=6.25e-01 */,
+  {     0,  4989,  1368,   3,   3, UNI_UGAR }   /* isugar */,
+  {    12,  1417,  8817,  25,   5, UNI_CCC__129 }   /* canonicalcombiningclass=ccc129 */,
+  {     0,  9756,     0,   4,   0, UNI_RUNR }   /* runr */,
+  {     1,  8780,  8456,   6,   7, UNI_INKANNADA }   /* block=kannada */,
+  {     8,  8780,   838,   6,  29, UNI_MISCARROWS }   /* block=miscellaneoussymbolsandarrows */,
+  {     3,  5791,  5368,  13,  14, UNI_JG__MANICHAEANKAPH }   /* joininggroup=manichaeankaph */,
+  {     2,   184,  3421,   2,  18, UNI_RUMI }   /* isruminumeralsymbols */,
+  {     0, 10296,     7,   3,   1, UNI_PC }   /* ispc */,
+  {     5, 10048,  8010,   3,   2, UNI_NV__36 }   /* nv=36 */,
+  {    41,   598,     0,   2,   0, UNI_XPOSIXCNTRL }   /* cc */,
+  {     1,  5830,     0,  13,   0, UNI_LOWSURROGATES }   /* lowsurrogates */,
+  {     1,  9488,  6972,   4,  11, UNI_INSYLOTINAGRI }   /* blk=sylotinagri */,
+  {     2,  4688,  1284,  15,   9, UNI_IDENTIFIERTYPE__EXCLUSION }   /* identifiertype=exclusion */,
+  {    32,  8852,     3,   6,   1, -UNI_CWKCF }   /* cwkcf=f */,
+  {     0,  9508,  7922,   4,   2, UNI_CCC__24 }   /* ccc=24 */,
+  {     1,  6397,     0,  12,   0, UNI_MATHALPHANUM }   /* mathalphanum */,
+  {     1,  8780,  8888,   6,   6, UNI_INHATRAN }   /* block=hatran */,
+  {     1, 10048,  7765,   3,   1, UNI_NV__2 }   /* nv=2 */,
+  {     4,  5986,  9361,  13,   3, UNI_NV__1_SLASH_2 }   /* numericvalue=1/2 */,
+  {     0,  1966,  4305,  22,   5, UNI_INSC__OTHER }   /* indicsyllabiccategory=other */,
+  {     0,  4033,    74,  16,   2, UNI_ME }   /* generalcategory=me */,
+  {     2,  5986,  7995,  13,   8, UNI_NV__1_SLASH_16 }   /* numericvalue=6.25e-02 */,
+  {     2,  6231,  2141,   3,  10, UNI_CYRILLICSUP }   /* incyrillicsup */,
+  {     8,  8996,     3,   6,   1, -UNI_STERM }   /* sterm=f */,
+  {     0,   184,  9032,   2,   6, UNI_WCHO }   /* iswancho */,
+  {     8,  3937,     0,  16,   0, UNI_BOPOMOFOEXT }   /* bopomofoextended */,
+  {    10, 10048,  8066,   3,   2, UNI_NV__28 }   /* nv=28 */,
+  {     8,  2779,     3,  19,   1, -UNI_IDST }   /* idstrinaryoperator=f */,
+  {     6, 10009,  1417,   3,   9, UNI_DT__CAN }   /* dt=canonical */,
+  {     1,  3836,  9748,  17,   4, UNI_RJNG }   /* scriptextensions=rjng */,
+  {    22,  3836,  7675,  17,   9, UNI_PALM }   /* scriptextensions=palmyrene */,
+  {    14,  4643, 10135,  15,   3, UNI_ECOMP }   /* emojicomponent=yes */,
+  {     8, 10033,   125,   3,   2, UNI_LB__CR }   /* lb=cr */,
+  {     0,  8780,  8187,   6,   8, UNI_INHIRAGANA }   /* block=hiragana */,
+  {    12,  9500,     0,   4,   0, UNI_CAKM }   /* cakm */,
+  {     0,  4542,  4051,   4,  14, UNI_GEORGIANEXT }   /* ingeorgianextended */,
+  {     0,  9235,     1,   5,   1, -UNI_CWCM }   /* cwcm=n */,
+  {     0,  8780,  4569,   7,  14, UNI_CURRENCYSYMBOLS }   /* block=currencysymbols */,
+  {     9,  3836,  4273,  17,   7, UNI_MYMR }   /* scriptextensions=myanmar */,
+  {     1,  3836,  3115,  17,  10, UNI_DEVA }   /* scriptextensions=devanagari */,
+  {     0,  8589,  8786,   7,   6, UNI_CARI }   /* script=carian */,
+  {     8,  9277,  9680,   3,   4, UNI_NBAT }   /* sc=nbat */,
+  {     0,  1417,  7950,  24,   1, UNI_CCC__9 }   /* canonicalcombiningclass=9 */,
+  {     1,  9277,  9900,   3,   4, UNI_ZZZZ }   /* sc=zzzz */,
+  {     0,  9680,     0,   4,   0, UNI_NBAT }   /* nbat */,
+  {    11,  3836,  9504,  17,   4, UNI_CANS }   /* scriptextensions=cans */,
+  {     0,  1417,  7765,  24,   2, UNI_CCC__25 }   /* canonicalcombiningclass=25 */,
+  {     0,  2032,    36,  22,   1, UNI__PERL_NCHAR }   /* noncharactercodepoint=t */,
+  {    33, 10290,   467,   6,   5, UNI_XPOSIXPUNCT }   /* xposixpunct */,
+  {     0,  2076,     0,  15,   0, UNI_TRANSPORTANDMAP }   /* transportandmap */,
+  {    34,  9508,  5649,   4,   1, UNI_CCC__0 }   /* ccc=0 */,
+  {    18,  9260,  9255,   5,   5, -UNI_IDSB }   /* idsb=false */,
+  {     4,  5986,  7781,  13,   2, UNI_NV__43 }   /* numericvalue=43 */,
+  {     1,   184,  9305,   2,   5, UNI_NSHU }   /* isnushu */,
+  {     3,  5986,  7779,  13,   8, UNI_NV__1_SLASH_7 }   /* numericvalue=1.43e-01 */,
+  {     0, 10132,   495,   3,   2, UNI_WB__NU }   /* wb=nu */,
+  {     0, 10033,  5746,   3,   5, UNI_EBASE }   /* lb=ebase */,
+  {     1,  1166,    26,  26,   1, UNI_DI }   /* defaultignorablecodepoint=y */,
+  {     1,  9768,  1537,   5,   3, UNI_SIND }   /* scx=sind */,
+  {     0,  7218,  4842,  10,   2, UNI_LB__QU }   /* linebreak=qu */,
+  {     0,  3921,     0,   9,   0, UNI_ARABICSUP }   /* arabicsup */,
+  {     1,  7088,   102,  10,   2, UNI_BC__ET }   /* bidiclass=et */,
+  {     6,  8768,     1,   6,   1, -UNI_BIDIC }   /* bidic=n */,
+  {     1,  1417,  2449,  24,   4, UNI_CCC__L }   /* canonicalcombiningclass=left */,
+  {     0,   184,  7576,   2,   9, UNI_LATINEXTB }   /* islatinextb */,
+  {     1,  9488,  3666,   4,  17, UNI_CYRILLICEXTC }   /* blk=cyrillicextendedc */,
+  {     1,  7076,  2609,   3,   5, UNI_INBRAHMI }   /* inbrahmi */,
+  {     0,  8449,     1,   7,   1, -UNI_HYPHEN }   /* hyphen=n */,
+  {    86,  9556,  1087,   4,   7, UNI_GCB__PP }   /* gcb=prepend */,
+  {     0,  8997,     1,   5,   1, -UNI_TERM }   /* term=n */,
+  {     1,  9265,     0,   5,   0, UNI_idst_values_index }   /* idst= */,
+  {     0,  4033,  2061,  16,  14, UNI_LM }   /* generalcategory=modifierletter */,
+  {     0,  9488,  2245,   4,  14, UNI_MEETEIMAYEKEXT }   /* blk=meeteimayekext */,
+  {     0,  8589,  8561,   7,   4, UNI_OSMA }   /* script=osma */,
+  {     6,  3836,  2485,  17,   4, UNI_MONG }   /* scriptextensions=mong */,
+  {     0,  2182,   262,  21,   2, UNI_GCB__SM }   /* graphemeclusterbreak=sm */,
+  {    10,  8589,  3598,   7,  17, UNI_AGHB }   /* script=caucasianalbanian */,
+  {   100,  3836,  2288,  18,   3, UNI_SINH }   /* scriptextensions=sinh */,
+  {    14,  9768,  9880,   4,   4, UNI_YI }   /* scx=yiii */,
+  {     1, 10027, 10000,   3,   3, UNI_JG__BEH }   /* jg=beh */,
+  {     2,  9488,  4049,   4,  16, UNI_GEORGIANEXT }   /* blk=georgianextended */,
+  {     1,  5037,  1025,   9,   2, -UNI_XPOSIXXDIGIT }   /* hexdigit=no */,
+  {     0,  7684,     0,   9,   0, UNI_PAUC }   /* paucinhau */,
+  {     2,  9070,  9836,   5,   4, UNI_POSIXXDIGIT }   /* ahex=true */,
+  {     0,  8589,  8187,   7,   4, UNI_SC__HIRA }   /* script=hira */,
+  {    16,  9768,  9628,   4,   4, UNI_LATN }   /* scx=latn */,
+  {     0,  1417,  1755,  24,   2, UNI_CCC__DB }   /* canonicalcombiningclass=db */,
+  {     6, 10048,  1249,   3,   3, UNI_NV__NAN }   /* nv=nan */,
+  {    32,  2061,     0,   4,   0, UNI_MODI }   /* modi */,
+  {     2,  9524,  9255,   4,   5, -UNI_CWT }   /* cwt=false */,
+  {     5, 10288,  5040,   8,   5, UNI_XPOSIXDIGIT }   /* isxposixdigit */,
+  {     5,   184,  4598,   2,  15, UNI_DIACRITICALSEXT }   /* isdiacriticalsext */,
+  {     0,  9346,  9255,   4,   5, -UNI_IDC }   /* idc=false */,
+  {     0,  6181,     0,  12,   0, UNI_GONG }   /* gunjalagondi */,
+  {     4,  6928,  9836,  11,   4, UNI_SD }   /* softdotted=true */,
+  {     0,    21,  1673,   2,   4, UNI_JAMO }   /* injamo */,
+  {     0,  8762,     3,   6,   1, -UNI_XPOSIXALPHA }   /* alpha=f */,
+  {     3,  1700,     0,  23,   0, UNI_SHORTHANDFORMATCONTROLS }   /* shorthandformatcontrols */,
+  {     5,  8589,  9712,   7,   4, UNI_OSGE }   /* script=osge */,
+  {    98,  1417,  9940,  24,   3, UNI_CCC__A }   /* canonicalcombiningclass=230 */,
+  {     1,  5791,   756,  13,   3, UNI_JG__DAL }   /* joininggroup=dal */,
+  {     4,   184,   122,   2,   9, UNI_DIA }   /* isdiacritic */,
+  {     0,  7218,  5585,  10,   2, UNI_EBASE }   /* linebreak=eb */,
+  {     0, 10291,    96,   5,   5, UNI_POSIXALPHA }   /* posixalpha */,
+  {     1, 10024,  1287,   3,   2, UNI_UPPERCASELETTER }   /* gc=lu */,
+  {    41,  9235,  1025,   5,   2, -UNI_CWCM }   /* cwcm=no */,
+  {     2,  7408,     0,  10,   0, UNI_CN }   /* unassigned */,
+  {    18,  9262,     0,   3,   0, UNI_sb_values_index }   /* sb= */,
+  {     0,  3836,  9797,  18,   3, UNI_SYRC }   /* scriptextensions=syrc */,
+  {     2,  7155,  1655,   3,   5, UNI_HANG }   /* ishangul */,
+  {     1,   382,     0,  32,   0, UNI_EGYPTIANHIEROGLYPHFORMATCONTROLS }   /* egyptianhieroglyphformatcontrols */,
+  {     0,  5746,     3,   6,   1, -UNI_EBASE }   /* ebase=f */,
+  {     1,  3385, 10135,  18,   3, UNI_RI }   /* regionalindicator=yes */,
+  {     7,  9240,  9836,   5,   4, UNI_DASH }   /* dash=true */,
+  {     1,  7218,     0,  10,   0, UNI_lb_values_index }   /* linebreak= */,
+  {     4,  1417,  9176,  25,   4, UNI_CCC__29 }   /* canonicalcombiningclass=ccc29 */,
+  {     1, 10288,  6554,   3,   3, UNI_XIDC }   /* isxidc */,
+  {     0,  3901,  8173,   4,   6, UNI_INGUJARATI }   /* ingujarati */,
+  {     1,  3649,     0,  17,   0, UNI_CYRILLICEXTB }   /* cyrillicextendedb */,
+  {     0,  9277,  7684,   3,   4, UNI_PAUC }   /* sc=pauc */,
+  {     1,  1417,  7978,  24,   2, UNI_CCC__16 }   /* canonicalcombiningclass=16 */,
+  {    11,  5214,     0,   6,   0, UNI_KANGXI }   /* kangxi */,
+  {     0,  5578,   400,  14,   6, UNI_SB__FO }   /* sentencebreak=format */,
+  {    52,  9277,  2245,   3,  11, UNI_MTEI }   /* sc=meeteimayek */,
+  {     1,  8780,  9315,   6,   5, UNI_INORIYA }   /* block=oriya */,
+  {     0,  2218,    16,   3,   1, UNI_NB }   /* innb */,
+  {     0,  9277,  3241,   3,   4, UNI_SC__GEOR }   /* sc=geor */,
+  {     2,  1768,     0,  21,   0, UNI_CWCF }   /* changeswhencasefolded */,
+  {     2,  1856,    36,  22,   1, UNI_CWU }   /* changeswhenuppercased=t */,
+  {     8,  8589,  8942,   7,   6, UNI_LYDI }   /* script=lydian */,
+  {    13,  9488,  7368,   4,  10, UNI_SMALLFORMS }   /* blk=smallforms */,
+  {     0,  8930,     3,   6,   1, -UNI_XPOSIXLOWER }   /* lower=f */,
+  {    20,  9488,  3600,   4,   4, UNI_UCAS }   /* blk=ucas */,
+  {     0,  4033,  6851,  16,  11, UNI_LO }   /* generalcategory=otherletter */,
+  {    16,  8780,  7594,   6,   9, UNI_LATINEXTD }   /* block=latinextd */,
+  {     1,  7088,  3187,  10,  18, UNI_BC__ET }   /* bidiclass=europeanterminator */,
+  {    18,  7318,  9982,  10,   3, UNI_IN__6_DOT_3 }   /* presentin=6.3 */,
+  {     2,  9508,  8002,   4,   2, UNI_CCC__26 }   /* ccc=26 */,
+  {     1,  8780,  3937,   6,   8, UNI_INBOPOMOFO }   /* block=bopomofo */,
+  {     0,  9508,  9181,   5,   4, UNI_CCC__30 }   /* ccc=ccc30 */,
+  {     0,  5452,    26,  14,   1, UNI_NFCQC__Y }   /* nfcquickcheck=y */,
+  {     0,  1867,     0,   5,   0, UNI_XPOSIXUPPER }   /* upper */,
+  {     1, 10033,  3379,   3,   5, UNI_LB__SP }   /* lb=space */,
+  {     1, 10009,  6421,   3,  12, UNI_DT__NONCANON }   /* dt=noncanonical */,
+  {     1,  9488,     0,   4,  34, UNI_UCAS }   /* blk=unifiedcanadianaboriginalsyllabics */,
+  {     0, 10048,  8003,   3,   8, UNI_NV__1_SLASH_160 }   /* nv=6.25e-03 */,
+  {     0,  5116,    26,  14,   1, UNI_EMOD }   /* emojimodifier=y */,
+  {     0,  8780,   478,   6,  31, UNI_MATHALPHANUM }   /* block=mathematicalalphanumericsymbols */,
+  {     0, 10333,  8618,   3,   6, UNI_SOYO }   /* issoyombo */,
+  {     6,  9488,  8666,   4,   7, UNI_INTIRHUTA }   /* blk=tirhuta */,
+  {     0,  8996,  9255,   6,   5, -UNI_STERM }   /* sterm=false */,
+  {     0,  8780,  4002,   7,  15, UNI_CYPRIOTSYLLABARY }   /* block=cypriotsyllabary */,
+  {     1, 10290,  7438,   6,   4, UNI_XPOSIXWORD }   /* xposixword */,
+  {     1,  1585,     0,  23,   0, UNI_BYZANTINEMUSIC }   /* byzantinemusicalsymbols */,
+  {     0,  4113,   952,   3,  17, UNI_INVS }   /* invariationselectors */,
+  {     0,  2280,  9321,   3,   4, UNI_OSGE }   /* isosage */,
+  {     6,  9672,     0,   4,   0, UNI_MYMR }   /* mymr */,
+  {    18,  9277,     0,   3,   0, UNI_sc_values_index }   /* sc= */,
+  {     0,  9277,  9008,   3,   4, UNI_SC__THAA }   /* sc=thaa */,
+  {     0,  9277,  7428,   3,   4, UNI_WARA }   /* sc=wara */,
+  {    12,   184,  6385,   2,  12, UNI_GONM }   /* ismasaramgondi */,
+  {     0,  5947,     0,  13,   0, UNI_MAYANNUMERALS }   /* mayannumerals */,
+  {     0,  9277,  9628,   3,   4, UNI_SC__LATN }   /* sc=latn */,
+  {     4,  8894,     0,   6,   0, UNI_joinc_values_index }   /* joinc= */,
+  {     0,  9275,  6457,   5,  12, UNI_INSC__NUMBERJOINER }   /* insc=numberjoiner */,
+  {     0,  5986,  9061,  13,   4, UNI_NV__1_SLASH_12 }   /* numericvalue=1/12 */,
+  {     2,  8187,     0,   8,   0, UNI_HIRA }   /* hiragana */,
+  {     0,   184,  1879,   3,  21, UNI_CJKCOMPATIDEOGRAPHSSUP }   /* iscjkcompatideographssup */,
+  {     9,  9508,  3572,   4,   9, UNI_CCC__BL }   /* ccc=belowleft */,
+  {     1,  3683,     0,  16,   0, UNI_ETHIOPICEXT }   /* ethiopicextended */,
+  {     0,   184,  3358,   2,   9, UNI_Z }   /* isseparator */,
+  {     1,  1966,  4523,  22,  15, UNI_INSC__CONSONANTMEDIAL }   /* indicsyllabiccategory=consonantmedial */,
+  {     0,  9768,  9484,   4,   4, UNI_BHKS }   /* scx=bhks */,
+  {     1,  8780,  4613,   6,  15, UNI_DIACRITICALSSUP }   /* block=diacriticalssup */,
+  {     0,  9277,  9792,   3,   4, UNI_SOGO }   /* sc=sogo */,
+  {    17,   184,  9692,   2,   4, UNI_NSHU }   /* isnshu */,
+  {     1,  2182,  6169,  21,  12, UNI_WB__EB }   /* graphemeclusterbreak=glueafterzwj */,
+  {     0,  7318,  9856,  10,   4, UNI_IN__13 }   /* presentin=v130 */,
+  {     1,  3836,  9832,  17,   4, UNI_TIBT }   /* scriptextensions=tibt */,
+  {     0,  9270,   468,   3,  10, UNI_INPUNCTUATION }   /* inpunctuation */,
+  {     2,  5791,  5843,  13,  13, UNI_JG__MALAYALAMLLLA }   /* joininggroup=malayalamllla */,
+  {     2,  3097,    45,  18,   3, UNI_DT__COM }   /* decompositiontype=com */,
+  {     0, 10048,  4134,   3,   1, UNI_NV__1 }   /* nv=1 */,
+  {     0,  8463,     0,   7,   0, UNI_KALI }   /* kayahli */,
+  {     0,  8435,  9836,   7,   4, UNI_GRBASE }   /* grbase=true */,
+  {    24,  6553,     3,  12,   1, -UNI_XIDC }   /* xidcontinue=f */,
+  {     1,  4583,     0,  15,   0, UNI_PD }   /* dashpunctuation */,
+  {    16, 10288,  5040,   3,   5, UNI_XPOSIXXDIGIT }   /* isxdigit */,
+  {     0,  9768,  9736,   4,   4, UNI_COPT }   /* scx=qaac */,
+  {     2,  8780,  4928,   6,  15, UNI_TAMILSUP }   /* block=tamilsupplement */,
+  {     2,  9768,  9900,   4,   4, UNI_ZZZZ }   /* scx=zzzz */,
+  {    44, 10333,    17,   3,   1, UNI_SO }   /* isso */,
+  {     1,  8442,     0,   7,   0, UNI_HANO }   /* hanunoo */,
+  {     1,  1828,     0,   5,   0, UNI_CASED }   /* cased */,
+  {     0,  8894,    26,   6,   1, UNI_JOINC }   /* joinc=y */,
+  {     1,  1834,    26,  22,   1, UNI_CWT }   /* changeswhentitlecased=y */,
+  {     0,    78,     0,  35,   0, UNI_ARABICMATH }   /* arabicmathematicalalphabeticsymbols */,
+  {     0, 10033,  3385,   3,  17, UNI_RI }   /* lb=regionalindicator */,
+  {     1,  8589,  2288,   8,   6, UNI_SC__SINH }   /* script=sinhala */,
+  {     0,  8688,  5033,   3,  12, UNI_POSIXXDIGIT }   /* isasciihexdigit */,
+  {     8,  3374, 10135,  11,   3, UNI_XPOSIXSPACE }   /* whitespace=yes */,
+  {     2,  7158,     3,  10,   1, -UNI_DIA }   /* diacritic=f */,
+  {     2,  8589,  1218,   7,   8, UNI_SC__KANA }   /* script=katakana */,
+  {     2,  5986,  9924,  13,   2, UNI_NV__42 }   /* numericvalue=42 */,
+  {     4,   184,  8853,   3,   4, UNI_CWKCF }   /* iscwkcf */,
+  {     3, 10048,  9984,   3,   2, UNI_NV__37 }   /* nv=37 */,
+  {     0,  1845,     0,   9,   0, UNI_TITLE }   /* titlecase */,
+  {     0,  9350,     0,   5,   0, UNI_xids_values_index }   /* xids= */,
+  {     2,  8780,  6253,   6,   5, UNI_INKHMER }   /* block=khmer */,
+  {     0,   184,   570,   3,  29, UNI_CJKEXTC }   /* iscjkunifiedideographsextensionc */,
+  {     0,  5791,  7016,  13,  11, UNI_JG__YEHWITHTAIL }   /* joininggroup=yehwithtail */,
+  {     3, 10009,  1253,   3,   7, UNI_DT__INIT }   /* dt=initial */,
+  {     3,   184,  4808,   2,  15, UNI_MISCPICTOGRAPHS }   /* ismiscpictographs */,
+  {     3,  9488,  2684,   4,  19, UNI_INEGYPTIANHIEROGLYPHS }   /* blk=egyptianhieroglyphs */,
+  {     3,  2529,    26,  20,   1, UNI_TERM }   /* terminalpunctuation=y */,
+  {     1,  9488,  4479,   5,  14, UNI_BRAI }   /* blk=braillepatterns */,
+  {     1,  2224,  4370,   3,  15, UNI_SYRIACSUP }   /* insyriacsupplement */,
+  {     0,  8589,  9516,   7,   4, UNI_SC__CPRT }   /* script=cprt */,
+  {     0,  7088,     0,  11,   0, UNI_BC__B }   /* bidiclass=b */,
+  {     0,  1417,  7922,  24,   2, UNI_CCC__24 }   /* canonicalcombiningclass=24 */,
+  {    10,  3836,  8243,  17,   8, UNI_MAHJ }   /* scriptextensions=mahajani */,
+  {     0,  8589,  9484,   7,   4, UNI_BHKS }   /* script=bhks */,
+  {     5,   184,  6229,   2,  11, UNI_JOINC }   /* isjoincontrol */,
+  {     0,  4033,  1217,  16,   2, UNI_SK }   /* generalcategory=sk */,
+  {     3,  9640,  9836,   4,   4, UNI_LOE }   /* loe=true */,
+  {     0,  7739,    36,   8,   1, UNI_IDS }   /* idstart=t */,
+  {     2,  9277,  9668,   3,   4, UNI_MTEI }   /* sc=mtei */,
+  {     0,  9997,    24,   3,   1, UNI_BC__L }   /* bc=l */,
+  {     1,   184,  4448,   2,   4, UNI_BAMU }   /* isbamu */,
+  {     3,  9277,  9592,   3,   4, UNI_HMNP }   /* sc=hmnp */,
+  {    34,  9277,  9776,   3,   4, UNI_SGNW }   /* sc=sgnw */,
+  {     3,  6205,    36,  12,   1, UNI_IDEO }   /* ideographic=t */,
+  {    16,  7088,  3756,  10,   3, UNI_BC__NSM }   /* bidiclass=nsm */,
+  {     0,    21,  9032,   2,   6, UNI_INWANCHO }   /* inwancho */,
+  {     3,  2182,   125,  21,   2, UNI_LB__CR }   /* graphemeclusterbreak=cr */,
+  {    17,  8589,  8179,   7,   8, UNI_SC__GURU }   /* script=gurmukhi */,
+  {     2,  9277,  8337,   3,   7, UNI_AVST }   /* sc=avestan */,
+  {     0,  9536,  9836,   4,   4, UNI_DEP }   /* dep=true */,
+  {     0,  9262,    69,   3,   2, UNI_SB__UP }   /* sb=up */,
+  {     6,  2054,     0,  22,   0, UNI_MODIFIERLETTERS }   /* spacingmodifierletters */,
+  {     1,  7218,  7512,  10,   2, UNI_LB__BB }   /* linebreak=bb */,
+  {     0,  5674,     0,  12,   0, UNI_BIDIM }   /* bidimirrored */,
+  {     2,  9488,  6481,   4,  12, UNI_INOLDHUNGARIAN }   /* blk=oldhungarian */,
+  {    10,   184,    11,   2,   3, UNI_DIA }   /* isdia */,
+  {     6,  4116,  3260,   3,  16, UNI_IDSB }   /* isidsbinaryoperator */,
+  {     1,  5037,    26,   9,   1, UNI_XPOSIXXDIGIT }   /* hexdigit=y */,
+  {    32,  9508,  7890,   4,   2, UNI_CCC__33 }   /* ccc=33 */,
+  {     0,  9277,  9548,   3,   4, UNI_DSRT }   /* sc=dsrt */,
+  {     0,  5791,  7055,  13,   3, UNI_JG__QAF }   /* joininggroup=qaf */,
+  {     4,    21,  9285,   2,   5, UNI_INLIMBU }   /* inlimbu */,
+  {    16,  9277,   719,   3,   9, UNI_XSUX }   /* sc=cuneiform */,
+  {     8,  8780,  1218,   6,   8, UNI_INKATAKANA }   /* block=katakana */,
+  {     2,  9488,  1319,   4,  25, UNI_SYMBOLSANDPICTOGRAPHSEXTA }   /* blk=symbolsandpictographsexta */,
+  {     0,  1417,  7821,  24,   1, UNI_CCC__8 }   /* canonicalcombiningclass=8 */,
+  {     6, 10296,    96,   7,   5, UNI_POSIXALPHA }   /* isposixalpha */,
+  {     0,  8780,  4448,   6,  15, UNI_BAMUMSUP }   /* block=bamumsupplement */,
+  {     8,  7218,  3385,  10,  17, UNI_RI }   /* linebreak=regionalindicator */,
+  {     1,  9636,     0,   4,   0, UNI_LINB }   /* linb */,
+  {     0,  9488,   467,   4,  11, UNI_INPUNCTUATION }   /* blk=punctuation */,
+  {    17,  9277,  8942,   3,   6, UNI_LYDI }   /* sc=lydian */,
+  {     2, 10024,  1171,   3,   2, UNI_TITLE }   /* gc=lt */,
+  {     0,  4033,  4017,  16,  16, UNI_PF }   /* generalcategory=finalpunctuation */,
+  {     0, 10033,  6179,   3,   2, UNI_LB__WJ }   /* lb=wj */,
+  {    38,  4658,  9255,  15,   5, -UNI_GREXT }   /* graphemeextend=false */,
+  {    16, 10048,  8714,   3,   3, UNI_NV__300 }   /* nv=300 */,
+  {     1,  9235,     0,   5,   0, UNI_cwcm_values_index }   /* cwcm= */,
+  {     0,  9596,    36,   4,   1, UNI_GCB__T }   /* hst=t */,
+  {    20,  9768,  9283,   4,   4, UNI_PHLI }   /* scx=phli */,
+  {     0,  8762,  9255,   6,   5, -UNI_XPOSIXALPHA }   /* alpha=false */,
+  {     4,  3836,  8561,  17,   7, UNI_OSMA }   /* scriptextensions=osmanya */,
+  {     0,  8589,     7,   7,  18, UNI_CANS }   /* script=canadianaboriginal */,
+  {     1,  9488,  6554,   4,   3, UNI_INIDC }   /* blk=idc */,
+  {     0,  8984,     1,   6,   1, -UNI_QMARK }   /* qmark=n */,
+  {    24, 10027,  6301,   3,  12, UNI_JG__MALAYALAMLLA }   /* jg=malayalamlla */,
+  {     3,   184,  9564,   2,   4, UNI_GONM }   /* isgonm */,
+  {     0,  4033,  6873,  16,  11, UNI_SO }   /* generalcategory=othersymbol */,
+  {     0,  8780,  6385,   6,  12, UNI_INMASARAMGONDI }   /* block=masaramgondi */,
+  {    49,  8762,  9836,   6,   4, UNI_XPOSIXALPHA }   /* alpha=true */,
+  {     0,   184, 10170,   2,   2, UNI_CASEDLETTER }   /* isl_ */,
+  {     0,  8589,  9900,   7,   4, UNI_ZZZZ }   /* script=zzzz */,
+  {     0, 10063,  9836,   3,   4, UNI_SD }   /* sd=true */,
+  {     0,  9488,  3169,   4,  18, UNI_ETHIOPICSUP }   /* blk=ethiopicsupplement */,
+  {     2,  6229,     0,  11,   0, UNI_JOINC }   /* joincontrol */,
+  {     1,  9277,  9002,   3,   6, UNI_SC__TELU }   /* sc=telugu */,
+  {     1,  8780,  7119,   7,   9, UNI_INCHORASMIAN }   /* block=chorasmian */,
+  {    13,  6553,  9255,  12,   5, -UNI_XIDC }   /* xidcontinue=false */,
+  {     2,  9277,  9335,   3,   5, UNI_SC__TAKR }   /* sc=takri */,
+  {     0,  4829,  2411,   4,  18, UNI_GLAGOLITICSUP }   /* inglagoliticsupplement */,
+  {     2,  8589,  8491,   7,   7, UNI_MARC }   /* script=marchen */,
+  {     0,  1856,  9255,  22,   5, -UNI_CWU }   /* changeswhenuppercased=false */,
+  {     4, 10048,  7923,   3,   8, UNI_NV__2_SLASH_5 }   /* nv=4.00e-01 */,
+  {    49,  9768,  8942,   4,   4, UNI_LYDI }   /* scx=lydi */,
+  {     4,  7318,  7987,  10,   3, UNI_IN__6_DOT_2 }   /* presentin=6.2 */,
+  {     0,  3666,     0,  17,   0, UNI_CYRILLICEXTC }   /* cyrillicextendedc */,
+  {     5,  9032,     0,   6,   0, UNI_WCHO }   /* wancho */,
+  {     1, 10027,  6157,   3,  12, UNI_JG__FINALSEMKATH }   /* jg=finalsemkath */,
+  {     0,  9540,    36,   4,   1, UNI_DIA }   /* dia=t */,
+  {     0,  3836,  9516,  17,   4, UNI_CPRT }   /* scriptextensions=cprt */,
+  {     2,  9277,     7,   3,  18, UNI_CANS }   /* sc=canadianaboriginal */,
+  {     2,  9277,  3025,   3,   4, UNI_CHER }   /* sc=cher */,
+  {     2,   184,  9752,   2,   4, UNI_ROHG }   /* isrohg */,
+  {     0,  5564,     3,  14,   1, -UNI_QMARK }   /* quotationmark=f */,
+  {     1,  9508,  9186,   5,   4, UNI_CCC__31 }   /* ccc=ccc31 */,
+  {     3,  8780,  9310,   6,   5, UNI_INOGHAM }   /* block=ogham */,
+  {     1,  9277,  2224,   3,  21, UNI_PRTI }   /* sc=inscriptionalparthian */,
+  {     0,  1552,  1465,   9,  13, UNI_M }   /* category=combiningmark */,
+  {     1,  2280,   125,   3,   2, UNI_OCR }   /* isocr */,
+  {     0,  9508,  9223,   4,   2, UNI_CCC__91 }   /* ccc=91 */,
+  {    12,  5791,    65,  15,   2, UNI_JG__KAPH }   /* joininggroup=kaph */,
+  {     0,   184,   951,   2,  18, UNI_INVS }   /* isvariationselectors */,
+  {     1, 10126,  3511,   3,  18, UNI_VO__TU }   /* vo=transformedupright */,
+  {     5,  9277,  1115,   3,   4, UNI_SC__HANG }   /* sc=hang */,
+  {    32,  7218,    21,  10,   2, UNI_LB__IN }   /* linebreak=in */,
+  {     5,  4916,  9336,   3,   4, UNI_TAKR }   /* istakri */,
+  {     1,  9277,  8407,   3,   7, UNI_DSRT }   /* sc=deseret */,
+  {    50, 10132,  8505,   3,   7, UNI_WB__NL }   /* wb=newline */,
+  {     0,  1417,  7933,  24,   2, UNI_CCC__17 }   /* canonicalcombiningclass=17 */,
+  {     6,  5791,  2627,  13,  19, UNI_JG__BURUSHASKIYEHBARREE }   /* joininggroup=burushaskiyehbarree */,
+  {     0,  8780,  2141,   7,   7, UNI_INCYRILLIC }   /* block=cyrillic */,
+  {     6, 10333,  8604,   3,   6, UNI_SHAW }   /* isshavian */,
+  {     2, 10027,  5934,   3,  13, UNI_JG__MANICHAEANWAW }   /* jg=manichaeanwaw */,
+  {     0,   184,  5494,   2,  14, UNI_MN }   /* isnonspacingmark */,
+  {     9,  5986,  8003,  13,   8, UNI_NV__1_SLASH_160 }   /* numericvalue=6.25e-03 */,
+  {     0, 10132,    72,   3,   2, UNI_WB__LE }   /* wb=le */,
+  {    14,  7076,  8346,   4,   5, UNI_INBENGALI }   /* inbengali */,
+  {    18,    21,  9624,   2,   3, UNI_INLAO }   /* inlao */,
+  {     1,  9488,  2076,   4,  22, UNI_TRANSPORTANDMAP }   /* blk=transportandmapsymbols */,
+  {     0,  1988,     0,  21,   0, UNI_LOE }   /* logicalorderexception */,
+  {    10,  4916,  2077,   3,  14, UNI_TRANSPORTANDMAP }   /* istransportandmap */,
+  {     2,  5578,     0,  14,   0, UNI_sb_values_index }   /* sentencebreak= */,
+  {     2,  4791,  6830,   3,  10, UNI_MYANMAREXTB }   /* inmyanmarextb */,
+  {     0,  8780,  5661,   6,  13, UNI_AEGEANNUMBERS }   /* block=aegeannumbers */,
+  {     0, 10024,  5592,   3,  14, UNI_ZS }   /* gc=spaceseparator */,
+  {     6,  2140,     0,  21,   0, UNI_CYRILLICSUP }   /* cyrillicsupplementary */,
+  {     0,  8852, 10135,   6,   3, UNI_CWKCF }   /* cwkcf=yes */,
+  {     0,  9488,   923,   4,  28, UNI_SUPPUAB }   /* blk=supplementaryprivateuseareab */,
+  {     3,  8147,  1942,  10,   3, -UNI_EXTPICT }   /* extpict=false */,
+  {     2,  8780,  6181,   6,  12, UNI_INGUNJALAGONDI }   /* block=gunjalagondi */,
+  {     3,  8589,  9732,   7,   4, UNI_PRTI }   /* script=prti */,
+  {     6,  3382,     3,   3,   1, -UNI_CE }   /* ce=f */,
+  {     8, 10048,  5649,   3,   1, UNI_NV__0 }   /* nv=0 */,
+  {     0,  9508,  4134,   4,   1, UNI_CCC__1 }   /* ccc=1 */,
+  {     0,  7218,  7486,  10,   9, UNI_LB__AI }   /* linebreak=ambiguous */,
+  {     0,  7308,     0,  10,   0, UNI_PHNX }   /* phoenician */,
+  {     1,  9277,    57,   3,   2, UNI_SC__YI }   /* sc=yi */,
+  {     1,  8589,  9832,   7,   4, UNI_TIBT }   /* script=tibt */,
+  {     2,  1552,  5593,  10,  13, UNI_ZS }   /* category=spaceseparator */,
+  {     0,  8547,     0,   7,   0, UNI_OLCK }   /* olchiki */,
+  {     4,  3836,  7621,  17,   9, UNI_NBAT }   /* scriptextensions=nabataean */,
+  {     0,  6805,   187,   6,  16, UNI_MISCSYMBOLS }   /* inmiscellaneoussymbols */,
+  {     0,   749,     0,  21,   0, UNI_ENCLOSEDALPHANUM }   /* enclosedalphanumerics */,
+  {     8,  9768,  8123,   4,   4, UNI_BUGI }   /* scx=bugi */,
+  {     1,    21,  5033,   3,   4, UNI_ASCII }   /* inascii */,
+  {     2,  3836,  8942,  17,   4, UNI_LYDI }   /* scriptextensions=lydi */,
+  {     1,  9768,  9872,   4,   4, UNI_XPEO }   /* scx=xpeo */,
+  {    28, 10033,   414,   3,  11, UNI_LB__ID }   /* lb=ideographic */,
+  {    19,  9444, 10120,   4,   3, UNI_AGE__8 }   /* age=v80 */,
+  {     4, 10033,   988,   3,   2, UNI_LB__CP }   /* lb=cp */,
+  {     0, 10048,  8714,   3,   2, UNI_NV__30 }   /* nv=30 */,
+  {    43,  5791,  5892,  13,   3, UNI_JG__NUN }   /* joininggroup=nun */,
+  {     1, 10129,  9836,   3,   4, UNI_VS }   /* vs=true */,
+  {     3,   184,   540,   3,  29, UNI_CJKEXTB }   /* iscjkunifiedideographsextensionb */,
+  {     0,  1552,     0,  10,   0, UNI_S }   /* category=s */,
+  {     1,  8780,  4793,   6,  15, UNI_INMEROITICCURSIVE }   /* block=meroiticcursive */,
+  {     4,  9997,  2509,   3,  20, UNI_BC__RLE }   /* bc=righttoleftembedding */,
+  {    11,  3836,  9592,  17,   4, UNI_HMNP }   /* scriptextensions=hmnp */,
+  {     0,  3079,     0,  18,   0, UNI_COPTICEPACTNUMBERS }   /* copticepactnumbers */,
+  {    40,  3836,  9604,  17,   4, UNI_KHMR }   /* scriptextensions=khmr */,
+  {     0,  8780,  3683,   6,  17, UNI_ETHIOPICEXTA }   /* block=ethiopicextendeda */,
+  {     0,  7158,    26,  10,   1, UNI_DIA }   /* diacritic=y */,
+  {     1,  4916,  1846,   3,   8, UNI_TITLE }   /* istitlecase */,
+  {     1,  8400,     0,   6,   0, UNI_COMPEX }   /* compex */,
+  {     0,  6469,  5713,  12,   7, UNI_XPOSIXDIGIT }   /* numerictype=decimal */,
+  {    64, 10024,   728,   3,   6, UNI_N }   /* gc=number */,
+  {     1,  9508,  7806,   4,   1, UNI_CCC__6 }   /* ccc=6 */,
+  {     0,  3836,  7630,  17,   9, UNI_TALU }   /* scriptextensions=newtailue */,
+  {    17,  9277,  9095,   3,   5, UNI_SC__BUHD }   /* sc=buhid */,
+  {     2,  9728,     0,   4,   0, UNI_MIAO }   /* plrd */,
+  {     2,  7088,  4321,  10,  16, UNI_BC__S }   /* bidiclass=segmentseparator */,
+  {    17,  8780,  1294,   6,  25, UNI_SUPERANDSUB }   /* block=superscriptsandsubscripts */,
+  {     2,  5674,    26,  13,   1, UNI_BIDIM }   /* bidimirrored=y */,
+  {     9,  9488,  3632,   4,  17, UNI_CYRILLICEXTA }   /* blk=cyrillicextendeda */,
+  {     0,  3836,  9812,  17,   4, UNI_TAML }   /* scriptextensions=taml */,
+  {     0,    21,  6253,   2,  12, UNI_KHMERSYMBOLS }   /* inkhmersymbols */,
+  {     0,  8694,    36,   7,   1, UNI_XPOSIXSPACE }   /* wspace=t */,
+  {     0,  8864,     1,   6,   1, -UNI_EMOJI }   /* emoji=n */,
+  {     0,  3836,  8618,  18,   3, UNI_SOYO }   /* scriptextensions=soyo */,
+  {     3,  8589,  9560,   7,   4, UNI_SC__GONG }   /* script=gong */,
+  {    32,   184,  4478,   2,  15, UNI_BRAI }   /* isbraillepatterns */,
+  {     1,  7155,  8889,   3,   5, UNI_HATR }   /* ishatran */,
+  {     1,  9488,  8275,   4,   8, UNI_SPECIALS }   /* blk=specials */,
+  {     0,  9508,  8727,   4,   2, UNI_CCC__32 }   /* ccc=32 */,
+  {     0,  9768,  9704,   4,   4, UNI_ORKH }   /* scx=orkh */,
+  {     2,  3097,   749,  18,   3, UNI_DT__ENC }   /* decompositiontype=enc */,
+  {     0,  9768,  1176,   5,   3, UNI_SORA }   /* scx=sora */,
+  {     0, 10327,    47,   5,   1, UNI_PERM }   /* isperm */,
+  {    17,  5060,  9836,  14,   4, UNI_CI }   /* caseignorable=true */,
+  {     2,  8267,  1025,   8,   2, -UNI_RADICAL }   /* radical=no */,
+  {     1, 10048,  5648,   3,   9, UNI_NV__100000000 }   /* nv=100000000 */,
+  {     0,   184,  9612,   2,   4, UNI_KNDA }   /* isknda */,
+  {     0,  7325,  7754,   3,   2, UNI_IN__11 }   /* in=11 */,
+  {     0,  5791,  6325,  13,  12, UNI_JG__MALAYALAMNNA }   /* joininggroup=malayalamnna */,
+  {     0,  5060,     3,  14,   1, -UNI_CI }   /* caseignorable=f */,
+  {    45,  6818,     0,  11,   0, UNI_MYANMAREXTA }   /* myanmarexta */,
+  {     1,  5578,    34,  14,   2, UNI_SB__EX }   /* sentencebreak=ex */,
+  {     0,  8589,  8786,   7,   4, UNI_CARI }   /* script=cari */,
+  {     3,  1552,   728,   9,   6, UNI_N }   /* category=number */,
+  {     6,  5986,  7947,  13,   8, UNI_NV__3_SLASH_64 }   /* numericvalue=4.69e-02 */,
+  {     0,  8589,  9448,   7,   4, UNI_AGHB }   /* script=aghb */,
+  {     0,  4116,  5779,   3,   5, UNI_IPAEXT }   /* isipaext */,
+  {     7,  8780,   720,   7,  29, UNI_CUNEIFORMNUMBERS }   /* block=cuneiformnumbersandpunctuation */,
+  {     1, 10320,    17,   5,   1, UNI_XPEO }   /* isxpeo */,
+  {    14,  9508,  9121,   5,   4, UNI_CCC__18 }   /* ccc=ccc18 */,
+  {     0,  6231,  2120,   3,  13, UNI_CJKRADICALSSUP }   /* incjkradicalssup */,
+  {     1,  9277,  6385,   3,  12, UNI_SC__GONM }   /* sc=masaramgondi */,
+  {     0,  8575,  9836,   7,   4, UNI_PATSYN }   /* patsyn=true */,
+  {     4,  8589,  8491,   7,   4, UNI_MARC }   /* script=marc */,
+  {     3,  9277,  8840,   3,   6, UNI_SC__CAKM }   /* sc=chakma */,
+  {     0,  1417,  9943,  24,   3, UNI_CCC__AR }   /* canonicalcombiningclass=232 */,
+  {     2,  2784,  3923,   4,  14, UNI_ARABICSUP }   /* inarabicsupplement */,
+  {     0,  9768,  8315,   4,   8, UNI_UGAR }   /* scx=ugaritic */,
+  {     0,  9632,     0,   4,   0, UNI_LINA }   /* lina */,
+  {     0, 10027,  4773,   3,   5, UNI_JG__SADHE }   /* jg=sadhe */,
+  {     1,  7249,     9,   4,  16, UNI_CANS }   /* iscanadianaboriginal */,
+  {     0,  2182,    70,  21,   2, UNI_GCB__PP }   /* graphemeclusterbreak=pp */,
+  {     1,  6928,  1025,  11,   2, -UNI_SD }   /* softdotted=no */,
+  {     2, 10129,    36,   3,   1, UNI_VS }   /* vs=t */,
+  {    13,  9768,  1654,   4,   6, UNI_HANG }   /* scx=hangul */,
+  {     7,  8780,   749,   6,  30, UNI_ENCLOSEDALPHANUMSUP }   /* block=enclosedalphanumericsupplement */,
+  {     0,  7249,   754,   4,   3, UNI_CASED }   /* iscased */,
+  {     2,  3295,     0,  18,   0, UNI_LATINEXTADDITIONAL }   /* latinextadditional */,
+  {    34,  8882,  9836,   6,   4, UNI_GREXT }   /* grext=true */,
+  {     0,  5578,     7,  15,   1, UNI_SB__SC }   /* sentencebreak=sc */,
+  {     0,  2529,  9837,  21,   3, UNI_TERM }   /* terminalpunctuation=true */,
+  {     0,   316,     0,  33,   0, UNI_SUPMATHOPERATORS }   /* supplementalmathematicaloperators */,
+  {     0,  9262,  3358,   3,   3, UNI_SB__SE }   /* sb=sep */,
+  {     0,  6231,  3045,   4,  16, UNI_HALFMARKS }   /* incombininghalfmarks */,
+  {    16,   184,  1857,   3,  20, UNI_CWU }   /* ischangeswhenuppercased */,
+  {     1, 10009,   435,   4,   2, UNI_DT__ENC }   /* dt=enc */,
+  {     0,  1552,  4898,   9,  15, UNI_PS }   /* category=openpunctuation */,
+  {     0,  8589,  6973,   8,  10, UNI_SC__SYLO }   /* script=sylotinagri */,
+  {     6,   184,  5752,   2,  13, UNI_GREEKEXT }   /* isgreekextended */,
+  {     3,  7458,     0,  10,   0, UNI_YIRADICALS }   /* yiradicals */,
+  {     0, 10027,  4203,   3,   3, UNI_JG__LAM }   /* jg=lam */,
+  {     0,  1828,  1025,   6,   2, -UNI_CASED }   /* cased=no */,
+  {     0, 10048,  8820,   3,   2, UNI_NV__29 }   /* nv=29 */,
+  {     0,  1087,     1,  27,   1, -UNI_PCM }   /* prependedconcatenationmark=n */,
+  {     3,  9768,  8315,   4,   4, UNI_UGAR }   /* scx=ugar */,
+  {     0,  5564,  9255,  14,   5, -UNI_QMARK }   /* quotationmark=false */,
+  {     1,  7218,  6686,  10,  11, UNI_LB__IN }   /* linebreak=inseparable */,
+  {     8,  7738,  1025,   9,   2, -UNI_XIDS }   /* xidstart=no */,
+  {     8,    42,     0,   9,   0, UNI_CJKCOMPAT }   /* cjkcompat */,
+  {     2,  8617,     0,   4,   0, UNI_SOYO }   /* soyo */,
+  {     6,  3598,     0,  17,   0, UNI_AGHB }   /* caucasianalbanian */,
+  {     0,  9768,  8107,   4,   8, UNI_BALI }   /* scx=balinese */,
+  {     2,  8996,     0,   6,   0, UNI_sterm_values_index }   /* sterm= */,
+  {     0,  6409,     0,   4,   0, UNI_MEND }   /* mend */,
+  {     1,  7318,  9979,  10,   3, UNI_IN__6_DOT_1 }   /* presentin=6.1 */,
+  {     0,  1552,    74,   9,   2, UNI_ME }   /* category=me */,
+  {     0,  6620,     0,  11,   0, UNI_DOMINO }   /* dominotiles */,
+  {     0,  9488,  2076,   4,  15, UNI_TRANSPORTANDMAP }   /* blk=transportandmap */,
+  {     0,  1922,     0,  22,   0, UNI_DIACRITICALSFORSYMBOLS }   /* diacriticalsforsymbols */,
+  {    16,  7218,  7108,  10,  10, UNI_LB__BA }   /* linebreak=breakafter */,
+  {     0,  9444, 10090,   4,   3, UNI_AGE__4 }   /* age=v40 */,
+  {     4,  9245,     0,   4,   0, UNI_DOGR }   /* dogr */,
+  {     5,  5986,  7811,  13,   8, UNI_NV__1_SLASH_6 }   /* numericvalue=1.67e-01 */,
+  {    21,  4033,  1822,  16,   2, UNI_NL }   /* generalcategory=nl */,
+  {     0,  7218,    23,  10,   2, UNI_LB__AL }   /* linebreak=al */,
+  {     0,  8589,  8407,   7,   7, UNI_DSRT }   /* script=deseret */,
+  {     0,  9488,  3079,   4,  18, UNI_COPTICEPACTNUMBERS }   /* blk=copticepactnumbers */,
+  {     0,  9768,  9708,   4,   4, UNI_ORYA }   /* scx=orya */,
+  {     3,  6205,  1025,  12,   2, -UNI_IDEO }   /* ideographic=no */,
+  {     2,   184,  3241,   2,   8, UNI_GEOR }   /* isgeorgian */,
+  {     0,  5746,     0,   6,   0, UNI_ebase_values_index }   /* ebase= */,
+  {     3,   184,    34,   2,   3, UNI_EXT }   /* isext */,
+  {     1, 10027,  8283,   3,   8, UNI_JG__SWASHKAF }   /* jg=swashkaf */,
+  {     1,   184,  8990,   2,   6, UNI_RJNG }   /* isrejang */,
+  {     4,  8780,  2836,   6,  19, UNI_MODIFIERTONELETTERS }   /* block=modifiertoneletters */,
+  {     0,   184,  9620,   2,   4, UNI_LANA }   /* islana */,
+  {     1,  5791, 10021,  13,   3, UNI_JG__GAF }   /* joininggroup=gaf */,
+  {    18,   184,  3439,   2,  18, UNI_SMALLKANAEXT }   /* issmallkanaextension */,
+  {     1, 10132,  1194,   3,   2, UNI_LB__LF }   /* wb=lf */,
+  {     9,  9071,  9836,   4,   4, UNI_XPOSIXXDIGIT }   /* hex=true */,
+  {     0,  1417,  7930,  24,   2, UNI_CCC__14 }   /* canonicalcombiningclass=14 */,
+  {     8,  9277,  8442,   3,   7, UNI_SC__HANO }   /* sc=hanunoo */,
+  {     1,  6231,  1879,   3,  18, UNI_CJKCOMPATIDEOGRAPHS }   /* incjkcompatideographs */,
+  {     1,  6469,  5040,  12,   5, UNI_NT__DI }   /* numerictype=digit */,
+  {     0,  2032, 10135,  22,   3, UNI__PERL_NCHAR }   /* noncharactercodepoint=yes */,
+  {     1,  5986,  9364,  13,   4, UNI_NV__1_SLASH_10 }   /* numericvalue=1/10 */,
+  {    16,  3904,     1,  17,   1, -UNI_UIDEO }   /* unifiedideograph=n */,
+  {    11,  5791,  7045,  13,   2, UNI_JG__FE }   /* joininggroup=fe */,
+  {    17,  9584,     0,   4,   0, UNI_HLUW }   /* hluw */,
+  {     4,   113,     0,  35,   0, UNI_DIACRITICALSFORSYMBOLS }   /* combiningdiacriticalmarksforsymbols */,
+  {     1,  5791,  9044,  13,   6, UNI_JG__YUDHHE }   /* joininggroup=yudhhe */,
+  {     0,  7318,  7782,  10,   1, UNI_IN__3 }   /* presentin=3 */,
+  {     3,  9508,  8066,   4,   2, UNI_CCC__28 }   /* ccc=28 */,
+  {     6,  9277,  9740,   3,   4, UNI_SC__QAAI }   /* sc=qaai */,
+  {     0,  9508,  8831,   4,   3, UNI_CCC__132 }   /* ccc=132 */,
+  {     8,   184,  4289,   2,  16, UNI_MYANMAREXTB }   /* ismyanmarextendedb */,
+  {     1,  9488,  7058,   4,  10, UNI_ARABICEXTA }   /* blk=arabicexta */,
+  {     8,  6553,  9836,  12,   4, UNI_XIDC }   /* xidcontinue=true */,
+  {     0,  9556,  8139,   4,   8, UNI_WB__EB }   /* gcb=ebasegaz */,
+  {     1,  7291,     0,   4,   0, UNI_SOGD }   /* sogd */,
+  {     0,  5986,  9907,  13,   3, UNI_NV__1_SLASH_7 }   /* numericvalue=1/7 */,
+  {     2,  7028,  2309,   3,   5, UNI_YIJING }   /* isyijing */,
+  {    97,  9768,  8900,   4,   6, UNI_KTHI }   /* scx=kaithi */,
+  {     0,  9768,  7308,   4,  10, UNI_PHNX }   /* scx=phoenician */,
+  {     0, 10027,  5895,   3,  13, UNI_JG__MANICHAEANONE }   /* jg=manichaeanone */,
+  {     0, 10003,  9255,   3,   5, -UNI_CI }   /* ci=false */,
+  {    44,  3751,     0,  17,   0, UNI_KITS }   /* khitansmallscript */,
+  {     3,  8780,  8344,   6,   7, UNI_INBENGALI }   /* block=bengali */,
+  {     0,  8780,  7666,   6,   9, UNI_INOLDTURKIC }   /* block=oldturkic */,
+  {    34,  7218,  6179,  10,   2, UNI_LB__WJ }   /* linebreak=wj */,
+  {     0,  3836,  9828,  17,   4, UNI_THAI }   /* scriptextensions=thai */,
+  {     0,  9488,  8299,   4,   8, UNI_INTIFINAGH }   /* blk=tifinagh */,
+  {     2,  8780,  4097,   6,  16, UNI_HIGHPUSURROGATES }   /* block=highpusurrogates */,
+  {     0,  8780,  3547,   6,  17, UNI_ALCHEMICAL }   /* block=alchemicalsymbols */,
+  {     0,  7325,  9400,   3,   4, UNI_IN__13 }   /* in=13.0 */,
+  {     0,  2760,    24,  19,   1, UNI_GCB__L }   /* hangulsyllabletype=l */,
+  {     8,  4113,  1751,   3,   2, UNI_INVAI }   /* invai */,
+  {     3,  4916,  9821,   3,   3, UNI_TFNG }   /* istfng */,
+  {     0,  4033,     7,  16,   1, UNI_C }   /* generalcategory=c */,
+  {     0,   184,   630,   3,  29, UNI_CJKEXTE }   /* iscjkunifiedideographsextensione */,
+  {     0,  9345, 10135,   5,   3, UNI_XIDC }   /* xidc=yes */,
+  {     0,  9488,  8547,   4,   7, UNI_OLCK }   /* blk=olchiki */,
+  {    33,  9768,  9532,   4,   4, UNI_CYRL }   /* scx=cyrl */,
+  {     0,  6939,     0,   4,   0, UNI_SORA }   /* sora */,
+  {     3, 10033,  6686,   3,  11, UNI_LB__IN }   /* lb=inseparable */,
+  {     0,  8400,  9836,   7,   4, UNI_COMPEX }   /* compex=true */,
+  {     6,  8978,     3,   6,   1, -UNI__PERL_PATWS }   /* patws=f */,
+  {     2,  9488,   446,   4,  32, UNI_IDEOGRAPHICSYMBOLS }   /* blk=ideographicsymbolsandpunctuation */,
+  {     0,  7138,     0,  10,   0, UNI_COMPATJAMO }   /* compatjamo */,
+  {     0,  4989,     1,   3,  41, UNI_UCASEXT }   /* isunifiedcanadianaboriginalsyllabicsextended */,
+  {     1,   184,  3385,   2,  17, UNI_RI }   /* isregionalindicator */,
+  {     0,  5508,  1025,  14,   2, -UNI_PATSYN }   /* patternsyntax=no */,
+  {     6, 10290,  3379,   6,   5, UNI_XPOSIXSPACE }   /* xposixspace */,
+  {     0,   184,  2409,   2,  13, UNI_GLAGOLITICSUP }   /* isglagoliticsup */,
+  {     0,  9508,  7814,   4,   1, UNI_CCC__7 }   /* ccc=7 */,
+  {     8,  8561,     0,   7,   0, UNI_OSMA }   /* osmanya */,
+  {    14,  7438,  6193,  10,  12, UNI_LB__HL }   /* wordbreak=hebrewletter */,
+  {     2,   184,  8203,   2,   8, UNI_JAMOEXTA }   /* isjamoexta */,
+  {     5,  1166,    36,  26,   1, UNI_DI }   /* defaultignorablecodepoint=t */,
+  {     7,  8774,  9255,   6,   5, -UNI_BIDIM }   /* bidim=false */,
+  {     9,  7088,    24,  10,   1, UNI_BC__L }   /* bidiclass=l */,
+  {    24,  9277,  8936,   3,   4, UNI_LYCI }   /* sc=lyci */,
+  {     0,  9277,  8914,   5,   4, UNI_SC__KHOJ }   /* sc=khojki */,
+  {     0,  9528,     3,   4,   1, -UNI_CWU }   /* cwu=f */,
+  {     0,  4033,   262,  16,   2, UNI_SM }   /* generalcategory=sm */,
+  {     2,  6609,  1025,  11,   2, -UNI_DEP }   /* deprecated=no */,
+  {     0,  9768,  7684,   4,   4, UNI_PAUC }   /* scx=pauc */,
+  {     4,  7325,  5648,   3,   2, UNI_IN__10 }   /* in=10 */,
+  {     1,  9997,    18,   3,   1, UNI_BC__R }   /* bc=r */,
+  {    30,  9085,     0,   5,   0, UNI_BATK }   /* batak */,
+  {     1,   184,  2409,   2,  10, UNI_GLAG }   /* isglagolitic */,
+  {     0,  9768,  2608,   4,   6, UNI_BRAH }   /* scx=brahmi */,
+  {     0,  8780,  8299,   6,   8, UNI_INTIFINAGH }   /* block=tifinagh */,
+  {     1,  8780,  6025,   6,  12, UNI_ALPHABETICPF }   /* block=alphabeticpf */,
+  {     4,   119,  8877,   3,   5, UNI_INGOTHIC }   /* ingothic */,
+  {     0, 10024,    32,   3,   2, UNI__PERL_SURROGATE }   /* gc=cs */,
+  {    45,  3115,     0,  10,   0, UNI_DEVA }   /* devanagari */,
+  {     0,  9270,  6506,   3,   7, UNI_PHAISTOS }   /* inphaistos */,
+  {    14,   184,  4145,   2,   7, UNI_LINB }   /* islinearb */,
+  {     3,  9508,  9126,   5,   4, UNI_CCC__19 }   /* ccc=ccc19 */,
+  {     0, 10033,  6073,   3,  12, UNI_LB__SY }   /* lb=breaksymbols */,
+  {     0,  9277,  2912,   3,   9, UNI_SUND }   /* sc=sundanese */,
+  {     1,  3259,     0,  17,   0, UNI_IDSB }   /* idsbinaryoperator */,
+  {     0,  3836,  2245,  17,  11, UNI_MTEI }   /* scriptextensions=meeteimayek */,
+  {     1,  1856,     0,  22,   0, UNI_cwu_values_index }   /* changeswhenuppercased= */,
+  {     6,    24,     0,   1,   0, UNI_L }   /* l */,
+  {     2,   184,  4643,   2,  14, UNI_ECOMP }   /* isemojicomponent */,
+  {     1,  7218,  8449,  10,   6, UNI_LB__HY }   /* linebreak=hyphen */,
+  {     1, 10048,  9408,   3,   4, UNI_NV__15_SLASH_2 }   /* nv=15/2 */,
+  {     1,  7028,  5219,   3,   9, UNI_YIRADICALS }   /* isyiradicals */,
+  {     5,  7076,  9096,   3,   4, UNI_INBUHID }   /* inbuhid */,
+  {     1,   184,  7632,   3,   2, UNI_CWT }   /* iscwt */,
+  {    34,  9277,  9760,   3,   4, UNI_SAMR }   /* sc=samr */,
+  {     3,  9488,  3223,   4,  18, UNI_INPUNCTUATION }   /* blk=generalpunctuation */,
+  {    12,  7088,  1353,  10,   3, UNI_BC__RLE }   /* bidiclass=rle */,
+  {     1,  8780,  3044,   7,  17, UNI_HALFMARKS }   /* block=combininghalfmarks */,
+  {     0,    21,  7428,   2,  10, UNI_INWARANGCITI }   /* inwarangciti */,
+  {    19,  1417,  9946,  24,   3, UNI_CCC__DB }   /* canonicalcombiningclass=233 */,
+  {     1,   184,  1922,   2,  12, UNI_DIACRITICALS }   /* isdiacriticals */,
+  {     0,  9768,  9728,   4,   4, UNI_MIAO }   /* scx=plrd */,
+  {     2,  9768,  8344,   4,   7, UNI_BENG }   /* scx=bengali */,
+  {     1,  9326,  1183,   4,   3, UNI_ANY }   /* unicode */,
+  {    23,  8589,  7359,   8,   3, UNI_SAUR }   /* script=saur */,
+  {    12,  5752,     0,  13,   0, UNI_GREEKEXT }   /* greekextended */,
+  {     0,  4542,  3243,   4,   9, UNI_GEORGIANSUP }   /* ingeorgiansup */,
+  {     4,  4658,     0,  14,   0, UNI_GREXT }   /* graphemeextend */,
+  {     0,  9275,  9090,   5,   5, UNI_INSC__BINDU }   /* insc=bindu */,
+  {     0,  2308,     0,   6,   0, UNI_YIJING }   /* yijing */,
+  {     1,  9277,  8561,   3,   7, UNI_OSMA }   /* sc=osmanya */,
+  {     0,  3358,     0,   9,   0, UNI_Z }   /* separator */,
+  {     0,  8589,  9604,   7,   4, UNI_KHMR }   /* script=khmr */,
+  {     1,  2529,     0,  19,   0, UNI_TERM }   /* terminalpunctuation */,
+  {     1, 10027,  6337,   3,  12, UNI_JG__MALAYALAMNYA }   /* jg=malayalamnya */,
+  {     1,  3259,  1025,  18,   2, -UNI_IDSB }   /* idsbinaryoperator=no */,
+  {     0,   184,  5687,   2,  13, UNI_BLOCKELEMENTS }   /* isblockelements */,
+  {     8,  8984,     0,   6,   0, UNI_qmark_values_index }   /* qmark= */,
+  {     8,  4688,  8540,  15,   7, UNI_IDENTIFIERTYPE__NOTNFKC }   /* identifiertype=notnfkc */,
+  {     2, 10132,    73,   3,   2, UNI_WB__EB }   /* wb=em */,
+  {     1,  7438,  7612,  10,   9, UNI_WB__MB }   /* wordbreak=midnumlet */,
+  {     1,  9692,     0,   4,   0, UNI_NSHU }   /* nshu */,
+  {    14,  1966,  7328,  22,  10, UNI_INSC__PUREKILLER }   /* indicsyllabiccategory=purekiller */,
+  {    19,  8589,  1677,   7,   5, UNI_SC__LATN }   /* script=latin */,
+  {     1,  9488,  9656,   4,   4, UNI_INMIAO }   /* blk=miao */,
+  {    18, 10126,  3522,   3,   7, UNI_VO__U }   /* vo=upright */,
+  {     0,  2569,  3522,  20,   7, UNI_VO__U }   /* verticalorientation=upright */,
+  {     0,  3836,  3241,  17,   8, UNI_GEOR }   /* scriptextensions=georgian */,
+  {    17,  9768,  7428,   4,  10, UNI_WARA }   /* scx=warangciti */,
+  {     2,  8688,  8093,   4,   6, UNI_ARMN }   /* isarmenian */,
+  {     0,  7218,   340,  10,   2, UNI_LB__OP }   /* linebreak=op */,
+  {     0,   184,   838,   2,  29, UNI_MISCARROWS }   /* ismiscellaneoussymbolsandarrows */,
+  {    12,  5791,  6361,  13,  12, UNI_JG__MALAYALAMTTA }   /* joininggroup=malayalamtta */,
+  {     0,  8984,     0,   5,   0, UNI_QMARK }   /* qmark */,
+  {     3, 10003,     3,   3,   1, -UNI_CI }   /* ci=f */,
+  {     1,  3836,  3894,  18,  10, UNI_SGNW }   /* scriptextensions=signwriting */,
+  {     0,  3424,  8316,   3,   7, UNI_INUGARITIC }   /* inugaritic */,
+  {     0,   184,  2120,   3,  20, UNI_CJKRADICALSSUP }   /* iscjkradicalssupplement */,
+  {   102,  8780,  6730,   6,  11, UNI_KATAKANAEXT }   /* block=katakanaext */,
+  {     0,  9071,     0,   4,   0, UNI_hex_values_index }   /* hex= */,
+  {     4,  9508,  8820,   4,   2, UNI_CCC__29 }   /* ccc=29 */,
+  {     2,  4829,  2411,   4,   8, UNI_INGLAGOLITIC }   /* inglagolitic */,
+  {     1,  8780,  3439,   6,  18, UNI_SMALLKANAEXT }   /* block=smallkanaextension */,
+  {     0,  7318,  7979,  10,   3, UNI_IN__6 }   /* presentin=6.0 */,
+  {     0,  3836,  2061,  17,   4, UNI_MODI }   /* scriptextensions=modi */,
+  {    10,  9290,    26,   5,   1, UNI_MATH }   /* math=y */,
+  {     1,  9444, 10093,   4,   3, UNI_AGE__4_DOT_1 }   /* age=v41 */,
+  {    16,  7418,  1025,  10,   2, -UNI_XPOSIXUPPER }   /* uppercase=no */,
+  {     0,  8780,   630,   7,  29, UNI_CJKEXTE }   /* block=cjkunifiedideographsextensione */,
+  {    11, 10327,  7438,   6,   4, UNI_POSIXWORD }   /* isperlword */,
+  {    10,   184,    38,   2,   2, UNI_XPOSIXDIGIT }   /* isnd */,
+  {     1,  1188,  4929,   3,   4, UNI_INTAMIL }   /* intamil */,
+  {     0,  9508,  3572,   4,   5, UNI_CCC__B }   /* ccc=below */,
+  {     0,  5986,  9420,  13,   4, UNI_NV__3_SLASH_20 }   /* numericvalue=3/20 */,
+  {    11, 10063,  1025,   3,   2, -UNI_SD }   /* sd=no */,
+  {    36,  3853,  9836,  17,   4, UNI_STERM }   /* sentenceterminal=true */,
+  {    17,  3870,     0,  17,   0, UNI_SMALLFORMS }   /* smallformvariants */,
+  {     0,  4916,  5994,   3,   3, UNI_TALU }   /* istalu */,
+  {     1,  5791,  5326,  13,  14, UNI_JG__MANICHAEANBETH }   /* joininggroup=manichaeanbeth */,
+  {     3,  2280,  9311,   3,   4, UNI_OGAM }   /* isogham */,
+  {     0,  1417,  9108,  24,   2, UNI_CCC__15 }   /* canonicalcombiningclass=15 */,
+  {     0, 10048,  5648,   3,   7, UNI_NV__1000000 }   /* nv=1000000 */,
+  {     1,  9488,  6730,   4,  11, UNI_KATAKANAEXT }   /* blk=katakanaext */,
+  {     0,  8884,  1025,   4,   2, -UNI_EXT }   /* ext=no */,
+  {     4,  6231,  3667,   3,  16, UNI_CYRILLICEXTC }   /* incyrillicextendedc */,
+  {    54, 10009,  8533,   3,   7, UNI_DT__NB }   /* dt=nobreak */,
+  {    13,  9768,  9888,   4,   4, UNI_ZANB }   /* scx=zanb */,
+  {     0, 10296,  8576,   3,   5, UNI_PATSYN }   /* ispatsyn */,
+  {    20,  4478,     0,   4,   0, UNI_BRAI }   /* brai */,
+  {     0,  4033,  6265,  16,  12, UNI_NL }   /* generalcategory=letternumber */,
+  {     1,  9488,  8365,   4,   7, UNI_CJKEXTC }   /* blk=cjkextc */,
+  {     4,  7318,  7765,  10,   1, UNI_IN__2 }   /* presentin=2 */,
+  {     0,  5116,    36,  14,   1, UNI_EMOD }   /* emojimodifier=t */,
+  {     0,  2569,  3379,   4,   5, UNI_VERTSPACE }   /* vertspace */,
+  {     0,  8996, 10135,   6,   3, UNI_STERM }   /* sterm=yes */,
+  {     0,  5687,     0,  13,   0, UNI_BLOCKELEMENTS }   /* blockelements */,
+  {     1,  9488,  8645,   4,   7, UNI_INTAITHAM }   /* blk=taitham */,
+  {     2, 10303,     0,   5,   0, UNI_XPOSIXBLANK }   /* blank */,
+  {     0,  8589,  9500,   7,   4, UNI_SC__CAKM }   /* script=cakm */,
+  {     0,  8589,  9245,   7,   4, UNI_SC__DOGR }   /* script=dogr */,
+  {     0,  5986,  8750,  13,   6, UNI_NV__800000 }   /* numericvalue=800000 */,
+  {     0,  3904, 10135,  17,   3, UNI_UIDEO }   /* unifiedideograph=yes */,
+  {     2,  3836,  3079,  17,   4, UNI_COPT }   /* scriptextensions=copt */,
+  {     1,  9768,  6253,   4,   5, UNI_KHMR }   /* scx=khmer */,
+  {     1,  8996,  1025,   6,   2, -UNI_STERM }   /* sterm=no */,
+  {    64,  9768,  8990,   4,   6, UNI_RJNG }   /* scx=rejang */,
+  {     1,  1188,  9331,   3,   4, UNI_INTAILE }   /* intaile */,
+  {     5,  8780,  7278,   6,  10, UNI_INOLDPERSIAN }   /* block=oldpersian */,
+  {     1,  8774,     3,   6,   1, -UNI_BIDIM }   /* bidim=f */,
+  {     0,  4809,  1162,   4,   2, UNI_CPRT }   /* iscprt */,
+  {     0,  9508,  8837,   4,   3, UNI_WB__EB }   /* ccc=133 */,
+  {     8, 10033,  6193,   3,  12, UNI_LB__HL }   /* lb=hebrewletter */,
+  {     1, 10048,  9428,   3,   3, UNI_NV__3_SLASH_8 }   /* nv=3/8 */,
+  {     1,  8519,     0,   7,   0, UNI_nfkdqc_values_index }   /* nfkdqc= */,
+  {     8,  9488,  7248,   4,  10, UNI_MISCARROWS }   /* blk=miscarrows */,
+  {    32,   184,  4002,   3,  15, UNI_CYPRIOTSYLLABARY }   /* iscypriotsyllabary */,
+  {     0,  1966,  5700,  22,  13, UNI_INSC__CONSONANTDEAD }   /* indicsyllabiccategory=consonantdead */,
+  {     0,  1834,    36,  22,   1, UNI_CWT }   /* changeswhentitlecased=t */,
+  {   121,  9277,  8091,   3,   8, UNI_ARMN }   /* sc=armenian */,
+  {     6, 10048,  8727,   3,   2, UNI_NV__32 }   /* nv=32 */,
+  {     0,  1505,  1016,   5,   2, UNI_INGREEK }   /* ingreek */,
+  {     1,  3836,  4448,  17,   5, UNI_BAMU }   /* scriptextensions=bamum */,
+  {     2,  9488,   113,   4,  35, UNI_DIACRITICALSFORSYMBOLS }   /* blk=combiningdiacriticalmarksforsymbols */,
+  {     1,  8942,     0,   6,   0, UNI_LYDI }   /* lydian */,
+  {     3,  9277,  9476,   3,   4, UNI_AVST }   /* sc=avst */,
+  {     0,  7418,     1,  10,   1, -UNI_XPOSIXUPPER }   /* uppercase=n */,
+  {     6,  9488,   719,   4,  16, UNI_CUNEIFORMNUMBERS }   /* blk=cuneiformnumbers */,
+  {     0,  4853, 10135,  15,   3, UNI_DT__NONE }   /* nfkdquickcheck=yes */,
+  {     0,  8589,  8666,   7,   7, UNI_SC__TIRH }   /* script=tirhuta */,
+  {     4,   184,   328,   2,  21, UNI_MATHOPERATORS }   /* ismathematicaloperators */,
+  {     1,   184,   600,   3,  29, UNI_CJKEXTD }   /* iscjkunifiedideographsextensiond */,
+  {     0,  9488,  6193,   4,   6, UNI_INHEBREW }   /* blk=hebrew */,
+  {     3,  8780,   720,   7,   8, UNI_INCUNEIFORM }   /* block=cuneiform */,
+  {     9,  9508,  6631,   4,  11, UNI_CCC__DA }   /* ccc=doubleabove */,
+  {     0,  4628,     3,  15,   1, UNI_EA__F }   /* eastasianwidth=f */,
+  {     9,  9488,  1060,   4,  27, UNI_OCR }   /* blk=opticalcharacterrecognition */,
+  {     0,  8589,  9440,   7,   4, UNI_SC__ADLM }   /* script=adlm */,
+  {     9, 10296,  7309,   3,   9, UNI_PHNX }   /* isphoenician */,
+  {     4,   184,  3853,   2,  16, UNI_STERM }   /* issentenceterminal */,
+  {     9,  9277,  9496,   3,   4, UNI_SC__BUHD }   /* sc=buhd */,
+  {    25, 10027,     0,   3,   0, UNI_jg_values_index }   /* jg= */,
+  {     4,  3836,  6193,  17,   6, UNI_HEBR }   /* scriptextensions=hebrew */,
+  {     0,  3097,  1417,  18,   9, UNI_DT__CAN }   /* decompositiontype=canonical */,
+  {     1,  7076,  7514,   3,   8, UNI_INBHAIKSUKI }   /* inbhaiksuki */,
+  {     3,  3836,  7359,  18,   3, UNI_SAUR }   /* scriptextensions=saur */,
+  {     1,  3836,  9728,  17,   4, UNI_MIAO }   /* scriptextensions=plrd */,
+  {     0,  3836,  8876,  17,   6, UNI_GOTH }   /* scriptextensions=gothic */,
+  {     0,  1273,     3,  21,   1, -UNI_CE }   /* compositionexclusion=f */,
+  {     5,  3836,  8547,  17,   7, UNI_OLCK }   /* scriptextensions=olchiki */,
+  {     2,  9768,  4385,   4,   4, UNI_TANG }   /* scx=tang */,
+  {     5,  9997,    25,   3,   1, UNI_BC__S }   /* bc=s */,
+  {     0,  6229,    26,  12,   1, UNI_JOINC }   /* joincontrol=y */,
+  {    61, 10048,  8051,   3,   8, UNI_NV__5_SLASH_6 }   /* nv=8.33e-01 */,
+  {     7,  9014,  9255,   6,   5, -UNI_UIDEO }   /* uideo=false */,
+  {    32,  9768,  7292,   5,   6, UNI_SOGD }   /* scx=sogdian */,
+  {     2,  3151,    26,  18,   1, UNI_EPRES }   /* emojipresentation=y */,
+  {     3,  8589,  8131,   7,   4, UNI_SC__DUPL }   /* script=dupl */,
+  {     1,  7218,  2640,  10,   2, UNI_LB__BA }   /* linebreak=ba */,
+  {     1,  8780,  5843,   6,   9, UNI_INMALAYALAM }   /* block=malayalam */,
+  {    17,  4916,  8667,   3,   3, UNI_TIRH }   /* istirh */,
+  {     0,  5324,   330,   4,  19, UNI_MATHOPERATORS }   /* inmathematicaloperators */,
+  {     7,  1417,  8820,  24,   2, UNI_CCC__29 }   /* canonicalcombiningclass=29 */,
+  {     7,  4916,  9833,   3,   3, UNI_TIBT }   /* istibt */,
+  {     0,  9508,  8714,   4,   2, UNI_CCC__30 }   /* ccc=30 */,
+  {     0,  9277,  8645,   3,   7, UNI_LANA }   /* sc=taitham */,
+  {    17,  6229,  9255,  12,   5, -UNI_JOINC }   /* joincontrol=false */,
+  {     2,  4033,  5438,  16,  14, UNI_SK }   /* generalcategory=modifiersymbol */,
+  {     8,  7218, 10154,  10,   2, UNI_LB__B2 }   /* linebreak=b2 */,
+  {     0,    47,     0,   1,   0, UNI_M }   /* m */,
+  {     3, 10333,  9797,   3,   3, UNI_SYRC }   /* issyrc */,
+  {     9,   184,  8211,   2,   8, UNI_JAMOEXTB }   /* isjamoextb */,
+  {     1, 10168,     0,   2,   0, UNI_CASEDLETTER }   /* l& */,
+  {     0,  9277,  9880,   3,   4, UNI_SC__YI }   /* sc=yiii */,
+  {     0,  8589,  7657,   7,   9, UNI_SC__PERM }   /* script=oldpermic */,
+  {     2,  9488,  2409,   4,  20, UNI_GLAGOLITICSUP }   /* blk=glagoliticsupplement */,
+  {     1,   184,  7188,   2,  10, UNI_KHAR }   /* iskharoshthi */,
+  {     4,   184,  9529,   3,   2, UNI_CWU }   /* iscwu */,
+  {    71,  8147, 10135,   8,   3, UNI_EXTPICT }   /* extpict=yes */,
+  {     6,  7325,  7923,   3,   3, UNI_IN__4 }   /* in=4.0 */,
+  {     0,  1417,  9949,  24,   3, UNI_CCC__DA }   /* canonicalcombiningclass=234 */,
+  {     5, 10291,  1823,   5,   5, UNI_POSIXLOWER }   /* posixlower */,
+  {     0,  2224,  6973,   3,  10, UNI_INSYLOTINAGRI }   /* insylotinagri */,
+  {     3,  7076,  4449,   3,   7, UNI_BAMUMSUP }   /* inbamumsup */,
+  {    21,  9768,  9038,   4,   6, UNI_YEZI }   /* scx=yezidi */,
+  {    22,  9476,     0,   4,   0, UNI_AVST }   /* avst */,
+  {     0,  8780,  3223,   6,  18, UNI_INPUNCTUATION }   /* block=generalpunctuation */,
+  {     6,  9488,  8428,   4,   7, UNI_INGRANTHA }   /* blk=grantha */,
+  {     0,  7325,  7877,   3,   2, UNI_IN__13 }   /* in=13 */,
+  {     2,  5578,     5,  15,   1, UNI_SB__SE }   /* sentencebreak=se */,
+  {     3,  9508,  9188,   4,   2, UNI_CCC__31 }   /* ccc=31 */,
+  {     7,  9488,  8358,   4,   7, UNI_CJKEXTB }   /* blk=cjkextb */,
+  {     0,  9277,  9624,   3,   3, UNI_LAO }   /* sc=lao */,
+  {     0,   184,  9548,   2,   4, UNI_DSRT }   /* isdsrt */,
+  {    96,  7325, 10111,   3,   3, UNI_IN__6_DOT_2 }   /* in=v62 */,
+  {    10,  9508,  8823,   5,   5, UNI_CCC__130 }   /* ccc=ccc130 */,
+  {    32,  9488,  1561,   4,  24, UNI_SUPSYMBOLSANDPICTOGRAPHS }   /* blk=supsymbolsandpictographs */,
+  {     0, 10340,    25,   3,   1, UNI_VS }   /* isvs */,
+  {     0,  5032,    36,  14,   1, UNI_POSIXXDIGIT }   /* asciihexdigit=t */,
+  {     0,  9524,  9836,   4,   4, UNI_CWT }   /* cwt=true */,
+  {    19,  7438, 10015,  10,   3, UNI_WB__EB }   /* wordbreak=ebg */,
+  {     5, 10048,  8059,   3,   8, UNI_NV__1_SLASH_12 }   /* nv=8.33e-02 */,
+  {     4, 10290,  1823,   6,   5, UNI_XPOSIXLOWER }   /* xposixlower */,
+  {     1,  5739,     3,  13,   1, -UNI_GRBASE }   /* graphemebase=f */,
+  {     0,   184,  5242,   2,  14, UNI_LATINEXTC }   /* islatinextendedc */,
+  {    48,  3379,     3,   6,   1, -UNI_XPOSIXSPACE }   /* space=f */,
+  {     1, 10024,    38,   3,   2, UNI_XPOSIXDIGIT }   /* gc=nd */,
+  {     0, 10027,  6346,   3,   3, UNI_JG__NYA }   /* jg=nya */,
+  {     2,  2224,  8276,   3,   7, UNI_SPECIALS }   /* inspecials */,
+  {     2,  8780,  7308,   6,  10, UNI_INPHOENICIAN }   /* block=phoenician */,
+  {     3,  8780,  8337,   6,   7, UNI_INAVESTAN }   /* block=avestan */,
+  {     0,  9488,  4401,   4,   9, UNI_TANGUTSUP }   /* blk=tangutsup */,
+  {     9,  8780,  7098,   6,  10, UNI_BOXDRAWING }   /* block=boxdrawing */,
+  {     0, 10048,  9168,   3,   2, UNI_NV__27 }   /* nv=27 */,
+  {     6,  4916,  1846,   3,   4, UNI_TITLE }   /* istitle */,
+  {     2,   184,  9896,   2,   4, UNI_ZYYY }   /* iszyyy */,
+  {     1,   184,  3241,   2,  18, UNI_GEORGIANSUP }   /* isgeorgiansupplement */,
+  {    18, 10048,  9188,   3,   2, UNI_NV__31 }   /* nv=31 */,
+  {     0, 10033,  1751,   3,   2, UNI_LB__AI }   /* lb=ai */,
+  {     0, 10048,  8744,   3,   5, UNI_NV__70000 }   /* nv=70000 */,
+  {     2, 10012,     1,   3,   1, UNI_EA__N }   /* ea=n */,
+  {     0,  1269,    36,  25,   1, UNI_COMPEX }   /* fullcompositionexclusion=t */,
+  {     0,  3836,  9789,  18,   3, UNI_SHRD }   /* scriptextensions=shrd */,
+  {    32,  9540,    26,   4,   1, UNI_DIA }   /* dia=y */,
+  {    27,  1552,     0,   9,   0, UNI_gc_values_index }   /* category= */,
+  {     0,  9488,  5947,   4,  13, UNI_MAYANNUMERALS }   /* blk=mayannumerals */,
+  {     1,  7438,  1218,  10,   8, UNI_WB__KA }   /* wordbreak=katakana */,
+  {     0,  2329,     0,  20,   0, UNI_HLUW }   /* anatolianhieroglyphs */,
+  {     1, 10027,  5312,   3,  14, UNI_JG__MANICHAEANAYIN }   /* jg=manichaeanayin */,
+  {     0,  7318,  7469,  10,   3, UNI_IN__5 }   /* presentin=5.0 */,
+  {     0,  1417,  8829,  25,   5, UNI_CCC__132 }   /* canonicalcombiningclass=ccc132 */,
+  {    26,  3097,    68,  18,   3, UNI_DT__SUP }   /* decompositiontype=sup */,
+  {    20,  9240,    36,   5,   1, UNI_DASH }   /* dash=t */,
+  {    11,  8780,   600,   7,  29, UNI_CJKEXTD }   /* block=cjkunifiedideographsextensiond */,
+  {     1,  8780,  9656,   6,   4, UNI_INMIAO }   /* block=miao */,
+  {    20,  9997, 10039,   3,   3, UNI_BC__LRI }   /* bc=lri */,
+  {     0,  7325, 10114,   3,   3, UNI_IN__6_DOT_3 }   /* in=v63 */,
+  {     6,  5986,  9376,  13,   3, UNI_NV__1_SLASH_6 }   /* numericvalue=1/6 */,
+  {     0,   184,  9688,   2,   4, UNI_NKO }   /* isnkoo */,
+  {     0,  8780,  9245,   6,   5, UNI_INDOGRA }   /* block=dogra */,
+  {     5,  1417,  7826,  24,   2, UNI_CCC__12 }   /* canonicalcombiningclass=12 */,
+  {     1,  8589,  9724,   7,   4, UNI_PHNX }   /* script=phnx */,
+  {     0,  5791,  7711,  13,   9, UNI_JG__SYRIACWAW }   /* joininggroup=syriacwaw */,
   {     0,    58,     0,   4,   0, UNI_IDEO }   /* ideo */,
-  {     3,  9647,  7436,   3,   8, UNI_NV__1_SLASH_9 }   /* nv=1.11e-01 */,
-  {     0,  1362,  8745,  25,   4, UNI_CCC__20 }   /* canonicalcombiningclass=ccc20 */,
-  {     4,  2703,   995,  19,   2, -UNI_IDST }   /* idstrinaryoperator=no */,
-  {     0,  9608,  8574,   3,   6, UNI_EA__NA }   /* ea=narrow */,
-  {     6,    21,  1188,   2,   8, UNI_INKATAKANA }   /* inkatakana */,
-  {     0,   184,  1622,   2,  14, UNI_LATINEXTA }   /* islatinextendeda */,
-  {     2,   184,  5199,   2,  14, UNI_SK }   /* ismodifiersymbol */,
-  {     3,    21,  4822,   3,   4, UNI_ASCII }   /* inascii */,
-  {     1,  3671,  9429,  17,   4, UNI_TIBT }   /* scriptextensions=tibt */,
-  {     1,  9365,  6992,   5,   6, UNI_SOGD }   /* scx=sogdian */,
-  {     0,  8086,  8864,   7,   5, -UNI_GRBASE }   /* grbase=false */,
-  {     1,  8233,  8859,   7,   5, UNI_SC__DOGR }   /* script=dogra */,
-  {     2,  4140,     0,  16,   0, UNI_PO }   /* otherpunctuation */,
-  {     2,  9623,  4947,   3,  14, UNI_JG__HAMZAONHEHGOAL }   /* jg=hamzaonhehgoal */,
-  {     5,  9602,    26,   3,   1, UNI_DI }   /* di=y */,
-  {     1,  6005,   660,   3,  29, UNI_CJKEXTF }   /* incjkunifiedideographsextensionf */,
-  {    11,  2684,   881,  19,   1, UNI_GCB__V }   /* hangulsyllabletype=v */,
-  {     2,  9093,  4204,   4,   6, UNI_INSYRIAC }   /* blk=syriac */,
-  {     3,  6885,  8101,   3,   5, UNI_HYPHEN }   /* ishyphen */,
-  {    16,  8886,  7374,   3,   9, UNI_SAMR }   /* sc=samaritan */,
-  {     0,   184,  8538,   2,   4, UNI_KHOJ }   /* iskhoj */,
-  {     0,  8332,  5800,   3,  11, UNI_ALPHABETICPF }   /* isalphabeticpf */,
-  {     0,  8886,  9261,   3,   3, UNI_MRO }   /* sc=mro */,
-  {     1,  4705,  9418,   3,   3, UNI_TFNG }   /* istfng */,
-  {     0,  9916,     0,   5,   0, UNI_XPOSIXBLANK }   /* blank */,
-  {    20,  2148,  3706,   3,  16, UNI_SMALLFORMS }   /* insmallformvariants */,
-  {    14,  9093,   779,   4,  22, UNI_ENCLOSEDIDEOGRAPHICSUP }   /* blk=enclosedideographicsup */,
-  {    15,    84,     0,   4,   0, UNI_MATH }   /* math */,
-  {     0,   184,  9134,   3,   3, UNI_CYRL }   /* iscyrl */,
-  {     4,  9620,  3227,   3,   9, UNI_Z }   /* gc=separator */,
-  {    18,  8424,  8079,   6,   7, UNI_INGRANTHA }   /* block=grantha */,
-  {     0,  4705,  3327,   3,  10, UNI_TAIXUANJING }   /* istaixuanjing */,
-  {     0,  5760,  7508,  13,   8, UNI_NV__1_SLASH_5 }   /* numericvalue=2.00e-01 */,
-  {     0,  8556,   995,   6,   2, -UNI_XPOSIXLOWER }   /* lower=no */,
-  {     0,  3868,   598,  16,   2, UNI_XPOSIXCNTRL }   /* generalcategory=cc */,
-  {     1,  9647,  9013,   3,   4, UNI_NV__15_SLASH_2 }   /* nv=15/2 */,
-  {     4,  6005,  2591,   4,  17, UNI_COUNTINGROD }   /* incountingrodnumerals */,
-  {     0,  8520,  9734,   6,   3, UNI_JOINC }   /* joinc=yes */,
-  {     1,  9145,     0,   4,   0, UNI_DSRT }   /* dsrt */,
-  {     1,  8037,     0,   7,   0, UNI_CJKEXTE }   /* cjkexte */,
-  {     0,  8079,     0,   7,   0, UNI_GRAN }   /* grantha */,
-  {    16,  8233,  2409,   7,   4, UNI_SC__MONG }   /* script=mong */,
-  {     0,  3671,  9269,  17,   4, UNI_MYMR }   /* scriptextensions=mymr */,
-  {    10,  9113,  1701,   4,   2, UNI_CCC__BR }   /* ccc=br */,
-  {     0,  9647,  7652,   3,   8, UNI_NV__7_SLASH_12 }   /* nv=5.83e-01 */,
-  {     0,  3671,  6602,  17,  11, UNI_NAND }   /* scriptextensions=nandinagari */,
-  {     9,  8170,     0,   9,   0, UNI_NFKDQC__N }   /* nfkdqc=no */,
-  {     5,  5565,  2561,  13,   3, UNI_JG__YEH }   /* joininggroup=yeh */,
-  {     1,  9940,  7128,   6,   4, UNI_POSIXWORD }   /* isperlword */,
-  {     0,  8412,     3,   6,   1, -UNI_BIDIC }   /* bidic=f */,
-  {     0,  9620,  4732,   3,  15, UNI_TITLE }   /* gc=titlecaseletter */,
-  {     1,  7018,  9674,  10,   3, UNI_IN__2 }   /* presentin=v20 */,
-  {     2,  9593,  9635,   3,   3, UNI_BC__LRI }   /* bc=lri */,
-  {     0,  8219,  9734,   7,   3, UNI_PATSYN }   /* patsyn=yes */,
-  {     1,   184,   316,   2,  33, UNI_SUPMATHOPERATORS }   /* issupplementalmathematicaloperators */,
-  {     0,  9647,  8802,   3,   2, UNI_NV__31 }   /* nv=31 */,
-  {     1,  8424,  8093,   6,   7, UNI_INHANUNOO }   /* block=hanunoo */,
-  {    29,  9093,  8526,   4,   6, UNI_INKAITHI }   /* blk=kaithi */,
-  {     0,  9629,     0,   3,   0, UNI_lb_values_index }   /* lb= */,
-  {     3,  5760,  7723,  13,   2, UNI_NV__18 }   /* numericvalue=18 */,
-  {     5,  9647,  5409,   3,   2, UNI_NV__10 }   /* nv=10 */,
-  {     2,  7025,  9692,   3,   3, UNI_IN__4_DOT_1 }   /* in=v41 */,
-  {    40,   184,  1289,   2,  25, UNI_SYMBOLSANDPICTOGRAPHSEXTA }   /* issymbolsandpictographsexta */,
-  {     2,  3671,  7788,  17,   8, UNI_BALI }   /* scriptextensions=balinese */,
-  {     0,  8424,   467,   6,  11, UNI_INPUNCTUATION }   /* block=punctuation */,
-  {     4,  8177,     0,   7,   0, UNI_NB }   /* noblock */,
-  {     2,  8586,  8904,   6,   5, UNI_NFCQC__M }   /* nfcqc=maybe */,
-  {     2,  2204,  9306,   3,   3, UNI_ORYA }   /* isorya */,
-  {     0,  9193,     9,   4,   2, UNI_HST__NA }   /* hst=na */,
-  {    24,  8233,  6246,   7,   4, UNI_HUNG }   /* script=hung */,
-  {    26,  8604,  9433,   6,   4, UNI_QMARK }   /* qmark=true */,
-  {     0,  4778,     1,   3,  33, UNI_UCAS }   /* isunifiedcanadianaboriginalsyllabics */,
-  {     4,  3671,  9333,  17,   4, UNI_COPT }   /* scriptextensions=qaac */,
-  {     0,  9781,  9814,   6,  21, UNI__PERL_IS_IN_MULTI_CHAR_FOLD }   /* _perl_is_in_multi_char_fold */,
-  {     0,  1338,     0,  24,   0, UNI_ARABICPFB }   /* arabicpresentationformsb */,
-  {    21,  3951,   415,   3,  31, UNI_INIDC }   /* isideographicdescriptioncharacters */,
-  {     2,  4507,     0,  15,   0, UNI_LOWERCASELETTER }   /* lowercaseletter */,
-  {     1,  7128,  5952,  10,   3, UNI_LB__ZWJ }   /* wordbreak=zwj */,
-  {     1,  9926,  3248,   7,   5, UNI_XPOSIXBLANK }   /* ishorizspace */,
-  {     4,  8219,    26,   7,   1, UNI_PATSYN }   /* patsyn=y */,
-  {     1,  9933,    17,   5,   1, UNI_XPEO }   /* isxpeo */,
-  {     3,  8233,  8514,   7,   4, UNI_HATR }   /* script=hatr */,
-  {     1,  2708,  7187,   4,   7, UNI_ARABICPFA }   /* inarabicpfa */,
-  {     8,  8424,  3996,   6,  16, UNI_LINEARBSYLLABARY }   /* block=linearbsyllabary */,
-  {     5,  1362,  4701,  24,   2, UNI_CCC__0 }   /* canonicalcombiningclass=nr */,
-  {    22,  9093,  2779,   4,  12, UNI_MONGOLIANSUP }   /* blk=mongoliansup */,
-  {     0,  8233,  8939,   7,   5, UNI_SC__TALE }   /* script=taile */,
-  {     7,  1977,   995,  22,   2, -UNI__PERL_NCHAR }   /* noncharactercodepoint=no */,
-  {     5,  7420,     0,   7,   0, UNI_IDS }   /* idstart */,
-  {     3,  8424,  2779,   6,  12, UNI_MONGOLIANSUP }   /* block=mongoliansup */,
-  {     0,  9782,  3248,   4,   5, UNI_POSIXSPACE }   /* perlspace */,
-  {     0,  8955,  9734,   4,   3, UNI_IDC }   /* idc=yes */,
-  {     0,  3671,  6554,  18,   3, UNI_SAMR }   /* scriptextensions=samr */,
-  {     5,  3671,  8296,  17,   7, UNI_TAVT }   /* scriptextensions=taiviet */,
-  {     0,  6828,   407,  10,   2, UNI_BC__ON }   /* bidiclass=on */,
-  {     5,  9940,     0,   4,   0, UNI_PE }   /* ispe */,
-  {    43,  8424,  7248,   6,   9, UNI_INKHUDAWADI }   /* block=khudawadi */,
-  {     3,   493,     0,   3,   0, UNI_HAN }   /* han */,
-  {     5,   184,  2333,   2,  13, UNI_GLAGOLITICSUP }   /* isglagoliticsup */,
-  {    15,  1497,   107,  10,   5, UNI_S }   /* category=symbol */,
-  {     0,  8233,  9101,   7,   4, UNI_SC__BUHD }   /* script=buhd */,
-  {     0,  4705,  5768,   3,   3, UNI_TALU }   /* istalu */,
-  {     1,  8520,    36,   6,   1, UNI_JOINC }   /* joinc=t */,
-  {     0,  3671,  9169,  17,   4, UNI_GUJR }   /* scriptextensions=gujr */,
-  {     0,  3728,     0,  11,   0, UNI_SGNW }   /* signwriting */,
-  {     5,  8233,  9421,   7,   4, UNI_SC__TGLG }   /* script=tglg */,
-  {     0,  8886,   493,   3,   3, UNI_SC__HAN }   /* sc=han */,
-  {     0,  7932,    26,   8,   1, UNI_RADICAL }   /* radical=y */,
-  {    20,  5760,  8382,  13,   6, UNI_NV__600000 }   /* numericvalue=600000 */,
-  {    12,  3002,  7836,  18,   3, UNI_DT__FRA }   /* decompositiontype=fra */,
-  {     3,  8424,   921,   6,  28, UNI_VSSUP }   /* block=variationselectorssupplement */,
-  {    24,  4778,  1813,   3,   4, UNI_XPOSIXUPPER }   /* isupper */,
-  {     8,  8424,   414,   6,  32, UNI_INIDC }   /* block=ideographicdescriptioncharacters */,
-  {    10,  3868,    24,  16,   1, UNI_L }   /* generalcategory=l */,
-  {    48,  3948,  4763,   3,   7, UNI_VEDICEXT }   /* invedicext */,
-  {     4,  8424,  1622,   6,  23, UNI_LATINEXTADDITIONAL }   /* block=latinextendedadditional */,
-  {     0,   184,  6003,   2,   5, UNI_JOINC }   /* isjoinc */,
-  {     0,   184,  1188,   2,   8, UNI_KANA }   /* iskatakana */,
-  {   115,  3868,   698,  16,   6, UNI_N }   /* generalcategory=number */,
-  {    20,  8424,  3884,   6,  11, UNI_GEORGIANEXT }   /* block=georgianext */,
-  {    33,  9904,  4828,   5,   6, UNI_POSIXXDIGIT }   /* posixxdigit */,
-  {     6,  8424,   540,   7,  29, UNI_CJKEXTB }   /* block=cjkunifiedideographsextensionb */,
-  {     0,  8886,  9089,   3,   4, UNI_BHKS }   /* sc=bhks */,
-  {     8,  9113,  8750,   5,   4, UNI_CCC__21 }   /* ccc=ccc21 */,
-  {    11,  5760,  7495,  13,   1, UNI_NV__7 }   /* numericvalue=7 */,
-  {    11,  9093,    78,   4,  35, UNI_ARABICMATH }   /* blk=arabicmathematicalalphabeticsymbols */,
-  {     0,  8424,  7347,   6,   9, UNI_INOLDTURKIC }   /* block=oldturkic */,
-  {     9,  3671,  6243,  17,  12, UNI_HUNG }   /* scriptextensions=oldhungarian */,
-  {    32,  3128,    36,  18,   1, UNI_IDSB }   /* idsbinaryoperator=t */,
-  {   134,  9049,  8997,   4,   4, UNI_AGE__11 }   /* age=11.0 */,
-  {     0,  8424,  7048,   6,  10, UNI_INSAURASHTRA }   /* block=saurashtra */,
-  {     3,  9620,  1767,   3,   2, UNI_NL }   /* gc=nl */,
-  {     1,  3164,     0,   9,   0, UNI_LATINEXTA }   /* latinexta */,
-  {     0,  8879,  3350,   5,  12, UNI_INPC__LEFTANDRIGHT }   /* inpc=leftandright */,
-  {     1,  9365,  8079,   4,   7, UNI_GRAN }   /* scx=grantha */,
-  {     5,  9093,   467,   4,  11, UNI_INPUNCTUATION }   /* blk=punctuation */,
-  {     1,   184,  3308,   2,  18, UNI_SMALLKANAEXT }   /* issmallkanaextension */,
-  {     1,    42,     0,  16,   0, UNI_CJKCOMPAT }   /* cjkcompatibility */,
-  {     1,  7018,  9692,  10,   3, UNI_IN__4_DOT_1 }   /* presentin=v41 */,
-  {     1,  8424,  5967,   6,   6, UNI_INHEBREW }   /* block=hebrew */,
-  {     4,  8424,   690,   7,  15, UNI_CUNEIFORMNUMBERS }   /* block=cuneiformnumbers */,
-  {     3,  8424,  6316,   6,   3, UNI_INIDC }   /* block=idc */,
-  {     0,  1790,     0,   9,   0, UNI_TITLE }   /* titlecase */,
-  {     0,  3671,  7812,  17,   4, UNI_DUPL }   /* scriptextensions=dupl */,
-  {    16,  1933,    26,  22,   1, UNI_LOE }   /* logicalorderexception=y */,
-  {     0,  9365,  8430,   4,   6, UNI_CARI }   /* scx=carian */,
-  {     0,  9946,  8255,   3,   6, UNI_SIDD }   /* issiddham */,
-  {     0,  6316,   995,  11,   2, -UNI_IDC }   /* idcontinue=no */,
-  {     0,  8616,     3,   6,   1, -UNI_STERM }   /* sterm=f */,
-  {     0,  9365,  4657,   4,  15, UNI_NARB }   /* scx=oldnortharabian */,
-  {     0,  8233,  8114,   7,   7, UNI_SC__KALI }   /* script=kayahli */,
-  {     1,  8886,  3836,   3,   7, UNI_SC__CPRT }   /* sc=cypriot */,
-  {     0,  8884,  4327,   5,  15, UNI_INSC__CONSONANTKILLER }   /* insc=consonantkiller */,
-  {     1,  8424,  4204,   6,   6, UNI_INSYRIAC }   /* block=syriac */,
-  {     5,  8886,  9101,   3,   4, UNI_SC__BUHD }   /* sc=buhd */,
-  {     0,  1911,  7320,  22,   9, UNI_INSC__NONJOINER }   /* indicsyllabiccategory=nonjoiner */,
-  {    12,   184,  9916,   2,   5, UNI_XPOSIXBLANK }   /* isblank */,
-  {     0,  7341,     0,   4,   0, UNI_PERM }   /* perm */,
-  {     1,  8424,  7804,   6,   8, UNI_INBUGINESE }   /* block=buginese */,
-  {     3,  9647,  7470,   3,   2, UNI_NV__50 }   /* nv=50 */,
-  {     3,  9662,     0,   3,   0, UNI_sd_values_index }   /* sd= */,
-  {     4,  1911,  4188,  22,  16, UNI_INSC__SYLLABLEMODIFIER }   /* indicsyllabiccategory=syllablemodifier */,
-  {     2,  9093,  4417,   4,  15, UNI_DIACRITICALSEXT }   /* blk=diacriticalsext */,
-  {     3,  3948,  4763,   3,  14, UNI_VEDICEXT }   /* invedicextensions */,
-  {     3,  1362,  8760,  25,   4, UNI_CCC__23 }   /* canonicalcombiningclass=ccc23 */,
-  {     6,   184,  3020,   2,  10, UNI_DEVA }   /* isdevanagari */,
-  {     0,  6918,   125,  10,   2, UNI_LB__CR }   /* linebreak=cr */,
-  {    96,   184,  3290,   2,   4, UNI_RUMI }   /* isrumi */,
-  {     0,  5269,  9433,  14,   4, UNI_PATSYN }   /* patternsyntax=true */,
-  {     0,  4705,  8290,   3,   6, UNI_LANA }   /* istaitham */,
-  {     0,  8685,     3,   4,   1, -UNI_XPOSIXXDIGIT }   /* hex=f */,
-  {    33,   184,  6602,   2,  11, UNI_NAND }   /* isnandinagari */,
-  {    29,  5311,     0,  14,   0, UNI_PHLP }   /* psalterpahlavi */,
-  {     1,  8886,  3110,   3,   4, UNI_SC__GEOR }   /* sc=geor */,
-  {     1,  9181,     0,   4,   0, UNI_HLUW }   /* hluw */,
-  {     0,  1159,    39,   3,   2, UNI_XPOSIXDIGIT }   /* nt=de */,
-  {     2,  9909,  7128,   7,   4, UNI_POSIXWORD }   /* isposixword */,
-  {     1,  9593,  2413,   3,  20, UNI_BC__PDF }   /* bc=popdirectionalformat */,
-  {     4,   184,    84,   2,   4, UNI_MATH }   /* ismath */,
-  {     0,  6005,   510,   3,  29, UNI_CJKEXTA }   /* incjkunifiedideographsextensiona */,
-  {     4,  5760,  8358,  13,   4, UNI_NV__3000 }   /* numericvalue=3000 */,
-  {     0,   184,  9353,   2,   4, UNI_RUNR }   /* isrunr */,
-  {   104,  8233,  2930,   7,   8, UNI_CHER }   /* script=cherokee */,
-  {     0,  8424,   808,   6,  29, UNI_MISCARROWS }   /* block=miscellaneoussymbolsandarrows */,
-  {     0,  3671,  8550,  17,   4, UNI_LEPC }   /* scriptextensions=lepc */,
-  {     8,  5760,  9021,  13,   4, UNI_NV__3_SLASH_16 }   /* numericvalue=3/16 */,
-  {     0,  9093,   446,   4,  18, UNI_IDEOGRAPHICSYMBOLS }   /* blk=ideographicsymbols */,
-  {     2,  4946,     0,   4,   0, UNI_CHAM }   /* cham */,
-  {    24,  9313,     3,   4,   1, -UNI_PCM }   /* pcm=f */,
-  {     0,  9365,  2085,   4,   8, UNI_CYRL }   /* scx=cyrillic */,
-  {    12,  3603,     0,  17,   0, UNI_LETTERLIKESYMBOLS }   /* letterlikesymbols */,
-  {    12,  5339,  1768,  14,   5, UNI_SB__LO }   /* sentencebreak=lower */,
-  {     9,  8886,  8514,   3,   4, UNI_HATR }   /* sc=hatr */,
-  {    19,  8640,    26,   6,   1, UNI_XPOSIXUPPER }   /* upper=y */,
-  {     1,  8886,  9221,   3,   4, UNI_SC__LATN }   /* sc=latn */,
-  {     1,  9357,     0,   4,   0, UNI_SAMR }   /* samr */,
-  {     1,  8233,  9333,   7,   4, UNI_SC__COPT }   /* script=qaac */,
-  {     0,  9093,  5967,   4,   6, UNI_INHEBREW }   /* blk=hebrew */,
-  {     2,  3243,     0,  11,   0, UNI_wspace_values_index }   /* whitespace= */,
-  {     5,   184,  1933,   2,  21, UNI_LOE }   /* islogicalorderexception */,
-  {     2,  8233,  9325,   7,   4, UNI_MIAO }   /* script=plrd */,
-  {     1,  9647,  7495,   3,   1, UNI_NV__7 }   /* nv=7 */,
-  {     9,  3671,  6558,  17,  11, UNI_MEDF }   /* scriptextensions=medefaidrin */,
-  {     0,  9113,  8451,   4,   3, UNI_CCC__118 }   /* ccc=118 */,
-  {    10,  9093,  8282,   4,   7, UNI_INTAGALOG }   /* blk=tagalog */,
-  {     7,  8044,     0,   7,   0, UNI_CJKEXTF }   /* cjkextf */,
-  {     0,  3251,  9734,   3,   3, UNI_CE }   /* ce=yes */,
-  {     1,  8874,    26,   5,   1, UNI_IDST }   /* idst=y */,
-  {     3,  8424,  4492,   6,  15, UNI_INIMPERIALARAMAIC }   /* block=imperialaramaic */,
-  {     0,  9626,     0,   4,   0, UNI_JT__L }   /* jt=l */,
-  {   130,  9113,  9539,   4,   3, UNI_CCC__DB }   /* ccc=233 */,
-  {     1,  2984,     0,   4,   0, UNI_COPT }   /* copt */,
-  {     1,  8944,     0,   5,   0, UNI_TAKR }   /* takri */,
-  {     8,  8424,  8934,   6,   5, UNI_INRUNIC }   /* block=runic */,
-  {     1,  3964,     0,   9,   0, UNI_LATIN1 }   /* latin1sup */,
-  {     0,  9647,  7614,   3,   2, UNI_NV__17 }   /* nv=17 */,
-  {     1,  9093,  6051,   4,  12, UNI_MAHJONG }   /* blk=mahjongtiles */,
-  {    70,  5760,  8675,  13,   4, UNI_NV__1_SLASH_12 }   /* numericvalue=1/12 */,
-  {     0,  3671,  2169,  17,  11, UNI_MTEI }   /* scriptextensions=meeteimayek */,
-  {     1,  6939,     0,   2,   0, UNI_VS }   /* vs */,
-  {     0,  3398,     3,  18,   1, -UNI_VS }   /* variationselector=f */,
-  {     1,  9049,  7631,   4,   1, UNI_AGE__9 }   /* age=9 */,
-  {     0,  6005,  5896,   3,  11, UNI_CYRILLICEXTC }   /* incyrillicextc */,
-  {     5,  5760,  8394,  13,   4, UNI_NV__8000 }   /* numericvalue=8000 */,
-  {     1,  8424,    43,   7,  15, UNI_CJKCOMPAT }   /* block=cjkcompatibility */,
-  {     0,  7098,     0,  10,   0, UNI_CN }   /* unassigned */,
-  {     8,   184,  2779,   2,  19, UNI_MONGOLIANSUP }   /* ismongoliansupplement */,
-  {     3,  6159,     0,  12,   0, UNI_GONM }   /* masaramgondi */,
-  {     0,  9647,  7612,   3,   8, UNI_NV__5_SLASH_12 }   /* nv=4.17e-01 */,
-  {    48,  9365,  8892,   4,   4, UNI_PHLI }   /* scx=phli */,
-  {     0,  9093,  8093,   4,   7, UNI_INHANUNOO }   /* blk=hanunoo */,
-  {     0,  8424,   250,   6,  33, UNI_MISCMATHSYMBOLSA }   /* block=miscellaneousmathematicalsymbolsa */,
-  {     0,  6005,  1824,   3,  21, UNI_CJKCOMPATIDEOGRAPHSSUP }   /* incjkcompatideographssup */,
-  {     0,  8886,  4220,   3,   6, UNI_TANG }   /* sc=tangut */,
-  {     4,  8598,     0,   5,   0, UNI__PERL_PATWS }   /* patws */,
-  {     0,  9365,  3980,   4,   7, UNI_LINB }   /* scx=linearb */,
-  {     9,   184,  2086,   3,  17, UNI_CYRILLICSUP }   /* iscyrillicsupplement */,
-  {     1,  2708,  7196,   4,   7, UNI_ARABICPFB }   /* inarabicpfb */,
-  {     1,  9093,  6839,   5,   9, UNI_BOXDRAWING }   /* blk=boxdrawing */,
-  {     0,  6723,     0,   4,   0, UNI_SYLO }   /* sylo */,
-  {     6,   184,  4108,   2,   7, UNI_MYMR }   /* ismyanmar */,
-  {     1,  9121,  9433,   4,   4, UNI_CWL }   /* cwl=true */,
-  {     4,  2708,  6800,   4,   8, UNI_ARABICEXTA }   /* inarabicexta */,
-  {     0,  8233,  2741,   7,  19, UNI_MERO }   /* script=meroitichieroglyphs */,
-  {     1,  9605,   435,   4,   2, UNI_DT__ENC }   /* dt=enc */,
-  {     0,  8914,     0,   5,   0, UNI_NSHU }   /* nushu */,
-  {    48,   184,  1867,   2,  22, UNI_DIACRITICALSFORSYMBOLS }   /* isdiacriticalsforsymbols */,
-  {     0,  1482,  6383,   3,  10, UNI_DOMINO }   /* indominotiles */,
-  {     0,  5760,  7614,  13,   2, UNI_NV__17 }   /* numericvalue=17 */,
-  {     0,  7356,     0,   9,   0, UNI_PALM }   /* palmyrene */,
-  {     1,  9647,  8388,   3,   4, UNI_NV__7000 }   /* nv=7000 */,
-  {     0,  1362,  7459,  24,   2, UNI_CCC__21 }   /* canonicalcombiningclass=21 */,
-  {     1,  8879,  2473,   5,  20, UNI_INPC__TOPANDBOTTOMANDRIGHT }   /* inpc=topandbottomandright */,
-  {     0,  8879,  5461,   5,  13, UNI_INPC__BOTTOMANDLEFT }   /* inpc=bottomandleft */,
-  {     1,  9093,  3552,   4,  11, UNI_ETHIOPICEXT }   /* blk=ethiopicext */,
-  {     8,  8219,    36,   7,   1, UNI_PATSYN }   /* patsyn=t */,
-  {     3,  9629,    23,   3,   2, UNI_LB__AL }   /* lb=al */,
-  {     0,   184,  8502,   2,   4, UNI_GOTH }   /* isgoth */,
-  {     0,  8233,  8526,   7,   6, UNI_SC__KTHI }   /* script=kaithi */,
-  {     0,  8586,    17,   7,   1, UNI_COMPEX }   /* nfcqc=no */,
-  {     2,  3951,  3147,   3,  17, UNI_PI }   /* isinitialpunctuation */,
-  {    10,   184,  2931,   3,  10, UNI_CHEROKEESUP }   /* ischerokeesup */,
-  {     2,  4642,    26,  15,   1, UNI_DT__NONE }   /* nfkdquickcheck=y */,
-  {     6,  8550,     0,   6,   0, UNI_LEPC }   /* lepcha */,
-  {     1,  2148,  2837,   3,  18, UNI_SUNDANESESUP }   /* insundanesesupplement */,
-  {     4,  8424,  1188,   6,  26, UNI_KATAKANAEXT }   /* block=katakanaphoneticextensions */,
-  {     0,  4462,     3,  15,   1, -UNI_GREXT }   /* graphemeextend=f */,
-  {     8,  3671,  4108,  17,   7, UNI_MYMR }   /* scriptextensions=myanmar */,
-  {     2,   184,  6602,   2,   4, UNI_NAND }   /* isnand */,
-  {     1,  2106,   125,  21,   2, UNI_LB__CR }   /* graphemeclusterbreak=cr */,
-  {     0,  1159,  4829,   3,   5, UNI_NT__DI }   /* nt=digit */,
-  {     0,  8233,     0,  14,   0, UNI_SC__SHRD }   /* script=sharada */,
-  {     0,  8160,   721,   4,  19, UNI_ENCLOSEDALPHANUM }   /* inenclosedalphanumerics */,
-  {     1,  9093,  2127,   4,  14, UNI_INHANIFIROHINGYA }   /* blk=hanifirohingya */,
-  {    15,  5565,  4060,  13,  16, UNI_JG__MANICHAEANTWENTY }   /* joininggroup=manichaeantwenty */,
-  {    16,  9365,  2741,   4,  19, UNI_MERO }   /* scx=meroitichieroglyphs */,
-  {     8,  2703,     0,  18,   0, UNI_IDST }   /* idstrinaryoperator */,
-  {     7,  8592,     1,   6,   1, UNI_DT__CAN }   /* nfdqc=n */,
-  {     4,  3248,     0,   5,   0, UNI_XPOSIXSPACE }   /* space */,
-  {     7,   112,     0,   2,   0, UNI_SC }   /* sc */,
-  {    17,  9049,  9701,   4,   3, UNI_AGE__5_DOT_2 }   /* age=v52 */,
-  {     1,  1158,  2022,   3,  21, UNI_TRANSPORTANDMAP }   /* intransportandmapsymbols */,
-  {     0,  8233,  8430,   7,   4, UNI_CARI }   /* script=cari */,
-  {     0,  9623,  6778,   3,  10, UNI_JG__AFRICANFEH }   /* jg=africanfeh */,
-  {    24,  8424,  8929,   6,   5, UNI_INOSAGE }   /* block=osage */,
-  {    25,  3868,  1029,  16,   2, UNI_SO }   /* generalcategory=so */,
-  {     0,  4821,     1,  14,   1, -UNI_POSIXXDIGIT }   /* asciihexdigit=n */,
-  {     0,  8424,  2836,   6,  19, UNI_SUNDANESESUP }   /* block=sundanesesupplement */,
-  {    17,  6005,  3519,   3,  16, UNI_CYRILLICEXTB }   /* incyrillicextendedb */,
-  {     0,  8424,  5367,   6,  14, UNI_SUPPUNCTUATION }   /* block=suppunctuation */,
-  {     1,  8424,  8024,   7,   6, UNI_CJKEXTC }   /* block=cjkextc */,
-  {     0,  8617,  9434,   6,   3, UNI_TERM }   /* term=true */,
-  {     4,  3868,   697,  16,   2, UNI_MN }   /* generalcategory=mn */,
-  {     0,  8871,  1129,   3,   2, UNI_SB__ST }   /* sb=st */,
-  {     0,  5760,  7462,  13,   1, UNI_NV__4 }   /* numericvalue=4 */,
-  {     0,  7257,     0,   9,   0, UNI_LATINEXTB }   /* latinextb */,
-  {     0,  1362,  9536,  24,   3, UNI_CCC__AR }   /* canonicalcombiningclass=232 */,
-  {     0,  8879,  8227,   3,   6, UNI_INPHAGSPA }   /* inphagspa */,
-  {     2,  7025,  9587,   3,   3, UNI_IN__9 }   /* in=9.0 */,
-  {     1,  9365,  3110,   4,   8, UNI_GEOR }   /* scx=georgian */,
-  {     1,  9365,  3020,   4,  10, UNI_DEVA }   /* scx=devanagari */,
-  {     0,  9365,  7804,   4,   8, UNI_BUGI }   /* scx=buginese */,
-  {    17,  8233,  6724,   8,   3, UNI_SC__SYLO }   /* script=sylo */,
-  {     0,  9365,  7248,   4,   9, UNI_SIND }   /* scx=khudawadi */,
-  {     0,   184,  4297,   2,   7, UNI_BRAI }   /* isbraille */,
-  {    14,  5760,  9033,  13,   3, UNI_NV__3_SLASH_8 }   /* numericvalue=3/8 */,
-  {    24,   184,  2065,   3,  20, UNI_CJKRADICALSSUP }   /* iscjkradicalssupplement */,
-  {     1,  1497,  5255,   9,  14, UNI_MN }   /* category=nonspacingmark */,
-  {     9,  9049,  7436,   4,   3, UNI_IN__1_DOT_1 }   /* age=1.1 */,
-  {     1,  7128,  5967,  10,  12, UNI_LB__HL }   /* wordbreak=hebrewletter */,
-  {     2,  9647,  8669,   3,   4, UNI_NV__1_SLASH_32 }   /* nv=1/32 */,
-  {     0,  9197,     0,   4,   0, UNI_KALI }   /* kali */,
-  {     0,  2106,  5346,  21,   2, UNI_WB__EB }   /* graphemeclusterbreak=eb */,
-  {     1,  5513,    26,  13,   1, UNI_GRBASE }   /* graphemebase=y */,
-  {     0,  4705,  8228,   3,   3, UNI_TAGS }   /* istags */,
-  {     0,  8424,  9281,   6,   4, UNI_INNEWA }   /* block=newa */,
-  {     0,  6567,   812,   6,  25, UNI_MISCARROWS }   /* inmiscellaneoussymbolsandarrows */,
-  {     0,  8879,     9,   5,   2, UNI_INPC__NA }   /* inpc=na */,
-  {     0,  8886,  9045,   3,   4, UNI_SC__ADLM }   /* sc=adlm */,
-  {     0,  9201,     0,   4,   0, UNI_KHMR }   /* khmr */,
-  {     0,  3671,  9325,  17,   4, UNI_MIAO }   /* scriptextensions=plrd */,
-  {     2,  8418,     1,   6,   1, -UNI_BIDIM }   /* bidim=n */,
-  {    89,  8580,  9433,   6,   4, UNI__PERL_NCHAR }   /* nchar=true */,
-  {     0,  9909,  6917,   3,   3, UNI_PHLI }   /* isphli */,
-  {     0,  8879,   838,   3,  17, UNI_PHONETICEXT }   /* inphoneticextensions */,
-  {     3,  1482,  4419,   4,  13, UNI_DIACRITICALSEXT }   /* indiacriticalsext */,
-  {     8,   184,  4080,   2,  10, UNI_SM }   /* ismathsymbol */,
-  {     0,  3671,  8289,  17,   7, UNI_LANA }   /* scriptextensions=taitham */,
-  {     0,  8160,  1005,   4,  25, UNI_ENCLOSEDCJK }   /* inenclosedcjklettersandmonths */,
-  {     0,  9113,  9542,   4,   3, UNI_CCC__DA }   /* ccc=234 */,
-  {     0,  8424,  8939,   6,   5, UNI_INTAILE }   /* block=taile */,
-  {     3,  9647,  9557,   3,   3, UNI_NV__3_SLASH_5 }   /* nv=3/5 */,
-  {     0,  9093,  3467,   4,  17, UNI_INCAUCASIANALBANIAN }   /* blk=caucasianalbanian */,
-  {     7,  7128,    73,  10,   2, UNI_WB__EB }   /* wordbreak=em */,
-  {     2,  8886,  9453,   3,   4, UNI_VAI }   /* sc=vaii */,
-  {   134,  9901,    96,   8,   5, UNI_XPOSIXALPHA }   /* isxposixalpha */,
-  {     0,  8884,  6219,   5,  12, UNI_INSC__NUMBERJOINER }   /* insc=numberjoiner */,
-  {    18,  8886,  7860,   3,   4, UNI_SC__HIRA }   /* sc=hira */,
-  {     0,  3981,  1892,   5,  19, UNI_EARLYDYNASTICCUNEIFORM }   /* inearlydynasticcuneiform */,
-  {     0,  8886,  8652,   3,   6, UNI_WCHO }   /* sc=wancho */,
-  {     0,  9153,  1057,   4,   7, UNI_GCB__PP }   /* gcb=prepend */,
-  {     1,   184,  6808,   2,  10, UNI_ASCII }   /* isbasiclatin */,
-  {     0,  7025,  7495,   3,   1, UNI_IN__7 }   /* in=7 */,
-  {     0,  9659,     1,   3,   1, -UNI_RI }   /* ri=n */,
-  {     1,  8884,  2293,   5,  20, UNI_INSC__CONSONANTPLACEHOLDER }   /* insc=consonantplaceholder */,
-  {     0,  3671,  2532,  17,   4, UNI_BRAH }   /* scriptextensions=brah */,
-  {     0,  9365,  4582,   4,  15, UNI_MERC }   /* scx=meroiticcursive */,
-  {     1,  9608,  7176,   3,   9, UNI_EA__A }   /* ea=ambiguous */,
-  {     1,  6679,  9433,  11,   4, UNI_SD }   /* softdotted=true */,
-  {    14,  1084,     0,  26,   0, UNI_cwkcf_values_index }   /* changeswhennfkccasefolded= */,
-  {     8,  9629,   878,   3,   2, UNI_LB__PR }   /* lb=pr */,
-  {     6,  1924,     7,  10,   1, UNI_CASEDLETTER }   /* category=lc */,
-  {    13,  8886,  9349,   3,   4, UNI_SC__ROHG }   /* sc=rohg */,
-  {     1,  1599,     0,  23,   0, UNI_COMPATJAMO }   /* hangulcompatibilityjamo */,
-  {     4,  9093,   148,   4,  35, UNI_DIACRITICALSSUP }   /* blk=combiningdiacriticalmarkssupplement */,
-  {     2,  9093,  7118,   4,  10, UNI_INWARANGCITI }   /* blk=warangciti */,
-  {     1,  4705,  4733,   3,  14, UNI_TITLE }   /* istitlecaseletter */,
-  {     0,  8640,     3,   6,   1, -UNI_XPOSIXUPPER }   /* upper=f */,
-  {    14,  1362,  7683,  24,   2, UNI_CCC__26 }   /* canonicalcombiningclass=26 */,
-  {    16,  9093,  2760,   4,  19, UNI_MODIFIERTONELETTERS }   /* blk=modifiertoneletters */,
-  {     1,  1977,    26,  22,   1, UNI__PERL_NCHAR }   /* noncharactercodepoint=y */,
-  {     1,  8233,  2127,   7,   4, UNI_SC__HAN }   /* script=hani */,
-  {     0,  3671,  9209,  17,   4, UNI_KTHI }   /* scriptextensions=kthi */,
-  {     1,   184,  5526,   2,  13, UNI_GREEKEXT }   /* isgreekextended */,
-  {     1,  4267,     0,   5,   0, UNI_BAMU }   /* bamum */,
-  {     7,  3688,  8864,  17,   5, -UNI_STERM }   /* sentenceterminal=false */,
-  {     1,  9093,   659,   4,  30, UNI_CJKEXTF }   /* blk=cjkunifiedideographsextensionf */,
-  {     0,  9093,  4076,   4,  16, UNI_MISCMATHSYMBOLSA }   /* blk=miscmathsymbolsa */,
-  {     0,  1362,  6481,  24,  11, UNI_CCC__8 }   /* canonicalcombiningclass=kanavoicing */,
-  {     0,  8233,  1622,   7,   5, UNI_SC__LATN }   /* script=latin */,
-  {     2,  9647,  7462,   3,   1, UNI_NV__4 }   /* nv=4 */,
-  {     7,  3671,  7365,  17,   9, UNI_PAUC }   /* scriptextensions=paucinhau */,
-  {     0,  9153,  3254,   4,  17, UNI_RI }   /* gcb=regionalindicator */,
-  {     1,  6828,  3074,  10,  18, UNI_BC__FSI }   /* bidiclass=firststrongisolate */,
-  {     3,  3671,  9489,  17,   4, UNI_ZYYY }   /* scriptextensions=zyyy */,
-  {     0,  8886,  9297,   3,   4, UNI_OLCK }   /* sc=olck */,
-  {    20,  4705,  1257,   4,   2, UNI_TELU }   /* istelu */,
-  {     2,  9113,  6404,   4,  11, UNI_CCC__DB }   /* ccc=doublebelow */,
-  {     0,  1159,   495,   3,   2, UNI_NT__NU }   /* nt=nu */,
-  {     0,  9629,  9753,   3,   2, UNI_LB__B2 }   /* lb=b2 */,
-  {     0,  8886,  9489,   3,   4, UNI_SC__ZYYY }   /* sc=zyyy */,
-  {     0,  9125,    26,   4,   1, UNI_CWT }   /* cwt=y */,
-  {     1,  8871,    34,   3,   6, UNI_SB__EX }   /* sb=extend */,
-  {     1,  9605,  1223,   3,   7, UNI_DT__INIT }   /* dt=initial */,
-  {     0,  8424,  3722,   6,  17, UNI_SUTTONSIGNWRITING }   /* block=suttonsignwriting */,
-  {     5,  9365,  9085,   4,   4, UNI_BATK }   /* scx=batk */,
-  {     0,  8879,  6734,   5,  11, UNI_INPC__TOPANDRIGHT }   /* inpc=topandright */,
-  {     0,    21,  8532,   2,   6, UNI_KANBUN }   /* inkanbun */,
-  {     0,  9365,  7956,   4,   4, UNI_TAGB }   /* scx=tagb */,
-  {     4,  3671,  8248,  18,   6, UNI_SHAW }   /* scriptextensions=shavian */,
-  {    17,  6816,  7797,   3,   7, UNI_INBASSAVAH }   /* inbassavah */,
-  {     2,  9405,     0,   4,   0, UNI_TALU }   /* talu */,
-  {     0,  8424,   779,   6,  29, UNI_ENCLOSEDIDEOGRAPHICSUP }   /* block=enclosedideographicsupplement */,
-  {     2,  6767,     0,  11,   0, UNI_YISYLLABLES }   /* yisyllables */,
-  {     0,  7018,  7631,  10,   1, UNI_IN__9 }   /* presentin=9 */,
-  {     0,  7128,  1188,  10,   2, UNI_WB__KA }   /* wordbreak=ka */,
-  {     0,  8508,    36,   6,   1, UNI_GREXT }   /* grext=t */,
-  {     0,  9593,  9638,   3,   3, UNI_BC__LRO }   /* bc=lro */,
-  {     0,   184,  8538,   2,   6, UNI_KHOJ }   /* iskhojki */,
-  {     0,  8424,  8226,   6,   7, UNI_INPHAGSPA }   /* block=phagspa */,
-  {     0,  8128,     0,   4,   0, UNI_MAKA }   /* maka */,
-  {     7,  8879,  6280,   3,  11, UNI_PLAYINGCARDS }   /* inplayingcards */,
-  {     0,  8424,  3620,   6,  10, UNI_INMANICHAEAN }   /* block=manichaean */,
-  {     0,  1497,  2006,   9,  14, UNI_LM }   /* category=modifierletter */,
-  {     1,  3671,  7338,  17,   9, UNI_PERM }   /* scriptextensions=oldpermic */,
-  {     0,  9629,  6848,   3,  10, UNI_LB__BA }   /* lb=breakafter */,
-  {     1,  9365,  7796,   4,   8, UNI_BASS }   /* scx=bassavah */,
-  {     1,  5760,  7507,  13,   2, UNI_NV__12 }   /* numericvalue=12 */,
-  {     0,   184,   382,   2,  32, UNI_EGYPTIANHIEROGLYPHFORMATCONTROLS }   /* isegyptianhieroglyphformatcontrols */,
-  {     0,  3248,     3,   6,   1, -UNI_XPOSIXSPACE }   /* space=f */,
-  {    28,  9731,  7410,   3,   9, UNI_WB__WSEGSPACE }   /* wb=wsegspace */,
-  {     2,  9093,  9261,   4,   3, UNI_INMRO }   /* blk=mro */,
-  {     1,  9049,  7660,   4,   3, UNI_AGE__6 }   /* age=6.0 */,
-  {     1,  9904,  1768,   5,   5, UNI_POSIXLOWER }   /* posixlower */,
-  {     1,  9141,  9433,   4,   4, UNI_DIA }   /* dia=true */,
-  {     2,  8886,  9473,   3,   4, UNI_SC__YI }   /* sc=yiii */,
-  {     0,  8233,  8924,   7,   5, UNI_SC__ORYA }   /* script=oriya */,
-  {    26,  5085,  5619,   4,   7, UNI_INMALAYALAM }   /* inmalayalam */,
-  {     5,  8233,  5311,   7,  14, UNI_SC__PHLP }   /* script=psalterpahlavi */,
-  {    24,  5565,  5115,  13,  14, UNI_JG__MANICHAEANHETH }   /* joininggroup=manichaeanheth */,
-  {     6,  9365,  9209,   4,   4, UNI_KTHI }   /* scx=kthi */,
-  {    51,  2493,  3391,  20,   7, UNI_VO__U }   /* verticalorientation=upright */,
-  {     2,    21,  5003,   2,  14, UNI_LATINEXTB }   /* inlatinextendedb */,
-  {     5,  9093,  7860,   4,   8, UNI_INHIRAGANA }   /* blk=hiragana */,
-  {     2,  9901,  9470,   3,   3, UNI_XSUX }   /* isxsux */,
-  {    18,  8233,  2837,   8,   3, UNI_SUND }   /* script=sund */,
-  {    18,  8886,  7852,   3,   8, UNI_SC__GURU }   /* sc=gurmukhi */,
-  {     3,  3671,  2333,  17,  10, UNI_GLAG }   /* scriptextensions=glagolitic */,
-  {     3,  4462,    26,  15,   1, UNI_GREXT }   /* graphemeextend=y */,
-  {     3,  9623,  5129,   3,  14, UNI_JG__MANICHAEANKAPH }   /* jg=manichaeankaph */,
-  {    14,  5085,  8138,   5,   4, UNI_INMANDAIC }   /* inmandaic */,
-  {     1,  8424,  3326,   6,  11, UNI_TAIXUANJING }   /* block=taixuanjing */,
-  {     6,  9623,  8658,   3,   6, UNI_JG__YUDHHE }   /* jg=yudhhe */,
-  {     1,  8226,     0,   7,   0, UNI_PHAG }   /* phagspa */,
-  {     0,  8424,  8538,   6,   6, UNI_INKHOJKI }   /* block=khojki */,
-  {     1,  9365,  8128,   4,   4, UNI_MAKA }   /* scx=maka */,
-  {     0,  9647,  8989,   3,   4, UNI_NV__1_SLASH_80 }   /* nv=1/80 */,
-  {     0,  8424,  8859,   6,   5, UNI_INDOGRA }   /* block=dogra */,
-  {     2,  3868,  8499,  16,   2, UNI_CF }   /* generalcategory=cf */,
-  {     0,  8424,  5604,   6,  13, UNI_LOWSURROGATES }   /* block=lowsurrogates */,
-  {     1,  7018,  9449,  10,   4, UNI_IN__12_DOT_1 }   /* presentin=v121 */,
-  {     3,  3671,  4792,  17,  15, UNI_ZANB }   /* scriptextensions=zanabazarsquare */,
-  {     0,  8424,  8254,   6,   7, UNI_INSIDDHAM }   /* block=siddham */,
-  {    33,  9093,  6868,   4,  10, UNI_COMPATJAMO }   /* blk=compatjamo */,
-  {     9,  1506,     0,  24,   0, UNI_SUPSYMBOLSANDPICTOGRAPHS }   /* supsymbolsandpictographs */,
-  {    16,  3739,     0,  17,   0, UNI_uideo_values_index }   /* unifiedideograph= */,
-  {     1,  5835,    26,  12,   1, UNI_BIDIC }   /* bidicontrol=y */,
-  {     2,  8424,   283,   6,  33, UNI_MISCMATHSYMBOLSB }   /* block=miscellaneousmathematicalsymbolsb */,
-  {     1,  1362,  8437,  25,   5, UNI_CCC__103 }   /* canonicalcombiningclass=ccc103 */,
-  {     0,  9903,    96,   6,   5, UNI_XPOSIXALPHA }   /* xposixalpha */,
-  {     0,  3243,   995,  11,   2, -UNI_XPOSIXSPACE }   /* whitespace=no */,
-  {     1,  9093,   569,   4,  30, UNI_CJKEXTC }   /* blk=cjkunifiedideographsextensionc */,
-  {     0,  3671,  7980,  17,   4, UNI_UGAR }   /* scriptextensions=ugar */,
-  {   256,  9093,   567,   4,   2, UNI_NB }   /* blk=nb */,
-  {    24,  9093,   749,   4,  30, UNI_SYMBOLSANDPICTOGRAPHSEXTA }   /* blk=symbolsandpictographsextendeda */,
-  {     1,  9365,  9493,   4,   4, UNI_ZZZZ }   /* scx=zzzz */,
-  {     0,  2253,     0,  20,   0, UNI_HLUW }   /* anatolianhieroglyphs */,
-  {     0,   184,  3164,   2,  18, UNI_LATINEXTADDITIONAL }   /* islatinextadditional */,
-  {     1,    21,  5423,   3,  12, UNI_AEGEANNUMBERS }   /* inaegeannumbers */,
-  {     0,  8424,  4108,   6,   7, UNI_INMYANMAR }   /* block=myanmar */,
-  {     0,  6858,     0,  10,   0, UNI_CJKSTROKES }   /* cjkstrokes */,
-  {     2,  8955,     3,   4,   1, -UNI_IDC }   /* idc=f */,
-  {     1,  7025,  9551,   3,   3, UNI_IN__3_DOT_2 }   /* in=3.2 */,
-  {     1,  9647,  7747,   3,   2, UNI_NV__28 }   /* nv=28 */,
-  {     0,  1362,  6207,  24,  12, UNI_CCC__0 }   /* canonicalcombiningclass=notreordered */,
-  {     3,  8233,  3772,   7,   8, UNI_SC__BOPO }   /* script=bopomofo */,
-  {     0,  9365,  9201,   4,   4, UNI_KHMR }   /* scx=khmr */,
-  {     1,  9113,  8780,   5,   4, UNI_CCC__27 }   /* ccc=ccc27 */,
-  {     3,  7964,     0,   8,   0, UNI_TFNG }   /* tifinagh */,
-  {     0,  3128,     0,  18,   0, UNI_idsb_values_index }   /* idsbinaryoperator= */,
-  {     0,  9620,  6635,   3,  11, UNI_SO }   /* gc=othersymbol */,
-  {     1,  4618,  2335,   4,  11, UNI_GLAGOLITICSUP }   /* inglagoliticsup */,
-  {     0,  9317,     0,   4,   0, UNI_PHLP }   /* phlp */,
-  {     0,  5979,  9433,  12,   4, UNI_IDEO }   /* ideographic=true */,
-  {    43,  9153,  9611,   4,   3, UNI_WB__EB }   /* gcb=ebg */,
-  {     2,   184,  7900,   2,   8, UNI_KANAEXTA }   /* iskanaexta */,
-  {     0,  3002,  2493,  18,   4, UNI_DT__VERT }   /* decompositiontype=vert */,
-  {     2,   184,  9277,   2,   4, UNI_NBAT }   /* isnbat */,
-  {     2,  1801,     0,  22,   0, UNI_cwu_values_index }   /* changeswhenuppercased= */,
-  {     0,  1933,  9734,  22,   3, UNI_LOE }   /* logicalorderexception=yes */,
-  {    15,  6382,     0,   6,   0, UNI_DOMINO }   /* domino */,
-  {     0,  5760,  7756,  13,   8, UNI_NV__7_SLASH_8 }   /* numericvalue=8.75e-01 */,
-  {     2,  9946,  6554,   3,   3, UNI_SAMR }   /* issamr */,
-  {     0,  9593,    37,   3,   2, UNI_BC__EN }   /* bc=en */,
-  {     1,  8233,  8093,   7,   7, UNI_SC__HANO }   /* script=hanunoo */,
-  {     0,  6949,   724,   4,   3, UNI_CASED }   /* iscased */,
-  {     4,  9629,    21,   3,   2, UNI_LB__IN }   /* lb=in */,
-  {    11,  8424,   183,   6,  20, UNI_MISCSYMBOLS }   /* block=miscellaneoussymbols */,
-  {     3,  9093,   719,   4,  21, UNI_ENCLOSEDALPHANUM }   /* blk=enclosedalphanumerics */,
-  {     4,  9647,  7492,   3,   8, UNI_NV__1_SLASH_6 }   /* nv=1.67e-01 */,
-  {     3,  9093,  3722,   4,  17, UNI_SUTTONSIGNWRITING }   /* blk=suttonsignwriting */,
-  {    80,  9069,     0,   4,   0, UNI_ARMN }   /* armn */,
-  {     0,  9093,  5895,   4,  12, UNI_CYRILLICEXTC }   /* blk=cyrillicextc */,
-  {     0,  1362,  8790,  25,   4, UNI_CCC__29 }   /* canonicalcombiningclass=ccc29 */,
-  {     1,  1977,     0,  21,   0, UNI__PERL_NCHAR }   /* noncharactercodepoint */,
-  {     0,  5565,  5241,  13,  14, UNI_JG__NOJOININGGROUP }   /* joininggroup=nojoininggroup */,
-  {     4,   184,   749,   2,  30, UNI_SYMBOLSANDPICTOGRAPHSEXTA }   /* issymbolsandpictographsextendeda */,
-  {     0,  1362,  8720,  25,   4, UNI_CCC__15 }   /* canonicalcombiningclass=ccc15 */,
-  {     0,  5513,  9433,  13,   4, UNI_GRBASE }   /* graphemebase=true */,
-  {   113,   184,  9261,   2,   3, UNI_MRO }   /* ismro */,
-  {     1,  4252,     0,  15,   0, UNI_ARABICEXTA }   /* arabicextendeda */,
-  {     1,  4826,  8864,   9,   5, -UNI_XPOSIXXDIGIT }   /* hexdigit=false */,
-  {     0,  9093,  7221,   4,   9, UNI_EMOTICONS }   /* blk=emoticons */,
-  {     4,  5565,     5,  13,   1, UNI_JG__E }   /* joininggroup=e */,
-  {     2,  1497,    17,  10,   1, UNI_SO }   /* category=so */,
-  {     0,  9593,  3608,   3,   3, UNI_BC__RLI }   /* bc=rli */,
-  {     3,  3671,  8121,  17,   7, UNI_LINA }   /* scriptextensions=lineara */,
-  {     0,  2684,     9,  19,   2, UNI_HST__NA }   /* hangulsyllabletype=na */,
-  {     0,  8424,  4717,   6,  15, UNI_TAMILSUP }   /* block=tamilsupplement */,
-  {     8,  1362,  3969,  24,   1, UNI_CCC__1 }   /* canonicalcombiningclass=1 */,
-  {     9,  8886,  2532,   3,   4, UNI_BRAH }   /* sc=brah */,
-  {     1,    32,     0,   2,   0, UNI__PERL_SURROGATE }   /* cs */,
-  {     0,  8424,  1645,   6,  23, UNI_SHORTHANDFORMATCONTROLS }   /* block=shorthandformatcontrols */,
-  {     8,  8160,   781,   4,  27, UNI_ENCLOSEDIDEOGRAPHICSUP }   /* inenclosedideographicsupplement */,
-  {     2,  8886,  9393,   3,   4, UNI_SC__SYRC }   /* sc=syrc */,
-  {    10,  1924,    24,  10,   1, UNI_LOWERCASELETTER }   /* category=ll */,
-  {     0,  9647,  3969,   3,   1, UNI_NV__1 }   /* nv=1 */,
-  {     0,  9093,  3326,   4,  18, UNI_TAIXUANJING }   /* blk=taixuanjingsymbols */,
-  {     0,  8424,  1867,   6,  12, UNI_DIACRITICALS }   /* block=diacriticals */,
-  {     8,   184,  8149,   2,   7, UNI_MULT }   /* ismultani */,
-  {     0,  9620,  5199,   3,  14, UNI_SK }   /* gc=modifiersymbol */,
-  {    24,  2703,  9433,  19,   4, UNI_IDST }   /* idstrinaryoperator=true */,
-  {     1,  8886,  4792,   3,  15, UNI_ZANB }   /* sc=zanabazarsquare */,
-  {     0,  2106,  5258,  21,  11, UNI_GCB__SM }   /* graphemeclusterbreak=spacingmark */,
-  {     4,  5760,  8394,  13,   6, UNI_NV__800000 }   /* numericvalue=800000 */,
-  {    14,  1497,   697,   9,   2, UNI_MN }   /* category=mn */,
-  {     0,  6918,     3,  11,   1, UNI_LB__LF }   /* linebreak=lf */,
-  {     8,  7128,   400,  10,   6, UNI_WB__FO }   /* wordbreak=format */,
-  {     0,  8886,  8142,   3,   7, UNI_MARC }   /* sc=marchen */,
-  {     0,  8424,  1387,   7,   9, UNI_CJKSYMBOLS }   /* block=cjksymbols */,
-  {    16,  9093,  4092,   4,  16, UNI_MISCMATHSYMBOLSB }   /* blk=miscmathsymbolsb */,
-  {     0,  7108,    36,  10,   1, UNI_XPOSIXUPPER }   /* uppercase=t */,
-  {     0,  6567,   187,   6,  16, UNI_MISCSYMBOLS }   /* inmiscellaneoussymbols */,
-  {     0,  5565,  5708,  13,  13, UNI_JG__MANICHAEANWAW }   /* joininggroup=manichaeanwaw */,
-  {     3,  6918,   495,  10,   7, UNI_LB__NU }   /* linebreak=numeric */,
-  {     4,  6808,     0,  10,   0, UNI_ASCII }   /* basiclatin */,
-  {     3,  6338,  9433,  11,   4, UNI_XPOSIXALPHA }   /* alphabetic=true */,
-  {     0,   184,  7812,   2,   4, UNI_DUPL }   /* isdupl */,
-  {    24,  9647,  7676,   3,   8, UNI_NV__1_SLASH_16 }   /* nv=6.25e-02 */,
-  {     0,  9137,  8864,   4,   5, -UNI_DEP }   /* dep=false */,
-  {     1,  8424,  1539,   6,  14, UNI_MUSIC }   /* block=musicalsymbols */,
-  {    40,  5526,     0,   8,   0, UNI_GREEKEXT }   /* greekext */,
-  {     0,  8424,  8485,   7,   5, UNI_INCHAKMA }   /* block=chakma */,
-  {    49,  8640,     0,   6,   0, UNI_upper_values_index }   /* upper= */,
-  {     2,  2021,     0,  22,   0, UNI_TRANSPORTANDMAP }   /* transportandmapsymbols */,
-  {     0,  3002,  1223,  18,   4, UNI_DT__INIT }   /* decompositiontype=init */,
-  {     5,   184,  4762,   2,  15, UNI_VEDICEXT }   /* isvedicextensions */,
-  {     2,  9647,  7764,   3,   8, UNI_NV__11_SLASH_12 }   /* nv=9.17e-01 */,
-  {    13,  8886,  9357,   3,   4, UNI_SAMR }   /* sc=samr */,
-  {     0,  8233,  7365,   7,   9, UNI_PAUC }   /* script=paucinhau */,
-  {     0,  3671,     7,  17,  18, UNI_CANS }   /* scriptextensions=canadianaboriginal */,
-  {     0,  9093,  7805,   5,   7, UNI_INBUGINESE }   /* blk=buginese */,
-  {     1,  4627,     0,  16,   0, UNI_NFKCQC__N }   /* nfkcquickcheck=n */,
-  {     9,  9647,  9751,   3,   2, UNI_NV__49 }   /* nv=49 */,
-  {     1,  9237,   995,   4,   2, -UNI_LOE }   /* loe=no */,
-  {     1,  4705,  9422,   3,   3, UNI_TGLG }   /* istglg */,
-  {     1,  9365,  7341,   4,   4, UNI_PERM }   /* scx=perm */,
-  {    12,  6928,   995,  10,   2, -UNI_XPOSIXLOWER }   /* lowercase=no */,
-  {     1,  7018,  9713,  10,   3, UNI_IN__6_DOT_3 }   /* presentin=v63 */,
-  {     2,  8233,  9261,   7,   4, UNI_MRO }   /* script=mroo */,
-  {     0,  9647,  7763,   3,   2, UNI_NV__19 }   /* nv=19 */,
-  {     1,  9629,   495,   3,   7, UNI_LB__NU }   /* lb=numeric */,
-  {     0,   184,  4989,   2,  14, UNI_KANGXI }   /* iskangxiradicals */,
-  {     1,  9093,   878,   4,  14, UNI_PUA }   /* blk=privateusearea */,
-  {     5,  6918,    73,  10,   2, UNI_LB__EM }   /* linebreak=em */,
-  {     1,  8412,  8864,   6,   5, -UNI_BIDIC }   /* bidic=false */,
-  {    25,  8233,  8550,   7,   6, UNI_LEPC }   /* script=lepcha */,
-  {    16,  3671,  9465,  17,   4, UNI_XPEO }   /* scriptextensions=xpeo */,
-  {     2,  8332,    97,   3,   4, UNI_XPOSIXALPHA }   /* isalpha */,
-  {    55,  3671,  9321,  17,   4, UNI_PHNX }   /* scriptextensions=phnx */,
-  {     0,  9093,  2006,   4,   4, UNI_INMODI }   /* blk=modi */,
-  {     0,  5760,  7435,  13,   2, UNI_NV__11 }   /* numericvalue=11 */,
-  {     0,  9093,  2333,   4,  13, UNI_GLAGOLITICSUP }   /* blk=glagoliticsup */,
-  {     0,  5422,     0,  13,   0, UNI_AEGEANNUMBERS }   /* aegeannumbers */,
-  {     0,  8332,   697,   4,   2, UNI_ARMN }   /* isarmn */,
-  {     0,  9108,     0,   2,   0, UNI_MC }   /* mc */,
-  {     1,  2741,     0,  19,   0, UNI_MERO }   /* meroitichieroglyphs */,
-  {     2,  9593,     0,   4,   0, UNI_BC__B }   /* bc=b */,
-  {     0,  8233,  2484,   7,   4, UNI_SC__MAND }   /* script=mand */,
-  {     3,  8886,  7980,   3,   8, UNI_UGAR }   /* sc=ugaritic */,
-  {     1,  8424,  5734,   6,  13, UNI_MISCTECHNICAL }   /* block=misctechnical */,
-  {     0,   184,  7916,   2,   8, UNI_MAHJ }   /* ismahajani */,
-  {     2,  9365,  9145,   4,   4, UNI_DSRT }   /* scx=dsrt */,
-  {     0,    21,  1622,   2,  14, UNI_LATINEXTA }   /* inlatinextendeda */,
-  {     4,  5967,     0,   6,   0, UNI_HEBR }   /* hebrew */,
-  {     1,  9093,  3416,   4,  10, UNI_ALCHEMICAL }   /* blk=alchemical */,
-  {     1,  3671,  9157,  17,   4, UNI_GONG }   /* scriptextensions=gong */,
-  {     2,  7788,     0,   8,   0, UNI_BALI }   /* balinese */,
-  {     1,  9629,  8100,   3,   6, UNI_LB__HY }   /* lb=hyphen */,
-  {    16,  9353,     0,   4,   0, UNI_RUNR }   /* runr */,
-  {     4,  3671,  9390,  18,   3, UNI_SOGO }   /* scriptextensions=sogo */,
-  {     0,  2085,     0,  21,   0, UNI_CYRILLICSUP }   /* cyrillicsupplementary */,
-  {     1,  9237,     1,   4,   1, -UNI_LOE }   /* loe=n */,
-  {     6,  8424,  1530,   6,  14, UNI_BYZANTINEMUSIC }   /* block=byzantinemusic */,
-  {     0,  4580,  2780,   3,  18, UNI_MONGOLIANSUP }   /* inmongoliansupplement */,
-  {    20,  4220,     0,   6,   0, UNI_TANG }   /* tangut */,
-  {     0,  4580,   989,   3,   4, UNI_MUSIC }   /* inmusic */,
-  {     0,  3671,  2148,  17,  21, UNI_PRTI }   /* scriptextensions=inscriptionalparthian */,
-  {     9,  9623,  5666,   3,   3, UNI_JG__NUN }   /* jg=nun */,
-  {     0,  8424,  7956,   6,   8, UNI_INTAGBANWA }   /* block=tagbanwa */,
-  {     0,  9620,  6624,   3,  11, UNI_NO }   /* gc=othernumber */,
-  {     0,  8424,  7916,   6,   8, UNI_INMAHAJANI }   /* block=mahajani */,
-  {     0,  1136,  9734,  26,   3, UNI_DI }   /* defaultignorablecodepoint=yes */,
-  {     0,  3884,     0,  16,   0, UNI_GEORGIANEXT }   /* georgianextended */,
-  {     0,  8598,     3,   6,   1, -UNI__PERL_PATWS }   /* patws=f */,
-  {     1,  9093,  3884,   4,  16, UNI_GEORGIANEXT }   /* blk=georgianextended */,
-  {     0,  9093,  4268,   5,   4, UNI_INBAMUM }   /* blk=bamum */,
-  {     0,  7338,     0,   9,   0, UNI_PERM }   /* oldpermic */,
-  {    13,  8508,  9734,   6,   3, UNI_GREXT }   /* grext=yes */,
-  {    97,  1497,    38,   9,   2, UNI_XPOSIXDIGIT }   /* category=nd */,
-  {     9,  9647,  7692,   3,   8, UNI_NV__13_SLASH_2 }   /* nv=6.50e+00 */,
-  {    21,  3671,  2532,  17,   6, UNI_BRAH }   /* scriptextensions=brahmi */,
-  {    12,  6371,  9433,  11,   4, UNI_DEP }   /* deprecated=true */,
-  {     0,  4821,    36,  14,   1, UNI_POSIXXDIGIT }   /* asciihexdigit=t */,
-  {     1,  2874,     0,  19,   0, UNI_SUPARROWSB }   /* supplementalarrowsb */,
-  {     8,  9365,  7347,   4,   9, UNI_ORKH }   /* scx=oldturkic */,
-  {     0,   689,     0,  16,   0, UNI_CUNEIFORMNUMBERS }   /* cuneiformnumbers */,
-  {     1,  6828,  4156,  10,  16, UNI_BC__S }   /* bidiclass=segmentseparator */,
-  {     0,  1036,     0,   2,   0, UNI_CASEDLETTER }   /* lc */,
-  {     1,  9113,  8785,   5,   4, UNI_CCC__28 }   /* ccc=ccc28 */,
-  {     0,  3671,    78,  17,   6, UNI_ARAB }   /* scriptextensions=arabic */,
-  {     0,  9647,  5409,   3,   4, UNI_NV__1000 }   /* nv=1000 */,
-  {     1,  5760,  7732,  13,   8, UNI_NV__5_SLASH_6 }   /* numericvalue=8.33e-01 */,
-  {     1,  2646,     0,  10,   0, UNI_JAMO }   /* hanguljamo */,
-  {    20,  8233,  7248,   7,   9, UNI_SC__SIND }   /* script=khudawadi */,
-  {     1,  1757,     3,  22,   1, -UNI_CWL }   /* changeswhenlowercased=f */,
-  {     5,  3671,  9386,  18,   3, UNI_SHRD }   /* scriptextensions=shrd */,
-  {     0,  9731,    73,   3,   2, UNI_WB__EB }   /* wb=em */,
-  {     0,   184,  8128,   2,   7, UNI_MAKA }   /* ismakasar */,
-  {     0,  9647,  7446,   3,   2, UNI_NV__25 }   /* nv=25 */,
-  {     0,  1536,  2609,   3,  18, UNI_INEGYPTIANHIEROGLYPHS }   /* inegyptianhieroglyphs */,
-  {     0,  9093,  7194,   4,   9, UNI_ARABICPFB }   /* blk=arabicpfb */,
-  {     0,  8884,  2313,   5,  20, UNI_INSC__CONSONANTWITHSTACKER }   /* insc=consonantwithstacker */,
-  {     2,  8233,  8226,   7,   7, UNI_SC__PHAG }   /* script=phagspa */,
-  {    14,  9623,  6111,   3,  12, UNI_JG__MALAYALAMNYA }   /* jg=malayalamnya */,
-  {    25,  9365,  9325,   4,   4, UNI_MIAO }   /* scx=plrd */,
-  {     0,  4432,     0,  15,   0, UNI_DIACRITICALSSUP }   /* diacriticalssup */,
-  {     1,    21,  7266,   2,   9, UNI_LATINEXTC }   /* inlatinextc */,
-  {   131,   184,   995,   2,   2, UNI_NO }   /* isno */,
-  {     0,  9647,  8973,   3,   4, UNI_NV__1_SLASH_10 }   /* nv=1/10 */,
-  {     0,  4627,     0,  15,   0, UNI_nfkcqc_values_index }   /* nfkcquickcheck= */,
-  {     0,  6816,  7204,   3,   8, UNI_INBHAIKSUKI }   /* inbhaiksuki */,
-  {     0,  8233,  2930,   7,   4, UNI_CHER }   /* script=cher */,
-  {     0,  3868,  1257,  16,   2, UNI_UPPERCASELETTER }   /* generalcategory=lu */,
-  {    21,   117,  5553,   3,   5, UNI_IPAEXT }   /* inipaext */,
-  {     4,   184,  9767,   2,   2, UNI_CASEDLETTER }   /* isl& */,
-  {     1,  9626,  6470,   3,  11, UNI_JT__C }   /* jt=joincausing */,
-  {     3,  6868,     0,  10,   0, UNI_COMPATJAMO }   /* compatjamo */,
-  {     3,  1362,  8820,  25,   4, UNI_CCC__35 }   /* canonicalcombiningclass=ccc35 */,
-  {     5,  9157,     0,   4,   0, UNI_GONG }   /* gong */,
-  {     0,  7230,  9433,   9,   4, UNI_EXT }   /* extender=true */,
-  {     0,  8959,     1,   5,   1, -UNI_XIDS }   /* xids=n */,
-  {     0,  8884,  1434,   5,  24, UNI_INSC__CONSONANTSUCCEEDINGREPHA }   /* insc=consonantsucceedingrepha */,
-  {     3,  1773,     0,   6,   0, UNI_cased_values_index }   /* cased= */,
-  {     0,  8424,  2646,   6,  10, UNI_JAMO }   /* block=hanguljamo */,
-  {     1,  9365,  4717,   4,   5, UNI_TAML }   /* scx=tamil */,
-  {     8,  1362,  8725,  25,   4, UNI_CCC__16 }   /* canonicalcombiningclass=ccc16 */,
-  {     2,  9620,  8839,   3,   5, UNI_XPOSIXCNTRL }   /* gc=cntrl */,
-  {     0,  8617,     3,   5,   1, -UNI_TERM }   /* term=f */,
-  {    26,  9365,  8303,   4,   7, UNI_TIBT }   /* scx=tibetan */,
-  {     0,  8959,  9734,   5,   3, UNI_XIDS }   /* xids=yes */,
-  {     1,  4447,     3,  15,   1, UNI_EA__F }   /* eastasianwidth=f */,
-  {     0,  8424,  4717,   6,   5, UNI_INTAMIL }   /* block=tamil */,
-  {     0,  5760,  9739,  13,   2, UNI_NV__39 }   /* numericvalue=39 */,
-  {     0,  9365,  9089,   4,   4, UNI_BHKS }   /* scx=bhks */,
-  {    21,  6003,     1,  12,   1, -UNI_JOINC }   /* joincontrol=n */,
-  {     1,  5255,     0,  14,   0, UNI_MN }   /* nonspacingmark */,
-  {     1,  8233,  9157,   7,   4, UNI_SC__GONG }   /* script=gong */,
-  {     2,  2148,  2837,   3,  11, UNI_SUNDANESESUP }   /* insundanesesup */,
-  {     9,  7018,  7463,  10,   1, UNI_IN__3 }   /* presentin=3 */,
-  {     1,  3671,  1573,  17,   4, UNI_PHAG }   /* scriptextensions=phag */,
-  {    11,   184,  2044,   3,  20, UNI_CJKCOMPATFORMS }   /* iscjkcompatibilityforms */,
-  {     2,  3398,   995,  18,   2, -UNI_VS }   /* variationselector=no */,
-  {     2,  9647,  7532,   3,   8, UNI_NV__1_SLASH_40 }   /* nv=2.50e-02 */,
-  {     4,  3671,  3980,  17,   7, UNI_LINB }   /* scriptextensions=linearb */,
-  {    40,  9153,    24,   4,   1, UNI_GCB__L }   /* gcb=l */,
-  {     0,  8886,  6723,   3,  11, UNI_SC__SYLO }   /* sc=sylotinagri */,
-  {     7,  9113,  9771,   4,   2, UNI_CCC__9 }   /* ccc=vr */,
-  {     1,  9113,  1700,   4,   2, UNI_CCC__DB }   /* ccc=db */,
-  {     0,  3254,     0,  18,   0, UNI_ri_values_index }   /* regionalindicator= */,
-  {    16,    47,     0,   1,   0, UNI_M }   /* m */,
-  {    16,  8884,  3948,   5,  16, UNI_INSC__INVISIBLESTACKER }   /* insc=invisiblestacker */,
-  {     0,  9731,  1767,   3,   2, UNI_WB__NL }   /* wb=nl */,
-  {     0,  9365,  2409,   4,   4, UNI_MONG }   /* scx=mong */,
-  {     0,  5565,  4562,  13,   3, UNI_JG__SAD }   /* joininggroup=sad */,
-  {     9,   184,  5955,   2,  12, UNI_GONG }   /* isgunjalagondi */,
-  {     0,  5871,     0,  12,   0, UNI_CYRILLICEXTA }   /* cyrillicexta */,
-  {     1,  1362,  7747,  24,   2, UNI_CCC__28 }   /* canonicalcombiningclass=28 */,
-  {    33,  8303,     0,   7,   0, UNI_TIBT }   /* tibetan */,
-  {     8,  3671,  9057,  17,   4, UNI_AHOM }   /* scriptextensions=ahom */,
-  {     6,   184,   719,   2,  16, UNI_ENCLOSEDALPHANUM }   /* isenclosedalphanum */,
-  {     1,  8424,  8944,   6,   5, UNI_INTAKRI }   /* block=takri */,
-  {     3,  9909,  8839,   7,   5, UNI_POSIXCNTRL }   /* isposixcntrl */,
-  {     1,  9365,  3110,   4,   4, UNI_GEOR }   /* scx=geor */,
-  {     2,    18,     0,   2,   0, UNI_RI }   /* ri */,
-  {     1,  8163,  8904,   7,   5, UNI_NFCQC__M }   /* nfkcqc=maybe */,
-  {     8,  3002,  3308,  18,   5, UNI_DT__SML }   /* decompositiontype=small */,
-  {    24,  7230,    26,   9,   1, UNI_EXT }   /* extender=y */,
-  {     0,  8556,  8864,   6,   5, -UNI_XPOSIXLOWER }   /* lower=false */,
-  {     0,  8233,  8303,   7,   7, UNI_TIBT }   /* script=tibetan */,
-  {     5,  4705,  1791,   3,   4, UNI_TITLE }   /* istitle */,
-  {    13,  8886,     0,   3,   0, UNI_sc_values_index }   /* sc= */,
-  {     0,  6015,  6514,  12,  11, UNI_JT__L }   /* joiningtype=leftjoining */,
-  {     3,  8051,     1,   7,   1, -UNI_COMPEX }   /* compex=n */,
-  {     0,  9623,  5181,   3,   4, UNI_JG__TETH }   /* jg=teth */,
-  {     1,  9659,  9734,   3,   3, UNI_RI }   /* ri=yes */,
-  {     9,  4705,  2022,   3,  14, UNI_TRANSPORTANDMAP }   /* istransportandmap */,
-  {     1,  3671,  7772,  17,   8, UNI_ARMN }   /* scriptextensions=armenian */,
-  {     2,  4627,    47,  15,   1, UNI_NFCQC__M }   /* nfkcquickcheck=m */,
-  {     2,  1924,  5592,  10,  12, UNI_ZL }   /* category=lineseparator */,
-  {     6,  1362,  2920,  24,  10, UNI_CCC__AR }   /* canonicalcombiningclass=aboveright */,
-  {     8,  6828,  3243,  10,  10, UNI_BC__WS }   /* bidiclass=whitespace */,
-  {     1,  6828,  6255,  10,  12, UNI_BC__ON }   /* bidiclass=otherneutral */,
-  {    33,  4778,  8318,   3,   6, UNI_UCASEXT }   /* isucasext */,
-  {     2,  9623,  2561,   3,   9, UNI_JG__YEHBARREE }   /* jg=yehbarree */,
-  {     0,  9365,  4267,   4,   5, UNI_BAMU }   /* scx=bamum */,
-  {    26,  8424,  7338,   6,   9, UNI_INOLDPERMIC }   /* block=oldpermic */,
-  {     0,  1911,  7028,  22,  10, UNI_INSC__PUREKILLER }   /* indicsyllabiccategory=purekiller */,
-  {     0,   184,  3110,   2,   8, UNI_GEOR }   /* isgeorgian */,
-  {    18,  3868,  9767,  16,   2, UNI_CASEDLETTER }   /* generalcategory=l& */,
-  {    10,  2211,     0,   7,   0, UNI_SINH }   /* sinhala */,
-  {     0,  3868,  5353,  16,  14, UNI_ZS }   /* generalcategory=spaceseparator */,
-  {     2,  9093,  2836,   4,   9, UNI_INSUNDANESE }   /* blk=sundanese */,
-  {     0,  8233,  8065,   7,   7, UNI_ELBA }   /* script=elbasan */,
-  {     3,  8886,  8072,   3,   4, UNI_ELYM }   /* sc=elym */,
-  {     0,  9623,  9381,   3,   4, UNI_JG__SHIN }   /* jg=shin */,
-  {     1,  9049,     0,   4,   0, UNI_age_values_index }   /* age= */,
-  {     3,  8869,    36,   5,   1, UNI_IDSB }   /* idsb=t */,
-  {     2,  8879,  3344,   5,  18, UNI_INPC__TOPANDLEFTANDRIGHT }   /* inpc=topandleftandright */,
-  {     6,  3951,    59,   3,   3, UNI_IDEO }   /* isideo */,
-  {     0,   184,  8845,   3,   3, UNI_CWCF }   /* iscwcf */,
-  {     0,  3671,  9409,  17,   4, UNI_TAML }   /* scriptextensions=taml */,
-  {     0,  9093,  3450,   4,  17, UNI_UCAS }   /* blk=canadiansyllabics */,
-  {     1,  8233,  8142,   7,   4, UNI_MARC }   /* script=marc */,
-  {     1,  5565,  5087,  13,  14, UNI_JG__MANICHAEANBETH }   /* joininggroup=manichaeanbeth */,
-  {     0,  6371,  8864,  11,   5, -UNI_DEP }   /* deprecated=false */,
-  {    17,  9593,  9632,   3,   3, UNI_BC__LRE }   /* bc=lre */,
-  {    26,  1757,     0,  21,   0, UNI_CWL }   /* changeswhenlowercased */,
-  {     0,  1773,     1,   6,   1, -UNI_CASED }   /* cased=n */,
-  {    48,  8424,  3290,   6,  18, UNI_RUMI }   /* block=ruminumeralsymbols */,
-  {     0,  3868,    45,  16,   2, UNI_CO }   /* generalcategory=co */,
-  {     3,  7804,     0,   4,   0, UNI_BUGI }   /* bugi */,
-  {     0,  9731,   138,   3,   2, UNI_WB__FO }   /* wb=fo */,
-  {     0,  9647,  9560,   3,   3, UNI_NV__4_SLASH_5 }   /* nv=4/5 */,
-  {     3,  4204,     0,   9,   0, UNI_SYRIACSUP }   /* syriacsup */,
-  {   139,  8886,  5311,   3,  14, UNI_SC__PHLP }   /* sc=psalterpahlavi */,
-  {    36,  9365,  9409,   4,   4, UNI_TAML }   /* scx=taml */,
-  {     3,  9049,  9449,   4,   4, UNI_AGE__12_DOT_1 }   /* age=v121 */,
-  {     9,  8332,    80,   4,   8, UNI_ARABICMATH }   /* isarabicmath */,
-  {     1,  8955,     0,   4,   0, UNI_idc_values_index }   /* idc= */,
-  {     1,  6267,     0,   8,   0, UNI_PHAISTOS }   /* phaistos */,
-  {     0,  1773,  8864,   6,   5, -UNI_CASED }   /* cased=false */,
-  {     0,  8886,  6558,   3,  11, UNI_MEDF }   /* sc=medefaidrin */,
-  {     1,  8496,  9734,   6,   3, UNI_CWKCF }   /* cwkcf=yes */,
-  {    24,  7128,  4645,  10,   2, UNI_WB__DQ }   /* wordbreak=dq */,
-  {     0,  8424,  7058,   6,  10, UNI_SMALLFORMS }   /* block=smallforms */,
-  {    12,  1482,  2473,  24,   3, UNI_INPC__TOP }   /* indicpositionalcategory=top */,
-  {     0,  9647,  5409,   3,   9, UNI_NV__100000000 }   /* nv=100000000 */,
-  {     2,  6885,  3933,   3,  15, UNI_HIGHPUSURROGATES }   /* ishighpusurrogates */,
-  {     3,  3671,  9493,  17,   4, UNI_ZZZZ }   /* scriptextensions=zzzz */,
-  {     3,  8556,     1,   6,   1, -UNI_XPOSIXLOWER }   /* lower=n */,
-  {     0,  8100,   995,   7,   2, -UNI_HYPHEN }   /* hyphen=no */,
-  {     0,  2204,  6625,   3,  10, UNI_NO }   /* isothernumber */,
-  {     0,  2204,  7340,   4,   7, UNI_PERM }   /* isoldpermic */,
-  {     6,   184,  6039,   2,  12, UNI_NL }   /* isletternumber */,
-  {    31,  5339,  8694,  14,   5, UNI_SB__AT }   /* sentencebreak=aterm */,
-  {     0,  6828,  2433,  10,  20, UNI_BC__RLE }   /* bidiclass=righttoleftembedding */,
-  {     0,  3243,  9433,  11,   4, UNI_XPOSIXSPACE }   /* whitespace=true */,
-  {    16,  6918,  1767,  10,   2, UNI_LB__NL }   /* linebreak=nl */,
-  {    10,   117,  3588,   4,  15, UNI_INDICSIYAQNUMBERS }   /* inindicsiyaqnumbers */,
-  {     1,  1362,  8909,  24,   5, UNI_CCC__7 }   /* canonicalcombiningclass=nukta */,
-  {    21,  8424,  1824,   7,  18, UNI_CJKCOMPATIDEOGRAPHS }   /* block=cjkcompatideographs */,
-  {     0,  9049,  9548,   4,   3, UNI_AGE__3 }   /* age=3.0 */,
-  {     2,  8496,  9433,   6,   4, UNI_CWKCF }   /* cwkcf=true */,
-  {     0,  9093,  7956,   4,   8, UNI_INTAGBANWA }   /* blk=tagbanwa */,
-  {    28,  1812,     0,   5,   0, UNI_XPOSIXUPPER }   /* upper */,
-  {     1,  2204,  4674,   4,  13, UNI_SARB }   /* isoldsoutharabian */,
-  {    16,  8233,  8610,   7,   6, UNI_RJNG }   /* script=rejang */,
-  {     0,  8424,  6859,   7,   9, UNI_CJKSTROKES }   /* block=cjkstrokes */,
-  {    35,  4580,     0,  17,   0, UNI_INMEROITICCURSIVE }   /* inmeroiticcursive */,
-  {     5,  9593,   102,   3,   2, UNI_BC__ET }   /* bc=et */,
-  {     0,  7420,     3,   8,   1, -UNI_IDS }   /* idstart=f */,
-  {     1,  8884,  4702,   5,  15, UNI_INSC__REGISTERSHIFTER }   /* insc=registershifter */,
-  {     0,  9647,  9572,   3,   3, UNI_NV__5_SLASH_8 }   /* nv=5/8 */,
-  {    65,  8886,  8484,   3,   6, UNI_SC__CAKM }   /* sc=chakma */,
-  {     0,  7018,  9704,  10,   3, UNI_IN__6 }   /* presentin=v60 */,
-  {     7,  8424,  2086,   7,  17, UNI_CYRILLICSUP }   /* block=cyrillicsupplement */,
-  {     1,  6371,     0,  11,   0, UNI_dep_values_index }   /* deprecated= */,
-  {     1,  9365,  9301,   4,   4, UNI_ORKH }   /* scx=orkh */,
-  {     5,  1530,     0,  23,   0, UNI_BYZANTINEMUSIC }   /* byzantinemusicalsymbols */,
-  {     0,  9946,  9394,   3,   3, UNI_SYRC }   /* issyrc */,
-  {     0,  9647,  8388,   3,   3, UNI_NV__700 }   /* nv=700 */,
-  {     5,   184,  4267,   2,  15, UNI_BAMUMSUP }   /* isbamumsupplement */,
-  {     4,  9113,  8740,   5,   4, UNI_CCC__19 }   /* ccc=ccc19 */,
-  {     3,  3736,  7846,   4,   6, UNI_INGUJARATI }   /* ingujarati */,
-  {     0,  9901,  5492,   8,   5, UNI_XPOSIXALNUM }   /* isxposixalnum */,
-  {     0,  9647,  7539,   3,   2, UNI_NV__22 }   /* nv=22 */,
-  {     0,   184,  2484,   2,   4, UNI_MAND }   /* ismand */,
-  {     0,  3002,  8490,  18,   6, UNI_DT__ENC }   /* decompositiontype=circle */,
-  {     0,  5565,  6120,  13,   3, UNI_JG__NYA }   /* joininggroup=nya */,
-  {     2,  9365,  8709,   4,   5, UNI_BUHD }   /* scx=buhid */,
-  {     1,  9113,  8815,   5,   4, UNI_CCC__34 }   /* ccc=ccc34 */,
-  {     2,  8424,  2211,   6,  21, UNI_SINHALAARCHAICNUMBERS }   /* block=sinhalaarchaicnumbers */,
-  {     1,  8886,  4582,   3,  15, UNI_MERC }   /* sc=meroiticcursive */,
-  {     4,   184,   921,   2,  28, UNI_VSSUP }   /* isvariationselectorssupplement */,
-  {    26,  1362,  8805,  25,   4, UNI_CCC__32 }   /* canonicalcombiningclass=ccc32 */,
-  {     4,   184,  6690,   2,  11, UNI_SORA }   /* issorasompeng */,
-  {    18,  8520,  8864,   6,   5, -UNI_JOINC }   /* joinc=false */,
-  {     0,  7018,  8993,  10,   4, UNI_IN__10 }   /* presentin=10.0 */,
-  {     1,  8886,  7365,   3,   9, UNI_PAUC }   /* sc=paucinhau */,
-  {    40,  6768,  6768,   3,  10, UNI_YISYLLABLES }   /* isyisyllables */,
-  {     0,  6315,     1,  12,   1, -UNI_XIDC }   /* xidcontinue=n */,
-  {    37,  1158,  3327,   3,  17, UNI_TAIXUANJING }   /* intaixuanjingsymbols */,
-  {    34,   184,  8568,   2,   6, UNI_LYDI }   /* islydian */,
-  {     1,  9629,    58,   3,   2, UNI_LB__ID }   /* lb=id */,
-  {    13,    57,     0,   2,   0, UNI_YI }   /* yi */,
-  {     1,  8849,    26,   5,   1, UNI_CWCM }   /* cwcm=y */,
-  {     3,  9647,  7580,   3,   8, UNI_NV__7_SLASH_2 }   /* nv=3.50e+00 */,
-  {     1,   184,  5860,   3,  11, UNI_CHESSSYMBOLS }   /* ischesssymbols */,
-  {     0,  8424,  2957,   6,   9, UNI_HALFMARKS }   /* block=halfmarks */,
-  {     1,  1362,  8467,  25,   4, UNI_CCC__13 }   /* canonicalcombiningclass=ccc13 */,
-  {     5,  8884,  4919,   5,  14, UNI_INSC__GEMINATIONMARK }   /* insc=geminationmark */,
-  {   178,  1450,  3662,   4,   5, UNI_INGRANTHA }   /* ingrantha */,
-  {     1,  8233,  7852,   7,   8, UNI_SC__GURU }   /* script=gurmukhi */,
-  {     0,  8163,  9734,   7,   3, UNI_NFKCQC__Y }   /* nfkcqc=yes */,
-  {     3,  8233,  3729,   8,  10, UNI_SGNW }   /* script=signwriting */,
-  {     2,  8886,  8502,   3,   6, UNI_GOTH }   /* sc=gothic */,
-  {     0,  1239,     0,  25,   0, UNI_compex_values_index }   /* fullcompositionexclusion= */,
-  {     0,   184,  1141,   2,   2, UNI_TITLE }   /* islt */,
-  {    17,  3951,  3129,   3,   3, UNI_IDSB }   /* isidsb */,
-  {    16,  8635,     1,   5,   1, -UNI_IDEO }   /* ideo=n */,
-  {     0,  4447,     8,  15,   1, UNI_EA__A }   /* eastasianwidth=a */,
-  {     1,  9230,  5450,   4,  11, UNI_BLOCKELEMENTS }   /* inblockelements */,
-  {     0,  8338,     0,   7,   0, UNI_wspace_values_index }   /* wspace= */,
-  {    21,  1911,  4140,  22,   5, UNI_INSC__OTHER }   /* indicsyllabiccategory=other */,
-  {     1,  1362,  8830,  25,   4, UNI_CCC__84 }   /* canonicalcombiningclass=ccc84 */,
-  {    82,  8886,  8944,   3,   4, UNI_SC__TAKR }   /* sc=takr */,
-  {     8,  9659,  9433,   3,   4, UNI_RI }   /* ri=true */,
-  {     0,  8886,  4204,   3,   6, UNI_SC__SYRC }   /* sc=syriac */,
-  {     4,  1539,     0,  14,   0, UNI_MUSIC }   /* musicalsymbols */,
-  {     1,  8844,   995,   5,   2, -UNI_CWCF }   /* cwcf=no */,
-  {     0,   978,     0,   2,   0, UNI_CI }   /* ci */,
-  {     2,  6918,    23,  10,   2, UNI_LB__AL }   /* linebreak=al */,
-  {     0,  8949,     0,   5,   0, UNI_VSSUP }   /* vssup */,
-  {     0,  3671,  3620,  17,  10, UNI_MANI }   /* scriptextensions=manichaean */,
-  {     4,  9113,   726,   4,   2, UNI_CCC__DA }   /* ccc=da */,
-  {     0,   921,     0,  17,   0, UNI_VS }   /* variationselector */,
-  {     2,  9365,  6027,   4,   5, UNI_KHMR }   /* scx=khmer */,
-  {     1,  9647,  5409,   3,  13, UNI_NV__1000000000000 }   /* nv=1000000000000 */,
-  {     1,  8233,  9257,   7,   4, UNI_SC__MLYM }   /* script=mlym */,
-  {     0,  9113,  9515,   4,   3, UNI_CCC__214 }   /* ccc=214 */,
-  {     9,   184,  7796,   2,   8, UNI_BASS }   /* isbassavah */,
-  {     0,  8233,  7049,   8,   3, UNI_SAUR }   /* script=saur */,
-  {     3,     0,     0,  34,   0, UNI_UCAS }   /* unifiedcanadianaboriginalsyllabics */,
-  {     0,  9620,  1187,   3,   2, UNI_SK }   /* gc=sk */,
-  {     1,  7018,  7612,  10,   3, UNI_IN__4_DOT_1 }   /* presentin=4.1 */,
-  {     0,   184,  4829,   2,   5, UNI_XPOSIXDIGIT }   /* isdigit */,
-  {    32,  8233,  4220,   7,   6, UNI_TANG }   /* script=tangut */,
-  {    13,  9093,    42,   4,  36, UNI_CJKCOMPATIDEOGRAPHSSUP }   /* blk=cjkcompatibilityideographssupplement */,
-  {     1,   184,  6051,   2,  12, UNI_MAHJONG }   /* ismahjongtiles */,
-  {    77,  8424,  5552,   6,  13, UNI_IPAEXT }   /* block=ipaextensions */,
-  {     0,  6928,    26,  10,   1, UNI_XPOSIXLOWER }   /* lowercase=y */,
-  {     0,  7108,    26,  10,   1, UNI_XPOSIXUPPER }   /* uppercase=y */,
-  {    32,  1779,    26,  22,   1, UNI_CWT }   /* changeswhentitlecased=y */,
-  {     0,   184,   837,   2,  18, UNI_PHONETICEXT }   /* isphoneticextensions */,
-  {     2,  5565,  7828,  13,   8, UNI_JG__FARSIYEH }   /* joininggroup=farsiyeh */,
-  {    32,   184,  8135,   2,   7, UNI_MAND }   /* ismandaic */,
-  {    98,  5760,  8985,  13,   4, UNI_NV__1_SLASH_64 }   /* numericvalue=1/64 */,
-  {    83,  8424,  9425,   6,   4, UNI_INTHAI }   /* block=thai */,
-  {     1,  8424,  9650,   6,   3, UNI_OCR }   /* block=ocr */,
-  {     0,  9049,  9683,   4,   3, UNI_AGE__3_DOT_1 }   /* age=v31 */,
-  {     6,  1482,  1869,   4,  10, UNI_DIACRITICALS }   /* indiacriticals */,
-  {    16,  9365,  7356,   4,   4, UNI_PALM }   /* scx=palm */,
-  {   142,  9141,     3,   4,   1, -UNI_DIA }   /* dia=f */,
-  {     0,  3868,  4747,  16,  15, UNI_UPPERCASELETTER }   /* generalcategory=uppercaseletter */,
-  {     4,  1911,  6225,  22,   6, UNI_LB__ZWJ }   /* indicsyllabiccategory=joiner */,
-  {     0,   184,  3020,   2,  13, UNI_DEVANAGARIEXT }   /* isdevanagariext */,
-  {    19,  8430,     0,   6,   0, UNI_CARI }   /* carian */,
-  {     0,  9365,  8002,   4,   7, UNI_BENG }   /* scx=bengali */,
-  {     9,  9093,  2232,   4,  21, UNI_YIJING }   /* blk=yijinghexagramsymbols */,
-  {    92,  9647,  9033,   3,   3, UNI_NV__3_SLASH_8 }   /* nv=3/8 */,
-  {     0,  9647,  8382,   3,   5, UNI_NV__60000 }   /* nv=60000 */,
-  {     0,  6885,     8,   3,   2, UNI_HAN }   /* ishan */,
-  {     0,  8879,     0,   5,   0, UNI_inpc_values_index }   /* inpc= */,
-  {     0,  5565,  4044,  13,  16, UNI_JG__MANICHAEANSAMEKH }   /* joininggroup=manichaeansamekh */,
-  {     4,  8580,     3,   6,   1, -UNI__PERL_NCHAR }   /* nchar=f */,
-  {     8,  8424,  4417,   6,  15, UNI_DIACRITICALSEXT }   /* block=diacriticalsext */,
-  {     0,  2106,  9611,  21,   3, UNI_WB__EB }   /* graphemeclusterbreak=ebg */,
-  {     6,  7128,  7284,  10,   9, UNI_WB__ML }   /* wordbreak=midletter */,
-  {     2,   184,  3243,   2,  10, UNI_XPOSIXSPACE }   /* iswhitespace */,
-  {     1,  8086,    36,   7,   1, UNI_GRBASE }   /* grbase=t */,
-  {     1,  3671,  9485,  17,   4, UNI_QAAI }   /* scriptextensions=zinh */,
-  {     0,  1362,  2373,  24,   4, UNI_CCC__L }   /* canonicalcombiningclass=left */,
-  {     0,  8424,  1411,   7,  23, UNI_DIACRITICALSFORSYMBOLS }   /* block=combiningmarksforsymbols */,
-  {     0,  6472,  3716,   4,   4, UNI_INCARIAN }   /* incarian */,
-  {     4,   184,   719,   2,  21, UNI_ENCLOSEDALPHANUM }   /* isenclosedalphanumerics */,
-  {     3,  2204,  6245,   4,  10, UNI_HUNG }   /* isoldhungarian */,
-  {     0,  8869,    26,   5,   1, UNI_IDSB }   /* idsb=y */,
-  {     1,  6885,  2958,   3,   8, UNI_HALFMARKS }   /* ishalfmarks */,
-  {    36,  6918,    96,  10,  10, UNI_LB__AL }   /* linebreak=alphabetic */,
-  {    64,  7852,     0,   8,   0, UNI_GURU }   /* gurmukhi */,
-  {     0,  6816,  4268,   3,   4, UNI_INBAMUM }   /* inbamum */,
-  {    29,  8839,     0,   5,   0, UNI_XPOSIXCNTRL }   /* cntrl */,
-  {     0,  8424,  5552,   6,   6, UNI_IPAEXT }   /* block=ipaext */,
-  {     0,  9629,  7909,   4,   7, UNI_LB__LF }   /* lb=linefeed */,
-  {     0,  9093,  7204,   5,   8, UNI_INBHAIKSUKI }   /* blk=bhaiksuki */,
-  {     0,   184,  4267,   2,   5, UNI_BAMU }   /* isbamum */,
-  {     2,  2684,  6503,  19,  11, UNI_GCB__L }   /* hangulsyllabletype=leadingjamo */,
-  {     0,  9620,  4402,   3,  15, UNI_PD }   /* gc=dashpunctuation */,
-  {    11,    74,     0,   2,   0, UNI_ME }   /* me */,
-  {     3,  9623,  5101,   3,  14, UNI_JG__MANICHAEANFIVE }   /* jg=manichaeanfive */,
-  {     1,  8886,  9289,   3,   4, UNI_NSHU }   /* sc=nshu */,
-  {     1,  2204,  8930,   3,   4, UNI_OSGE }   /* isosage */,
-  {    16,  3868,  6039,  16,  12, UNI_NL }   /* generalcategory=letternumber */,
-  {    20,  3671,  9349,  17,   4, UNI_ROHG }   /* scriptextensions=rohg */,
-  {     2,   184,   114,   3,  34, UNI_DIACRITICALSFORSYMBOLS }   /* iscombiningdiacriticalmarksforsymbols */,
-  {     1,   184,  9257,   2,   4, UNI_MLYM }   /* ismlym */,
-  {     0,  9623,  5617,   3,  13, UNI_JG__MALAYALAMLLLA }   /* jg=malayalamllla */,
-  {     3,  9620,  1472,   3,   9, UNI__PERL_SURROGATE }   /* gc=surrogate */,
-  {    64,  1497,     1,   9,   1, UNI_N }   /* category=n */,
-  {     0,  8424,  4267,   6,   8, UNI_BAMUMSUP }   /* block=bamumsup */,
-  {    28,  2148,  2212,   3,   6, UNI_INSINHALA }   /* insinhala */,
-  {     2,  2333,     0,   4,   0, UNI_GLAG }   /* glag */,
-  {     3,  5339,     5,  15,   1, UNI_SB__SE }   /* sentencebreak=se */,
-  {     1,  8959,   995,   5,   2, -UNI_XIDS }   /* xids=no */,
-  {     0,  8960,     0,   4,   0, UNI_ids_values_index }   /* ids= */,
-  {     1,  9093,  2169,   4,  21, UNI_MEETEIMAYEKEXT }   /* blk=meeteimayekextensions */,
-  {     1,   122,     0,   9,   0, UNI_DIA }   /* diacritic */,
-  {     0,  8520,     0,   6,   0, UNI_joinc_values_index }   /* joinc= */,
-  {     1,  1362,  2912,  24,  13, UNI_CCC__214 }   /* canonicalcombiningclass=attachedabove */,
-  {     4,  2148,  3309,   3,  11, UNI_SMALLKANAEXT }   /* insmallkanaext */,
-  {     2,  1362,  7611,  24,   2, UNI_CCC__14 }   /* canonicalcombiningclass=14 */,
-  {     3,  9365,  9390,   5,   3, UNI_SOGO }   /* scx=sogo */,
-  {     0,  7860,     0,   8,   0, UNI_HIRA }   /* hiragana */,
-  {    86,  8884,  4236,   5,  16, UNI_INSC__VOWELINDEPENDENT }   /* insc=vowelindependent */,
-  {     0,  8233,  6051,   7,   4, UNI_SC__MAHJ }   /* script=mahj */,
-  {    16,  8233,  3038,   7,   4, UNI_ETHI }   /* script=ethi */,
-  {     1,  5835,     1,  12,   1, -UNI_BIDIC }   /* bidicontrol=n */,
-  {     2,  6828,  3056,  10,  18, UNI_BC__ET }   /* bidiclass=europeanterminator */,
-  {    20,  9093,  8303,   4,   7, UNI_INTIBETAN }   /* blk=tibetan */,
-  {     1,  8233,  8250,  10,   4, UNI_SHAW }   /* script=shavian */,
-  {     1,  6003,    36,  12,   1, UNI_JOINC }   /* joincontrol=t */,
-  {     1,  9093,  4762,   4,  15, UNI_VEDICEXT }   /* blk=vedicextensions */,
-  {     0,  4241,  3022,   4,  11, UNI_DEVANAGARIEXT }   /* indevanagariext */,
-  {     0,  6005,  1387,   3,  23, UNI_CJKSYMBOLS }   /* incjksymbolsandpunctuation */,
-  {     1,  8884,  4891,   5,  14, UNI_INSC__CONSONANTFINAL }   /* insc=consonantfinal */,
-  {    12,  9093,  3518,   4,  17, UNI_CYRILLICEXTB }   /* blk=cyrillicextendedb */,
-  {     2,  4447,  7176,  15,   9, UNI_EA__A }   /* eastasianwidth=ambiguous */,
-  {     0,  3671,  8622,  17,   4, UNI_TELU }   /* scriptextensions=telu */,
-  {    48,  9049,  7435,   4,   2, UNI_AGE__11 }   /* age=11 */,
-  {     0,  6492,     0,  11,   0, UNI_KATAKANAEXT }   /* katakanaext */,
-  {     5,  1536,  8073,   3,   6, UNI_INELYMAIC }   /* inelymaic */,
-  {     0,  8205,     0,   4,   0, UNI_OSMA }   /* osma */,
-  {     2,  9365,  7860,   4,   4, UNI_HIRA }   /* scx=hira */,
-  {     0,  1362,  7540,  24,   3, UNI_WB__EB }   /* canonicalcombiningclass=200 */,
-  {    14,   184,  8128,   2,   4, UNI_MAKA }   /* ismaka */,
-  {     2,  8886,  6183,   3,  12, UNI_MEND }   /* sc=mendekikakui */,
-  {     3,  9093,  7916,   4,   8, UNI_INMAHAJANI }   /* blk=mahajani */,
-  {     8,  8233,  2532,   7,   4, UNI_BRAH }   /* script=brah */,
-  {     0,  1497,   400,   9,   6, UNI_CF }   /* category=format */,
-  {     0,  9093,  7347,   4,   9, UNI_INOLDTURKIC }   /* blk=oldturkic */,
-  {     7,  9629,  6448,   3,  11, UNI_LB__IN }   /* lb=inseparable */,
-  {     2,  3868,  4387,  16,  14, UNI_SC }   /* generalcategory=currencysymbol */,
-  {     0,  9620,   698,   3,   6, UNI_N }   /* gc=number */,
-  {     3,  8424,  2127,   6,  14, UNI_INHANIFIROHINGYA }   /* block=hanifirohingya */,
-  {    20,  9113,  8810,   5,   4, UNI_CCC__33 }   /* ccc=ccc33 */,
-  {     0,  5760,  8669,  13,   4, UNI_NV__1_SLASH_32 }   /* numericvalue=1/32 */,
-  {    14,  5835,     0,  12,   0, UNI_bidic_values_index }   /* bidicontrol= */,
-  {     1,  9137,     1,   4,   1, -UNI_DEP }   /* dep=n */,
-  {     3,    21,  1622,   2,   9, UNI_LATINEXTE }   /* inlatinexte */,
-  {    28,  9113,  8473,   5,   5, UNI_CCC__132 }   /* ccc=ccc132 */,
-  {     0,  3002,   567,  18,   2, UNI_DT__NB }   /* decompositiontype=nb */,
-  {     0,  1362,  8475,  24,   3, UNI_CCC__132 }   /* canonicalcombiningclass=132 */,
-  {     0,  8580,    17,   7,   1, -UNI__PERL_NCHAR }   /* nchar=no */,
-  {     5,  9593,  2722,   3,  19, UNI_BC__LRO }   /* bc=lefttorightoverride */,
-  {     0,  2760,     0,  19,   0, UNI_MODIFIERTONELETTERS }   /* modifiertoneletters */,
-  {     1,  8424,  6798,   6,  10, UNI_ARABICEXTA }   /* block=arabicexta */,
-  {     0,  8233,  7239,   7,   9, UNI_SC__QAAI }   /* script=inherited */,
-  {     3,  9365,    78,   4,   6, UNI_ARAB }   /* scx=arabic */,
-  {     0,  8233,  9394,   8,   3, UNI_SC__SYRC }   /* script=syrc */,
-  {     0,  8886,  8261,   3,   4, UNI_SOYO }   /* sc=soyo */,
-  {    76,  9093,  1506,   4,  24, UNI_SUPSYMBOLSANDPICTOGRAPHS }   /* blk=supsymbolsandpictographs */,
-  {     0,  8959,    36,   5,   1, UNI_XIDS }   /* xids=t */,
-  {    16,  1801,   995,  22,   2, -UNI_CWU }   /* changeswhenuppercased=no */,
-  {     3,  4705,  2456,   5,  16, UNI_TERM }   /* isterminalpunctuation */,
-  {     0,  9093,  2957,   4,   9, UNI_HALFMARKS }   /* blk=halfmarks */,
-  {     1,  1911,   698,  22,   6, UNI_INSC__NUMBER }   /* indicsyllabiccategory=number */,
-  {     5,  9205,     0,   4,   0, UNI_KNDA }   /* knda */,
-  {     1,  3671,  8709,  17,   5, UNI_BUHD }   /* scriptextensions=buhid */,
-  {     0,  9901,  6316,   3,  10, UNI_XIDC }   /* isxidcontinue */,
-  {     4,  8233,  8262,   8,   3, UNI_SOYO }   /* script=soyo */,
-  {   156,  9623,  3620,   3,  17, UNI_JG__MANICHAEANDHAMEDH }   /* jg=manichaeandhamedh */,
-  {     2,  4580,  4109,   3,   6, UNI_INMYANMAR }   /* inmyanmar */,
-  {     1,  4849,     3,  14,   1, -UNI_CI }   /* caseignorable=f */,
-  {     1,  8886,  4946,   3,   4, UNI_CHAM }   /* sc=cham */,
-  {     2,  7018,  7159,  10,   1, UNI_IN__5 }   /* presentin=5 */,
-  {    31,   184,  1999,   2,  22, UNI_MODIFIERLETTERS }   /* isspacingmodifierletters */,
-  {     0,  5565,  4552,  13,  15, UNI_JG__MANICHAEANSADHE }   /* joininggroup=manichaeansadhe */,
-  {     5,  9365,  8142,   4,   7, UNI_MARC }   /* scx=marchen */,
-  {     9,  8332,  2238,   3,   3, UNI_POSIXXDIGIT }   /* isahex */,
-  {   258,  9946,  3984,   3,   3, UNI_SARB }   /* issarb */,
-  {     4,  7365,     0,   4,   0, UNI_PAUC }   /* pauc */,
-  {     1,  9093,  2006,   4,  15, UNI_MODIFIERLETTERS }   /* blk=modifierletters */,
-  {     0,  1362,  7502,  24,   1, UNI_CCC__8 }   /* canonicalcombiningclass=8 */,
-  {     0,  2106,  4140,  21,   5, UNI_GCB__XX }   /* graphemeclusterbreak=other */,
-  {     0,  8635,     0,   5,   0, UNI_ideo_values_index }   /* ideo= */,
-  {     2,   184,  1714,   3,  20, UNI_CWCF }   /* ischangeswhencasefolded */,
-  {    26,  3820,     0,  16,   0, UNI_PE }   /* closepunctuation */,
-  {     4,   184,  7892,   2,   8, UNI_JAVA }   /* isjavanese */,
-  {     0,  3671,  2127,  17,   4, UNI_HAN }   /* scriptextensions=hani */,
-  {     0,  6231,  5678,  12,   4, UNI_NV__NAN }   /* numerictype=none */,
-  {     7,  9093,  2333,   4,  20, UNI_GLAGOLITICSUP }   /* blk=glagoliticsupplement */,
-  {     1,  9113,  9077,   4,   4, UNI_WB__EB }   /* ccc=atbl */,
-  {     1,  8424,  4175,   6,  13, UNI_MATHOPERATORS }   /* block=mathoperators */,
-  {    33,  1911,  4327,  22,  15, UNI_INSC__CONSONANTKILLER }   /* indicsyllabiccategory=consonantkiller */,
-  {     0,  6918,  6349,  10,  11, UNI_LB__BB }   /* linebreak=breakbefore */,
-  {     1,  9093,  4582,   4,  15, UNI_INMEROITICCURSIVE }   /* blk=meroiticcursive */,
-  {    10,  1801,  8864,  22,   5, -UNI_CWU }   /* changeswhenuppercased=false */,
-  {     1,  2627,     0,  19,   0, UNI_ENCLOSEDALPHANUMSUP }   /* enclosedalphanumsup */,
-  {     1,  8886,  2253,   3,  20, UNI_HLUW }   /* sc=anatolianhieroglyphs */,
-  {     3,  2457,   952,   5,  24, UNI_ALPHABETICPF }   /* inalphabeticpresentationforms */,
-  {     9,  8894,     0,   4,   0, UNI_LIMB }   /* limb */,
-  {     6,  4580,  1540,   3,  13, UNI_MUSIC }   /* inmusicalsymbols */,
-  {     7,  3671,  9173,  17,   4, UNI_GURU }   /* scriptextensions=guru */,
-  {     1,  8879,  5312,   3,  13, UNI_INPSALTERPAHLAVI }   /* inpsalterpahlavi */,
-  {     3,  9647,  7502,   3,   1, UNI_NV__8 }   /* nv=8 */,
-  {     1,  9623,  6785,   3,   2, UNI_JG__FE }   /* jg=fe */,
-  {     1,  9647,  8364,   3,   2, UNI_NV__40 }   /* nv=40 */,
-  {     1,   184,  6003,   2,  11, UNI_JOINC }   /* isjoincontrol */,
-  {     0,  9647,  7604,   3,   8, UNI_NV__2_SLASH_5 }   /* nv=4.00e-01 */,
-  {     1,  8412,    36,   6,   1, UNI_BIDIC }   /* bidic=t */,
-  {     1,  9049,  9686,   4,   3, UNI_AGE__3_DOT_2 }   /* age=v32 */,
-  {     0,  9365,  9489,   4,   4, UNI_ZYYY }   /* scx=zyyy */,
-  {     2,  5760,  7540,  13,   8, UNI_NV__20000000 }   /* numericvalue=20000000 */,
-  {     0,  3868,  5258,  16,  11, UNI_MC }   /* generalcategory=spacingmark */,
-  {     0,  5269,  8864,  14,   5, -UNI_PATSYN }   /* patternsyntax=false */,
-  {     1,  3620,     0,  10,   0, UNI_MANI }   /* manichaean */,
-  {     2,  8886,  8310,   3,   7, UNI_SC__TIRH }   /* sc=tirhuta */,
-  {     0,  2708,   833,   4,   4, UNI_ARROWS }   /* inarrows */,
-  {     0,  1482,  2379,  24,   5, UNI_INPC__RIGHT }   /* indicpositionalcategory=right */,
-  {     0,  5193,     0,   3,   0, UNI_ANY }   /* any */,
-  {     3,  9909,   879,   3,   9, UNI_CO }   /* isprivateuse */,
-  {     3,  1924,  1015,  10,   5, UNI_L }   /* category=letter */,
-  {     0,  9113,  7723,   4,   2, UNI_CCC__18 }   /* ccc=18 */,
-  {     0,   184,  1622,   2,   9, UNI_LATINEXTE }   /* islatinexte */,
-  {    21,  9365,  8538,   4,   6, UNI_KHOJ }   /* scx=khojki */,
-  {     0,  8424,  2169,   6,  14, UNI_MEETEIMAYEKEXT }   /* block=meeteimayekext */,
-  {     1,   184,  9777,   2,   2, UNI_ZP }   /* iszp */,
-  {     3,  3293,  8318,   3,   6, UNI_UCASEXT }   /* inucasext */,
-  {     4,  2204,  6614,   3,  10, UNI_LO }   /* isotherletter */,
-  {     3,  9093,  1386,   4,  10, UNI_CJKSYMBOLS }   /* blk=cjksymbols */,
-  {     0,  8886,  6723,   3,   4, UNI_SC__SYLO }   /* sc=sylo */,
-  {     2,  5760,  7684,  13,   8, UNI_NV__1_SLASH_160 }   /* numericvalue=6.25e-03 */,
-  {     0,  9093,  6027,   4,  12, UNI_KHMERSYMBOLS }   /* blk=khmersymbols */,
-  {     1,  5760,  8664,  13,   5, UNI_NV__1_SLASH_160 }   /* numericvalue=1/160 */,
-  {     5,  9620,   467,   3,  11, UNI_P }   /* gc=punctuation */,
-  {     4,  9647,  1219,   3,   3, UNI_NV__NAN }   /* nv=nan */,
-  {    12,  5955,     0,  12,   0, UNI_GONG }   /* gunjalagondi */,
-  {     3,  6888,   995,  10,   2, -UNI_DIA }   /* diacritic=no */,
-  {     0,   184,  6027,   2,  12, UNI_KHMERSYMBOLS }   /* iskhmersymbols */,
-  {    47,  9629,  5943,   3,   4, UNI_LB__GL }   /* lb=glue */,
-  {     0,  8051,  9734,   7,   3, UNI_COMPEX }   /* compex=yes */,
-  {     1,  8604,  8864,   6,   5, -UNI_QMARK }   /* qmark=false */,
-  {     3,   184,   122,   2,   9, UNI_DIA }   /* isdiacritic */,
-  {     2,  7148,     0,  10,   0, UNI_YIRADICALS }   /* yiradicals */,
-  {     5,  1158,  2221,   3,   3, UNI_INTHAI }   /* inthai */,
-  {     4,  6918,  5991,  10,  12, UNI_LB__IS }   /* linebreak=infixnumeric */,
-  {    80,  9093,   478,   4,  31, UNI_MATHALPHANUM }   /* blk=mathematicalalphanumericsymbols */,
-  {     4,  6918,  6448,  10,  11, UNI_LB__IN }   /* linebreak=inseparable */,
-  {     0,  3248,  9433,   6,   4, UNI_XPOSIXSPACE }   /* space=true */,
-  {     0,  8424,  3038,   6,  18, UNI_ETHIOPICSUP }   /* block=ethiopicsupplement */,
-  {     0,  9365,  8289,   4,   7, UNI_LANA }   /* scx=taitham */,
-  {     1,  6918,  5059,  10,  14, UNI_LB__BK }   /* linebreak=mandatorybreak */,
-  {     7,  9623,  5087,   3,  14, UNI_JG__MANICHAEANBETH }   /* jg=manichaeanbeth */,
-  {     0,  2106,  6525,  21,   3, UNI_LB__H3 }   /* graphemeclusterbreak=lvt */,
-  {    11,  9093,  4432,   4,  15, UNI_DIACRITICALSSUP }   /* blk=diacriticalssup */,
-  {   129,  1497,     7,   9,   1, UNI_C }   /* category=c */,
-  {     0,  2453,     0,   4,   0, UNI_TERM }   /* term */,
-  {     0,  8556,  9734,   6,   3, UNI_XPOSIXLOWER }   /* lower=yes */,
-  {     5,  9365,  8622,   4,   6, UNI_TELU }   /* scx=telugu */,
-  {     0,    27,     0,   2,   0, UNI_LOWERCASELETTER }   /* ll */,
-  {     0,  8871,    72,   3,   2, UNI_SB__LE }   /* sb=le */,
-  {     0,    21,  3980,   2,  16, UNI_LINEARBIDEOGRAMS }   /* inlinearbideograms */,
-  {   144,  8233,  8538,   7,   4, UNI_SC__KHOJ }   /* script=khoj */,
-  {    37,  9365,  7302,   4,   9, UNI_NBAT }   /* scx=nabataean */,
-  {     5,  8233,  6558,   7,  11, UNI_MEDF }   /* script=medefaidrin */,
-  {    72,  4175,     0,  13,   0, UNI_MATHOPERATORS }   /* mathoperators */,
-  {     6,  8874,  9734,   5,   3, UNI_IDST }   /* idst=yes */,
-  {     0,  6918,    25,  10,   2, UNI_LB__SY }   /* linebreak=sy */,
-  {     0,  8484,     0,   6,   0, UNI_CAKM }   /* chakma */,
-  {     0,  8233,  9469,   7,   4, UNI_XSUX }   /* script=xsux */,
-  {     1,  8412,  9433,   6,   4, UNI_BIDIC }   /* bidic=true */,
-  {     4,  8886,  2836,   3,   9, UNI_SUND }   /* sc=sundanese */,
-  {   243,  8886,  9293,   3,   4, UNI_OGAM }   /* sc=ogam */,
-  {     0,  2085,     0,  11,   0, UNI_CYRILLICSUP }   /* cyrillicsup */,
-  {    26,  8886,  3772,   3,   8, UNI_SC__BOPO }   /* sc=bopomofo */,
-  {     1,  1801,    26,  22,   1, UNI_CWU }   /* changeswhenuppercased=y */,
-  {     5,  1362,  7558,  24,   2, UNI_CCC__13 }   /* canonicalcombiningclass=13 */,
-  {     0,  3671,  1622,  17,   5, UNI_LATN }   /* scriptextensions=latin */,
-  {     1,    21,  3964,   2,   9, UNI_LATIN1 }   /* inlatin1sup */,
-  {     4,  3736,  5958,   5,   9, UNI_INGUNJALAGONDI }   /* ingunjalagondi */,
-  {     0,  2204,   125,   3,   2, UNI_OCR }   /* isocr */,
-  {   104,  1757,    26,  22,   1, UNI_CWL }   /* changeswhenlowercased=y */,
-  {     1,   184,  8072,   2,   7, UNI_ELYM }   /* iselymaic */,
-  {    17,  1999,     0,  22,   0, UNI_MODIFIERLETTERS }   /* spacingmodifierletters */,
-  {     0,  9093,   689,   4,  30, UNI_CUNEIFORMNUMBERS }   /* blk=cuneiformnumbersandpunctuation */,
-  {     2,  4821,   995,  14,   2, -UNI_POSIXXDIGIT }   /* asciihexdigit=no */,
-  {     0,  9093,  2627,   4,  19, UNI_ENCLOSEDALPHANUMSUP }   /* blk=enclosedalphanumsup */,
-  {     2,  3110,     0,   8,   0, UNI_GEOR }   /* georgian */,
-  {     0,  2684,  6525,  19,  11, UNI_LB__H3 }   /* hangulsyllabletype=lvtsyllable */,
-  {     0,  6768,  2233,   3,  20, UNI_YIJING }   /* isyijinghexagramsymbols */,
-  {     0,  8424,  4477,   6,  15, UNI_INHANGUL }   /* block=hangulsyllables */,
-  {     1,  9647,  9014,   3,   3, UNI_NV__5_SLASH_2 }   /* nv=5/2 */,
-  {     0,  9093,  3501,   4,  17, UNI_CYRILLICEXTA }   /* blk=cyrillicextendeda */,
-  {     0,  8871,  8616,   3,   5, UNI_SB__ST }   /* sb=sterm */,
-  {     2,  8562,     0,   4,   0, UNI_LYCI }   /* lyci */,
-  {     1,  2148,  2894,   3,  18, UNI_SUPARROWSC }   /* insupplementalarrowsc */,
-  {     1,  6918,  9757,  10,   2, UNI_LB__H2 }   /* linebreak=h2 */,
-  {     2,  9049,  7507,   4,   2, UNI_AGE__12 }   /* age=12 */,
-  {     6,  9605,  7836,   3,   8, UNI_DT__FRA }   /* dt=fraction */,
-  {     1,  3002,  9461,  18,   4, UNI_EA__F }   /* decompositiontype=wide */,
-  {     0,  9365,  1573,   4,   4, UNI_PHAG }   /* scx=phag */,
-  {    23,  8100,     1,   7,   1, -UNI_HYPHEN }   /* hyphen=n */,
-  {     0,  8886,  8622,   3,   4, UNI_SC__TELU }   /* sc=telu */,
-  {     0,  1162,     0,  26,   0, UNI_HALFANDFULLFORMS }   /* halfwidthandfullwidthforms */,
-  {     1,   184,  8086,   2,   6, UNI_GRBASE }   /* isgrbase */,
-  {     0,  8634,  9433,   6,   4, UNI_UIDEO }   /* uideo=true */,
-  {     1,  8424,  4975,   6,   7, UNI_KANASUP }   /* block=kanasup */,
-  {    16,  1757,     0,  22,   0, UNI_cwl_values_index }   /* changeswhenlowercased= */,
-  {     2,   184,    38,   2,   2, UNI_XPOSIXDIGIT }   /* isnd */,
-  {     3,  2148,  8255,   3,   6, UNI_INSIDDHAM }   /* insiddham */,
-  {   281,  3038,     0,  11,   0, UNI_ETHIOPICSUP }   /* ethiopicsup */,
-  {     1,  9093,  4762,   4,   8, UNI_VEDICEXT }   /* blk=vedicext */,
-  {     1,  9209,     0,   4,   0, UNI_KTHI }   /* kthi */,
-  {     1,  5760,  1219,  13,   3, UNI_NV__NAN }   /* numericvalue=nan */,
-  {     1,  9093,  7995,   4,   7, UNI_INAVESTAN }   /* blk=avestan */,
-  {     0,  6027,     0,   5,   0, UNI_KHMR }   /* khmer */,
-  {     8,  5760,  8364,  13,   4, UNI_NV__4000 }   /* numericvalue=4000 */,
-  {     2,  3900,     0,  16,   0, UNI_HALFANDFULLFORMS }   /* halfandfullforms */,
-  {     0,  2148,  2000,   3,  21, UNI_MODIFIERLETTERS }   /* inspacingmodifierletters */,
-  {     2,  9389,     0,   4,   0, UNI_SOGO }   /* sogo */,
-  {     2,  5760,  9741,  13,   2, UNI_NV__44 }   /* numericvalue=44 */,
-  {    39,  1801,    36,  22,   1, UNI_CWU }   /* changeswhenuppercased=t */,
-  {     0,  8959,    26,   5,   1, UNI_XIDS }   /* xids=y */,
-  {    32,  2106,    73,  21,   2, UNI_WB__EB }   /* graphemeclusterbreak=em */,
-  {    22,  3736,  7854,   4,   6, UNI_INGURMUKHI }   /* ingurmukhi */,
-  {     0,  4361,  1578,   4,  16, UNI_GEOMETRICSHAPESEXT }   /* ingeometricshapesext */,
-  {     3,  5760,  8400,  13,   6, UNI_NV__900000 }   /* numericvalue=900000 */,
-  {     0,  3951,  1278,   3,   2, UNI_IDS }   /* isids */,
-  {    17,  9365,  8919,   4,   5, UNI_OGAM }   /* scx=ogham */,
-  {     0,  9782,  7128,   4,   4, UNI_POSIXWORD }   /* perlword */,
-  {     4,  8886,  2164,   4,   3, UNI_SC__KTHI }   /* sc=kthi */,
-  {     0,  9293,     0,   4,   0, UNI_OGAM }   /* ogam */,
-  {     8,  9904,  3248,   5,   5, UNI_POSIXSPACE }   /* posixspace */,
-  {    64,  9731,  4645,   3,   2, UNI_WB__DQ }   /* wb=dq */,
-  {     0,  7128,  5346,  10,   2, UNI_WB__EB }   /* wordbreak=eb */,
-  {   132,  5760,  8371,  13,   2, UNI_NV__32 }   /* numericvalue=32 */,
-  {     0,    78,     0,   6,   0, UNI_ARAB }   /* arabic */,
-  {     3,  9093,  1458,   4,  24, UNI_HIGHPUSURROGATES }   /* blk=highprivateusesurrogates */,
-  {   139,  8886,  1085,   3,   4, UNI_SC__HANG }   /* sc=hang */,
-  {     0,  9365,  8859,   4,   5, UNI_DOGR }   /* scx=dogra */,
-  {     0,  9647,  8354,   3,   4, UNI_NV__6000 }   /* nv=6000 */,
-  {     1,  3671,  8538,  17,   6, UNI_KHOJ }   /* scriptextensions=khojki */,
-  {    61,  8424,  1622,   6,   9, UNI_LATINEXTE }   /* block=latinexte */,
-  {     0,  9647,  7644,   3,   8, UNI_NV__11_SLASH_2 }   /* nv=5.50e+00 */,
-  {     0,  3951,   415,   3,  10, UNI_IDEO }   /* isideographic */,
-  {   128,  8886,  7812,   3,   8, UNI_SC__DUPL }   /* sc=duployan */,
-  {     0,  3243,    26,  11,   1, UNI_XPOSIXSPACE }   /* whitespace=y */,
-  {     1,  9901,  1768,   8,   5, UNI_XPOSIXLOWER }   /* isxposixlower */,
-  {     0,  9093,   837,   4,  11, UNI_PHONETICEXT }   /* blk=phoneticext */,
-  {     1,  9093,  3210,   4,   8, UNI_DINGBATS }   /* blk=dingbats */,
-  {     0,  9623,  6334,   3,   4, UNI_JG__NOON }   /* jg=noon */,
-  {     0,  9647,  9497,   3,   3, UNI_NV__1_SLASH_5 }   /* nv=1/5 */,
-  {     6,  6005,  1031,   4,   4, UNI_INCOPTIC }   /* incoptic */,
-  {     9,  3868,  4080,  16,  10, UNI_SM }   /* generalcategory=mathsymbol */,
-  {     6,  6005,  2065,   3,  20, UNI_CJKRADICALSSUP }   /* incjkradicalssupplement */,
-  {    22,  9593,  4312,   3,  15, UNI_BC__CS }   /* bc=commonseparator */,
-  {     4,  9313,    36,   4,   1, UNI_PCM }   /* pcm=t */,
-  {     0,  8424,  8128,   6,   7, UNI_INMAKASAR }   /* block=makasar */,
-  {     2,  6602,     0,  11,   0, UNI_NAND }   /* nandinagari */,
-  {   144,  1497,  8839,   9,   5, UNI_XPOSIXCNTRL }   /* category=cntrl */,
-  {    27,  6243,     0,  12,   0, UNI_HUNG }   /* oldhungarian */,
-  {     0,   184,  7248,   2,   9, UNI_SIND }   /* iskhudawadi */,
-  {   131,   184,  3038,   2,  11, UNI_ETHIOPICSUP }   /* isethiopicsup */,
-  {     0,  9629,  7924,   3,   8, UNI_LB__NL }   /* lb=nextline */,
-  {     0,  2708,    29,   4,   4, UNI_INARABIC }   /* inarabic */,
-  {     0,  1362,     8,  24,   1, UNI_CCC__A }   /* canonicalcombiningclass=a */,
-  {     0,  9093,  4821,   4,   5, UNI_ASCII }   /* blk=ascii */,
-  {     6,  2142,  8915,   3,   4, UNI_INNUSHU }   /* innushu */,
-  {     1,  5760,  7564,  13,   8, UNI_NV__1_SLASH_320 }   /* numericvalue=3.13e-03 */,
-  {     0,  9365,  6724,   5,  10, UNI_SYLO }   /* scx=sylotinagri */,
-  {   160,  2148,  7079,   3,   9, UNI_SUPARROWSB }   /* insuparrowsb */,
-  {     7,   184,  7048,   2,  10, UNI_SAUR }   /* issaurashtra */,
-  {     3,  8496,  8864,   6,   5, -UNI_CWKCF }   /* cwkcf=false */,
-  {     0,  8859,     0,   4,   0, UNI_DOGR }   /* dogr */,
-  {     1,  9093,  3705,   4,  17, UNI_SMALLFORMS }   /* blk=smallformvariants */,
-  {     3,  1713,  8864,  22,   5, -UNI_CWCF }   /* changeswhencasefolded=false */,
-  {     0,  2930,     0,   4,   0, UNI_CHER }   /* cher */,
-  {     2,  5760,  8354,  13,   3, UNI_NV__600 }   /* numericvalue=600 */,
-  {     0,  7356,     0,   4,   0, UNI_PALM }   /* palm */,
-  {     3,  1362,  9527,  24,   3, UNI_CCC__R }   /* canonicalcombiningclass=226 */,
-  {     1,  1691,  4687,  22,   4, UNI_BPT__O }   /* bidipairedbrackettype=open */,
-  {    16,  3038,     0,   8,   0, UNI_ETHI }   /* ethiopic */,
-  {     5,  7018,  9563,  10,   3, UNI_IN__5_DOT_1 }   /* presentin=5.1 */,
-  {    13,  8424,  7852,   6,   8, UNI_INGURMUKHI }   /* block=gurmukhi */,
-  {     0,  9365,  1599,   4,   6, UNI_HANG }   /* scx=hangul */,
-  {     1,  8233,  1135,   9,   2, UNI_SC__SHRD }   /* script=shrd */,
-  {     1,  9647,  9743,   3,   2, UNI_NV__45 }   /* nv=45 */,
-  {   292,  1924,  6040,  10,  11, UNI_NL }   /* category=letternumber */,
-  {     0,  7018,  9686,  10,   3, UNI_IN__3_DOT_2 }   /* presentin=v32 */,
-  {     1,  6949,  6362,   4,   9, UNI_CASEDLETTER }   /* iscasedletter */,
-  {     3,  1497,  4402,   9,  15, UNI_PD }   /* category=dashpunctuation */,
-  {     0,  9629,  9773,   3,   2, UNI_LB__XX }   /* lb=xx */,
-  {     2,  8233,  9133,   7,   4, UNI_SC__CYRL }   /* script=cyrl */,
-  {     0,   184,  1530,   2,  23, UNI_BYZANTINEMUSIC }   /* isbyzantinemusicalsymbols */,
-  {     0,  6015,  6470,  12,  11, UNI_JT__C }   /* joiningtype=joincausing */,
-  {     0,  4598,  1132,   4,   2, UNI_CPRT }   /* iscprt */,
-  {    21,  6928,  9433,  10,   4, UNI_XPOSIXLOWER }   /* lowercase=true */,
-  {     0,  2212,  2648,   4,   8, UNI_JAMO }   /* inhanguljamo */,
-  {     2,  6005,   510,   3,  19, UNI_CJK }   /* incjkunifiedideographs */,
-  {     5,  4627,    17,  16,   1, UNI_NFKCQC__N }   /* nfkcquickcheck=no */,
-  {     2,  9113,  7539,   4,   2, UNI_CCC__22 }   /* ccc=22 */,
-  {    48,  8086,     1,   7,   1, -UNI_GRBASE }   /* grbase=n */,
-  {     0,  3671,  9309,  17,   4, UNI_OSGE }   /* scriptextensions=osge */,
-  {    15,  7018,  7507,  10,   4, UNI_IN__12 }   /* presentin=12.0 */,
-  {     1,   184,    24,   2,   1, UNI_L }   /* isl */,
-  {    16,    21,  2232,   2,  21, UNI_YIJING }   /* inyijinghexagramsymbols */,
-  {     0,  8424,  4807,   6,  14, UNI_ANCIENTSYMBOLS }   /* block=ancientsymbols */,
-  {     0,  1084,     0,  25,   0, UNI_CWKCF }   /* changeswhennfkccasefolded */,
-  {     8,  1911,  8704,  22,   5, UNI_INSC__BINDU }   /* indicsyllabiccategory=bindu */,
-  {    11,  8604,     3,   6,   1, -UNI_QMARK }   /* qmark=f */,
-  {     0,  9731,  1188,   3,   2, UNI_WB__KA }   /* wb=ka */,
-  {     2,  9365,  8652,   4,   6, UNI_WCHO }   /* scx=wancho */,
-  {     4,  6828,  2817,  10,  19, UNI_BC__RLO }   /* bidiclass=righttoleftoverride */,
-  {    18,  8899,     0,   5,   0, UNI_math_values_index }   /* math= */,
-  {     0,  8219,     3,   7,   1, -UNI_PATSYN }   /* patsyn=f */,
-  {     0,  9946,  8248,   3,   6, UNI_SHAW }   /* isshavian */,
-  {     0,  1768,     0,   9,   0, UNI_XPOSIXLOWER }   /* lowercase */,
-  {     4,  8406,     1,   6,   1, -UNI_XPOSIXALPHA }   /* alpha=n */,
-  {     1,  6635,     0,  11,   0, UNI_SO }   /* othersymbol */,
-  {     0,  9093,  7008,   4,  10, UNI_INPHOENICIAN }   /* blk=phoenician */,
-  {     3,   719,     0,  30,   0, UNI_ENCLOSEDALPHANUMSUP }   /* enclosedalphanumericsupplement */,
-  {     2,  3671,  8699,  17,   5, UNI_BATK }   /* scriptextensions=batak */,
-  {     1,  8886,  9309,   3,   4, UNI_OSGE }   /* sc=osge */,
-  {   191,  2703,    36,  19,   1, UNI_IDST }   /* idstrinaryoperator=t */,
-  {    24,  6928,  9734,  10,   3, UNI_XPOSIXLOWER }   /* lowercase=yes */,
-  {   276,   339,     0,   2,   0, UNI_LO }   /* lo */,
-  {     0,  8894,     0,   5,   0, UNI_LIMB }   /* limbu */,
-  {     1,  3671,  2930,  17,   8, UNI_CHER }   /* scriptextensions=cherokee */,
-  {     2,  3092,     0,  18,   0, UNI_INPUNCTUATION }   /* generalpunctuation */,
-  {     0,   184,  8142,   2,   7, UNI_MARC }   /* ismarchen */,
-  {     4,  3671,  6602,  17,   4, UNI_NAND }   /* scriptextensions=nand */,
-  {    30,  9946,  3730,   3,   3, UNI_SGNW }   /* issgnw */,
-  {     1,  3236,     3,  18,   1, -UNI__PERL_PATWS }   /* patternwhitespace=f */,
-  {     4,  1239,     0,  24,   0, UNI_COMPEX }   /* fullcompositionexclusion */,
-  {     0,  6918,  5952,  10,   3, UNI_LB__ZWJ }   /* linebreak=zwj */,
-  {     6,  9237,     0,   3,   0, UNI_LOE }   /* loe */,
-  {     2,  9647,  9021,   3,   4, UNI_NV__3_SLASH_16 }   /* nv=3/16 */,
-  {    57,  5835,  9734,  12,   3, UNI_BIDIC }   /* bidicontrol=yes */,
-  {     0,  8338,   995,   7,   2, -UNI_XPOSIXSPACE }   /* wspace=no */,
-  {     5,  9093,  5045,   4,  14, UNI_LATINEXTE }   /* blk=latinextendede */,
-  {     4,  9113,  3433,   4,  17, UNI_WB__EB }   /* ccc=attachedbelowleft */,
-  {     0,  8886,  9409,   3,   4, UNI_SC__TAML }   /* sc=taml */,
-  {    16,  9731,    72,   3,   2, UNI_WB__LE }   /* wb=le */,
-  {     0,  9113,  8837,   4,   2, UNI_CCC__91 }   /* ccc=91 */,
-  {    73,   184,  8652,   2,   6, UNI_WCHO }   /* iswancho */,
-  {     0,  8424,  1458,   6,  24, UNI_HIGHPUSURROGATES }   /* block=highprivateusesurrogates */,
-  {     0,   184,  9197,   2,   4, UNI_KALI }   /* iskali */,
-  {     0,  9647,  7620,   3,   8, UNI_NV__9_SLASH_2 }   /* nv=4.50e+00 */,
-  {     0,  8960,   995,   4,   2, -UNI_IDS }   /* ids=no */,
-  {     1,  9623,  6547,   3,  11, UNI_JG__MALAYALAMRA }   /* jg=malayalamra */,
-  {    64,  9647,  7588,   3,   8, UNI_NV__3_SLASH_8 }   /* nv=3.75e-01 */,
-  {     5,  9365,  9213,   4,   4, UNI_LANA }   /* scx=lana */,
-  {     0,  5213,    17,  15,   1, UNI_COMPEX }   /* nfcquickcheck=no */,
-  {     0,   184,  4076,   2,  16, UNI_MISCMATHSYMBOLSA }   /* ismiscmathsymbolsa */,
-  {     2,   184,    43,   3,  15, UNI_CJKCOMPAT }   /* iscjkcompatibility */,
-  {    33,  9623,  8658,   3,   4, UNI_JG__YUDH }   /* jg=yudh */,
-  {     0,  6315,   995,  12,   2, -UNI_XIDC }   /* xidcontinue=no */,
-  {     1,  8233,  9489,   7,   4, UNI_SC__ZYYY }   /* script=zyyy */,
-  {     1,  8233,  8628,   7,   4, UNI_SC__THAA }   /* script=thaa */,
-  {     0,  5565,  8689,  13,   5, UNI_JG__ALAPH }   /* joininggroup=alaph */,
-  {     1,  9493,     0,   4,   0, UNI_ZZZZ }   /* zzzz */,
-  {     1,  8233,  9217,   7,   3, UNI_LAO }   /* script=lao */,
-  {     0,  9365,  6558,   4,  11, UNI_MEDF }   /* scx=medefaidrin */,
-  {     3,  9489,     0,   4,   0, UNI_ZYYY }   /* zyyy */,
-  {     0,  1362,  9771,  24,   2, UNI_CCC__9 }   /* canonicalcombiningclass=vr */,
-  {     4,  5979,  9734,  12,   3, UNI_IDEO }   /* ideographic=yes */,
-  {     0,  2148,  1507,   3,  23, UNI_SUPSYMBOLSANDPICTOGRAPHS }   /* insupsymbolsandpictographs */,
-  {     1,  6828,     0,  10,   0, UNI_bc_values_index }   /* bidiclass= */,
-  {   324,  8233,  8709,   7,   5, UNI_SC__BUHD }   /* script=buhid */,
-  {     4,  6015,    18,  12,   1, UNI_JT__R }   /* joiningtype=r */,
-  {     0,  3688,    26,  17,   1, UNI_STERM }   /* sentenceterminal=y */,
-  {     6,  5760,  8988,  13,   2, UNI_NV__41 }   /* numericvalue=41 */,
-  {     1,  5565,  6657,  13,  11, UNI_JG__ROHINGYAYEH }   /* joininggroup=rohingyayeh */,
-  {     2,  3868,   132,  16,   2, UNI_LM }   /* generalcategory=lm */,
-  {     3,  8424,  8135,   6,   7, UNI_INMANDAIC }   /* block=mandaic */,
-  {     1,  9662,  8864,   3,   5, -UNI_SD }   /* sd=false */,
-  {     1,  8424,  1003,   6,  11, UNI_ENCLOSEDCJK }   /* block=enclosedcjk */,
-  {    63,  9629,  9626,   3,   2, UNI_GCB__T }   /* lb=jt */,
-  {     0,  9093,  6858,   4,  10, UNI_CJKSTROKES }   /* blk=cjkstrokes */,
-  {    66,  9593,  3182,   3,  18, UNI_BC__LRI }   /* bc=lefttorightisolate */,
-  {    50,  3671,  8191,  17,   7, UNI_OLCK }   /* scriptextensions=olchiki */,
-  {     2,  1911,  5474,  22,  13, UNI_INSC__CONSONANTDEAD }   /* indicsyllabiccategory=consonantdead */,
-  {     5,  8170,     0,   8,   0, UNI_NFKDQC__N }   /* nfkdqc=n */,
-  {     0,  9365,  9317,   4,   4, UNI_PHLP }   /* scx=phlp */,
-  {    42,  4462,  9734,  15,   3, UNI_GREXT }   /* graphemeextend=yes */,
-  {     0,  9093,  6558,   4,  11, UNI_INMEDEFAIDRIN }   /* blk=medefaidrin */,
-  {     0,  9365,  4220,   4,   6, UNI_TANG }   /* scx=tangut */,
-  {     1,  8886,  1189,   4,   7, UNI_SC__KANA }   /* sc=katakana */,
-  {     0,  9409,     0,   4,   0, UNI_TAML }   /* taml */,
-  {     0,  7025,  9695,   3,   3, UNI_IN__5 }   /* in=v50 */,
-  {     4,   184,   132,   2,   2, UNI_LM }   /* islm */,
-  {     0,  5213,     0,  15,   0, UNI_COMPEX }   /* nfcquickcheck=n */,
-  {     1,  9623,  6063,   3,  12, UNI_JG__MALAYALAMBHA }   /* jg=malayalambha */,
-  {     3,  8332,  1340,   4,  22, UNI_ARABICPFB }   /* isarabicpresentationformsb */,
-  {     0,  8886,  7203,   3,   9, UNI_BHKS }   /* sc=bhaiksuki */,
-  {     2,  9620,  5353,   3,  14, UNI_ZS }   /* gc=spaceseparator */,
-  {     8,  7018,  9719,  10,   3, UNI_IN__8 }   /* presentin=v80 */,
-  {     0,  9365,   493,   4,   3, UNI_HAN }   /* scx=han */,
-  {     9,  9113,  7167,   4,   9, UNI_CCC__AL }   /* ccc=aboveleft */,
-  {     0,  1243,   995,  21,   2, -UNI_CE }   /* compositionexclusion=no */,
-  {     2,  8879,   879,   3,   9, UNI_PUA }   /* inprivateuse */,
-  {     9,  1482,  1869,   4,  20, UNI_DIACRITICALSFORSYMBOLS }   /* indiacriticalsforsymbols */,
-  {     0,  1497,  6624,   9,  11, UNI_NO }   /* category=othernumber */,
-  {     3,  9365,  8226,   4,   7, UNI_PHAG }   /* scx=phagspa */,
-  {     6,  5760,  8822,  13,   2, UNI_NV__35 }   /* numericvalue=35 */,
-  {     0,  9647,  8364,   3,   5, UNI_NV__40000 }   /* nv=40000 */,
-  {     2,  3671,  3020,  17,  10, UNI_DEVA }   /* scriptextensions=devanagari */,
-  {     0,  8424,  1387,   7,  23, UNI_CJKSYMBOLS }   /* block=cjksymbolsandpunctuation */,
-  {    10,  9365,  3984,   5,   3, UNI_SARB }   /* scx=sarb */,
-  {     1,  8886,  7995,   3,   7, UNI_AVST }   /* sc=avestan */,
-  {    34,  8538,     0,   6,   0, UNI_KHOJ }   /* khojki */,
-  {     5,  3243,    36,  11,   1, UNI_XPOSIXSPACE }   /* whitespace=t */,
-  {     1,  5552,     0,   6,   0, UNI_IPAEXT }   /* ipaext */,
-  {     0,  3251,    36,   3,   1, UNI_CE }   /* ce=t */,
-  {     1,   184,  2211,   2,  21, UNI_SINHALAARCHAICNUMBERS }   /* issinhalaarchaicnumbers */,
-  {     0,  8233,  7844,   7,   8, UNI_SC__GUJR }   /* script=gujarati */,
-  {    72,   184,    11,   2,   2, UNI_DI }   /* isdi */,
-  {     0,  9129,  8864,   4,   5, -UNI_CWU }   /* cwu=false */,
-  {   135,  9129,    26,   4,   1, UNI_CWU }   /* cwu=y */,
-  {     1,  9647,  8970,   3,   3, UNI_NV__1_SLASH_2 }   /* nv=1/2 */,
-  {     0,  1362,  8646,  24,   6, UNI_CCC__9 }   /* canonicalcombiningclass=virama */,
-  {     0,  9337,     0,   4,   0, UNI_QAAI }   /* qaai */,
-  {     9,  8233,  8679,   7,   5, UNI_SC__ADLM }   /* script=adlam */,
-  {     1,  9093,  7311,   4,   9, UNI_INNEWTAILUE }   /* blk=newtailue */,
-  {   195,   184,  2409,   2,   4, UNI_MONG }   /* ismong */,
-  {     2,   184,  9481,   2,   4, UNI_ZANB }   /* iszanb */,
-  {     2,  9623,  6075,   3,  12, UNI_JG__MALAYALAMLLA }   /* jg=malayalamlla */,
-  {     2,  5760,  8400,  13,   5, UNI_NV__90000 }   /* numericvalue=90000 */,
-  {     0,  4387,     0,  14,   0, UNI_SC }   /* currencysymbol */,
-  {     1,  4580,  2780,   3,  11, UNI_MONGOLIANSUP }   /* inmongoliansup */,
-  {     0,  9901,  7128,   8,   4, UNI_XPOSIXWORD }   /* isxposixword */,
-  {     0,  1362,  8802,  24,   2, UNI_CCC__31 }   /* canonicalcombiningclass=31 */,
-  {     0,  4627,    26,  15,   1, UNI_NFKCQC__Y }   /* nfkcquickcheck=y */,
-  {     1,  8233,  3980,   7,   7, UNI_SC__LINB }   /* script=linearb */,
-  {     1,  9620,     0,   3,   0, UNI_gc_values_index }   /* gc= */,
-  {    55,  1779,     1,  22,   1, -UNI_CWT }   /* changeswhentitlecased=n */,
-  {     1,  3002,  1223,  18,   7, UNI_DT__INIT }   /* decompositiontype=initial */,
-  {     1,  9345,     0,   4,   0, UNI_RJNG }   /* rjng */,
-  {     3,  7128,  5943,  10,  12, UNI_WB__EB }   /* wordbreak=glueafterzwj */,
-  {     2,  1536,  3553,   3,  10, UNI_ETHIOPICEXT }   /* inethiopicext */,
-  {     1,   184,  1576,   2,  18, UNI_GEOMETRICSHAPESEXT }   /* isgeometricshapesext */,
-  {     8,  9647,  9018,   3,   3, UNI_NV__7_SLASH_2 }   /* nv=7/2 */,
-  {     0,  1497,  4732,   9,  15, UNI_TITLE }   /* category=titlecaseletter */,
-  {     0,  8424,  3964,   6,   9, UNI_LATIN1 }   /* block=latin1sup */,
-  {     2,  1362,  3433,  24,  13, UNI_CCC__202 }   /* canonicalcombiningclass=attachedbelow */,
-  {     0,  1845,     0,  22,   0, UNI_INDICNUMBERFORMS }   /* commonindicnumberforms */,
-  {     0,  8886,  8115,   4,   6, UNI_SC__KALI }   /* sc=kayahli */,
-  {     1,  1158,  4718,   3,  14, UNI_TAMILSUP }   /* intamilsupplement */,
-  {     1,  8233,  8149,   7,   7, UNI_SC__MULT }   /* script=multani */,
-  {     1,  5760,  5409,  13,   8, UNI_NV__10000000 }   /* numericvalue=10000000 */,
-  {     0,   184,  7266,   2,   9, UNI_LATINEXTC }   /* islatinextc */,
-  {   242,  9365,  3836,   4,   7, UNI_CPRT }   /* scx=cypriot */,
-  {     0,  9647,  9745,   3,   2, UNI_NV__46 }   /* nv=46 */,
-  {     1,   184,  1758,   3,  20, UNI_CWL }   /* ischangeswhenlowercased */,
-  {     0,  5565,   726,  13,   3, UNI_JG__DAL }   /* joininggroup=dal */,
-  {     0,  8874,     0,   5,   0, UNI_idst_values_index }   /* idst= */,
-  {     5,  2148,  7049,   3,   9, UNI_INSAURASHTRA }   /* insaurashtra */,
-  {     0,  9647,  9017,   3,   4, UNI_NV__17_SLASH_2 }   /* nv=17/2 */,
-  {     1,  5760,  7532,  13,   8, UNI_NV__1_SLASH_40 }   /* numericvalue=2.50e-02 */,
-  {    67,  9620,   339,   3,   2, UNI_LO }   /* gc=lo */,
-  {     4,  9113,  7446,   4,   2, UNI_CCC__25 }   /* ccc=25 */,
-  {     0,  9093,  2021,   4,  22, UNI_TRANSPORTANDMAP }   /* blk=transportandmapsymbols */,
-  {     0,   184,  3552,   2,  17, UNI_ETHIOPICEXTA }   /* isethiopicextendeda */,
-  {     4,  6918,  3820,  10,  16, UNI_LB__CL }   /* linebreak=closepunctuation */,
-  {     3,  6371,    36,  11,   1, UNI_DEP }   /* deprecated=t */,
-  {     0,  8886,  6646,   3,  11, UNI_HMNG }   /* sc=pahawhhmong */,
-  {    14,  9093,  5590,   5,   7, UNI_INBALINESE }   /* blk=balinese */,
-  {     3,  3671,  8568,  17,   4, UNI_LYDI }   /* scriptextensions=lydi */,
-  {     0,  3671,  8652,  17,   6, UNI_WCHO }   /* scriptextensions=wancho */,
-  {     0,  8617,   995,   5,   2, -UNI_TERM }   /* term=no */,
-  {     8,  8424,   567,   6,   2, UNI_NB }   /* block=nb */,
-  {     0,  6828,  4905,  10,  14, UNI_BC__EN }   /* bidiclass=europeannumber */,
-  {     0,  8886,  7338,   3,   9, UNI_SC__PERM }   /* sc=oldpermic */,
-  {     1,  9453,     0,   4,   0, UNI_VAI }   /* vaii */,
-  {     3,   184,  7804,   2,   4, UNI_BUGI }   /* isbugi */,
-  {     0,  5552,     0,  13,   0, UNI_IPAEXT }   /* ipaextensions */,
-  {     3,  9093,  4975,   4,  14, UNI_KANASUP }   /* blk=kanasupplement */,
-  {     6,  5565,  5617,  13,  13, UNI_JG__MALAYALAMLLLA }   /* joininggroup=malayalamllla */,
-  {     0,  3671,  9421,  17,   4, UNI_TGLG }   /* scriptextensions=tglg */,
-  {     0,  8233,  8502,   7,   6, UNI_GOTH }   /* script=gothic */,
-  {     0,  9093,  1999,   4,  22, UNI_MODIFIERLETTERS }   /* blk=spacingmodifierletters */,
-  {     7,  9946,     6,   3,   1, UNI_SD }   /* issd */,
-  {     0,  2779,     0,  19,   0, UNI_MONGOLIANSUP }   /* mongoliansupplement */,
-  {     2,  7812,     0,   4,   0, UNI_DUPL }   /* dupl */,
-  {     0,   184,  2779,   2,   9, UNI_MONG }   /* ismongolian */,
-  {     0,  4705,  8624,   4,   4, UNI_TELU }   /* istelugu */,
-  {     7,  9659,     0,   3,   0, UNI_ri_values_index }   /* ri= */,
-  {   515,  8886,  2930,   3,   4, UNI_CHER }   /* sc=cher */,
-  {     6,   117,     6,   3,   2, UNI_INIDC }   /* inidc */,
-  {     0,  9113,  7558,   4,   2, UNI_CCC__13 }   /* ccc=13 */,
-  {     2,   184,  8142,   2,   4, UNI_MARC }   /* ismarc */,
-  {     0,  8065,     0,   7,   0, UNI_ELBA }   /* elbasan */,
-  {     0,  8406,   995,   6,   2, -UNI_XPOSIXALPHA }   /* alpha=no */,
-  {     0,  9093,  1576,   4,  15, UNI_GEOMETRICSHAPES }   /* blk=geometricshapes */,
-  {    49,  1933,     1,  22,   1, -UNI_LOE }   /* logicalorderexception=n */,
-  {     0,  8424,  6243,   6,  12, UNI_INOLDHUNGARIAN }   /* block=oldhungarian */,
-  {     8,   184,  8177,   2,   7, UNI_NB }   /* isnoblock */,
-  {     5,   184,   630,   3,  29, UNI_CJKEXTE }   /* iscjkunifiedideographsextensione */,
-  {     1,  8424,  3416,   6,  17, UNI_ALCHEMICAL }   /* block=alchemicalsymbols */,
-  {    34,  9725,  3362,   3,  18, UNI_VO__TR }   /* vo=transformedrotated */,
-  {     0,  2085,     0,  18,   0, UNI_CYRILLICSUP }   /* cyrillicsupplement */,
-  {     0,  9093,  3110,   4,  18, UNI_GEORGIANSUP }   /* blk=georgiansupplement */,
-  {    73,  8424,  1030,   7,   5, UNI_INCOPTIC }   /* block=coptic */,
-  {     1,  9113,  9521,   4,   3, UNI_CCC__BR }   /* ccc=222 */,
-  {     0,  8886,  7118,   3,  10, UNI_WARA }   /* sc=warangciti */,
-  {     1,  3868,  3218,  16,  18, UNI_ZP }   /* generalcategory=paragraphseparator */,
-  {     0,  6828,  5603,  10,   3, UNI_BC__RLO }   /* bidiclass=rlo */,
-  {     1,  3868,  5591,  16,  13, UNI_ZL }   /* generalcategory=lineseparator */,
-  {    84,  1362,  8212,  24,   7, UNI_CCC__1 }   /* canonicalcombiningclass=overlay */,
-  {     0,  7128,  4801,  10,   2, UNI_WB__SQ }   /* wordbreak=sq */,
-  {     0,   184,  1622,   2,  23, UNI_LATINEXTADDITIONAL }   /* islatinextendedadditional */,
-  {     0,  6003,     0,   5,   0, UNI_JOINC }   /* joinc */,
-  {     9,  4297,     0,   7,   0, UNI_BRAI }   /* braille */,
-  {     0,  2142,  7304,   4,   7, UNI_INNABATAEAN }   /* innabataean */,
-  {     2,  8424,  3772,   6,  11, UNI_BOPOMOFOEXT }   /* block=bopomofoext */,
-  {   145,  8886,  6690,   3,   4, UNI_SORA }   /* sc=sora */,
-  {    54,  8424,  7900,   6,   8, UNI_KANAEXTA }   /* block=kanaexta */,
-  {     5,  1188,     0,  26,   0, UNI_KATAKANAEXT }   /* katakanaphoneticextensions */,
-  {     5,  2106,  9773,  21,   2, UNI_GCB__XX }   /* graphemeclusterbreak=xx */,
-  {    28,  6005,  1387,   3,   9, UNI_CJKSYMBOLS }   /* incjksymbols */,
-  {     2,   341,     0,   2,   0, UNI_PE }   /* pe */,
-  {     1,  9629,  5952,   3,   3, UNI_LB__ZWJ }   /* lb=zwj */,
-  {     0,  9049,  7159,   4,   3, UNI_AGE__5 }   /* age=5.0 */,
-  {     1,  4705,  8945,   3,   4, UNI_TAKR }   /* istakri */,
-  {    11,  9093,  8023,   4,   7, UNI_CJKEXTC }   /* blk=cjkextc */,
-  {     5,  5979,    36,  12,   1, UNI_IDEO }   /* ideographic=t */,
-  {    34,  9629,  4687,   3,  15, UNI_LB__OP }   /* lb=openpunctuation */,
-  {     1,  9620,  4387,   3,  14, UNI_SC }   /* gc=currencysymbol */,
-  {     0,  9629,   340,   3,   2, UNI_LB__OP }   /* lb=op */,
-  {     0,  8562,     0,   6,   0, UNI_LYCI }   /* lycian */,
-  {     4,   184,   837,   2,  11, UNI_PHONETICEXT }   /* isphoneticext */,
-  {     6,  6885,  3901,   3,  15, UNI_HALFANDFULLFORMS }   /* ishalfandfullforms */,
-  {    98,  5565,  5682,  13,  13, UNI_JG__MANICHAEANTAW }   /* joininggroup=manichaeantaw */,
-  {     0,  8886,  7365,   3,   4, UNI_PAUC }   /* sc=pauc */,
-  {     4,  9365,  6602,   4,   4, UNI_NAND }   /* scx=nand */,
-  {     2,  5760,  9517,  13,   2, UNI_NV__42 }   /* numericvalue=42 */,
-  {    71,  9620,   341,   3,   2, UNI_PE }   /* gc=pe */,
-  {     0,  9946,  6992,   3,   6, UNI_SOGD }   /* issogdian */,
-  {     1,  6888,    36,  10,   1, UNI_DIA }   /* diacritic=t */,
-  {     1,  3671,  7812,  17,   8, UNI_DUPL }   /* scriptextensions=duployan */,
-  {    27,  9365,     0,   4,   0, UNI_scx_values_index }   /* scx= */,
-  {    12,   184,  8562,   2,   6, UNI_LYCI }   /* islycian */,
-  {    39,  9193,  5394,   4,   2, UNI_LB__H2 }   /* hst=lv */,
-  {     0,  9602,  8864,   3,   5, -UNI_DI }   /* di=false */,
-  {     2,  4597,     0,  15,   0, UNI_MISCPICTOGRAPHS }   /* miscpictographs */,
-  {     0,  8233,  9417,   7,   4, UNI_TFNG }   /* script=tfng */,
-  {    16,   184,  8894,   2,   5, UNI_LIMB }   /* islimbu */,
-  {     1,  8580,  8864,   6,   5, -UNI__PERL_NCHAR }   /* nchar=false */,
-  {     0,  4267,     0,   4,   0, UNI_BAMU }   /* bamu */,
-  {     2,  5760,  7716,  13,   8, UNI_NV__3_SLASH_4 }   /* numericvalue=7.50e-01 */,
-  {     2,  6591,     0,  11,   0, UNI_MYANMAREXTB }   /* myanmarextb */,
-  {     1,  3248,    26,   6,   1, UNI_XPOSIXSPACE }   /* space=y */,
-  {     0,  6005,  2986,   4,  16, UNI_COPTICEPACTNUMBERS }   /* incopticepactnumbers */,
-  {     0,  3128,  9734,  18,   3, UNI_IDSB }   /* idsbinaryoperator=yes */,
-  {     0,   184,  2627,   2,  19, UNI_ENCLOSEDALPHANUMSUP }   /* isenclosedalphanumsup */,
-  {     2,  7796,     0,   8,   0, UNI_BASS }   /* bassavah */,
-  {     0,  8233,  3020,   7,  10, UNI_SC__DEVA }   /* script=devanagari */,
-  {    12,  8424,  4204,   6,  16, UNI_SYRIACSUP }   /* block=syriacsupplement */,
-  {     0,  6918,  6968,  10,  10, UNI_LB__NS }   /* linebreak=nonstarter */,
-  {     0,  5760,  8376,  13,   6, UNI_NV__500000 }   /* numericvalue=500000 */,
-  {    24,  1362,  3441,  24,   5, UNI_CCC__B }   /* canonicalcombiningclass=below */,
-  {    32,  6918,    42,  10,   2, UNI_LB__CJ }   /* linebreak=cj */,
-  {     0,  6015,    36,  12,   1, UNI_JT__T }   /* joiningtype=t */,
-  {     0,  7128,    34,  10,   2, UNI_WB__EX }   /* wordbreak=ex */,
-  {   256,  3948,    25,   3,   1, UNI_INVS }   /* invs */,
-  {     2,   184,  3837,   3,  15, UNI_CYPRIOTSYLLABARY }   /* iscypriotsyllabary */,
-  {     1,  7018,  7724,  10,   3, UNI_IN__8 }   /* presentin=8.0 */,
-  {     0,  5565,  4562,  13,   5, UNI_JG__SADHE }   /* joininggroup=sadhe */,
-  {   128,  2708,  3758,   4,  14, UNI_ARABICSUP }   /* inarabicsupplement */,
-  {     1,  8233,  4297,   7,   7, UNI_BRAI }   /* script=braille */,
-  {     0,  9093,  2232,   4,   6, UNI_YIJING }   /* blk=yijing */,
-  {     0,   184,     1,   3,   1, UNI_CN }   /* iscn */,
-  {   160,  6828,    37,  10,   2, UNI_BC__EN }   /* bidiclass=en */,
-  {   129,  9093,  2085,   4,   8, UNI_INCYRILLIC }   /* blk=cyrillic */,
-  {     0,  9093,  2948,   4,  18, UNI_HALFMARKS }   /* blk=combininghalfmarks */,
-  {     4,  9365,  9425,   4,   4, UNI_THAI }   /* scx=thai */,
-  {     3,  9781,  9892,   6,   9, UNI__PERL_QUOTEMETA }   /* _perl_quotemeta */,
-  {   132,  3501,     0,  17,   0, UNI_CYRILLICEXTA }   /* cyrillicextendeda */,
-  {     2,  9608,     3,   3,   1, UNI_EA__F }   /* ea=f */,
-  {   129,    21,  8114,   2,   7, UNI_KALI }   /* inkayahli */,
-  {     0,  6567,  4951,   4,   2, UNI_INMIAO }   /* inmiao */,
-  {     5,  9457,     0,   4,   0, UNI_WCHO }   /* wcho */,
-  {     0,  9593,  2373,   3,  11, UNI_BC__L }   /* bc=lefttoright */,
-  {     0,  5565,  9596,  13,   3, UNI_JG__BEH }   /* joininggroup=beh */,
-  {     4,  1188,     0,   8,   0, UNI_KANA }   /* katakana */,
-  {    38,  8886,  8929,   3,   5, UNI_OSGE }   /* sc=osage */,
-  {     1,  9093,  8114,   4,   7, UNI_KALI }   /* blk=kayahli */,
-  {     0,  6918,   533,  10,   2, UNI_LB__NS }   /* linebreak=ns */,
-  {     0,  8424,  2353,   6,  20, UNI_ININSCRIPTIONALPAHLAVI }   /* block=inscriptionalpahlavi */,
-  {     0,  9093,  8934,   4,   5, UNI_INRUNIC }   /* blk=runic */,
-  {     0,  1362,  8817,  24,   2, UNI_CCC__34 }   /* canonicalcombiningclass=34 */,
-  {   113,  8233,  9069,   7,   4, UNI_SC__ARMN }   /* script=armn */,
-  {   202,  4092,     0,  16,   0, UNI_MISCMATHSYMBOLSB }   /* miscmathsymbolsb */,
-  {     0,  8406,  9734,   6,   3, UNI_XPOSIXALPHA }   /* alpha=yes */,
-  {     1,  1362,  8467,  25,   5, UNI_CCC__130 }   /* canonicalcombiningclass=ccc130 */,
-  {     9,  3671,  2930,  17,   4, UNI_CHER }   /* scriptextensions=cher */,
-  {     0,  9623,  8689,   3,   5, UNI_JG__ALAPH }   /* jg=alaph */,
-  {     0,  4462,  8864,  15,   5, -UNI_GREXT }   /* graphemeextend=false */,
-  {     0,  1362,  9530,  24,   3, UNI_CCC__AL }   /* canonicalcombiningclass=228 */,
-  {   301,  9093,  8568,   4,   6, UNI_INLYDIAN }   /* blk=lydian */,
-  {     1,  9623,  5718,   3,   3, UNI_JG__WAW }   /* jg=waw */,
+  {     2,  8780,  9860,   6,   3, UNI_INVAI }   /* block=vai */,
+  {     1,  9508,  5765,   4,  13, UNI_CCC__IS }   /* ccc=iotasubscript */,
+  {     0,  9768,  7694,   5,   8, UNI_SAMR }   /* scx=samaritan */,
+  {     0,  9277,  2684,   3,  19, UNI_EGYP }   /* sc=egyptianhieroglyphs */,
+  {     2,  5324,  6399,   4,  10, UNI_MATHALPHANUM }   /* inmathalphanum */,
+  {     0,  2784,    29,   4,   4, UNI_INARABIC }   /* inarabic */,
+  {     0,  2608,     0,   4,   0, UNI_BRAH }   /* brah */,
+  {     0,  4658, 10135,  15,   3, UNI_GREXT }   /* graphemeextend=yes */,
+  {     5,  9488,  5843,   4,   9, UNI_INMALAYALAM }   /* blk=malayalam */,
+  {     6,  1417,  7178,  24,  10, UNI_CCC__6 }   /* canonicalcombiningclass=hanreading */,
+  {     0,  4643,  9836,  15,   4, UNI_ECOMP }   /* emojicomponent=true */,
+  {     2, 10033,  4842,   3,   2, UNI_LB__QU }   /* lb=qu */,
+  {     0,  9768,  7630,   4,   9, UNI_TALU }   /* scx=newtailue */,
+  {     0,  9508,  8825,   4,   3, UNI_CCC__130 }   /* ccc=130 */,
+  {     0,  9488,   895,   4,  28, UNI_SUPPUAA }   /* blk=supplementaryprivateuseareaa */,
+  {     5,  3836,  9876,  17,   4, UNI_XSUX }   /* scriptextensions=xsux */,
+  {     1,   184,  9095,   2,   5, UNI_BUHD }   /* isbuhid */,
+  {     0,  9277,   859,   4,   3, UNI_SC__KNDA }   /* sc=knda */,
+  {     0,  5324,  6279,   4,   5, UNI_MAHJONG }   /* inmahjong */,
+  {     0,  4553,     0,  15,   0, UNI_CONTROLPICTURES }   /* controlpictures */,
+  {     0,  5986,  9904,  13,   3, UNI_NV__1_SLASH_5 }   /* numericvalue=1/5 */,
+  {     2,  3424,  8674,   3,   6, UNI_UCASEXT }   /* inucasext */,
+  {     5,  8589,  9624,   7,   3, UNI_LAO }   /* script=lao */,
+  {    17,  8589,  8421,   7,   7, UNI_ELYM }   /* script=elymaic */,
+  {     1,   184,  3633,   3,  16, UNI_CYRILLICEXTA }   /* iscyrillicextendeda */,
+  {     7,  8589,  9616,   7,   4, UNI_SC__KTHI }   /* script=kthi */,
+  {     0,  9488,  6818,   4,  11, UNI_MYANMAREXTA }   /* blk=myanmarexta */,
+  {    10,  1834,  9255,  22,   5, -UNI_CWT }   /* changeswhentitlecased=false */,
+  {     1,  1828,  9836,   6,   4, UNI_CASED }   /* cased=true */,
+  {     0,  9444,  7827,   4,   3, UNI_AGE__2 }   /* age=2.0 */,
+  {     0,  9277,   493,   3,   3, UNI_SC__HAN }   /* sc=han */,
+  {   194,   184,  2245,   2,  14, UNI_MEETEIMAYEKEXT }   /* ismeeteimayekext */,
+  {     0,  1552,    48,   9,   1, UNI_P }   /* category=p */,
+  {     1,  9768,  3115,   4,   4, UNI_DEVA }   /* scx=deva */,
+  {     0, 10333,    44,   3,   1, UNI_SK }   /* issk */,
+  {     0,  7218,  8236,  11,   7, UNI_LB__LF }   /* linebreak=linefeed */,
+  {     1,  9277,  7693,   3,   9, UNI_SAMR }   /* sc=samaritan */,
+  {    18,  5986,  7755,  13,   8, UNI_NV__1_SLASH_9 }   /* numericvalue=1.11e-01 */,
+  {     7,   184,  4049,   2,  11, UNI_GEORGIANEXT }   /* isgeorgianext */,
+  {     2,  8960,  9295,   6,   5, UNI_NFCQC__M }   /* nfcqc=maybe */,
+  {     4,  9014,  9836,   6,   4, UNI_UIDEO }   /* uideo=true */,
+  {    16, 10048,  7890,   3,   2, UNI_NV__33 }   /* nv=33 */,
+  {     0,  8589,  5171,   7,   4, UNI_CHAM }   /* script=cham */,
+  {     3,  5791,  4763,  13,  15, UNI_JG__MANICHAEANSADHE }   /* joininggroup=manichaeansadhe */,
+  {     0, 10048,  8714,   3,   6, UNI_NV__300000 }   /* nv=300000 */,
+  {     1,  9277,  9732,   3,   4, UNI_PRTI }   /* sc=prti */,
+  {     1,  8780,  5075,   7,  13, UNI_CJKCOMPATFORMS }   /* block=cjkcompatforms */,
+  {    20,   184,   690,   3,  29, UNI_CJKEXTG }   /* iscjkunifiedideographsextensiong */,
+  {     1,   184,  5522,   2,  14, UNI_PHONETICEXTSUP }   /* isphoneticextsup */,
+  {    34,  7248,     0,  10,   0, UNI_MISCARROWS }   /* miscarrows */,
+  {     3,  1966,  8687,  22,   7, UNI_INSC__VISARGA }   /* indicsyllabiccategory=visarga */,
+  {    17,  9508,  8835,   5,   5, UNI_WB__EB }   /* ccc=ccc133 */,
+  {     9,  9283,     0,   4,   0, UNI_PHLI }   /* phli */,
+  {     0,  9624,     0,   4,   0, UNI_LAO }   /* laoo */,
+  {     6, 10333,  7359,   3,   3, UNI_SAUR }   /* issaur */,
+  {     0,  6469,   495,  12,   7, UNI_NT__NU }   /* numerictype=numeric */,
+  {     1,   184,   727,   2,   2, UNI_MN }   /* ismn */,
+  {    51, 10033,    58,   3,   2, UNI_LB__ID }   /* lb=id */,
+  {     1,  9488,  9624,   4,   3, UNI_INLAO }   /* blk=lao */,
+  {     1,  1988,     3,  22,   1, -UNI_LOE }   /* logicalorderexception=f */,
+  {     0,  1513,     0,  24,   0, UNI_HIGHPUSURROGATES }   /* highprivateusesurrogates */,
+  {     8,  1552,  1025,   9,   2, UNI_NO }   /* category=no */,
+  {     1,  9768,  8428,   4,   7, UNI_GRAN }   /* scx=grantha */,
+  {     1, 10048,  8075,   3,   8, UNI_NV__7_SLASH_8 }   /* nv=8.75e-01 */,
+  {     0,  8780,  7621,   6,   9, UNI_INNABATAEAN }   /* block=nabataean */,
+  {     0,   184,  1274,   3,  19, UNI_CE }   /* iscompositionexclusion */,
+  {     0,  5791,  1511,  13,   3, UNI_JG__HAH }   /* joininggroup=hah */,
+  {     0,  9277,  9808,   3,   4, UNI_TALU }   /* sc=talu */,
+  {     2,  4033,  1059,  16,   2, UNI_SO }   /* generalcategory=so */,
+  {    17,  6554,  9836,  11,   4, UNI_IDC }   /* idcontinue=true */,
+  {     3,  3836,  4883,  17,  15, UNI_SARB }   /* scriptextensions=oldsoutharabian */,
+  {     8,   184,  2122,   2,   7, UNI_RADICAL }   /* isradical */,
+  {     1,  7325,  7826,   3,   2, UNI_IN__12 }   /* in=12 */,
+  {    17,  7158, 10135,  10,   3, UNI_DIA }   /* diacritic=yes */,
+  {     1,  8589,  7168,   7,  10, UNI_DIAK }   /* script=divesakuru */,
+  {     0,  9330,     0,   5,   0, UNI_TALE }   /* taile */,
+  {     1,  1417,  8066,  24,   2, UNI_CCC__28 }   /* canonicalcombiningclass=28 */,
+  {     0, 10296,  7438,   7,   4, UNI_POSIXWORD }   /* isposixword */,
+  {     2,   184,  1033,   2,  11, UNI_ENCLOSEDCJK }   /* isenclosedcjk */,
+  {    34,  7368,     0,  10,   0, UNI_SMALLFORMS }   /* smallforms */,
+  {     4,   184,  9900,   2,   4, UNI_ZZZZ }   /* iszzzz */,
+  {     3, 10027,  4748,   3,  15, UNI_JG__MANICHAEANGIMEL }   /* jg=manichaeangimel */,
+  {     9,  3836,  6409,  17,   4, UNI_MEND }   /* scriptextensions=mend */,
+  {     0, 10012,     8,   3,   1, UNI_EA__A }   /* ea=a */,
+  {     0,  1834,  1025,  22,   2, -UNI_CWT }   /* changeswhentitlecased=no */,
+  {     2,  7155,  4674,   3,  14, UNI_INHANGUL }   /* ishangulsyllables */,
+  {   128, 10033,  3985,   3,  16, UNI_LB__CL }   /* lb=closepunctuation */,
+  {     7, 10132,   495,   3,   7, UNI_WB__NU }   /* wb=numeric */,
+  {     0,     1,     0,   1,   0, UNI_N }   /* n */,
+  {   131,  5986,  8710,  13,   3, UNI_NV__600 }   /* numericvalue=600 */,
+  {     0,  9768,  6193,   4,   6, UNI_HEBR }   /* scx=hebrew */,
+  {     1,  1115,     0,   4,   0, UNI_HANG }   /* hang */,
+  {     0,  1417,  9121,  25,   4, UNI_CCC__18 }   /* canonicalcombiningclass=ccc18 */,
+  {     0,  7325,  7931,   3,   3, UNI_IN__4_DOT_1 }   /* in=4.1 */,
+  {     0,  9277,  8610,   3,   4, UNI_SIDD }   /* sc=sidd */,
+  {     0,   184,  3115,   2,  18, UNI_DEVANAGARIEXT }   /* isdevanagariextended */,
+  {     2,  9277,  2240,   4,   3, UNI_SC__KTHI }   /* sc=kthi */,
+  {     0,  5986,  7891,  13,   8, UNI_NV__1_SLASH_3 }   /* numericvalue=3.33e-01 */,
+  {     0,  7218,  8251,  10,   8, UNI_LB__NL }   /* linebreak=nextline */,
+  {     3,  9768,  9896,   4,   4, UNI_ZYYY }   /* scx=zyyy */,
+  {     0,  7218,  6217,  10,  12, UNI_LB__IS }   /* linebreak=infixnumeric */,
+  {     4,  9277,  9756,   3,   4, UNI_RUNR }   /* sc=runr */,
+  {     8,  9488,  9008,   4,   6, UNI_INTHAANA }   /* blk=thaana */,
+  {     0,  6409,     0,  12,   0, UNI_MEND }   /* mendekikakui */,
+  {     0,  4305,     0,   5,   0, UNI_C }   /* other */,
+  {     0,  7325,  8043,   3,   3, UNI_IN__8 }   /* in=8.0 */,
+  {     1,  9277,  9480,   3,   4, UNI_BATK }   /* sc=batk */,
+  {     0,  8589,  9608,   7,   4, UNI_KITS }   /* script=kits */,
+  {     3,  3785,     0,   4,   0, UNI_MANI }   /* mani */,
+  {     0,  9660,     0,   4,   0, UNI_MLYM }   /* mlym */,
+  {     9,  6061,    36,  12,   1, UNI_BIDIC }   /* bidicontrol=t */,
+  {     1,  9652,     0,   4,   0, UNI_MERC }   /* merc */,
+  {     0, 10024,  4568,   3,  14, UNI_SC }   /* gc=currencysymbol */,
+  {   168,  1856,  1025,  22,   2, -UNI_CWU }   /* changeswhenuppercased=no */,
+  {     0,  9488,  2203,   4,  14, UNI_INHANIFIROHINGYA }   /* blk=hanifirohingya */,
+  {     2,   184,  8435,   2,   6, UNI_GRBASE }   /* isgrbase */,
+  {     4,  8688,  5033,   3,   4, UNI_ASCII }   /* isascii */,
+  {     9,  9768,  4478,   4,   7, UNI_BRAI }   /* scx=braille */,
+  {     0,  9768,  8547,   4,   7, UNI_OLCK }   /* scx=olchiki */,
+  {     4,  7648,     0,   9,   0, UNI_ITAL }   /* olditalic */,
+  {     0,  9277,  8942,   3,   4, UNI_LYDI }   /* sc=lydi */,
+  {    19,  1552,  4245,   9,  10, UNI_SM }   /* category=mathsymbol */,
+  {     0,  8589,  8547,   7,   7, UNI_OLCK }   /* script=olchiki */,
+  {     1, 10132,  6917,   3,  11, UNI_WB__SQ }   /* wb=singlequote */,
+  {     1,  8780,  8936,   6,   6, UNI_INLYCIAN }   /* block=lycian */,
+  {     1,  9488,  4257,   4,  16, UNI_MISCMATHSYMBOLSB }   /* blk=miscmathsymbolsb */,
+  {     3,  4033,  4305,  16,   5, UNI_C }   /* generalcategory=other */,
+  {     0,  8780,  9065,   6,   5, UNI_INADLAM }   /* block=adlam */,
+  {     0,  8780,  9340,   6,   5, UNI_VSSUP }   /* block=vssup */,
+  {     0, 10236, 10220,  14,  11, UNI__PERL_FOLDS_TO_MULTI_CHAR }   /* _perl_folds_to_multi_char */,
+  {     1,  3836,  4385,  17,   4, UNI_TANG }   /* scriptextensions=tang */,
+  {     2, 10048,  8002,   3,   2, UNI_NV__26 }   /* nv=26 */,
+  {     1,  6884,     0,  11,   0, UNI_HMNG }   /* pahawhhmong */,
+  {    10,  2288,  2076,   4,   4, UNI_INHATRAN }   /* inhatran */,
+  {    32,   184,  5200,   2,  14, UNI_KANASUP }   /* iskanasupplement */,
+  {    33,  3097,    45,  18,   6, UNI_DT__COM }   /* decompositiontype=compat */,
+  {     0,  7218,  3969,  10,  16, UNI_LB__CP }   /* linebreak=closeparenthesis */,
+  {    16,  7318,  9967,  10,   3, UNI_IN__5_DOT_1 }   /* presentin=5.1 */,
+  {     0,  2032,  9255,  22,   5, -UNI__PERL_NCHAR }   /* noncharactercodepoint=false */,
+  {     9,  1417,  7877,  24,   2, UNI_CCC__13 }   /* canonicalcombiningclass=13 */,
+  {    11,  9997,   865,   3,   2, UNI_BC__WS }   /* bc=ws */,
+  {     1,   184,  5713,   2,  13, UNI_XPOSIXDIGIT }   /* isdecimalnumber */,
+  {     4,  3836,  3115,  17,   4, UNI_DEVA }   /* scriptextensions=deva */,
+  {     0,  8780,  2120,   7,  13, UNI_CJKRADICALSSUP }   /* block=cjkradicalssup */,
+  {    38,  9488,  3341,   4,   8, UNI_DINGBATS }   /* blk=dingbats */,
+  {     0,  5158,     0,  14,   0, UNI_INGREEK }   /* greekandcoptic */,
+  {     0,  3079,     0,   4,   0, UNI_COPT }   /* copt */,
+  {     0,  8589,  9032,   7,   6, UNI_WCHO }   /* script=wancho */,
+  {     0,  9277,  5171,   3,   4, UNI_CHAM }   /* sc=cham */,
+  {     0,  9277,  9724,   3,   4, UNI_PHNX }   /* sc=phnx */,
+  {     0,  9860,     0,   3,   0, UNI_VAI }   /* vai */,
+  {     4,   184,  7248,   2,  10, UNI_MISCARROWS }   /* ismiscarrows */,
+  {    68,  7738, 10135,   9,   3, UNI_XIDS }   /* xidstart=yes */,
+  {    21,   184,   567,   2,   2, UNI_NB }   /* isnb */,
+  {     8,  1417,  9216,  25,   4, UNI_CCC__84 }   /* canonicalcombiningclass=ccc84 */,
+  {     0,    21,  3421,   2,   4, UNI_RUMI }   /* inrumi */,
+  {     0,  4448,     0,   5,   0, UNI_BAMU }   /* bamum */,
+  {     1,  8589,  9460,   7,   4, UNI_ARMI }   /* script=armi */,
+  {     0,  7325,  7821,   3,   1, UNI_IN__8 }   /* in=8 */,
+  {     4,  9768,  4448,   4,   4, UNI_BAMU }   /* scx=bamu */,
+  {    16,  9488,  6012,   4,  13, UNI_VERTICALFORMS }   /* blk=verticalforms */,
+  {    34,  8589,  9728,   7,   4, UNI_MIAO }   /* script=plrd */,
+  {     0,  9444,  9397,   4,   3, UNI_AGE__2_DOT_1 }   /* age=2.1 */,
+  {     0,   719,     0,  30,   0, UNI_CUNEIFORMNUMBERS }   /* cuneiformnumbersandpunctuation */,
+  {     0,  9768,  3169,   4,   4, UNI_ETHI }   /* scx=ethi */,
+  {     0,  8780,  2010,   6,  22, UNI_MISCTECHNICAL }   /* block=miscellaneoustechnical */,
+  {     0, 10126,     0,   3,   0, UNI_vo_values_index }   /* vo= */,
+  {     7,  1988,  9836,  22,   4, UNI_LOE }   /* logicalorderexception=true */,
+  {     2,  8589,    57,   7,   2, UNI_SC__YI }   /* script=yi */,
+  {     0,  8400,  1025,   7,   2, -UNI_COMPEX }   /* compex=no */,
+  {     1,  3836,  8666,  17,   4, UNI_TIRH }   /* scriptextensions=tirh */,
+  {     1, 10060,     0,   3,   0, UNI_ri_values_index }   /* ri= */,
+  {     1,  8449,     0,   7,   0, UNI_hyphen_values_index }   /* hyphen= */,
+  {     0,  9488,  6829,   4,  11, UNI_MYANMAREXTB }   /* blk=myanmarextb */,
+  {     0,  5578,  8554,  14,   7, UNI_SB__LE }   /* sentencebreak=oletter */,
+  {    50,  6231,  3633,   3,  16, UNI_CYRILLICEXTA }   /* incyrillicextendeda */,
+  {     4, 10033, 10174,   3,   2, UNI_LB__XX }   /* lb=xx */,
+  {     0,   184,  9236,   3,   3, UNI_CWCM }   /* iscwcm */,
+  {     1,  3836,  8414,  17,   4, UNI_ELBA }   /* scriptextensions=elba */,
+  {     0,   184,  6277,   2,   7, UNI_MAHJONG }   /* ismahjong */,
+  {     0,  5791,  6906,  13,  11, UNI_JG__ROHINGYAYEH }   /* joininggroup=rohingyayeh */,
+  {     0,    11,     0,   3,   0, UNI_DIA }   /* dia */,
+  {     1,  9488,  3547,   4,  10, UNI_ALCHEMICAL }   /* blk=alchemical */,
+  {     0, 10060,  1025,   3,   2, -UNI_RI }   /* ri=no */,
+  {    23,  8954,  9255,   6,   5, -UNI__PERL_NCHAR }   /* nchar=false */,
+  {    11,  7738,    36,   9,   1, UNI_XIDS }   /* xidstart=t */,
+  {    16,  1628,     0,   4,   0, UNI_PHAG }   /* phag */,
+  {     0,  9488,  8351,   4,   7, UNI_CJKEXTA }   /* blk=cjkexta */,
+  {     5,  4916,  9825,   3,   3, UNI_TGLG }   /* istglg */,
+  {     2,  1417,  8835,  25,   5, UNI_WB__EB }   /* canonicalcombiningclass=ccc133 */,
+  {     1,   184,  3650,   3,  16, UNI_CYRILLICEXTB }   /* iscyrillicextendedb */,
+  {     7,  5986,  9372,  13,   3, UNI_NV__1_SLASH_4 }   /* numericvalue=1/4 */,
+  {     1, 10033,  6178,   3,   2, UNI_LB__ZW }   /* lb=zw */,
+  {    79,  1591,  3684,   3,  15, UNI_ETHIOPICEXT }   /* inethiopicextended */,
+  {     0,  8780,  4673,   6,  15, UNI_INHANGUL }   /* block=hangulsyllables */,
+  {     0,  4116,  2780,   3,   3, UNI_IDST }   /* isidst */,
+  {     0,  8780,  3169,   6,  18, UNI_ETHIOPICSUP }   /* block=ethiopicsupplement */,
+  {   195,  7325,  9991,   3,   3, UNI_IN__9 }   /* in=9.0 */,
+  {     1,  1537,  2549,  24,  20, UNI_INPC__TOPANDBOTTOMANDRIGHT }   /* indicpositionalcategory=topandbottomandright */,
+  {     2,  8589,  8888,   7,   4, UNI_HATR }   /* script=hatr */,
+  {    24,  9225,     0,   5,   0, UNI_XPOSIXCNTRL }   /* cntrl */,
+  {    17,  9768,  9568,   4,   4, UNI_GREK }   /* scx=grek */,
+  {     0,  9290,     0,   5,   0, UNI_math_values_index }   /* math= */,
+  {     0,  7218,    73,  10,   2, UNI_EMOD }   /* linebreak=em */,
+  {     0, 10333,  8597,   3,   6, UNI_SHRD }   /* issharada */,
+  {     1, 10129,  1025,   3,   2, -UNI_VS }   /* vs=no */,
   {     0,   184,   660,   3,  29, UNI_CJKEXTF }   /* iscjkunifiedideographsextensionf */,
-  {    72,  5578,     0,  13,   0, UNI_KANAEXTA }   /* kanaextendeda */,
-  {   129,  9113,  8445,   4,   3, UNI_CCC__107 }   /* ccc=107 */,
-  {     8,  6231,    39,  12,   2, UNI_XPOSIXDIGIT }   /* numerictype=de */,
-  {     0,  9365,    57,   4,   2, UNI_YI }   /* scx=yi */,
-  {    28,  7128,   697,  10,   2, UNI_WB__MN }   /* wordbreak=mn */,
-  {     2,  8170,     0,   7,   0, UNI_nfkdqc_values_index }   /* nfkdqc= */,
-  {     1,  1289,     0,  25,   0, UNI_SYMBOLSANDPICTOGRAPHSEXTA }   /* symbolsandpictographsexta */,
-  {     6,  2204,  9310,   3,   3, UNI_OSGE }   /* isosge */,
-  {     6,   184,  1030,   3,   3, UNI_COPT }   /* iscopt */,
-  {     5,  8424,  1338,   6,  24, UNI_ARABICPFB }   /* block=arabicpresentationformsb */,
-  {    90,  9093,  1622,   4,  23, UNI_LATINEXTADDITIONAL }   /* blk=latinextendedadditional */,
-  {    19,  9623,  2127,   3,  21, UNI_JG__HANIFIROHINGYAKINNAYA }   /* jg=hanifirohingyakinnaya */,
-  {    20,  3293,     1,   3,  41, UNI_UCASEXT }   /* inunifiedcanadianaboriginalsyllabicsextended */,
-  {    73,  6005,  5860,   3,  11, UNI_CHESSSYMBOLS }   /* inchesssymbols */,
-  {     3,  7128,   495,  10,   2, UNI_WB__NU }   /* wordbreak=nu */,
-  {   104,  5760,  8388,  13,   3, UNI_NV__700 }   /* numericvalue=700 */,
-  {    46,  8874,     3,   5,   1, -UNI_IDST }   /* idst=f */,
-  {     1,  6816,  1531,   3,  22, UNI_BYZANTINEMUSIC }   /* inbyzantinemusicalsymbols */,
-  {     0,  8886,  8527,   4,   5, UNI_SC__KTHI }   /* sc=kaithi */,
-  {     0,  9093,  4220,   4,  16, UNI_TANGUTCOMPONENTS }   /* blk=tangutcomponents */,
-  {     0,  5435,    26,  13,   1, UNI_BIDIM }   /* bidimirrored=y */,
-  {     1,  2232,     0,   6,   0, UNI_YIJING }   /* yijing */,
-  {     3,  9620,    27,   3,   2, UNI_LOWERCASELETTER }   /* gc=ll */,
-  {     1,  3671,  7796,  17,   8, UNI_BASS }   /* scriptextensions=bassavah */,
-  {     3,  1911,  2293,  22,  20, UNI_INSC__CONSONANTPLACEHOLDER }   /* indicsyllabiccategory=consonantplaceholder */,
-  {     0,  4717,     0,  15,   0, UNI_TAMILSUP }   /* tamilsupplement */,
-  {    19,  9093,  6646,   4,  11, UNI_INPAHAWHHMONG }   /* blk=pahawhhmong */,
-  {    51,  9113,  7747,   4,   2, UNI_CCC__28 }   /* ccc=28 */,
-  {     0,  9113,  8437,   5,   4, UNI_CCC__10 }   /* ccc=ccc10 */,
-  {     0,  8424,   921,   6,  18, UNI_INVS }   /* block=variationselectors */,
-  {     5,  2409,     0,   4,   0, UNI_MONG }   /* mong */,
-  {     1,  3254,   995,  18,   2, -UNI_RI }   /* regionalindicator=no */,
-  {     0,  1977,     0,  22,   0, UNI_nchar_values_index }   /* noncharactercodepoint= */,
-  {     2,   184,  1824,   3,  21, UNI_CJKCOMPATIDEOGRAPHSSUP }   /* iscjkcompatideographssup */,
-  {     1,  8424,  6171,   6,  12, UNI_MATHALPHANUM }   /* block=mathalphanum */,
-  {     4,  8884,     0,   5,   0, UNI_insc_values_index }   /* insc= */,
-  {     0,  9593,  2190,   3,  21, UNI_BC__PDI }   /* bc=popdirectionalisolate */,
-  {    14,  9647,  7700,   3,   8, UNI_NV__2_SLASH_3 }   /* nv=6.67e-01 */,
-  {    24,  8424,  6267,   6,   8, UNI_PHAISTOS }   /* block=phaistos */,
-  {     0,  8424,  8240,   6,   7, UNI_INSHARADA }   /* block=sharada */,
-  {     3,  9093,  2893,   4,  19, UNI_SUPARROWSC }   /* blk=supplementalarrowsc */,
-  {    12,   184,  8058,   2,   7, UNI_DSRT }   /* isdeseret */,
-  {     4,  9383,  1647,   4,  21, UNI_SHORTHANDFORMATCONTROLS }   /* inshorthandformatcontrols */,
-  {    19,  6918,  9753,  10,   2, UNI_LB__B2 }   /* linebreak=b2 */,
-  {     4,  8886,  8939,   3,   5, UNI_SC__TALE }   /* sc=taile */,
-  {     0,  3671,  9101,  17,   4, UNI_BUHD }   /* scriptextensions=buhd */,
-  {     7,  9365,  7118,   4,  10, UNI_WARA }   /* scx=warangciti */,
-  {   139,  8886,  6246,   3,   4, UNI_HUNG }   /* sc=hung */,
-  {     0,  8886,  9229,   3,   4, UNI_SC__LINB }   /* sc=linb */,
-  {     8,  9731,    34,   3,   2, UNI_WB__EX }   /* wb=ex */,
-  {     0,  9959,  8326,   4,   5, UNI_ZZZZ }   /* isunknown */,
-  {    49,  1257,     0,   2,   0, UNI_UPPERCASELETTER }   /* lu */,
-  {     1,  8886,  9213,   3,   4, UNI_LANA }   /* sc=lana */,
-  {     2,  4580,   393,   3,   2, UNI_INMRO }   /* inmro */,
-  {     5,  1158,  8290,   3,   6, UNI_INTAITHAM }   /* intaitham */,
-  {   322,  8086,   995,   7,   2, -UNI_GRBASE }   /* grbase=no */,
-  {     9,  3620,     0,   4,   0, UNI_MANI }   /* mani */,
-  {    23,  7332,     0,   4,   0, UNI_ITAL }   /* ital */,
-  {     0,  8233,  8282,   7,   7, UNI_SC__TGLG }   /* script=tagalog */,
-  {     0,  9593,  3074,   3,  18, UNI_BC__FSI }   /* bc=firststrongisolate */,
-  {     0,   184,  1192,   2,   4, UNI_KANA }   /* iskana */,
-  {     0,  8886,  6901,   6,   7, UNI_KHAR }   /* sc=kharoshthi */,
-  {     0,  7025,  7435,   3,   2, UNI_IN__11 }   /* in=11 */,
-  {     4,  5085,  4177,   4,  11, UNI_MATHOPERATORS }   /* inmathoperators */,
-  {    27,  9093,  5017,   4,  14, UNI_LATINEXTC }   /* blk=latinextendedc */,
-  {    65,  3128,     0,  17,   0, UNI_IDSB }   /* idsbinaryoperator */,
-  {     0,  9093,  2064,   4,  14, UNI_CJKRADICALSSUP }   /* blk=cjkradicalssup */,
-  {    33,  9121,  8864,   4,   5, -UNI_CWL }   /* cwl=false */,
-  {     3,  5213,  9734,  14,   3, UNI_NFCQC__Y }   /* nfcquickcheck=yes */,
-  {     0,  1362,  7723,  24,   2, UNI_CCC__18 }   /* canonicalcombiningclass=18 */,
-  {     0,  6005,   115,   4,  23, UNI_DIACRITICALS }   /* incombiningdiacriticalmarks */,
-  {     0,   184,  1030,   3,   5, UNI_COPT }   /* iscoptic */,
-  {     0,  8233,  9233,   7,   4, UNI_LISU }   /* script=lisu */,
-  {     0,  8412,   995,   6,   2, -UNI_BIDIC }   /* bidic=no */,
-  {     6,  3671,  8929,  17,   5, UNI_OSGE }   /* scriptextensions=osage */,
-  {    11,  2106,    70,  21,   2, UNI_GCB__PP }   /* graphemeclusterbreak=pp */,
-  {    66,  9909,   468,   3,  10, UNI_P }   /* ispunctuation */,
-  {    15,  9177,     0,   4,   0, UNI_HANO }   /* hano */,
-  {     1,  9093,  3308,   4,  18, UNI_SMALLKANAEXT }   /* blk=smallkanaextension */,
-  {    11,  6194,  6979,   3,   9, UNI_INOLDPERSIAN }   /* inoldpersian */,
-  {     7,  9608,  9461,   3,   4, UNI_EA__W }   /* ea=wide */,
-  {     2,  8233,  9081,   7,   4, UNI_AVST }   /* script=avst */,
-  {     2,  6005,  2950,   4,  16, UNI_HALFMARKS }   /* incombininghalfmarks */,
-  {   144,    21,  8562,   2,   6, UNI_INLYCIAN }   /* inlycian */,
-  {     3,  3671,  9301,  17,   4, UNI_ORKH }   /* scriptextensions=orkh */,
-  {     0,  5760,  8376,  13,   3, UNI_NV__500 }   /* numericvalue=500 */,
-  {     0,  5085,   330,   4,  19, UNI_MATHOPERATORS }   /* inmathematicaloperators */,
-  {     1,  9647,  7756,   3,   8, UNI_NV__7_SLASH_8 }   /* nv=8.75e-01 */,
-  {     9,  9093,   689,   4,   9, UNI_INCUNEIFORM }   /* blk=cuneiform */,
-  {     2,  8332,  9082,   3,   3, UNI_AVST }   /* isavst */,
-  {     1,  9313,   995,   4,   2, -UNI_PCM }   /* pcm=no */,
-  {     0,  9623,    87,   3,   2, UNI_JG__HE }   /* jg=he */,
-  {    21,  6828,  4284,  12,  13, UNI_BC__BN }   /* bidiclass=boundaryneutral */,
-  {     3,  1779,     0,  21,   0, UNI_CWT }   /* changeswhentitlecased */,
-  {     0,  3671,  9473,  17,   4, UNI_YI }   /* scriptextensions=yiii */,
-  {    33,  6948,     0,  10,   0, UNI_MISCARROWS }   /* miscarrows */,
-  {   268,    21,  7248,   2,   9, UNI_INKHUDAWADI }   /* inkhudawadi */,
-  {    38,  5565,  9656,  13,   3, UNI_JG__REH }   /* joininggroup=reh */,
-  {    24,  8233,  8944,   7,   5, UNI_SC__TAKR }   /* script=takri */,
-  {    66,  8886,  6243,   3,  12, UNI_HUNG }   /* sc=oldhungarian */,
-  {     0,     0,     0,  42,   0, UNI_UCASEXT }   /* unifiedcanadianaboriginalsyllabicsextended */,
-  {     0,  9153,   881,   4,   1, UNI_GCB__V }   /* gcb=v */,
-  {     0,  8233,  4946,   7,   4, UNI_CHAM }   /* script=cham */,
-  {     0,  9093,  1162,   4,  26, UNI_HALFANDFULLFORMS }   /* blk=halfwidthandfullwidthforms */,
-  {     1,  8424,  8303,   6,   7, UNI_INTIBETAN }   /* block=tibetan */,
-  {    66,  8685,   995,   4,   2, -UNI_XPOSIXXDIGIT }   /* hex=no */,
-  {    65,  9629,  9759,   3,   2, UNI_LB__H3 }   /* lb=h3 */,
-  {    13,  7916,     0,   8,   0, UNI_MAHJ }   /* mahajani */,
-  {   184,  9731,    18,   3,   2, UNI_RI }   /* wb=ri */,
-  {     2,   184,  3603,   2,  17, UNI_LETTERLIKESYMBOLS }   /* isletterlikesymbols */,
-  {     0,  4778,    58,   3,   4, UNI_UIDEO }   /* isuideo */,
-  {   289,  8640,   995,   6,   2, -UNI_XPOSIXUPPER }   /* upper=no */,
-  {     0,  9933,  3248,   7,   5, UNI_XPOSIXSPACE }   /* isxperlspace */,
-  {     0,  4627,  8904,  15,   5, UNI_NFCQC__M }   /* nfkcquickcheck=maybe */,
-  {     0,  9093,   831,   4,   6, UNI_ARROWS }   /* blk=arrows */,
-  {     1,  9113,  2733,   4,   2, UNI_CCC__1 }   /* ccc=ov */,
-  {     1,  7058,     0,  10,   0, UNI_SMALLFORMS }   /* smallforms */,
-  {     1,   184,  1036,   2,   2, UNI_CASEDLETTER }   /* islc */,
-  {     1,  2204,  3201,   3,  17, UNI_ORNAMENTALDINGBATS }   /* isornamentaldingbats */,
-  {    14,  4387,     0,  15,   0, UNI_CURRENCYSYMBOLS }   /* currencysymbols */,
-  {     0,  9623,  6120,   3,   3, UNI_JG__NYA }   /* jg=nya */,
-  {     0,  6231,     0,  12,   0, UNI_nt_values_index }   /* numerictype= */,
-  {    12,  8604,     0,   5,   0, UNI_QMARK }   /* qmark */,
-  {    38,   184,  2274,   3,  19, UNI_PC }   /* isconnectorpunctuation */,
-  {     1,  9647,  8981,   3,   4, UNI_NV__1_SLASH_40 }   /* nv=1/40 */,
-  {     2,  9349,     0,   4,   0, UNI_ROHG }   /* rohg */,
-  {     3,  9903,    62,   6,   5, UNI_XPOSIXGRAPH }   /* xposixgraph */,
-  {    42,  8886,  6690,   3,  11, UNI_SORA }   /* sc=sorasompeng */,
-  {     0,  6828,     0,  11,   0, UNI_BC__B }   /* bidiclass=b */,
-  {    59,  9093,  9217,   4,   3, UNI_INLAO }   /* blk=lao */,
-  {     0,  8424,  2590,   7,  18, UNI_COUNTINGROD }   /* block=countingrodnumerals */,
-  {     5,  8233,  8894,   7,   4, UNI_SC__LIMB }   /* script=limb */,
-  {     4,   184,  5283,   2,  14, UNI_PHONETICEXTSUP }   /* isphoneticextsup */,
-  {     0,  9365,  8699,   4,   5, UNI_BATK }   /* scx=batak */,
-  {     0,  3671,  4267,  17,   5, UNI_BAMU }   /* scriptextensions=bamum */,
-  {     1,  3248,     0,   6,   0, UNI_wspace_values_index }   /* space= */,
-  {     2,  9093,   719,   4,  16, UNI_ENCLOSEDALPHANUM }   /* blk=enclosedalphanum */,
-  {     0,  8424,  8550,   6,   6, UNI_INLEPCHA }   /* block=lepcha */,
-  {     1,  9623,  5936,   3,   7, UNI_JG__SEMKATH }   /* jg=semkath */,
-  {     1,  5339,  1059,  15,   2, UNI_SB__SE }   /* sentencebreak=sep */,
-  {     0,  8854,  9433,   5,   4, UNI_DASH }   /* dash=true */,
-  {    26,  2148,     0,  21,   0, UNI_PRTI }   /* inscriptionalparthian */,
-  {     2,  8886,  8859,   3,   5, UNI_SC__DOGR }   /* sc=dogra */,
-  {     0,  5565,  6099,  13,  12, UNI_JG__MALAYALAMNNA }   /* joininggroup=malayalamnna */,
-  {     1,  3671,  2085,  17,   8, UNI_CYRL }   /* scriptextensions=cyrillic */,
-  {     0,  7025,  9449,   3,   4, UNI_IN__12_DOT_1 }   /* in=v121 */,
-  {     1,  3671,  8944,  17,   4, UNI_TAKR }   /* scriptextensions=takr */,
-  {     0,  9365,  6183,   4,  12, UNI_MEND }   /* scx=mendekikakui */,
-  {    79,  8332,  2393,   3,   2, UNI_ANY }   /* isany */,
-  {     5,  8520,     3,   6,   1, -UNI_JOINC }   /* joinc=f */,
-  {     0,  9093,  7068,   4,  10, UNI_SUPARROWSA }   /* blk=suparrowsa */,
-  {    18,  3671,  9233,  17,   4, UNI_LISU }   /* scriptextensions=lisu */,
-  {     0,   184,  7844,   2,   8, UNI_GUJR }   /* isgujarati */,
-  {     3,   184,  7852,   2,   8, UNI_GURU }   /* isgurmukhi */,
-  {    64,  1497,  1855,   9,   2, UNI_CN }   /* category=cn */,
-  {     2,  3671,  2779,  17,   9, UNI_MONG }   /* scriptextensions=mongolian */,
-  {    24,  4672,     0,  15,   0, UNI_SARB }   /* oldsoutharabian */,
-  {     1,  9153,  5258,   4,  11, UNI_GCB__SM }   /* gcb=spacingmark */,
-  {     0,  8955,  8864,   4,   5, -UNI_IDC }   /* idc=false */,
-  {     6,  9365,  6898,   4,   4, UNI_KHAR }   /* scx=khar */,
-  {     0,  3671,  7860,  17,   4, UNI_HIRA }   /* scriptextensions=hira */,
-  {    12,  9365,  7365,   4,   9, UNI_PAUC }   /* scx=paucinhau */,
-  {     1,  8424,  3210,   6,   8, UNI_DINGBATS }   /* block=dingbats */,
-  {    16,  8424,   218,   7,  32, UNI_DIACRITICALSEXT }   /* block=combiningdiacriticalmarksextended */,
-  {   128,  6194,   125,   3,   2, UNI_OCR }   /* inocr */,
-  {    24,  3002,  5678,  18,   4, UNI_DT__NONE }   /* decompositiontype=none */,
-  {     1,  1497,  1844,   9,   2, UNI_PC }   /* category=pc */,
-  {     0,   184,  9089,   2,   4, UNI_BHKS }   /* isbhks */,
-  {     7,  5325,  9734,  14,   3, UNI_QMARK }   /* quotationmark=yes */,
-  {     0,  9093,  5552,   4,   6, UNI_IPAEXT }   /* blk=ipaext */,
-  {     0,  9620,  4829,   3,   5, UNI_XPOSIXDIGIT }   /* gc=digit */,
-  {     0,  1497,  3218,   9,  18, UNI_ZP }   /* category=paragraphseparator */,
-  {    40,   184,  9775,   2,   2, UNI_ZL }   /* iszl */,
-  {     0,  8424,  3980,   6,  16, UNI_LINEARBIDEOGRAMS }   /* block=linearbideograms */,
-  {     0,  9623,  7948,   3,   8, UNI_JG__SWASHKAF }   /* jg=swashkaf */,
-  {     1,  4627,  9734,  15,   3, UNI_NFKCQC__Y }   /* nfkcquickcheck=yes */,
-  {     0,  8233,  2333,   7,   4, UNI_SC__GLAG }   /* script=glag */,
-  {     1,  8406,  8864,   6,   5, -UNI_XPOSIXALPHA }   /* alpha=false */,
-  {    39,  3038,     0,  18,   0, UNI_ETHIOPICSUP }   /* ethiopicsupplement */,
-  {     2,  4582,     0,  15,   0, UNI_MERC }   /* meroiticcursive */,
-  {     6,   184,  6869,   3,   9, UNI_COMPATJAMO }   /* iscompatjamo */,
-  {     0,  8871,    33,   3,   2, UNI_SB__SE }   /* sb=se */,
-  {     5,  9113,  7611,   4,   2, UNI_CCC__14 }   /* ccc=14 */,
-  {     0,  5339,    34,  14,   2, UNI_SB__EX }   /* sentencebreak=ex */,
-  {     1,  3671,  5311,  17,  14, UNI_PHLP }   /* scriptextensions=psalterpahlavi */,
-  {     1,  1497,   878,   9,  10, UNI_CO }   /* category=privateuse */,
-  {     0,  7025,  7724,   3,   3, UNI_IN__8 }   /* in=8.0 */,
-  {     0,  6828,   835,  10,   2, UNI_BC__WS }   /* bidiclass=ws */,
-  {    24,   184,  5907,   2,  12, UNI_ETHIOPICEXTA }   /* isethiopicexta */,
-  {     3,  7128,  9773,  10,   2, UNI_WB__XX }   /* wordbreak=xx */,
-  {     1,  9365,  9353,   4,   4, UNI_RUNR }   /* scx=runr */,
-  {     0,  8424,   837,   6,  11, UNI_PHONETICEXT }   /* block=phoneticext */,
-  {     0,  9113,  8467,   5,   4, UNI_CCC__13 }   /* ccc=ccc13 */,
-  {     0,  3398,  9734,  18,   3, UNI_VS }   /* variationselector=yes */,
-  {     0,  3416,     0,  17,   0, UNI_ALCHEMICAL }   /* alchemicalsymbols */,
-  {    27,  8233,  1845,   7,   6, UNI_SC__ZYYY }   /* script=common */,
-  {     1,  8616,     0,   7,   0, UNI_STERM }   /* sterm=t */,
-  {     0,    21,  3418,   4,   8, UNI_ALCHEMICAL }   /* inalchemical */,
-  {    36,  8886,  8121,   3,   7, UNI_SC__LINA }   /* sc=lineara */,
-  {    16,  7018,  9695,  10,   3, UNI_IN__5 }   /* presentin=v50 */,
-  {     0,  8424,     0,   6,  42, UNI_UCASEXT }   /* block=unifiedcanadianaboriginalsyllabicsextended */,
-  {     0,  8233,  8859,   7,   4, UNI_SC__DOGR }   /* script=dogr */,
-  {    24,  5513,  8864,  13,   5, -UNI_GRBASE }   /* graphemebase=false */,
-  {    43,  8424,  7788,   6,   8, UNI_INBALINESE }   /* block=balinese */,
-  {     1,  8886,  7812,   3,   4, UNI_SC__DUPL }   /* sc=dupl */,
-  {     1,  9093,   414,   4,  32, UNI_INIDC }   /* blk=ideographicdescriptioncharacters */,
-  {     7,  8886,  9361,   3,   4, UNI_SARB }   /* sc=sarb */,
-  {     0,  4705,  7957,   3,   3, UNI_TAGB }   /* istagb */,
-  {     0,  9049,  7495,   4,   1, UNI_AGE__7 }   /* age=7 */,
-  {     4,  8233,  9345,   7,   4, UNI_RJNG }   /* script=rjng */,
-  {    11,  6580,     0,  11,   0, UNI_MYANMAREXTA }   /* myanmarexta */,
-  {     3,  1497,  2192,   9,   2, UNI_PD }   /* category=pd */,
-  {     3,  9365,  9117,   4,   4, UNI_CPRT }   /* scx=cprt */,
-  {     5,  1790,     0,   5,   0, UNI_TITLE }   /* title */,
-  {     0,  5835,     0,   5,   0, UNI_BIDIC }   /* bidic */,
-  {     2,  7018,  9548,  10,   3, UNI_IN__3 }   /* presentin=3.0 */,
-  {     0,  3868,  6635,  16,  11, UNI_SO }   /* generalcategory=othersymbol */,
-  {     0,  9629,  4631,   3,   2, UNI_LB__QU }   /* lb=qu */,
-  {    32,  8430,     0,   4,   0, UNI_CARI }   /* cari */,
-  {    13,  8338,  8864,   7,   5, -UNI_XPOSIXSPACE }   /* wspace=false */,
-  {     2,  7018,  7507,  10,   2, UNI_IN__12 }   /* presentin=12 */,
-  {     1,   184,  8709,   2,   5, UNI_BUHD }   /* isbuhid */,
-  {    13,  9731,  7293,   3,   9, UNI_WB__MB }   /* wb=midnumlet */,
-  {    28,  1136,  8864,  26,   5, -UNI_DI }   /* defaultignorablecodepoint=false */,
-  {    14,  8219,  8864,   7,   5, -UNI_PATSYN }   /* patsyn=false */,
-  {    68,  1867,     0,  22,   0, UNI_DIACRITICALSFORSYMBOLS }   /* diacriticalsforsymbols */,
-  {     0,  9365,  8072,   4,   7, UNI_ELYM }   /* scx=elymaic */,
-  {     1,  5017,     0,  14,   0, UNI_LATINEXTC }   /* latinextendedc */,
-  {     0,  9237,    26,   4,   1, UNI_LOE }   /* loe=y */,
-  {     0,  8886,  9217,   3,   3, UNI_LAO }   /* sc=lao */,
-  {     0,  9365,  2212,   5,   6, UNI_SINH }   /* scx=sinhala */,
-  {     3,  7025,  7507,   3,   2, UNI_IN__12 }   /* in=12 */,
-  {     0,  8586,    26,   6,   1, UNI_NFCQC__Y }   /* nfcqc=y */,
-  {    11,  9093,  8261,   4,   7, UNI_INSOYOMBO }   /* blk=soyombo */,
-  {     0,  8424,  2148,   6,  21, UNI_ININSCRIPTIONALPARTHIAN }   /* block=inscriptionalparthian */,
-  {     1,   184,  1411,   3,  23, UNI_DIACRITICALSFORSYMBOLS }   /* iscombiningmarksforsymbols */,
-  {     1,  9313,  9734,   4,   3, UNI_PCM }   /* pcm=yes */,
-  {     1,  8233,  9269,   7,   4, UNI_SC__MYMR }   /* script=mymr */,
-  {     0,  1158,  4718,   3,   4, UNI_INTAMIL }   /* intamil */,
-  {     0,  8233,  9173,   7,   4, UNI_SC__GURU }   /* script=guru */,
-  {     1,  3868,  1410,  16,  13, UNI_M }   /* generalcategory=combiningmark */,
-  {     0,   184,  8508,   2,   5, UNI_GREXT }   /* isgrext */,
-  {    84,  1713,     0,  22,   0, UNI_cwcf_values_index }   /* changeswhencasefolded= */,
-  {   281,  2453,     3,  20,   1, -UNI_TERM }   /* terminalpunctuation=f */,
-  {     0,  1450,  2178,   5,   5, UNI_GREEKEXT }   /* ingreekext */,
-  {     0,  8424,  2646,   6,  19, UNI_JAMOEXTA }   /* block=hanguljamoextendeda */,
-  {     0,  7420,    36,   8,   1, UNI_IDS }   /* idstart=t */,
-  {     1,  4642,   995,  15,   2, UNI_NFKDQC__N }   /* nfkdquickcheck=no */,
-  {    72,  9093,  8037,   4,   7, UNI_CJKEXTE }   /* blk=cjkexte */,
-  {     1,  8051,    26,   7,   1, UNI_COMPEX }   /* compex=y */,
-  {     5,  7419,     0,   4,   0, UNI_XIDS }   /* xids */,
-  {     0,  1844,     0,   2,   0, UNI_PC }   /* pc */,
-  {     4,  1362,  9515,  24,   3, UNI_CCC__214 }   /* canonicalcombiningclass=214 */,
-  {     0,    21,  8652,   2,   6, UNI_INWANCHO }   /* inwancho */,
-  {    46,  8886,  9405,   3,   4, UNI_TALU }   /* sc=talu */,
-  {     0,  8635,   995,   5,   2, -UNI_IDEO }   /* ideo=no */,
-  {    14,    21,  3603,   2,  17, UNI_LETTERLIKESYMBOLS }   /* inletterlikesymbols */,
-  {    84,  9093,   837,   4,  28, UNI_PHONETICEXTSUP }   /* blk=phoneticextensionssupplement */,
-  {     0,  5339,   721,  14,   2, UNI_SB__CL }   /* sentencebreak=cl */,
-  {     9,  5565,  2561,  13,   9, UNI_JG__YEHBARREE }   /* joininggroup=yehbarree */,
-  {    51,  8580,     0,   6,   0, UNI_nchar_values_index }   /* nchar= */,
-  {     0,  8424,  8275,   6,   7, UNI_SUPPUAB }   /* block=suppuab */,
-  {     2,  6005,  4864,   3,  13, UNI_CJKCOMPATFORMS }   /* incjkcompatforms */,
-  {     1,  9620,  1156,   3,   2, UNI_PO }   /* gc=po */,
-  {     6,  3002,  4801,  18,   6, UNI_DT__SQR }   /* decompositiontype=square */,
-  {   194,   262,     0,   2,   0, UNI_SM }   /* sm */,
-  {     1,  3671,  2837,  18,   8, UNI_SUND }   /* scriptextensions=sundanese */,
-  {     0,   184,  4792,   2,  15, UNI_ZANB }   /* iszanabazarsquare */,
-  {     1,  9365,  9265,   4,   4, UNI_MTEI }   /* scx=mtei */,
-  {    44,  3398,    36,  18,   1, UNI_VS }   /* variationselector=t */,
-  {    37,  8233,  7964,   7,   8, UNI_TFNG }   /* script=tifinagh */,
-  {    13,  3772,     0,  11,   0, UNI_BOPOMOFOEXT }   /* bopomofoext */,
-  {     3,   467,     0,  11,   0, UNI_P }   /* punctuation */,
-  {    31,  9647,  8364,   3,   4, UNI_NV__4000 }   /* nv=4000 */,
-  {    71,   184,   435,   2,   5, UNI__PERL_NCHAR }   /* isnchar */,
-  {    16,   184,  8840,   3,   4, UNI_XPOSIXCNTRL }   /* iscntrl */,
-  {     0,  3671,  8924,  17,   5, UNI_ORYA }   /* scriptextensions=oriya */,
-  {    10,  6690,     0,  11,   0, UNI_SORA }   /* sorasompeng */,
-  {     8,  8886,  9493,   3,   4, UNI_ZZZZ }   /* sc=zzzz */,
-  {    24,  7018,  9578,  10,   3, UNI_IN__6_DOT_3 }   /* presentin=6.3 */,
-  {   139,  6918,  8100,  10,   6, UNI_LB__HY }   /* linebreak=hyphen */,
-  {     0,  8424,  2798,   6,  19, UNI_OTTOMANSIYAQNUMBERS }   /* block=ottomansiyaqnumbers */,
-  {     3,  9647,  8352,   3,   6, UNI_NV__216000 }   /* nv=216000 */,
-  {     1,  2106,  3254,  21,  17, UNI_RI }   /* graphemeclusterbreak=regionalindicator */,
-  {     0,  9365,  6243,   4,  12, UNI_HUNG }   /* scx=oldhungarian */,
-  {     3,  9647,  8394,   3,   3, UNI_NV__800 }   /* nv=800 */,
-  {    27,  9093,  5311,   4,  14, UNI_INPSALTERPAHLAVI }   /* blk=psalterpahlavi */,
-  {     3,  9946,   107,   3,   5, UNI_S }   /* issymbol */,
-  {    66,  9093,  2984,   4,   6, UNI_INCOPTIC }   /* blk=coptic */,
-  {     0,  9093,  5617,   4,   9, UNI_INMALAYALAM }   /* blk=malayalam */,
-  {     0,  8854,     0,   5,   0, UNI_dash_values_index }   /* dash= */,
-  {     0,  9093,  3552,   4,  16, UNI_ETHIOPICEXT }   /* blk=ethiopicextended */,
-  {     4,   184,  2065,   3,  13, UNI_CJKRADICALSSUP }   /* iscjkradicalssup */,
-  {     1,  9049,  7507,   4,   4, UNI_AGE__12 }   /* age=12.0 */,
-  {     0,  9253,     0,   4,   0, UNI_MIAO }   /* miao */,
-  {    40,  8886,  8568,   3,   6, UNI_LYDI }   /* sc=lydian */,
-  {     0,  8233,  9305,   7,   4, UNI_SC__ORYA }   /* script=orya */,
-  {     0,  3671,  8538,  17,   4, UNI_KHOJ }   /* scriptextensions=khoj */,
-  {     0,  4447,  9461,  15,   4, UNI_EA__W }   /* eastasianwidth=wide */,
-  {    27,  3671,  9065,  17,   4, UNI_ARMI }   /* scriptextensions=armi */,
-  {     0,  9093,  3756,   4,   9, UNI_ARABICSUP }   /* blk=arabicsup */,
-  {     0,  8424,  2893,   6,  19, UNI_SUPARROWSC }   /* block=supplementalarrowsc */,
-  {     0,   184,  1411,   3,  12, UNI_M }   /* iscombiningmark */,
-  {     1,  6015,  6291,  12,  12, UNI_JT__R }   /* joiningtype=rightjoining */,
-  {     0,  9393,     0,   4,   0, UNI_SYRC }   /* syrc */,
-  {     0,  8332,  7774,   4,   6, UNI_ARMN }   /* isarmenian */,
-  {     0,  5565,  8658,  13,   6, UNI_JG__YUDHHE }   /* joininggroup=yudhhe */,
-  {     1,  9093,  7980,   4,   8, UNI_INUGARITIC }   /* blk=ugaritic */,
-  {     1,  9647,  9503,   3,   3, UNI_NV__1_SLASH_9 }   /* nv=1/9 */,
-  {     5,  9049,  9713,   4,   3, UNI_AGE__6_DOT_3 }   /* age=v63 */,
-  {     0,  6918,   495,  10,   2, UNI_LB__NU }   /* linebreak=nu */,
-  {     1,  6885,  2647,   3,  18, UNI_JAMOEXTA }   /* ishanguljamoextendeda */,
-  {     0,  9365,  3038,   4,   4, UNI_ETHI }   /* scx=ethi */,
-  {     3,  1532,     0,   1,   0, UNI_Z }   /* z */,
-  {    29,  9365,  9069,   4,   4, UNI_ARMN }   /* scx=armn */,
-  {     0,    21,  6767,   2,  11, UNI_YISYLLABLES }   /* inyisyllables */,
-  {     0,  9953,    67,   3,   4, UNI_VSSUP }   /* isvssup */,
-  {   101,  9365,  2484,   4,   4, UNI_MAND }   /* scx=mand */,
-  {     0,  9093,  8003,   5,   6, UNI_INBENGALI }   /* blk=bengali */,
-  {     1,  8886,  2741,   3,  19, UNI_MERO }   /* sc=meroitichieroglyphs */,
-  {    36,  8233,  9261,   7,   3, UNI_MRO }   /* script=mro */,
-  {   135,  9093,  2253,   4,  20, UNI_INANATOLIANHIEROGLYPHS }   /* blk=anatolianhieroglyphs */,
-  {     0,  9647,  8394,   3,   5, UNI_NV__80000 }   /* nv=80000 */,
-  {     1,  7239,     0,   9,   0, UNI_QAAI }   /* inherited */,
-  {     8,  9093,  7302,   4,   9, UNI_INNABATAEAN }   /* blk=nabataean */,
-  {     3,  2021,     0,  15,   0, UNI_TRANSPORTANDMAP }   /* transportandmap */,
-  {   144,   184,  6382,   2,  11, UNI_DOMINO }   /* isdominotiles */,
-  {     0,   629,     0,  30,   0, UNI_CJKEXTE }   /* cjkunifiedideographsextensione */,
-  {     1,   184,  4597,   2,  15, UNI_MISCPICTOGRAPHS }   /* ismiscpictographs */,
-  {     0,  9647,  7748,   3,   8, UNI_NV__17_SLASH_2 }   /* nv=8.50e+00 */,
-  {     0,  6828,   102,  10,   2, UNI_BC__ET }   /* bidiclass=et */,
-  {     3,  9365,  8610,   4,   6, UNI_RJNG }   /* scx=rejang */,
-  {     4,  5565,  3916,  13,  16, UNI_JG__HANIFIROHINGYAPA }   /* joininggroup=hanifirohingyapa */,
-  {     0,   184,  7788,   2,   4, UNI_BALI }   /* isbali */,
-  {     2,  6338,     1,  11,   1, -UNI_XPOSIXALPHA }   /* alphabetic=n */,
-  {     1,   184,  2985,   3,  17, UNI_COPTICEPACTNUMBERS }   /* iscopticepactnumbers */,
-  {     2,  9049,  9581,   4,   3, UNI_AGE__7 }   /* age=7.0 */,
-  {     0,  8233,  2212,   8,   3, UNI_SC__SINH }   /* script=sinh */,
-  {     1,  7884,     0,   8,   0, UNI_JAMOEXTB }   /* jamoextb */,
-  {     0,  8233,  7049,   8,   9, UNI_SAUR }   /* script=saurashtra */,
-  {     0,  1497,  4687,   9,  15, UNI_PS }   /* category=openpunctuation */,
-  {     0,   184,  2532,   2,   4, UNI_BRAH }   /* isbrah */,
-  {     4,  5835,  8864,  12,   5, -UNI_BIDIC }   /* bidicontrol=false */,
-  {     4,  8424,  7302,   6,   9, UNI_INNABATAEAN }   /* block=nabataean */,
-  {     0,  9093,   921,   4,  18, UNI_INVS }   /* blk=variationselectors */,
-  {     4,  9093,  9057,   4,   4, UNI_INAHOM }   /* blk=ahom */,
-  {   230,  3671,  3772,  17,   4, UNI_BOPO }   /* scriptextensions=bopo */,
-  {     0,  3671,     0,  17,   0, UNI_scx_values_index }   /* scriptextensions= */,
-  {     2,  8424,  4975,   6,  14, UNI_KANASUP }   /* block=kanasupplement */,
-  {     1,    21,  5604,   2,  13, UNI_LOWSURROGATES }   /* inlowsurrogates */,
-  {     0,  9599,     3,   3,   1, -UNI_CI }   /* ci=f */,
-  {     9,  9093,  1003,   4,  11, UNI_ENCLOSEDCJK }   /* blk=enclosedcjk */,
-  {     3,  3254,  8864,  18,   5, -UNI_RI }   /* regionalindicator=false */,
-  {   134,  9093,  8894,   4,   5, UNI_INLIMBU }   /* blk=limbu */,
-  {     0,  8886,  8191,   3,   7, UNI_OLCK }   /* sc=olchiki */,
-  {     6,  9623,  6087,   3,  12, UNI_JG__MALAYALAMNGA }   /* jg=malayalamnga */,
-  {     5,  9093,  6939,   4,   2, UNI_INVS }   /* blk=vs */,
-  {     2,  9113,  8725,   5,   4, UNI_CCC__16 }   /* ccc=ccc16 */,
-  {     3,  9093,  6027,   4,   5, UNI_INKHMER }   /* blk=khmer */,
-  {     2,  3671,  7118,  17,  10, UNI_WARA }   /* scriptextensions=warangciti */,
-  {    15,  8160,   781,   4,  20, UNI_ENCLOSEDIDEOGRAPHICSUP }   /* inenclosedideographicsup */,
-  {     0,  3671,  8324,  17,   7, UNI_ZZZZ }   /* scriptextensions=unknown */,
-  {     3,  9365,  6898,   4,  10, UNI_KHAR }   /* scx=kharoshthi */,
-  {   321,  9909,     0,   3,   0, UNI_P }   /* isp */,
-  {     1,  4705,  9414,   3,   3, UNI_TAVT }   /* istavt */,
-  {    40,  9093,  8944,   4,   5, UNI_INTAKRI }   /* blk=takri */,
-  {     2,  6885,  1363,   3,   3, UNI_HANO }   /* ishano */,
-  {     0,  2212,  2021,   4,   4, UNI_INHATRAN }   /* inhatran */,
-  {    12,  7995,     0,   7,   0, UNI_AVST }   /* avestan */,
-  {    48,  9909,  5492,   7,   5, UNI_POSIXALNUM }   /* isposixalnum */,
-  {     0,  6949,  3469,   4,  15, UNI_AGHB }   /* iscaucasianalbanian */,
-  {    38,  9647,  9025,   3,   4, UNI_NV__3_SLASH_20 }   /* nv=3/20 */,
-  {     0,   184,  4175,   2,  13, UNI_MATHOPERATORS }   /* ismathoperators */,
-  {    29,  5760,  7459,  13,   2, UNI_NV__21 }   /* numericvalue=21 */,
-  {     3,  1497,   206,   9,   2, UNI_PI }   /* category=pi */,
-  {     0,  9946,    17,   3,   1, UNI_SO }   /* isso */,
-  {     0,   184,  5786,   2,  13, UNI_VERTICALFORMS }   /* isverticalforms */,
-  {     2,  8960,  9433,   4,   4, UNI_IDS }   /* ids=true */,
-  {     4,  9093,  7148,   4,  10, UNI_YIRADICALS }   /* blk=yiradicals */,
-  {     0,  9049,  7446,   4,   1, UNI_AGE__2 }   /* age=2 */,
-  {     4,  4447,     0,  15,   0, UNI_ea_values_index }   /* eastasianwidth= */,
-  {     2,  8051,  9433,   7,   4, UNI_COMPEX }   /* compex=true */,
-  {     0,   509,     0,  20,   0, UNI_CJK }   /* cjkunifiedideographs */,
-  {     2,  8424,   865,   6,  28, UNI_SUPPUAA }   /* block=supplementaryprivateuseareaa */,
-  {     0,  7018,  7435,  10,   2, UNI_IN__11 }   /* presentin=11 */,
-  {     3,  8886,  9261,   3,   4, UNI_MRO }   /* sc=mroo */,
-  {    17,  9093,    42,   4,  26, UNI_CJKCOMPATIDEOGRAPHS }   /* blk=cjkcompatibilityideographs */,
-  {     0,  8884,  2768,   5,  10, UNI_INSC__TONELETTER }   /* insc=toneletter */,
-  {    12,  9767,     0,   2,   0, UNI_CASEDLETTER }   /* l& */,
-  {     0,  5565,  8964,  13,   5, UNI_JG__ZHAIN }   /* joininggroup=zhain */,
-  {     1,  9959,  1152,   5,   4, UNI_ANY }   /* isunicode */,
-  {     0,  9093,  7844,   4,   8, UNI_INGUJARATI }   /* blk=gujarati */,
-  {     0,   184,  3502,   3,  16, UNI_CYRILLICEXTA }   /* iscyrillicextendeda */,
-  {   273,  6194,  8192,   3,   6, UNI_OLCK }   /* inolchiki */,
-  {     7,   184,  8107,   2,   7, UNI_KNDA }   /* iskannada */,
-  {    36,  9093,  1867,   4,  12, UNI_DIACRITICALS }   /* blk=diacriticals */,
-  {     2,  9125,  8864,   4,   5, -UNI_CWT }   /* cwt=false */,
-  {   129,  1933,   995,  22,   2, -UNI_LOE }   /* logicalorderexception=no */,
-  {     2,  9093,  4268,   5,   7, UNI_BAMUMSUP }   /* blk=bamumsup */,
-  {     4,  9365,  7812,   4,   4, UNI_DUPL }   /* scx=dupl */,
-  {    24,  9113,  8463,   4,   3, UNI_CCC__129 }   /* ccc=129 */,
-  {     1,  8640,    36,   6,   1, UNI_XPOSIXUPPER }   /* upper=t */,
-  {     1,  8424,  4220,   6,  16, UNI_TANGUTCOMPONENTS }   /* block=tangutcomponents */,
-  {    88,  8424,  7148,   6,  10, UNI_YIRADICALS }   /* block=yiradicals */,
-  {     1,  3671,  2484,  17,   4, UNI_MAND }   /* scriptextensions=mand */,
-  {     0,  8233,  7892,   7,   4, UNI_SC__JAVA }   /* script=java */,
-  {    16,  9620,    32,   3,   2, UNI__PERL_SURROGATE }   /* gc=cs */,
-  {     2,  8424,   779,   6,  22, UNI_ENCLOSEDIDEOGRAPHICSUP }   /* block=enclosedideographicsup */,
-  {     5,  8424,  2665,   6,  19, UNI_JAMOEXTB }   /* block=hanguljamoextendedb */,
-  {     0,  9225,     0,   4,   0, UNI_LINA }   /* lina */,
-  {     1,  4705,  8297,   3,   6, UNI_TAVT }   /* istaiviet */,
-  {     0,  4705,  7965,   3,   7, UNI_TFNG }   /* istifinagh */,
-  {     0,  1386,     0,  10,   0, UNI_CJKSYMBOLS }   /* cjksymbols */,
-  {     0,  8424,  6948,   6,  10, UNI_MISCARROWS }   /* block=miscarrows */,
-  {     0,  8510,     0,   4,   0, UNI_ext_values_index }   /* ext= */,
-  {     0,  6918,  2368,  10,   2, UNI_LB__HL }   /* linebreak=hl */,
-  {     0,  9093,  4108,   4,  16, UNI_MYANMAREXTA }   /* blk=myanmarextendeda */,
-  {    32,  9365,  1146,   5,   3, UNI_SORA }   /* scx=sora */,
-  {     1,  7128,   495,  10,   7, UNI_WB__NU }   /* wordbreak=numeric */,
-  {     0,  9093,  7797,   5,   7, UNI_INBASSAVAH }   /* blk=bassavah */,
-  {     1,  8424,   446,   6,  18, UNI_IDEOGRAPHICSYMBOLS }   /* block=ideographicsymbols */,
-  {    12,  9623,  6785,   3,   3, UNI_JG__FEH }   /* jg=feh */,
-  {    35,  3671,    78,  17,   4, UNI_ARAB }   /* scriptextensions=arab */,
-  {     7,  8886,  2608,   3,  19, UNI_EGYP }   /* sc=egyptianhieroglyphs */,
-  {     0,  9365,  9413,   4,   4, UNI_TAVT }   /* scx=tavt */,
-  {     1,  6798,     0,  10,   0, UNI_ARABICEXTA }   /* arabicexta */,
-  {    41,  9623,  9641,   3,   3, UNI_JG__MIM }   /* jg=mim */,
-  {    32,  8424,  8268,   6,   7, UNI_SUPPUAA }   /* block=suppuaa */,
-  {     0,  4402,     0,  15,   0, UNI_PD }   /* dashpunctuation */,
-  {     0,  9629,    96,   3,  10, UNI_LB__AL }   /* lb=alphabetic */,
-  {     0,  9365,  9429,   4,   4, UNI_TIBT }   /* scx=tibt */,
-  {     3,  9647,  8376,   3,   4, UNI_NV__5000 }   /* nv=5000 */,
-  {     1,  8568,     0,   6,   0, UNI_LYDI }   /* lydian */,
-  {     2,  9647,  9739,   3,   2, UNI_NV__39 }   /* nv=39 */,
-  {     0,  8899,  9433,   5,   4, UNI_MATH }   /* math=true */,
-  {     6,  3868,  4140,  16,  16, UNI_PO }   /* generalcategory=otherpunctuation */,
-  {   298,   184,  9217,   2,   3, UNI_LAO }   /* islao */,
-  {     0,  8160,  1005,   4,   9, UNI_ENCLOSEDCJK }   /* inenclosedcjk */,
-  {     0,  9365,  4267,   4,   4, UNI_BAMU }   /* scx=bamu */,
-  {     2,  9731,  9611,   3,   3, UNI_WB__EB }   /* wb=ebg */,
-  {     0,  7018,  7660,  10,   3, UNI_IN__6 }   /* presentin=6.0 */,
-  {     3,  8510,  8864,   4,   5, -UNI_EXT }   /* ext=false */,
-  {    14,  8233,  9481,   7,   4, UNI_ZANB }   /* script=zanb */,
-  {     0,  8886,  7804,   3,   4, UNI_SC__BUGI }   /* sc=bugi */,
-  {     0,  5085,  6161,   4,  10, UNI_INMASARAMGONDI }   /* inmasaramgondi */,
-  {     0,  8616,   995,   6,   2, -UNI_STERM }   /* sterm=no */,
-  {     1,  5085,   480,   4,  29, UNI_MATHALPHANUM }   /* inmathematicalalphanumericsymbols */,
-  {     1,  1911,  8331,  22,   7, UNI_INSC__VISARGA }   /* indicsyllabiccategory=visarga */,
-  {     0,  6888,  9433,  10,   4, UNI_DIA }   /* diacritic=true */,
-  {     0,  5339,   125,  14,   2, UNI_LB__CR }   /* sentencebreak=cr */,
-  {     4,  8886,  3020,   3,   4, UNI_SC__DEVA }   /* sc=deva */,
-  {     1,  8233,  6992,   8,   3, UNI_SC__SOGD }   /* script=sogd */,
-  {     0,   184,   149,   3,  34, UNI_DIACRITICALSSUP }   /* iscombiningdiacriticalmarkssupplement */,
-  {     0,  8205,     0,   7,   0, UNI_OSMA }   /* osmanya */,
-  {     7,  8424,  2065,   7,  13, UNI_CJKRADICALSSUP }   /* block=cjkradicalssup */,
-  {    30,  2513,     0,  19,   0, UNI_ANCIENTGREEKNUMBERS }   /* ancientgreeknumbers */,
-  {    49,  9608,     9,   3,   2, UNI_EA__NA }   /* ea=na */,
-  {    12,  9626,  6515,   4,  10, UNI_JT__L }   /* jt=leftjoining */,
-  {     2,  7048,     0,   4,   0, UNI_SAUR }   /* saur */,
-  {   274,  6005,    43,   3,  15, UNI_CJKCOMPAT }   /* incjkcompatibility */,
-  {     0,  8886,  2202,   4,   3, UNI_SC__KALI }   /* sc=kali */,
-  {     0,  9623,  5381,   3,  14, UNI_JG__HAMZAONHEHGOAL }   /* jg=tehmarbutagoal */,
-  {     0,  9623,  9245,   3,   4, UNI_JG__MEEM }   /* jg=meem */,
-  {     0,  9593,  2817,   3,  19, UNI_BC__RLO }   /* bc=righttoleftoverride */,
-  {     1,  6816,  6839,   3,   9, UNI_BOXDRAWING }   /* inboxdrawing */,
-  {     0,  9093,  7365,   4,   9, UNI_INPAUCINHAU }   /* blk=paucinhau */,
-  {     5,  3002,    45,  18,   3, UNI_DT__COM }   /* decompositiontype=com */,
-  {     0,   184,  9281,   2,   4, UNI_NEWA }   /* isnewa */,
-  {     9,  2684,  5747,  19,  13, UNI_HST__NA }   /* hangulsyllabletype=notapplicable */,
-  {     2,  9093,  2741,   4,  19, UNI_MERO }   /* blk=meroitichieroglyphs */,
-  {    10,   184,    43,   3,  35, UNI_CJKCOMPATIDEOGRAPHSSUP }   /* iscjkcompatibilityideographssupplement */,
-  {     0,  8233,  9213,   7,   4, UNI_LANA }   /* script=lana */,
-  {     4,  8424,  1530,   6,  23, UNI_BYZANTINEMUSIC }   /* block=byzantinemusicalsymbols */,
-  {     1,  8332,    27,   3,   2, UNI_ALL }   /* isall */,
-  {     1,  1536,  3553,   3,  15, UNI_ETHIOPICEXT }   /* inethiopicextended */,
-  {    12,  5967,     0,   4,   0, UNI_HEBR }   /* hebr */,
-  {     8,  8424,  7884,   6,   8, UNI_JAMOEXTB }   /* block=jamoextb */,
-  {     1,  9365,  3620,   4,   4, UNI_MANI }   /* scx=mani */,
-  {     0,  5339,     0,  14,   0, UNI_sb_values_index }   /* sentencebreak= */,
-  {     3,  8424,  5896,   7,  11, UNI_CYRILLICEXTC }   /* block=cyrillicextc */,
-  {    84,  6885,  2666,   3,  18, UNI_JAMOEXTB }   /* ishanguljamoextendedb */,
-  {     0,  1084,    36,  26,   1, UNI_CWKCF }   /* changeswhennfkccasefolded=t */,
-  {     0,  5565,  6334,  13,   4, UNI_JG__NOON }   /* joininggroup=noon */,
-  {     0,  9365,   382,   4,   4, UNI_EGYP }   /* scx=egyp */,
-  {     0,  1362,    18,  24,   1, UNI_CCC__R }   /* canonicalcombiningclass=r */,
-  {     7,  9153,    18,   4,   2, UNI_RI }   /* gcb=ri */,
-  {     1,  8424,  2608,   6,  19, UNI_INEGYPTIANHIEROGLYPHS }   /* block=egyptianhieroglyphs */,
-  {     1,  8684,     0,   5,   0, UNI_ahex_values_index }   /* ahex= */,
-  {     0,  3293,  7981,   3,   7, UNI_INUGARITIC }   /* inugaritic */,
-  {     0,  9261,     0,   4,   0, UNI_MRO }   /* mroo */,
-  {     0,   184,  3227,   2,   9, UNI_Z }   /* isseparator */,
-  {     0,   659,     0,  30,   0, UNI_CJKEXTF }   /* cjkunifiedideographsextensionf */,
-  {     0,  9365,  2127,   4,   4, UNI_HAN }   /* scx=hani */,
-  {     2,  8424,  6027,   6,  12, UNI_KHMERSYMBOLS }   /* block=khmersymbols */,
-  {     5,  5760,  8981,  13,   3, UNI_NV__1_SLASH_4 }   /* numericvalue=1/4 */,
-  {     0,  9153,  5394,   4,   2, UNI_LB__H2 }   /* gcb=lv */,
-  {     0,  8233,  2253,   7,  20, UNI_HLUW }   /* script=anatolianhieroglyphs */,
-  {     0,  9049,  9677,   4,   3, UNI_AGE__2_DOT_1 }   /* age=v21 */,
-  {     1,  6316,  8864,  11,   5, -UNI_IDC }   /* idcontinue=false */,
-  {     0,  3868,  1844,  16,   2, UNI_PC }   /* generalcategory=pc */,
-  {     0,  6918,  4835,  10,  14, UNI_LB__CR }   /* linebreak=carriagereturn */,
-  {     1,  9113,  8802,   4,   2, UNI_CCC__31 }   /* ccc=31 */,
-  {     4,  8871,  8198,   3,   7, UNI_SB__LE }   /* sb=oletter */,
-  {     0,  9620,  7098,   3,  10, UNI_CN }   /* gc=unassigned */,
-  {     0,  9153,   262,   4,   2, UNI_GCB__SM }   /* gcb=sm */,
-  {     1,  9121,     0,   3,   0, UNI_CWL }   /* cwl */,
-  {     0,  9629,  4835,   3,  14, UNI_LB__CR }   /* lb=carriagereturn */,
-  {     0,  9365,  9337,   4,   4, UNI_QAAI }   /* scx=qaai */,
-  {     0,   117,   415,   3,  31, UNI_INIDC }   /* inideographicdescriptioncharacters */,
-  {    89,   184,  5435,   2,   5, UNI_BIDIM }   /* isbidim */,
-  {     1,  8886,  9265,   3,   4, UNI_MTEI }   /* sc=mtei */,
-  {     0,  9647,  9509,   3,   3, UNI_NV__2_SLASH_5 }   /* nv=2/5 */,
-  {     0,  9093,  4657,   4,  15, UNI_NARB }   /* blk=oldnortharabian */,
-  {     0,  4826,    26,   9,   1, UNI_XPOSIXXDIGIT }   /* hexdigit=y */,
-  {     0,  5760,  5409,  13,   7, UNI_NV__1000000 }   /* numericvalue=1000000 */,
-  {    12,  3128,   995,  18,   2, -UNI_IDSB }   /* idsbinaryoperator=no */,
-  {     0,  1003,     0,  27,   0, UNI_ENCLOSEDCJK }   /* enclosedcjklettersandmonths */,
-  {     0,   184,  5872,   3,  11, UNI_CYRILLICEXTA }   /* iscyrillicexta */,
-  {     0,  9093,  4387,   4,  15, UNI_CURRENCYSYMBOLS }   /* blk=currencysymbols */,
-  {     2,  5565,  6788,  13,  10, UNI_JG__AFRICANQAF }   /* joininggroup=africanqaf */,
-  {     7,   184,  2532,   2,   6, UNI_BRAH }   /* isbrahmi */,
-  {    25,   831,     0,   6,   0, UNI_ARROWS }   /* arrows */,
-  {     0,  9904,  1812,   5,   5, UNI_POSIXUPPER }   /* posixupper */,
-  {     0,  8406,  9433,   6,   4, UNI_XPOSIXALPHA }   /* alpha=true */,
-  {     2,  4849,    36,  14,   1, UNI_CI }   /* caseignorable=t */,
-  {     0,  3128,  8864,  18,   5, -UNI_IDSB }   /* idsbinaryoperator=false */,
-  {    32,  9946,     0,   3,   0, UNI_S }   /* iss */,
-  {     0,  4618,  2335,   4,  18, UNI_GLAGOLITICSUP }   /* inglagoliticsupplement */,
-  {    96,  8233,  7860,   7,   4, UNI_SC__HIRA }   /* script=hira */,
-  {     2,  9620,    25,   3,   1, UNI_S }   /* gc=s */,
-  {     3,  7025,  7660,   3,   3, UNI_IN__6 }   /* in=6.0 */,
-  {     3,  3964,     0,   6,   0, UNI_LATIN1 }   /* latin1 */,
-  {     1,  8424,  4864,   7,  13, UNI_CJKCOMPATFORMS }   /* block=cjkcompatforms */,
-  {     0,  3671,  9205,  17,   4, UNI_KNDA }   /* scriptextensions=knda */,
-  {     0,  8886,  8149,   3,   4, UNI_SC__MULT }   /* sc=mult */,
-  {    97,  8424,  8191,   6,   7, UNI_OLCK }   /* block=olchiki */,
-  {     3,  9093,  4961,   4,  14, UNI_HIGHSURROGATES }   /* blk=highsurrogates */,
-  {     0,  5760,  7683,  13,   2, UNI_NV__26 }   /* numericvalue=26 */,
-  {     2,  5565,  9381,  13,   4, UNI_JG__SHIN }   /* joininggroup=shin */,
-  {     1,  5565,  7392,  13,   9, UNI_JG__SYRIACWAW }   /* joininggroup=syriacwaw */,
-  {     1,  6885,  1600,   3,   5, UNI_HANG }   /* ishangul */,
-  {    56,  1713,   995,  22,   2, -UNI_CWCF }   /* changeswhencasefolded=no */,
-  {     4,  9093,  7374,   4,   9, UNI_INSAMARITAN }   /* blk=samaritan */,
-  {     1,  8424,  3308,   6,  18, UNI_SMALLKANAEXT }   /* block=smallkanaextension */,
-  {     0,   184,  8568,   2,   4, UNI_LYDI }   /* islydi */,
-  {     0,  1362,  1701,  24,   2, UNI_CCC__BR }   /* canonicalcombiningclass=br */,
-  {    20,  8685,     1,   4,   1, -UNI_XPOSIXXDIGIT }   /* hex=n */,
-  {     0,  6949,     9,   4,  16, UNI_CANS }   /* iscanadianaboriginal */,
-  {     0,  7788,     0,   4,   0, UNI_BALI }   /* bali */,
-  {   244,  8233,  4657,   7,  15, UNI_NARB }   /* script=oldnortharabian */,
-  {    10,   184,  1387,   3,   9, UNI_CJKSYMBOLS }   /* iscjksymbols */,
-  {     0,  8886,  8128,   3,   7, UNI_MAKA }   /* sc=makasar */,
-  {     1,  7025,  7502,   3,   1, UNI_IN__8 }   /* in=8 */,
-  {     0,  5045,     0,  14,   0, UNI_LATINEXTE }   /* latinextendede */,
-  {     0,  3236,    26,  18,   1, UNI__PERL_PATWS }   /* patternwhitespace=y */,
-  {    34,  8233,     0,   7,   0, UNI_sc_values_index }   /* script= */,
-  {     6,  9904,  7128,   5,   4, UNI_POSIXWORD }   /* posixword */,
-  {     0,   184,  2931,   3,   3, UNI_CHER }   /* ischer */,
-  {   326,   184,   510,   3,  19, UNI_CJK }   /* iscjkunifiedideographs */,
-  {     0,  9946,  8241,   3,   6, UNI_SHRD }   /* issharada */,
-  {     2,  3002,  3852,  18,   3, UNI_DT__FIN }   /* decompositiontype=fin */,
-  {    26,  9629,  5297,   3,  14, UNI_LB__PO }   /* lb=postfixnumeric */,
-  {     0,  8424,  5786,   6,  13, UNI_VERTICALFORMS }   /* block=verticalforms */,
-  {     2,  8424,  9233,   6,   4, UNI_LISU }   /* block=lisu */,
-  {     1,  3002,  6195,  18,  12, UNI_DT__NONCANON }   /* decompositiontype=noncanonical */,
-  {     0,  9623,     5,   3,   1, UNI_JG__E }   /* jg=e */,
-  {     0,  3180,     0,   3,   0, UNI_ALL }   /* all */,
-  {    56,  9313,     1,   4,   1, -UNI_PCM }   /* pcm=n */,
-  {     0,  8424,  6898,   6,  10, UNI_INKHAROSHTHI }   /* block=kharoshthi */,
-  {     0,  7108,  9433,  10,   4, UNI_XPOSIXUPPER }   /* uppercase=true */,
-  {     4,  3671,  9285,  17,   4, UNI_NKO }   /* scriptextensions=nkoo */,
-  {     0,  8100,  8864,   7,   5, -UNI_HYPHEN }   /* hyphen=false */,
-  {     2,  8886,  2148,   3,  21, UNI_PRTI }   /* sc=inscriptionalparthian */,
-  {   261,  8844,     3,   5,   1, -UNI_CWCF }   /* cwcf=f */,
-  {     4,  8424,  6838,   6,  10, UNI_BOXDRAWING }   /* block=boxdrawing */,
-  {     0,  8886,  8610,   3,   6, UNI_RJNG }   /* sc=rejang */,
-  {     0,   206,     0,   2,   0, UNI_PI }   /* pi */,
-  {     0,   184,   183,   2,  34, UNI_MISCPICTOGRAPHS }   /* ismiscellaneoussymbolsandpictographs */,
-  {    36,  9093,  7275,   4,   9, UNI_LATINEXTD }   /* blk=latinextd */,
-  {     0,  9185,     0,   4,   0, UNI_HMNG }   /* hmng */,
-  {     1,  7128,  7988,  10,   7, UNI_WB__LE }   /* wordbreak=aletter */,
-  {    33,  3398,     1,  18,   1, -UNI_VS }   /* variationselector=n */,
-  {     0,  9237,     0,   4,   0, UNI_loe_values_index }   /* loe= */,
-  {     0,  8424,  3631,   7,   3, UNI_INCHAM }   /* block=cham */,
-  {     0,  7420,  9734,   8,   3, UNI_IDS }   /* idstart=yes */,
-  {    39,  6928,    36,  10,   1, UNI_XPOSIXLOWER }   /* lowercase=t */,
-  {     0,  8886,    18,   6,   1, UNI_KHAR }   /* sc=khar */,
-  {     0,  1482,  3212,   4,   6, UNI_DINGBATS }   /* indingbats */,
-  {     0,  6015,     7,  12,   1, UNI_JT__C }   /* joiningtype=c */,
-  {    12,  3868,  6613,  16,  11, UNI_LO }   /* generalcategory=otherletter */,
-  {     0,  9626,    36,   3,   1, UNI_JT__T }   /* jt=t */,
-  {     0,  2212,  4479,   4,  13, UNI_INHANGUL }   /* inhangulsyllables */,
-  {    12,  5085,  6053,   4,  10, UNI_MAHJONG }   /* inmahjongtiles */,
-  {     0,  3818,     0,  18,   0, UNI_PE }   /* isclosepunctuation */,
-  {     0,  9647,  7428,   3,   8, UNI_NV__1_SLASH_10 }   /* nv=1.00e-01 */,
-  {     0,  8871,  8694,   3,   5, UNI_SB__AT }   /* sb=aterm */,
-  {    33,  9647,  8817,   3,   2, UNI_NV__34 }   /* nv=34 */,
-  {     0,  9593,  5255,   3,  14, UNI_BC__NSM }   /* bc=nonspacingmark */,
-  {     0,  9623,  8889,   3,   5, UNI_JG__KHAPH }   /* jg=khaph */,
-  {     0,  8871,    49,   3,   2, UNI_SB__AT }   /* sb=at */,
-  {    10,  9623,  2551,   3,  19, UNI_JG__BURUSHASKIYEHBARREE }   /* jg=burushaskiyehbarree */,
-  {     0,  8424,  8622,   6,   6, UNI_INTELUGU }   /* block=telugu */,
-  {     0,  1497,  5354,  10,  13, UNI_ZS }   /* category=spaceseparator */,
-  {     0,  6690,     0,   4,   0, UNI_SORA }   /* sora */,
-  {     0,  1362,  8463,  24,   3, UNI_CCC__129 }   /* canonicalcombiningclass=129 */,
-  {     1,  8233,  9429,   7,   4, UNI_TIBT }   /* script=tibt */,
-  {     0,  8424,  2949,   7,  17, UNI_HALFMARKS }   /* block=combininghalfmarks */,
-  {     0,  9093,  8484,   4,   6, UNI_INCHAKMA }   /* blk=chakma */,
-  {     0,  9647,  7540,   3,   8, UNI_NV__20000000 }   /* nv=20000000 */,
-  {    32,  5760,  9569,  13,   3, UNI_NV__5_SLASH_6 }   /* numericvalue=5/6 */,
-  {     0,   184,  5269,   2,  13, UNI_PATSYN }   /* ispatternsyntax */,
-  {     1,  5760,  8364,  13,   6, UNI_NV__400000 }   /* numericvalue=400000 */,
-  {    16,  1158,  8629,   3,   5, UNI_INTHAANA }   /* inthaana */,
-  {     0,  9113,  7691,   4,   2, UNI_CCC__36 }   /* ccc=36 */,
-  {     0,  1057,    36,  27,   1, UNI_PCM }   /* prependedconcatenationmark=t */,
-  {     3,   113,     0,  35,   0, UNI_DIACRITICALSFORSYMBOLS }   /* combiningdiacriticalmarksforsymbols */,
-  {     1,  5760,  7596,  13,   8, UNI_NV__3_SLASH_80 }   /* numericvalue=3.75e-02 */,
-  {     0,  9728,     0,   3,   0, UNI_vs_values_index }   /* vs= */,
-  {     0,  5760,  8352,  13,   6, UNI_NV__216000 }   /* numericvalue=216000 */,
-  {    77,    21,  8121,   2,   7, UNI_INLINEARA }   /* inlineara */,
-  {     1,  7018,  9716,  10,   3, UNI_IN__7 }   /* presentin=v70 */,
-  {     5,  6828,  3272,  10,  18, UNI_BC__RLI }   /* bidiclass=righttoleftisolate */,
-  {     0,  4821,  8864,  14,   5, -UNI_POSIXXDIGIT }   /* asciihexdigit=false */,
-  {     1,  2204,  8920,   3,   4, UNI_OGAM }   /* isogham */,
-  {    17,  9113,  9765,   4,   2, UNI_CCC__8 }   /* ccc=kv */,
-  {     6,  1911,  2966,  22,  18, UNI_INSC__CONSONANTSUBJOINED }   /* indicsyllabiccategory=consonantsubjoined */,
-  {     0,   184,  5487,   2,  13, UNI_XPOSIXDIGIT }   /* isdecimalnumber */,
-  {     0,  6005,  6859,   3,   9, UNI_CJKSTROKES }   /* incjkstrokes */,
-  {    32,  4462,     1,  15,   1, -UNI_GREXT }   /* graphemeextend=n */,
-  {    23,  8233,  6183,   7,   4, UNI_MEND }   /* script=mend */,
-  {   210,  8424,  5045,   6,  14, UNI_LATINEXTE }   /* block=latinextendede */,
-  {     1,  9113,  7502,   4,   1, UNI_CCC__8 }   /* ccc=8 */,
-  {   144,   779,     0,  29,   0, UNI_ENCLOSEDIDEOGRAPHICSUP }   /* enclosedideographicsupplement */,
-  {     1,  8424,  3552,   6,  17, UNI_ETHIOPICEXTA }   /* block=ethiopicextendeda */,
-  {   144,  1482,  4777,  24,  15, UNI_LOE }   /* indicpositionalcategory=visualorderleft */,
-  {    12,  1497,  1532,   9,   1, UNI_Z }   /* category=z */,
-  {    28,  9647,  5409,   3,   5, UNI_NV__10000 }   /* nv=10000 */,
-  {     5,  6816,  4268,   3,  14, UNI_BAMUMSUP }   /* inbamumsupplement */,
-  {     4,     7,     0,  18,   0, UNI_CANS }   /* canadianaboriginal */,
-  {     0,  9365,  6648,   5,   3, UNI_SHAW }   /* scx=shaw */,
-  {     0,  5565,  5692,  13,   3, UNI_JG__TAW }   /* joininggroup=taw */,
-  {     0,  6918,  8324,  10,   7, UNI_LB__XX }   /* linebreak=unknown */,
-  {    68,  9365,  9261,   4,   3, UNI_MRO }   /* scx=mro */,
-  {    15,    48,     0,   1,   0, UNI_P }   /* p */,
-  {    48,  8849,  9433,   5,   4, UNI_CWCM }   /* cwcm=true */,
-  {     0,  9901,    62,   8,   5, UNI_XPOSIXGRAPH }   /* isxposixgraph */,
-  {     1,  5565,  4537,  13,  15, UNI_JG__MANICHAEANGIMEL }   /* joininggroup=manichaeangimel */,
-  {   366,  3868,   106,  16,   6, UNI_S }   /* generalcategory=symbol */,
-  {     0,  9113,  9512,   4,   3, UNI_CCC__202 }   /* ccc=202 */,
-  {    68,  3948,  5787,   3,  12, UNI_VERTICALFORMS }   /* inverticalforms */,
-  {     0,  8598,    36,   6,   1, UNI__PERL_PATWS }   /* patws=t */,
-  {     0,  5760,  9503,  13,   3, UNI_NV__1_SLASH_9 }   /* numericvalue=1/9 */,
-  {     1,  9903,  1812,   6,   5, UNI_XPOSIXUPPER }   /* xposixupper */,
-  {     0,  9113,  9073,   4,   4, UNI_CCC__216 }   /* ccc=atar */,
-  {   257,  1187,     0,   2,   0, UNI_SK }   /* sk */,
-  {     0,  9647,  7564,   3,   8, UNI_NV__1_SLASH_320 }   /* nv=3.13e-03 */,
-  {     2,  6918,  1410,  10,  13, UNI_LB__CM }   /* linebreak=combiningmark */,
-  {     2,  9623,  4044,   3,  16, UNI_JG__MANICHAEANSAMEKH }   /* jg=manichaeansamekh */,
-  {     6,  2273,     0,  20,   0, UNI_PC }   /* connectorpunctuation */,
-  {     6,  1159,  5487,   3,   7, UNI_XPOSIXDIGIT }   /* nt=decimal */,
-  {     8,  9425,     0,   4,   0, UNI_THAI }   /* thai */,
-  {     0,  5565,  4567,  13,  15, UNI_JG__MANICHAEANZAYIN }   /* joininggroup=manichaeanzayin */,
-  {    13,  9093,   976,   4,  17, UNI_ANCIENTGREEKMUSIC }   /* blk=ancientgreekmusic */,
-  {     0,  4821,     3,  14,   1, -UNI_POSIXXDIGIT }   /* asciihexdigit=f */,
-  {     3,  5565,  4028,  13,  16, UNI_JG__MANICHAEANLAMEDH }   /* joininggroup=manichaeanlamedh */,
-  {     2,  5435,   995,  13,   2, -UNI_BIDIM }   /* bidimirrored=no */,
-  {     0,  3146,     0,  18,   0, UNI_PI }   /* initialpunctuation */,
-  {   402,  3868,  2192,  16,   2, UNI_PD }   /* generalcategory=pd */,
-  {     1,  9623,  6135,   3,  12, UNI_JG__MALAYALAMTTA }   /* jg=malayalamtta */,
-  {    74,   117,   447,   3,  31, UNI_IDEOGRAPHICSYMBOLS }   /* inideographicsymbolsandpunctuation */,
-  {    65,  9647,  7540,   3,   4, UNI_NV__2000 }   /* nv=2000 */,
-  {    85,  6991,     0,   7,   0, UNI_SOGD }   /* sogdian */,
-  {    18,  1497,  6613,   9,  11, UNI_LO }   /* category=otherletter */,
-  {     2,  3671,  1146,  18,   3, UNI_SORA }   /* scriptextensions=sora */,
-  {     0,  3671,   382,  17,   4, UNI_EGYP }   /* scriptextensions=egyp */,
-  {     3,  8884,  8704,   5,   5, UNI_INSC__BINDU }   /* insc=bindu */,
-  {    35,  9647,  7732,   3,   8, UNI_NV__5_SLASH_6 }   /* nv=8.33e-01 */,
-  {     0,  2212,  2667,   4,  17, UNI_JAMOEXTB }   /* inhanguljamoextendedb */,
-  {     8,   184,  9249,   2,   4, UNI_MERC }   /* ismerc */,
-  {     0,  5760,  7580,  13,   8, UNI_NV__7_SLASH_2 }   /* numericvalue=3.50e+00 */,
-  {     0,  9093,  7940,   4,   8, UNI_SPECIALS }   /* blk=specials */,
-  {   152,  7025,  9005,   3,   4, UNI_IN__12_DOT_1 }   /* in=12.1 */,
-  {   311,  9365,  8894,   4,   5, UNI_LIMB }   /* scx=limbu */,
-  {   145,  1362,    78,  24,   2, UNI_CCC__AR }   /* canonicalcombiningclass=ar */,
-  {     2,  9093,  2021,   4,  15, UNI_TRANSPORTANDMAP }   /* blk=transportandmap */,
-  {     0,  7419,     3,   9,   1, -UNI_XIDS }   /* xidstart=f */,
-  {     6,  3671,   983,  17,   5, UNI_GREK }   /* scriptextensions=greek */,
-  {    46,  3671,  7239,  17,   9, UNI_QAAI }   /* scriptextensions=inherited */,
-  {     0,  7025,  9704,   3,   3, UNI_IN__6 }   /* in=v60 */,
-  {     0,  4580,  2171,   4,   9, UNI_INMEETEIMAYEK }   /* inmeeteimayek */,
-  {    25,  9623,  5157,   3,  14, UNI_JG__MANICHAEANRESH }   /* jg=manichaeanresh */,
-  {     4,  3671,  2984,  17,   4, UNI_COPT }   /* scriptextensions=copt */,
-  {     0,  4580,  4125,   3,  15, UNI_MYANMAREXTB }   /* inmyanmarextendedb */,
-  {    10,  9946,  1482,   3,   3, UNI_SIND }   /* issind */,
-  {     0,  5565,  6756,  13,  11, UNI_JG__YEHWITHTAIL }   /* joininggroup=yehwithtail */,
-  {     8,  1911,  4342,  22,  15, UNI_INSC__CONSONANTMEDIAL }   /* indicsyllabiccategory=consonantmedial */,
-  {     0,  3868,  6624,  16,  11, UNI_NO }   /* generalcategory=othernumber */,
-  {     0,   184,  3552,   2,  11, UNI_ETHIOPICEXT }   /* isethiopicext */,
-  {     0,   184,  9285,   2,   3, UNI_NKO }   /* isnko */,
-  {    39,  6360,     0,  11,   0, UNI_CASEDLETTER }   /* casedletter */,
-  {     0,  9629,   184,   3,   2, UNI_LB__IS }   /* lb=is */,
-  {     0,  1911,  4919,  22,  14, UNI_INSC__GEMINATIONMARK }   /* indicsyllabiccategory=geminationmark */,
-  {     0,  6988,     0,  10,   0, UNI_SOGO }   /* oldsogdian */,
-  {     1,   184,  5017,   2,  14, UNI_LATINEXTC }   /* islatinextendedc */,
-  {     2,  1362,  8775,  25,   4, UNI_CCC__26 }   /* canonicalcombiningclass=ccc26 */,
-  {     5,  1482,  2479,  24,  14, UNI_INPC__BOTTOMANDRIGHT }   /* indicpositionalcategory=bottomandright */,
-  {     2,  1497,  1156,   9,   2, UNI_PO }   /* category=po */,
-  {     0,  9093,  1264,   4,  25, UNI_SUPERANDSUB }   /* blk=superscriptsandsubscripts */,
-  {    24,   117,  5553,   3,  12, UNI_IPAEXT }   /* inipaextensions */,
-  {     2,   184,   893,   2,  28, UNI_SUPPUAB }   /* issupplementaryprivateuseareab */,
-  {    37,  1497,  9108,   9,   2, UNI_MC }   /* category=mc */,
-  {     0,  7932,     0,   8,   0, UNI_radical_values_index }   /* radical= */,
-  {     0,   382,     0,   4,   0, UNI_EGYP }   /* egyp */,
-  {     0,  4361,  3112,   4,   6, UNI_INGEORGIAN }   /* ingeorgian */,
-  {     0,  5085,  7918,   4,   6, UNI_INMAHAJANI }   /* inmahajani */,
-  {     0,  1924,  9770,  10,   1, UNI_CASEDLETTER }   /* category=l_ */,
-  {   145,  2684,    36,  19,   1, UNI_GCB__T }   /* hangulsyllabletype=t */,
-  {     0,  9193,  6938,   4,  10, UNI_LB__H2 }   /* hst=lvsyllable */,
-  {     1,  3236,    36,  18,   1, UNI__PERL_PATWS }   /* patternwhitespace=t */,
-  {    25,  7248,     0,   9,   0, UNI_SIND }   /* khudawadi */,
-  {     0,  9049,     9,   4,   2, UNI_AGE__NA }   /* age=na */,
-  {    20,  8886,  8303,   3,   7, UNI_TIBT }   /* sc=tibetan */,
-  {     9,  6816,  7805,   3,   7, UNI_INBUGINESE }   /* inbuginese */,
-  {   192,  6005,   600,   3,  29, UNI_CJKEXTD }   /* incjkunifiedideographsextensiond */,
-  {     0,  9605,    45,   3,   6, UNI_DT__COM }   /* dt=compat */,
-  {     4,  3671,  7796,  17,   4, UNI_BASS }   /* scriptextensions=bass */,
-  {     1,  8233,  8310,   7,   7, UNI_SC__TIRH }   /* script=tirhuta */,
-  {     0,   184,  9101,   2,   4, UNI_BUHD }   /* isbuhd */,
-  {    32,  8424,  1599,   6,   6, UNI_INHANGUL }   /* block=hangul */,
-  {   320,  2204,  6980,   4,   8, UNI_XPEO }   /* isoldpersian */,
-  {     0,  2148,   317,   3,  32, UNI_SUPMATHOPERATORS }   /* insupplementalmathematicaloperators */,
-  {     0,  2142,  7312,   3,   8, UNI_INNEWTAILUE }   /* innewtailue */,
-  {     1,  8424,  1264,   6,  25, UNI_SUPERANDSUB }   /* block=superscriptsandsubscripts */,
-  {     0,  9093,  2665,   4,  19, UNI_JAMOEXTB }   /* blk=hanguljamoextendedb */,
-  {     0,  8424,  8526,   6,   6, UNI_INKAITHI }   /* block=kaithi */,
-  {     1,  9213,     0,   4,   0, UNI_LANA }   /* lana */,
-  {     5,  8332,  6800,   4,   8, UNI_ARABICEXTA }   /* isarabicexta */,
-  {     0,  5565,  4012,  13,  16, UNI_JG__MANICHAEANDALETH }   /* joininggroup=manichaeandaleth */,
-  {   158,  3671,  9281,  17,   4, UNI_NEWA }   /* scriptextensions=newa */,
-  {     0,   837,     0,  11,   0, UNI_PHONETICEXT }   /* phoneticext */,
-  {     0,  4372,     0,  15,   0, UNI_CONTROLPICTURES }   /* controlpictures */,
-  {     4,  8233,  4792,   7,  15, UNI_ZANB }   /* script=zanabazarsquare */,
-  {     1,  8424,  3705,   6,  17, UNI_SMALLFORMS }   /* block=smallformvariants */,
-  {     0,  1801,     3,  22,   1, -UNI_CWU }   /* changeswhenuppercased=f */,
-  {     1,  8023,     0,   7,   0, UNI_CJKEXTC }   /* cjkextc */,
-  {   384,  8424,  7221,   6,   9, UNI_EMOTICONS }   /* block=emoticons */,
-  {     4,  9093,  3164,   4,   9, UNI_LATINEXTA }   /* blk=latinexta */,
-  {    58,  4580,  2007,   3,   3, UNI_INMODI }   /* inmodi */,
-  {     0,  8100,    26,   7,   1, UNI_HYPHEN }   /* hyphen=y */,
-  {     0,  8424,  8261,   6,   7, UNI_INSOYOMBO }   /* block=soyombo */,
-  {    14,  3251,     3,   3,   1, -UNI_CE }   /* ce=f */,
-  {     1,  9113,  8475,   4,   3, UNI_CCC__132 }   /* ccc=132 */,
-  {    92,  9301,     0,   4,   0, UNI_ORKH }   /* orkh */,
-  {    27,  9093,  2393,   4,  20, UNI_INNYIAKENGPUACHUEHMONG }   /* blk=nyiakengpuachuehmong */,
-  {     0,  9365,  9045,   4,   4, UNI_ADLM }   /* scx=adlm */,
-  {     2,    21,  8610,   2,   6, UNI_INREJANG }   /* inrejang */,
-  {     2,  8233,  9249,   7,   4, UNI_MERC }   /* script=merc */,
-  {     0,  9629,  6459,   3,  11, UNI_LB__IN }   /* lb=inseperable */,
-  {     2,  9365,  8191,   4,   7, UNI_OLCK }   /* scx=olchiki */,
-  {     0,  9647,  7507,   3,   2, UNI_NV__12 }   /* nv=12 */,
-  {     4,  8628,     0,   6,   0, UNI_THAA }   /* thaana */,
-  {    40,  1362,  8735,  25,   4, UNI_CCC__18 }   /* canonicalcombiningclass=ccc18 */,
-  {     0,  8412,     0,   6,   0, UNI_bidic_values_index }   /* bidic= */,
-  {    58,  9647,  9580,   3,   2, UNI_NV__37 }   /* nv=37 */,
-  {    20,   184,  2893,   2,  19, UNI_SUPARROWSC }   /* issupplementalarrowsc */,
-  {     0,  9593,  3272,   3,  18, UNI_BC__RLI }   /* bc=righttoleftisolate */,
-  {     1,  1691,  5678,  22,   4, UNI_BPT__N }   /* bidipairedbrackettype=none */,
-  {     5,  1362,  8750,  25,   4, UNI_CCC__21 }   /* canonicalcombiningclass=ccc21 */,
-  {     0,  1773,   995,   6,   2, -UNI_CASED }   /* cased=no */,
-  {     3,  7128,    34,  10,   6, UNI_WB__EXTEND }   /* wordbreak=extend */,
-  {     0,  8424,  7194,   6,   9, UNI_ARABICPFB }   /* block=arabicpfb */,
-  {    30,  3002,  3852,  18,   5, UNI_DT__FIN }   /* decompositiontype=final */,
-  {     0,  6918,    34,  10,   2, UNI_LB__EX }   /* linebreak=ex */,
-  {     0,  6828,  5255,  10,  14, UNI_BC__NSM }   /* bidiclass=nonspacingmark */,
-  {     3,    21,  2254,   3,  19, UNI_INANATOLIANHIEROGLYPHS }   /* inanatolianhieroglyphs */,
-  {    11,  8332,  4822,   3,   4, UNI_ASCII }   /* isascii */,
-  {    38,  1362,  9073,  24,   4, UNI_CCC__216 }   /* canonicalcombiningclass=atar */,
-  {     0,   184,  9769,   2,   2, UNI_CASEDLETTER }   /* isl_ */,
-  {     0,  8424,  6051,   6,   7, UNI_MAHJONG }   /* block=mahjong */,
-  {     0,  6005,  2086,   3,  20, UNI_CYRILLICSUP }   /* incyrillicsupplementary */,
-  {     0,  8886,  9337,   3,   4, UNI_SC__QAAI }   /* sc=qaai */,
-  {     4,  9731,   495,   3,   7, UNI_WB__NU }   /* wb=numeric */,
-  {    65,  4705,  4718,   3,   4, UNI_TAML }   /* istamil */,
-  {    17,  6949,   987,   4,   2, UNI_CAKM }   /* iscakm */,
-  {     2,  3671,  9329,  17,   4, UNI_PRTI }   /* scriptextensions=prti */,
-  {     1,  3248,     1,   6,   1, -UNI_XPOSIXSPACE }   /* space=n */,
-  {     0,  6316,  9433,  11,   4, UNI_IDC }   /* idcontinue=true */,
-  {     1,  4080,     0,  10,   0, UNI_SM }   /* mathsymbol */,
-  {    32,  6005,  2931,   3,  17, UNI_CHEROKEESUP }   /* incherokeesupplement */,
-  {     2,  9629,  5953,   3,   2, UNI_LB__WJ }   /* lb=wj */,
-  {     1,   719,     0,  21,   0, UNI_ENCLOSEDALPHANUM }   /* enclosedalphanumerics */,
-  {     0,  2232,     0,  21,   0, UNI_YIJING }   /* yijinghexagramsymbols */,
-  {    45,  9731,  1188,   3,   8, UNI_WB__KA }   /* wb=katakana */,
-  {     0,  8424,   446,   6,  32, UNI_IDEOGRAPHICSYMBOLS }   /* block=ideographicsymbolsandpunctuation */,
-  {     0,  9309,     0,   4,   0, UNI_OSGE }   /* osge */,
-  {     1,  3450,     0,  17,   0, UNI_UCAS }   /* canadiansyllabics */,
-  {     0,  9620,  9108,   3,   2, UNI_MC }   /* gc=mc */,
-  {     1,  9085,     0,   4,   0, UNI_BATK }   /* batk */,
-  {    64,  8424,  5003,   6,  14, UNI_LATINEXTB }   /* block=latinextendedb */,
-  {   225,  3671,  7248,  17,   9, UNI_SIND }   /* scriptextensions=khudawadi */,
-  {    18,  8604,    26,   6,   1, UNI_QMARK }   /* qmark=y */,
-  {    16,  7230,     0,   9,   0, UNI_ext_values_index }   /* extender= */,
-  {     4,  8960,  8864,   4,   5, -UNI_IDS }   /* ids=false */,
-  {     2,  8424,  3110,   6,  11, UNI_GEORGIANSUP }   /* block=georgiansup */,
-  {     1,  2703,     0,   4,   0, UNI_IDST }   /* idst */,
-  {     0,  8424,  4762,   6,  15, UNI_VEDICEXT }   /* block=vedicextensions */,
-  {   209,  5760,  7436,  13,   8, UNI_NV__1_SLASH_9 }   /* numericvalue=1.11e-01 */,
-  {     0,  1911,  1434,  22,  24, UNI_INSC__CONSONANTSUCCEEDINGREPHA }   /* indicsyllabiccategory=consonantsucceedingrepha */,
-  {     5,  5526,     0,  13,   0, UNI_GREEKEXT }   /* greekextended */,
-  {     0,  6194,  8925,   3,   4, UNI_INORIYA }   /* inoriya */,
-  {     0,  3671,  8310,  17,   4, UNI_TIRH }   /* scriptextensions=tirh */,
-  {    21,   184,  9493,   2,   4, UNI_ZZZZ }   /* iszzzz */,
-  {    12,  9620,  3820,   3,  16, UNI_PE }   /* gc=closepunctuation */,
-  {    68,  3236,  8864,  18,   5, -UNI__PERL_PATWS }   /* patternwhitespace=false */,
-  {     0,  3671,  6183,  17,   4, UNI_MEND }   /* scriptextensions=mend */,
-  {   257,  1866,     0,   2,   0, UNI_SD }   /* sd */,
-  {     0,  9365,  9177,   4,   4, UNI_HANO }   /* scx=hano */,
-  {     0,  9093,  4717,   4,   8, UNI_TAMILSUP }   /* blk=tamilsup */,
-  {     0,  5760,  7500,  13,   8, UNI_NV__3_SLASH_16 }   /* numericvalue=1.88e-01 */,
-  {     1,  1362,  3433,  24,  17, UNI_WB__EB }   /* canonicalcombiningclass=attachedbelowleft */,
-  {     0,  2532,     0,   4,   0, UNI_BRAH }   /* brah */,
-  {    11,    21,  3164,   2,  18, UNI_LATINEXTADDITIONAL }   /* inlatinextadditional */,
-  {     1,  7018,  9006,  10,   3, UNI_IN__2_DOT_1 }   /* presentin=2.1 */,
-  {     0,  8886,  2127,   3,  14, UNI_SC__ROHG }   /* sc=hanifirohingya */,
-  {     5,  3002,  2709,  18,   3, UNI_DT__NAR }   /* decompositiontype=nar */,
-  {     0,  9731,  5625,   3,   2, UNI_WB__ML }   /* wb=ml */,
-  {     0,  9093,  2064,   4,  21, UNI_CJKRADICALSSUP }   /* blk=cjkradicalssupplement */,
-  {     0,  5760,  7604,  13,   8, UNI_NV__2_SLASH_5 }   /* numericvalue=4.00e-01 */,
-  {     1,  1497,   995,   9,   2, UNI_NO }   /* category=no */,
-  {     1,  8424,  5448,   6,  13, UNI_BLOCKELEMENTS }   /* block=blockelements */,
-  {     1,  8424,   149,   7,  34, UNI_DIACRITICALSSUP }   /* block=combiningdiacriticalmarkssupplement */,
-  {    24,  8424,  8031,   7,   6, UNI_CJKEXTD }   /* block=cjkextd */,
-  {    44,  5760,  3969,  13,   1, UNI_NV__1 }   /* numericvalue=1 */,
-  {    24,  3868,     1,  16,   1, UNI_N }   /* generalcategory=n */,
-  {     0,    21,  7996,   3,   6, UNI_INAVESTAN }   /* inavestan */,
-  {     3,  8424,    43,   7,   2, UNI_CJK }   /* block=cjk */,
-  {   419,  8424,  8709,   6,   5, UNI_INBUHID }   /* block=buhid */,
-  {    12,  9629,  5847,   3,  12, UNI_LB__SY }   /* lb=breaksymbols */,
-  {     0,  8424,  3756,   6,  16, UNI_ARABICSUP }   /* block=arabicsupplement */,
-  {    74,  5565,  5143,  13,  14, UNI_JG__MANICHAEANQOPH }   /* joininggroup=manichaeanqoph */,
-  {     0,  8424,  3536,   7,  16, UNI_CYRILLICEXTC }   /* block=cyrillicextendedc */,
-  {     3,  8634,     0,   6,   0, UNI_uideo_values_index }   /* uideo= */,
-  {     0,  3688,     0,  16,   0, UNI_STERM }   /* sentenceterminal */,
-  {     3,  1482,    61,   3,   4, UNI_INDOGRA }   /* indogra */,
-  {     0,  9453,     0,   3,   0, UNI_VAI }   /* vai */,
-  {     0,  5565,  8544,  13,   6, UNI_JG__LAMADH }   /* joininggroup=lamadh */,
-  {    22,  3739,   995,  17,   2, -UNI_UIDEO }   /* unifiedideograph=no */,
-  {     0,  5760,  9509,  13,   3, UNI_NV__2_SLASH_5 }   /* numericvalue=2/5 */,
-  {     0,    21,  3418,   4,  15, UNI_ALCHEMICAL }   /* inalchemicalsymbols */,
-  {   266,  5760,  7708,  13,   8, UNI_NV__15_SLASH_2 }   /* numericvalue=7.50e+00 */,
-  {    36,  5513,     3,  13,   1, -UNI_GRBASE }   /* graphemebase=f */,
-  {     0,  4580,  6560,   4,   9, UNI_INMEDEFAIDRIN }   /* inmedefaidrin */,
-  {     4,  8424,  4388,   7,  14, UNI_CURRENCYSYMBOLS }   /* block=currencysymbols */,
-  {     8,   184,  4933,   2,  14, UNI_INGREEK }   /* isgreekandcoptic */,
-  {     0,  8844,  9734,   5,   3, UNI_CWCF }   /* cwcf=yes */,
-  {     8,  4361,  3886,   4,   9, UNI_GEORGIANEXT }   /* ingeorgianext */,
-  {    10,   184,  6171,   2,  12, UNI_MATHALPHANUM }   /* ismathalphanum */,
-  {     2,  8424,  9397,   6,   4, UNI_TAGS }   /* block=tags */,
-  {     5,  9923,  8312,   4,   5, UNI_INTIRHUTA }   /* intirhuta */,
-  {    26,  5565,  6785,  13,   3, UNI_JG__FEH }   /* joininggroup=feh */,
-  {     1,  6918,   958,  10,   2, UNI_LB__CP }   /* linebreak=cp */,
-  {    29,   184,  2006,   2,   4, UNI_MODI }   /* ismodi */,
-  {     8,   995,     0,   2,   0, UNI_NO }   /* no */,
-  {     1,  5325,     3,  14,   1, -UNI_QMARK }   /* quotationmark=f */,
-  {     0,    25,     0,   1,   0, UNI_S }   /* s */,
-  {     3,  9093,  1889,   4,  22, UNI_EARLYDYNASTICCUNEIFORM }   /* blk=earlydynasticcuneiform */,
-  {     1,    21,  6898,   2,  10, UNI_INKHAROSHTHI }   /* inkharoshthi */,
-  {     0,   184,  6838,   2,  10, UNI_BOXDRAWING }   /* isboxdrawing */,
-  {     3,  9113,  8437,   5,   5, UNI_CCC__103 }   /* ccc=ccc103 */,
-  {   170,  9113,    18,   4,   1, UNI_CCC__R }   /* ccc=r */,
-  {     1,  5269,    26,  14,   1, UNI_PATSYN }   /* patternsyntax=y */,
-  {     0,  6816,  8710,   3,   4, UNI_INBUHID }   /* inbuhid */,
-  {     0,  9101,     0,   4,   0, UNI_BUHD }   /* buhd */,
-  {     0,  9093,  8079,   4,   7, UNI_INGRANTHA }   /* blk=grantha */,
-  {    25,  3671,  7804,  17,   8, UNI_BUGI }   /* scriptextensions=buginese */,
-  {     9,  7025,  9563,   3,   3, UNI_IN__5_DOT_1 }   /* in=5.1 */,
-  {     9,  6888,  8864,  10,   5, -UNI_DIA }   /* diacritic=false */,
-  {    15,  8424,  3772,   6,   8, UNI_INBOPOMOFO }   /* block=bopomofo */,
-  {    52,  9725,     0,   3,   1, UNI_VO__U }   /* vo=u */,
-  {     3,  7128,  7820,  10,   8, UNI_WB__EB }   /* wordbreak=ebasegaz */,
-  {     3,  8233,  9273,   7,   4, UNI_NARB }   /* script=narb */,
-  {     2,  9289,     0,   4,   0, UNI_NSHU }   /* nshu */,
-  {     0,  7025,  7446,   3,   1, UNI_IN__2 }   /* in=2 */,
-  {   192,  8424,  4204,   6,   9, UNI_SYRIACSUP }   /* block=syriacsup */,
-  {     0,  2493,   409,  20,   2, UNI_VO__TR }   /* verticalorientation=tr */,
-  {     0,  3671,  4657,  17,  15, UNI_NARB }   /* scriptextensions=oldnortharabian */,
-  {     0,  9911,     0,  10,   0, UNI_POSIXBLANK }   /* posixblank */,
-  {    43,  8886,  9233,   3,   4, UNI_LISU }   /* sc=lisu */,
-  {     2,  8886,  5617,   3,   9, UNI_SC__MLYM }   /* sc=malayalam */,
-  {     0,  7128,   138,  10,   2, UNI_WB__FO }   /* wordbreak=fo */,
-  {     5,  6027,     0,  12,   0, UNI_KHMERSYMBOLS }   /* khmersymbols */,
-  {     0,  8233,  9085,   7,   4, UNI_BATK }   /* script=batk */,
-  {    38,  2148,  4205,   3,  15, UNI_SYRIACSUP }   /* insyriacsupplement */,
-  {     3,  9593,  2433,   3,  20, UNI_BC__RLE }   /* bc=righttoleftembedding */,
-  {     0,   446,     0,  32,   0, UNI_IDEOGRAPHICSYMBOLS }   /* ideographicsymbolsandpunctuation */,
-  {     2,   184,   407,   3,   6, UNI_XPOSIXCNTRL }   /* iscontrol */,
-  {   257,  7128,   125,  10,   2, UNI_LB__CR }   /* wordbreak=cr */,
-  {     0,  3467,     0,  17,   0, UNI_AGHB }   /* caucasianalbanian */,
-  {     1,   184,  1136,   2,  25, UNI_DI }   /* isdefaultignorablecodepoint */,
-  {    31,  8586,    47,   6,   1, UNI_NFCQC__M }   /* nfcqc=m */,
-  {     0,  2212,  2648,   4,  17, UNI_JAMOEXTA }   /* inhanguljamoextendeda */,
-  {    19,   184,  9265,   2,   4, UNI_MTEI }   /* ismtei */,
-  {     3,  8332,  4254,   4,  13, UNI_ARABICEXTA }   /* isarabicextendeda */,
-  {    16,  8884,  4188,   5,  16, UNI_INSC__SYLLABLEMODIFIER }   /* insc=syllablemodifier */,
-  {     8,  8424,  3164,   6,  18, UNI_LATINEXTADDITIONAL }   /* block=latinextadditional */,
-  {     7,  2106,  1164,  21,   2, UNI_LB__LF }   /* graphemeclusterbreak=lf */,
-  {     6,  9093,  6690,   4,  11, UNI_INSORASOMPENG }   /* blk=sorasompeng */,
-  {     3,  8128,     0,   7,   0, UNI_MAKA }   /* makasar */,
-  {     4,  8233,  9405,   7,   4, UNI_TALU }   /* script=talu */,
-  {   165,  8871,   721,   3,   2, UNI_SB__CL }   /* sb=cl */,
-  {     0,  1362,  7555,  24,   2, UNI_CCC__23 }   /* canonicalcombiningclass=23 */,
-  {    76,  7932,  9734,   8,   3, UNI_RADICAL }   /* radical=yes */,
-  {     1,  9731,  5967,   3,  12, UNI_LB__HL }   /* wb=hebrewletter */,
-  {    10,  8030,     0,   7,   0, UNI_CJKEXTD }   /* cjkextd */,
-  {   188,  9626,    18,   3,   1, UNI_JT__R }   /* jt=r */,
-  {     0,  3671,  9229,  17,   4, UNI_LINB }   /* scriptextensions=linb */,
-  {     0,  8886,  4657,   3,  15, UNI_NARB }   /* sc=oldnortharabian */,
-  {     8,  8233,     7,   7,  18, UNI_CANS }   /* script=canadianaboriginal */,
-  {     1,  9093,  1599,   4,   6, UNI_INHANGUL }   /* blk=hangul */,
-  {     0,  1362,  9518,  24,   3, UNI_CCC__BL }   /* canonicalcombiningclass=218 */,
-  {     1,  8886,  8065,   3,   7, UNI_ELBA }   /* sc=elbasan */,
-  {     0,  8598,  8864,   6,   5, -UNI__PERL_PATWS }   /* patws=false */,
-  {    74,  9901,  9921,   8,   5, UNI_XPOSIXPRINT }   /* isxposixprint */,
-  {     0,  9647,  8371,   3,   2, UNI_NV__32 }   /* nv=32 */,
-  {    39,  8598,   995,   6,   2, -UNI__PERL_PATWS }   /* patws=no */,
-  {   107,  6005,  5872,   3,  11, UNI_CYRILLICEXTA }   /* incyrillicexta */,
-  {     6,  3671,  9217,  17,   3, UNI_LAO }   /* scriptextensions=lao */,
-  {     0,  9647,  7435,   3,   2, UNI_NV__11 }   /* nv=11 */,
-  {     0,  5565,  6785,  13,   2, UNI_JG__FE }   /* joininggroup=fe */,
-  {     0,  5760,  7763,  13,   2, UNI_NV__19 }   /* numericvalue=19 */,
-  {     0,  3671,  9401,  17,   4, UNI_TALE }   /* scriptextensions=tale */,
-  {     0,   184,  5311,   2,  14, UNI_PHLP }   /* ispsalterpahlavi */,
-  {     0,  8919,     0,   5,   0, UNI_OGAM }   /* ogham */,
-  {     0,  9629,  8100,   3,   2, UNI_LB__HY }   /* lb=hy */,
-  {     0,  9647,  8669,   3,   5, UNI_NV__1_SLASH_320 }   /* nv=1/320 */,
-  {     8,  5565,  5695,  13,  13, UNI_JG__MANICHAEANTEN }   /* joininggroup=manichaeanten */,
-  {     0,  3671,  8939,  17,   5, UNI_TALE }   /* scriptextensions=taile */,
-  {     0,  1911,  1214,  22,  25, UNI_INSC__CONSONANTINITIALPOSTFIXED }   /* indicsyllabiccategory=consonantinitialpostfixed */,
-  {     6,  3671,  2741,  17,  19, UNI_MERO }   /* scriptextensions=meroitichieroglyphs */,
-  {     3,  8424,  3552,   6,  11, UNI_ETHIOPICEXT }   /* block=ethiopicext */,
-  {     0,  6978,     0,  10,   0, UNI_XPEO }   /* oldpersian */,
-  {     0,  8886,  8628,   3,   6, UNI_SC__THAA }   /* sc=thaana */,
-  {     1,   184,  7118,   2,  10, UNI_WARA }   /* iswarangciti */,
-  {   262,  1314,     0,  24,   0, UNI_ARABICPFA }   /* arabicpresentationformsa */,
-  {     0,  5213,    26,  14,   1, UNI_NFCQC__Y }   /* nfcquickcheck=y */,
-  {     0,  3671,  8128,  17,   4, UNI_MAKA }   /* scriptextensions=maka */,
-  {     0,  6828,    25,  10,   1, UNI_BC__S }   /* bidiclass=s */,
-  {     0,  8526,     0,   6,   0, UNI_KTHI }   /* kaithi */,
-  {   162,  8886,  7347,   3,   9, UNI_ORKH }   /* sc=oldturkic */,
-  {     0,  8580,  9734,   6,   3, UNI__PERL_NCHAR }   /* nchar=yes */,
-  {    65,  8886,   497,   5,   3, UNI_KHMR }   /* sc=khmer */,
-  {     0,  9365,  9465,   4,   4, UNI_XPEO }   /* scx=xpeo */,
-  {     3,  3416,     0,  10,   0, UNI_ALCHEMICAL }   /* alchemical */,
-  {     1,  8233,  9209,   7,   4, UNI_SC__KTHI }   /* script=kthi */,
-  {     0,  8886,  9373,   3,   4, UNI_SGNW }   /* sc=sgnw */,
-  {     0,  9909,     3,   3,   1, UNI_PF }   /* ispf */,
-  {     0,  8424,  8610,   6,   6, UNI_INREJANG }   /* block=rejang */,
-  {     4,  3868,   262,  16,   2, UNI_SM }   /* generalcategory=sm */,
-  {   358,  2708,  4254,   4,  13, UNI_ARABICEXTA }   /* inarabicextendeda */,
-  {     0,  5513,   995,  13,   2, -UNI_GRBASE }   /* graphemebase=no */,
-  {   144,  8879,  6268,   3,  11, UNI_PHAISTOS }   /* inphaistosdisc */,
-  {     1,  9365,  3467,   4,  17, UNI_AGHB }   /* scx=caucasianalbanian */,
-  {     8,  9365,  9241,   4,   4, UNI_MEDF }   /* scx=medf */,
-  {     1,  8424,  8317,   6,   7, UNI_UCASEXT }   /* block=ucasext */,
-  {     1,  9620,   697,   3,   2, UNI_MN }   /* gc=mn */,
-  {     0,  9097,    17,   4,   1, UNI_BPT__O }   /* bpt=o */,
-  {     4,   184,  4507,   2,  15, UNI_LOWERCASELETTER }   /* islowercaseletter */,
-  {     0,  8424,  7185,   6,   9, UNI_ARABICPFA }   /* block=arabicpfa */,
-  {   104,  8955,   995,   4,   2, -UNI_IDC }   /* idc=no */,
-  {   177,  6679,     1,  11,   1, -UNI_SD }   /* softdotted=n */,
-  {     2,  2493,  3373,  20,   7, UNI_VO__R }   /* verticalorientation=rotated */,
-  {    11,  9093,  8268,   4,   7, UNI_SUPPUAA }   /* blk=suppuaa */,
-  {   112,  1889,     0,  22,   0, UNI_EARLYDYNASTICCUNEIFORM }   /* earlydynasticcuneiform */,
-  {    44,  4447,  4290,  15,   7, UNI_EA__N }   /* eastasianwidth=neutral */,
-  {    10,  9629,  4877,   3,  14, UNI_LB__SA }   /* lb=complexcontext */,
-  {     2,  9864,  9839,  14,   7, UNI__PERL_NON_FINAL_FOLDS }   /* _perl_non_final_folds */,
-  {     2,  8886,  8944,   3,   5, UNI_SC__TAKR }   /* sc=takri */,
-  {     2,  1911,  4702,  22,  15, UNI_INSC__REGISTERSHIFTER }   /* indicsyllabiccategory=registershifter */,
-  {     1,    21,  3290,   2,   4, UNI_RUMI }   /* inrumi */,
-  {    22,  8424,  3932,   6,  16, UNI_HIGHPUSURROGATES }   /* block=highpusurrogates */,
-  {     3,  9593,  9644,   3,   3, UNI_BC__NSM }   /* bc=nsm */,
-  {     1,  1362,  9533,  24,   3, UNI_CCC__A }   /* canonicalcombiningclass=230 */,
-  {     0,  5760,  7540,  13,   6, UNI_NV__200000 }   /* numericvalue=200000 */,
-  {    19,  5760,  7487,  13,   1, UNI_NV__6 }   /* numericvalue=6 */,
-  {     1,  4705,  8311,   3,   6, UNI_TIRH }   /* istirhuta */,
-  {     0,  8424,  8010,   7,   6, UNI_CJKEXTA }   /* block=cjkexta */,
-  {     0,  7311,     0,   9,   0, UNI_TALU }   /* newtailue */,
-  {   177,  1497,  1767,   9,   2, UNI_NL }   /* category=nl */,
-  {     2,  3671,  7980,  17,   8, UNI_UGAR }   /* scriptextensions=ugaritic */,
-  {     0,  4705,  4718,   3,   7, UNI_TAMILSUP }   /* istamilsup */,
-  {     0,  8424,  2931,   7,  10, UNI_CHEROKEESUP }   /* block=cherokeesup */,
-  {    42,  8496,   995,   6,   2, -UNI_CWKCF }   /* cwkcf=no */,
-  {    35,  6949,     2,   5,   1, UNI_CARI }   /* iscari */,
-  {     1,  9093,  1289,   4,  25, UNI_SYMBOLSANDPICTOGRAPHSEXTA }   /* blk=symbolsandpictographsexta */,
-  {    42,  9593,  3218,   3,  18, UNI_BC__B }   /* bc=paragraphseparator */,
-  {     0,   184,  8859,   2,   4, UNI_DOGR }   /* isdogr */,
-  {     0,  8871,  1812,   3,   5, UNI_SB__UP }   /* sb=upper */,
-  {     0,  9113,  8745,   5,   4, UNI_CCC__20 }   /* ccc=ccc20 */,
-  {   167,  8424,  4582,   6,  15, UNI_INMEROITICCURSIVE }   /* block=meroiticcursive */,
-  {     2,  3671,  7049,  18,   3, UNI_SAUR }   /* scriptextensions=saur */,
-  {     8,  9647,  8400,   3,   4, UNI_NV__9000 }   /* nv=9000 */,
-  {     0,  7018,  9689,  10,   3, UNI_IN__4 }   /* presentin=v40 */,
-  {     2,  1362,  8439,  24,   3, UNI_CCC__103 }   /* canonicalcombiningclass=103 */,
-  {    39,  9605,  1223,   3,   4, UNI_DT__INIT }   /* dt=init */,
-  {     0,  1757,     1,  22,   1, -UNI_CWL }   /* changeswhenlowercased=n */,
-  {     0,  5487,     0,  13,   0, UNI_XPOSIXDIGIT }   /* decimalnumber */,
-  {    57,  9901,  8839,   8,   5, UNI_XPOSIXCNTRL }   /* isxposixcntrl */,
-  {     0,  4705,  8945,   3,   3, UNI_TAKR }   /* istakr */,
-  {     1,  8332,  7996,   3,   6, UNI_AVST }   /* isavestan */,
-  {   128,  9620,   995,   3,   2, UNI_NO }   /* gc=no */,
-  {     0,  8886,  7916,   3,   8, UNI_SC__MAHJ }   /* sc=mahajani */,
-  {   252,  6003,     3,  12,   1, -UNI_JOINC }   /* joincontrol=f */,
-  {   194,   184,   114,   3,  24, UNI_DIACRITICALS }   /* iscombiningdiacriticalmarks */,
-  {     0,  7419,   995,   9,   2, -UNI_XIDS }   /* xidstart=no */,
-  {    19,  8424,  2836,   6,  12, UNI_SUNDANESESUP }   /* block=sundanesesup */,
-  {     1,  9277,     0,   4,   0, UNI_NBAT }   /* nbat */,
-  {     1,  9605,  1264,   3,   5, UNI_DT__SUP }   /* dt=super */,
-  {     2,  9647,  8364,   3,   3, UNI_NV__400 }   /* nv=400 */,
-  {     6,  9113,  5138,   4,   2, UNI_CCC__7 }   /* ccc=nk */,
-  {     2,  9593,  5603,   3,   3, UNI_BC__RLO }   /* bc=rlo */,
-  {     0,  4829,     0,   5,   0, UNI_XPOSIXDIGIT }   /* digit */,
-  {     0,  6194,  7348,   3,   8, UNI_INOLDTURKIC }   /* inoldturkic */,
-  {   126,  1482,  6734,  24,  11, UNI_INPC__TOPANDRIGHT }   /* indicpositionalcategory=topandright */,
-  {    29,  5339,  1812,  14,   5, UNI_SB__UP }   /* sentencebreak=upper */,
-  {     0,  9113,   184,   4,   2, UNI_CCC__IS }   /* ccc=is */,
-  {    22,  9647,  7468,   3,   8, UNI_NV__3_SLASH_2 }   /* nv=1.50e+00 */,
-  {    71,  6315,    26,  12,   1, UNI_XIDC }   /* xidcontinue=y */,
-  {     1,  8424,  8949,   6,   5, UNI_VSSUP }   /* block=vssup */,
-  {   321,  9257,     0,   4,   0, UNI_MLYM }   /* mlym */,
-  {     0,  3671,  8622,  17,   6, UNI_TELU }   /* scriptextensions=telugu */,
-  {     0,  3671,  8142,  17,   7, UNI_MARC }   /* scriptextensions=marchen */,
-  {     0,  9620,  1532,   3,   1, UNI_Z }   /* gc=z */,
-  {    19,  8886,  9285,   3,   4, UNI_NKO }   /* sc=nkoo */,
-  {   265,  7940,     0,   8,   0, UNI_SPECIALS }   /* specials */,
-  {     8,  7025,  9566,   3,   3, UNI_IN__5_DOT_2 }   /* in=5.2 */,
-  {   167,  2708,  1340,   4,  22, UNI_ARABICPFB }   /* inarabicpresentationformsb */,
-  {     2,  2204,   262,   3,   3, UNI_OSMA }   /* isosma */,
-  {   312,   184,  5045,   2,  14, UNI_LATINEXTE }   /* islatinextendede */,
-  {     5,  3671,  2409,  17,   4, UNI_MONG }   /* scriptextensions=mong */,
-  {     0,   184,    11,   2,   3, UNI_DIA }   /* isdia */,
-  {     0,  9093,  2353,   4,  20, UNI_ININSCRIPTIONALPAHLAVI }   /* blk=inscriptionalpahlavi */,
-  {     1,  6646,     0,  11,   0, UNI_HMNG }   /* pahawhhmong */,
-  {    41,  7078,     0,  10,   0, UNI_SUPARROWSB }   /* suparrowsb */,
-  {     0,  6371,     0,  10,   0, UNI_DEP }   /* deprecated */,
-  {     3,  8233,  8562,   7,   6, UNI_LYCI }   /* script=lycian */,
-  {   136,  8233,  3730,   8,   3, UNI_SGNW }   /* script=sgnw */,
-  {     3,  8959,     3,   5,   1, -UNI_XIDS }   /* xids=f */,
-  {     0,  7128,  7293,  10,   6, UNI_WB__MN }   /* wordbreak=midnum */,
-  {     1,  8424,  1618,   6,   4, UNI_JAMO }   /* block=jamo */,
-  {     2,  8604,     0,   6,   0, UNI_qmark_values_index }   /* qmark= */,
-  {   198,  8508,  8864,   6,   5, -UNI_GREXT }   /* grext=false */,
-  {    16,  4849,     0,  14,   0, UNI_ci_values_index }   /* caseignorable= */,
-  {     2,  2984,     0,  18,   0, UNI_COPTICEPACTNUMBERS }   /* copticepactnumbers */,
-  {     1,  6005,   540,   3,  29, UNI_CJKEXTB }   /* incjkunifiedideographsextensionb */,
-  {     0,  1735,    36,  22,   1, UNI_CWCM }   /* changeswhencasemapped=t */,
-  {   128,  1243,     0,  20,   0, UNI_CE }   /* compositionexclusion */,
-  {     0,  5565,  5381,  13,  10, UNI_JG__TEHMARBUTA }   /* joininggroup=tehmarbuta */,
-  {     5,  6003,  8864,  12,   5, -UNI_JOINC }   /* joincontrol=false */,
-  {   146,  9365,  7203,   4,   9, UNI_BHKS }   /* scx=bhaiksuki */,
-  {   771,  9731,    34,   3,   6, UNI_WB__EXTEND }   /* wb=extend */,
-  {     7,  2106,    36,  21,   1, UNI_GCB__T }   /* graphemeclusterbreak=t */,
-  {    72,  5227,     0,  14,   0, UNI_nfdqc_values_index }   /* nfdquickcheck= */,
-  {     7,   184,  5835,   2,  11, UNI_BIDIC }   /* isbidicontrol */,
-  {     0,   184,  1618,   2,   4, UNI_JAMO }   /* isjamo */,
-  {    81,  8233,  9177,   7,   4, UNI_SC__HANO }   /* script=hano */,
-  {     2,  8854,  8864,   5,   5, -UNI_DASH }   /* dash=false */,
-  {     0,  1497,    74,   9,   2, UNI_ME }   /* category=me */,
-  {   203,  1362,  7540,  24,   2, UNI_CCC__20 }   /* canonicalcombiningclass=20 */,
-  {   324,  5283,     0,  14,   0, UNI_PHONETICEXTSUP }   /* phoneticextsup */,
-  {     2,  8233,  7772,   7,   8, UNI_SC__ARMN }   /* script=armenian */,
-  {   265,  9620,  4747,   3,  15, UNI_UPPERCASELETTER }   /* gc=uppercaseletter */,
-  {   324,  2204,  6097,   3,   3, UNI_OGAM }   /* isogam */,
-  {     0,  9647,  7487,   3,   1, UNI_NV__6 }   /* nv=6 */,
-  {   120,   808,     0,  29,   0, UNI_MISCARROWS }   /* miscellaneoussymbolsandarrows */,
-  {    30,  7025,  9683,   3,   3, UNI_IN__3_DOT_1 }   /* in=v31 */,
-  {   204,  5565,  6111,  13,  12, UNI_JG__MALAYALAMNYA }   /* joininggroup=malayalamnya */,
-  {     0,  8886,  8540,   5,   4, UNI_SC__KHOJ }   /* sc=khojki */,
-  {     0,  8424,   719,   6,  21, UNI_ENCLOSEDALPHANUM }   /* block=enclosedalphanumerics */,
-  {     0,  4687,     0,  15,   0, UNI_PS }   /* openpunctuation */,
-  {     2,  8699,     0,   5,   0, UNI_BATK }   /* batak */,
-  {     1,  9093,  9281,   4,   4, UNI_INNEWA }   /* blk=newa */,
-  {     0,  1779,  9433,  22,   4, UNI_CWT }   /* changeswhentitlecased=true */,
-  {     0,  3671,  8065,  17,   7, UNI_ELBA }   /* scriptextensions=elbasan */,
-  {     0,  8886,  9257,   3,   4, UNI_SC__MLYM }   /* sc=mlym */,
-  {     0,  9647,  7611,   3,   2, UNI_NV__14 }   /* nv=14 */,
-  {     0,  9093,  5604,   4,  13, UNI_LOWSURROGATES }   /* blk=lowsurrogates */,
-  {     8,  2453,  8864,  20,   5, -UNI_TERM }   /* terminalpunctuation=false */,
-  {     3,   184,  1736,   3,  20, UNI_CWCM }   /* ischangeswhencasemapped */,
-  {   276,  9909,  3468,   3,   3, UNI_PAUC }   /* ispauc */,
-  {   578,  9629,  9761,   3,   2, UNI_GCB__L }   /* lb=jl */,
-  {    46,  9221,     0,   4,   0, UNI_LATN }   /* latn */,
-  {     1,   184,  9457,   2,   4, UNI_WCHO }   /* iswcho */,
-  {     0,  5269,    36,  14,   1, UNI_PATSYN }   /* patternsyntax=t */,
-  {     0,  4705,  1791,   3,   8, UNI_TITLE }   /* istitlecase */,
-  {     5,  8598,     1,   6,   1, -UNI__PERL_PATWS }   /* patws=n */,
-  {     2,  6005,  5884,   3,  11, UNI_CYRILLICEXTB }   /* incyrillicextb */,
-  {   153,  9113,  9536,   4,   3, UNI_CCC__AR }   /* ccc=232 */,
-  {     9,   184,  2760,   2,  19, UNI_MODIFIERTONELETTERS }   /* ismodifiertoneletters */,
-  {   179,  8884,  1214,   5,   9, UNI_INSC__CONSONANT }   /* insc=consonant */,
-  {   259,  6949,    12,   5,   3, UNI_CARI }   /* iscarian */,
-  {     0,  1362,  8457,  24,   3, UNI_CCC__122 }   /* canonicalcombiningclass=122 */,
-  {   265,  9647,  5409,   3,   7, UNI_NV__1000000 }   /* nv=1000000 */,
-  {   546,  6316,     1,  11,   1, -UNI_IDC }   /* idcontinue=n */,
-  {     0,  8424,  8514,   6,   6, UNI_INHATRAN }   /* block=hatran */,
-  {     0,  8233,  9241,   7,   4, UNI_MEDF }   /* script=medf */,
-  {     0,  6918,  5346,  10,   2, UNI_LB__EB }   /* linebreak=eb */,
-  {     0,  1933,     0,  21,   0, UNI_LOE }   /* logicalorderexception */,
-  {     3,  8886,  8562,   3,   6, UNI_LYCI }   /* sc=lycian */,
-  {     0,  8424,  3586,   6,  17, UNI_INDICSIYAQNUMBERS }   /* block=indicsiyaqnumbers */,
-  {    81,  8510,  9433,   4,   4, UNI_EXT }   /* ext=true */,
-  {   194,  8886,  6602,   3,   4, UNI_SC__NAND }   /* sc=nand */,
-  {     0,  9365,  8079,   4,   4, UNI_GRAN }   /* scx=gran */,
-  {   392,  5760,  7476,  13,   8, UNI_NV__3_SLASH_20 }   /* numericvalue=1.50e-01 */,
-  {     0,  9365,  6554,   5,   3, UNI_SAMR }   /* scx=samr */,
-  {     5,  3868,  5500,  16,  13, UNI_ME }   /* generalcategory=enclosingmark */,
-  {   129,  1773,     3,   6,   1, -UNI_CASED }   /* cased=f */,
-  {     3,  9153,    34,   4,   2, UNI_GCB__EX }   /* gcb=ex */,
-  {    74,  8886,  2169,   3,  11, UNI_MTEI }   /* sc=meeteimayek */,
-  {     2,  9109,     0,   4,   0, UNI_CANS }   /* cans */,
-  {   323,  3671,  6992,  18,   3, UNI_SOGD }   /* scriptextensions=sogd */,
-  {     0,    21,  5031,   2,  14, UNI_LATINEXTD }   /* inlatinextendedd */,
-  {   298,  1933,  8864,  22,   5, -UNI_LOE }   /* logicalorderexception=false */,
-  {   218,  9049,  7668,   4,   3, UNI_AGE__6_DOT_2 }   /* age=6.2 */,
-  {     1,  9329,     0,   4,   0, UNI_PRTI }   /* prti */,
-  {    86,  9903,  3248,   6,   5, UNI_XPOSIXSPACE }   /* xposixspace */,
-  {     1,  8233,  8894,   7,   5, UNI_SC__LIMB }   /* script=limbu */,
-  {   140,  9365,  8568,   4,   4, UNI_LYDI }   /* scx=lydi */,
-  {     0,  9113,  6393,   4,  11, UNI_CCC__DA }   /* ccc=doubleabove */,
-  {    14,  3868,  9779,  16,   2, UNI_ZS }   /* generalcategory=zs */,
-  {     2,  2493,     0,  20,   1, UNI_VO__U }   /* verticalorientation=u */,
-  {     0,  9901,  2703,   3,   3, UNI_XIDS }   /* isxids */,
-  {     0,  3671,  2253,  17,  20, UNI_HLUW }   /* scriptextensions=anatolianhieroglyphs */,
-  {     0,  8233,  8914,   7,   5, UNI_NSHU }   /* script=nushu */,
-  {     0,  3671,  9425,  17,   4, UNI_THAI }   /* scriptextensions=thai */,
-  {   769,   184,  4864,   3,  13, UNI_CJKCOMPATFORMS }   /* iscjkcompatforms */,
-  {     0,  8616,  9434,   7,   3, UNI_STERM }   /* sterm=true */,
-  {     3,  8959,  9433,   5,   4, UNI_XIDS }   /* xids=true */,
-  {     0,  8233,  9457,   7,   4, UNI_WCHO }   /* script=wcho */,
-  {     0,  5760,  7611,  13,   2, UNI_NV__14 }   /* numericvalue=14 */,
-  {     0,  9629,   958,   3,   2, UNI_LB__CP }   /* lb=cp */,
-  {   369,  9049,  9698,   4,   3, UNI_AGE__5_DOT_1 }   /* age=v51 */,
-  {     0,  3002,  6195,  18,   8, UNI_DT__NONCANON }   /* decompositiontype=noncanon */,
-  {   290,  9365,  8324,   4,   7, UNI_ZZZZ }   /* scx=unknown */,
-  {     0,    21,  7900,   2,   8, UNI_KANAEXTA }   /* inkanaexta */,
-  {   164,  1977,  8864,  22,   5, -UNI__PERL_NCHAR }   /* noncharactercodepoint=false */,
-  {    20,  9365,  6992,   5,   3, UNI_SOGD }   /* scx=sogd */,
-  {     6,  9623,  4522,   3,  15, UNI_JG__MANICHAEANALEPH }   /* jg=manichaeanaleph */,
-  {     0,  8508,     0,   5,   0, UNI_GREXT }   /* grext */,
-  {     1,  9835,  9819,  14,  11, UNI__PERL_FOLDS_TO_MULTI_CHAR }   /* _perl_folds_to_multi_char */,
-  {     1,  8424,  4989,   6,  14, UNI_KANGXI }   /* block=kangxiradicals */,
-  {     1,  3671,  9265,  17,   4, UNI_MTEI }   /* scriptextensions=mtei */,
-  {    91,   865,     0,  28,   0, UNI_SUPPUAA }   /* supplementaryprivateuseareaa */,
-  {     1,    21,  1618,   2,   4, UNI_JAMO }   /* injamo */,
-  {     5,  1911,  8909,  22,   5, UNI_INSC__NUKTA }   /* indicsyllabiccategory=nukta */,
-  {    35,  5565,  5630,  13,  13, UNI_JG__MALAYALAMNNNA }   /* joininggroup=malayalamnnna */,
-  {     0,  6338,    26,  11,   1, UNI_XPOSIXALPHA }   /* alphabetic=y */,
-  {    35,  8886,  9057,   3,   4, UNI_AHOM }   /* sc=ahom */,
-  {   128,  7420,     1,   8,   1, -UNI_IDS }   /* idstart=n */,
-  {     0,  6338,  9734,  11,   3, UNI_XPOSIXALPHA }   /* alphabetic=yes */,
-  {    60,   184,   349,   2,  33, UNI_SUPSYMBOLSANDPICTOGRAPHS }   /* issupplementalsymbolsandpictographs */,
-  {   135,  6005,  3502,   3,  16, UNI_CYRILLICEXTA }   /* incyrillicextendeda */,
-  {     0,  8424,  3603,   6,  17, UNI_LETTERLIKESYMBOLS }   /* block=letterlikesymbols */,
-  {    32,  9113,  8770,   5,   4, UNI_CCC__25 }   /* ccc=ccc25 */,
-  {     0,  6828,  2722,  10,  19, UNI_BC__LRO }   /* bidiclass=lefttorightoverride */,
-  {     0,  8424,  1999,   6,  22, UNI_MODIFIERLETTERS }   /* block=spacingmodifierletters */,
-  {     0,  8424,  8017,   7,   6, UNI_CJKEXTB }   /* block=cjkextb */,
-  {     0,  9093,  4175,   4,  13, UNI_MATHOPERATORS }   /* blk=mathoperators */,
-  {     0,  6015,  6426,  12,  11, UNI_JT__D }   /* joiningtype=dualjoining */,
-  {     0,  9365,  8562,   4,   6, UNI_LYCI }   /* scx=lycian */,
-  {     0,  8634,     0,   5,   0, UNI_UIDEO }   /* uideo */,
-  {     0,  6816,  4268,   3,   7, UNI_BAMUMSUP }   /* inbamumsup */,
-  {     1,  1362,  9539,  24,   3, UNI_CCC__DB }   /* canonicalcombiningclass=233 */,
-  {     0,  1239,  9734,  25,   3, UNI_COMPEX }   /* fullcompositionexclusion=yes */,
-  {     0,   184,  4172,   2,  16, UNI_SUPMATHOPERATORS }   /* issupmathoperators */,
-  {   146,  5339,  2453,  15,   4, UNI_SB__ST }   /* sentencebreak=sterm */,
-  {     0,  8617,  9734,   5,   3, UNI_TERM }   /* term=yes */,
-  {     5,  2148,  6713,   3,  10, UNI_SUPERANDSUB }   /* insuperandsub */,
-  {     0,  6267,     0,  12,   0, UNI_PHAISTOS }   /* phaistosdisc */,
-  {     0,  9605,  7868,   3,   8, UNI_DT__ISO }   /* dt=isolated */,
-  {     0,  2204,  7349,   4,   7, UNI_ORKH }   /* isoldturkic */,
-  {   423,  9113,  8449,   5,   5, UNI_CCC__118 }   /* ccc=ccc118 */,
-  {     0,  3671,  8002,  17,   4, UNI_BENG }   /* scriptextensions=beng */,
-  {     0,  9593,  2192,   3,   3, UNI_BC__PDI }   /* bc=pdi */,
-  {     0,  8233,  7788,   7,   4, UNI_BALI }   /* script=bali */,
-  {     0,  1713,     1,  22,   1, -UNI_CWCF }   /* changeswhencasefolded=n */,
-  {    30,  9365,  8679,   4,   5, UNI_ADLM }   /* scx=adlam */,
-  {     0,  6005,    43,   3,  35, UNI_CJKCOMPATIDEOGRAPHSSUP }   /* incjkcompatibilityideographssupplement */,
-  {   196,  3002,  1264,  18,   5, UNI_DT__SUP }   /* decompositiontype=super */,
-  {     0,  4705,  8629,   3,   5, UNI_THAA }   /* isthaana */,
-  {   110,   184,  8532,   2,   6, UNI_KANBUN }   /* iskanbun */,
-  {     0,  6315,     3,  12,   1, -UNI_XIDC }   /* xidcontinue=f */,
-  {     7,  3002,  7836,  18,   8, UNI_DT__FRA }   /* decompositiontype=fraction */,
-  {   128,   184,    34,   2,   3, UNI_EXT }   /* isext */,
-  {     0,  3671,  2608,  17,  19, UNI_EGYP }   /* scriptextensions=egyptianhieroglyphs */,
-  {     3,  3868,  4829,  16,   5, UNI_XPOSIXDIGIT }   /* generalcategory=digit */,
-  {    16,   837,     0,  28,   0, UNI_PHONETICEXTSUP }   /* phoneticextensionssupplement */,
-  {     1,  2204,  1704,   4,   2, UNI_OLCK }   /* isolck */,
-  {   162,  3002,     0,  18,   0, UNI_dt_values_index }   /* decompositiontype= */,
-  {     0,  8424,  5860,   7,  11, UNI_CHESSSYMBOLS }   /* block=chesssymbols */,
-  {    60,  9647,  9554,   3,   3, UNI_NV__3_SLASH_4 }   /* nv=3/4 */,
-  {     3,  5760,  9506,  13,   3, UNI_NV__2_SLASH_3 }   /* numericvalue=2/3 */,
-  {     1,  9249,     0,   4,   0, UNI_MERC }   /* merc */,
-  {     0,  2708,  1316,   4,  22, UNI_ARABICPFA }   /* inarabicpresentationformsa */,
-  {    23,  3218,     0,  18,   0, UNI_ZP }   /* paragraphseparator */,
-  {     0,  9365,  9309,   4,   4, UNI_OSGE }   /* scx=osge */,
-  {    35,  9365,  3038,   4,   8, UNI_ETHI }   /* scx=ethiopic */,
-  {     0,  8849,     0,   5,   0, UNI_cwcm_values_index }   /* cwcm= */,
-  {     8,  9049,  7604,   4,   3, UNI_AGE__4 }   /* age=4.0 */,
-  {    13,  3671,  8072,  17,   4, UNI_ELYM }   /* scriptextensions=elym */,
-  {     6,   184,  5526,   2,   8, UNI_GREEKEXT }   /* isgreekext */,
-  {     0,  7068,     0,  10,   0, UNI_SUPARROWSA }   /* suparrowsa */,
-  {     5,  3868,  1767,  16,   2, UNI_NL }   /* generalcategory=nl */,
-  {     0,  9629,  3820,   3,  16, UNI_LB__CL }   /* lb=closepunctuation */,
-  {    16,  8424,  6279,   6,  12, UNI_PLAYINGCARDS }   /* block=playingcards */,
-  {     0,  7018,  9722,  10,   3, UNI_IN__9 }   /* presentin=v90 */,
-  {     0,  7018,  7502,  10,   1, UNI_IN__8 }   /* presentin=8 */,
-  {    14,   184,  3236,   2,  17, UNI__PERL_PATWS }   /* ispatternwhitespace */,
-  {    77,  8886,  9305,   3,   4, UNI_SC__ORYA }   /* sc=orya */,
-  {     0,  8854,  9734,   5,   3, UNI_DASH }   /* dash=yes */,
-  {     0,  1497,    47,  10,   1, UNI_SM }   /* category=sm */,
-  {     0,  9662,  9433,   3,   4, UNI_SD }   /* sd=true */,
-  {   147,  6015,  6958,  12,  10, UNI_JT__U }   /* joiningtype=nonjoining */,
-  {     0,  9620,  5591,   3,  13, UNI_ZL }   /* gc=lineseparator */,
-  {     0,  5565,  6097,  13,   5, UNI_JG__GAMAL }   /* joininggroup=gamal */,
-  {     1,  9365,  8894,   4,   4, UNI_LIMB }   /* scx=limb */,
-  {     8,  8424,  5422,   6,  13, UNI_AEGEANNUMBERS }   /* block=aegeannumbers */,
-  {     0,  1362,  7446,  24,   2, UNI_CCC__25 }   /* canonicalcombiningclass=25 */,
-  {     2,  2453,     0,  21,   0, UNI_TERM }   /* terminalpunctuation=t */,
-  {     3,  7025,  7462,   3,   1, UNI_IN__4 }   /* in=4 */,
-  {     5,  9647,  7463,   3,   1, UNI_NV__3 }   /* nv=3 */,
-  {     3,  5339,    36,  15,   1, UNI_SB__ST }   /* sentencebreak=st */,
-  {     0,  1158,  7957,   3,   7, UNI_INTAGBANWA }   /* intagbanwa */,
-  {     2,  8424,  2333,   6,  10, UNI_INGLAGOLITIC }   /* block=glagolitic */,
-  {   259,  9365,  9217,   4,   4, UNI_LAO }   /* scx=laoo */,
-  {     2,  9113,    78,   4,   2, UNI_CCC__AR }   /* ccc=ar */,
-  {    13,    96,     0,  10,   0, UNI_XPOSIXALPHA }   /* alphabetic */,
-  {     0,  7025,  9686,   3,   3, UNI_IN__3_DOT_2 }   /* in=v32 */,
-  {   168,  8233,  8538,   7,   6, UNI_SC__KHOJ }   /* script=khojki */,
-  {     2,  8886,  7796,   3,   4, UNI_BASS }   /* sc=bass */,
-  {     0,  9623,  4954,   3,   7, UNI_JG__HEHGOAL }   /* jg=hehgoal */,
-  {   132,  6828,  3182,  10,  18, UNI_BC__LRI }   /* bidiclass=lefttorightisolate */,
-  {     4,  9946,  1146,   3,   3, UNI_SORA }   /* issora */,
-  {     0,  9620,   112,   3,   2, UNI_SC }   /* gc=sc */,
-  {   576,  8424,  3038,   6,   8, UNI_INETHIOPIC }   /* block=ethiopic */,
-  {     2,  8424,   478,   6,  31, UNI_MATHALPHANUM }   /* block=mathematicalalphanumericsymbols */,
-  {     0,  9261,     0,   3,   0, UNI_MRO }   /* mro */,
-  {     0,  9365,  8550,   4,   6, UNI_LEPC }   /* scx=lepcha */,
-  {    74,  8684,     0,   4,   0, UNI_POSIXXDIGIT }   /* ahex */,
-  {   151,   184,  8045,   3,   6, UNI_CJKEXTF }   /* iscjkextf */,
-  {    21,  8233,  8622,   7,   6, UNI_SC__TELU }   /* script=telugu */,
-  {     1,  3671,  8128,  17,   7, UNI_MAKA }   /* scriptextensions=makasar */,
-  {    39,  9093,   629,   4,  30, UNI_CJKEXTE }   /* blk=cjkunifiedideographsextensione */,
-  {   212,  6231,   495,  12,   7, UNI_NT__NU }   /* numerictype=numeric */,
-  {     0,  2646,     0,  19,   0, UNI_JAMOEXTA }   /* hanguljamoextendeda */,
-  {    43,   184,  3110,   2,  11, UNI_GEORGIANSUP }   /* isgeorgiansup */,
-  {     2,   184,  3964,   2,  16, UNI_LATIN1 }   /* islatin1supplement */,
-  {     1,  5760,  7470,  13,   2, UNI_NV__50 }   /* numericvalue=50 */,
-  {   304,  8163,     0,   7,   0, UNI_nfkcqc_values_index }   /* nfkcqc= */,
-  {   147,  9365,  7311,   4,   9, UNI_TALU }   /* scx=newtailue */,
-  {     0,  7419,     0,   8,   0, UNI_XIDS }   /* xidstart */,
-  {     3,  2212,  1601,   4,   4, UNI_INHANGUL }   /* inhangul */,
-  {     0,   184,  9157,   2,   4, UNI_GONG }   /* isgong */,
-  {     1,  8854,   995,   5,   2, -UNI_DASH }   /* dash=no */,
-  {     0,  5760,  8354,  13,   4, UNI_NV__6000 }   /* numericvalue=6000 */,
-  {     1,  9093,  5526,   4,  13, UNI_GREEKEXT }   /* blk=greekextended */,
-  {     0,   184,  6267,   2,  12, UNI_PHAISTOS }   /* isphaistosdisc */,
-  {    25,  8886,  7048,   3,  10, UNI_SAUR }   /* sc=saurashtra */,
-  {     4,  4705,  8629,   3,   3, UNI_THAA }   /* isthaa */,
-  {     0,  8233,  8255,   8,   6, UNI_SIDD }   /* script=siddham */,
-  {    36,  9620,  6613,   3,  11, UNI_LO }   /* gc=otherletter */,
-  {     0,  8170,    26,   7,   1, UNI_DT__NONE }   /* nfkdqc=y */,
-  {   139,  6918,  5847,  10,  12, UNI_LB__SY }   /* linebreak=breaksymbols */,
-  {     0,  9647,  8985,   3,   4, UNI_NV__1_SLASH_64 }   /* nv=1/64 */,
-  {     0,  8254,     0,   4,   0, UNI_SIDD }   /* sidd */,
-  {   528,   184,  2086,   3,  10, UNI_CYRILLICSUP }   /* iscyrillicsup */,
-  {    28,  5760,  8382,  13,   5, UNI_NV__60000 }   /* numericvalue=60000 */,
-  {    12,   184,   250,   2,  33, UNI_MISCMATHSYMBOLSA }   /* ismiscellaneousmathematicalsymbolsa */,
-  {     0,  8884,  7028,   5,  10, UNI_INSC__PUREKILLER }   /* insc=purekiller */,
-  {    73,  5760,  7558,  13,   2, UNI_NV__13 }   /* numericvalue=13 */,
-  {     3,  6338,   995,  11,   2, -UNI_XPOSIXALPHA }   /* alphabetic=no */,
-  {     0,  9365,  4492,   4,  15, UNI_ARMI }   /* scx=imperialaramaic */,
-  {   512,  3671,  8859,  17,   4, UNI_DOGR }   /* scriptextensions=dogr */,
-  {    89,  9647,  8358,   3,   5, UNI_NV__30000 }   /* nv=30000 */,
-  {    64,  8254,     0,   7,   0, UNI_SIDD }   /* siddham */,
-  {     1,  9093,  4298,   5,   6, UNI_BRAI }   /* blk=braille */,
-  {   134,  8424,  4989,   6,   6, UNI_KANGXI }   /* block=kangxi */,
-  {     0,   113,     0,  25,   0, UNI_DIACRITICALS }   /* combiningdiacriticalmarks */,
-  {   404,  9049,  9575,   4,   3, UNI_AGE__6_DOT_1 }   /* age=6.1 */,
-  {     9,   184,  4462,   2,  14, UNI_GREXT }   /* isgraphemeextend */,
-  {   256,  9365,  9401,   4,   4, UNI_TALE }   /* scx=tale */,
-  {     4,    21,  5017,   2,  14, UNI_LATINEXTC }   /* inlatinextendedc */,
-  {     8,  7128,  7411,  11,   8, UNI_WB__WSEGSPACE }   /* wordbreak=wsegspace */,
-  {   513,  5213,     0,  14,   0, UNI_nfcqc_values_index }   /* nfcquickcheck= */,
-  {     0,   184,  5325,   2,  13, UNI_QMARK }   /* isquotationmark */,
-  {     0,   184,  7311,   2,   9, UNI_TALU }   /* isnewtailue */,
-  {     0,  5907,     0,  12,   0, UNI_ETHIOPICEXTA }   /* ethiopicexta */,
-  {   138,  2493,    18,  20,   1, UNI_VO__R }   /* verticalorientation=r */,
-  {   514,  3868,  9777,  16,   2, UNI_ZP }   /* generalcategory=zp */,
-  {   714,  8944,     0,   4,   0, UNI_TAKR }   /* takr */,
-  {     0,  3671,  9293,  17,   4, UNI_OGAM }   /* scriptextensions=ogam */,
-  {     0,  1362,  9545,  24,   3, UNI_CCC__IS }   /* canonicalcombiningclass=240 */,
-  {     0,  9647,  7660,   3,   8, UNI_NV__3_SLASH_5 }   /* nv=6.00e-01 */,
-  {   129,  8886,  2484,   3,   4, UNI_SC__MAND }   /* sc=mand */,
-  {   249,  9659,  8864,   3,   5, -UNI_RI }   /* ri=false */,
-  {   787,  1497,    32,   9,   2, UNI__PERL_SURROGATE }   /* category=cs */,
-  {     0,  8233,  9205,   7,   4, UNI_SC__KNDA }   /* script=knda */,
-  {     1,  8424,  3290,   6,   4, UNI_RUMI }   /* block=rumi */,
-  {    99,  7419,     0,   9,   0, UNI_xids_values_index }   /* xidstart= */,
-  {    12,  9237,  9734,   4,   3, UNI_LOE }   /* loe=yes */,
-  {   327,  8598,  9734,   6,   3, UNI__PERL_PATWS }   /* patws=yes */,
-  {   648,  1977,  9433,  22,   4, UNI__PERL_NCHAR }   /* noncharactercodepoint=true */,
-  {     0,  9093,  8317,   4,   7, UNI_UCASEXT }   /* blk=ucasext */,
-  {     0,  5339,    34,  14,   6, UNI_SB__EX }   /* sentencebreak=extend */,
-  {   318,  8520,  9433,   6,   4, UNI_JOINC }   /* joinc=true */,
-  {     0,  5835,     3,  12,   1, -UNI_BIDIC }   /* bidicontrol=f */,
-  {     2,  9093,   539,   4,  30, UNI_CJKEXTB }   /* blk=cjkunifiedideographsextensionb */,
-  {     0,  9593,     0,   3,   0, UNI_bc_values_index }   /* bc= */,
-  {    96,   184,  9241,   2,   4, UNI_MEDF }   /* ismedf */,
-  {    24,  5353,     0,  14,   0, UNI_ZS }   /* spaceseparator */,
-  {     4,  9909,  8227,   3,   6, UNI_PHAG }   /* isphagspa */,
-  {     0,  8332,  4808,   3,  13, UNI_ANCIENTSYMBOLS }   /* isancientsymbols */,
-  {    24,  3002,    45,  18,   6, UNI_DT__COM }   /* decompositiontype=compat */,
-  {     3,  2708,    80,   4,   8, UNI_ARABICMATH }   /* inarabicmath */,
-  {     7,  9623,  8544,   3,   6, UNI_JG__LAMADH }   /* jg=lamadh */,
-  {    69,  8879,  7357,   3,   8, UNI_PALM }   /* inpalmyrene */,
-  {     0,  2148,   866,   3,  27, UNI_SUPPUAA }   /* insupplementaryprivateuseareaa */,
-  {     1,  6005,  2086,   3,   7, UNI_INCYRILLIC }   /* incyrillic */,
-  {     0,  9113,  8775,   5,   4, UNI_CCC__26 }   /* ccc=ccc26 */,
-  {    91,  9647,  9033,   3,   4, UNI_NV__3_SLASH_80 }   /* nv=3/80 */,
-  {     1,  6569,     0,  11,   0, UNI_MISCSYMBOLS }   /* miscsymbols */,
-  {     3,   184,  2333,   2,   4, UNI_GLAG }   /* isglag */,
-  {    21,  8960,  9734,   4,   3, UNI_IDS }   /* ids=yes */,
-  {     0,  7025,  7548,   3,   3, UNI_IN__3_DOT_1 }   /* in=3.1 */,
-  {     1,  8233,  1599,   7,   6, UNI_SC__HANG }   /* script=hangul */,
-  {    13,  1911,  2768,  22,  10, UNI_INSC__TONELETTER }   /* indicsyllabiccategory=toneletter */,
-  {   284,  9647,  7460,   3,   8, UNI_NV__1_SLASH_7 }   /* nv=1.43e-01 */,
-  {   111,  6679,  8864,  11,   5, -UNI_SD }   /* softdotted=false */,
-  {   222,  9647,  8782,   3,   2, UNI_NV__27 }   /* nv=27 */,
-  {   149,   184,  1264,   2,  25, UNI_SUPERANDSUB }   /* issuperscriptsandsubscripts */,
-  {   279,  8424,  8919,   6,   5, UNI_INOGHAM }   /* block=ogham */,
-  {     0,  4849,   995,  14,   2, -UNI_CI }   /* caseignorable=no */,
-  {   260,   184,  4388,   3,  14, UNI_CURRENCYSYMBOLS }   /* iscurrencysymbols */,
-  {    10,  9728,   995,   3,   2, -UNI_VS }   /* vs=no */,
-  {     0,  3868,  9769,  16,   2, UNI_CASEDLETTER }   /* generalcategory=l_ */,
-  {     1,  5760,  7428,  13,   8, UNI_NV__1_SLASH_10 }   /* numericvalue=1.00e-01 */,
-  {     0,  2779,     0,   9,   0, UNI_MONG }   /* mongolian */,
-  {     1,   184,  8038,   3,   6, UNI_CJKEXTE }   /* iscjkexte */,
-  {     2,  2148,  6691,   3,  10, UNI_INSORASOMPENG }   /* insorasompeng */,
-  {   641,  9365,  8934,   4,   5, UNI_RUNR }   /* scx=runic */,
-  {     0,  5760,  8376,  13,   5, UNI_NV__50000 }   /* numericvalue=50000 */,
-  {    64,  8233,  9309,   7,   4, UNI_OSGE }   /* script=osge */,
-  {     0,  9365,  2333,   4,  10, UNI_GLAG }   /* scx=glagolitic */,
-  {     0,  9626,  6958,   3,  10, UNI_JT__U }   /* jt=nonjoining */,
-  {   130,  9623,  6908,   3,  10, UNI_JG__KNOTTEDHEH }   /* jg=knottedheh */,
-  {   809,  3671,  9261,  17,   4, UNI_MRO }   /* scriptextensions=mroo */,
-  {     0,  8424,  6027,   6,   5, UNI_INKHMER }   /* block=khmer */,
-  {     1,  3671,  4220,  17,   4, UNI_TANG }   /* scriptextensions=tang */,
-  {   780,  3671,  8282,  17,   7, UNI_TGLG }   /* scriptextensions=tagalog */,
-  {     0,   184,  4373,   3,  14, UNI_CONTROLPICTURES }   /* iscontrolpictures */,
-  {     0,  9904,  5492,   5,   5, UNI_POSIXALNUM }   /* posixalnum */,
-  {     0,  9093,  9453,   4,   3, UNI_INVAI }   /* blk=vai */,
-  {  1571,  1362,  8715,  25,   4, UNI_CCC__14 }   /* canonicalcombiningclass=ccc14 */,
-  {     0,  8886,   983,   3,   5, UNI_SC__GREK }   /* sc=greek */,
-  {     0,  9647,  8675,   3,   4, UNI_NV__1_SLASH_12 }   /* nv=1/12 */,
-  {     2,   349,     0,  33,   0, UNI_SUPSYMBOLSANDPICTOGRAPHS }   /* supplementalsymbolsandpictographs */,
-  {     4,  2142,  2394,   3,  19, UNI_INNYIAKENGPUACHUEHMONG }   /* innyiakengpuachuehmong */,
-  {    34,  9647,  9590,   3,   3, UNI_NV__9_SLASH_2 }   /* nv=9/2 */,
-  {  1320,  7128,  5919,  10,  12, UNI_WB__EX }   /* wordbreak=extendnumlet */,
-  {     2,  8233,  8550,   7,   4, UNI_LEPC }   /* script=lepc */,
-  {   210,  8886,  6991,   3,   7, UNI_SC__SOGD }   /* sc=sogdian */,
-  {     6,  9365,  8058,   4,   7, UNI_DSRT }   /* scx=deseret */,
+  {    21,  9488,  6133,   4,  12, UNI_ETHIOPICEXTA }   /* blk=ethiopicexta */,
+  {     0,  9768,  9038,   4,   4, UNI_YEZI }   /* scx=yezi */,
+  {     0,  5791,   341,  13,   2, UNI_JG__PE }   /* joininggroup=pe */,
+  {     3,  9346,     3,   4,   1, -UNI_IDC }   /* idc=f */,
+  {     1,  9508,  8829,   5,   5, UNI_CCC__132 }   /* ccc=ccc132 */,
+  {     8,  2032,     1,  22,   1, -UNI__PERL_NCHAR }   /* noncharactercodepoint=n */,
+  {     0,  8780,  4129,   6,   9, UNI_LATIN1 }   /* block=latin1sup */,
+  {     0,   184,    11,   2,   2, UNI_DI }   /* isdi */,
+  {     5,  9230,  1025,   5,   2, -UNI_CWCF }   /* cwcf=no */,
+  {     1, 10063, 10135,   3,   3, UNI_SD }   /* sd=yes */,
+  {     3,  5986,  8059,  13,   8, UNI_NV__1_SLASH_12 }   /* numericvalue=8.33e-02 */,
+  {    17, 10009,    68,   3,   3, UNI_DT__SUP }   /* dt=sup */,
+  {    12,  9528, 10135,   4,   3, UNI_CWU }   /* cwu=yes */,
+  {     0,  7318, 10093,  10,   3, UNI_IN__4_DOT_1 }   /* presentin=v41 */,
+  {    11,   184,  5228,   2,  14, UNI_LATINEXTB }   /* islatinextendedb */,
+  {    32,    62,     0,   5,   0, UNI_XPOSIXGRAPH }   /* graph */,
+  {    49,  3836,  8299,  17,   8, UNI_TFNG }   /* scriptextensions=tifinagh */,
+  {    11,  9277,  9688,   3,   4, UNI_NKO }   /* sc=nkoo */,
+  {     0,   184,  4273,   2,  16, UNI_MYANMAREXTA }   /* ismyanmarextendeda */,
+  {     1, 10060,    26,   3,   1, UNI_RI }   /* ri=y */,
+  {    19, 10310,  8661,   4,   5, UNI_INTIBETAN }   /* intibetan */,
+  {     8,  9768,  2608,   4,   4, UNI_BRAH }   /* scx=brah */,
+  {     0,  2288,  2743,   4,  17, UNI_JAMOEXTB }   /* inhanguljamoextendedb */,
+  {     0,  8509,  1035,   4,   9, UNI_ENCLOSEDCJK }   /* inenclosedcjk */,
+  {     0,  1273,  1025,  21,   2, -UNI_CE }   /* compositionexclusion=no */,
+  {     0,  8894,  9836,   6,   4, UNI_JOINC }   /* joinc=true */,
+  {     1,  9488,  7567,   4,   9, UNI_INKHUDAWADI }   /* blk=khudawadi */,
+  {     6,  9556,  5585,   4,   2, UNI_WB__EB }   /* gcb=eb */,
+  {     1,  3836,  2469,  17,  20, UNI_HMNP }   /* scriptextensions=nyiakengpuachuehmong */,
+  {     0,  9768,  9892,   4,   4, UNI_QAAI }   /* scx=zinh */,
+  {     1,  9444,  9844,   4,   4, UNI_AGE__11 }   /* age=v110 */,
+  {     5,  9768,  4793,   4,  15, UNI_MERC }   /* scx=meroiticcursive */,
+  {    16,  9275,  7328,   5,  10, UNI_INSC__PUREKILLER }   /* insc=purekiller */,
+  {     2,  9488,  3547,   4,  17, UNI_ALCHEMICAL }   /* blk=alchemicalsymbols */,
+  {     0,  9071,  1025,   4,   2, -UNI_XPOSIXXDIGIT }   /* hex=no */,
+  {     1,  9277,  9696,   3,   4, UNI_OGAM }   /* sc=ogam */,
+  {     2,  9768,  2684,   4,  19, UNI_EGYP }   /* scx=egyptianhieroglyphs */,
+  {     3,  9536, 10135,   4,   3, UNI_DEP }   /* dep=yes */,
+  {     7,  6554,     0,  11,   0, UNI_idc_values_index }   /* idcontinue= */,
+  {     1,  7438,  5585,  10,   2, UNI_WB__EB }   /* wordbreak=eb */,
+  {     3,  9768,  9820,   4,   4, UNI_TFNG }   /* scx=tfng */,
+  {     0,  4033,   406,  16,   7, UNI_XPOSIXCNTRL }   /* generalcategory=control */,
+  {     0,  8984,     3,   6,   1, -UNI_QMARK }   /* qmark=f */,
+  {     0,  9768,  9335,   4,   5, UNI_TAKR }   /* scx=takri */,
+  {    16,  8147,     0,   7,   0, UNI_EXTPICT }   /* extpict */,
+  {    44,  4688,  1166,  15,  16, UNI_IDENTIFIERTYPE__DEFAULTIGNORABLE }   /* identifiertype=defaultignorable */,
+  {     0,  8780,  9624,   6,   3, UNI_INLAO }   /* block=lao */,
+  {    24, 10027,  5944,   3,   3, UNI_JG__WAW }   /* jg=waw */,
+  {     1,  3836,  8840,  17,   6, UNI_CAKM }   /* scriptextensions=chakma */,
+  {     2,  8519,     0,   8,   0, UNI_NFKDQC__N }   /* nfkdqc=n */,
+  {     2,  2182,  8139,  21,   8, UNI_WB__EB }   /* graphemeclusterbreak=ebasegaz */,
+  {     5, 10024,    74,   3,   2, UNI_ME }   /* gc=me */,
+  {     1,  9520,     1,   4,   1, -UNI_CWL }   /* cwl=n */,
+  {    21, 10048,  8738,   3,   5, UNI_NV__60000 }   /* nv=60000 */,
+  {     3, 10063,    36,   3,   1, UNI_SD }   /* sd=t */,
+  {     0,   184,  1013,   2,   5, UNI_GREK }   /* isgreek */,
+  {     2,  9240, 10135,   5,   3, UNI_DASH }   /* dash=yes */,
+  {    14,  9768,  9832,   4,   4, UNI_TIBT }   /* scx=tibt */,
+  {     0,  8780,   979,   6,  27, UNI_ALPHABETICPF }   /* block=alphabeticpresentationforms */,
+  {     2,  8780,  3295,   6,  18, UNI_LATINEXTADDITIONAL }   /* block=latinextadditional */,
+  {     0,   184,   779,   2,  30, UNI_SYMBOLSANDPICTOGRAPHSEXTA }   /* issymbolsandpictographsextendeda */,
+  {     0,  9488,  6961,   4,  11, UNI_SUPERANDSUB }   /* blk=superandsub */,
+  {     1,  9350,     3,   5,   1, -UNI_XIDS }   /* xids=f */,
+  {     2,  8589,  8243,   7,   8, UNI_SC__MAHJ }   /* script=mahajani */,
+  {     0,  2409,     0,   4,   0, UNI_GLAG }   /* glag */,
+  {     0,  5986,  8051,  13,   8, UNI_NV__5_SLASH_6 }   /* numericvalue=8.33e-01 */,
+  {     0,  1552, 10176,   9,   2, UNI_ZL }   /* category=zl */,
+  {     4,  3133,    26,  18,   1, UNI_EBASE }   /* emojimodifierbase=y */,
+  {     1,  7325, 10105,   3,   3, UNI_IN__6 }   /* in=v60 */,
+  {     0, 10048,  8720,   3,   4, UNI_NV__4000 }   /* nv=4000 */,
+  {     1,  1417,  9126,  25,   4, UNI_CCC__19 }   /* canonicalcombiningclass=ccc19 */,
+  {    43,  3836,  9305,  17,   5, UNI_NSHU }   /* scriptextensions=nushu */,
+  {     0, 10027,  6325,   3,  12, UNI_JG__MALAYALAMNNA }   /* jg=malayalamnna */,
+  {     1,  9508,  8010,   4,   2, UNI_CCC__36 }   /* ccc=36 */,
+  {     0,  8780,  2722,   6,  10, UNI_JAMO }   /* block=hanguljamo */,
+  {     1,  6808,     0,   4,   0, UNI__PERL_SURROGATE }   /* iscs */,
+  {     0,    42,     0,  16,   0, UNI_CJKCOMPAT }   /* cjkcompatibility */,
+  {    14,  8589,  6796,   7,  11, UNI_MEDF }   /* script=medefaidrin */,
+  {     1,  5508,     0,  14,   0, UNI_patsyn_values_index }   /* patternsyntax= */,
+  {     0, 10288,  1867,   8,   5, UNI_XPOSIXUPPER }   /* isxposixupper */,
+  {     3,  8589,  7567,   7,   9, UNI_SC__SIND }   /* script=khudawadi */,
+  {     0,  7325, 10075,   3,   3, UNI_IN__2 }   /* in=v20 */,
+  {    24,  9604,     0,   4,   0, UNI_KHMR }   /* khmr */,
+  {     1,  8780,     0,   6,  42, UNI_UCASEXT }   /* block=unifiedcanadianaboriginalsyllabicsextended */,
+  {     1,  1537,    61,   3,   4, UNI_INDOGRA }   /* indogra */,
+  {    38, 10027,  6565,   3,  11, UNI_JG__AFRICANNOON }   /* jg=africannoon */,
+  {     1,   184,  9285,   2,   4, UNI_LIMB }   /* islimb */,
+  {     3,  5466,     0,  16,   0, UNI_DT__CAN }   /* nfdquickcheck=no */,
+  {     0,  7438,  6145,  10,  12, UNI_WB__EX }   /* wordbreak=extendnumlet */,
+  {     7,  1790, 10135,  22,   3, UNI_CWCM }   /* changeswhencasemapped=yes */,
+  {     1,  8421,     0,   4,   0, UNI_ELYM }   /* elym */,
+  {     0,  9488,  4001,   4,  16, UNI_CYPRIOTSYLLABARY }   /* blk=cypriotsyllabary */,
+  {     1,  3836,  8179,  17,   8, UNI_GURU }   /* scriptextensions=gurmukhi */,
+  {     3, 10006,  9255,   3,   5, -UNI_DI }   /* di=false */,
+  {     4,  9277,  8187,   3,   8, UNI_SC__HIRA }   /* sc=hiragana */,
+  {     1, 10009,    45,   3,   3, UNI_DT__COM }   /* dt=com */,
+  {     1,  6598,     0,  11,   0, UNI_CASEDLETTER }   /* casedletter */,
+  {     1,  9351,     0,   4,   0, UNI_ids_values_index }   /* ids= */,
+  {     0,  2950,     0,  19,   0, UNI_SUPARROWSB }   /* supplementalarrowsb */,
+  {     0,  2784,  8093,   4,   6, UNI_INARMENIAN }   /* inarmenian */,
+  {    16,  9768,  8115,   4,   8, UNI_BASS }   /* scx=bassavah */,
+  {     8,  8610,     0,   4,   0, UNI_SIDD }   /* sidd */,
+  {     2,  5032,  1025,  14,   2, -UNI_POSIXXDIGIT }   /* asciihexdigit=no */,
+  {     1,  8780,   660,   7,  29, UNI_CJKEXTF }   /* block=cjkunifiedideographsextensionf */,
+  {    35,  8589,  8171,   7,   8, UNI_SC__GUJR }   /* script=gujarati */,
+  {     5,   184,  8912,   2,   6, UNI_KHOJ }   /* iskhojki */,
+  {     0,  3836,  9708,  17,   4, UNI_ORYA }   /* scriptextensions=orya */,
+  {     7,  7325,  7950,   3,   1, UNI_IN__9 }   /* in=9 */,
+  {     0,  5986,  8714,  13,   2, UNI_NV__30 }   /* numericvalue=30 */,
+  {     1,  9488,  5018,   4,  14, UNI_ANCIENTSYMBOLS }   /* blk=ancientsymbols */,
+  {     0,  2224,  6940,   3,  10, UNI_INSORASOMPENG }   /* insorasompeng */,
+  {     5,  3367,  9836,  18,   4, UNI__PERL_PATWS }   /* patternwhitespace=true */,
+  {     4,  9488,  6025,   4,  12, UNI_ALPHABETICPF }   /* blk=alphabeticpf */,
+  {     0,  1417,  5648,  24,   2, UNI_CCC__10 }   /* canonicalcombiningclass=10 */,
+  {     3, 10024,    47,   3,   1, UNI_M }   /* gc=m */,
+  {     0,  3836,  8107,  17,   8, UNI_BALI }   /* scriptextensions=balinese */,
+  {     0,  2224,  2055,   3,  21, UNI_MODIFIERLETTERS }   /* inspacingmodifierletters */,
+  {     8,  3836,  7513,  17,   9, UNI_BHKS }   /* scriptextensions=bhaiksuki */,
+  {    38,  3836,  8484,  17,   7, UNI_MAND }   /* scriptextensions=mandaic */,
+  {     3,  5791,  2637,  13,   9, UNI_JG__YEHBARREE }   /* joininggroup=yehbarree */,
+  {     0,  4643,     3,  15,   1, -UNI_ECOMP }   /* emojicomponent=f */,
+  {     3,  1417,  8823,  25,   5, UNI_CCC__130 }   /* canonicalcombiningclass=ccc130 */,
+  {     4,  7325, 10078,   3,   3, UNI_IN__2_DOT_1 }   /* in=v21 */,
+  {    25,  3836,  9612,  17,   4, UNI_KNDA }   /* scriptextensions=knda */,
+  {     1, 10048,  9404,   3,   4, UNI_NV__13_SLASH_2 }   /* nv=13/2 */,
+  {     2,    21,  8338,   3,   6, UNI_INAVESTAN }   /* inavestan */,
+  {     2,   184,  3026,   3,   3, UNI_CHER }   /* ischer */,
+  {     1,  3836,  9720,  17,   4, UNI_PHLP }   /* scriptextensions=phlp */,
+  {     0,  7318,  7814,  10,   1, UNI_IN__7 }   /* presentin=7 */,
+  {     0,  9488,  5214,   4,  14, UNI_KANGXI }   /* blk=kangxiradicals */,
+  {     2,  3836,  8131,  17,   4, UNI_DUPL }   /* scriptextensions=dupl */,
+  {    16,  8780,  2141,   7,  20, UNI_CYRILLICSUP }   /* block=cyrillicsupplementary */,
+  {     1,  4928,     0,  15,   0, UNI_TAMILSUP }   /* tamilsupplement */,
+  {     1,   184,  8401,   3,   5, UNI_COMPEX }   /* iscompex */,
+  {    50,  1537,  3475,  24,  10, UNI_INPC__TOPANDLEFT }   /* indicpositionalcategory=topandleft */,
+  {     1,  7325,  9955,   3,   3, UNI_IN__3_DOT_2 }   /* in=3.2 */,
+  {    37,  9277,  5550,   3,  14, UNI_SC__PHLP }   /* sc=psalterpahlavi */,
+  {    51, 10288,  7739,   3,   7, UNI_XIDS }   /* isxidstart */,
+  {     4,  7318,  9970,  10,   3, UNI_IN__5_DOT_2 }   /* presentin=5.2 */,
+  {     0,  3547,     0,  10,   0, UNI_ALCHEMICAL }   /* alchemical */,
+  {    32,  9997,  3205,   3,  18, UNI_BC__FSI }   /* bc=firststrongisolate */,
+  {     0,  5986,  8732,  13,   5, UNI_NV__50000 }   /* numericvalue=50000 */,
+  {    32,  9536,     0,   4,   0, UNI_dep_values_index }   /* dep= */,
+  {     1,  8780,    78,   6,  10, UNI_ARABICMATH }   /* block=arabicmath */,
+  {     3,   184,   407,   3,   6, UNI_XPOSIXCNTRL }   /* iscontrol */,
+  {     0,   184,  1677,   2,  14, UNI_LATINEXTA }   /* islatinextendeda */,
+  {     2,  3836,  9584,  17,   4, UNI_HLUW }   /* scriptextensions=hluw */,
+  {     2,  9488,     0,   4,   0, UNI_blk_values_index }   /* blk= */,
+  {     0,  8589,    78,   7,   4, UNI_SC__ARAB }   /* script=arab */,
+  {     1,   184,  3667,   3,  16, UNI_CYRILLICEXTC }   /* iscyrillicextendedc */,
+  {     0,  8774,    26,   6,   1, UNI_BIDIM }   /* bidim=y */,
+  {   179,   184,  5726,   2,  13, UNI_ME }   /* isenclosingmark */,
+  {     5,  9270,  2549,   5,   3, UNI_INPC__TOP }   /* inpc=top */,
+  {     5,  9488,  9340,   4,   5, UNI_VSSUP }   /* blk=vssup */,
+  {    44,  8589,  8414,   7,   7, UNI_ELBA }   /* script=elbasan */,
+  {     4,  1189,   495,   3,   7, UNI_NT__NU }   /* nt=numeric */,
+  {     1,  4033,  1044,  16,   6, UNI_L }   /* generalcategory=letter */,
+  {     0,  4033,  5494,  16,  14, UNI_MN }   /* generalcategory=nonspacingmark */,
+  {    11, 10340,  1751,   3,   2, UNI_VAI }   /* isvai */,
+  {    20,   184,  9572,   2,   4, UNI_GUJR }   /* isgujr */,
+  {     8,  3836,  8291,  17,   4, UNI_TAGB }   /* scriptextensions=tagb */,
+  {     0,  8589,  9688,   7,   3, UNI_NKO }   /* script=nko */,
+  {    60,  2855,     0,   9,   0, UNI_MONG }   /* mongolian */,
+  {     2,   184,  2608,   2,   6, UNI_BRAH }   /* isbrahmi */,
+  {     0,   184,  1218,   2,   8, UNI_KANA }   /* iskatakana */,
+  {     0,  9536,     1,   4,   1, -UNI_DEP }   /* dep=n */,
+  {     3,  8780,  1513,   6,  24, UNI_HIGHPUSURROGATES }   /* block=highprivateusesurrogates */,
+  {     0,  7318, 10090,  10,   3, UNI_IN__4 }   /* presentin=v40 */,
+  {     0,  4628,     8,  15,   1, UNI_EA__A }   /* eastasianwidth=a */,
+  {     1,    78,     0,  10,   0, UNI_ARABICMATH }   /* arabicmath */,
+  {    12,  9277,  6939,   3,   4, UNI_SORA }   /* sc=sora */,
+  {     1,  4791,  1019,   3,   4, UNI_MUSIC }   /* inmusic */,
+  {     0,  7218,  2444,  10,   2, UNI_LB__HL }   /* linebreak=hl */,
+  {    33,  4673,     0,  15,   0, UNI_INHANGUL }   /* hangulsyllables */,
+  {     1,   184,  8428,   2,   7, UNI_GRAN }   /* isgrantha */,
+  {     4,  3382,  9255,   3,   5, -UNI_CE }   /* ce=false */,
+  {     2,  4033,  1563,  16,   2, UNI_PS }   /* generalcategory=ps */,
+  {     0,  1746,   752,  23,   4, UNI_BPT__C }   /* bidipairedbrackettype=close */,
+  {     0,   184,  8882,   2,   5, UNI_GREXT }   /* isgrext */,
+  {     3,  6231,  3026,   3,   7, UNI_INCHEROKEE }   /* incherokee */,
+  {     0,   184,  7098,   2,  10, UNI_BOXDRAWING }   /* isboxdrawing */,
+  {     0,  7540,     3,   9,   1, -UNI_EXT }   /* extender=f */,
+  {     0,  1591,  6134,   3,  11, UNI_ETHIOPICEXTA }   /* inethiopicexta */,
+  {     0, 10340,    67,   3,   4, UNI_VSSUP }   /* isvssup */,
+  {     2,  9520,  9836,   4,   4, UNI_CWL }   /* cwl=true */,
+  {    57,  8780,  6796,   6,  11, UNI_INMEDEFAIDRIN }   /* block=medefaidrin */,
+  {     6,  9488,  3421,   4,  18, UNI_RUMI }   /* blk=ruminumeralsymbols */,
+  {    12,  9265,     3,   5,   1, -UNI_IDST }   /* idst=f */,
+  {     4,  9508,  9208,   4,   2, UNI_CCC__35 }   /* ccc=35 */,
+  {     1,  6805,   187,   6,  30, UNI_MISCPICTOGRAPHS }   /* inmiscellaneoussymbolsandpictographs */,
+  {     5,  5466,     0,  14,   0, UNI_nfdqc_values_index }   /* nfdquickcheck= */,
+  {     1,  9488,  6939,   4,  11, UNI_INSORASOMPENG }   /* blk=sorasompeng */,
+  {     0,  9230,    36,   5,   1, UNI_CWCF }   /* cwcf=t */,
+  {     1,  9444,  7821,   4,   1, UNI_AGE__8 }   /* age=8 */,
+  {     0,  6554,  9255,  11,   5, -UNI_IDC }   /* idcontinue=false */,
+  {     0,  9277,  7291,   3,   7, UNI_SC__SOGD }   /* sc=sogdian */,
+  {    13,  8589,  9285,   7,   4, UNI_SC__LIMB }   /* script=limb */,
+  {     3,  3836,  9496,  17,   4, UNI_BUHD }   /* scriptextensions=buhd */,
+  {     0,  2931,     0,  19,   0, UNI_SUPARROWSA }   /* supplementalarrowsa */,
+  {    64,   184,  2684,   2,  19, UNI_EGYP }   /* isegyptianhieroglyphs */,
+  {     2,  8509,   811,   4,  27, UNI_ENCLOSEDIDEOGRAPHICSUP }   /* inenclosedideographicsupplement */,
+  {     0,  9277,  6793,   5,   2, UNI_KHMR }   /* sc=khmr */,
+  {     0,  8780,  1319,   6,  25, UNI_SYMBOLSANDPICTOGRAPHSEXTA }   /* block=symbolsandpictographsexta */,
+  {    69,  5986,  8820,  13,   2, UNI_NV__29 }   /* numericvalue=29 */,
+  {     0,   184,  5947,   2,  13, UNI_MAYANNUMERALS }   /* ismayannumerals */,
+  {     9,  6805,  2023,   6,   9, UNI_MISCTECHNICAL }   /* inmisctechnical */,
+  {     1,  9277,  8603,   3,   7, UNI_SHAW }   /* sc=shavian */,
+  {     0,  1828, 10135,   6,   3, UNI_CASED }   /* cased=yes */,
+  {     0,  9768,  4478,   4,   4, UNI_BRAI }   /* scx=brai */,
+  {     5,  9768,  8666,   4,   7, UNI_TIRH }   /* scx=tirhuta */,
+  {     0,  9275,  7639,   5,   9, UNI_INSC__NONJOINER }   /* insc=nonjoiner */,
+  {     1,  1114,    36,  26,   1, UNI_CWKCF }   /* changeswhennfkccasefolded=t */,
+  {     0,  3836,  9564,  17,   4, UNI_GONM }   /* scriptextensions=gonm */,
+  {     0,  8589,  9612,   7,   4, UNI_SC__KNDA }   /* script=knda */,
+  {     0,  4958,     0,  15,   0, UNI_UPPERCASELETTER }   /* uppercaseletter */,
+  {     1, 10333,  4149,   3,   3, UNI_SARB }   /* issarb */,
+  {     7,  1828,     1,   6,   1, -UNI_CASED }   /* cased=n */,
+  {     0,  9277,  9002,   3,   4, UNI_SC__TELU }   /* sc=telu */,
+  {     0,  9444,  9384,   4,   4, UNI_AGE__10 }   /* age=10.0 */,
+  {     0,  8780,  3921,   6,  16, UNI_ARABICSUP }   /* block=arabicsupplement */,
+  {     0,  8589,  9532,   7,   4, UNI_SC__CYRL }   /* script=cyrl */,
+  {     1,  5986,  9436,  13,   4, UNI_NV__7_SLASH_12 }   /* numericvalue=7/12 */,
+  {     1,  1561,     0,  24,   0, UNI_SUPSYMBOLSANDPICTOGRAPHS }   /* supsymbolsandpictographs */,
+  {     0,  4916,  4402,   3,  15, UNI_TANGUTSUP }   /* istangutsupplement */,
+  {    48,  7325,  9840,   3,   4, UNI_IN__10 }   /* in=v100 */,
+  {     1,  7325, 10108,   3,   3, UNI_IN__6_DOT_1 }   /* in=v61 */,
+  {     2,  7318,  7755,  10,   3, UNI_IN__1_DOT_1 }   /* presentin=1.1 */,
+  {     7,  9070,     0,   4,   0, UNI_POSIXXDIGIT }   /* ahex */,
+  {     1,  3836,  7188,  17,   4, UNI_KHAR }   /* scriptextensions=khar */,
+  {     0,   719,     0,   9,   0, UNI_XSUX }   /* cuneiform */,
+  {    96,  8780,  4448,   6,   8, UNI_BAMUMSUP }   /* block=bamumsup */,
+  {     0,  9488,  1441,   4,  10, UNI_CJKSYMBOLS }   /* blk=cjksymbols */,
+  {    21, 10132,  6653,   3,  11, UNI_WB__DQ }   /* wb=doublequote */,
+  {     1,  8780,  6972,   6,  11, UNI_INSYLOTINAGRI }   /* block=sylotinagri */,
+  {     0,  3836,  2817,  17,  19, UNI_MERO }   /* scriptextensions=meroitichieroglyphs */,
+  {     0,   184,  3683,   2,  16, UNI_ETHIOPICEXT }   /* isethiopicextended */,
+  {     0,  9014,     1,   6,   1, -UNI_UIDEO }   /* uideo=n */,
+  {     1,  8400,     1,   7,   1, -UNI_COMPEX }   /* compex=n */,
+  {     0,  9277,  8888,   3,   6, UNI_HATR }   /* sc=hatran */,
+  {     0,  1166,  9836,  26,   4, UNI_DI }   /* defaultignorablecodepoint=true */,
+  {     0, 10291,  1867,   5,   5, UNI_POSIXUPPER }   /* posixupper */,
+  {     0,  6231,  3650,   3,  16, UNI_CYRILLICEXTB }   /* incyrillicextendedb */,
+  {     1,  8589,   493,   7,   3, UNI_SC__HAN }   /* script=han */,
+  {     0,  8780,  2099,   7,  20, UNI_CJKCOMPATFORMS }   /* block=cjkcompatibilityforms */,
+  {     2,  5986,  7979,  13,   8, UNI_NV__3_SLASH_5 }   /* numericvalue=6.00e-01 */,
+  {     2, 10048,  7922,   3,   2, UNI_NV__24 }   /* nv=24 */,
+  {     3,  2469,     0,  20,   0, UNI_HMNP }   /* nyiakengpuachuehmong */,
+  {    25,  4829,  2411,   4,  11, UNI_GLAGOLITICSUP }   /* inglagoliticsup */,
+  {     3,    21,  4145,   2,  16, UNI_LINEARBIDEOGRAMS }   /* inlinearbideograms */,
+  {     0,   809,     0,  29,   0, UNI_ENCLOSEDIDEOGRAPHICSUP }   /* enclosedideographicsupplement */,
+  {     0,  1856,     1,  22,   1, -UNI_CWU }   /* changeswhenuppercased=n */,
+  {     0,   184,  2141,   3,  20, UNI_CYRILLICSUP }   /* iscyrillicsupplementary */,
+  {     0,  5986,  9188,  13,   2, UNI_NV__31 }   /* numericvalue=31 */,
+  {     2,  8780,    43,   7,  35, UNI_CJKCOMPATIDEOGRAPHSSUP }   /* block=cjkcompatibilityideographssupplement */,
+  {     1, 10033,    23,   3,   2, UNI_LB__AL }   /* lb=al */,
+  {     0, 10027,    87,   3,   2, UNI_JG__HE }   /* jg=he */,
+  {     4, 10132,   108,   3,   2, UNI_WB__MB }   /* wb=mb */,
+  {     2,  4033,  1465,  16,  13, UNI_M }   /* generalcategory=combiningmark */,
+  {     1,  9325,     0,   5,   0, UNI_RUNR }   /* runic */,
+  {     1,  1552,   727,   9,   2, UNI_MN }   /* category=mn */,
+  {     0,  7088, 10054,  10,   3, UNI_BC__PDF }   /* bidiclass=pdf */,
+  {     1,  9656,     0,   4,   0, UNI_MIAO }   /* miao */,
+  {     0,  2969,     0,  19,   0, UNI_SUPARROWSC }   /* supplementalarrowsc */,
+  {     1,  9508,  8708,   4,   3, UNI_CCC__216 }   /* ccc=216 */,
+  {     0,  9768,  9616,   4,   4, UNI_KTHI }   /* scx=kthi */,
+  {     0,  6609,    36,  11,   1, UNI_DEP }   /* deprecated=t */,
+  {     0,  8780,   510,   7,  29, UNI_CJKEXTA }   /* block=cjkunifiedideographsextensiona */,
+  {     6, 10027,  6572,   3,   4, UNI_JG__NOON }   /* jg=noon */,
+  {     1,  2182,  1194,  21,   2, UNI_LB__LF }   /* graphemeclusterbreak=lf */,
+  {     0,  8589,  4478,   7,   4, UNI_BRAI }   /* script=brai */,
+  {     1,  9768,  9576,   4,   4, UNI_GURU }   /* scx=guru */,
+  {     0,  8780,  1006,   6,  27, UNI_ANCIENTGREEKMUSIC }   /* block=ancientgreekmusicalnotation */,
+  {     0,  8858,  9836,   6,   4, UNI_ECOMP }   /* ecomp=true */,
+  {    16,  8780,  3241,   6,   8, UNI_INGEORGIAN }   /* block=georgian */,
+  {     0,  5739,     0,  12,   0, UNI_GRBASE }   /* graphemebase */,
+  {    40,  4928,     0,   5,   0, UNI_TAML }   /* tamil */,
+  {     0, 10024,    24,   3,   1, UNI_L }   /* gc=l */,
+  {     0,  9768,  9793,   5,   3, UNI_SOGO }   /* scx=sogo */,
+  {    25,  1768,     3,  22,   1, -UNI_CWCF }   /* changeswhencasefolded=f */,
+  {    29,  1417,  7754,  24,   2, UNI_CCC__11 }   /* canonicalcombiningclass=11 */,
+  {     0,  8589,  7651,   7,   4, UNI_ITAL }   /* script=ital */,
+  {     0,  9488,  8393,   4,   7, UNI_CJKEXTG }   /* blk=cjkextg */,
+  {     1,  9508,    18,   4,   1, UNI_CCC__R }   /* ccc=r */,
+  {    34,  8688,  7411,   3,   7, UNI_ASSIGNED }   /* isassigned */,
+  {     0,    21,  3295,   2,  18, UNI_LATINEXTADDITIONAL }   /* inlatinextadditional */,
+  {     1,  9997,  4464,   4,  14, UNI_BC__BN }   /* bc=boundaryneutral */,
+  {     0,  2760,     9,  19,   2, UNI_HST__NA }   /* hangulsyllabletype=na */,
+  {     1,  7318,  7806,  10,   1, UNI_IN__6 }   /* presentin=6 */,
+  {    43, 10033,  6587,   3,  11, UNI_LB__BB }   /* lb=breakbefore */,
+  {     1,  9716,     0,   4,   0, UNI_pcm_values_index }   /* pcm= */,
+  {     0,  9277,  1628,   3,   4, UNI_SC__PHAG }   /* sc=phag */,
+  {     3,  2529,  9255,  20,   5, -UNI_TERM }   /* terminalpunctuation=false */,
+  {     0,  9488,  5032,   4,   5, UNI_ASCII }   /* blk=ascii */,
+  {     0,  9488,  8484,   4,   7, UNI_INMANDAIC }   /* blk=mandaic */,
+  {     8,  8852,     1,   6,   1, -UNI_CWKCF }   /* cwkcf=n */,
+  {     4,  7325,  7867,   3,   3, UNI_IN__3_DOT_1 }   /* in=3.1 */,
+  {     0,  9275,  1608,   5,  23, UNI_INSC__CONSONANTPRECEDINGREPHA }   /* insc=consonantprecedingrepha */,
+  {     0,  1273,  9255,  21,   5, -UNI_CE }   /* compositionexclusion=false */,
+  {     1,  8996,     1,   6,   1, -UNI_STERM }   /* sterm=n */,
+  {     1,  9792,     0,   4,   0, UNI_SOGO }   /* sogo */,
+  {     0,   184,  6409,   2,  12, UNI_MEND }   /* ismendekikakui */,
+  {     3,  9508,  9168,   4,   2, UNI_CCC__27 }   /* ccc=27 */,
+  {     5,  4853,    26,  15,   1, UNI_DT__NONE }   /* nfkdquickcheck=y */,
+  {     6,  9277,  8344,   3,   7, UNI_SC__BENG }   /* sc=bengali */,
+  {     2,  9277,  2469,   3,  20, UNI_HMNP }   /* sc=nyiakengpuachuehmong */,
+  {     1,  1417,  9928,  24,   3, UNI_CCC__BR }   /* canonicalcombiningclass=222 */,
+  {     0,  3836,  3937,  17,   4, UNI_BOPO }   /* scriptextensions=bopo */,
+  {     4,  3836,  7118,  17,  10, UNI_CHRS }   /* scriptextensions=chorasmian */,
+  {     6,  8589,  9756,   7,   4, UNI_RUNR }   /* script=runr */,
+  {     0,  9277,  5003,   3,  15, UNI_ZANB }   /* sc=zanabazarsquare */,
+  {     0,  2182,  6178,  21,   3, UNI_LB__ZWJ }   /* graphemeclusterbreak=zwj */,
+  {     2,  9508,  5377,   4,   2, UNI_CCC__7 }   /* ccc=nk */,
+  {     0,  2779,     1,  19,   1, -UNI_IDST }   /* idstrinaryoperator=n */,
+  {     2,  9488,  2010,   4,  22, UNI_MISCTECHNICAL }   /* blk=miscellaneoustechnical */,
+  {    19,  1966,     0,  22,   0, UNI_insc_values_index }   /* indicsyllabiccategory= */,
+  {     0,  9277,  7288,   3,  10, UNI_SOGO }   /* sc=oldsogdian */,
+  {     2,  9488,  9688,   4,   3, UNI_INNKO }   /* blk=nko */,
+  {    16,  8589,  8123,   7,   4, UNI_SC__BUGI }   /* script=bugi */,
+  {     1,  5986,  8756,  13,   3, UNI_NV__900 }   /* numericvalue=900 */,
+  {     0,  9235,     3,   5,   1, -UNI_CWCM }   /* cwcm=f */,
+  {     6,  8589,  9704,   7,   4, UNI_ORKH }   /* script=orkh */,
+  {     4,  8780,  4808,   6,  15, UNI_MISCPICTOGRAPHS }   /* block=miscpictographs */,
+  {     2,  9520,  1025,   4,   2, -UNI_CWL }   /* cwl=no */,
+  {     0,  9277,  9720,   3,   4, UNI_SC__PHLP }   /* sc=phlp */,
+  {    64,  7738,     0,   8,   0, UNI_XIDS }   /* xidstart */,
+  {    42,  9768,  5284,   4,   4, UNI_LISU }   /* scx=lisu */,
+  {     0,  8561,     0,   4,   0, UNI_OSMA }   /* osma */,
+  {   145,  6241,  6664,  12,  11, UNI_JT__D }   /* joiningtype=dualjoining */,
+  {     4,  8882,    26,   6,   1, UNI_GREXT }   /* grext=y */,
+  {     3,  1552,  1822,   9,   2, UNI_NL }   /* category=nl */,
+  {     5,  3529, 10135,  18,   3, UNI_VS }   /* variationselector=yes */,
+  {     0,  7675,     0,   4,   0, UNI_PALM }   /* palm */,
+  {     0, 10009,  8195,   3,   8, UNI_DT__ISO }   /* dt=isolated */,
+  {    16,  7504,     0,   9,   0, UNI_ARABICPFB }   /* arabicpfb */,
+  {     0,  9760,     0,   4,   0, UNI_SAMR }   /* samr */,
+  {     1,  9508,  7821,   4,   1, UNI_CCC__8 }   /* ccc=8 */,
+  {     2,   184,  9503,   2,   2, UNI_MC }   /* ismc */,
+  {     2,  3836,  8924,  17,   4, UNI_LEPC }   /* scriptextensions=lepc */,
+  {     0,  9556,    70,   4,   2, UNI_GCB__PP }   /* gcb=pp */,
+  {     3,   184,  8428,   2,   4, UNI_GRAN }   /* isgran */,
+  {    49,  6576,  9836,  11,   4, UNI_XPOSIXALPHA }   /* alphabetic=true */,
+  {     0, 10048,  9368,   3,   4, UNI_NV__1_SLASH_20 }   /* nv=1/20 */,
+  {    15,  9488,    78,   4,  10, UNI_ARABICMATH }   /* blk=arabicmath */,
+  {     0,  8864,    36,   6,   1, UNI_EMOJI }   /* emoji=t */,
+  {     1,  9350,  9255,   5,   5, -UNI_XIDS }   /* xids=false */,
+  {     1,  7438,  6178,  10,   3, UNI_LB__ZWJ }   /* wordbreak=zwj */,
+  {    40,  4928,     0,   8,   0, UNI_TAMILSUP }   /* tamilsup */,
+  {     0,  9270,  6518,   3,  11, UNI_PLAYINGCARDS }   /* inplayingcards */,
+  {    31,  9275,  4823,   5,  15, UNI_INSC__MODIFYINGLETTER }   /* insc=modifyingletter */,
+  {     0,  3836,  9085,  17,   5, UNI_BATK }   /* scriptextensions=batak */,
+  {     0,  8688,  3548,   3,  16, UNI_ALCHEMICAL }   /* isalchemicalsymbols */,
+  {     0,  9508,  9203,   4,   2, UNI_CCC__34 }   /* ccc=34 */,
+  {     7,  2589,     0,  19,   0, UNI_ANCIENTGREEKNUMBERS }   /* ancientgreeknumbers */,
+  {     2, 10006,    36,   3,   1, UNI_DI }   /* di=t */,
+  {     0,  8997,  9255,   5,   5, -UNI_TERM }   /* term=false */,
+  {     0, 10030,     6,   3,   1, UNI_JT__D }   /* jt=d */,
+  {     1,  9768,  2203,   4,  14, UNI_ROHG }   /* scx=hanifirohingya */,
+  {     1,   184,    24,   2,   1, UNI_L }   /* isl */,
+  {     1,  2760,  7238,  19,  10, UNI_LB__H2 }   /* hangulsyllabletype=lvsyllable */,
+  {     4,  8589,  8498,   7,   4, UNI_SC__MULT }   /* script=mult */,
+  {     0,  1114, 10135,  26,   3, UNI_CWKCF }   /* changeswhennfkccasefolded=yes */,
+  {     0,  3985,     0,  16,   0, UNI_PE }   /* closepunctuation */,
+  {    10,  9768,  8491,   4,   4, UNI_MARC }   /* scx=marc */,
+  {     1,  9768,  4273,   4,   7, UNI_MYMR }   /* scx=myanmar */,
+  {     4,  5466, 10135,  14,   3, UNI_NFDQC__Y }   /* nfdquickcheck=yes */,
+  {     1,  5986,  8066,  13,   2, UNI_NV__28 }   /* numericvalue=28 */,
+  {     1,  7228,     3,  10,   1, -UNI_XPOSIXLOWER }   /* lowercase=f */,
+  {   139,  8780,  2912,   6,   9, UNI_INSUNDANESE }   /* block=sundanese */,
+  {     0,  5746,  9836,   6,   4, UNI_EBASE }   /* ebase=true */,
+  {     1,  5791,  9044,  13,   4, UNI_JG__YUDH }   /* joininggroup=yudh */,
+  {     0,  8780,  1654,   6,  23, UNI_COMPATJAMO }   /* block=hangulcompatibilityjamo */,
+  {    22, 10132,   138,   3,   2, UNI_WB__FO }   /* wb=fo */,
+  {     0, 10027, 10057,   3,   3, UNI_JG__REH }   /* jg=reh */,
+  {     0,  5986,  9424,  13,   4, UNI_NV__3_SLASH_64 }   /* numericvalue=3/64 */,
+  {     0,  8589,  7359,   8,   9, UNI_SAUR }   /* script=saurashtra */,
+  {     4,  1417,  3564,  24,  17, UNI_WB__EB }   /* canonicalcombiningclass=attachedbelowleft */,
+  {     0, 10033,  6178,   3,   3, UNI_LB__ZWJ }   /* lb=zwj */,
+  {     3,  8762,     1,   6,   1, -UNI_XPOSIXALPHA }   /* alpha=n */,
+  {     8,  7088,     8,  10,   2, UNI_BC__AN }   /* bidiclass=an */,
+  {     1,   184,    18,   2,   2, UNI_RI }   /* isri */,
+  {    17, 10027,  5382,   3,  14, UNI_JG__MANICHAEANQOPH }   /* jg=manichaeanqoph */,
+  {     1,  9768,  7660,   4,   4, UNI_PERM }   /* scx=perm */,
+  {     0,  3836,  9464,  17,   4, UNI_ARMN }   /* scriptextensions=armn */,
+  {     0,   512,     0,  16,   0, UNI_UIDEO }   /* unifiedideograph */,
+  {     0,  9488,  2245,   4,  21, UNI_MEETEIMAYEKEXT }   /* blk=meeteimayekextensions */,
+  {     3,  7738,  9255,   9,   5, -UNI_XIDS }   /* xidstart=false */,
+  {    33,  8694, 10135,   7,   3, UNI_XPOSIXSPACE }   /* wspace=yes */,
+  {    17,  9444,  7950,   4,   1, UNI_AGE__9 }   /* age=9 */,
+  {    74,  2817,     0,  19,   0, UNI_MERO }   /* meroitichieroglyphs */,
+  {     0,  8589,  9620,   7,   4, UNI_LANA }   /* script=lana */,
+  {     0,  9768,  5003,   4,  15, UNI_ZANB }   /* scx=zanabazarsquare */,
+  {     1,  5746,     1,   6,   1, -UNI_EBASE }   /* ebase=n */,
+  {     0,  8780,  9032,   6,   6, UNI_INWANCHO }   /* block=wancho */,
+  {     8,  5284,     0,   4,   0, UNI_LISU }   /* lisu */,
+  {    20,  1900,     0,  22,   0, UNI_INDICNUMBERFORMS }   /* commonindicnumberforms */,
+  {     0,  6576, 10135,  11,   3, UNI_XPOSIXALPHA }   /* alphabetic=yes */,
+  {     0,  1006,     0,  17,   0, UNI_ANCIENTGREEKMUSIC }   /* ancientgreekmusic */,
+  {     0,  5986,  8714,  13,   3, UNI_NV__300 }   /* numericvalue=300 */,
+  {     0,  3043,     0,  18,   0, UNI_HALFMARKS }   /* combininghalfmarks */,
+  {     0,  9277,  9335,   3,   4, UNI_SC__TAKR }   /* sc=takr */,
+  {     8,  7738,     0,   9,   0, UNI_xids_values_index }   /* xidstart= */,
+  {     0,   184,  9756,   2,   4, UNI_RUNR }   /* isrunr */,
+  {     1,   184,  7188,   2,   4, UNI_KHAR }   /* iskhar */,
+  {     3,  8884,     1,   4,   1, -UNI_EXT }   /* ext=n */,
+  {     4,  9351, 10135,   4,   3, UNI_IDS }   /* ids=yes */,
+  {     1,   184,  3169,   2,   4, UNI_ETHI }   /* isethi */,
+  {    10,  2224,  1345,   3,  24, UNI_SYMBOLSFORLEGACYCOMPUTING }   /* insymbolsforlegacycomputing */,
+  {     2,  8780,  3026,   7,  17, UNI_CHEROKEESUP }   /* block=cherokeesupplement */,
+  {     4,  9444,  9844,   4,   3, UNI_IN__1_DOT_1 }   /* age=v11 */,
+  {     0,  9768,   382,   4,   4, UNI_EGYP }   /* scx=egyp */,
+  {    89,  3277,     0,  18,   0, UNI_PI }   /* initialpunctuation */,
+  {     4,  9488,  9664,   4,   3, UNI_INMRO }   /* blk=mro */,
+  {     0,  9277,  8561,   3,   4, UNI_OSMA }   /* sc=osma */,
+  {     0,  3098,     0,   5,   0, UNI_ECOMP }   /* ecomp */,
+  {     0, 10012,  1204,   3,   9, UNI_EA__F }   /* ea=fullwidth */,
+  {    16,  1537,     9,  24,   2, UNI_INPC__NA }   /* indicpositionalcategory=na */,
+  {     0, 10048,  7874,   3,   2, UNI_NV__23 }   /* nv=23 */,
+  {     0,  5791,  5354,  13,  14, UNI_JG__MANICHAEANHETH }   /* joininggroup=manichaeanheth */,
+  {     1,  1114,  1025,  26,   2, -UNI_CWKCF }   /* changeswhennfkccasefolded=no */,
+  {     2,  3853,  9255,  17,   5, -UNI_STERM }   /* sentenceterminal=false */,
+  {     0,  7088,  2268,  10,   3, UNI_BC__PDI }   /* bidiclass=pdi */,
+  {     2,   184,  9616,   2,   4, UNI_KTHI }   /* iskthi */,
+  {     4, 10027,     5,   3,   1, UNI_JG__E }   /* jg=e */,
+  {     0,  1344,     0,  25,   0, UNI_SYMBOLSFORLEGACYCOMPUTING }   /* symbolsforlegacycomputing */,
+  {     0,  2703,     0,  19,   0, UNI_ENCLOSEDALPHANUMSUP }   /* enclosedalphanumsup */,
+  {     1,  7318,  9852,  10,   4, UNI_IN__12_DOT_1 }   /* presentin=v121 */,
+  {     1,  8589,  2608,   7,   4, UNI_BRAH }   /* script=brah */,
+  {    58,  9488,  6109,   4,  12, UNI_CYRILLICEXTB }   /* blk=cyrillicextb */,
+  {    35,  6231,   720,   3,  29, UNI_CUNEIFORMNUMBERS }   /* incuneiformnumbersandpunctuation */,
+  {    98,  9277,  9828,   3,   4, UNI_THAI }   /* sc=thai */,
+  {    37,  2288,  3055,   5,   6, UNI_HALFMARKS }   /* inhalfmarks */,
+  {     7,  5986,  8727,  13,   2, UNI_NV__32 }   /* numericvalue=32 */,
+  {     0,  8852,     0,   5,   0, UNI_CWKCF }   /* cwkcf */,
+  {     2,  9488,  6807,   4,  11, UNI_MISCSYMBOLS }   /* blk=miscsymbols */,
+  {     1,  8589,  9872,   7,   4, UNI_XPEO }   /* script=xpeo */,
+  {     3,  1979,  5818,  10,  12, UNI_ZL }   /* category=lineseparator */,
+  {     3,  1417,  3572,  24,   5, UNI_CCC__B }   /* canonicalcombiningclass=below */,
+  {    17,  1369,     0,  24,   0, UNI_ARABICPFA }   /* arabicpresentationformsa */,
+  {    82,  9262,   751,   3,   5, UNI_SB__CL }   /* sb=close */,
+  {    13,  2529,     0,  21,   0, UNI_TERM }   /* terminalpunctuation=t */,
+  {     3,  9488,  4241,   4,  16, UNI_MISCMATHSYMBOLSA }   /* blk=miscmathsymbolsa */,
+  {     0,  9488,  8386,   4,   7, UNI_CJKEXTF }   /* blk=cjkextf */,
+  {    12,  8780,  1033,   6,  11, UNI_ENCLOSEDCJK }   /* block=enclosedcjk */,
+  {     1,  9277,  8428,   3,   7, UNI_SC__GRAN }   /* sc=grantha */,
+  {     0,   749,     0,  16,   0, UNI_ENCLOSEDALPHANUM }   /* enclosedalphanum */,
+  {     0,  9488,  1369,   4,  24, UNI_ARABICPFA }   /* blk=arabicpresentationformsa */,
+  {     2,  3331,     0,  18,   0, UNI_ORNAMENTALDINGBATS }   /* ornamentaldingbats */,
+  {     1,  9524,     1,   4,   1, -UNI_CWT }   /* cwt=n */,
+  {     0,  7076,  4449,   3,  14, UNI_BAMUMSUP }   /* inbamumsupplement */,
+  {     2,  7318,  7469,  10,   1, UNI_IN__5 }   /* presentin=5 */,
+  {     0,  9230,     0,   4,   0, UNI_CWCF }   /* cwcf */,
+  {     1,  9277,  9688,   3,   3, UNI_NKO }   /* sc=nko */,
+  {     0,  8631,     0,   7,   0, UNI_SUPPUAB }   /* suppuab */,
+  {   142,  9540,  9255,   4,   5, -UNI_DIA }   /* dia=false */,
+  {     2,  4033,  4568,  16,  14, UNI_SC }   /* generalcategory=currencysymbol */,
+  {    30,  8870,    26,   6,   1, UNI_EPRES }   /* epres=y */,
+  {     1,  9768,  6886,   5,   3, UNI_SHAW }   /* scx=shaw */,
+  {     1,  5032,    26,  14,   1, UNI_POSIXXDIGIT }   /* asciihexdigit=y */,
+  {     6,  5986,  9910,  13,   3, UNI_NV__1_SLASH_9 }   /* numericvalue=1/9 */,
+  {     0,  3836,  9688,  17,   4, UNI_NKO }   /* scriptextensions=nkoo */,
+  {     0,  9277,  9780,   3,   4, UNI_SHAW }   /* sc=shaw */,
+  {     6, 10048,  7950,   3,   1, UNI_NV__9 }   /* nv=9 */,
+  {     0,  7325,  9401,   3,   3, UNI_IN__3 }   /* in=3.0 */,
+  {    24,  5739,    26,  13,   1, UNI_GRBASE }   /* graphemebase=y */,
+  {     3,   184,  2836,   2,  19, UNI_MODIFIERTONELETTERS }   /* ismodifiertoneletters */,
+  {     2,  1834,     0,  22,   0, UNI_cwt_values_index }   /* changeswhentitlecased= */,
+  {     0,   184,   951,   2,  28, UNI_VSSUP }   /* isvariationselectorssupplement */,
+  {     0,  9768,  9448,   4,   4, UNI_AGHB }   /* scx=aghb */,
+  {     1,  9768,  9789,   5,   3, UNI_SHRD }   /* scx=shrd */,
+  {     0,  9508,  8805,   5,   5, UNI_CCC__118 }   /* ccc=ccc118 */,
+  {     6,  6085,     0,  12,   0, UNI_CHESSSYMBOLS }   /* chesssymbols */,
+  {     3, 10048,  8710,   3,   2, UNI_NV__60 }   /* nv=60 */,
+  {     0,  3097, 10069,  18,   3, UNI_DT__SQR }   /* decompositiontype=sqr */,
+  {     1,  6553,     1,  12,   1, -UNI_XIDC }   /* xidcontinue=n */,
+  {     0,  8147,    36,   8,   1, UNI_EXTPICT }   /* extpict=t */,
+  {     1,  8780,   809,   6,  22, UNI_ENCLOSEDIDEOGRAPHICSUP }   /* block=enclosedideographicsup */,
+  {     5,   117,  4704,   3,  14, UNI_INIMPERIALARAMAIC }   /* inimperialaramaic */,
+  {    24,  9277,  3937,   3,   8, UNI_SC__BOPO }   /* sc=bopomofo */,
+  {     0,  8996,     0,   5,   0, UNI_STERM }   /* sterm */,
+  {     5,   184,  6620,   2,   6, UNI_DOMINO }   /* isdomino */,
+  {     0,  3836,  4478,  17,   7, UNI_BRAI }   /* scriptextensions=braille */,
+  {     3,  8147,     0,   8,   0, UNI_extpict_values_index }   /* extpict= */,
+  {     1,  4422,  3117,   4,   8, UNI_INDEVANAGARI }   /* indevanagari */,
+  {     0,  5578,   751,  14,   2, UNI_SB__CL }   /* sentencebreak=cl */,
+  {     0, 10048,  7765,   3,   2, UNI_NV__25 }   /* nv=25 */,
+  {     7,  8954,     0,   6,   0, UNI_nchar_values_index }   /* nchar= */,
+  {    26,  9488,  7118,   4,  10, UNI_INCHORASMIAN }   /* blk=chorasmian */,
+  {     5,   184,  1466,   3,  12, UNI_M }   /* iscombiningmark */,
+  {     0, 10296, 10309,   3,   4, UNI_XPOSIXPRINT }   /* isprint */,
+  {     1, 10048,     0,   3,   0, UNI_nv_values_index }   /* nv= */,
+  {     8,  7218,  7268,  10,  10, UNI_LB__NS }   /* linebreak=nonstarter */,
+  {     2,  5791,  4177,  13,  16, UNI_JG__MANICHAEANDALETH }   /* joininggroup=manichaeandaleth */,
+  {     5,  8589,  8606,  10,   4, UNI_SHAW }   /* script=shavian */,
+  {     1,  9688,     0,   4,   0, UNI_NKO }   /* nkoo */,
+  {     0,  8780,  2589,   6,  19, UNI_ANCIENTGREEKNUMBERS }   /* block=ancientgreeknumbers */,
+  {     0,  8589,  9696,   7,   4, UNI_OGAM }   /* script=ogam */,
+  {    33, 10027,  6774,   3,  11, UNI_JG__MALAYALAMJA }   /* jg=malayalamja */,
+  {     0,  3853, 10135,  17,   3, UNI_STERM }   /* sentenceterminal=yes */,
+  {    17,  2288,  2724,   4,  17, UNI_JAMOEXTA }   /* inhanguljamoextendeda */,
+  {     0,  7155,  9585,   3,   3, UNI_HLUW }   /* ishluw */,
+  {     0, 10048,  9376,   3,   4, UNI_NV__1_SLASH_64 }   /* nv=1/64 */,
+  {     0,   184,  3133,   2,   5, UNI_EMOJI }   /* isemoji */,
+  {    42,  2140,     0,  18,   0, UNI_CYRILLICSUP }   /* cyrillicsupplement */,
+  {     4,   184,  4793,   2,  15, UNI_MERC }   /* ismeroiticcursive */,
+  {    11,  7540,  9836,   9,   4, UNI_EXT }   /* extender=true */,
+  {     0,    78,     0,   6,   0, UNI_ARAB }   /* arabic */,
+  {     0,  9520,  9255,   4,   5, -UNI_CWL }   /* cwl=false */,
+  {     1,   184,  2032,   2,  21, UNI__PERL_NCHAR }   /* isnoncharactercodepoint */,
+  {     5,  8351,     0,   7,   0, UNI_CJKEXTA }   /* cjkexta */,
+  {     5,  7438,  4856,  10,   2, UNI_WB__DQ }   /* wordbreak=dq */,
+  {     0,  8589,  8299,   7,   8, UNI_TFNG }   /* script=tifinagh */,
+  {    13,  4628,  1192,  15,   9, UNI_EA__H }   /* eastasianwidth=halfwidth */,
+  {     2,  9508,  9934,   4,   3, UNI_CCC__R }   /* ccc=226 */,
+  {     0,  8589,  8990,   7,   6, UNI_RJNG }   /* script=rejang */,
+  {    29, 10048,  7803,   3,   8, UNI_NV__1_SLASH_64 }   /* nv=1.56e-02 */,
+  {     0,  8780,   951,   6,  28, UNI_VSSUP }   /* block=variationselectorssupplement */,
+  {     0,  6484,     0,   4,   0, UNI_HUNG }   /* hung */,
+  {     2,  3097,  6421,  18,  12, UNI_DT__NONCANON }   /* decompositiontype=noncanonical */,
+  {     0,  3836,  7428,  17,   4, UNI_WARA }   /* scriptextensions=wara */,
+  {     6, 10060,    36,   3,   1, UNI_RI }   /* ri=t */,
+  {     2,  1188,  8292,   3,   7, UNI_INTAGBANWA }   /* intagbanwa */,
+  {     3,   184,    47,   2,   1, UNI_M }   /* ism */,
+  {    12,  6710,  3881,   4,   4, UNI_INCARIAN }   /* incarian */,
+  {     0,  8780,  4273,   6,   7, UNI_INMYANMAR }   /* block=myanmar */,
+  {     3,  9275,  3061,   5,  18, UNI_INSC__CONSONANTSUBJOINED }   /* insc=consonantsubjoined */,
+  {     0,  9508,  9221,   5,   4, UNI_CCC__91 }   /* ccc=ccc91 */,
+  {    13,  8589,  4385,   7,   4, UNI_TANG }   /* script=tang */,
+  {     0,  7088,  2893,  10,  19, UNI_BC__RLO }   /* bidiclass=righttoleftoverride */,
+  {     0,  8589,  7558,   7,   9, UNI_SC__QAAI }   /* script=inherited */,
+  {     1,  7088, 10018,  10,   3, UNI_BC__FSI }   /* bidiclass=fsi */,
+  {     3,  8780,  6505,   6,  12, UNI_PHAISTOS }   /* block=phaistosdisc */,
+  {     0, 10024, 10168,   3,   2, UNI_CASEDLETTER }   /* gc=l& */,
+  {     2, 10033,  5564,   3,   9, UNI_LB__QU }   /* lb=quotation */,
+  {     3,  9488,  1033,   4,  27, UNI_ENCLOSEDCJK }   /* blk=enclosedcjklettersandmonths */,
+  {     6,  2224,   780,   3,  29, UNI_SYMBOLSANDPICTOGRAPHSEXTA }   /* insymbolsandpictographsextendeda */,
+  {     1,   184,  3870,   2,  17, UNI_SMALLFORMS }   /* issmallformvariants */,
+  {     0,  9808,     0,   4,   0, UNI_TALU }   /* talu */,
+  {     5,  6805,  4261,   6,  12, UNI_MISCMATHSYMBOLSB }   /* inmiscmathsymbolsb */,
+  {     8,  3836,  9008,  17,   6, UNI_THAA }   /* scriptextensions=thaana */,
+  {     6,  9277,    78,   3,   4, UNI_SC__ARAB }   /* sc=arab */,
+  {     1,  2218,  9685,   3,   3, UNI_INNEWA }   /* innewa */,
+  {     1,  3367,     0,  18,   0, UNI_patws_values_index }   /* patternwhitespace= */,
+  {     1,  6061, 10135,  12,   3, UNI_BIDIC }   /* bidicontrol=yes */,
+  {     0,  8780,  9305,   6,   5, UNI_INNUSHU }   /* block=nushu */,
+  {     1,  9488,  8596,   4,   7, UNI_SC__SHRD }   /* blk=sharada */,
+  {     0,  9768,  8344,   4,   4, UNI_BENG }   /* scx=beng */,
+  {     6,  3853,     3,  17,   1, -UNI_STERM }   /* sentenceterminal=f */,
+  {     1,   779,     0,  30,   0, UNI_SYMBOLSANDPICTOGRAPHSEXTA }   /* symbolsandpictographsextendeda */,
+  {     1,  9260,  1025,   5,   2, -UNI_IDSB }   /* idsb=no */,
+  {     1,  9768,  7621,   4,   9, UNI_NBAT }   /* scx=nabataean */,
+  {     3,  8780,  2076,   6,  22, UNI_TRANSPORTANDMAP }   /* block=transportandmapsymbols */,
+  {     0,  6469,     0,  12,   0, UNI_nt_values_index }   /* numerictype= */,
+  {     0,  7218,  7522,  10,   9, UNI_LB__B2 }   /* linebreak=breakboth */,
+  {     0,  9277,  9245,   3,   5, UNI_SC__DOGR }   /* sc=dogra */,
+  {     0,  9488,   908,   4,  10, UNI_PUA }   /* blk=privateuse */,
+  {     7, 10027,  6906,   3,  11, UNI_JG__ROHINGYAYEH }   /* jg=rohingyayeh */,
+  {     3,  2288,  1656,   4,  21, UNI_COMPATJAMO }   /* inhangulcompatibilityjamo */,
+  {     2,  3097,  1294,  18,   5, UNI_DT__SUP }   /* decompositiontype=super */,
+  {     2,  9488,  4598,   4,  15, UNI_DIACRITICALSEXT }   /* blk=diacriticalsext */,
+  {     0,  9508,  7950,   4,   1, UNI_CCC__9 }   /* ccc=9 */,
+  {     5,  4065,     0,  16,   0, UNI_HALFANDFULLFORMS }   /* halfandfullforms */,
+  {     2,  7088,  3700,  10,  17, UNI_BC__ES }   /* bidiclass=europeanseparator */,
+  {    48,  8589,  2855,   7,   9, UNI_SC__MONG }   /* script=mongolian */,
+  {     0,  7218,   395,  10,   2, UNI_LB__GL }   /* linebreak=gl */,
+  {     1,  9008,     0,   4,   0, UNI_THAA }   /* thaa */,
+  {     3,  9488,  6121,   4,  12, UNI_CYRILLICEXTC }   /* blk=cyrillicextc */,
+  {     4,   184,  1944,   2,  22, UNI_EARLYDYNASTICCUNEIFORM }   /* isearlydynasticcuneiform */,
+  {     8, 10024,  6035,   3,   2, UNI_PF }   /* gc=pf */,
+  {     0, 10048,  8750,   3,   4, UNI_NV__8000 }   /* nv=8000 */,
+  {     2,  4116,     6,   3,   2, UNI_IDC }   /* isidc */,
+  {     7, 10048,  7858,   3,   2, UNI_NV__22 }   /* nv=22 */,
+  {     1,  9488,  2609,   5,   5, UNI_INBRAHMI }   /* blk=brahmi */,
+  {     0,  8115,     0,   4,   0, UNI_BASS }   /* bass */,
+  {     2,  9768,  8477,   4,   7, UNI_MAKA }   /* scx=makasar */,
+  {     0,  8780,   570,   7,  29, UNI_CJKEXTC }   /* block=cjkunifiedideographsextensionc */,
+  {     0, 10033,  5585,   3,   2, UNI_EBASE }   /* lb=eb */,
+  {    14,  2119,     0,  14,   0, UNI_CJKRADICALSSUP }   /* cjkradicalssup */,
+  {     0,   493,     0,   3,   0, UNI_HAN }   /* han */,
+  {     1,  3836,  2817,  17,   4, UNI_MERO }   /* scriptextensions=mero */,
+  {     1, 10288,  6554,   3,  10, UNI_XIDC }   /* isxidcontinue */,
+  {    65,   184,  6807,   2,  11, UNI_MISCSYMBOLS }   /* ismiscsymbols */,
+  {    65,  9508,  9922,   4,   3, UNI_CCC__214 }   /* ccc=214 */,
+  {   100,  8275,     0,   8,   0, UNI_SPECIALS }   /* specials */,
+  {     0,  5986,  7890,  13,   2, UNI_NV__33 }   /* numericvalue=33 */,
+  {     0,  2288,  1514,   3,  23, UNI_HIGHPUSURROGATES }   /* inhighprivateusesurrogates */,
+  {    24,  2760,  5633,  19,   2, UNI_LB__H2 }   /* hangulsyllabletype=lv */,
+  {    17,   184,   908,   2,  14, UNI_PUA }   /* isprivateusearea */,
+  {     0,  9768,  8659,   4,   7, UNI_TIBT }   /* scx=tibetan */,
+  {     4, 10129, 10135,   3,   3, UNI_VS }   /* vs=yes */,
+  {     1,  7540,  9255,   9,   5, -UNI_EXT }   /* extender=false */,
+  {     1,  9350,  1025,   5,   2, -UNI_XIDS }   /* xids=no */,
+  {     1,  9768,  8645,   4,   7, UNI_LANA }   /* scx=taitham */,
+  {     0,  8589,  2817,   7,  19, UNI_MERO }   /* script=meroitichieroglyphs */,
+  {    11,  9504,     0,   4,   0, UNI_CANS }   /* cans */,
+  {     0,  9277,  9580,   3,   4, UNI_SC__HANO }   /* sc=hano */,
+  {    15, 10024,     1,   3,   1, UNI_N }   /* gc=n */,
+  {    21,  3836,  9740,  17,   4, UNI_QAAI }   /* scriptextensions=qaai */,
+  {    22, 10033,  5088,   3,  14, UNI_LB__SA }   /* lb=complexcontext */,
+  {     0,  1417,  9223,  24,   2, UNI_CCC__91 }   /* canonicalcombiningclass=91 */,
+  {     0,  9596,  6541,   4,  12, UNI_GCB__T }   /* hst=trailingjamo */,
+  {     0,  8688,  3923,   4,  14, UNI_ARABICSUP }   /* isarabicsupplement */,
+  {     4,   184,  3893,   2,  11, UNI_SGNW }   /* issignwriting */,
+  {     0,  7118,     0,  10,   0, UNI_CHRS }   /* chorasmian */,
+  {     4,     0,     0,  42,   0, UNI_UCASEXT }   /* unifiedcanadianaboriginalsyllabicsextended */,
+  {     3, 10333,  6973,   3,   3, UNI_SYLO }   /* issylo */,
+  {     5,  7088,  2509,  10,  11, UNI_BC__R }   /* bidiclass=righttoleft */,
+  {     5,  9275,  4417,   5,   5, UNI_INSC__VOWEL }   /* insc=vowel */,
+  {     0, 10024,  5494,   3,  14, UNI_MN }   /* gc=nonspacingmark */,
+  {    32,  1552,  9225,   9,   5, UNI_XPOSIXCNTRL }   /* category=cntrl */,
+  {    16,  9262,  9080,   3,   5, UNI_SB__AT }   /* sb=aterm */,
+  {     0, 10033,   908,   3,   2, UNI_LB__PR }   /* lb=pr */,
+  {     0,  7318,  7781,  10,   1, UNI_IN__4 }   /* presentin=4 */,
+  {     0,  4883,     0,  15,   0, UNI_SARB }   /* oldsoutharabian */,
+  {     0,  5791,  4773,  13,   3, UNI_JG__SAD }   /* joininggroup=sad */,
+  {     1,   183,     0,  20,   0, UNI_MISCSYMBOLS }   /* miscellaneoussymbols */,
+  {     1,  6231,  3081,   4,  16, UNI_COPTICEPACTNUMBERS }   /* incopticepactnumbers */,
+  {     1,  5116,     1,  14,   1, -UNI_EMOD }   /* emojimodifier=n */,
+  {     0,  3836,  9636,  17,   4, UNI_LINB }   /* scriptextensions=linb */,
+  {    32,  8780,   349,   6,  33, UNI_SUPSYMBOLSANDPICTOGRAPHS }   /* block=supplementalsymbolsandpictographs */,
+  {     0,  5018,     0,  14,   0, UNI_ANCIENTSYMBOLS }   /* ancientsymbols */,
+  {     4, 10048,  7821,   3,   1, UNI_NV__8 }   /* nv=8 */,
+  {     3,  5986,  9380,  13,   3, UNI_NV__1_SLASH_8 }   /* numericvalue=1/8 */,
+  {     3,  9488,  8379,   4,   7, UNI_CJKEXTE }   /* blk=cjkexte */,
+  {    24,  4916,  3458,   3,  10, UNI_TAIXUANJING }   /* istaixuanjing */,
+  {     1,  8864,  9255,   6,   5, -UNI_EMOJI }   /* emoji=false */,
+  {     1,  3836,  2560,  17,   4, UNI_MAND }   /* scriptextensions=mand */,
+  {     1,  8912,     0,   4,   0, UNI_KHOJ }   /* khoj */,
+  {     0,  8780,  8243,   6,   8, UNI_INMAHAJANI }   /* block=mahajani */,
+  {     1,  9277,  3241,   3,   8, UNI_SC__GEOR }   /* sc=georgian */,
+  {     1,  8187,     0,   4,   0, UNI_HIRA }   /* hira */,
+  {    23,   184,  2054,   2,  22, UNI_MODIFIERLETTERS }   /* isspacingmodifierletters */,
+  {     0,  1417,  7858,  24,   3, UNI_CCC__B }   /* canonicalcombiningclass=220 */,
+  {     0,  9290,  9836,   5,   4, UNI_MATH }   /* math=true */,
+  {     1,  5986,  9432,  13,   4, UNI_NV__5_SLASH_12 }   /* numericvalue=5/12 */,
+  {     1,  9768,  9808,   4,   4, UNI_TALU }   /* scx=talu */,
+  {    15,  3529,  9255,  18,   5, -UNI_VS }   /* variationselector=false */,
+  {     0,  1537,  7170,   4,   8, UNI_INDIVESAKURU }   /* indivesakuru */,
+  {     1,  3529,  9836,  18,   4, UNI_VS }   /* variationselector=true */,
+  {     8,  1834,     1,  22,   1, -UNI_CWT }   /* changeswhentitlecased=n */,
+  {     0,  3097,  2569,  18,   4, UNI_DT__VERT }   /* decompositiontype=vert */,
+  {     2,  4916,  2297,   3,   3, UNI_THAI }   /* isthai */,
+  {    51,  9556,    34,   4,   6, UNI_GCB__EX }   /* gcb=extend */,
+  {     1,   184,  2350,   3,  19, UNI_PC }   /* isconnectorpunctuation */,
+  {     8,  7158,     0,  10,   0, UNI_dia_values_index }   /* diacritic= */,
+  {     2,  4033,   728,  16,   6, UNI_N }   /* generalcategory=number */,
+  {     0, 10048,  8756,   3,   3, UNI_NV__900 }   /* nv=900 */,
+  {     2,  9488,   113,   4,  25, UNI_DIACRITICALS }   /* blk=combiningdiacriticalmarks */,
+  {     1,    96,     0,  10,   0, UNI_XPOSIXALPHA }   /* alphabetic */,
+  {     0,  9488,  1677,   4,   9, UNI_LATINEXTE }   /* blk=latinexte */,
+  {     0,   184,   809,   2,  29, UNI_ENCLOSEDIDEOGRAPHICSUP }   /* isenclosedideographicsupplement */,
+  {     3,  8589,  8876,   7,   4, UNI_GOTH }   /* script=goth */,
+  {     0, 10048,  7778,   3,   2, UNI_NV__21 }   /* nv=21 */,
+  {     1,  2529,  1025,  20,   2, -UNI_TERM }   /* terminalpunctuation=no */,
+  {     1,   184,  5746,   2,   5, UNI_EBASE }   /* isebase */,
+  {     0,  8589,  1115,   7,   4, UNI_SC__HANG }   /* script=hang */,
+  {    54,   184,  3295,   2,  18, UNI_LATINEXTADDITIONAL }   /* islatinextadditional */,
+  {    31,  9488,  3683,   4,  16, UNI_ETHIOPICEXT }   /* blk=ethiopicextended */,
+  {     3,  7438,  5746,  10,   5, UNI_WB__EB }   /* wordbreak=ebase */,
+  {     5,  8589,  8091,   7,   8, UNI_ARMN }   /* script=armenian */,
+  {    22,  7076,  1586,   3,  22, UNI_BYZANTINEMUSIC }   /* inbyzantinemusicalsymbols */,
+  {     0,  7155,  8450,   3,   5, UNI_HYPHEN }   /* ishyphen */,
+  {     0,  5791,     5,  13,   1, UNI_JG__E }   /* joininggroup=e */,
+  {     1,  9277,  9656,   3,   4, UNI_MIAO }   /* sc=miao */,
+  {     3, 10132,  8139,   3,   8, UNI_WB__EB }   /* wb=ebasegaz */,
+  {     2,  1417,     0,  24,   0, UNI_ccc_values_index }   /* canonicalcombiningclass= */,
+  {     1,  2529, 10135,  20,   3, UNI_TERM }   /* terminalpunctuation=yes */,
+  {     4,  9816,     0,   4,   0, UNI_TAVT }   /* tavt */,
+  {     5,  8768,    36,   6,   1, UNI_BIDIC }   /* bidic=t */,
+  {     0,  9768,  8107,   4,   4, UNI_BALI }   /* scx=bali */,
+  {     0,  8449,    36,   7,   1, UNI_HYPHEN }   /* hyphen=t */,
+  {     1,  9444, 10102,   4,   3, UNI_AGE__5_DOT_2 }   /* age=v52 */,
+  {    14,  5986,  8732,  13,   6, UNI_NV__500000 }   /* numericvalue=500000 */,
+  {     0,  4916,  8584,   3,   3, UNI_TAGS }   /* istags */,
+  {     8,  9788,     0,   4,   0, UNI_SHRD }   /* shrd */,
+  {     2,  9488,  4973,   4,   8, UNI_VEDICEXT }   /* blk=vedicext */,
+  {     1,  9488,  2855,   4,  12, UNI_MONGOLIANSUP }   /* blk=mongoliansup */,
+  {     0,  9020,    36,   6,   1, UNI_XPOSIXUPPER }   /* upper=t */,
+  {    24,  1417,  9221,  25,   4, UNI_CCC__91 }   /* canonicalcombiningclass=ccc91 */,
+  {     1,  9488,  2429,   4,  20, UNI_ININSCRIPTIONALPAHLAVI }   /* blk=inscriptionalpahlavi */,
+  {     1,  6277,     0,  12,   0, UNI_MAHJONG }   /* mahjongtiles */,
+  {     0,   184,  8484,   2,   7, UNI_MAND }   /* ismandaic */,
+  {     3,  8780,  2666,   7,  18, UNI_COUNTINGROD }   /* block=countingrodnumerals */,
+  {     1,   184,  9864,   2,   4, UNI_WCHO }   /* iswcho */,
+  {    33,  5060,     1,  14,   1, -UNI_CI }   /* caseignorable=n */,
+  {     0,   184,     1,   2,   1, UNI_N }   /* isn */,
+  {     7,  8780,  4478,   6,   7, UNI_BRAI }   /* block=braille */,
+  {     8,  5578,  1867,  14,   5, UNI_SB__UP }   /* sentencebreak=upper */,
+  {     6,  9768,  7651,   4,   4, UNI_ITAL }   /* scx=ital */,
+  {     4, 10048,  8738,   3,   6, UNI_NV__600000 }   /* nv=600000 */,
+  {    13,  3079,     0,   6,   0, UNI_COPT }   /* coptic */,
+  {     8,  8589,  2224,   7,  21, UNI_PRTI }   /* script=inscriptionalparthian */,
+  {     1,  3836,  9600,  17,   4, UNI_KALI }   /* scriptextensions=kali */,
+  {    47,  1417,    16,  24,   1, UNI_CCC__B }   /* canonicalcombiningclass=b */,
+  {     1,  8589,  2913,   8,   8, UNI_SUND }   /* script=sundanese */,
+  {    33, 10048,  8019,   3,   8, UNI_NV__2_SLASH_3 }   /* nv=6.67e-01 */,
+  {    32,  3424,     1,   3,  41, UNI_UCASEXT }   /* inunifiedcanadianaboriginalsyllabicsextended */,
+  {    16,  9768,  8442,   4,   7, UNI_HANO }   /* scx=hanunoo */,
+  {    26,  9070,  1025,   5,   2, -UNI_POSIXXDIGIT }   /* ahex=no */,
+  {     0,   184,  8936,   2,   6, UNI_LYCI }   /* islycian */,
+  {     1,  6253,     0,  12,   0, UNI_KHMERSYMBOLS }   /* khmersymbols */,
+  {     0,  9768,  5843,   4,   9, UNI_MLYM }   /* scx=malayalam */,
+  {     0, 10024,   341,   3,   2, UNI_PE }   /* gc=pe */,
+  {     7,  9488,  3331,   4,  18, UNI_ORNAMENTALDINGBATS }   /* blk=ornamentaldingbats */,
+  {     4,  9508,  3015,   4,   5, UNI_CCC__A }   /* ccc=above */,
+  {     1,  9488,  3457,   4,  18, UNI_TAIXUANJING }   /* blk=taixuanjingsymbols */,
+  {     0,  5791,  7199,  14,   9, UNI_JG__KNOTTEDHEH }   /* joininggroup=knottedheh */,
+  {     5,  1417,  8795,  24,   3, UNI_CCC__103 }   /* canonicalcombiningclass=103 */,
+  {     1,  5791, 10057,  13,   3, UNI_JG__REH }   /* joininggroup=reh */,
+  {     3,  9488,  5688,   5,  12, UNI_BLOCKELEMENTS }   /* blk=blockelements */,
+  {     0,  1878,     0,  22,   0, UNI_CJKCOMPATIDEOGRAPHSSUP }   /* cjkcompatideographssup */,
+  {     1,  7318,  9840,  10,   4, UNI_IN__10 }   /* presentin=v100 */,
+  {     0,  8780,  7291,   6,   7, UNI_INSOGDIAN }   /* block=sogdian */,
+  {    24,  9277,  8990,   3,   6, UNI_RJNG }   /* sc=rejang */,
+  {     0, 10027,  9648,   3,   4, UNI_JG__MEEM }   /* jg=meem */,
+  {     5,  9724,     0,   4,   0, UNI_PHNX }   /* phnx */,
+  {     2,   184,  2855,   2,  12, UNI_MONGOLIANSUP }   /* ismongoliansup */,
+  {     1,  9768,  3241,   4,   8, UNI_GEOR }   /* scx=georgian */,
+  {     4, 10033, 10160,   3,   2, UNI_LB__H3 }   /* lb=h3 */,
+  {     2,  9492,   751,   4,   5, UNI_BPT__C }   /* bpt=close */,
+  {     8,  8407,     0,   7,   0, UNI_DSRT }   /* deseret */,
+  {    56, 10048,  8750,   3,   6, UNI_NV__800000 }   /* nv=800000 */,
+  {     1,  2409,     0,  13,   0, UNI_GLAGOLITICSUP }   /* glagoliticsup */,
+  {    16,  9768,  9592,   4,   4, UNI_HMNP }   /* scx=hmnp */,
+  {     9,  8589,  9584,   7,   4, UNI_HLUW }   /* script=hluw */,
+  {     1,  2280,  4885,   4,  13, UNI_SARB }   /* isoldsoutharabian */,
+  {     1,  3836,  9664,  17,   4, UNI_MRO }   /* scriptextensions=mroo */,
+  {   176,  6420,  9321,   3,   4, UNI_INOSAGE }   /* inosage */,
+  {     1,  8780,  8906,   6,   6, UNI_KANBUN }   /* block=kanbun */,
+  {    81,  1944,     0,  22,   0, UNI_EARLYDYNASTICCUNEIFORM }   /* earlydynasticcuneiform */,
+  {     2,  9277,   382,   3,   4, UNI_EGYP }   /* sc=egyp */,
+  {     0,  1087,     3,  27,   1, -UNI_PCM }   /* prependedconcatenationmark=f */,
+  {     0,  8589,  7288,   7,  10, UNI_SOGO }   /* script=oldsogdian */,
+  {    10,  9488,  5270,   4,  14, UNI_LATINEXTE }   /* blk=latinextendede */,
+  {   112,  3836,  9900,  17,   4, UNI_ZZZZ }   /* scriptextensions=zzzz */,
+  {     0,  8688,  2590,   3,  18, UNI_ANCIENTGREEKNUMBERS }   /* isancientgreeknumbers */,
+  {    65,  9997, 10042,   3,   3, UNI_BC__LRO }   /* bc=lro */,
+  {     0, 10033,  1465,   3,  13, UNI_LB__CM }   /* lb=combiningmark */,
+  {    28,  8780,    43,   7,   8, UNI_CJKCOMPAT }   /* block=cjkcompat */,
+  {    32,  7630,     0,   9,   0, UNI_TALU }   /* newtailue */,
+  {     3,  9768,   493,   4,   3, UNI_HAN }   /* scx=han */,
+  {     4, 10340,  9861,   3,   3, UNI_VAI }   /* isvaii */,
+  {     4, 10027,  7045,   3,   3, UNI_JG__FEH }   /* jg=feh */,
+  {     1,  6710,  3583,   4,  15, UNI_UCAS }   /* incanadiansyllabics */,
+  {     2,  4791,  6798,   4,   9, UNI_INMEDEFAIDRIN }   /* inmedefaidrin */,
+  {     4,  9768,  8456,   4,   7, UNI_KNDA }   /* scx=kannada */,
+  {    56,  1527,     0,   9,   0, UNI__PERL_SURROGATE }   /* surrogate */,
+  {     1,  8780,  2855,   6,  12, UNI_MONGOLIANSUP }   /* block=mongoliansup */,
+  {     0,  6807,     0,  11,   0, UNI_MISCSYMBOLS }   /* miscsymbols */,
+  {     1,  9290,     3,   5,   1, -UNI_MATH }   /* math=f */,
+  {     0,  8780,  1677,   6,  23, UNI_LATINEXTADDITIONAL }   /* block=latinextendedadditional */,
+  {     7,  9071, 10135,   4,   3, UNI_XPOSIXXDIGIT }   /* hex=yes */,
+  {     0,  5986,  9203,  13,   2, UNI_NV__34 }   /* numericvalue=34 */,
+  {     2,  8780,   540,   7,  29, UNI_CJKEXTB }   /* block=cjkunifiedideographsextensionb */,
+  {     0,  9038,     0,   4,   0, UNI_YEZI }   /* yezi */,
+  {    33,  5284,     0,  14,   0, UNI_LISUSUP }   /* lisusupplement */,
+  {     9,  4033,  4958,  16,  15, UNI_UPPERCASELETTER }   /* generalcategory=uppercaseletter */,
+  {     0,  3836,  9808,  17,   4, UNI_TALU }   /* scriptextensions=talu */,
+  {     8,  3836,  9860,  17,   3, UNI_VAI }   /* scriptextensions=vai */,
+  {     5,  9768,  9008,   4,   6, UNI_THAA }   /* scx=thaana */,
+  {     0,  8589,  7278,   7,  10, UNI_XPEO }   /* script=oldpersian */,
+  {     0,  3836,  3169,  17,   8, UNI_ETHI }   /* scriptextensions=ethiopic */,
+  {     9,  1828,  9255,   6,   5, -UNI_CASED }   /* cased=false */,
+  {     0, 10030,  6994,   3,  11, UNI_JT__T }   /* jt=transparent */,
+  {     0,  9768,  8421,   4,   4, UNI_ELYM }   /* scx=elym */,
+  {     2,  9488,  2061,   4,  15, UNI_MODIFIERLETTERS }   /* blk=modifierletters */,
+  {     1,  8589,  9464,   7,   4, UNI_ARMN }   /* script=armn */,
+  {     7,  9488,  8372,   4,   7, UNI_CJKEXTD }   /* blk=cjkextd */,
+  {   100,  8589,  8912,   7,   6, UNI_SC__KHOJ }   /* script=khojki */,
+  {     0,  9488,  4449,   5,   4, UNI_INBAMUM }   /* blk=bamum */,
+  {    57,  8780,  8659,   6,   7, UNI_INTIBETAN }   /* block=tibetan */,
+  {     2,  9235,  9255,   5,   5, -UNI_CWCM }   /* cwcm=false */,
+  {     0,  3904,     3,  17,   1, -UNI_UIDEO }   /* unifiedideograph=f */,
+  {     0,  7188,     0,   4,   0, UNI_KHAR }   /* khar */,
+  {     2,  8780,  2477,   6,   3, UNI_PUA }   /* block=pua */,
+  {    32,  8780,  7248,   6,  10, UNI_MISCARROWS }   /* block=miscarrows */,
+  {   138,  9270,  5523,   3,  13, UNI_PHONETICEXTSUP }   /* inphoneticextsup */,
+  {     0,  4916,  4929,   3,  14, UNI_TAMILSUP }   /* istamilsupplement */,
+  {     1,  3836,  9632,  17,   4, UNI_LINA }   /* scriptextensions=lina */,
+  {     0,  8780,     0,   6,   0, UNI_blk_values_index }   /* block= */,
+  {    68,  8589,  9002,   7,   4, UNI_SC__TELU }   /* script=telu */,
+  {    22,  5578,   339,  14,   2, UNI_SB__LO }   /* sentencebreak=lo */,
+  {     0,  2349,     0,  20,   0, UNI_PC }   /* connectorpunctuation */,
+  {     1,   184,  5674,   2,   5, UNI_BIDIM }   /* isbidim */,
+  {    24, 10024,   908,   3,  10, UNI_CO }   /* gc=privateuse */,
+  {    64,    21,  2308,   2,  21, UNI_YIJING }   /* inyijinghexagramsymbols */,
+  {     0,  3836,  7648,  17,   9, UNI_ITAL }   /* scriptextensions=olditalic */,
+  {     0,  9508,  3007,   4,  18, UNI_CCC__216 }   /* ccc=attachedaboveright */,
+  {     2,  9503,     0,   2,   0, UNI_MC }   /* mc */,
+  {     8,  9277,  5843,   3,   9, UNI_SC__MLYM }   /* sc=malayalam */,
+  {     0,  9716,     1,   4,   1, -UNI_PCM }   /* pcm=n */,
+  {    29,  9997,  2266,   3,  21, UNI_BC__PDI }   /* bc=popdirectionalisolate */,
+  {     0, 10296, 10308,   7,   5, UNI_POSIXPRINT }   /* isposixprint */,
+  {    32, 10027,  4193,   3,  16, UNI_JG__MANICHAEANLAMEDH }   /* jg=manichaeanlamedh */,
+  {   138, 10333,  6886,   3,   3, UNI_SHAW }   /* isshaw */,
+  {     0,  9488,  5074,   4,  14, UNI_CJKCOMPATFORMS }   /* blk=cjkcompatforms */,
+  {    31,  3683,     0,  11,   0, UNI_ETHIOPICEXT }   /* ethiopicext */,
+  {    17,  9768,  9740,   4,   4, UNI_QAAI }   /* scx=qaai */,
+  {     3,  7218,   495,  10,   7, UNI_LB__NU }   /* linebreak=numeric */,
+  {     6,  9540,     0,   4,   0, UNI_dia_values_index }   /* dia= */,
+  {     0,  9070,     0,   5,   0, UNI_ahex_values_index }   /* ahex= */,
+  {     0,  8780,  3633,   7,  16, UNI_CYRILLICEXTA }   /* block=cyrillicextendeda */,
+  {     2,  4385,     0,  16,   0, UNI_TANGUTCOMPONENTS }   /* tangutcomponents */,
+  {    50,  8780,  6098,   7,  11, UNI_CYRILLICEXTA }   /* block=cyrillicexta */,
+  {     0,  9275,  4113,   5,  16, UNI_INSC__INVISIBLESTACKER }   /* insc=invisiblestacker */,
+  {     0,  9488,  1344,   4,  25, UNI_SYMBOLSFORLEGACYCOMPUTING }   /* blk=symbolsforlegacycomputing */,
+  {     1,  4542,  1633,   4,  13, UNI_GEOMETRICSHAPES }   /* ingeometricshapes */,
+  {     4,  9488,  6397,   4,  12, UNI_MATHALPHANUM }   /* blk=mathalphanum */,
+  {     4,  9345,     0,   5,   0, UNI_xidc_values_index }   /* xidc= */,
+  {     1,  3836,  9588,  17,   4, UNI_HMNG }   /* scriptextensions=hmng */,
+  {     0,  7228,  9836,  10,   4, UNI_XPOSIXLOWER }   /* lowercase=true */,
+  {   166, 10024,   400,   3,   6, UNI_CF }   /* gc=format */,
+  {     2,  9488,  5158,   4,  14, UNI_INGREEK }   /* blk=greekandcoptic */,
+  {     1,   838,     0,  29,   0, UNI_MISCARROWS }   /* miscellaneoussymbolsandarrows */,
+  {     4,  8882,     3,   6,   1, -UNI_GREXT }   /* grext=f */,
+  {    16,  2288,  4675,   4,  13, UNI_INHANGUL }   /* inhangulsyllables */,
+  {     0,  9270,  2549,   5,  20, UNI_INPC__TOPANDBOTTOMANDRIGHT }   /* inpc=topandbottomandright */,
+  {     0,  3921,     0,  16,   0, UNI_ARABICSUP }   /* arabicsupplement */,
+  {     8,    21,  2308,   2,   6, UNI_YIJING }   /* inyijing */,
+  {     0,  7495,     0,   9,   0, UNI_ARABICPFA }   /* arabicpfa */,
+  {     0,   184,  4340,   2,  13, UNI_MATHOPERATORS }   /* ismathoperators */,
+  {     0,  9488,  5778,   4,   6, UNI_IPAEXT }   /* blk=ipaext */,
+  {     0, 10027,  5620,   3,  10, UNI_JG__TEHMARBUTA }   /* jg=tehmarbuta */,
+  {     0,  2182,    73,  21,   2, UNI_WB__EB }   /* graphemeclusterbreak=em */,
+  {     0,  1979, 10169,  10,   1, UNI_CASEDLETTER }   /* category=l& */,
+  {     0,  9528,     1,   4,   1, -UNI_CWU }   /* cwu=n */,
+  {     0,  2760,  7720,  19,   9, UNI_GCB__V }   /* hangulsyllabletype=voweljamo */,
+  {     5,   184, 10168,   2,   2, UNI_CASEDLETTER }   /* isl& */,
+  {   182,  8365,     0,   7,   0, UNI_CJKEXTC }   /* cjkextc */,
+  {     4,  9768,  2224,   4,  21, UNI_PRTI }   /* scx=inscriptionalparthian */,
+  {     2,  9320,     0,   5,   0, UNI_OSGE }   /* osage */,
+  {   144,  9020,  1025,   6,   2, -UNI_XPOSIXUPPER }   /* upper=no */,
+  {     0,  9488,  1900,   4,  22, UNI_INDICNUMBERFORMS }   /* blk=commonindicnumberforms */,
+  {     1,  5986,  8075,  13,   8, UNI_NV__7_SLASH_8 }   /* numericvalue=8.75e-01 */,
+  {     0,  5116,  1025,  14,   2, -UNI_EMOD }   /* emojimodifier=no */,
+  {   141,  9444, 10099,   4,   3, UNI_AGE__5_DOT_1 }   /* age=v51 */,
+  {     0,  8688,  5719,   3,   4, UNI_XPOSIXALNUM }   /* isalnum */,
+  {    12, 10333,     0,   7,   0, UNI_XPOSIXSPACE }   /* isspace */,
+  {     2,  1631,     0,  23,   0, UNI_GEOMETRICSHAPESEXT }   /* geometricshapesextended */,
+  {     1,  2288,  8188,   3,   7, UNI_INHIRAGANA }   /* inhiragana */,
+  {     3,  9230, 10135,   5,   3, UNI_CWCF }   /* cwcf=yes */,
+  {     9,  9508,  9931,   4,   3, UNI_CCC__L }   /* ccc=224 */,
+  {     8,  9768,  9245,   4,   4, UNI_DOGR }   /* scx=dogr */,
+  {     1,  6420,  7649,   3,   8, UNI_INOLDITALIC }   /* inolditalic */,
+  {     0,  9768,  6973,   5,   3, UNI_SYLO }   /* scx=sylo */,
+  {    37,  5578,    69,  14,   2, UNI_SB__UP }   /* sentencebreak=up */,
+  {     2,  2280,  7290,   4,   8, UNI_SOGO }   /* isoldsogdian */,
+  {     0,  5116,  9836,  14,   4, UNI_EMOD }   /* emojimodifier=true */,
+  {     0,  9277,  6409,   3,   4, UNI_MEND }   /* sc=mend */,
+  {   113, 10333,  2913,   3,   8, UNI_SUND }   /* issundanese */,
+  {     2,  3836,  7675,  17,   4, UNI_PALM }   /* scriptextensions=palm */,
+  {    34,  8589,  9548,   7,   4, UNI_DSRT }   /* script=dsrt */,
+  {    10,  9768,  7118,   4,  10, UNI_CHRS }   /* scx=chorasmian */,
+  {     0,  9997,  3374,   3,  10, UNI_BC__WS }   /* bc=whitespace */,
+  {     1,  8852,  1025,   6,   2, -UNI_CWKCF }   /* cwkcf=no */,
+  {     7,  2477,     0,   3,   0, UNI_PUA }   /* pua */,
+  {     1,   184,   809,   2,  22, UNI_ENCLOSEDIDEOGRAPHICSUP }   /* isenclosedideographicsup */,
+  {     0,  1417,     8,  24,   1, UNI_CCC__A }   /* canonicalcombiningclass=a */,
+  {    46,  5466,    26,  14,   1, UNI_NFDQC__Y }   /* nfdquickcheck=y */,
+  {     0,  2182,    24,  21,   1, UNI_GCB__L }   /* graphemeclusterbreak=l */,
+  {     5,  9275,  1244,   5,   9, UNI_INSC__CONSONANT }   /* insc=consonant */,
+  {     1, 10048,  8732,   3,   5, UNI_NV__50000 }   /* nv=50000 */,
+  {     0, 10024, 10176,   3,   2, UNI_ZL }   /* gc=zl */,
+  {     5,  9488,  4883,   4,  15, UNI_SARB }   /* blk=oldsoutharabian */,
+  {    43,   184,  5270,   2,  14, UNI_LATINEXTE }   /* islatinextendede */,
+  {     0, 10063,    26,   3,   1, UNI_SD }   /* sd=y */,
+  {     0,  5791,  5918,  13,   3, UNI_JG__TAW }   /* joininggroup=taw */,
+  {    10,  3385,     3,  18,   1, -UNI_RI }   /* regionalindicator=f */,
+  {     2,  9488,  7594,   4,   9, UNI_LATINEXTD }   /* blk=latinextd */,
+  {     0,  3836,  1900,  17,   6, UNI_ZYYY }   /* scriptextensions=common */,
+  {     0, 10033, 10158,   3,   2, UNI_LB__H2 }   /* lb=h2 */,
+  {   144,  9768,  7359,   5,   3, UNI_SAUR }   /* scx=saur */,
+  {     1, 10048,  7859,   3,   6, UNI_NV__200000 }   /* nv=200000 */,
+  {     0,  5986,  7923,  13,   8, UNI_NV__2_SLASH_5 }   /* numericvalue=4.00e-01 */,
+  {    32,   184,  2141,   3,  10, UNI_CYRILLICSUP }   /* iscyrillicsup */,
+  {     0,  4916,  3458,   3,  17, UNI_TAIXUANJING }   /* istaixuanjingsymbols */,
+  {     4,  8780,  2141,   7,  17, UNI_CYRILLICSUP }   /* block=cyrillicsupplement */,
+  {     7,  8780,  4448,   6,   5, UNI_INBAMUM }   /* block=bamum */,
+  {     1,  8091,     0,   8,   0, UNI_ARMN }   /* armenian */,
+  {    32,   184,     0,   3,   0, UNI_C }   /* isc */,
+  {     0,   184,  8115,   2,   4, UNI_BASS }   /* isbass */,
+  {     3,   184,  4583,   2,   4, UNI_DASH }   /* isdash */,
+  {     1,  9488,  4401,   4,  16, UNI_TANGUTSUP }   /* blk=tangutsupplement */,
+  {     1,  8780,  4257,   6,  16, UNI_MISCMATHSYMBOLSB }   /* block=miscmathsymbolsb */,
+  {     2,  9015,     1,   5,   1, -UNI_IDEO }   /* ideo=n */,
+  {     0,   184,  1677,   2,   5, UNI_LATN }   /* islatin */,
+  {    12, 10288,  3379,   8,   5, UNI_XPOSIXSPACE }   /* isxposixspace */,
+  {    89,  9488,  3439,   4,  18, UNI_SMALLKANAEXT }   /* blk=smallkanaextension */,
+  {     1,  2569,     0,  20,   0, UNI_vo_values_index }   /* verticalorientation= */,
+  {     0, 10024,  2268,   3,   2, UNI_PD }   /* gc=pd */,
+  {    30,  9488,  5256,   4,  14, UNI_LATINEXTD }   /* blk=latinextendedd */,
+  {     0,  8780,   567,   6,   2, UNI_NB }   /* block=nb */,
+  {     4, 10048,  7859,   3,   2, UNI_NV__20 }   /* nv=20 */,
+  {     0,  9444, 10123,   4,   3, UNI_AGE__9 }   /* age=v90 */,
+  {     0,  1417,  8811,  25,   5, UNI_CCC__122 }   /* canonicalcombiningclass=ccc122 */,
+  {     0,  9488,  7291,   4,   7, UNI_INSOGDIAN }   /* blk=sogdian */,
+  {    36, 10003,     1,   3,   1, -UNI_CI }   /* ci=n */,
+  {     1,  9277,  2817,   3,   4, UNI_MERO }   /* sc=mero */,
+  {     0, 10030,  6529,   3,  12, UNI_JT__R }   /* jt=rightjoining */,
+  {     2,  3836,  9325,  17,   5, UNI_RUNR }   /* scriptextensions=runic */,
+  {     0,  7058,     0,  10,   0, UNI_ARABICEXTA }   /* arabicexta */,
+  {     0,  3836,  8786,  17,   6, UNI_CARI }   /* scriptextensions=carian */,
+  {     8,  4658,     1,  15,   1, -UNI_GREXT }   /* graphemeextend=n */,
+  {     6,  9768,  1900,   4,   6, UNI_ZYYY }   /* scx=common */,
+  {    25,  9488,  2817,   4,  19, UNI_MERO }   /* blk=meroitichieroglyphs */,
+  {     0,    21,  5214,   2,   6, UNI_KANGXI }   /* inkangxi */,
+  {    65,  9488,  8990,   4,   6, UNI_INREJANG }   /* blk=rejang */,
+  {     0,  7318,  9955,  10,   3, UNI_IN__3_DOT_2 }   /* presentin=3.2 */,
+  {     0,  7325,  9388,   3,   4, UNI_IN__11 }   /* in=11.0 */,
+  {     1,  5791,  4193,  13,  16, UNI_JG__MANICHAEANLAMEDH }   /* joininggroup=manichaeanlamedh */,
+  {     3, 10027,  3785,   3,  17, UNI_JG__MANICHAEANDHAMEDH }   /* jg=manichaeandhamedh */,
+  {     2,  2855,     0,  19,   0, UNI_MONGOLIANSUP }   /* mongoliansupplement */,
+  {     0,   749,     0,  30,   0, UNI_ENCLOSEDALPHANUMSUP }   /* enclosedalphanumericsupplement */,
+  {     0,  8780,  6012,   6,  13, UNI_VERTICALFORMS }   /* block=verticalforms */,
+  {     1,  7325,  7765,   3,   1, UNI_IN__2 }   /* in=2 */,
+  {     2,  9488,  6097,   4,  12, UNI_CYRILLICEXTA }   /* blk=cyrillicexta */,
+  {     2,  8589,     0,   7,   0, UNI_sc_values_index }   /* script= */,
+  {     3,   446,     0,  18,   0, UNI_IDEOGRAPHICSYMBOLS }   /* ideographicsymbols */,
+  {     0,  5986,  9208,  13,   2, UNI_NV__35 }   /* numericvalue=35 */,
+  {     0,  9277,  2203,   3,   4, UNI_SC__HAN }   /* sc=hani */,
+  {    10,  9277,  2409,   3,  10, UNI_SC__GLAG }   /* sc=glagolitic */,
+  {     2,  8984,  9836,   6,   4, UNI_QMARK }   /* qmark=true */,
+  {     3,  5452,  9295,  14,   5, UNI_NFCQC__M }   /* nfcquickcheck=maybe */,
+  {     0,  9508,  9218,   4,   2, UNI_CCC__84 }   /* ccc=84 */,
+  {     1,  5791,  5312,  13,  14, UNI_JG__MANICHAEANAYIN }   /* joininggroup=manichaeanayin */,
+  {     3,   184,  3683,   2,  17, UNI_ETHIOPICEXTA }   /* isethiopicextendeda */,
+  {     2, 10027,  7055,   3,   3, UNI_JG__QAF }   /* jg=qaf */,
+  {     0,  2076,     0,  22,   0, UNI_TRANSPORTANDMAP }   /* transportandmapsymbols */,
+  {     2,    21,  8900,   2,   6, UNI_INKAITHI }   /* inkaithi */,
+  {     0,  8882,     0,   5,   0, UNI_GREXT }   /* grext */,
+  {    24,  9488,  1393,   4,  24, UNI_ARABICPFB }   /* blk=arabicpresentationformsb */,
+  {    64,  1552,  4583,   9,  15, UNI_PD }   /* category=dashpunctuation */,
+  {     0,  7438,  7730,  11,   8, UNI_WB__WSEGSPACE }   /* wordbreak=wsegspace */,
+  {     0,  9768,  9864,   4,   4, UNI_WCHO }   /* scx=wcho */,
+  {     1, 10024, 10178,   3,   2, UNI_ZP }   /* gc=zp */,
+  {     0, 10027,  6361,   3,  12, UNI_JG__MALAYALAMTTA }   /* jg=malayalamtta */,
+  {    40,  5986,  9408,  13,   4, UNI_NV__15_SLASH_2 }   /* numericvalue=15/2 */,
+  {     5,  5791,  5410,  13,  14, UNI_JG__MANICHAEANTETH }   /* joininggroup=manichaeanteth */,
+  {    13,  7088,  6493,  10,  12, UNI_BC__ON }   /* bidiclass=otherneutral */,
+  {    32,  8780,  1060,   7,   5, UNI_INCOPTIC }   /* block=coptic */,
+  {    32,  9488,  5186,   4,  14, UNI_HIGHSURROGATES }   /* blk=highsurrogates */,
+  {     8,  9768,  7648,   4,   9, UNI_ITAL }   /* scx=olditalic */,
+  {    37,  3529,     0,  18,   0, UNI_vs_values_index }   /* variationselector= */,
+  {     3,  8624,     0,   7,   0, UNI_SUPPUAA }   /* suppuaa */,
+  {     0,  1188,  2077,   3,  14, UNI_TRANSPORTANDMAP }   /* intransportandmap */,
+  {    97,  9488,  4449,   5,   7, UNI_BAMUMSUP }   /* blk=bamumsup */,
+  {     1,   184,  8344,   2,   4, UNI_BENG }   /* isbeng */,
+  {     1,  1417,  9934,  24,   3, UNI_CCC__R }   /* canonicalcombiningclass=226 */,
+  {     6,  9768,  9816,   4,   4, UNI_TAVT }   /* scx=tavt */,
+  {    82,  7738,     1,   9,   1, -UNI_XIDS }   /* xidstart=n */,
+  {     2,  8123,     0,   4,   0, UNI_BUGI }   /* bugi */,
+  {   166,  4257,     0,  16,   0, UNI_MISCMATHSYMBOLSB }   /* miscmathsymbolsb */,
+  {    56,  5986,  9416,  13,   4, UNI_NV__3_SLASH_16 }   /* numericvalue=3/16 */,
+  {     0,  9768,  8924,   4,   6, UNI_LEPC }   /* scx=lepcha */,
+  {    33,  8966,     0,   6,   0, UNI_nfdqc_values_index }   /* nfdqc= */,
+  {     0,  1087,  9255,  27,   5, -UNI_PCM }   /* prependedconcatenationmark=false */,
+  {     0,  8780,  3169,   6,   8, UNI_INETHIOPIC }   /* block=ethiopic */,
+  {     0,   184,  5256,   2,  14, UNI_LATINEXTD }   /* islatinextendedd */,
+  {     0,  8589,  8115,   7,   4, UNI_BASS }   /* script=bass */,
+  {     0,  7155,  1655,   3,  22, UNI_COMPATJAMO }   /* ishangulcompatibilityjamo */,
+  {     0,  8780,  3650,   7,  16, UNI_CYRILLICEXTB }   /* block=cyrillicextendedb */,
+  {    53,  9997,  5494,   3,  14, UNI_BC__NSM }   /* bc=nonspacingmark */,
+  {     0,  5791,  5396,  13,  14, UNI_JG__MANICHAEANRESH }   /* joininggroup=manichaeanresh */,
+  {     2,  9556,    18,   4,   2, UNI_RI }   /* gcb=ri */,
+  {     2,  8780,  6110,   7,  11, UNI_CYRILLICEXTB }   /* block=cyrillicextb */,
+  {     3,  9488,  3079,   4,   6, UNI_INCOPTIC }   /* blk=coptic */,
+  {     8,  7155,  6485,   3,   3, UNI_HUNG }   /* ishung */,
+  {     0,  5791,  5882,  13,  13, UNI_JG__MANICHAEANNUN }   /* joininggroup=manichaeannun */,
+  {     1,  5791,  7038,  13,  10, UNI_JG__AFRICANFEH }   /* joininggroup=africanfeh */,
+  {     2,  4628,     1,  15,   1, UNI_EA__N }   /* eastasianwidth=n */,
+  {     1,  9768,  3169,   4,   8, UNI_ETHI }   /* scx=ethiopic */,
+  {     1,  8780,  7504,   6,   9, UNI_ARABICPFB }   /* block=arabicpfb */,
+  {     0, 10033, 10162,   3,   2, UNI_GCB__L }   /* lb=jl */,
+  {     0,  9277,  9764,   3,   4, UNI_SARB }   /* sc=sarb */,
+  {     3,    21,  5284,   2,   4, UNI_INLISU }   /* inlisu */,
+  {     0,  8780,  9452,   6,   4, UNI_INAHOM }   /* block=ahom */,
+  {     0,  3097,  8163,  18,   3, UNI_DT__FRA }   /* decompositiontype=fra */,
+  {     1,  9260, 10135,   5,   3, UNI_IDSB }   /* idsb=yes */,
+  {     3,  9262,   112,   3,   2, UNI_SB__SC }   /* sb=sc */,
+  {     6,  9768,  3937,   4,   4, UNI_BOPO }   /* scx=bopo */,
+  {     3,  3382,     0,   3,   0, UNI_ce_values_index }   /* ce= */,
+  {     0,  5986,  5648,  13,   3, UNI_NV__100 }   /* numericvalue=100 */,
+  {     1,  7438,   138,  10,   2, UNI_WB__FO }   /* wordbreak=fo */,
+  {   214,  8882,  9255,   6,   5, -UNI_GREXT }   /* grext=false */,
+  {     1,  9351,     3,   4,   1, -UNI_IDS }   /* ids=f */,
+  {     0,  1273,     1,  21,   1, -UNI_CE }   /* compositionexclusion=n */,
+  {     1,  9277,  9788,   3,   4, UNI_SC__SHRD }   /* sc=shrd */,
+  {     1,  9488,  4161,   4,  16, UNI_LINEARBSYLLABARY }   /* blk=linearbsyllabary */,
+  {     0,    21,  8456,   2,   7, UNI_INKANNADA }   /* inkannada */,
+  {     0,  8589,  6181,   7,  12, UNI_SC__GONG }   /* script=gunjalagondi */,
+  {    16,  8358,     0,   7,   0, UNI_CJKEXTB }   /* cjkextb */,
+  {     1,  9262,   125,   3,   2, UNI_LB__CR }   /* sb=cr */,
+  {     1, 10027,  5882,   3,  13, UNI_JG__MANICHAEANNUN }   /* jg=manichaeannun */,
+  {     2,  8589,  9564,   7,   4, UNI_SC__GONM }   /* script=gonm */,
+  {     0,  9768,  9095,   4,   5, UNI_BUHD }   /* scx=buhid */,
+  {     0,  9444, 10096,   4,   3, UNI_AGE__5 }   /* age=v50 */,
+  {     2,  1188,  4929,   3,   7, UNI_TAMILSUP }   /* intamilsup */,
+  {     8,  7218,   202,  10,   2, UNI_LB__SA }   /* linebreak=sa */,
+  {    33,  9277,  7358,   3,  10, UNI_SAUR }   /* sc=saurashtra */,
+  {     0,  7218,   988,  10,   2, UNI_LB__CP }   /* linebreak=cp */,
+  {     1,  7088,  2489,  10,  20, UNI_BC__PDF }   /* bidiclass=popdirectionalformat */,
+  {     5, 10027,  5179,   3,   7, UNI_JG__HEHGOAL }   /* jg=hehgoal */,
+  {     8, 10024,  2349,   3,  20, UNI_PC }   /* gc=connectorpunctuation */,
+  {     9,  1966,  3061,  22,  18, UNI_INSC__CONSONANTSUBJOINED }   /* indicsyllabiccategory=consonantsubjoined */,
+  {    48,  7325,  9396,   3,   4, UNI_IN__12_DOT_1 }   /* in=12.1 */,
+  {     0,  7438,    34,  10,   2, UNI_WB__EX }   /* wordbreak=ex */,
+  {    24, 10012,     3,   3,   1, UNI_EA__F }   /* ea=f */,
+  {     1,  4033,  5040,  16,   5, UNI_XPOSIXDIGIT }   /* generalcategory=digit */,
+  {     2, 10333,  8632,   3,   6, UNI_SUPPUAB }   /* issuppuab */,
+  {   105,  9768,  9684,   4,   4, UNI_NEWA }   /* scx=newa */,
+  {    32,  1166,  1025,  26,   2, -UNI_DI }   /* defaultignorablecodepoint=no */,
+  {     3,  9488,  7128,   4,  10, UNI_CJKSTROKES }   /* blk=cjkstrokes */,
+  {     0,  5791,  4773,  13,   5, UNI_JG__SADHE }   /* joininggroup=sadhe */,
+  {    14,  4033,   467,  16,  11, UNI_P }   /* generalcategory=punctuation */,
+  {     0,  8780,  8291,   6,   8, UNI_INTAGBANWA }   /* block=tagbanwa */,
+  {     1,  6553,     0,   4,   0, UNI_XIDC }   /* xidc */,
+  {    10,  8435,    26,   7,   1, UNI_GRBASE }   /* grbase=y */,
+  {    16,  9488,   809,   4,  22, UNI_ENCLOSEDIDEOGRAPHICSUP }   /* blk=enclosedideographicsup */,
+  {    36,  6805,  4245,   6,  12, UNI_MISCMATHSYMBOLSA }   /* inmiscmathsymbolsa */,
+  {   137,   184,  5752,   2,   8, UNI_GREEKEXT }   /* isgreekext */,
+  {     3,  7088,  2266,  10,  21, UNI_BC__PDI }   /* bidiclass=popdirectionalisolate */,
+  {    67,  9270,  2455,   5,   5, UNI_INPC__RIGHT }   /* inpc=right */,
+  {     0,  1417,  7078,  24,  10, UNI_CCC__BR }   /* canonicalcombiningclass=belowright */,
+  {     4,  4916,  4929,   3,   4, UNI_TAML }   /* istamil */,
+  {    65,  7088,  2509,  10,  20, UNI_BC__RLE }   /* bidiclass=righttoleftembedding */,
+  {     0,  9768,  8421,   4,   7, UNI_ELYM }   /* scx=elymaic */,
+  {     9,  8694,  9836,   7,   4, UNI_XPOSIXSPACE }   /* wspace=true */,
+  {     0,  3836,  7359,  18,   9, UNI_SAUR }   /* scriptextensions=saurashtra */,
+  {     4,  7076,  8124,   3,   7, UNI_INBUGINESE }   /* inbuginese */,
+  {     0,  1966,  5102,  22,  14, UNI_INSC__CONSONANTFINAL }   /* indicsyllabiccategory=consonantfinal */,
+  {     4,  9768,  8131,   4,   4, UNI_DUPL }   /* scx=dupl */,
+  {     0,  8780,  1006,   6,  17, UNI_ANCIENTGREEKMUSIC }   /* block=ancientgreekmusic */,
+  {     1,  9488,  8291,   4,   8, UNI_INTAGBANWA }   /* blk=tagbanwa */,
+  {     3,   184,  4129,   2,  16, UNI_LATIN1 }   /* islatin1supplement */,
+  {     0,  9265,  9836,   5,   4, UNI_IDST }   /* idst=true */,
+  {    42,  9488,  5171,   4,   4, UNI_INCHAM }   /* blk=cham */,
+  {     3,  9488,  2287,   4,  21, UNI_SINHALAARCHAICNUMBERS }   /* blk=sinhalaarchaicnumbers */,
+  {     1,  9488,  7585,   4,   9, UNI_LATINEXTC }   /* blk=latinextc */,
+  {     0,  9488,   328,   4,  21, UNI_MATHOPERATORS }   /* blk=mathematicaloperators */,
+  {     0,  4628,  9868,  15,   4, UNI_EA__W }   /* eastasianwidth=wide */,
+  {    57, 10333,  2288,   3,   6, UNI_SINH }   /* issinhala */,
+  {     0,  4033,  3358,  16,   9, UNI_Z }   /* generalcategory=separator */,
+  {    12,  5791,  6323,  13,   5, UNI_JG__GAMAL }   /* joininggroup=gamal */,
+  {     0,  9488,  5003,   4,  15, UNI_INZANABAZARSQUARE }   /* blk=zanabazarsquare */,
+  {     2,  9345,     3,   5,   1, -UNI_XIDC }   /* xidc=f */,
+  {    16,  3836,  9880,  17,   4, UNI_YI }   /* scriptextensions=yiii */,
+  {   260,  3836,  8666,  17,   7, UNI_TIRH }   /* scriptextensions=tirhuta */,
+  {     0,  5791,  8155,  13,   8, UNI_JG__FARSIYEH }   /* joininggroup=farsiyeh */,
+  {     0,  8780,  4241,   6,  16, UNI_MISCMATHSYMBOLSA }   /* block=miscmathsymbolsa */,
+  {     3, 10009,  5904,   3,   4, UNI_DT__NONE }   /* dt=none */,
+  {   275,   184,  8352,   3,   6, UNI_CJKEXTA }   /* iscjkexta */,
+  {     0,  9277,  6884,   3,  11, UNI_HMNG }   /* sc=pahawhhmong */,
+  {    19, 10033,  5046,   3,  14, UNI_LB__CR }   /* lb=carriagereturn */,
+  {     2,  2224,  1562,   3,  23, UNI_SUPSYMBOLSANDPICTOGRAPHS }   /* insupsymbolsandpictographs */,
+  {     5,  9488,    42,   4,  26, UNI_CJKCOMPATIDEOGRAPHS }   /* blk=cjkcompatibilityideographs */,
+  {    93,  7088,    23,  10,   2, UNI_BC__AL }   /* bidiclass=al */,
+  {     9,  8780,  5270,   6,  14, UNI_LATINEXTE }   /* block=latinextendede */,
+  {     1,  9488,  7168,   4,  10, UNI_INDIVESAKURU }   /* blk=divesakuru */,
+  {     2,   184,  4017,   2,  16, UNI_PF }   /* isfinalpunctuation */,
+  {     2,  5986,  8067,  13,   8, UNI_NV__17_SLASH_2 }   /* numericvalue=8.50e+00 */,
+  {     0,  8780,  8484,   6,   7, UNI_INMANDAIC }   /* block=mandaic */,
+  {     6,  8780,  3421,   6,   4, UNI_RUMI }   /* block=rumi */,
+  {     0, 10027,  5326,   3,  14, UNI_JG__MANICHAEANBETH }   /* jg=manichaeanbeth */,
+  {     0,  3836,    78,  17,   4, UNI_ARAB }   /* scriptextensions=arab */,
+  {     5,  3836,  8645,  17,   7, UNI_LANA }   /* scriptextensions=taitham */,
+  {     1,  9277,  8477,   3,   4, UNI_MAKA }   /* sc=maka */,
+  {     1,  1537,  7298,  24,  10, UNI_INPC__OVERSTRUCK }   /* indicpositionalcategory=overstruck */,
+  {     1,  9488,  9800,   4,   4, UNI_TAGS }   /* blk=tags */,
+  {     0,  5606,     0,  14,   0, UNI_SUPPUNCTUATION }   /* suppunctuation */,
+  {     0,  6554,     0,   3,   0, UNI_IDC }   /* idc */,
+  {    86,  3836,  5284,  17,   4, UNI_LISU }   /* scriptextensions=lisu */,
+  {     1,  9488,  3887,   4,  17, UNI_SUTTONSIGNWRITING }   /* blk=suttonsignwriting */,
+  {     0,  8435, 10135,   7,   3, UNI_GRBASE }   /* grbase=yes */,
+  {     0,   184,  4002,   3,   6, UNI_CPRT }   /* iscypriot */,
+  {     0, 10033,  9557,   3,   2, UNI_LB__CB }   /* lb=cb */,
+  {     0,  8780,  2141,   7,  10, UNI_CYRILLICSUP }   /* block=cyrillicsup */,
+  {     1,  3836,    78,  17,   6, UNI_ARAB }   /* scriptextensions=arabic */,
+  {    13,   184,  9608,   2,   4, UNI_KITS }   /* iskits */,
+  {   137,   184,  7540,   2,   8, UNI_EXT }   /* isextender */,
+  {     1,  7325,  7782,   3,   1, UNI_IN__3 }   /* in=3 */,
+  {    36,  2308,     0,  21,   0, UNI_YIJING }   /* yijinghexagramsymbols */,
+  {     0,  5986,  8010,  13,   2, UNI_NV__36 }   /* numericvalue=36 */,
+  {     1,  5578,  1089,  15,   2, UNI_SB__SE }   /* sentencebreak=sep */,
+  {     3,  9668,     0,   4,   0, UNI_MTEI }   /* mtei */,
+  {     2,  3379,  9836,   6,   4, UNI_XPOSIXSPACE }   /* space=true */,
+  {     0,  6061,  9255,  12,   5, -UNI_BIDIC }   /* bidicontrol=false */,
+  {     0,  6609,     0,  10,   0, UNI_DEP }   /* deprecated */,
+  {     2, 10048,  7947,   3,   8, UNI_NV__3_SLASH_64 }   /* nv=4.69e-02 */,
+  {     3,  4643,  9255,  15,   5, -UNI_ECOMP }   /* emojicomponent=false */,
+  {    64,  8780,  8631,   6,   7, UNI_SUPPUAB }   /* block=suppuab */,
+  {     3,   184,  8498,   2,   4, UNI_MULT }   /* ismult */,
+  {     1,  9644,     0,   4,   0, UNI_MEDF }   /* medf */,
+  {     0, 10048,  9416,   3,   4, UNI_NV__3_SLASH_16 }   /* nv=3/16 */,
+  {     1,  9265,  1025,   5,   2, -UNI_IDST }   /* idst=no */,
+  {     0,  1006,     0,  27,   0, UNI_ANCIENTGREEKMUSIC }   /* ancientgreekmusicalnotation */,
+  {     1,  8589,  9672,   7,   4, UNI_SC__MYMR }   /* script=mymr */,
+  {     1,    21,  3751,   2,  17, UNI_INKHITANSMALLSCRIPT }   /* inkhitansmallscript */,
+  {     0,  4116,   415,   3,  31, UNI_INIDC }   /* isideographicdescriptioncharacters */,
+  {     3, 10024, 10180,   3,   2, UNI_ZS }   /* gc=zs */,
+  {     1, 10033,   340,   3,   2, UNI_LB__OP }   /* lb=op */,
+  {     5,  9488,   749,   4,  30, UNI_ENCLOSEDALPHANUMSUP }   /* blk=enclosedalphanumericsupplement */,
+  {    14,   184,  1184,   2,   3, UNI_DEP }   /* isdep */,
+  {     2,  6231,  2667,   4,  17, UNI_COUNTINGROD }   /* incountingrodnumerals */,
+  {     0,  8780,  8526,   6,   7, UNI_NB }   /* block=noblock */,
+  {    79,  7438,  7612,  10,   6, UNI_WB__MN }   /* wordbreak=midnum */,
+  {   136,  5986,  7955,  13,   8, UNI_NV__1_SLASH_20 }   /* numericvalue=5.00e-02 */,
+  {     5,   184,  2161,   2,  20, UNI_EXTPICT }   /* isextendedpictographic */,
+  {     3,  2280,  1759,   4,   2, UNI_OLCK }   /* isolck */,
+  {     0,   184,  1115,   3,  24, UNI_CWKCF }   /* ischangeswhennfkccasefolded */,
+  {     2,  9071,  9255,   4,   5, -UNI_XPOSIXXDIGIT }   /* hex=false */,
+  {     0,   184,  1044,   2,   6, UNI_L }   /* isletter */,
+  {     0,  9768,  3785,   4,  10, UNI_MANI }   /* scx=manichaean */,
+  {     4,  3836,  6484,  17,   4, UNI_HUNG }   /* scriptextensions=hung */,
+  {     0,  9488,   979,   4,  27, UNI_ALPHABETICPF }   /* blk=alphabeticpresentationforms */,
+  {     4,  5791,  9884,  13,   4, UNI_JG__ZAIN }   /* joininggroup=zain */,
+  {    31,  8780,  7239,   6,   2, UNI_INVS }   /* block=vs */,
+  {    72,  9997,  4493,   3,  15, UNI_BC__CS }   /* bc=commonseparator */,
+  {     2,  1768,  9836,  22,   4, UNI_CWCF }   /* changeswhencasefolded=true */,
+  {     0,  7318,     0,  10,   0, UNI_in_values_index }   /* presentin= */,
+  {    13, 10024,  4017,   3,  16, UNI_PF }   /* gc=finalpunctuation */,
+  {     2, 10048,  9360,   3,   4, UNI_NV___MINUS_1_SLASH_2 }   /* nv=-1/2 */,
+  {     0,  4241,     0,  16,   0, UNI_MISCMATHSYMBOLSA }   /* miscmathsymbolsa */,
+  {     0, 10048,  8726,   3,   6, UNI_NV__432000 }   /* nv=432000 */,
+  {     0,  3836,  9688,  17,   3, UNI_NKO }   /* scriptextensions=nko */,
+  {     1,  8780,  6122,   7,  11, UNI_CYRILLICEXTC }   /* block=cyrillicextc */,
+  {     4,  8780,  2061,   6,  15, UNI_MODIFIERLETTERS }   /* block=modifierletters */,
+  {     0,  8780,  8123,   6,   8, UNI_INBUGINESE }   /* block=buginese */,
+  {     3,  8780,  3667,   7,  16, UNI_CYRILLICEXTC }   /* block=cyrillicextendedc */,
+  {   137,   414,     0,  32,   0, UNI_INIDC }   /* ideographicdescriptioncharacters */,
+  {   290,  9488,  7288,   4,  10, UNI_INOLDSOGDIAN }   /* blk=oldsogdian */,
+  {     0,  9786,  8598,   4,   5, UNI_SC__SHRD }   /* insharada */,
+  {     0,  9768,  8463,   4,   7, UNI_KALI }   /* scx=kayahli */,
+  {     0,  1188,  4402,   3,   8, UNI_TANGUTSUP }   /* intangutsup */,
+  {     0,   184,   867,   2,  11, UNI_PHONETICEXT }   /* isphoneticext */,
+  {     4, 10296,  7207,   3,   3, UNI_PHLI }   /* isphli */,
+  {    11,  9508,  9928,   4,   3, UNI_CCC__BR }   /* ccc=222 */,
+  {     8,  3367,     0,  17,   0, UNI__PERL_PATWS }   /* patternwhitespace */,
+  {     1,  5986,  7859,  13,   8, UNI_NV__20000000 }   /* numericvalue=20000000 */,
+  {     0,   728,     0,   6,   0, UNI_N }   /* number */,
+  {     1, 10048,  7779,   3,   8, UNI_NV__1_SLASH_7 }   /* nv=1.43e-01 */,
+  {     1,  1166,     1,  26,   1, -UNI_DI }   /* defaultignorablecodepoint=n */,
+  {     9,  9752,     0,   4,   0, UNI_ROHG }   /* rohg */,
+  {     0,  1966,  3615,  22,  17, UNI_INSC__CONSONANTPREFIXED }   /* indicsyllabiccategory=consonantprefixed */,
+  {     6,  8780,  7388,   6,  10, UNI_SUPARROWSB }   /* block=suparrowsb */,
+  {     2,  1966,  2369,  22,  20, UNI_INSC__CONSONANTPLACEHOLDER }   /* indicsyllabiccategory=consonantplaceholder */,
+  {     0,  5986,  7859,  13,   4, UNI_NV__2000 }   /* numericvalue=2000 */,
+  {     4,  4129,     0,   6,   0, UNI_LATIN1 }   /* latin1 */,
+  {     4, 10033,     3,   4,   1, UNI_LB__LF }   /* lb=lf */,
+  {     5,  9275,  3953,   5,  16, UNI_INSC__CANTILLATIONMARK }   /* insc=cantillationmark */,
+  {    36,  4033,   206,  16,   2, UNI_PI }   /* generalcategory=pi */,
+  {     7,  9572,     0,   4,   0, UNI_GUJR }   /* gujr */,
+  {     1,  6961,     0,  11,   0, UNI_SUPERANDSUB }   /* superandsub */,
+  {     5,  9488,   509,   4,  20, UNI_CJK }   /* blk=cjkunifiedideographs */,
+  {     0,  1294,     0,  25,   0, UNI_SUPERANDSUB }   /* superscriptsandsubscripts */,
+  {    76,  9277,  8659,   3,   7, UNI_TIBT }   /* sc=tibetan */,
+  {     1,  7249,  6600,   4,   9, UNI_CASEDLETTER }   /* iscasedletter */,
+  {     0,  4033,  3985,  16,  16, UNI_PE }   /* generalcategory=closepunctuation */,
+  {     0,  9270,  3475,   5,  10, UNI_INPC__TOPANDLEFT }   /* inpc=topandleft */,
+  {     1,  3836,  8115,  17,   4, UNI_BASS }   /* scriptextensions=bass */,
+  {     2,  8780,  7027,   6,  11, UNI_YISYLLABLES }   /* block=yisyllables */,
+  {     1,  9351,  9836,   4,   4, UNI_IDS }   /* ids=true */,
+  {     0,  8379,     0,   7,   0, UNI_CJKEXTE }   /* cjkexte */,
+  {     0,  8780,  4129,   6,  16, UNI_LATIN1 }   /* block=latin1supplement */,
+  {    43,  9277,  9876,   3,   4, UNI_XSUX }   /* sc=xsux */,
+  {     0, 10030,     7,   3,   1, UNI_JT__C }   /* jt=c */,
+  {     0,  5986,  7874,  13,   2, UNI_NV__23 }   /* numericvalue=23 */,
+  {     0,  9488,  6620,   4,   6, UNI_DOMINO }   /* blk=domino */,
+  {     8,  9508,  8568,   4,   7, UNI_CCC__1 }   /* ccc=overlay */,
+  {     3,   184,  7388,   2,  10, UNI_SUPARROWSB }   /* issuparrowsb */,
+  {     0,  3836,  8597,  18,   6, UNI_SHRD }   /* scriptextensions=sharada */,
+  {    39,  9488,  3751,   4,  17, UNI_INKHITANSMALLSCRIPT }   /* blk=khitansmallscript */,
+  {     0,  9488,  7576,   4,   9, UNI_LATINEXTB }   /* blk=latinextb */,
+  {    31,  8589,  7694,   8,   8, UNI_SAMR }   /* script=samaritan */,
+  {    82,  9997,  2449,   3,  20, UNI_BC__LRE }   /* bc=lefttorightembedding */,
+  {     1,  9768,  1677,   4,   5, UNI_LATN }   /* scx=latin */,
+  {    32,  1537,  4615,   4,  13, UNI_DIACRITICALSSUP }   /* indiacriticalssup */,
+  {     0,  4116,  2225,   3,  20, UNI_PRTI }   /* isinscriptionalparthian */,
+  {     2,  5037,     0,   9,   0, UNI_hex_values_index }   /* hexdigit= */,
+  {     0,  1966,  9300,  22,   5, UNI_INSC__NUKTA }   /* indicsyllabiccategory=nukta */,
+  {     1,  6710,  3601,   5,  14, UNI_INCAUCASIANALBANIAN }   /* incaucasianalbanian */,
+  {    26,  7155,  5585,   3,   3, UNI_HEBR }   /* ishebr */,
+  {     0,  7325,  9967,   3,   3, UNI_IN__5_DOT_1 }   /* in=5.1 */,
+  {    65,  1746,     0,  23,   0, UNI_BPT__C }   /* bidipairedbrackettype=c */,
+  {     0, 10003,  1025,   3,   2, -UNI_CI }   /* ci=no */,
+  {    74,  4033,   598,  16,   2, UNI_XPOSIXCNTRL }   /* generalcategory=cc */,
+  {     0,   184,  9085,   2,   5, UNI_BATK }   /* isbatak */,
+  {     1,  9488,  4613,   4,  15, UNI_DIACRITICALSSUP }   /* blk=diacriticalssup */,
+  {     0,  9488,  2140,   4,   8, UNI_INCYRILLIC }   /* blk=cyrillic */,
+  {     1,  3379,  9255,   6,   5, -UNI_XPOSIXSPACE }   /* space=false */,
+  {     1,  3836,  6481,  17,  12, UNI_HUNG }   /* scriptextensions=oldhungarian */,
+  {     2,  8780,  1192,   6,  26, UNI_HALFANDFULLFORMS }   /* block=halfwidthandfullwidthforms */,
+  {     0,  1189,  5040,   3,   5, UNI_NT__DI }   /* nt=digit */,
+  {    55,  3836,  3079,  17,   6, UNI_COPT }   /* scriptextensions=coptic */,
+  {    16,   184,  5438,   2,  14, UNI_SK }   /* ismodifiersymbol */,
+  {     0, 10183,  3379,   4,   5, UNI_POSIXSPACE }   /* perlspace */,
+  {     2,  5986,  9413,  13,   3, UNI_NV__7_SLASH_2 }   /* numericvalue=7/2 */,
+  {     3,  3133, 10135,  18,   3, UNI_EBASE }   /* emojimodifierbase=yes */,
+  {     2, 10027,  7038,   3,  10, UNI_JG__AFRICANFEH }   /* jg=africanfeh */,
+  {     1,  8858,     1,   6,   1, -UNI_ECOMP }   /* ecomp=n */,
+  {     0,  9488,  1673,   4,   4, UNI_JAMO }   /* blk=jamo */,
+  {     0,  5578,   125,  14,   2, UNI_LB__CR }   /* sentencebreak=cr */,
+  {     3,  3382,  9836,   3,   4, UNI_CE }   /* ce=true */,
+  {     0,  3836,  9668,  17,   4, UNI_MTEI }   /* scriptextensions=mtei */,
+  {     2,  8978,     0,   6,   0, UNI_patws_values_index }   /* patws= */,
+  {     0,  9768,  7675,   4,   4, UNI_PALM }   /* scx=palm */,
+  {     3,  3836,  6193,  17,   4, UNI_HEBR }   /* scriptextensions=hebr */,
+  {     1,  3904,  9836,  17,   4, UNI_UIDEO }   /* unifiedideograph=true */,
+  {    13,  1552,  1563,   9,   2, UNI_PS }   /* category=ps */,
+  {     0,   184,   349,   2,  33, UNI_SUPSYMBOLSANDPICTOGRAPHS }   /* issupplementalsymbolsandpictographs */,
+  {    68,  1087,  1025,  27,   2, -UNI_PCM }   /* prependedconcatenationmark=no */,
+  {    73,  9277,  8131,   3,   4, UNI_SC__DUPL }   /* sc=dupl */,
+  {     0,  9488,  2140,   4,  11, UNI_CYRILLICSUP }   /* blk=cyrillicsup */,
+  {     8, 10340,  4975,   4,   6, UNI_VEDICEXT }   /* isvedicext */,
+  {    64,  9488,  8876,   4,   6, UNI_INGOTHIC }   /* blk=gothic */,
+  {     1,  8589,  7188,   7,  10, UNI_KHAR }   /* script=kharoshthi */,
+  {     2,  1417,  8708,  24,   3, UNI_CCC__216 }   /* canonicalcombiningclass=216 */,
+  {    11,  1591,  8415,   3,   6, UNI_INELBASAN }   /* inelbasan */,
+  {   142,  8780,  5256,   6,  14, UNI_LATINEXTD }   /* block=latinextendedd */,
+  {   138,  9768,  1115,   4,   4, UNI_HANG }   /* scx=hang */,
+  {    33,  4688,  7550,  16,   8, UNI_IDENTIFIERTYPE__INCLUSION }   /* identifiertype=inclusion */,
+  {    48,  8589,  9684,   7,   4, UNI_NEWA }   /* script=newa */,
+  {    58,  9768,  9476,   4,   4, UNI_AVST }   /* scx=avst */,
+  {   158,  5508,    26,  14,   1, UNI_PATSYN }   /* patternsyntax=y */,
+  {     0,  5986,  9964,  13,   3, UNI_NV__4_SLASH_5 }   /* numericvalue=4/5 */,
+  {     0,  9900,     0,   4,   0, UNI_ZZZZ }   /* zzzz */,
+  {    24, 10048,  7907,   3,   8, UNI_NV__3_SLASH_8 }   /* nv=3.75e-01 */,
+  {     3,  9488,  4273,   4,  16, UNI_MYANMAREXTA }   /* blk=myanmarextendeda */,
+  {     0,  9768,  9624,   4,   4, UNI_LAO }   /* scx=laoo */,
+  {     1,  5739, 10135,  13,   3, UNI_GRBASE }   /* graphemebase=yes */,
+  {     0, 10048,  5648,   3,   3, UNI_NV__100 }   /* nv=100 */,
+  {     5,  8852,    36,   6,   1, UNI_CWKCF }   /* cwkcf=t */,
+  {     9,   184,  8107,   2,   8, UNI_BALI }   /* isbalinese */,
+  {     2, 10048,  9964,   3,   3, UNI_NV__4_SLASH_5 }   /* nv=4/5 */,
+  {     1,  9508,  9925,   4,   3, UNI_CCC__BL }   /* ccc=218 */,
+  {     0,  9768,  4703,   4,  15, UNI_ARMI }   /* scx=imperialaramaic */,
+  {     0,  9488,  5200,   4,  14, UNI_KANASUP }   /* blk=kanasupplement */,
+  {    20,  5986,  9984,  13,   2, UNI_NV__37 }   /* numericvalue=37 */,
+  {     1,    21,  8227,   2,   8, UNI_KANAEXTA }   /* inkanaexta */,
+  {     2,  8131,     0,   4,   0, UNI_DUPL }   /* dupl */,
+  {     3,  9768,  9688,   4,   4, UNI_NKO }   /* scx=nkoo */,
+  {     0,  3836,  9892,  17,   4, UNI_QAAI }   /* scriptextensions=zinh */,
+  {     6,  7218,  7448,  10,  10, UNI_LB__WJ }   /* linebreak=wordjoiner */,
+  {     2,  9488,  2245,   4,  11, UNI_INMEETEIMAYEK }   /* blk=meeteimayek */,
+  {     5,  9768,  8840,   4,   6, UNI_CAKM }   /* scx=chakma */,
+  {    37,  9488,   478,   4,  31, UNI_MATHALPHANUM }   /* blk=mathematicalalphanumericsymbols */,
+  {     1,  5791,  5340,  13,  14, UNI_JG__MANICHAEANFIVE }   /* joininggroup=manichaeanfive */,
+  {     1, 10048,  9405,   3,   3, UNI_NV__3_SLASH_2 }   /* nv=3/2 */,
+  {     1,   184,  7129,   3,   9, UNI_CJKSTROKES }   /* iscjkstrokes */,
+  {     0,  3836,  2429,  17,  20, UNI_PHLI }   /* scriptextensions=inscriptionalpahlavi */,
+  {     1,  9488,  2409,   4,  10, UNI_INGLAGOLITIC }   /* blk=glagolitic */,
+  {     1,  9556,  6170,   5,  11, UNI_WB__EB }   /* gcb=glueafterzwj */,
+  {     0,  9997,    37,   3,   2, UNI_BC__EN }   /* bc=en */,
+  {    33,  9768,  2469,   4,  20, UNI_HMNP }   /* scx=nyiakengpuachuehmong */,
+  {     0,   184,  5817,   2,  13, UNI_ZL }   /* islineseparator */,
+  {    13,  3904,    26,  17,   1, UNI_UIDEO }   /* unifiedideograph=y */,
+  {     0,  9768,  2485,   4,   4, UNI_MONG }   /* scx=mong */,
+  {     0,  5116,     0,  14,   0, UNI_emod_values_index }   /* emojimodifier= */,
+  {     0, 10288,  1823,   8,   5, UNI_XPOSIXLOWER }   /* isxposixlower */,
+  {     7,  9768,  7278,   4,  10, UNI_XPEO }   /* scx=oldpersian */,
+  {     0,  9262,   495,   3,   2, UNI_SB__NU }   /* sb=nu */,
+  {     2,  9508,  7477,   4,   9, UNI_CCC__AL }   /* ccc=aboveleft */,
+  {     1,  8449,  9836,   7,   4, UNI_HYPHEN }   /* hyphen=true */,
+  {     2,  3836,  9568,  17,   4, UNI_GREK }   /* scriptextensions=grek */,
+  {    84, 10048,  8720,   3,   6, UNI_NV__400000 }   /* nv=400000 */,
+  {     1,  1552,  7408,   9,  10, UNI_CN }   /* category=unassigned */,
+  {     0,  7418,     0,  10,   0, UNI_upper_values_index }   /* uppercase= */,
+  {     1,  4033, 10176,  16,   2, UNI_ZL }   /* generalcategory=zl */,
+  {     2,  4793,     0,  15,   0, UNI_MERC }   /* meroiticcursive */,
+  {     0,  8589,  6484,   7,   4, UNI_HUNG }   /* script=hung */,
+  {     0,   184,  8942,   2,   6, UNI_LYDI }   /* islydian */,
+  {     0,  3367,     3,  18,   1, -UNI__PERL_PATWS }   /* patternwhitespace=f */,
+  {    48,  5791,  9744,  13,   4, UNI_JG__QAPH }   /* joininggroup=qaph */,
+  {    90,  4916,  8660,   3,   6, UNI_TIBT }   /* istibetan */,
+  {     1,  3097,  8163,  18,   8, UNI_DT__FRA }   /* decompositiontype=fraction */,
+  {     2,  2784,  3923,   4,   7, UNI_ARABICSUP }   /* inarabicsup */,
+  {     3,   184,  3796,   3,   3, UNI_CHAM }   /* ischam */,
+  {     0,  4116,  1907,   3,  15, UNI_INDICNUMBERFORMS }   /* isindicnumberforms */,
+  {     1,  3836,  2203,  17,  14, UNI_ROHG }   /* scriptextensions=hanifirohingya */,
+  {     1,  1966,  4353,  22,  16, UNI_INSC__SYLLABLEMODIFIER }   /* indicsyllabiccategory=syllablemodifier */,
+  {     1,  1417,  9931,  24,   3, UNI_CCC__L }   /* canonicalcombiningclass=224 */,
+  {     1,  9488,  7099,   5,   9, UNI_BOXDRAWING }   /* blk=boxdrawing */,
+  {     0,  8589,  8428,   7,   7, UNI_SC__GRAN }   /* script=grantha */,
+  {     1,  9768,  8912,   4,   6, UNI_KHOJ }   /* scx=khojki */,
+  {     5,  9488,  9065,   4,   5, UNI_INADLAM }   /* blk=adlam */,
+  {     0,   184,  5960,   2,  13, UNI_MISCTECHNICAL }   /* ismisctechnical */,
+  {    66,  7325,  7408,   3,  10, UNI_AGE__NA }   /* in=unassigned */,
+  {     0,  9556,   911,   4,   1, UNI_GCB__V }   /* gcb=v */,
+  {     0,  9275,  4305,   5,   5, UNI_INSC__OTHER }   /* insc=other */,
+  {     1,  9600,     0,   4,   0, UNI_KALI }   /* kali */,
+  {     0,  8852,  9255,   6,   5, -UNI_CWKCF }   /* cwkcf=false */,
+  {    10, 10296,  9225,   7,   5, UNI_POSIXCNTRL }   /* isposixcntrl */,
+  {     1,  7318,  9401,  10,   3, UNI_IN__3 }   /* presentin=3.0 */,
+  {    28,  8267, 10135,   8,   3, UNI_RADICAL }   /* radical=yes */,
+  {     0,  9768,  7513,   4,   9, UNI_BHKS }   /* scx=bhaiksuki */,
+  {     0,  5039,     0,   6,   0, UNI_XPOSIXXDIGIT }   /* xdigit */,
+  {     0,  9488,  5284,   4,   4, UNI_INLISU }   /* blk=lisu */,
+  {     1,  5986,  8708,  13,   6, UNI_NV__216000 }   /* numericvalue=216000 */,
+  {     3,  8780,  4928,   6,   8, UNI_TAMILSUP }   /* block=tamilsup */,
+  {    16,  8780,  9335,   6,   5, UNI_INTAKRI }   /* block=takri */,
+  {     0,  9346,     1,   4,   1, -UNI_IDC }   /* idc=n */,
+  {     0,  2032,     3,  22,   1, -UNI__PERL_NCHAR }   /* noncharactercodepoint=f */,
+  {     1,  6928,     0,  10,   0, UNI_SD }   /* softdotted */,
+  {     0,  3893,     0,  11,   0, UNI_SGNW }   /* signwriting */,
+  {     3,  8780,  4065,   6,  16, UNI_HALFANDFULLFORMS }   /* block=halfandfullforms */,
+  {     0,  9440,     0,   4,   0, UNI_ADLM }   /* adlm */,
+  {     1,  9262,    33,   3,   2, UNI_SB__SE }   /* sb=se */,
+  {     0,  4628,    66,  15,   1, UNI_EA__H }   /* eastasianwidth=h */,
+  {    66,  1988,    26,  22,   1, UNI_LOE }   /* logicalorderexception=y */,
+  {     0,  8780,  7398,   6,  10, UNI_SUPARROWSC }   /* block=suparrowsc */,
+  {    20,  7028,  2309,   3,  20, UNI_YIJING }   /* isyijinghexagramsymbols */,
+  {     3,   184,  7398,   2,  10, UNI_SUPARROWSC }   /* issuparrowsc */,
+  {     0,  9768,  8618,   5,   3, UNI_SOYO }   /* scx=soyo */,
+  {     9,  8780,   908,   6,  10, UNI_PUA }   /* block=privateuse */,
+  {     0,  1790,     1,  22,   1, -UNI_CWCM }   /* changeswhencasemapped=n */,
+  {    34,  8589,  9600,   7,   4, UNI_SC__KALI }   /* script=kali */,
+  {    16,  8372,     0,   7,   0, UNI_CJKEXTD }   /* cjkextd */,
+  {     0,  1188,  4402,   3,  15, UNI_TANGUTSUP }   /* intangutsupplement */,
+  {    69,  9275,  5144,   5,  14, UNI_INSC__GEMINATIONMARK }   /* insc=geminationmark */,
+  {     6,  8780,  3169,   6,  11, UNI_ETHIOPICSUP }   /* block=ethiopicsup */,
+  {     7,  9488,   414,   4,  32, UNI_INIDC }   /* blk=ideographicdescriptioncharacters */,
+  {     1,  8589,  9320,   7,   5, UNI_OSGE }   /* script=osage */,
+  {     0,  9768,  8561,   4,   7, UNI_OSMA }   /* scx=osmanya */,
+  {    33,  8780,  5522,   6,  14, UNI_PHONETICEXTSUP }   /* block=phoneticextsup */,
+  {     4, 10006,     1,   3,   1, -UNI_DI }   /* di=n */,
+  {    72,   184,  2061,   2,  15, UNI_MODIFIERLETTERS }   /* ismodifierletters */,
+  {     0,  9508,  1756,   4,   2, UNI_CCC__BR }   /* ccc=br */,
+  {     0,  5986,  7858,  13,   2, UNI_NV__22 }   /* numericvalue=22 */,
+  {     1,  9540, 10135,   4,   3, UNI_DIA }   /* dia=yes */,
+  {    35,  6205,    26,  12,   1, UNI_IDEO }   /* ideographic=y */,
+  {     4,  4146,  1947,   5,  19, UNI_EARLYDYNASTICCUNEIFORM }   /* inearlydynasticcuneiform */,
+  {     1,  6231,   600,   3,  29, UNI_CJKEXTD }   /* incjkunifiedideographsextensiond */,
+  {     1,  5674,    36,  13,   1, UNI_BIDIM }   /* bidimirrored=t */,
+  {     5,  3836,  8115,  17,   8, UNI_BASS }   /* scriptextensions=bassavah */,
+  {     0,  9508,  8082,   4,   2, UNI_CCC__19 }   /* ccc=19 */,
+  {     3,  7325,  7469,   3,   3, UNI_IN__5 }   /* in=5.0 */,
+  {     2,  7438,  8505,  10,   7, UNI_WB__NL }   /* wordbreak=newline */,
+  {     1,  7218,   125,  10,   2, UNI_LB__CR }   /* linebreak=cr */,
+  {     7,  9444,  7755,   4,   3, UNI_IN__1_DOT_1 }   /* age=1.1 */,
+  {    78,  9488,  2836,   4,  19, UNI_MODIFIERTONELETTERS }   /* blk=modifiertoneletters */,
+  {     1,  9488,  4289,   4,  16, UNI_MYANMAREXTB }   /* blk=myanmarextendedb */,
+  {     2, 10296,  5040,   7,   5, UNI_POSIXDIGIT }   /* isposixdigit */,
+  {     1,  5791,  9281,  14,   4, UNI_JG__KHAPH }   /* joininggroup=khaph */,
+  {     0,  7325,  9856,   3,   4, UNI_IN__13 }   /* in=v130 */,
+  {     2,  3853,  1025,  17,   2, -UNI_STERM }   /* sentenceterminal=no */,
+  {     0, 10024,  4958,   3,  15, UNI_UPPERCASELETTER }   /* gc=uppercaseletter */,
+  {     0,   184,  8131,   2,   8, UNI_DUPL }   /* isduployan */,
+  {     2,    21,  3768,   2,  17, UNI_LETTERLIKESYMBOLS }   /* inletterlikesymbols */,
+  {     7,  7325, 10084,   3,   3, UNI_IN__3_DOT_1 }   /* in=v31 */,
+  {     0,  7155,  5219,   3,   3, UNI_HIRA }   /* ishira */,
+  {     2,  9508,   184,   4,   2, UNI_CCC__IS }   /* ccc=is */,
+  {   197,  1417,  8801,  24,   3, UNI_CCC__107 }   /* canonicalcombiningclass=107 */,
+  {    68,  9768,  7288,   4,  10, UNI_SOGO }   /* scx=oldsogdian */,
+  {     3,   184,    74,   2,   2, UNI_ME }   /* isme */,
+  {     1,  9997, 10018,   3,   3, UNI_BC__FSI }   /* bc=fsi */,
+  {    40,  9350,     1,   5,   1, -UNI_XIDS }   /* xids=n */,
+  {    10,  7325,  7826,   3,   4, UNI_IN__12 }   /* in=12.0 */,
+  {     1,  9488,  3295,   4,   9, UNI_LATINEXTA }   /* blk=latinexta */,
+  {   124,  5986,  8720,  13,   4, UNI_NV__4000 }   /* numericvalue=4000 */,
+  {     0,  5791,  6301,  13,  12, UNI_JG__MALAYALAMLLA }   /* joininggroup=malayalamlla */,
+  {     4,  1631,     0,  15,   0, UNI_GEOMETRICSHAPES }   /* geometricshapes */,
+  {    34,  1087,     0,  26,   0, UNI_PCM }   /* prependedconcatenationmark */,
+  {     1,  1746,  5904,  22,   4, UNI_BPT__N }   /* bidipairedbrackettype=none */,
+  {     1,  2161,  9255,  21,   5, -UNI_EXTPICT }   /* extendedpictographic=false */,
+  {    18,  8589,  8107,   7,   4, UNI_BALI }   /* script=bali */,
+  {     0,  8673,     0,   7,   0, UNI_UCASEXT }   /* ucasext */,
+  {    35,  1417,  1179,  24,   2, UNI_CCC__BL }   /* canonicalcombiningclass=bl */,
+  {     0,  8780,  5242,   6,  14, UNI_LATINEXTC }   /* block=latinextendedc */,
+  {     1,   184,  8366,   3,   6, UNI_CJKEXTC }   /* iscjkextc */,
+  {     0,  9305,     0,   5,   0, UNI_NSHU }   /* nushu */,
+  {     6,  9488,  2061,   4,   4, UNI_INMODI }   /* blk=modi */,
+  {     0,  2061,     0,  15,   0, UNI_MODIFIERLETTERS }   /* modifierletters */,
+  {   149,  8780,  8107,   6,   8, UNI_INBALINESE }   /* block=balinese */,
+  {     3,  4628,  8948,  15,   6, UNI_EA__NA }   /* eastasianwidth=narrow */,
+  {     0,  7318,  7867,  10,   3, UNI_IN__3_DOT_1 }   /* presentin=3.1 */,
+  {   128, 10024,   206,   3,   2, UNI_PI }   /* gc=pi */,
+  {    40,  7155,  2507,   3,   3, UNI_HATR }   /* ishatr */,
+  {     0, 10310,  8668,   4,   5, UNI_INTIRHUTA }   /* intirhuta */,
+  {    10,  9488,  1677,   4,  14, UNI_LATINEXTA }   /* blk=latinextendeda */,
+  {     8,  4568,     0,  15,   0, UNI_CURRENCYSYMBOLS }   /* currencysymbols */,
+  {    16,  9768,  8123,   4,   8, UNI_BUGI }   /* scx=buginese */,
+  {     0,  8780,  8407,   6,   7, UNI_DSRT }   /* block=deseret */,
+  {   100,    21,  4161,   2,  16, UNI_LINEARBSYLLABARY }   /* inlinearbsyllabary */,
+  {    23,   184,  4337,   2,  16, UNI_SUPMATHOPERATORS }   /* issupmathoperators */,
+  {     2,  8780,   183,   6,  34, UNI_MISCPICTOGRAPHS }   /* block=miscellaneoussymbolsandpictographs */,
+  {     0,  9556,  4360,   4,   9, UNI_WB__EB }   /* gcb=emodifier */,
+  {     0,  8589,  9808,   7,   4, UNI_TALU }   /* script=talu */,
+  {     3,  9488,  1218,   4,  26, UNI_KATAKANAEXT }   /* blk=katakanaphoneticextensions */,
+  {     0,  9596,  6763,   4,   3, UNI_LB__H3 }   /* hst=lvt */,
+  {     0,  9596,     0,   4,   0, UNI_hst_values_index }   /* hst= */,
+  {     0,  8171,     0,   8,   0, UNI_GUJR }   /* gujarati */,
+  {    34,  9277,  8617,   3,   4, UNI_SOYO }   /* sc=soyo */,
+  {     1,  3259,    36,  18,   1, UNI_IDSB }   /* idsbinaryoperator=t */,
+  {     2,  8575,  9255,   7,   5, -UNI_PATSYN }   /* patsyn=false */,
+  {     0, 10048,  7915,   3,   8, UNI_NV__3_SLASH_80 }   /* nv=3.75e-02 */,
+  {   104,  5778,     0,   6,   0, UNI_IPAEXT }   /* ipaext */,
+  {     0,  3367,  1025,  18,   2, -UNI__PERL_PATWS }   /* patternwhitespace=no */,
+  {   201,  9488,  4273,   4,   7, UNI_INMYANMAR }   /* blk=myanmar */,
+  {     1,   349,     0,  33,   0, UNI_SUPSYMBOLSANDPICTOGRAPHS }   /* supplementalsymbolsandpictographs */,
+  {   251, 10126,   409,   3,   2, UNI_VO__TR }   /* vo=tr */,
+  {     2,  2161,    36,  21,   1, UNI_EXTPICT }   /* extendedpictographic=t */,
+  {     1,  9508,  9146,   5,   4, UNI_CCC__23 }   /* ccc=ccc23 */,
+  {     0,  6420,   125,   3,   2, UNI_OCR }   /* inocr */,
+  {    16,  8589,     0,  14,   0, UNI_SC__SHRD }   /* script=sharada */,
+  {     2,  8694,    26,   7,   1, UNI_XPOSIXSPACE }   /* wspace=y */,
+  {   195,  1417,  8042,  24,   2, UNI_CCC__18 }   /* canonicalcombiningclass=18 */,
+  {     1,  7318, 10123,  10,   3, UNI_IN__9 }   /* presentin=v90 */,
+  {     0,  8954,    36,   6,   1, UNI__PERL_NCHAR }   /* nchar=t */,
+  {     5,  4628,  7486,  15,   9, UNI_EA__A }   /* eastasianwidth=ambiguous */,
+  {     4,   184,  3241,   2,  11, UNI_GEORGIANSUP }   /* isgeorgiansup */,
+  {     0,  2224,  3440,   3,  11, UNI_SMALLKANAEXT }   /* insmallkanaext */,
+  {     1,  7318,  9400,  10,   4, UNI_IN__13 }   /* presentin=13.0 */,
+  {     0,  8589,  2203,   7,  14, UNI_SC__ROHG }   /* script=hanifirohingya */,
+  {     0,  1552,  1910,   9,   2, UNI_CN }   /* category=cn */,
+  {     2,   184,  4554,   3,  14, UNI_CONTROLPICTURES }   /* iscontrolpictures */,
+  {     3, 10027,  6289,   3,  12, UNI_JG__MALAYALAMBHA }   /* jg=malayalambha */,
+  {     2,  4116,  7740,   3,   6, UNI_IDS }   /* isidstart */,
+  {     6,  9768,  2288,   5,   6, UNI_SINH }   /* scx=sinhala */,
+  {    16,  6241,    18,  12,   1, UNI_JT__R }   /* joiningtype=r */,
+  {     6,  7318,  7827,  10,   3, UNI_IN__2 }   /* presentin=2.0 */,
+  {     0, 10132,  4305,   3,   5, UNI_WB__XX }   /* wb=other */,
+  {     4, 10048,  9961,   3,   3, UNI_NV__3_SLASH_5 }   /* nv=3/5 */,
+  {    13,  9556,  5008,   5,   2, UNI_WB__EB }   /* gcb=gaz */,
+  {     0,  9768,  3079,   4,   6, UNI_COPT }   /* scx=coptic */,
+  {     0,  9768,  9612,   4,   4, UNI_KNDA }   /* scx=knda */,
+  {     0,  9235,  9836,   5,   4, UNI_CWCM }   /* cwcm=true */,
+  {     0,  8780,  5003,   6,  15, UNI_INZANABAZARSQUARE }   /* block=zanabazarsquare */,
+  {     8,  5674,     0,   5,   0, UNI_BIDIM }   /* bidim */,
+  {     7,  2161,     0,  21,   0, UNI_extpict_values_index }   /* extendedpictographic= */,
+  {     1,  9768,  9624,   4,   3, UNI_LAO }   /* scx=lao */,
+  {     0,  8780,  2409,   6,  10, UNI_INGLAGOLITIC }   /* block=glagolitic */,
+  {     0,  3836,  8936,  17,   4, UNI_LYCI }   /* scriptextensions=lyci */,
+  {     5,  4791,  4274,   3,   6, UNI_INMYANMAR }   /* inmyanmar */,
+  {    83,  8589,  8680,   7,   7, UNI_ZZZZ }   /* script=unknown */,
+  {     1,  9277,  2278,   4,   3, UNI_SC__KALI }   /* sc=kali */,
+  {     3,  9488,  8477,   4,   7, UNI_INMAKASAR }   /* blk=makasar */,
+  {    32,  4568,     0,  14,   0, UNI_SC }   /* currencysymbol */,
+  {     0,   184,  7693,   2,   9, UNI_SAMR }   /* issamaritan */,
+  {     2,  5986,  5648,  13,   9, UNI_NV__100000000 }   /* numericvalue=100000000 */,
+  {     0,   184,  3026,   3,  10, UNI_CHEROKEESUP }   /* ischerokeesup */,
+  {     3,  5718,     0,   5,   0, UNI_XPOSIXALNUM }   /* alnum */,
+  {    32,  8780,   414,   6,  32, UNI_INIDC }   /* block=ideographicdescriptioncharacters */,
+  {     0,  9488,  6085,   4,  12, UNI_CHESSSYMBOLS }   /* blk=chesssymbols */,
+  {   193,  8780,  2409,   6,  13, UNI_GLAGOLITICSUP }   /* block=glagoliticsup */,
+  {     2,  8589,  6840,   7,  11, UNI_SC__NAND }   /* script=nandinagari */,
+  {     4,  9277,  8498,   3,   7, UNI_SC__MULT }   /* sc=multani */,
+  {     1,  7155,  2723,   3,  18, UNI_JAMOEXTA }   /* ishanguljamoextendeda */,
+  {    11,   184,   250,   2,  33, UNI_MISCMATHSYMBOLSA }   /* ismiscellaneousmathematicalsymbolsa */,
+  {     0,  9488,  7675,   4,   9, UNI_PALM }   /* blk=palmyrene */,
+  {     9,  9262,  7702,   3,   9, UNI_SB__SC }   /* sb=scontinue */,
+  {     1, 10132,  6178,   3,   3, UNI_LB__ZWJ }   /* wb=zwj */,
+  {     4,  8589,  4370,   8,   5, UNI_SC__SYRC }   /* script=syriac */,
+  {    33,  9768,  8611,   5,   3, UNI_SIDD }   /* scx=sidd */,
+  {    11,  5986,  7939,  13,   8, UNI_NV__9_SLASH_2 }   /* numericvalue=4.50e+00 */,
+  {     0,  7158,    36,  10,   1, UNI_DIA }   /* diacritic=t */,
+  {     1,  1552,     1,   9,   1, UNI_N }   /* category=n */,
+  {    83,  3836,  8618,  18,   6, UNI_SOYO }   /* scriptextensions=soyombo */,
+  {     3,   184,  5200,   2,   7, UNI_KANASUP }   /* iskanasup */,
+  {     5,  9277,  9283,   3,   4, UNI_PHLI }   /* sc=phli */,
+  {    96,  9275,     0,   5,   0, UNI_insc_values_index }   /* insc= */,
+  {     0,  8428,     0,   4,   0, UNI_GRAN }   /* gran */,
+  {     0,  9346,  9836,   4,   4, UNI_IDC }   /* idc=true */,
+  {     2,  3836,  9624,  17,   3, UNI_LAO }   /* scriptextensions=lao */,
+  {     0,    21,  1218,   2,  26, UNI_KATAKANAEXT }   /* inkatakanaphoneticextensions */,
+  {    17,  2161,  1025,  21,   2, -UNI_EXTPICT }   /* extendedpictographic=no */,
+  {     0,  8780,  1218,   6,  26, UNI_KATAKANAEXT }   /* block=katakanaphoneticextensions */,
+  {    12,  9768,  2913,   5,   3, UNI_SUND }   /* scx=sund */,
+  {     0,   184,  1269,   2,  24, UNI_COMPEX }   /* isfullcompositionexclusion */,
+  {     1, 10048,  7827,   3,   8, UNI_NV__1_SLASH_5 }   /* nv=2.00e-01 */,
+  {     3,  9488,  6277,   4,  12, UNI_MAHJONG }   /* blk=mahjongtiles */,
+  {   352,  9262,   495,   3,   7, UNI_SB__NU }   /* sb=numeric */,
+  {     1, 10296,  9725,   3,   3, UNI_PHNX }   /* isphnx */,
+  {     2,  8780,  7495,   6,   9, UNI_ARABICPFA }   /* block=arabicpfa */,
+  {     0,  6805,     0,  13,   0, UNI_MISCSYMBOLS }   /* inmiscsymbols */,
+  {     0,  9716,     0,   3,   0, UNI_PCM }   /* pcm */,
+  {   258,  9277,  3598,   3,  17, UNI_AGHB }   /* sc=caucasianalbanian */,
+  {     4,  8768,    26,   6,   1, UNI_BIDIC }   /* bidic=y */,
+  {     2,  8780,  9095,   6,   5, UNI_INBUHID }   /* block=buhid */,
+  {     1,  8393,     0,   7,   0, UNI_CJKEXTG }   /* cjkextg */,
+  {     3,   117,   415,   3,  31, UNI_INIDC }   /* inideographicdescriptioncharacters */,
+  {     0,  1417,  6631,  24,  11, UNI_CCC__DA }   /* canonicalcombiningclass=doubleabove */,
+  {    80,  9265,     1,   5,   1, -UNI_IDST }   /* idst=n */,
+  {    63,  9488,  3115,   4,  10, UNI_INDEVANAGARI }   /* blk=devanagari */,
+  {     0,  2224,  4370,   3,   5, UNI_INSYRIAC }   /* insyriac */,
+  {     0,  6205,     3,  12,   1, -UNI_IDEO }   /* ideographic=f */,
+  {    37,   184,  9660,   2,   4, UNI_MLYM }   /* ismlym */,
+  {     1,  5791,  4748,  13,  15, UNI_JG__MANICHAEANGIMEL }   /* joininggroup=manichaeangimel */,
+  {     1,   184,  5592,   2,  14, UNI_ZS }   /* isspaceseparator */,
+  {     9,  6554,     3,  11,   1, -UNI_IDC }   /* idcontinue=f */,
+  {     3,  5986,  7778,  13,   2, UNI_NV__21 }   /* numericvalue=21 */,
+  {     2,  9508,  7858,   4,   3, UNI_CCC__B }   /* ccc=220 */,
+  {     0,  1900,     0,   6,   0, UNI_ZYYY }   /* common */,
+  {    25,  3836,  9452,  17,   4, UNI_AHOM }   /* scriptextensions=ahom */,
+  {     0,  9508,  9136,   5,   4, UNI_CCC__21 }   /* ccc=ccc21 */,
+  {     0,  2529,     0,  20,   0, UNI_term_values_index }   /* terminalpunctuation= */,
+  {     1,  8768,  9836,   6,   4, UNI_BIDIC }   /* bidic=true */,
+  {     0,  8780,  3785,   6,  10, UNI_INMANICHAEAN }   /* block=manichaean */,
+  {     8, 10333,  8625,   3,   6, UNI_SUPPUAA }   /* issuppuaa */,
+  {   256, 10024,   112,   3,   2, UNI_SC }   /* gc=sc */,
+  {     4,  9508,  8042,   4,   2, UNI_CCC__18 }   /* ccc=18 */,
+  {   177, 10048,  8067,   3,   8, UNI_NV__17_SLASH_2 }   /* nv=8.50e+00 */,
+  {    96,  9768,  8638,   4,   7, UNI_TGLG }   /* scx=tagalog */,
+  {     0,  4791,  2856,   3,   8, UNI_INMONGOLIAN }   /* inmongolian */,
+  {     0,  8688,  9477,   3,   3, UNI_AVST }   /* isavst */,
+  {    11,  9488,  8498,   4,   7, UNI_INMULTANI }   /* blk=multani */,
+  {    42,  6231,   630,   3,  29, UNI_CJKEXTE }   /* incjkunifiedideographsextensione */,
+  {     2,  6231,  1061,   4,   4, UNI_INCOPTIC }   /* incoptic */,
+  {     1,  7325, 10081,   3,   3, UNI_IN__3 }   /* in=v30 */,
+  {     5,  1552,   908,   9,  10, UNI_CO }   /* category=privateuse */,
+  {     0,  1591,  8422,   3,   6, UNI_INELYMAIC }   /* inelymaic */,
+  {    64,  9275,  9300,   5,   5, UNI_INSC__NUKTA }   /* insc=nukta */,
+  {     5,  3836,  9460,  17,   4, UNI_ARMI }   /* scriptextensions=armi */,
+  {     0,  8688,  9449,   3,   3, UNI_AGHB }   /* isaghb */,
+  {     0,  3097,  3501,  18,   3, UNI_DT__MED }   /* decompositiontype=med */,
+  {     0,   184,  8123,   2,   4, UNI_BUGI }   /* isbugi */,
+  {     8,  9014, 10135,   6,   3, UNI_UIDEO }   /* uideo=yes */,
+  {     5,  9536,     3,   4,   1, -UNI_DEP }   /* dep=f */,
+  {     2,  8589,  9888,   7,   4, UNI_ZANB }   /* script=zanb */,
+  {     9, 10048,  8732,   3,   3, UNI_NV__500 }   /* nv=500 */,
+  {     1,   184,  8870,   2,   5, UNI_EPRES }   /* isepres */,
+  {     0,  9277,  8477,   3,   7, UNI_MAKA }   /* sc=makasar */,
+  {    10,  3382,  1025,   3,   2, -UNI_CE }   /* ce=no */,
+  {    10,  5324,   480,   4,  29, UNI_MATHALPHANUM }   /* inmathematicalalphanumericsymbols */,
+  {     1, 10033,  5999,   3,  13, UNI_LB__PR }   /* lb=prefixnumeric */,
+  {     1,  2779,     0,  18,   0, UNI_IDST }   /* idstrinaryoperator */,
+  {     0,  4033,  5726,  16,  13, UNI_ME }   /* generalcategory=enclosingmark */,
+  {     0, 10027,  5364,   3,   4, UNI_JG__HETH }   /* jg=heth */,
+  {     0,  1979,  6266,  10,  11, UNI_NL }   /* category=letternumber */,
+  {     3,  9488,  2665,   4,  19, UNI_COUNTINGROD }   /* blk=countingrodnumerals */,
+  {   208,  8780,  7188,   6,  10, UNI_INKHAROSHTHI }   /* block=kharoshthi */,
+  {    84,   184,  8359,   3,   6, UNI_CJKEXTB }   /* iscjkextb */,
+  {     0,  9768,  2203,   4,   4, UNI_HAN }   /* scx=hani */,
+  {     0,  2182,  1087,  21,   7, UNI_GCB__PP }   /* graphemeclusterbreak=prepend */,
+  {   288,  2409,     0,  20,   0, UNI_GLAGOLITICSUP }   /* glagoliticsupplement */,
+  {   256,  9488,  2912,   4,  12, UNI_SUNDANESESUP }   /* blk=sundanesesup */,
+  {     0,  8780,  4703,   6,  15, UNI_INIMPERIALARAMAIC }   /* block=imperialaramaic */,
+  {     6,  9014,     3,   6,   1, -UNI_UIDEO }   /* uideo=f */,
+  {     0,  7218,  1186,  10,   2, UNI_LB__PO }   /* linebreak=po */,
+  {     0,  7438,  6169,  10,  12, UNI_WB__EB }   /* wordbreak=glueafterzwj */,
+  {     0,   184,  6181,   2,  12, UNI_GONG }   /* isgunjalagondi */,
+  {     1, 10033,    34,   3,   2, UNI_LB__EX }   /* lb=ex */,
+  {     2,  2280,  6874,   3,  10, UNI_SO }   /* isothersymbol */,
+  {     1,  9277,  3115,   3,   4, UNI_SC__DEVA }   /* sc=deva */,
+  {     0,  9488,  6505,   4,  12, UNI_PHAISTOS }   /* blk=phaistosdisc */,
+  {   176,  8780,  5228,   6,  14, UNI_LATINEXTB }   /* block=latinextendedb */,
+  {    25,  2533,  6028,   5,   9, UNI_ALPHABETICPF }   /* inalphabeticpf */,
+  {     5,  9997,  2509,   3,  11, UNI_BC__R }   /* bc=righttoleft */,
+  {     0,  8780,  7288,   6,  10, UNI_INOLDSOGDIAN }   /* block=oldsogdian */,
+  {   186,  9277,  8131,   3,   8, UNI_SC__DUPL }   /* sc=duployan */,
+  {    45,  1673,     0,   4,   0, UNI_JAMO }   /* jamo */,
+  {    66,  6061,     0,  12,   0, UNI_bidic_values_index }   /* bidicontrol= */,
+  {     0,  8589,  9038,   7,   6, UNI_SC__YEZI }   /* script=yezidi */,
+  {     0,  1856,     3,  22,   1, -UNI_CWU }   /* changeswhenuppercased=f */,
+  {   256, 10183,  7438,   4,   4, UNI_POSIXWORD }   /* perlword */,
+  {     1,  9070,     3,   5,   1, -UNI_POSIXXDIGIT }   /* ahex=f */,
+  {     0,  9277,  8596,   3,   7, UNI_SC__SHRD }   /* sc=sharada */,
+  {     3,  5986,     0,  13,   0, UNI_nv_values_index }   /* numericvalue= */,
+  {     3,   184,  8243,   2,   8, UNI_MAHJ }   /* ismahajani */,
+  {     0,  9240,    26,   5,   1, UNI_DASH }   /* dash=y */,
+  {     4,  3025,     0,  11,   0, UNI_CHEROKEESUP }   /* cherokeesup */,
+  {     2,  6420,  4884,   3,  14, UNI_SARB }   /* inoldsoutharabian */,
+  {     1,  9262,    72,   3,   2, UNI_SB__LE }   /* sb=le */,
+  {     0,  9520,     0,   4,   0, UNI_cwl_values_index }   /* cwl= */,
+  {     2,  7325,  7806,   3,   1, UNI_IN__6 }   /* in=6 */,
+  {     2,  1417,  9922,  24,   3, UNI_CCC__214 }   /* canonicalcombiningclass=214 */,
+  {     0,  3836,  9283,  17,   4, UNI_PHLI }   /* scriptextensions=phli */,
+  {     0,  4916,    47,   5,   1, UNI_TERM }   /* isterm */,
+  {   104,  7318,  9388,  10,   4, UNI_IN__11 }   /* presentin=11.0 */,
+  {     0,  1417,  8082,  24,   2, UNI_CCC__19 }   /* canonicalcombiningclass=19 */,
+  {     0,  2182,   911,  21,   1, UNI_GCB__V }   /* graphemeclusterbreak=v */,
+  {     1,   262,     0,   2,   0, UNI_SM }   /* sm */,
+  {    98,  1552,  5494,   9,  14, UNI_MN }   /* category=nonspacingmark */,
+  {     1,   184,  1222,   2,   4, UNI_KANA }   /* iskana */,
+  {     1,  5986,  7469,  13,   8, UNI_NV__1_SLASH_2 }   /* numericvalue=5.00e-01 */,
+  {    57,  8780,  8624,   6,   7, UNI_SUPPUAA }   /* block=suppuaa */,
+  {     3,    21,  5019,   3,  13, UNI_ANCIENTSYMBOLS }   /* inancientsymbols */,
+  {     0,  3836,  4928,  17,   5, UNI_TAML }   /* scriptextensions=tamil */,
+  {     0,  1552,    45,   9,   2, UNI_CO }   /* category=co */,
+  {     3,  9444,  9388,   4,   4, UNI_AGE__11 }   /* age=11.0 */,
+  {     1,  4161,     0,  16,   0, UNI_LINEARBSYLLABARY }   /* linearbsyllabary */,
+  {     0,  9768,  2245,   4,  11, UNI_MTEI }   /* scx=meeteimayek */,
+  {     3, 10024,  4305,   3,   5, UNI_C }   /* gc=other */,
+  {     1,  1768,     1,  22,   1, -UNI_CWCF }   /* changeswhencasefolded=n */,
+  {     2,  5752,     0,   8,   0, UNI_GREEKEXT }   /* greekext */,
+  {    34,  9768,  8477,   4,   4, UNI_MAKA }   /* scx=maka */,
+  {     2, 10048,  9958,   3,   3, UNI_NV__3_SLASH_4 }   /* nv=3/4 */,
+  {    20,   184,   749,   2,  16, UNI_ENCLOSEDALPHANUM }   /* isenclosedalphanum */,
+  {     0,  9488,  9320,   4,   5, UNI_INOSAGE }   /* blk=osage */,
+  {     0,  8227,     0,   8,   0, UNI_KANAEXTA }   /* kanaexta */,
+  {    22,  4448,     0,   8,   0, UNI_BAMUMSUP }   /* bamumsup */,
+  {    65,  3836,  8888,  17,   6, UNI_HATR }   /* scriptextensions=hatran */,
+  {     0,  3904,  9255,  17,   5, -UNI_UIDEO }   /* unifiedideograph=false */,
+  {     3,  9444,  9840,   4,   4, UNI_AGE__10 }   /* age=v100 */,
+  {    36,  3836,  9548,  17,   4, UNI_DSRT }   /* scriptextensions=dsrt */,
+  {   128, 10048,  7795,   3,   8, UNI_NV__3_SLASH_20 }   /* nv=1.50e-01 */,
+  {    11,  3529,  1025,  18,   2, -UNI_VS }   /* variationselector=no */,
+  {     0,  3768,     0,  17,   0, UNI_LETTERLIKESYMBOLS }   /* letterlikesymbols */,
+  {    40,  8400,     3,   7,   1, -UNI_COMPEX }   /* compex=f */,
+  {     0,   184,  3751,   2,  17, UNI_KITS }   /* iskhitansmallscript */,
+  {     0,  9488,  1654,   4,  23, UNI_COMPATJAMO }   /* blk=hangulcompatibilityjamo */,
+  {     1, 10027,  3819,   3,  17, UNI_JG__MANICHAEANTHAMEDH }   /* jg=manichaeanthamedh */,
+  {     0,   414,     0,  11,   0, UNI_IDEO }   /* ideographic */,
+  {    16,   184,  4448,   2,   5, UNI_BAMU }   /* isbamum */,
+  {   259, 10048,  7859,   3,   5, UNI_NV__20000 }   /* nv=20000 */,
+  {     1,  1966,  7639,  22,   9, UNI_INSC__NONJOINER }   /* indicsyllabiccategory=nonjoiner */,
+  {     0,  9488,  1218,   4,   8, UNI_INKATAKANA }   /* blk=katakana */,
+  {   288,  1591,  3170,   3,  10, UNI_ETHIOPICSUP }   /* inethiopicsup */,
+  {     9,  8780,  4049,   6,  11, UNI_GEORGIANEXT }   /* block=georgianext */,
+  {     4,  9768,  8470,   4,   7, UNI_LINA }   /* scx=lineara */,
+  {     1,  3097,  2569,  18,   8, UNI_DT__VERT }   /* decompositiontype=vertical */,
+  {     2,  3133,  9255,  18,   5, -UNI_EBASE }   /* emojimodifierbase=false */,
+  {     4,  7325, 10117,   3,   3, UNI_IN__7 }   /* in=v70 */,
+  {     6,  4033,     1,  16,   1, UNI_N }   /* generalcategory=n */,
+  {   296,  9556,    36,   4,   1, UNI_GCB__T }   /* gcb=t */,
+  {     0,  1552,    47,   9,   1, UNI_M }   /* category=m */,
+  {     1,  5791,  9772,  13,   4, UNI_JG__SEEN }   /* joininggroup=seen */,
+  {     1,  9270,  3475,   5,  18, UNI_INPC__TOPANDLEFTANDRIGHT }   /* inpc=topandleftandright */,
+  {    33,  9532,     0,   4,   0, UNI_CYRL }   /* cyrl */,
+  {     2,  1087, 10135,  27,   3, UNI_PCM }   /* prependedconcatenationmark=yes */,
+  {     1,  7318,  9384,  10,   4, UNI_IN__10 }   /* presentin=10.0 */,
+  {     0,  5986,  7950,  13,   1, UNI_NV__9 }   /* numericvalue=9 */,
+  {     1,  4116,  2780,   3,  17, UNI_IDST }   /* isidstrinaryoperator */,
+  {    49,  9768,  8888,   4,   4, UNI_HATR }   /* scx=hatr */,
+  {     0,  4116,    59,   3,   3, UNI_IDEO }   /* isideo */,
+  {     0,  9488,   951,   4,  18, UNI_INVS }   /* blk=variationselectors */,
+  {   289,  3385,     0,  17,   0, UNI_RI }   /* regionalindicator */,
+  {     1,  8780,  7378,   6,  10, UNI_SUPARROWSA }   /* block=suparrowsa */,
+  {     8,  7088,    25,  10,   1, UNI_BC__S }   /* bidiclass=s */,
+  {     1,  1552,    38,   9,   2, UNI_XPOSIXDIGIT }   /* category=nd */,
+  {    65,  4448,     0,   4,   0, UNI_BAMU }   /* bamu */,
+  {     0,  7438,   495,  10,   2, UNI_WB__NU }   /* wordbreak=nu */,
+  {     1,  5324,  5845,   4,   7, UNI_INMALAYALAM }   /* inmalayalam */,
+  {    18,  9488,  1922,   4,  22, UNI_DIACRITICALSFORSYMBOLS }   /* blk=diacriticalsforsymbols */,
+  {     3,  3785,     0,  10,   0, UNI_MANI }   /* manichaean */,
+  {    98,  6231,   150,   4,  33, UNI_DIACRITICALSSUP }   /* incombiningdiacriticalmarkssupplement */,
+  {    10,  1273,  9836,  21,   4, UNI_CE }   /* compositionexclusion=true */,
+  {     1,  6481,     0,  12,   0, UNI_HUNG }   /* oldhungarian */,
+  {     0,  8386,     0,   7,   0, UNI_CJKEXTF }   /* cjkextf */,
+  {     4,  3385,  1025,  18,   2, -UNI_RI }   /* regionalindicator=no */,
+  {    16,  2224,  2288,   3,   6, UNI_INSINHALA }   /* insinhala */,
+  {     0,  8589,  6409,   7,  12, UNI_MEND }   /* script=mendekikakui */,
+  {     1,  4989,  1868,   3,   8, UNI_XPOSIXUPPER }   /* isuppercase */,
+  {     0,  5791,  2223,  13,   3, UNI_JG__AIN }   /* joininggroup=ain */,
+  {   197,  8780,   328,   6,  21, UNI_MATHOPERATORS }   /* block=mathematicaloperators */,
+  {     0,  6420,  8548,   3,   6, UNI_OLCK }   /* inolchiki */,
+  {     0,  9488,  8345,   5,   6, UNI_INBENGALI }   /* blk=bengali */,
+  {     0,  9488,  4553,   4,  15, UNI_CONTROLPICTURES }   /* blk=controlpictures */,
+  {   130,   184,  7378,   2,  10, UNI_SUPARROWSA }   /* issuparrowsa */,
+  {     4, 10048,  8750,   3,   5, UNI_NV__80000 }   /* nv=80000 */,
+  {    17,  9488,  7666,   4,   9, UNI_INOLDTURKIC }   /* blk=oldturkic */,
+  {     5,  3836,  8582,  17,   7, UNI_PHAG }   /* scriptextensions=phagspa */,
+  {     2,  1552,   133,   9,   4, UNI_M }   /* category=mark */,
+  {     1,  5986,  7859,  13,   2, UNI_NV__20 }   /* numericvalue=20 */,
+  {    32,  9776,     0,   4,   0, UNI_SGNW }   /* sgnw */,
+  {     1,  8780,  4337,   6,  16, UNI_SUPMATHOPERATORS }   /* block=supmathoperators */,
+  {     0,  6231,   660,   3,  29, UNI_CJKEXTF }   /* incjkunifiedideographsextensionf */,
+  {     0,  9508,  9131,   5,   4, UNI_CCC__20 }   /* ccc=ccc20 */,
+  {     0,  7428,     0,  10,   0, UNI_WARA }   /* warangciti */,
+  {     0,  7438,  6653,  10,  11, UNI_WB__DQ }   /* wordbreak=doublequote */,
+  {     1,   250,     0,  33,   0, UNI_MISCMATHSYMBOLSA }   /* miscellaneousmathematicalsymbolsa */,
+  {     0,  3367, 10135,  18,   3, UNI__PERL_PATWS }   /* patternwhitespace=yes */,
+  {    21,  9277,  2329,   3,  20, UNI_HLUW }   /* sc=anatolianhieroglyphs */,
+  {     3,  1033,     0,  27,   0, UNI_ENCLOSEDCJK }   /* enclosedcjklettersandmonths */,
+  {     3,  9768,  9584,   4,   4, UNI_HLUW }   /* scx=hluw */,
+  {    35,  6231,  8359,   3,   6, UNI_CJKEXTB }   /* incjkextb */,
+  {     0,  7325,  9970,   3,   3, UNI_IN__5_DOT_2 }   /* in=5.2 */,
+  {     1,  8512,    26,   7,   1, UNI_NFKCQC__Y }   /* nfkcqc=y */,
+  {     0,  8589,  9325,   7,   5, UNI_RUNR }   /* script=runic */,
+  {     0,  3836,  9095,  17,   5, UNI_BUHD }   /* scriptextensions=buhid */,
+  {     0,  9488,  2912,   4,  19, UNI_SUNDANESESUP }   /* blk=sundanesesupplement */,
+  {     1,   184,  8984,   2,   5, UNI_QMARK }   /* isqmark */,
+  {     1, 10170,     0,   2,   0, UNI_CASEDLETTER }   /* l_ */,
+  {     0,  4033,  8855,  16,   2, UNI_CF }   /* generalcategory=cf */,
+  {     1, 10290,  9225,   6,   5, UNI_XPOSIXCNTRL }   /* xposixcntrl */,
+  {    18,  9488,  1013,   4,   5, UNI_INGREEK }   /* blk=greek */,
+  {    64,  9488,  3025,   4,  11, UNI_CHEROKEESUP }   /* blk=cherokeesup */,
+  {     0,  2560,     0,   4,   0, UNI_MAND }   /* mand */,
+  {     3,  9270,  7298,   5,  10, UNI_INPC__OVERSTRUCK }   /* inpc=overstruck */,
+  {     0,  9277,  9860,   3,   4, UNI_VAI }   /* sc=vaii */,
+  {    97,  3836,  9480,  17,   4, UNI_BATK }   /* scriptextensions=batk */,
+  {    12,  9488,  9452,   4,   4, UNI_INAHOM }   /* blk=ahom */,
+  {     0,  9277,  3169,   3,   4, UNI_ETHI }   /* sc=ethi */,
+  {    47,   184, 10180,   2,   2, UNI_ZS }   /* iszs */,
+  {     0,  5171,     0,   4,   0, UNI_CHAM }   /* cham */,
+  {     4,  5674,  1025,  13,   2, -UNI_BIDIM }   /* bidimirrored=no */,
+  {    19,  2684,     0,  19,   0, UNI_EGYP }   /* egyptianhieroglyphs */,
+  {     0, 10009,  3439,   3,   5, UNI_DT__SML }   /* dt=small */,
+  {     1,  8780,  9285,   6,   5, UNI_INLIMBU }   /* block=limbu */,
+  {     0,  9596,  7238,   4,  10, UNI_LB__H2 }   /* hst=lvsyllable */,
+  {     5,  7318,  9397,  10,   3, UNI_IN__2_DOT_1 }   /* presentin=2.1 */,
+  {    36,  6229, 10135,  12,   3, UNI_JOINC }   /* joincontrol=yes */,
+  {   130,  9768,  3894,   5,  10, UNI_SGNW }   /* scx=signwriting */,
+  {     6,  3717,     0,  17,   0, UNI_identifierstatus_values_index }   /* identifierstatus= */,
+  {   112,  8589,  6253,   7,   5, UNI_KHMR }   /* script=khmer */,
+  {     2,  8780,  2329,   6,  20, UNI_INANATOLIANHIEROGLYPHS }   /* block=anatolianhieroglyphs */,
+  {     0,  1273,     0,  21,   0, UNI_ce_values_index }   /* compositionexclusion= */,
+  {     1, 10024,  1186,   3,   2, UNI_PO }   /* gc=po */,
+  {     4,  9488,  8659,   4,   7, UNI_INTIBETAN }   /* blk=tibetan */,
+  {   394,  5674,  9255,  13,   5, -UNI_BIDIM }   /* bidimirrored=false */,
+  {    22,  9488,  5242,   4,  14, UNI_LATINEXTC }   /* blk=latinextendedc */,
+  {     1,  8780,  1677,   6,  14, UNI_LATINEXTA }   /* block=latinextendeda */,
+  {     0,   184,  8380,   3,   6, UNI_CJKEXTE }   /* iscjkexte */,
+  {     0,  9488,  2855,   4,  19, UNI_MONGOLIANSUP }   /* blk=mongoliansupplement */,
+  {     0,  3052,     0,   9,   0, UNI_HALFMARKS }   /* halfmarks */,
+  {     0,  8780,  1944,   6,  22, UNI_EARLYDYNASTICCUNEIFORM }   /* block=earlydynasticcuneiform */,
+  {     0,  8780,  9008,   6,   6, UNI_INTHAANA }   /* block=thaana */,
+  {     6,  8884,     3,   4,   1, -UNI_EXT }   /* ext=f */,
+  {     2,   184,  1988,   2,  21, UNI_LOE }   /* islogicalorderexception */,
+  {     0,  5986,  8738,  13,   5, UNI_NV__60000 }   /* numericvalue=60000 */,
+  {     0,    21,  3549,   4,  15, UNI_ALCHEMICAL }   /* inalchemicalsymbols */,
+  {     2,  5986,  7867,  13,   8, UNI_NV__1_SLASH_32 }   /* numericvalue=3.12e-02 */,
+  {     0,  5986,  7971,  13,   8, UNI_NV__7_SLASH_12 }   /* numericvalue=5.83e-01 */,
+  {     0,  5508,    36,  14,   1, UNI_PATSYN }   /* patternsyntax=t */,
+  {     0,  5739,  9836,  13,   4, UNI_GRBASE }   /* graphemebase=true */,
+  {     0,  2182,    18,  21,   2, UNI_RI }   /* graphemeclusterbreak=ri */,
+  {     4,  4033,  6862,  16,  11, UNI_NO }   /* generalcategory=othernumber */,
+  {     0,  8780,  5778,   6,  13, UNI_IPAEXT }   /* block=ipaextensions */,
+  {     0,  9768,  9712,   4,   4, UNI_OSGE }   /* scx=osge */,
+  {     0,  9262,  1194,   3,   2, UNI_LB__LF }   /* sb=lf */,
+  {   182,  2218,  9306,   3,   4, UNI_INNUSHU }   /* innushu */,
+  {     0,   117,  2431,   4,  18, UNI_ININSCRIPTIONALPAHLAVI }   /* ininscriptionalpahlavi */,
+  {     0,  3836,  1628,  17,   4, UNI_PHAG }   /* scriptextensions=phag */,
+  {     2,  5284,     0,   7,   0, UNI_LISUSUP }   /* lisusup */,
+  {     0,  7325,  7814,   3,   1, UNI_IN__7 }   /* in=7 */,
+  {     1,  9997, 10036,   3,   3, UNI_BC__LRE }   /* bc=lre */,
+  {    10,  6231,  2141,   3,  17, UNI_CYRILLICSUP }   /* incyrillicsupplement */,
+  {     0,  8780,  9800,   6,   4, UNI_TAGS }   /* block=tags */,
+  {    56, 10048,  8714,   3,   4, UNI_NV__3000 }   /* nv=3000 */,
+  {     0,  8780,  3439,   6,  12, UNI_SMALLKANAEXT }   /* block=smallkanaext */,
+  {     0,  1591,  3684,   3,  10, UNI_ETHIOPICEXT }   /* inethiopicext */,
+  {     0,  7318, 10081,  10,   3, UNI_IN__3 }   /* presentin=v30 */,
+  {     3, 10009,     7,   3,   3, UNI_DT__CAN }   /* dt=can */,
+  {     0,  5791,  5424,  13,  14, UNI_JG__MANICHAEANYODH }   /* joininggroup=manichaeanyodh */,
+  {     3,  1188,  2297,   3,   3, UNI_INTHAI }   /* inthai */,
+  {     0,  8589,  6940,   8,  10, UNI_SORA }   /* script=sorasompeng */,
+  {     0,  9277,  7191,   6,   7, UNI_KHAR }   /* sc=kharoshthi */,
+  {    20,   184,  9513,   3,   3, UNI_CHRS }   /* ischrs */,
+  {     0,  8780,  5687,   6,  13, UNI_BLOCKELEMENTS }   /* block=blockelements */,
+  {     5,  1552,  6851,   9,  11, UNI_LO }   /* category=otherletter */,
+  {     0,  9488,  3241,   4,  18, UNI_GEORGIANSUP }   /* blk=georgiansupplement */,
+  {    11,  3836,  9684,  17,   4, UNI_NEWA }   /* scriptextensions=newa */,
+  {     0,  9524,     3,   4,   1, -UNI_CWT }   /* cwt=f */,
+  {     2,  9488,  8924,   4,   6, UNI_INLEPCHA }   /* blk=lepcha */,
+  {    32,  1441,     0,  10,   0, UNI_CJKSYMBOLS }   /* cjksymbols */,
+  {     0,  6420,  7289,   3,   9, UNI_INOLDSOGDIAN }   /* inoldsogdian */,
+  {     1,  7438,   495,  10,   7, UNI_WB__NU }   /* wordbreak=numeric */,
+  {     0,  8589,  5550,   7,  14, UNI_SC__PHLP }   /* script=psalterpahlavi */,
+  {     3, 10048,  7755,   3,   8, UNI_NV__1_SLASH_9 }   /* nv=1.11e-01 */,
+  {     0,  8589,  9828,   7,   4, UNI_THAI }   /* script=thai */,
+  {     2, 10033,  6217,   3,  12, UNI_LB__IS }   /* lb=infixnumeric */,
+  {     0,  8852,    26,   6,   1, UNI_CWKCF }   /* cwkcf=y */,
+  {     3,   184,  2409,   2,   4, UNI_GLAG }   /* isglag */,
+  {     2,  6061,     0,   5,   0, UNI_BIDIC }   /* bidic */,
+  {    85,  5578,    72,  14,   2, UNI_SB__LE }   /* sentencebreak=le */,
+  {   162,  1966,  1489,  22,  24, UNI_INSC__CONSONANTSUCCEEDINGREPHA }   /* indicsyllabiccategory=consonantsucceedingrepha */,
+  {     0,  3836,  9664,  17,   3, UNI_MRO }   /* scriptextensions=mro */,
+  {     0,  5986,  5648,  13,   8, UNI_NV__10000000 }   /* numericvalue=10000000 */,
+  {     0,   184,  5075,   3,  13, UNI_CJKCOMPATFORMS }   /* iscjkcompatforms */,
+  {     0, 10033,  7108,   3,  10, UNI_LB__BA }   /* lb=breakafter */,
+  {     0,  2182,  4360,  21,   9, UNI_WB__EB }   /* graphemeclusterbreak=emodifier */,
+  {    21,  6231,  1442,   3,  23, UNI_CJKSYMBOLS }   /* incjksymbolsandpunctuation */,
+  {    35,  6873,     0,  11,   0, UNI_SO }   /* othersymbol */,
+  {     0,  8589,  9860,   7,   3, UNI_VAI }   /* script=vai */,
+  {     0,  8688,  6026,   3,  11, UNI_ALPHABETICPF }   /* isalphabeticpf */,
+  {     0,  9277,  8457,   4,   6, UNI_SC__KNDA }   /* sc=kannada */,
+  {    38,  6805,  5176,   4,   2, UNI_INMIAO }   /* inmiao */,
+  {     8,  9768,  8888,   4,   6, UNI_HATR }   /* scx=hatran */,
+  {     0,   184,   749,   2,  21, UNI_ENCLOSEDALPHANUM }   /* isenclosedalphanumerics */,
+  {     0,  8589,  9315,   7,   5, UNI_SC__ORYA }   /* script=oriya */,
+  {   133,  7438,  5012,  10,   2, UNI_WB__SQ }   /* wordbreak=sq */,
+  {     0,  9275,  9026,   5,   6, UNI_INSC__VIRAMA }   /* insc=virama */,
+  {     2,  4973,     0,   8,   0, UNI_VEDICEXT }   /* vedicext */,
+  {    52,    74,     0,   2,   0, UNI_ME }   /* me */,
+  {    26,  1979,     0,  10,   0, UNI_L }   /* category=l */,
+  {     0,  5986,  9060,  13,   5, UNI_NV__11_SLASH_12 }   /* numericvalue=11/12 */,
+  {     1,  8589,  8219,   7,   4, UNI_SC__JAVA }   /* script=java */,
+  {     0,  4033,    47,  16,   1, UNI_M }   /* generalcategory=m */,
+  {     6, 10048,  7787,   3,   8, UNI_NV__3_SLASH_2 }   /* nv=1.50e+00 */,
+  {     1,  1966,  4113,  22,  16, UNI_INSC__INVISIBLESTACKER }   /* indicsyllabiccategory=invisiblestacker */,
+  {     1,  4033,  4943,  16,  15, UNI_TITLE }   /* generalcategory=titlecaseletter */,
+  {     0,  8589,  6840,   7,   4, UNI_SC__NAND }   /* script=nand */,
+  {     1, 10060, 10135,   3,   3, UNI_RI }   /* ri=yes */,
+  {   256,  9488,    78,   4,  35, UNI_ARABICMATH }   /* blk=arabicmathematicalalphabeticsymbols */,
+  {     0,  9716, 10135,   4,   3, UNI_PCM }   /* pcm=yes */,
+  {     6,  9768,  9285,   4,   5, UNI_LIMB }   /* scx=limbu */,
+  {     1,  9768,  8484,   4,   7, UNI_MAND }   /* scx=mandaic */,
+  {     5,  3836,  1013,  17,   5, UNI_GREK }   /* scriptextensions=greek */,
+  {     6,  7325, 10087,   3,   3, UNI_IN__3_DOT_2 }   /* in=v32 */,
+  {     0,  5324,  4342,   4,  11, UNI_MATHOPERATORS }   /* inmathoperators */,
+  {     1,  4001,     0,  16,   0, UNI_CYPRIOTSYLLABARY }   /* cypriotsyllabary */,
+  {     0,  8299,     0,   8,   0, UNI_TFNG }   /* tifinagh */,
+  {   196,  2288,  1656,   4,   4, UNI_INHANGUL }   /* inhangul */,
+  {     2,  5986,  7821,  13,   1, UNI_NV__8 }   /* numericvalue=8 */,
+  {    64,   184,  7428,   2,  10, UNI_WARA }   /* iswarangciti */,
+  {     1,  3836,  6409,  17,  12, UNI_MEND }   /* scriptextensions=mendekikakui */,
+  {     3,  5986,  8744,  13,   5, UNI_NV__70000 }   /* numericvalue=70000 */,
+  {     1,  9488,  4129,   4,   9, UNI_LATIN1 }   /* blk=latin1sup */,
+  {     0,  7088,    18,  10,   1, UNI_BC__R }   /* bidiclass=r */,
+  {     0,  6231,  8366,   3,   6, UNI_CJKEXTC }   /* incjkextc */,
+  {     2,   183,     0,  34,   0, UNI_MISCPICTOGRAPHS }   /* miscellaneoussymbolsandpictographs */,
+  {     0,  2280,  6863,   3,  10, UNI_NO }   /* isothernumber */,
+  {     0,  9528,    36,   4,   1, UNI_CWU }   /* cwu=t */,
+  {   265,  8589,  8900,   7,   6, UNI_SC__KTHI }   /* script=kaithi */,
+  {    46,  6231,    43,   3,  15, UNI_CJKCOMPAT }   /* incjkcompatibility */,
+  {     0,  9277,  8484,   3,   7, UNI_SC__MAND }   /* sc=mandaic */,
+  {     4,   184,  9624,   2,   4, UNI_LAO }   /* islaoo */,
+  {     3,  3836,  9692,  17,   4, UNI_NSHU }   /* scriptextensions=nshu */,
+  {     1,  3151,    36,  18,   1, UNI_EPRES }   /* emojipresentation=t */,
+  {    58,  3836,  7292,  18,   3, UNI_SOGD }   /* scriptextensions=sogd */,
+  {    81,  9488,  8561,   4,   7, UNI_INOSMANYA }   /* blk=osmanya */,
+  {     3,    21,  8990,   2,   6, UNI_INREJANG }   /* inrejang */,
+  {    32,  7088, 10039,  10,   3, UNI_BC__LRI }   /* bidiclass=lri */,
+  {     4, 10024,  1563,   3,   2, UNI_PS }   /* gc=ps */,
+  {     1,  3836,  8680,  17,   7, UNI_ZZZZ }   /* scriptextensions=unknown */,
+  {     1,  9768,  9672,   4,   4, UNI_MYMR }   /* scx=mymr */,
+  {     0,  9071,    26,   4,   1, UNI_XPOSIXXDIGIT }   /* hex=y */,
+  {     0,  5986,  9168,  13,   2, UNI_NV__27 }   /* numericvalue=27 */,
+  {     0, 10033,   495,   3,   2, UNI_LB__NU }   /* lb=nu */,
+  {    31,  8780,  2722,   6,  19, UNI_JAMOEXTA }   /* block=hanguljamoextendeda */,
+  {     1,   184,  8414,   2,   4, UNI_ELBA }   /* iselba */,
+  {    99,  2784,    80,   4,  33, UNI_ARABICMATH }   /* inarabicmathematicalalphabeticsymbols */,
+  {     0,  6277,     0,   4,   0, UNI_MAHJ }   /* mahj */,
+  {    35,   117,  3736,   4,  15, UNI_INDICSIYAQNUMBERS }   /* inindicsiyaqnumbers */,
+  {     1,  8589,  9330,   7,   5, UNI_SC__TALE }   /* script=taile */,
+  {     0,  9277,  9085,   3,   5, UNI_BATK }   /* sc=batak */,
+  {     0,  9488,  4928,   4,   5, UNI_INTAMIL }   /* blk=tamil */,
+  {    49,  3341,     0,   8,   0, UNI_DINGBATS }   /* dingbats */,
+  {     0,  9488,  2665,   4,  11, UNI_COUNTINGROD }   /* blk=countingrod */,
+  {    35,  4033,     0,  16,   0, UNI_gc_values_index }   /* generalcategory= */,
+  {     4,  1114,     1,  26,   1, -UNI_CWKCF }   /* changeswhennfkccasefolded=n */,
+  {     7,  6231,   690,   3,  29, UNI_CJKEXTG }   /* incjkunifiedideographsextensiong */,
+  {     3,  7438,    18,  10,   2, UNI_RI }   /* wordbreak=ri */,
+  {     0,   184, 10178,   2,   2, UNI_ZP }   /* iszp */,
+  {     3,  5986,  9916,  13,   3, UNI_NV__2_SLASH_5 }   /* numericvalue=2/5 */,
+  {     2,  8780,  8900,   6,   6, UNI_INKAITHI }   /* block=kaithi */,
+  {     0,  2817,     0,   4,   0, UNI_MERO }   /* mero */,
+  {     0, 10024,  4583,   3,  15, UNI_PD }   /* gc=dashpunctuation */,
+  {     0,  7675,     0,   9,   0, UNI_PALM }   /* palmyrene */,
+  {    16,   184,  2141,   3,  17, UNI_CYRILLICSUP }   /* iscyrillicsupplement */,
+  {     3,  8780,  5830,   6,  13, UNI_LOWSURROGATES }   /* block=lowsurrogates */,
+  {     0,  4033,  9225,  16,   5, UNI_XPOSIXCNTRL }   /* generalcategory=cntrl */,
+  {     8,    21,  8936,   2,   6, UNI_INLYCIAN }   /* inlycian */,
+  {    16,  5791,  9075,  13,   5, UNI_JG__ALAPH }   /* joininggroup=alaph */,
+  {     3,  4989,  4959,   3,  14, UNI_UPPERCASELETTER }   /* isuppercaseletter */,
+  {   120,   184,  3937,   2,   8, UNI_BOPO }   /* isbopomofo */,
+  {     0, 10132,  8323,   3,   7, UNI_WB__LE }   /* wb=aletter */,
+  {     4,  8589,  9245,   7,   5, UNI_SC__DOGR }   /* script=dogra */,
+  {    67,  3853,     1,  17,   1, -UNI_STERM }   /* sentenceterminal=n */,
+  {     0, 10182,  1159,  33,   5, UNI__PERL_PROBLEMATIC_LOCALE_FOLDEDS_START }   /* _perl_problematic_locale_foldeds_start */,
+  {     3,  9768,  9002,   4,   6, UNI_TELU }   /* scx=telugu */,
+  {     0,  5040,     0,   5,   0, UNI_XPOSIXDIGIT }   /* digit */,
+  {     2,  5564,  1025,  14,   2, -UNI_QMARK }   /* quotationmark=no */,
+  {     0,     7,     0,   1,   0, UNI_C }   /* c */,
+  {     1,  9640,     1,   4,   1, -UNI_LOE }   /* loe=n */,
+  {     0,  8780,  3921,   6,   9, UNI_ARABICSUP }   /* block=arabicsup */,
+  {     0,  9828,     0,   4,   0, UNI_THAI }   /* thai */,
+  {     0,  9488,  3241,   4,   8, UNI_INGEORGIAN }   /* blk=georgian */,
+  {     0,  3836,  9440,  17,   4, UNI_ADLM }   /* scriptextensions=adlm */,
+  {   163,  6609, 10135,  11,   3, UNI_DEP }   /* deprecated=yes */,
+  {     4, 10296,    62,   7,   5, UNI_POSIXGRAPH }   /* isposixgraph */,
+  {     0,   184,  8373,   3,   6, UNI_CJKEXTD }   /* iscjkextd */,
+  {   103,  9488,  5228,   4,  14, UNI_LATINEXTB }   /* blk=latinextendedb */,
+  {     1,  4791,     0,  17,   0, UNI_INMEROITICCURSIVE }   /* inmeroiticcursive */,
+  {     4,  1812,  9255,  22,   5, -UNI_CWL }   /* changeswhenlowercased=false */,
+  {     0,  9768,  8498,   4,   7, UNI_MULT }   /* scx=multani */,
+  {     1,  9277,  4369,   3,   6, UNI_SC__SYRC }   /* sc=syriac */,
+  {     1,  9270,  7676,   3,   8, UNI_PALM }   /* inpalmyrene */,
+  {     0,  9277,  9325,   3,   5, UNI_RUNR }   /* sc=runic */,
+  {   474,  1552,   467,   9,   5, UNI_P }   /* category=punct */,
+  {     0,  4116,  6555,   3,   9, UNI_IDC }   /* isidcontinue */,
+  {     0,  9716,     3,   4,   1, -UNI_PCM }   /* pcm=f */,
+  {     0,  6620,     0,   6,   0, UNI_DOMINO }   /* domino */,
+  {     0,  3836,  4868,  17,  15, UNI_NARB }   /* scriptextensions=oldnortharabian */,
+  {     2,   184,  4973,   2,  15, UNI_VEDICEXT }   /* isvedicextensions */,
+  {    11,  1828,    36,   6,   1, UNI_CASED }   /* cased=t */,
+  {    20,  9488,  8315,   4,   8, UNI_INUGARITIC }   /* blk=ugaritic */,
+  {     0,  7218,   184,  10,   2, UNI_LB__IS }   /* linebreak=is */,
+  {     0,  7739,  1025,   8,   2, -UNI_IDS }   /* idstart=no */,
+  {     4,  9488,  9038,   4,   6, UNI_INYEZIDI }   /* blk=yezidi */,
+  {     0,  8589,  9285,   7,   5, UNI_SC__LIMB }   /* script=limbu */,
+  {     2,  7325,  7987,   3,   3, UNI_IN__6_DOT_2 }   /* in=6.2 */,
+  {     3,  7155,  2723,   3,   9, UNI_JAMO }   /* ishanguljamo */,
+  {     0,  7318, 10084,  10,   3, UNI_IN__3_DOT_1 }   /* presentin=v31 */,
+  {     1,  3097,  9868,  18,   4, UNI_EA__F }   /* decompositiontype=wide */,
+  {   106,  9277,  6939,   3,  11, UNI_SORA }   /* sc=sorasompeng */,
+  {     0,  9488,  8211,   4,   8, UNI_JAMOEXTB }   /* blk=jamoextb */,
+  {    12,  9556,     0,   4,   0, UNI_gcb_values_index }   /* gcb= */,
+  {    41,  2182,    36,  21,   1, UNI_GCB__T }   /* graphemeclusterbreak=t */,
+  {     0,  7325,  7781,   3,   1, UNI_IN__4 }   /* in=4 */,
+  {     3,  8762, 10135,   6,   3, UNI_XPOSIXALPHA }   /* alpha=yes */,
+  {     0,  1552,  6873,   9,  11, UNI_SO }   /* category=othersymbol */,
+  {     5,  1059,     0,   2,   0, UNI_SO }   /* so */,
+  {     0,  9556,  1194,   4,   2, UNI_LB__LF }   /* gcb=lf */,
+  {     0,  3836,  8786,  17,   4, UNI_CARI }   /* scriptextensions=cari */,
+  {     0, 10333,  8611,   3,   6, UNI_SIDD }   /* issiddham */,
+  {     7,  5986,  9994,  13,   3, UNI_NV__9_SLASH_2 }   /* numericvalue=9/2 */,
+  {    48,  5578,   138,  14,   2, UNI_SB__FO }   /* sentencebreak=fo */,
+  {     6,  9277,  8638,   3,   7, UNI_SC__TGLG }   /* sc=tagalog */,
+  {    69,  4643,    26,  15,   1, UNI_ECOMP }   /* emojicomponent=y */,
+  {   128,  5200,     0,  14,   0, UNI_KANASUP }   /* kanasupplement */,
+  {     1,  5986,  8042,  13,   2, UNI_NV__18 }   /* numericvalue=18 */,
+  {     0,  8906,     0,   6,   0, UNI_KANBUN }   /* kanbun */,
+  {     2,  4916,  9336,   3,   3, UNI_TAKR }   /* istakr */,
+  {     1,   184,  2120,   3,  13, UNI_CJKRADICALSSUP }   /* iscjkradicalssup */,
+  {    18,  3097,  1253,  18,   4, UNI_DT__INIT }   /* decompositiontype=init */,
+  {     3,  9640,     0,   4,   0, UNI_loe_values_index }   /* loe= */,
+  {    25,  3097,  5904,  18,   4, UNI_DT__NONE }   /* decompositiontype=none */,
+  {     9,  7318, 10120,  10,   3, UNI_IN__8 }   /* presentin=v80 */,
+  {     0,  6097,     0,  12,   0, UNI_CYRILLICEXTA }   /* cyrillicexta */,
+  {    88,  9488,  2119,   4,  21, UNI_CJKRADICALSSUP }   /* blk=cjkradicalssupplement */,
+  {     6,   184,  7621,   2,   9, UNI_NBAT }   /* isnabataean */,
+  {     1,  8780,  7368,   6,  10, UNI_SMALLFORMS }   /* block=smallforms */,
+  {     1,  8884,  9836,   4,   4, UNI_EXT }   /* ext=true */,
+  {     3,  8610,     0,   7,   0, UNI_SIDD }   /* siddham */,
+  {   344,  5116,     3,  14,   1, -UNI_EMOD }   /* emojimodifier=f */,
+  {     0,  9508,  9940,   4,   3, UNI_CCC__A }   /* ccc=230 */,
+  {     1,   908,     0,  10,   0, UNI_CO }   /* privateuse */,
+  {     1,   184, 10303,   2,   5, UNI_XPOSIXBLANK }   /* isblank */,
+  {     0,  3836,  9672,  17,   4, UNI_MYMR }   /* scriptextensions=mymr */,
+  {     0,  9768,  9512,   4,   4, UNI_CHRS }   /* scx=chrs */,
+  {    38,  6231,  5075,   3,  13, UNI_CJKCOMPATFORMS }   /* incjkcompatforms */,
+  {     5,  5564,     0,  13,   0, UNI_QMARK }   /* quotationmark */,
   {     0,   184,   283,   2,  33, UNI_MISCMATHSYMBOLSB }   /* ismiscellaneousmathematicalsymbolsb */,
-  {     0,  8884,  4612,   5,  15, UNI_INSC__MODIFYINGLETTER }   /* insc=modifyingletter */,
-  {     0,  3671,  9201,  17,   4, UNI_KHMR }   /* scriptextensions=khmr */,
-  {   520,  3951,   325,   3,   3, UNI_ITAL }   /* isital */,
-  {     9,  9623,  2561,   3,   3, UNI_JG__YEH }   /* jg=yeh */,
-  {   416,  3868,  7098,  16,  10, UNI_CN }   /* generalcategory=unassigned */,
-  {     0,  9377,     0,   4,   0, UNI_SHAW }   /* shaw */,
-  {    11,  5760,  7692,  13,   8, UNI_NV__13_SLASH_2 }   /* numericvalue=6.50e+00 */,
-  {     0,  6816,  4298,   3,   6, UNI_BRAI }   /* inbraille */,
-  {    41,  3243,     3,  11,   1, -UNI_XPOSIXSPACE }   /* whitespace=f */,
-  {    56,  9093,  2085,   4,  18, UNI_CYRILLICSUP }   /* blk=cyrillicsupplement */,
-  {  1400,  1362,  5410,  24,   1, UNI_CCC__0 }   /* canonicalcombiningclass=0 */,
-  {    17,  6918,  1696,  10,   2, UNI_LB__AI }   /* linebreak=ai */,
-  {     1,  8233,  8568,   7,   4, UNI_LYDI }   /* script=lydi */,
-  {   771,  3671,  9273,  17,   4, UNI_NARB }   /* scriptextensions=narb */,
-  {     0,  4417,     0,  15,   0, UNI_DIACRITICALSEXT }   /* diacriticalsext */,
-  {    44,  9608,   835,   3,   1, UNI_EA__W }   /* ea=w */,
-  {     0,  8514,     0,   6,   0, UNI_HATR }   /* hatran */,
-  {     0,  3671,  9081,  17,   4, UNI_AVST }   /* scriptextensions=avst */,
-  {    22,  2453,    26,  20,   1, UNI_TERM }   /* terminalpunctuation=y */,
-  {     0,  5565,  9369,  13,   4, UNI_JG__SEEN }   /* joininggroup=seen */,
-  {     0,  8233,  6988,   7,  10, UNI_SOGO }   /* script=oldsogdian */,
-  {     2,  6918,  5967,  10,  12, UNI_LB__HL }   /* linebreak=hebrewletter */,
-  {    50,  8886,  4297,   3,   4, UNI_BRAI }   /* sc=brai */,
-  {     2,  5760,  8400,  13,   3, UNI_NV__900 }   /* numericvalue=900 */,
-  {     3,  9623,  5630,   3,  13, UNI_JG__MALAYALAMNNNA }   /* jg=malayalamnnna */,
-  {     1,  9909,    83,   3,   2, UNI_PCM }   /* ispcm */,
-  {     0,  1136,    26,  26,   1, UNI_DI }   /* defaultignorablecodepoint=y */,
-  {     1,  1924,     0,  11,   0, UNI_LO }   /* category=lo */,
-  {     3,  8233,  9297,   7,   4, UNI_OLCK }   /* script=olck */,
-  {     3,  7892,     0,   8,   0, UNI_JAVA }   /* javanese */,
-  {    73,  6828,    32,  10,   2, UNI_BC__CS }   /* bidiclass=cs */,
-  {     0,  8886,  2741,   3,   4, UNI_MERO }   /* sc=mero */,
-  {   782,  9647,  7684,   3,   8, UNI_NV__1_SLASH_160 }   /* nv=6.25e-03 */,
-  {     0,  9365,  8205,   4,   7, UNI_OSMA }   /* scx=osmanya */,
-  {     0,  9647,  5410,   3,   1, UNI_NV__0 }   /* nv=0 */,
-  {    19,  8508,   995,   6,   2, -UNI_GREXT }   /* grext=no */,
-  {     1,  3671,  6978,  17,  10, UNI_XPEO }   /* scriptextensions=oldpersian */,
-  {   545,  1158,  4221,   3,  15, UNI_TANGUTCOMPONENTS }   /* intangutcomponents */,
-  {    74,  3020,     0,  10,   0, UNI_DEVA }   /* devanagari */,
-  {   515,  9113,  1189,   4,   3, UNI_CCC__214 }   /* ccc=ata */,
-  {     0,  8854,     1,   5,   1, -UNI_DASH }   /* dash=n */,
-  {   404,  1158,  8945,   3,   4, UNI_INTAKRI }   /* intakri */,
-  {   513,  9153,   125,   4,   2, UNI_LB__CR }   /* gcb=cr */,
-  {     4,  8886,  9081,   3,   4, UNI_AVST }   /* sc=avst */,
-  {   304,  8233,  2741,   7,   4, UNI_MERO }   /* script=mero */,
-  {     0,  9605,  7836,   3,   3, UNI_DT__FRA }   /* dt=fra */,
-  {     0,   184,  1668,   2,  23, UNI_SUPPUNCTUATION }   /* issupplementalpunctuation */,
-  {     0,  1497,  5199,   9,  14, UNI_SK }   /* category=modifiersymbol */,
-  {    40,  9647,  9749,   3,   2, UNI_NV__48 }   /* nv=48 */,
-  {   440,  5325,   995,  14,   2, -UNI_QMARK }   /* quotationmark=no */,
-  {     1,  3671,  4492,  17,  15, UNI_ARMI }   /* scriptextensions=imperialaramaic */,
-  {     0,  8424,  6382,   6,  11, UNI_DOMINO }   /* block=dominotiles */,
-  {     0,   184,  8079,   2,   4, UNI_GRAN }   /* isgran */,
-  {     0,  8960,     1,   4,   1, -UNI_IDS }   /* ids=n */,
-  {  1550,  8233,  9353,   7,   4, UNI_RUNR }   /* script=runr */,
-  {     2,  5760,  8464,  13,   2, UNI_NV__29 }   /* numericvalue=29 */,
-  {    50,  9662,     1,   3,   1, -UNI_SD }   /* sd=n */,
-  {     1,  7018,  9710,  10,   3, UNI_IN__6_DOT_2 }   /* presentin=v62 */,
-  {     0,  9909,   131,   3,   3, UNI_PALM }   /* ispalm */,
-  {     0,  3671,  9189,  17,   4, UNI_HMNP }   /* scriptextensions=hmnp */,
-  {     0,   184,  9229,   2,   4, UNI_LINB }   /* islinb */,
-  {     1,  8233,  8149,   7,   4, UNI_SC__MULT }   /* script=mult */,
-  {  1230,   184,  8914,   2,   5, UNI_NSHU }   /* isnushu */,
-  {     0,   184,  2067,   2,   7, UNI_RADICAL }   /* isradical */,
-  {   386,  3671,  8514,  17,   6, UNI_HATR }   /* scriptextensions=hatran */,
-  {     0,  8233,  4717,   7,   5, UNI_SC__TAML }   /* script=tamil */,
-  {   162,  9065,     0,   4,   0, UNI_ARMI }   /* armi */,
-  {    33,  8884,  4342,   5,  15, UNI_INSC__CONSONANTMEDIAL }   /* insc=consonantmedial */,
-  {     0,  8406,    26,   6,   1, UNI_XPOSIXALPHA }   /* alpha=y */,
-  {     1,  6371,     3,  11,   1, -UNI_DEP }   /* deprecated=f */,
-  {     0,  1362,  1149,  24,   2, UNI_CCC__BL }   /* canonicalcombiningclass=bl */,
-  {     0,  5786,     0,  13,   0, UNI_VERTICALFORMS }   /* verticalforms */,
-  {     0,  9121,   995,   4,   2, -UNI_CWL }   /* cwl=no */,
-  {     1,  5565,  6878,  13,  10, UNI_JG__DALATHRISH }   /* joininggroup=dalathrish */,
-  {     0,  8233,  9301,   7,   4, UNI_ORKH }   /* script=orkh */,
-  {     0,  9620,  5500,   3,  13, UNI_ME }   /* gc=enclosingmark */,
-  {     5,  4975,     0,   7,   0, UNI_KANASUP }   /* kanasup */,
-  {     0,  9093,  2085,   4,  21, UNI_CYRILLICSUP }   /* blk=cyrillicsupplementary */,
-  {   275,  3227,     0,   9,   0, UNI_Z }   /* separator */,
-  {     0,  9137,  9433,   4,   4, UNI_DEP }   /* dep=true */,
-  {  1297,  9365,  1188,   4,   8, UNI_KANA }   /* scx=katakana */,
-  {    12,  9593,  2373,   3,  20, UNI_BC__LRE }   /* bc=lefttorightembedding */,
-  {  1314,  9904,    96,   5,   5, UNI_POSIXALPHA }   /* posixalpha */,
-  {     3,  8886,  8247,   3,   7, UNI_SHAW }   /* sc=shavian */,
-  {   138,  9365,  8929,   4,   5, UNI_OSGE }   /* scx=osage */,
-  {     8,  8424,  4762,   6,   8, UNI_VEDICEXT }   /* block=vedicext */,
-  {     0,  5565,  5097,  13,   4, UNI_JG__BETH }   /* joininggroup=beth */,
-  {   156,  9909,   467,   7,   5, UNI_POSIXPUNCT }   /* isposixpunct */,
-  {     1,  5859,     0,  12,   0, UNI_CHESSSYMBOLS }   /* chesssymbols */,
-  {     0,  4778,  7981,   3,   7, UNI_UGAR }   /* isugaritic */,
-  {   177,   184,  7876,   2,   8, UNI_JAMOEXTA }   /* isjamoexta */,
-  {     0,  8233,  8944,   7,   4, UNI_SC__TAKR }   /* script=takr */,
-  {     3,  8233,   382,   7,   4, UNI_EGYP }   /* script=egyp */,
-  {     0,  8496,     0,   6,   0, UNI_cwkcf_values_index }   /* cwkcf= */,
-  {     3,   184,  7058,   2,  10, UNI_SMALLFORMS }   /* issmallforms */,
-  {     3,  8510,  9734,   4,   3, UNI_EXT }   /* ext=yes */,
-  {     0,  4792,     0,  15,   0, UNI_ZANB }   /* zanabazarsquare */,
-  {     2,  7419,  9734,   9,   3, UNI_XIDS }   /* xidstart=yes */,
-  {     0,  6885,  2431,   3,   3, UNI_HATR }   /* ishatr */,
-  {     0,  2006,     0,   4,   0, UNI_MODI }   /* modi */,
-  {    29,  9647,  7444,   3,   8, UNI_NV__1_SLASH_8 }   /* nv=1.25e-01 */,
-  {     1,  6183,     0,   4,   0, UNI_MEND }   /* mend */,
-  {     0,  3671,  9453,  17,   3, UNI_VAI }   /* scriptextensions=vai */,
-  {   694,  1084,     3,  26,   1, -UNI_CWKCF }   /* changeswhennfkccasefolded=f */,
-  {     0,  9049,  9551,   4,   3, UNI_AGE__3_DOT_2 }   /* age=3.2 */,
-  {     0,  8884,  8331,   5,   7, UNI_INSC__VISARGA }   /* insc=visarga */,
-  {     0,  3308,     0,  12,   0, UNI_SMALLKANAEXT }   /* smallkanaext */,
-  {     0,  7018,  7098,  10,  10, UNI_AGE__NA }   /* presentin=unassigned */,
-  {     2,  9125,  9734,   4,   3, UNI_CWT }   /* cwt=yes */,
-  {     0,  3671,  8550,  17,   6, UNI_LEPC }   /* scriptextensions=lepcha */,
-  {     1,  3868,   133,  16,   4, UNI_M }   /* generalcategory=mark */,
-  {     0,  3868,   467,  16,  11, UNI_P }   /* generalcategory=punctuation */,
-  {     3,  9946,  2212,   3,   6, UNI_SINH }   /* issinhala */,
-  {  1356,  2893,     0,  19,   0, UNI_SUPARROWSC }   /* supplementalarrowsc */,
-  {   849,  8079,     0,   4,   0, UNI_GRAN }   /* gran */,
-  {     2,  9365,  9253,   4,   4, UNI_MIAO }   /* scx=miao */,
-  {     1,  2148,   894,   3,  27, UNI_SUPPUAB }   /* insupplementaryprivateuseareab */,
-  {     0,  8592,   995,   6,   2, UNI_DT__CAN }   /* nfdqc=no */,
-  {    17,  5760,  7628,  13,   8, UNI_NV__3_SLASH_64 }   /* numericvalue=4.69e-02 */,
-  {   518,  8100,  9433,   7,   4, UNI_HYPHEN }   /* hyphen=true */,
-  {     3,  9593,  6255,   3,  12, UNI_BC__ON }   /* bc=otherneutral */,
-  {     2,  8233,  6183,   7,  12, UNI_MEND }   /* script=mendekikakui */,
-  {    41,  9093,  8121,   4,   7, UNI_INLINEARA }   /* blk=lineara */,
-  {   162,  9137,   995,   4,   2, -UNI_DEP }   /* dep=no */,
-  {     0,  9647,  7603,   3,   2, UNI_NV__24 }   /* nv=24 */,
-  {  1287,  8100,     3,   7,   1, -UNI_HYPHEN }   /* hyphen=f */,
-  {     1,  8338,     1,   7,   1, -UNI_XPOSIXSPACE }   /* wspace=n */,
-  {     1,   184,  3020,   2,  18, UNI_DEVANAGARIEXT }   /* isdevanagariextended */,
-  {     0,  9623,  9477,   3,   4, UNI_JG__ZAIN }   /* jg=zain */,
-  {     0,   184,  2006,   2,  14, UNI_LM }   /* ismodifierletter */,
-  {    13,  9113,  8825,   5,   4, UNI_CCC__36 }   /* ccc=ccc36 */,
-  {   284,  9365,  5311,   4,  14, UNI_PHLP }   /* scx=psalterpahlavi */,
-  {    83,  9093,  4946,   4,   4, UNI_INCHAM }   /* blk=cham */,
-  {     0,  8332,  5493,   3,   4, UNI_XPOSIXALNUM }   /* isalnum */,
-  {     0,  3688,     1,  17,   1, -UNI_STERM }   /* sentenceterminal=n */,
-  {     2,   184,  1767,   2,   2, UNI_NL }   /* isnl */,
-  {    36,  9365,  2169,   4,  11, UNI_MTEI }   /* scx=meeteimayek */,
-  {     4,  7018,  9587,  10,   3, UNI_IN__9 }   /* presentin=9.0 */,
-  {     3,  6888,     3,  10,   1, -UNI_DIA }   /* diacritic=f */,
-  {   266,    21,  1188,   2,  26, UNI_KATAKANAEXT }   /* inkatakanaphoneticextensions */,
-  {     7,  9365,  3729,   5,  10, UNI_SGNW }   /* scx=signwriting */,
-  {   303,  9365,  3730,   5,   3, UNI_SGNW }   /* scx=sgnw */,
-  {     9,  1362,  8815,  25,   4, UNI_CCC__34 }   /* canonicalcombiningclass=ccc34 */,
-  {   818,   184,  3308,   2,  12, UNI_SMALLKANAEXT }   /* issmallkanaext */,
-  {     2,   184,   697,   2,   2, UNI_MN }   /* ismn */,
-  {     3,   184,  8934,   2,   5, UNI_RUNR }   /* isrunic */,
-  {     4,   184,  4267,   2,   8, UNI_BAMUMSUP }   /* isbamumsup */,
-  {    14,  9093,  3964,   4,  16, UNI_LATIN1 }   /* blk=latin1supplement */,
-  {     0,  1057,  8864,  27,   5, -UNI_PCM }   /* prependedconcatenationmark=false */,
-  {     1,  8886,  7956,   3,   8, UNI_SC__TAGB }   /* sc=tagbanwa */,
-  {     0,  3868,  1141,  16,   2, UNI_TITLE }   /* generalcategory=lt */,
-  {   859,  8886,  8058,   3,   7, UNI_DSRT }   /* sc=deseret */,
-  {     3,  1362,  8449,  25,   4, UNI_CCC__11 }   /* canonicalcombiningclass=ccc11 */,
-  {     0,  4220,     0,   4,   0, UNI_TANG }   /* tang */,
-  {     0,  5565,  5931,  13,  12, UNI_JG__FINALSEMKATH }   /* joininggroup=finalsemkath */,
-  {   821,  5565,    87,  13,   2, UNI_JG__HE }   /* joininggroup=he */,
-  {  1090,   184,  9485,   2,   4, UNI_QAAI }   /* iszinh */,
-  {     7,  8424,  6723,   6,  11, UNI_INSYLOTINAGRI }   /* block=sylotinagri */,
-  {  1066,   183,     0,  20,   0, UNI_MISCSYMBOLS }   /* miscellaneoussymbols */,
-  {     0,     1,     0,   1,   0, UNI_N }   /* n */,
-  {     8,  8884,  6225,   5,   6, UNI_LB__ZWJ }   /* insc=joiner */,
-  {  1544,  8424,   949,   6,  27, UNI_ALPHABETICPF }   /* block=alphabeticpresentationforms */,
-  {    25,   184,  1856,   2,  11, UNI_NUMBERFORMS }   /* isnumberforms */,
-  {     1,  9623,  4562,   3,   3, UNI_JG__SAD }   /* jg=sad */,
-  {    10,  5883,     0,  12,   0, UNI_CYRILLICEXTB }   /* cyrillicextb */,
-  {     4,  1497,     7,  10,   1, UNI_SC }   /* category=sc */,
-  {     0,  9623,  6657,   3,  11, UNI_JG__ROHINGYAYEH }   /* jg=rohingyayeh */,
-  {     3,  7018,  7446,  10,   1, UNI_IN__2 }   /* presentin=2 */,
-  {    74,  3688,  9734,  17,   3, UNI_STERM }   /* sentenceterminal=yes */,
-  {    16,  9093,  1386,   4,  24, UNI_CJKSYMBOLS }   /* blk=cjksymbolsandpunctuation */,
-  {   161,  9165,     0,   4,   0, UNI_GREK }   /* grek */,
-  {    20,  6005,  6870,   4,   8, UNI_COMPATJAMO }   /* incompatjamo */,
-  {     0,    45,     0,   2,   0, UNI_CO }   /* co */,
-  {    50,  8233,  8065,   7,   4, UNI_ELBA }   /* script=elba */,
-  {     0,  9620,  1844,   3,   2, UNI_PC }   /* gc=pc */,
-  {     1,  9365,  8072,   4,   4, UNI_ELYM }   /* scx=elym */,
-  {     1,  9608,    66,   3,   1, UNI_EA__H }   /* ea=h */,
-  {    32,  9365,  9345,   4,   4, UNI_RJNG }   /* scx=rjng */,
-  {     0,  2212,  4962,   3,  13, UNI_HIGHSURROGATES }   /* inhighsurrogates */,
-  {     0,  6382,     0,  11,   0, UNI_DOMINO }   /* dominotiles */,
-  {     8,  4241,  8060,   4,   5, UNI_DSRT }   /* indeseret */,
-  {   137,  9620,   262,   3,   2, UNI_SM }   /* gc=sm */,
-  {     0,  9593,  3569,   3,  17, UNI_BC__ES }   /* bc=europeanseparator */,
-  {     0,  9113,  8352,   4,   3, UNI_CCC__216 }   /* ccc=216 */,
-  {     3,  8424,   831,   6,   6, UNI_ARROWS }   /* block=arrows */,
-  {     0,   184,  3038,   2,  18, UNI_ETHIOPICSUP }   /* isethiopicsupplement */,
-  {     0,  9946,  8255,   3,   3, UNI_SIDD }   /* issidd */,
-  {     9,  8879,  2373,   5,   4, UNI_INPC__LEFT }   /* inpc=left */,
-  {     0,  8844,    36,   5,   1, UNI_CWCF }   /* cwcf=t */,
-  {     0,  7025,  7508,   3,   3, UNI_IN__2 }   /* in=2.0 */,
-  {     0,  1735,  9433,  22,   4, UNI_CWCM }   /* changeswhencasemapped=true */,
-  {     1,   184,  6027,   2,   5, UNI_KHMR }   /* iskhmer */,
-  {     0,  7128,  3254,  10,  17, UNI_RI }   /* wordbreak=regionalindicator */,
-  {     0,  1136,    36,  26,   1, UNI_DI }   /* defaultignorablecodepoint=t */,
-  {     0,  8640,  8864,   6,   5, -UNI_XPOSIXUPPER }   /* upper=false */,
-  {    28,  9113,  2912,   4,  18, UNI_CCC__216 }   /* ccc=attachedaboveright */,
-  {    20,  9365,  9329,   4,   4, UNI_PRTI }   /* scx=prti */,
-  {     1,  1482,  2473,  24,  12, UNI_INPC__TOPANDBOTTOM }   /* indicpositionalcategory=topandbottom */,
-  {     0,  3671,  9469,  17,   4, UNI_XSUX }   /* scriptextensions=xsux */,
-  {     1,  3671,  3038,  17,   8, UNI_ETHI }   /* scriptextensions=ethiopic */,
-  {     3,  8424,  8652,   6,   6, UNI_INWANCHO }   /* block=wancho */,
-  {     0,  6928,     3,  10,   1, -UNI_XPOSIXLOWER }   /* lowercase=f */,
-  {     0,  9093,  1955,   4,  22, UNI_MISCTECHNICAL }   /* blk=miscellaneoustechnical */,
-  {   546,  2212,  1601,   4,  21, UNI_COMPATJAMO }   /* inhangulcompatibilityjamo */,
-  {    30,  4580,  6581,   3,  10, UNI_MYANMAREXTA }   /* inmyanmarexta */,
-  {     0,  9903,  4828,   6,   6, UNI_XPOSIXXDIGIT }   /* xposixxdigit */,
-  {     1,  1735,     0,  21,   0, UNI_CWCM }   /* changeswhencasemapped */,
-  {     0,  8849,   995,   5,   2, -UNI_CWCM }   /* cwcm=no */,
-  {  1843,  1773,  9433,   6,   4, UNI_CASED }   /* cased=true */,
-  {     0,  8424,  4092,   6,  16, UNI_MISCMATHSYMBOLSB }   /* block=miscmathsymbolsb */,
-  {   606,  5799,     0,  12,   0, UNI_ALPHABETICPF }   /* alphabeticpf */,
-  {   890,  3868,    25,  16,   1, UNI_S }   /* generalcategory=s */,
-  {   641,  8510,     3,   4,   1, -UNI_EXT }   /* ext=f */,
-  {     3,  8332,  7101,   3,   7, UNI_ASSIGNED }   /* isassigned */,
-  {    50,  7025,  9716,   3,   3, UNI_IN__7 }   /* in=v70 */,
-  {     0,  5565,  5125,  13,   4, UNI_JG__HETH }   /* joininggroup=heth */,
-  {   640,  8233,  6159,   7,  12, UNI_SC__GONM }   /* script=masaramgondi */,
-  {    72,  9629,  4195,   3,   9, UNI_LB__EM }   /* lb=emodifier */,
-  {     2,   184,  9161,   2,   4, UNI_GONM }   /* isgonm */,
-  {     0,  9093,  3773,   5,   7, UNI_INBOPOMOFO }   /* blk=bopomofo */,
-  {     0,  5435,  9734,  13,   3, UNI_BIDIM }   /* bidimirrored=yes */,
-  {    12,   184,  1188,   2,  26, UNI_KATAKANAEXT }   /* iskatakanaphoneticextensions */,
-  {  1057,  4580,  2171,   4,  19, UNI_MEETEIMAYEKEXT }   /* inmeeteimayekextensions */,
-  {     0,  9093,  4989,   4,  14, UNI_KANGXI }   /* blk=kangxiradicals */,
-  {     0,  3671,  6183,  17,  12, UNI_MEND }   /* scriptextensions=mendekikakui */,
-  {    13,  6371,    26,  11,   1, UNI_DEP }   /* deprecated=y */,
-  {     0,  3671,  9181,  17,   4, UNI_HLUW }   /* scriptextensions=hluw */,
-  {     0,  9365,  6183,   4,   4, UNI_MEND }   /* scx=mend */,
-  {    20,  9093,   983,   4,   5, UNI_INGREEK }   /* blk=greek */,
-  {     0,  5565,  2127,  13,  21, UNI_JG__HANIFIROHINGYAKINNAYA }   /* joininggroup=hanifirohingyakinnaya */,
-  {     0,  8233,  9197,   7,   4, UNI_SC__KALI }   /* script=kali */,
-  {     0,  1003,     0,  11,   0, UNI_ENCLOSEDCJK }   /* enclosedcjk */,
-  {     1,  8886,  8324,   3,   7, UNI_ZZZZ }   /* sc=unknown */,
-  {     4,   184,  5617,   2,   9, UNI_MLYM }   /* ismalayalam */,
-  {     0,  5565,  9341,  13,   4, UNI_JG__QAPH }   /* joininggroup=qaph */,
-  {     0,  9365,  8065,   4,   7, UNI_ELBA }   /* scx=elbasan */,
-  {   164,  3671,  3730,  18,   3, UNI_SGNW }   /* scriptextensions=sgnw */,
-  {     1,  1867,     0,  12,   0, UNI_DIACRITICALS }   /* diacriticals */,
-  {     1,  9365,   689,   4,   9, UNI_XSUX }   /* scx=cuneiform */,
-  {     0,  8874,   995,   5,   2, -UNI_IDST }   /* idst=no */,
-  {  3628,  9365,  7964,   4,   8, UNI_TFNG }   /* scx=tifinagh */,
-  {     1,  1576,     0,  18,   0, UNI_GEOMETRICSHAPESEXT }   /* geometricshapesext */,
-  {     0,  8219,     1,   7,   1, -UNI_PATSYN }   /* patsyn=n */,
-  {  1301,  8406,     3,   6,   1, -UNI_XPOSIXALPHA }   /* alpha=f */,
-  {    12,    21,  1622,   2,  23, UNI_LATINEXTADDITIONAL }   /* inlatinextendedadditional */,
-  {     0,  8886,  8679,   3,   5, UNI_SC__ADLM }   /* sc=adlam */,
-  {     0,  7932,    36,   8,   1, UNI_RADICAL }   /* radical=t */,
-  {     0,  6316,     0,   3,   0, UNI_IDC }   /* idc */,
-  {   278,  8604,     1,   6,   1, -UNI_QMARK }   /* qmark=n */,
-  {     2,  9049,  9445,   4,   4, UNI_AGE__12 }   /* age=v120 */,
-  {     0,  8332,   977,   3,  16, UNI_ANCIENTGREEKMUSIC }   /* isancientgreekmusic */,
-  {   440,  8424,  6978,   6,  10, UNI_INOLDPERSIAN }   /* block=oldpersian */,
-  {   520,  9781,  1472,   6,   9, UNI__PERL_SURROGATE }   /* _perl_surrogate */,
-  {   739,  6918,  4631,  10,   2, UNI_LB__QU }   /* linebreak=qu */,
-  {     0,  8233,  7804,   7,   8, UNI_SC__BUGI }   /* script=buginese */,
-  {     2,  6371,  9734,  11,   3, UNI_DEP }   /* deprecated=yes */,
-  {  2049,  9909,    96,   7,   5, UNI_POSIXALPHA }   /* isposixalpha */,
-  {     2,  9365,  8502,   4,   6, UNI_GOTH }   /* scx=gothic */,
-  {     0,  1057,     0,  26,   0, UNI_PCM }   /* prependedconcatenationmark */,
-  {     1,  9731,  6415,   3,  11, UNI_WB__DQ }   /* wb=doublequote */,
-  {     1,  3671,  1845,  17,   6, UNI_ZYYY }   /* scriptextensions=common */,
-  {     0,  6828,  9638,  10,   3, UNI_BC__LRO }   /* bidiclass=lro */,
-  {     3,  5085,  8144,   4,   5, UNI_INMARCHEN }   /* inmarchen */,
-  {   161,   184,  1824,   3,  18, UNI_CJKCOMPATIDEOGRAPHS }   /* iscjkcompatideographs */,
-  {   523,  2142,  1857,   3,  10, UNI_NUMBERFORMS }   /* innumberforms */,
-  {     0,  3671,  9453,  17,   4, UNI_VAI }   /* scriptextensions=vaii */,
-  {     0,  8233,  2353,   7,  20, UNI_PHLI }   /* script=inscriptionalpahlavi */,
-  {     3,  1497,  4140,   9,  16, UNI_PO }   /* category=otherpunctuation */,
-  {   768,  9647,  7452,   3,   8, UNI_NV__1_SLASH_80 }   /* nv=1.25e-02 */,
-  {  2090,  1362,  7659,  24,   2, UNI_CCC__16 }   /* canonicalcombiningclass=16 */,
-  {   644,  8879,  2379,   5,   5, UNI_INPC__RIGHT }   /* inpc=right */,
-  {   130,  9093,  3884,   4,  11, UNI_GEORGIANEXT }   /* blk=georgianext */,
-  {    14,  8424,  2779,   6,  19, UNI_MONGOLIANSUP }   /* block=mongoliansupplement */,
-  {     0,  9365,  7008,   4,  10, UNI_PHNX }   /* scx=phoenician */,
-  {   269,  8886,  9377,   3,   4, UNI_SHAW }   /* sc=shaw */,
-  {  2117,  8886,  8240,   3,   7, UNI_SC__SHRD }   /* sc=sharada */,
-  {     0,   184,  7128,   2,   4, UNI_XPOSIXWORD }   /* isword */,
-  {     0,  8121,     0,   7,   0, UNI_LINA }   /* lineara */,
-  {     0,   184,  6898,   2,   4, UNI_KHAR }   /* iskhar */,
-  {     0,  5227,    26,  14,   1, UNI_NFDQC__Y }   /* nfdquickcheck=y */,
-  {     0,  8424,     0,   6,   0, UNI_blk_values_index }   /* block= */,
-  {    98,  8233,  6992,   8,   6, UNI_SC__SOGD }   /* script=sogdian */,
-  {   776,  7108,  9734,  10,   3, UNI_XPOSIXUPPER }   /* uppercase=yes */,
-  {     0,  5339,  9773,  14,   2, UNI_SB__XX }   /* sentencebreak=xx */,
-  {     3,  8884,  7780,   5,   8, UNI_INSC__AVAGRAHA }   /* insc=avagraha */,
-  {  2952,  4705,  4221,   3,   5, UNI_TANG }   /* istangut */,
-  {     0,  3671,  7365,  17,   4, UNI_PAUC }   /* scriptextensions=pauc */,
-  {     0,  9093,  7338,   4,   9, UNI_INOLDPERMIC }   /* blk=oldpermic */,
-  {     0,  9093,  2533,   5,   5, UNI_INBRAHMI }   /* blk=brahmi */,
-  {     0,  6918,  3254,  10,  17, UNI_RI }   /* linebreak=regionalindicator */,
-  {     0,  5760,  7652,  13,   8, UNI_NV__7_SLASH_12 }   /* numericvalue=5.83e-01 */,
-  {     4,  8233,  9057,   7,   4, UNI_AHOM }   /* script=ahom */,
-  {   150,  9647,  7459,   3,   2, UNI_NV__21 }   /* nv=21 */,
-  {     0,   184,  9165,   2,   4, UNI_GREK }   /* isgrek */,
-  {     3,  5760,  9751,  13,   2, UNI_NV__49 }   /* numericvalue=49 */,
-  {  2025,  8247,     0,   7,   0, UNI_SHAW }   /* shavian */,
-  {     0,  9113,  8467,   5,   5, UNI_CCC__130 }   /* ccc=ccc130 */,
-  {   310,  2085,     0,   8,   0, UNI_CYRL }   /* cyrillic */,
-  {     4,  5565,  6778,  13,  10, UNI_JG__AFRICANFEH }   /* joininggroup=africanfeh */,
-  {     0,  4705,  7957,   3,   7, UNI_TAGB }   /* istagbanwa */,
-  {     0,   184,  1014,   2,   6, UNI_L }   /* isletter */,
-  {     0,  1057,     3,  27,   1, -UNI_PCM }   /* prependedconcatenationmark=f */,
-  {     0,  9731,  5943,   3,  12, UNI_WB__EB }   /* wb=glueafterzwj */,
-  {   208,  1823,     0,  22,   0, UNI_CJKCOMPATIDEOGRAPHSSUP }   /* cjkcompatideographssup */,
-  {  4219,  1362,  8800,  25,   4, UNI_CCC__31 }   /* canonicalcombiningclass=ccc31 */,
-  {     0,   184,  9108,   2,   2, UNI_MC }   /* ismc */,
-  {     0,  1057,     0,  27,   0, UNI_pcm_values_index }   /* prependedconcatenationmark= */,
-  {     0,  5760,  9041,  13,   4, UNI_NV__7_SLASH_12 }   /* numericvalue=7/12 */,
-  {   118,  9113,  8820,   5,   4, UNI_CCC__35 }   /* ccc=ccc35 */,
-  {   208,  6991,     0,   4,   0, UNI_SOGD }   /* sogd */,
-  {     0,  8233,  7956,   7,   4, UNI_SC__TAGB }   /* script=tagb */,
-  {     6,  8233,  8622,   7,   4, UNI_SC__TELU }   /* script=telu */,
-  {  1603,  4828,     0,   6,   0, UNI_XPOSIXXDIGIT }   /* xdigit */,
-  {     1,   184,  3290,   2,  18, UNI_RUMI }   /* isruminumeralsymbols */,
-  {     0,  8424,  8247,   6,   7, UNI_SHAW }   /* block=shavian */,
-  {     0,  3128,    26,  18,   1, UNI_IDSB }   /* idsbinaryoperator=y */,
-  {     4,   184,  1257,   2,   2, UNI_UPPERCASELETTER }   /* islu */,
-  {     1,  3671,  4717,  17,   5, UNI_TAML }   /* scriptextensions=tamil */,
-  {     0,  5760,  7548,  13,   8, UNI_NV__1_SLASH_32 }   /* numericvalue=3.12e-02 */,
-  {     4,  8684,  9734,   5,   3, UNI_POSIXXDIGIT }   /* ahex=yes */,
-  {     2,  8233,  1192,   7,   4, UNI_SC__KANA }   /* script=kana */,
-  {     8,  2212,  2129,   4,  12, UNI_INHANIFIROHINGYA }   /* inhanifirohingya */,
-  {  3440,  6194,  8920,   3,   4, UNI_INOGHAM }   /* inogham */,
-  {   169,  8886,  8093,   3,   7, UNI_SC__HANO }   /* sc=hanunoo */,
-  {    11,  8424,  1030,   6,  27, UNI_OCR }   /* block=opticalcharacterrecognition */,
-  {     1,  8424,  6808,   6,  10, UNI_ASCII }   /* block=basiclatin */,
-  {     4,  6918,  7924,  10,   8, UNI_LB__NL }   /* linebreak=nextline */,
-  {  4359,  9365,  8502,   4,   4, UNI_GOTH }   /* scx=goth */,
-  {     8,  8879,  6647,   3,  10, UNI_INPAHAWHHMONG }   /* inpahawhhmong */,
-  {   137,  9946,  4205,   3,   8, UNI_SYRIACSUP }   /* issyriacsup */,
-  {     0,  9725,   409,   3,   2, UNI_VO__TR }   /* vo=tr */,
-  {     0,  7018,  7495,  10,   1, UNI_IN__7 }   /* presentin=7 */,
-  {     3,   184,  1244,   3,  19, UNI_CE }   /* iscompositionexclusion */,
-  {  1155,  9620,   598,   3,   2, UNI_XPOSIXCNTRL }   /* gc=cc */,
-  {    30,  1362,  8455,  25,   4, UNI_CCC__12 }   /* canonicalcombiningclass=ccc12 */,
-  {  2329,  6918,  9755,  10,   2, UNI_LB__BK }   /* linebreak=bk */,
-  {   265,   184,  1622,   2,   5, UNI_LATN }   /* islatin */,
-  {     0,  3002,     7,  18,   3, UNI_DT__CAN }   /* decompositiontype=can */,
-  {    14,  1158,  8940,   3,   4, UNI_INTAILE }   /* intaile */,
-  {  1047,  8424,  6690,   6,  11, UNI_INSORASOMPENG }   /* block=sorasompeng */,
-  {    10,  1735,  9734,  22,   3, UNI_CWCM }   /* changeswhencasemapped=yes */,
-  {  4353,  9365,  2837,   5,   8, UNI_SUND }   /* scx=sundanese */,
-  {     0,  2333,     0,  10,   0, UNI_GLAG }   /* glagolitic */,
-  {     0,  9946,  6648,   3,   3, UNI_SHAW }   /* isshaw */,
-  {    68,  2204,  6990,   4,   8, UNI_SOGO }   /* isoldsogdian */,
-  {     2,  3671,  8628,  17,   6, UNI_THAA }   /* scriptextensions=thaana */,
-  {    18,  9313,    26,   4,   1, UNI_PCM }   /* pcm=y */,
-  {     0,  1057,  9734,  27,   3, UNI_PCM }   /* prependedconcatenationmark=yes */,
-  {     4,  6005,    43,   3,  25, UNI_CJKCOMPATIDEOGRAPHS }   /* incjkcompatibilityideographs */,
-  {     0,  7128,  9611,  10,   3, UNI_WB__EB }   /* wordbreak=ebg */,
-  {    29,  9620,   467,   3,   5, UNI_P }   /* gc=punct */,
-  {     0,  8424,  4657,   6,  15, UNI_NARB }   /* block=oldnortharabian */,
-  {    67,   184,     0,   4,   0, UNI_CE }   /* isce */,
-  {     3,  1386,     0,  24,   0, UNI_CJKSYMBOLS }   /* cjksymbolsandpunctuation */,
-  {     0,  8233,  8929,   7,   5, UNI_OSGE }   /* script=osage */,
-  {     0,  8886,  6051,   3,   4, UNI_SC__MAHJ }   /* sc=mahj */,
-  {     0,  6918,  6459,  10,  11, UNI_LB__IN }   /* linebreak=inseperable */,
-  {  4104,  8424,  4597,   6,  15, UNI_MISCPICTOGRAPHS }   /* block=miscpictographs */,
-  {     0,  7018,  7604,  10,   3, UNI_IN__4 }   /* presentin=4.0 */,
-  {     0,  9365,  9386,   5,   3, UNI_SHRD }   /* scx=shrd */,
-  {     5,  2212,  1459,   3,  23, UNI_HIGHPUSURROGATES }   /* inhighprivateusesurrogates */,
-  {  2166,  8424,  1851,   6,  16, UNI_INDICNUMBERFORMS }   /* block=indicnumberforms */,
-  {  3073,  6005,  2065,   3,  13, UNI_CJKRADICALSSUP }   /* incjkradicalssup */,
-  {     2,  9153,   406,   4,   7, UNI_GCB__CN }   /* gcb=control */,
-  {     3,  9049,  9680,   4,   3, UNI_AGE__3 }   /* age=v30 */,
-  {     0,  8072,     0,   7,   0, UNI_ELYM }   /* elymaic */,
-  {     0,  1497,  9775,   9,   2, UNI_ZL }   /* category=zl */,
-  {     3,  8886,  5967,   3,   6, UNI_HEBR }   /* sc=hebrew */,
-  {     1,  9626,     7,   3,   1, UNI_JT__C }   /* jt=c */,
-  {    53,  2043,     0,  21,   0, UNI_CJKCOMPATFORMS }   /* cjkcompatibilityforms */,
-  {  5324,  2836,     0,  19,   0, UNI_SUNDANESESUP }   /* sundanesesupplement */,
-  {  2272,  9626,  6426,   3,  11, UNI_JT__D }   /* jt=dualjoining */,
-  {     0,  3868,    48,  16,   1, UNI_P }   /* generalcategory=p */,
-  {  1115,  9623,  6878,   3,  10, UNI_JG__DALATHRISH }   /* jg=dalathrish */,
-  {     0,  9365,  6978,   4,  10, UNI_XPEO }   /* scx=oldpersian */,
-  {     4,  8886,  9069,   3,   4, UNI_SC__ARMN }   /* sc=armn */,
-  {  4272,   184,  8002,   2,   4, UNI_BENG }   /* isbeng */,
-  {   288,  7804,     0,   8,   0, UNI_BUGI }   /* buginese */,
-  {     0,  9620,  2006,   3,  14, UNI_LM }   /* gc=modifierletter */,
-  {     0,  9731,  5520,   3,   5, UNI_WB__EB }   /* wb=ebase */,
-  {     1,  8424,  8289,   6,   7, UNI_INTAITHAM }   /* block=taitham */,
-  {     0,  3671,  5967,  17,   4, UNI_HEBR }   /* scriptextensions=hebr */,
-  {  4105,  8338,     0,   6,   0, UNI_XPOSIXSPACE }   /* wspace */,
-  {     0,  1856,     0,  11,   0, UNI_NUMBERFORMS }   /* numberforms */,
-  {  1162,  9113,  2912,   4,  13, UNI_CCC__214 }   /* ccc=attachedabove */,
-  {  6164,  1362,  5539,  24,  13, UNI_CCC__IS }   /* canonicalcombiningclass=iotasubscript */,
-  {   214,  8869,  8864,   5,   5, -UNI_IDSB }   /* idsb=false */,
-  {     5,  8886,  2409,   3,   4, UNI_SC__MONG }   /* sc=mong */,
-  {     7,  9093,  4372,   4,  15, UNI_CONTROLPICTURES }   /* blk=controlpictures */,
-  {     0,  9365,  8282,   4,   7, UNI_TGLG }   /* scx=tagalog */,
-  {    11,  5760,  7668,  13,   8, UNI_NV__5_SLASH_8 }   /* numericvalue=6.25e-01 */,
-  {    25,  8233,  5967,   7,   4, UNI_HEBR }   /* script=hebr */,
-  {     4,  7018,  8997,  10,   4, UNI_IN__11 }   /* presentin=11.0 */,
-  {     0,  8424,  6183,   6,  12, UNI_INMENDEKIKAKUI }   /* block=mendekikakui */,
-  {     1,  5513,  9734,  13,   3, UNI_GRBASE }   /* graphemebase=yes */,
-  {     0,  3671,  8430,  17,   4, UNI_CARI }   /* scriptextensions=cari */,
-  {     9,  8886,  7250,   5,   7, UNI_SC__SIND }   /* sc=khudawadi */,
-  {     7,  1057,  9433,  27,   4, UNI_PCM }   /* prependedconcatenationmark=true */,
-  {     0,  9093,   316,   4,  33, UNI_SUPMATHOPERATORS }   /* blk=supplementalmathematicaloperators */,
-  {     0,  5760,  8388,  13,   2, UNI_NV__70 }   /* numericvalue=70 */,
-  {  2048,  1450,  4936,   5,  11, UNI_INGREEK }   /* ingreekandcoptic */,
-  {  1571,  8332,   183,   4,   2, UNI_ARMI }   /* isarmi */,
-  {     1,  9093,  8550,   4,   6, UNI_INLEPCHA }   /* blk=lepcha */,
-  {     0,   184,   690,   3,  29, UNI_CUNEIFORMNUMBERS }   /* iscuneiformnumbersandpunctuation */,
-  {     0,  9093,  2930,   4,  11, UNI_CHEROKEESUP }   /* blk=cherokeesup */,
-  {    21,  1482,  2473,  24,  20, UNI_INPC__TOPANDBOTTOMANDRIGHT }   /* indicpositionalcategory=topandbottomandright */,
-  {    65,  9623,  2147,   3,   3, UNI_JG__AIN }   /* jg=ain */,
-  {  1589,  8886,  4267,   3,   4, UNI_BAMU }   /* sc=bamu */,
-  {     0,  1482,  3350,  24,  12, UNI_INPC__LEFTANDRIGHT }   /* indicpositionalcategory=leftandright */,
-  {   150,  6315,     0,  11,   0, UNI_XIDC }   /* xidcontinue */,
-  {     1,    62,     0,   5,   0, UNI_XPOSIXGRAPH }   /* graph */,
-  {  4565,  5325,     0,  13,   0, UNI_QMARK }   /* quotationmark */,
-  {    17,  8886,  7796,   3,   8, UNI_BASS }   /* sc=bassavah */,
-  {     8,  8598,     0,   6,   0, UNI_patws_values_index }   /* patws= */,
-  {   265,  8679,     0,   5,   0, UNI_ADLM }   /* adlam */,
-  {     6,  1497,    47,   9,   1, UNI_M }   /* category=m */,
-  {     0,  3236,  9433,  18,   4, UNI__PERL_PATWS }   /* patternwhitespace=true */,
-  {    16,  7025,  8993,   3,   4, UNI_IN__10 }   /* in=10.0 */,
-  {     0,  9365,  8568,   4,   6, UNI_LYDI }   /* scx=lydian */,
-  {     0,  8424,  2086,   7,  10, UNI_CYRILLICSUP }   /* block=cyrillicsup */,
-  {     0,   184,  8149,   2,   4, UNI_MULT }   /* ismult */,
-  {     4,  3128,     0,   4,   0, UNI_IDSB }   /* idsb */,
-  {     1,  3671,  6992,  18,   6, UNI_SOGD }   /* scriptextensions=sogdian */,
-  {    36,  6898,     0,   4,   0, UNI_KHAR }   /* khar */,
-  {     0,  9605,  4351,   3,   6, UNI_DT__MED }   /* dt=medial */,
-  {     0,  8424,  2836,   6,   9, UNI_INSUNDANESE }   /* block=sundanese */,
-  {  6039,  9647,  7500,   3,   8, UNI_NV__3_SLASH_16 }   /* nv=1.88e-01 */,
-  {  3205,  4705,  4023,   3,   3, UNI_TALE }   /* istale */,
-  {  1706,  7025,  7604,   3,   3, UNI_IN__4 }   /* in=4.0 */,
-  {    12,   184,  9253,   2,   4, UNI_MIAO }   /* ismiao */,
-  {     0,  3110,     0,   4,   0, UNI_GEOR }   /* geor */,
-  {     0,  9365,  9293,   4,   4, UNI_OGAM }   /* scx=ogam */,
-  {     3,  9849,  6318,  15,   8, UNI__PERL_CHARNAME_CONTINUE }   /* _perl_charname_continue */,
-  {   268,  1362,  8722,  24,   2, UNI_CCC__15 }   /* canonicalcombiningclass=15 */,
-  {     0,  8424,  1668,   6,  23, UNI_SUPPUNCTUATION }   /* block=supplementalpunctuation */,
-  {    10,   949,     0,  27,   0, UNI_ALPHABETICPF }   /* alphabeticpresentationforms */,
-  {     0,  9113,  6207,   4,  12, UNI_CCC__0 }   /* ccc=notreordered */,
-  {  1056,  8592,    26,   6,   1, UNI_NFDQC__Y }   /* nfdqc=y */,
-  {    10,  8886,  3020,   3,  10, UNI_SC__DEVA }   /* sc=devanagari */,
-  {     0,  3980,     0,   7,   0, UNI_LINB }   /* linearb */,
-  {     1,  9629,  1410,   3,  13, UNI_LB__CM }   /* lb=combiningmark */,
-  {     1,   184,  9145,   2,   4, UNI_DSRT }   /* isdsrt */,
-  {     0,  9093,  3535,   4,  17, UNI_CYRILLICEXTC }   /* blk=cyrillicextendedc */,
-  {     0,  4705,  1086,   3,   3, UNI_TANG }   /* istang */,
-  {   119,  5760,     0,  13,   0, UNI_nv_values_index }   /* numericvalue= */,
-  {     0,  3671,  8502,  17,   6, UNI_GOTH }   /* scriptextensions=gothic */,
-  {  3459,  9093,  8205,   4,   7, UNI_INOSMANYA }   /* blk=osmanya */,
-  {   180,  9662,   995,   3,   2, -UNI_SD }   /* sd=no */,
-  {     2,  9049,  5409,   4,   2, UNI_AGE__10 }   /* age=10 */,
-  {     0,  9049,  9441,   4,   3, UNI_IN__1_DOT_1 }   /* age=v11 */,
-  {     1,  1450,  5529,   5,  10, UNI_GREEKEXT }   /* ingreekextended */,
-  {     0,  4580,  2780,   3,   8, UNI_INMONGOLIAN }   /* inmongolian */,
-  {    34,  9093,  1189,   5,   4, UNI_INBATAK }   /* blk=batak */,
-  {  1168,  9365,  9261,   4,   4, UNI_MRO }   /* scx=mroo */,
-  {     0,  9093,  8914,   4,   5, UNI_INNUSHU }   /* blk=nushu */,
-  {  2562,  2684,  6303,  19,  12, UNI_GCB__T }   /* hangulsyllabletype=trailingjamo */,
-  {     0,  6723,     0,  11,   0, UNI_SYLO }   /* sylotinagri */,
-  {  7075,  9093,  6948,   4,  10, UNI_MISCARROWS }   /* blk=miscarrows */,
-  {     0,  9365,  1192,   4,   4, UNI_KANA }   /* scx=kana */,
-  {     5,  3951,  7240,   3,   8, UNI_QAAI }   /* isinherited */,
-  {     0,  2608,     0,  19,   0, UNI_EGYP }   /* egyptianhieroglyphs */,
-  {   258,  3308,     0,  18,   0, UNI_SMALLKANAEXT }   /* smallkanaextension */,
-  {     1,  8424,  2232,   6,   6, UNI_YIJING }   /* block=yijing */,
-  {  6181,  5565,     0,  13,   0, UNI_jg_values_index }   /* joininggroup= */,
-  {   528,  9093,  6183,   4,  12, UNI_INMENDEKIKAKUI }   /* blk=mendekikakui */,
-  {  1291,  3688,    36,  17,   1, UNI_STERM }   /* sentenceterminal=t */,
-  {     1,  8233,  7916,   7,   8, UNI_SC__MAHJ }   /* script=mahajani */,
-  {  5844,  9241,     0,   4,   0, UNI_MEDF }   /* medf */,
-  {     5,  9647,  8969,   3,   4, UNI_NV___MINUS_1_SLASH_2 }   /* nv=-1/2 */,
-  {  2697,  3251,   995,   3,   2, -UNI_CE }   /* ce=no */,
-  {     0,  9113,  8795,   5,   4, UNI_CCC__30 }   /* ccc=ccc30 */,
-  {     3,  8233,  5967,   7,   6, UNI_HEBR }   /* script=hebrew */,
-  {     0,  9093,  1314,   4,  24, UNI_ARABICPFA }   /* blk=arabicpresentationformsa */,
-  {     5,  3671,  9297,  17,   4, UNI_OLCK }   /* scriptextensions=olck */,
-  {     0,  5513,    36,  13,   1, UNI_GRBASE }   /* graphemebase=t */,
-  {     0,  6816,  3773,   3,  10, UNI_BOPOMOFOEXT }   /* inbopomofoext */,
-  {  2379,  6828,  4312,  10,  15, UNI_BC__CS }   /* bidiclass=commonseparator */,
-  {  3202,  9605,  9668,   3,   3, UNI_DT__SQR }   /* dt=sqr */,
-  {     1,  3671,  7341,  17,   4, UNI_PERM }   /* scriptextensions=perm */,
-  {     0,  8884,  7320,   5,   9, UNI_INSC__NONJOINER }   /* insc=nonjoiner */,
-  {    28,   184,  3038,   2,   4, UNI_ETHI }   /* isethi */,
-  {     0,  6679,   995,  11,   2, -UNI_SD }   /* softdotted=no */,
-  {  2089,  9623,  6795,   3,   3, UNI_JG__QAF }   /* jg=qaf */,
-  {     2,  2106,  4195,  21,   9, UNI_WB__EB }   /* graphemeclusterbreak=emodifier */,
-  {  2306,  6918,  9154,  10,   2, UNI_LB__CB }   /* linebreak=cb */,
-  {  1683,  6005,    43,   3,   2, UNI_CJK }   /* incjk */,
-  {    15,   184,     3,   3,   1, UNI_CF }   /* iscf */,
-  {  5203,  8233,  7356,   7,   9, UNI_PALM }   /* script=palmyrene */,
-  {     0,  6005,  8017,   3,   6, UNI_CJKEXTB }   /* incjkextb */,
-  {  2089,  2453,  9434,  21,   3, UNI_TERM }   /* terminalpunctuation=true */,
-  {     0,  5565,  5656,  13,  13, UNI_JG__MANICHAEANNUN }   /* joininggroup=manichaeannun */,
-  {     0,  9620,  1855,   3,   2, UNI_CN }   /* gc=cn */,
-  {   712,  7018,  7462,  10,   1, UNI_IN__4 }   /* presentin=4 */,
-  {  1045,  8233,  2148,   7,  21, UNI_PRTI }   /* script=inscriptionalparthian */,
-  {  3209,  1362,  9077,  24,   4, UNI_WB__EB }   /* canonicalcombiningclass=atbl */,
-  {     0,  2741,     0,   4,   0, UNI_MERO }   /* mero */,
-  {     4,  9608,     1,   3,   1, UNI_EA__N }   /* ea=n */,
-  {   198,    21,  4989,   2,  14, UNI_KANGXI }   /* inkangxiradicals */,
-  {     1,  8233,  9117,   7,   4, UNI_SC__CPRT }   /* script=cprt */,
-  {     0,  8424,  7266,   6,   9, UNI_LATINEXTC }   /* block=latinextc */,
-  {     3,  7203,     0,   9,   0, UNI_BHKS }   /* bhaiksuki */,
-  {     1,  8332,  2514,   3,  18, UNI_ANCIENTGREEKNUMBERS }   /* isancientgreeknumbers */,
-  {     2,  8424,  2086,   7,  20, UNI_CYRILLICSUP }   /* block=cyrillicsupplementary */,
-  {   705,  3251,    26,   3,   1, UNI_CE }   /* ce=y */,
-  {    30,  8935,  1153,   4,   3, UNI_ANY }   /* unicode */,
-  {     0,  5760,  8989,  13,   4, UNI_NV__1_SLASH_80 }   /* numericvalue=1/80 */,
-  {  2053,   184,   478,   2,  31, UNI_MATHALPHANUM }   /* ismathematicalalphanumericsymbols */,
-  {  1046,   186,     0,   2,   0, UNI_CE }   /* ce */,
-  {  3082,  8616,  9734,   6,   3, UNI_STERM }   /* sterm=yes */,
-  {     3,  2393,     0,  20,   0, UNI_HMNP }   /* nyiakengpuachuehmong */,
-  {    20,  7128,    18,  10,   2, UNI_RI }   /* wordbreak=ri */,
-  {    12,  9647,  9500,   3,   3, UNI_NV__1_SLASH_7 }   /* nv=1/7 */,
-  {  3076,  9647,  8382,   3,   6, UNI_NV__600000 }   /* nv=600000 */,
-  {  2200,  9113,  9518,   4,   3, UNI_CCC__BL }   /* ccc=218 */,
-  {   129,  9903,  8839,   6,   5, UNI_XPOSIXCNTRL }   /* xposixcntrl */,
-  {  7824,  9904,  4829,   5,   5, UNI_POSIXDIGIT }   /* posixdigit */,
-  {     8,  1030,     0,  27,   0, UNI_OCR }   /* opticalcharacterrecognition */,
-  {     0,  6898,     0,  10,   0, UNI_KHAR }   /* kharoshthi */,
-  {  3078,  2169,     0,  21,   0, UNI_MEETEIMAYEKEXT }   /* meeteimayekextensions */,
-  {     0,  8886,   689,   3,   9, UNI_XSUX }   /* sc=cuneiform */,
-  {     0,  1911,  2570,  22,  19, UNI_INSC__CONSONANTHEADLETTER }   /* indicsyllabiccategory=consonantheadletter */,
-  {  2474,    21,  3964,   2,  16, UNI_LATIN1 }   /* inlatin1supplement */,
-  {     2,  9909,  7357,   3,   8, UNI_PALM }   /* ispalmyrene */,
-  {     2,   184,  3110,   2,  18, UNI_GEORGIANSUP }   /* isgeorgiansupplement */,
-  {  2069,  9593,  3243,   3,  10, UNI_BC__WS }   /* bc=whitespace */,
-  {     0,   119,  8503,   3,   5, UNI_INGOTHIC }   /* ingothic */,
-  {   586,  9365,  8142,   4,   4, UNI_MARC }   /* scx=marc */,
-  {     0,  1482,  6383,   3,   5, UNI_DOMINO }   /* indomino */,
-  {  5270,  1497,   467,   9,   5, UNI_P }   /* category=punct */,
-  {   520,  2493,     0,  20,   0, UNI_vo_values_index }   /* verticalorientation= */,
-  {     1,  8879,   468,   3,  10, UNI_INPUNCTUATION }   /* inpunctuation */,
-  {     0,  8884,  8646,   5,   6, UNI_INSC__VIRAMA }   /* insc=virama */,
-  {     0,  8884,  4140,   5,   5, UNI_INSC__OTHER }   /* insc=other */,
-  {     0,  3951,  5553,   3,  12, UNI_IPAEXT }   /* isipaextensions */,
-  {     0,  7018,  9680,  10,   3, UNI_IN__3 }   /* presentin=v30 */,
-  {     0,  9125,    36,   4,   1, UNI_CWT }   /* cwt=t */,
-  {     0,  8685,  8864,   4,   5, -UNI_XPOSIXXDIGIT }   /* hex=false */,
-  {    18,  1362,  7539,  24,   3, UNI_CCC__B }   /* canonicalcombiningclass=220 */,
-  {  7433,  9599,    36,   3,   1, UNI_CI }   /* ci=t */,
-  {     0,  9629,     3,   4,   1, UNI_LB__LF }   /* lb=lf */,
-  {  1046,   184,  7275,   2,   9, UNI_LATINEXTD }   /* islatinextd */,
-  {     0,  8424,     0,   6,  34, UNI_UCAS }   /* block=unifiedcanadianaboriginalsyllabics */,
-  {  2390,  9647,  7462,   3,   2, UNI_NV__43 }   /* nv=43 */,
-  {     0,   184,  1889,   2,  22, UNI_EARLYDYNASTICCUNEIFORM }   /* isearlydynasticcuneiform */,
-  {    14,  4826,     1,   9,   1, -UNI_XPOSIXXDIGIT }   /* hexdigit=n */,
-  {    51,  3671,  9185,  17,   4, UNI_HMNG }   /* scriptextensions=hmng */,
-  {  3883,  9928,  3248,   5,   5, UNI_XPOSIXBLANK }   /* horizspace */,
-  {   870,  4580,  6592,   3,  10, UNI_MYANMAREXTB }   /* inmyanmarextb */
+  {     5,  1417,  9937,  24,   3, UNI_CCC__AL }   /* canonicalcombiningclass=228 */,
+  {     1,  1188,  9009,   3,   5, UNI_INTHAANA }   /* inthaana */,
+  {     0,  4033,    24,  16,   1, UNI_L }   /* generalcategory=l */,
+  {     8,  9277,  2817,   3,  19, UNI_MERO }   /* sc=meroitichieroglyphs */,
+  {     4,  3836,  9628,  17,   4, UNI_LATN }   /* scriptextensions=latn */,
+  {     1,  1834,     3,  22,   1, -UNI_CWT }   /* changeswhentitlecased=f */,
+  {     2,  8774,    36,   6,   1, UNI_BIDIM }   /* bidim=t */,
+  {     0,  5791,  5856,  13,  13, UNI_JG__MALAYALAMNNNA }   /* joininggroup=malayalamnnna */,
+  {    11,  5791,  6289,  13,  12, UNI_JG__MALAYALAMBHA }   /* joininggroup=malayalambha */,
+  {    99,  7218,  4538,  10,  15, UNI_LB__CB }   /* linebreak=contingentbreak */,
+  {    84,  2218,  6842,   4,   9, UNI_INNANDINAGARI }   /* innandinagari */,
+  {     5,  4916,  9009,   3,   3, UNI_THAA }   /* isthaa */,
+  {     1,  1552,     7,   9,   1, UNI_C }   /* category=c */,
+  {   150,  2218,  1912,   3,  10, UNI_NUMBERFORMS }   /* innumberforms */,
+  {     5,  9277,  9285,   3,   5, UNI_SC__LIMB }   /* sc=limbu */,
+  {   135,  9768,  9797,   5,   3, UNI_SYRC }   /* scx=syrc */,
+  {    10,   184,  4273,   2,   7, UNI_MYMR }   /* ismyanmar */,
+  {     3,  8780,  4598,   6,  15, UNI_DIACRITICALSEXT }   /* block=diacriticalsext */,
+  {     0,  9488,  3025,   4,  18, UNI_CHEROKEESUP }   /* blk=cherokeesupplement */,
+  {     1,  1790,     0,  21,   0, UNI_CWCM }   /* changeswhencasemapped */,
+  {     1,  7155,  2742,   3,  18, UNI_JAMOEXTB }   /* ishanguljamoextendedb */,
+  {    23,  8780,  4478,   6,  15, UNI_BRAI }   /* block=braillepatterns */,
+  {     0, 10333, 10183,   7,   4, UNI_XPOSIXSPACE }   /* isspaceperl */,
+  {     6, 10027,  5179,   3,   3, UNI_JG__HEH }   /* jg=heh */,
+  {     0,  8589,  9580,   7,   4, UNI_SC__HANO }   /* script=hano */,
+  {    26, 10182,  7739,   6,   7, UNI__PERL_IDSTART }   /* _perl_idstart */,
+  {     0,  9350,    36,   5,   1, UNI_XIDS }   /* xids=t */,
+  {   306,  2224,  3888,   3,  16, UNI_SUTTONSIGNWRITING }   /* insuttonsignwriting */,
+  {    88,  7325,  9982,   3,   3, UNI_IN__6_DOT_3 }   /* in=6.3 */,
+  {   258, 10006,  9836,   3,   4, UNI_DI }   /* di=true */,
+  {     0,  8954,    17,   7,   1, -UNI__PERL_NCHAR }   /* nchar=no */,
+  {     0,   184,  1723,   2,  23, UNI_SUPPUNCTUATION }   /* issupplementalpunctuation */,
+  {     0, 10024,  1527,   3,   9, UNI__PERL_SURROGATE }   /* gc=surrogate */,
+  {     0,  3836,  9724,  17,   4, UNI_PHNX }   /* scriptextensions=phnx */,
+  {   232,  6840,     0,   4,   0, UNI_NAND }   /* nand */,
+  {     1, 10027,  5892,   3,   3, UNI_JG__NUN }   /* jg=nun */,
+  {    32, 10327,  3379,   6,   5, UNI_POSIXSPACE }   /* isperlspace */,
+  {     0,  7168,     0,  10,   0, UNI_DIAK }   /* divesakuru */,
+  {     1,  2836,     0,  19,   0, UNI_MODIFIERTONELETTERS }   /* modifiertoneletters */,
+  {     1,  8858, 10135,   6,   3, UNI_ECOMP }   /* ecomp=yes */,
+  {     0,  9768,  9500,   4,   4, UNI_CAKM }   /* scx=cakm */,
+  {     1,  7218,  9713,  10,   2, UNI_LB__SG }   /* linebreak=sg */,
+  {     0,  9768,  7558,   4,   9, UNI_QAAI }   /* scx=inherited */,
+  {    33,  9250, 10135,   5,   3, UNI_EMOD }   /* emod=yes */,
+  {     0,  1273,    36,  21,   1, UNI_CE }   /* compositionexclusion=t */,
+  {     0,  1417,  5377,  24,   2, UNI_CCC__7 }   /* canonicalcombiningclass=nk */,
+  {     0,  1979,     0,  10,   1, UNI_UPPERCASELETTER }   /* category=lu */,
+  {     1,  9488,  6181,   4,  12, UNI_INGUNJALAGONDI }   /* blk=gunjalagondi */,
+  {     0,  9277,  9305,   3,   5, UNI_NSHU }   /* sc=nushu */,
+  {     2,  7128,     0,  10,   0, UNI_CJKSTROKES }   /* cjkstrokes */,
+  {     1,  9488,  7358,   4,  10, UNI_INSAURASHTRA }   /* blk=saurashtra */,
+  {     2,   184,  9624,   2,   3, UNI_LAO }   /* islao */,
+  {     0,  5986,  8002,  13,   2, UNI_NV__26 }   /* numericvalue=26 */,
+  {     0,  7218, 10162,  10,   2, UNI_GCB__L }   /* linebreak=jl */,
+  {    32,  9508,  9141,   5,   4, UNI_CCC__22 }   /* ccc=ccc22 */,
+  {     3,  3836,  8900,  17,   6, UNI_KTHI }   /* scriptextensions=kaithi */,
+  {     1,  4360,     0,   4,   0, UNI_EMOD }   /* emod */,
+  {    97, 10132,  1822,   3,   2, UNI_WB__NL }   /* wb=nl */,
+  {     1,  3836,  9500,  17,   4, UNI_CAKM }   /* scriptextensions=cakm */,
+  {     1,  9768,  2429,   4,  20, UNI_PHLI }   /* scx=inscriptionalpahlavi */,
+  {     0,  9488,  9335,   4,   5, UNI_INTAKRI }   /* blk=takri */,
+  {     0,  5438,     0,  14,   0, UNI_SK }   /* modifiersymbol */,
+  {     0,  8512, 10135,   7,   3, UNI_NFKCQC__Y }   /* nfkcqc=yes */,
+  {    64,  9768,  9876,   4,   4, UNI_XSUX }   /* scx=xsux */,
+  {     0,  5037, 10135,   9,   3, UNI_XPOSIXXDIGIT }   /* hexdigit=yes */,
+  {    11,  2161, 10135,  21,   3, UNI_EXTPICT }   /* extendedpictographic=yes */,
+  {     1,  6928,  9255,  11,   5, -UNI_SD }   /* softdotted=false */,
+  {     0,  1189,  5904,   3,   4, UNI_NV__NAN }   /* nt=none */,
+  {    32,  1856, 10135,  22,   3, UNI_CWU }   /* changeswhenuppercased=yes */,
+  {     4,  9488,     0,   4,  42, UNI_UCASEXT }   /* blk=unifiedcanadianaboriginalsyllabicsextended */,
+  {     6,  8315,     0,   4,   0, UNI_UGAR }   /* ugar */,
+  {    81,  5986,  8732,  13,   3, UNI_NV__500 }   /* numericvalue=500 */,
+  {    12,  6928,     0,  11,   0, UNI_sd_values_index }   /* softdotted= */,
+  {     0,  9277,  7675,   3,   9, UNI_PALM }   /* sc=palmyrene */,
+  {     1,  9768,  4370,   5,   5, UNI_SYRC }   /* scx=syriac */,
+  {     2,  7438,  1218,  10,   2, UNI_WB__KA }   /* wordbreak=ka */,
+  {     4,  9768,  9676,   4,   4, UNI_NARB }   /* scx=narb */,
+  {     0,  2760,     0,  19,   0, UNI_hst_values_index }   /* hangulsyllabletype= */,
+  {     9,  2760,  6541,  19,  12, UNI_GCB__T }   /* hangulsyllabletype=trailingjamo */,
+  {     3,  3836,  6886,  18,   3, UNI_SHAW }   /* scriptextensions=shaw */,
+  {   332,  6061,    26,  12,   1, UNI_BIDIC }   /* bidicontrol=y */,
+  {     0,  3836,     7,  17,  18, UNI_CANS }   /* scriptextensions=canadianaboriginal */,
+  {    30,  7228,  1025,  10,   2, -UNI_XPOSIXLOWER }   /* lowercase=no */,
+  {     8,  9444,  9400,   4,   4, UNI_AGE__13 }   /* age=13.0 */,
+  {     4,  2032,  9836,  22,   4, UNI__PERL_NCHAR }   /* noncharactercodepoint=true */,
+  {     0,  6840,     0,  11,   0, UNI_NAND }   /* nandinagari */,
+  {     1, 10333,  6792,   3,   3, UNI_SAMR }   /* issamr */,
+  {     0,  9488,  2119,   4,  14, UNI_CJKRADICALSSUP }   /* blk=cjkradicalssup */,
+  {     0,  5550,     0,  14,   0, UNI_PHLP }   /* psalterpahlavi */,
+  {     0,  9768,  9496,   4,   4, UNI_BUHD }   /* scx=buhd */,
+  {     0,  2280,  7650,   4,   7, UNI_ITAL }   /* isolditalic */,
+  {     4, 10048,  7789,   3,   2, UNI_NV__50 }   /* nv=50 */,
+  {   532,  9277,  9532,   3,   4, UNI_SC__CYRL }   /* sc=cyrl */,
+  {   117,  5791, 10000,  13,   3, UNI_JG__BEH }   /* joininggroup=beh */,
+  {     0,  8589,  8942,   7,   4, UNI_LYDI }   /* script=lydi */,
+  {     4,  8589,  8666,   7,   4, UNI_SC__TIRH }   /* script=tirh */,
+  {   512,  9277,  3169,   3,   8, UNI_ETHI }   /* sc=ethiopic */,
+  {     0,  9768,  9860,   4,   3, UNI_VAI }   /* scx=vai */,
+  {   544,  4688,  7208,  15,  10, UNI_IDENTIFIERTYPE__LIMITEDUSE }   /* identifiertype=limiteduse */,
+  {     0,  9488,  1723,   4,  23, UNI_SUPPUNCTUATION }   /* blk=supplementalpunctuation */,
+  {     0,  7218,  5046,  10,  14, UNI_LB__CR }   /* linebreak=carriagereturn */,
+  {     0,   184,  8394,   3,   6, UNI_CJKEXTG }   /* iscjkextg */,
+  {     2,  4916,  4188,   3,   3, UNI_TALE }   /* istale */,
+  {     0,  6609,  9255,  11,   5, -UNI_DEP }   /* deprecated=false */,
+  {    26,  8780,  3115,   6,  18, UNI_DEVANAGARIEXT }   /* block=devanagariextended */,
+  {     1,  9488,  2589,   4,  19, UNI_ANCIENTGREEKNUMBERS }   /* blk=ancientgreeknumbers */,
+  {     0,  5324,  8245,   4,   6, UNI_INMAHAJANI }   /* inmahajani */,
+  {     0,  8858,     3,   6,   1, -UNI_ECOMP }   /* ecomp=f */,
+  {     0,  9768,  6796,   4,  11, UNI_MEDF }   /* scx=medefaidrin */,
+  {     0,  5986,  8082,  13,   2, UNI_NV__19 }   /* numericvalue=19 */,
+  {     0,  7318,  7408,  10,  10, UNI_AGE__NA }   /* presentin=unassigned */,
+  {    32,  6231,  8841,   3,   5, UNI_INCHAKMA }   /* inchakma */,
+  {     0,  1087,     0,  27,   0, UNI_pcm_values_index }   /* prependedconcatenationmark= */,
+  {     1,  8780,  9828,   6,   4, UNI_INTHAI }   /* block=thai */,
+  {     0,  2287,     0,  21,   0, UNI_SINHALAARCHAICNUMBERS }   /* sinhalaarchaicnumbers */,
+  {     0,  9290,     1,   5,   1, -UNI_MATH }   /* math=n */,
+  {    40,  9768,  2061,   4,   4, UNI_MODI }   /* scx=modi */,
+  {     0,  1060,     0,  27,   0, UNI_OCR }   /* opticalcharacterrecognition */,
+  {     0,  3097,  1309,  18,   3, UNI_DT__SUB }   /* decompositiontype=sub */,
+  {    82, 10027,  7148,   3,  10, UNI_JG__DALATHRISH }   /* jg=dalathrish */,
+  {     0,  7318, 10087,  10,   3, UNI_IN__3_DOT_2 }   /* presentin=v32 */,
+  {    65, 10033,   751,   3,   2, UNI_LB__CL }   /* lb=cl */,
+  {     0,  9240,     3,   5,   1, -UNI_DASH }   /* dash=f */,
+  {     0,  3836,  9544,  17,   4, UNI_DIAK }   /* scriptextensions=diak */,
+  {     0,  9275,  1244,   5,  25, UNI_INSC__CONSONANTINITIALPOSTFIXED }   /* insc=consonantinitialpostfixed */,
+  {     1,  4116,   447,   3,  31, UNI_IDEOGRAPHICSYMBOLS }   /* isideographicsymbolsandpunctuation */,
+  {     0,  9488,  7648,   4,   9, UNI_INOLDITALIC }   /* blk=olditalic */,
+  {     1,  7325,  7469,   3,   1, UNI_IN__5 }   /* in=5 */,
+  {    11,  4628,  1204,  15,   9, UNI_EA__F }   /* eastasianwidth=fullwidth */,
+  {     9,  3133,  9836,  18,   4, UNI_EBASE }   /* emojimodifierbase=true */,
+  {    73,  9277,  6972,   3,   4, UNI_SC__SYLO }   /* sc=sylo */,
+  {     4,  6061,  9836,  12,   4, UNI_BIDIC }   /* bidicontrol=true */,
+  {     0,   184,  5284,   2,   4, UNI_LISU }   /* islisu */,
+  {     1,  3836,  8421,  17,   7, UNI_ELYM }   /* scriptextensions=elymaic */,
+  {     0,  9230,     0,   5,   0, UNI_cwcf_values_index }   /* cwcf= */,
+  {     0,   184,  1561,   2,  24, UNI_SUPSYMBOLSANDPICTOGRAPHS }   /* issupsymbolsandpictographs */,
+  {     0,  4658,     3,  15,   1, -UNI_GREXT }   /* graphemeextend=f */,
+  {     1,  9488,   217,   4,  33, UNI_DIACRITICALSEXT }   /* blk=combiningdiacriticalmarksextended */,
+  {     1,  5578,  6556,  15,   8, UNI_SB__SC }   /* sentencebreak=scontinue */,
+  {     3,  9250,  9836,   5,   4, UNI_EMOD }   /* emod=true */,
+  {    98,  9260,    36,   5,   1, UNI_IDSB }   /* idsb=t */,
+  {   173,  1966,  6457,  22,  12, UNI_INSC__NUMBERJOINER }   /* indicsyllabiccategory=numberjoiner */,
+  {   104,  4688,     0,  15,   0, UNI_identifiertype_values_index }   /* identifiertype= */,
+  {   260,  8589,  9576,   7,   4, UNI_SC__GURU }   /* script=guru */,
+  {    16,  3836,  9696,  17,   4, UNI_OGAM }   /* scriptextensions=ogam */,
+  {     1,  8400,  9255,   7,   5, -UNI_COMPEX }   /* compex=false */,
+  {    36, 10296,  3379,   7,   5, UNI_POSIXSPACE }   /* isposixspace */,
+  {     0,  9508,  9946,   4,   3, UNI_CCC__DB }   /* ccc=233 */,
+  {     0,  6109,     0,  12,   0, UNI_CYRILLICEXTB }   /* cyrillicextb */,
+  {     0,   184,  8900,   2,   6, UNI_KTHI }   /* iskaithi */,
+  {     0,   951,     0,  28,   0, UNI_VSSUP }   /* variationselectorssupplement */,
+  {   276,  9596,  5973,   4,  13, UNI_HST__NA }   /* hst=notapplicable */,
+  {    61,  1723,     0,  23,   0, UNI_SUPPUNCTUATION }   /* supplementalpunctuation */,
+  {     3,  3097,  4017,  18,   5, UNI_DT__FIN }   /* decompositiontype=final */,
+  {     0,  9345,  9836,   5,   4, UNI_XIDC }   /* xidc=true */,
+  {   461,  8589,  9793,   8,   3, UNI_SOGO }   /* script=sogo */,
+  {     0,  8780,  5032,   6,   5, UNI_ASCII }   /* block=ascii */,
+  {     0,  8589,  9624,   7,   4, UNI_LAO }   /* script=laoo */,
+  {     5,  2288,  2205,   4,  12, UNI_INHANIFIROHINGYA }   /* inhanifirohingya */,
+  {     3,    42,     0,  26,   0, UNI_CJKCOMPATIDEOGRAPHS }   /* cjkcompatibilityideographs */,
+  {     1,  8780,  5284,   6,  14, UNI_LISUSUP }   /* block=lisusupplement */,
+  {     0,  8291,     0,   4,   0, UNI_TAGB }   /* tagb */,
+  {     0,  4989,  7409,   3,   9, UNI_CN }   /* isunassigned */,
+  {    10,  8870,    36,   6,   1, UNI_EPRES }   /* epres=t */,
+  {     1,  9488,  5960,   4,  13, UNI_MISCTECHNICAL }   /* blk=misctechnical */,
+  {     6,  8589,  8645,   7,   7, UNI_LANA }   /* script=taitham */,
+  {     5,  9488,  1006,   4,  27, UNI_ANCIENTGREEKMUSIC }   /* blk=ancientgreekmusicalnotation */,
+  {     0,  4113,  4974,   3,   7, UNI_VEDICEXT }   /* invedicext */,
+  {     2,   122,     0,   9,   0, UNI_DIA }   /* diacritic */,
+  {     0,  1812,     1,  22,   1, -UNI_CWL }   /* changeswhenlowercased=n */,
+  {    71,  9488,  3870,   4,  17, UNI_SMALLFORMS }   /* blk=smallformvariants */,
+  {     0,  2224,  1724,   3,  22, UNI_SUPPUNCTUATION }   /* insupplementalpunctuation */,
+  {    32,   184,    84,   2,   4, UNI_MATH }   /* ismath */,
+  {     0,  6231,  1879,   3,  21, UNI_CJKCOMPATIDEOGRAPHSSUP }   /* incjkcompatideographssup */,
+  {     0,  8780,  7648,   6,   9, UNI_INOLDITALIC }   /* block=olditalic */,
+  {     0,  9768,  8179,   4,   8, UNI_GURU }   /* scx=gurmukhi */,
+  {     3,   184,  1171,   2,   2, UNI_TITLE }   /* islt */,
+  {     0,  3836,  6840,  17,  11, UNI_NAND }   /* scriptextensions=nandinagari */,
+  {     0,  1966,  2844,  22,  10, UNI_INSC__TONELETTER }   /* indicsyllabiccategory=toneletter */,
+  {     1,  3547,     0,  17,   0, UNI_ALCHEMICAL }   /* alchemicalsymbols */,
+  {     0,  8421,     0,   7,   0, UNI_ELYM }   /* elymaic */,
+  {     3, 10048, 10152,   3,   2, UNI_NV__49 }   /* nv=49 */,
+  {     0,  9488,  9315,   4,   5, UNI_INORIYA }   /* blk=oriya */,
+  {    35,  9277,  8315,   3,   4, UNI_UGAR }   /* sc=ugar */,
+  {     0,  9508,  9156,   5,   4, UNI_CCC__25 }   /* ccc=ccc25 */,
+  {    36,  3836,  5171,  17,   4, UNI_CHAM }   /* scriptextensions=cham */,
+  {     6,  4033,  1186,  16,   2, UNI_PO }   /* generalcategory=po */,
+  {     2,  8882,     1,   6,   1, -UNI_GREXT }   /* grext=n */,
+  {    17,  9277,  9816,   3,   4, UNI_TAVT }   /* sc=tavt */,
+  {     0,  1563,     0,   2,   0, UNI_PS }   /* ps */,
+  {    66,  9488,  8906,   4,   6, UNI_KANBUN }   /* blk=kanbun */,
+  {     0,  9444,  8043,   4,   3, UNI_AGE__8 }   /* age=8.0 */,
+  {     0,  9290,  1025,   5,   2, -UNI_MATH }   /* math=no */,
+  {    11,  1979,    36,  10,   1, UNI_TITLE }   /* category=lt */,
+  {     3, 10048,  9976,   3,   3, UNI_NV__5_SLASH_8 }   /* nv=5/8 */,
+  {     0,  8997,     0,   6,   0, UNI_TERM }   /* term=t */,
+  {     0,   184,  6730,   2,  11, UNI_KATAKANAEXT }   /* iskatakanaext */,
+  {   262,  8780,  3600,   6,   4, UNI_UCAS }   /* block=ucas */,
+  {     8,  7155,  9593,   3,   3, UNI_HMNP }   /* ishmnp */,
+  {     5,  7155,  1193,   3,  25, UNI_HALFANDFULLFORMS }   /* ishalfwidthandfullwidthforms */,
+  {   316,  9768,  8597,   5,   6, UNI_SHRD }   /* scx=sharada */,
+  {     0,  1988,    36,  22,   1, UNI_LOE }   /* logicalorderexception=t */,
+  {     0,  3374,     1,  11,   1, -UNI_XPOSIXSPACE }   /* whitespace=n */,
+  {     0,  9444, 10075,   4,   3, UNI_AGE__2 }   /* age=v20 */,
+  {     8,  9444,  9955,   4,   3, UNI_AGE__3_DOT_2 }   /* age=3.2 */,
+  {     0,  2288,  8444,   4,   5, UNI_INHANUNOO }   /* inhanunoo */,
+  {     0,  6231,   510,   3,  29, UNI_CJKEXTA }   /* incjkunifiedideographsextensiona */,
+  {     2,   184,  6098,   3,  11, UNI_CYRILLICEXTA }   /* iscyrillicexta */,
+  {     0, 10060,     1,   3,   1, -UNI_RI }   /* ri=n */,
+  {     0,  6231,  8352,   3,   6, UNI_CJKEXTA }   /* incjkexta */,
+  {     0,  1988,  9255,  22,   5, -UNI_LOE }   /* logicalorderexception=false */,
+  {     2,  5791,  7045,  13,   3, UNI_JG__FEH }   /* joininggroup=feh */,
+  {    64,  4116,   325,   3,   3, UNI_ITAL }   /* isital */,
+  {     0,  7088, 10042,  10,   3, UNI_BC__LRO }   /* bidiclass=lro */,
+  {    47,  7155,     8,   3,   2, UNI_HAN }   /* ishan */,
+  {     0,  5986,  7765,  13,   2, UNI_NV__25 }   /* numericvalue=25 */,
+  {     3,  9488,  4340,   4,  13, UNI_MATHOPERATORS }   /* blk=mathoperators */,
+  {     0, 10033,  8680,   3,   7, UNI_LB__XX }   /* lb=unknown */,
+  {     2, 10024,  1059,   3,   2, UNI_SO }   /* gc=so */,
+  {     8,  7088,   407,  10,   2, UNI_BC__ON }   /* bidiclass=on */,
+  {     3,  4245,     0,  10,   0, UNI_SM }   /* mathsymbol */,
+  {    32,  8780,  4928,   6,   5, UNI_INTAMIL }   /* block=tamil */,
+  {     0,  9488,  5550,   4,  14, UNI_INPSALTERPAHLAVI }   /* blk=psalterpahlavi */,
+  {     3,  8870,  1025,   6,   2, -UNI_EPRES }   /* epres=no */,
+  {     4,  9876,     0,   4,   0, UNI_XSUX }   /* xsux */,
+  {     3,  8966,     0,   7,   0, UNI_DT__CAN }   /* nfdqc=n */,
+  {     4,  9265,  9255,   5,   5, -UNI_IDST }   /* idst=false */,
+  {    11,  7218,  5088,  10,  14, UNI_LB__SA }   /* linebreak=complexcontext */,
+  {     1,  3836,  3598,  17,  17, UNI_AGHB }   /* scriptextensions=caucasianalbanian */,
+  {     0,  8780,  4049,   6,  16, UNI_GEORGIANEXT }   /* block=georgianextended */,
+  {    10,  3385,     1,  18,   1, -UNI_RI }   /* regionalindicator=n */,
+  {     0,  8589,  9095,   7,   5, UNI_SC__BUHD }   /* script=buhid */,
+  {     1, 10024, 10170,   3,   2, UNI_CASEDLETTER }   /* gc=l_ */,
+  {     1,  5791,  6774,  13,  11, UNI_JG__MALAYALAMJA }   /* joininggroup=malayalamja */,
+  {     4,   117,  5779,   3,  12, UNI_IPAEXT }   /* inipaextensions */,
+  {    56,  5986,  8756,  13,   6, UNI_NV__900000 }   /* numericvalue=900000 */,
+  {     2,  8589,  3169,   7,   8, UNI_ETHI }   /* script=ethiopic */,
+  {     0, 10033,  2444,   3,   2, UNI_LB__HL }   /* lb=hl */,
+  {     6,  1114,  9255,  26,   5, -UNI_CWKCF }   /* changeswhennfkccasefolded=false */,
+  {     0, 10027,  9044,   3,   4, UNI_JG__YUDH }   /* jg=yudh */,
+  {     2,  4385,     0,   6,   0, UNI_TANG }   /* tangut */,
+  {     2,  8780,  2245,   6,  14, UNI_MEETEIMAYEKEXT }   /* block=meeteimayekext */,
+  {    32,  3836,  9330,  17,   5, UNI_TALE }   /* scriptextensions=taile */,
+  {     0,  3836,  8107,  17,   4, UNI_BALI }   /* scriptextensions=bali */,
+  {    32,  5986,  5648,  13,   7, UNI_NV__1000000 }   /* numericvalue=1000000 */,
+  {    24,  8780,  4369,   6,   6, UNI_INSYRIAC }   /* block=syriac */,
+  {   206,  4838,    17,  16,   1, UNI_NFKCQC__N }   /* nfkcquickcheck=no */,
+  {     2,  6061,     3,  12,   1, -UNI_BIDIC }   /* bidicontrol=f */,
+  {     0,  9277,  8344,   3,   4, UNI_SC__BENG }   /* sc=beng */,
+  {     0,  9277,  9544,   3,   4, UNI_DIAK }   /* sc=diak */,
+  {   426,  4369,     0,  16,   0, UNI_SYRIACSUP }   /* syriacsupplement */,
+  {     1,  6231,  1902,   4,  20, UNI_INDICNUMBERFORMS }   /* incommonindicnumberforms */,
+  {     1, 10027,  9075,   3,   5, UNI_JG__ALAPH }   /* jg=alaph */,
+  {     2,  4478,     0,   7,   0, UNI_BRAI }   /* braille */,
+  {     1,  8589,  1654,   7,   6, UNI_SC__HANG }   /* script=hangul */,
+  {    68,  9508,  8817,   5,   5, UNI_CCC__129 }   /* ccc=ccc129 */,
+  {     0,  9015,     3,   5,   1, -UNI_IDEO }   /* ideo=f */,
+  {     8,  1417,  9472,  24,   3, UNI_CCC__202 }   /* canonicalcombiningclass=atb */,
+  {    24,   184,  4613,   2,  15, UNI_DIACRITICALSSUP }   /* isdiacriticalssup */,
+  {     0,  9488,  4337,   4,  16, UNI_SUPMATHOPERATORS }   /* blk=supmathoperators */,
+  {     7,  1594,     0,  14,   0, UNI_MUSIC }   /* musicalsymbols */,
+  {    97,  4791,  2247,   4,  12, UNI_MEETEIMAYEKEXT }   /* inmeeteimayekext */,
+  {     3,   184,  1344,   2,  25, UNI_SYMBOLSFORLEGACYCOMPUTING }   /* issymbolsforlegacycomputing */,
+  {    51,  9488,   446,   4,  18, UNI_IDEOGRAPHICSYMBOLS }   /* blk=ideographicsymbols */,
+  {    10,  9488,  5284,   4,  14, UNI_LISUSUP }   /* blk=lisusupplement */,
+  {     0,  9620,     0,   4,   0, UNI_LANA }   /* lana */,
+  {     0,  9488,  1631,   4,  23, UNI_GEOMETRICSHAPESEXT }   /* blk=geometricshapesextended */,
+  {     0,  6231,  1442,   3,   9, UNI_CJKSYMBOLS }   /* incjksymbols */,
+  {     0, 10132,   727,   3,   2, UNI_WB__MN }   /* wb=mn */,
+  {    68,  1166, 10135,  26,   3, UNI_DI }   /* defaultignorablecodepoint=yes */,
+  {     0,  1188,  8639,   3,   6, UNI_INTAGALOG }   /* intagalog */,
+  {   320,  9488,  6796,   4,  11, UNI_INMEDEFAIDRIN }   /* blk=medefaidrin */,
+  {   402,  3836,  8491,  17,   4, UNI_MARC }   /* scriptextensions=marc */,
+  {     4,  9488,  5752,   4,   8, UNI_GREEKEXT }   /* blk=greekext */,
+  {     1,  7088,  4465,  12,  13, UNI_BC__BN }   /* bidiclass=boundaryneutral */,
+  {    91,  8688,   863,   4,   4, UNI_ARROWS }   /* isarrows */,
+  {     0,   184,   867,   2,  18, UNI_PHONETICEXT }   /* isphoneticextensions */,
+  {     0,  8107,     0,   4,   0, UNI_BALI }   /* bali */,
+  {     1, 10333,  4370,   3,   8, UNI_SYRIACSUP }   /* issyriacsup */,
+  {     0,  8337,     0,   7,   0, UNI_AVST }   /* avestan */,
+  {     8,   184,    43,   3,   2, UNI_CJK }   /* iscjk */,
+  {     0,  9488,  8470,   4,   7, UNI_INLINEARA }   /* blk=lineara */,
+  {     0,  9768,  4145,   4,   7, UNI_LINB }   /* scx=linearb */,
+  {   496,  7325,  7979,   3,   3, UNI_IN__6 }   /* in=6.0 */,
+  {     0,  2218,  7623,   4,   7, UNI_INNABATAEAN }   /* innabataean */,
+  {    22,  9748,     0,   4,   0, UNI_RJNG }   /* rjng */,
+  {     0,  3836,  9736,  17,   4, UNI_COPT }   /* scriptextensions=qaac */,
+  {    97,  2784,  4435,   4,  13, UNI_ARABICEXTA }   /* inarabicextendeda */,
+  {    38,  9444,  9967,   4,   3, UNI_AGE__5_DOT_1 }   /* age=5.1 */,
+  {   121,  3836,  8876,  17,   4, UNI_GOTH }   /* scriptextensions=goth */,
+  {     5, 10033,    83,   3,   2, UNI_LB__CM }   /* lb=cm */,
+  {     4,  9997,   102,   3,   2, UNI_BC__ET }   /* bc=et */,
+  {     0,  5452, 10135,  14,   3, UNI_NFCQC__Y }   /* nfcquickcheck=yes */,
+  {    12,  9488,  3025,   4,   8, UNI_INCHEROKEE }   /* blk=cherokee */,
+  {    72,  9524, 10135,   4,   3, UNI_CWT }   /* cwt=yes */,
+  {    22,  9277,  2485,   3,   4, UNI_SC__MONG }   /* sc=mong */,
+  {   136,  8267,     1,   8,   1, -UNI_RADICAL }   /* radical=n */,
+  {    68,  8219,     0,   8,   0, UNI_JAVA }   /* javanese */,
+  {     1,    21,  9066,   3,   4, UNI_INADLAM }   /* inadlam */,
+  {   385,  1966,  1608,  22,  23, UNI_INSC__CONSONANTPRECEDINGREPHA }   /* indicsyllabiccategory=consonantprecedingrepha */,
+  {     0,  6576,     3,  11,   1, -UNI_XPOSIXALPHA }   /* alphabetic=f */,
+  {     8,  5986,  7978,  13,   2, UNI_NV__16 }   /* numericvalue=16 */,
+  {    41,  1552,   598,   9,   2, UNI_XPOSIXCNTRL }   /* category=cc */,
+  {     8,  6241,     0,  12,   1, UNI_JT__U }   /* joiningtype=u */,
+  {     2, 10024,  6598,   3,  11, UNI_CASEDLETTER }   /* gc=casedletter */,
+  {     0,  9250,     1,   5,   1, -UNI_EMOD }   /* emod=n */,
+  {     1,  6121,     0,  12,   0, UNI_CYRILLICEXTC }   /* cyrillicextc */,
+  {     0,  6554,     0,  10,   0, UNI_IDC }   /* idcontinue */,
+  {     0,  2760,  6741,  19,  11, UNI_GCB__L }   /* hangulsyllabletype=leadingjamo */,
+  {     2,  5986,  9988,  13,   3, UNI_NV__7_SLASH_8 }   /* numericvalue=7/8 */,
+  {    38,  5578,  1194,  14,   2, UNI_LB__LF }   /* sentencebreak=lf */,
+  {     7, 10132,  3385,   3,  17, UNI_RI }   /* wb=regionalindicator */,
+  {     2,  8589,  8428,   7,   4, UNI_SC__GRAN }   /* script=gran */,
+  {     1,  4838,  9295,  15,   5, UNI_NFCQC__M }   /* nfkcquickcheck=maybe */,
+  {     0,  9768,  9310,   4,   5, UNI_OGAM }   /* scx=ogham */,
+  {     1,  3424,     1,   3,  33, UNI_UCAS }   /* inunifiedcanadianaboriginalsyllabics */,
+  {    12,    21,  5804,   2,  13, UNI_KANAEXTA }   /* inkanaextendeda */,
+  {     1,  1044,     0,   6,   0, UNI_L }   /* letter */,
+  {   106,  9508,  9943,   4,   3, UNI_CCC__AR }   /* ccc=232 */,
+  {     0,  7738,     3,   9,   1, -UNI_XIDS }   /* xidstart=f */,
+  {     0,   184,  8491,   2,   7, UNI_MARC }   /* ismarchen */,
+  {    32,  8589,  3751,   7,  17, UNI_KITS }   /* script=khitansmallscript */,
+  {     0,  2280,  4899,   3,  14, UNI_PS }   /* isopenpunctuation */,
+  {     1,  8780,  3241,   6,  11, UNI_GEORGIANSUP }   /* block=georgiansup */,
+  {     1,  5791,  2203,  13,  21, UNI_JG__HANIFIROHINGYAKINNAYA }   /* joininggroup=hanifirohingyakinnaya */,
+  {    92,  1966,  5144,  22,  14, UNI_INSC__GEMINATIONMARK }   /* indicsyllabiccategory=geminationmark */,
+  {     0,  9768,  9085,   4,   5, UNI_BATK }   /* scx=batak */,
+  {     1,  9768,  9652,   4,   4, UNI_MERC }   /* scx=merc */,
+  {     0,    96,     0,   5,   0, UNI_XPOSIXALPHA }   /* alpha */,
+  {    12,  8589,  9632,   7,   4, UNI_SC__LINA }   /* script=lina */,
+  {     4,  8498,     0,   7,   0, UNI_MULT }   /* multani */,
+  {    17,  1966,  9026,  22,   6, UNI_INSC__VIRAMA }   /* indicsyllabiccategory=virama */,
+  {     0,  7438,  2444,  10,   2, UNI_LB__HL }   /* wordbreak=hl */,
+  {   258,  7318,  9844,  10,   4, UNI_IN__11 }   /* presentin=v110 */,
+  {     0,  9768,  9440,   4,   4, UNI_ADLM }   /* scx=adlm */,
+  {     0,  8589,  7118,   7,  10, UNI_CHRS }   /* script=chorasmian */,
+  {    36,  5508,  9836,  14,   4, UNI_PATSYN }   /* patternsyntax=true */,
+  {     2,  3836,  9656,  17,   4, UNI_MIAO }   /* scriptextensions=miao */,
+  {    25,  3097,  8195,  18,   8, UNI_DT__ISO }   /* decompositiontype=isolated */,
+  {    45,  5791,  5336,  13,   4, UNI_JG__BETH }   /* joininggroup=beth */,
+  {     3, 10048, 10150,   3,   2, UNI_NV__48 }   /* nv=48 */,
+  {     4,  4853,  1025,  15,   2, UNI_NFKDQC__N }   /* nfkdquickcheck=no */,
+  {     1, 10048,  8756,   3,   6, UNI_NV__900000 }   /* nv=900000 */,
+  {     7,  9346,    36,   4,   1, UNI_IDC }   /* idc=t */,
+  {     1, 10024,  5438,   3,  14, UNI_SK }   /* gc=modifiersymbol */,
+  {     0,  9444,  7923,   4,   3, UNI_AGE__4 }   /* age=4.0 */,
+  {     1,  9488,  4369,   4,   6, UNI_INSYRIAC }   /* blk=syriac */,
+  {    69,  4916,  9004,   4,   4, UNI_TELU }   /* istelugu */,
+  {     8,   184,  1287,   2,   2, UNI_UPPERCASELETTER }   /* islu */,
+  {     0,  8589,  2203,   7,   4, UNI_SC__HAN }   /* script=hani */,
+  {     1,  6928,    36,  11,   1, UNI_SD }   /* softdotted=t */,
+  {    14,  9508,  9472,   4,   3, UNI_CCC__202 }   /* ccc=atb */,
+  {     3,  3836,  9816,  17,   4, UNI_TAVT }   /* scriptextensions=tavt */,
+  {     0,  9277,  9620,   3,   4, UNI_LANA }   /* sc=lana */,
+  {     0,  7739,     1,   8,   1, -UNI_IDS }   /* idstart=n */,
+  {     5,  7218,  8449,  10,   2, UNI_LB__HY }   /* linebreak=hy */,
+  {    49,  8780,  3331,   6,  18, UNI_ORNAMENTALDINGBATS }   /* block=ornamentaldingbats */,
+  {     0,  8780,  8091,   6,   8, UNI_INARMENIAN }   /* block=armenian */,
+  {    41,  9488,  4049,   4,  11, UNI_GEORGIANEXT }   /* blk=georgianext */,
+  {     0,  9351,     1,   4,   1, -UNI_IDS }   /* ids=n */,
+  {    49,  9444, 10078,   4,   3, UNI_AGE__2_DOT_1 }   /* age=v21 */,
+  {   134, 10009,  1309,   3,   3, UNI_DT__SUB }   /* dt=sub */,
+  {   296,  9277,  9464,   3,   4, UNI_ARMN }   /* sc=armn */,
+  {     6,  8780,  7168,   6,  10, UNI_INDIVESAKURU }   /* block=divesakuru */,
+  {     0,  8694,     3,   7,   1, -UNI_XPOSIXSPACE }   /* wspace=f */,
+  {   100, 10132,  7729,   3,   9, UNI_WB__WSEGSPACE }   /* wb=wsegspace */,
+  {     1,  5791,  5480,  13,  14, UNI_JG__NOJOININGGROUP }   /* joininggroup=nojoininggroup */,
+  {   257,  3259,  9836,  18,   4, UNI_IDSB }   /* idsbinaryoperator=true */,
+  {   590,  5986,  9961,  13,   3, UNI_NV__3_SLASH_5 }   /* numericvalue=3/5 */,
+  {     2,  7218,  5536,  10,  14, UNI_LB__PO }   /* linebreak=postfixnumeric */,
+  {    39,  7428,     0,   4,   0, UNI_WARA }   /* wara */,
+  {     0,  6231,  8387,   3,   6, UNI_CJKEXTF }   /* incjkextf */,
+  {     0,   184,  8123,   2,   8, UNI_BUGI }   /* isbuginese */,
+  {     0,  8509,   811,   4,  20, UNI_ENCLOSEDIDEOGRAPHICSUP }   /* inenclosedideographicsup */,
+  {     1,  5986,  7922,  13,   2, UNI_NV__24 }   /* numericvalue=24 */,
+  {     0,  9277,  7630,   3,   9, UNI_TALU }   /* sc=newtailue */,
+  {    32,  8780,  2741,   6,  19, UNI_JAMOEXTB }   /* block=hanguljamoextendedb */,
+  {     2, 10346,  1182,   5,   4, UNI_ANY }   /* isunicode */,
+  {   128,  5060,    36,  14,   1, UNI_CI }   /* caseignorable=t */,
+  {     0,  9508,  9151,   5,   4, UNI_CCC__24 }   /* ccc=ccc24 */,
+  {     0,  9071,    36,   4,   1, UNI_XPOSIXXDIGIT }   /* hex=t */,
+  {     0,  6231,   540,   3,  29, UNI_CJKEXTB }   /* incjkunifiedideographsextensionb */,
+  {   107, 10296,     0,   3,   0, UNI_P }   /* isp */,
+  {     0,  8115,     0,   8,   0, UNI_BASS }   /* bassavah */,
+  {    16,  7540,     0,   9,   0, UNI_ext_values_index }   /* extender= */,
+  {   128,   184,  9484,   2,   4, UNI_BHKS }   /* isbhks */,
+  {    21,  8864,    26,   6,   1, UNI_EMOJI }   /* emoji=y */,
+  {     0,  5986,  5648,  13,  11, UNI_NV__10000000000 }   /* numericvalue=10000000000 */,
+  {     0,  4340,     0,  13,   0, UNI_MATHOPERATORS }   /* mathoperators */,
+  {     0,  9768,  7359,   5,   9, UNI_SAUR }   /* scx=saurashtra */,
+  {     6, 10132,  7612,   3,   9, UNI_WB__MB }   /* wb=midnumlet */,
+  {    66,  1066,     0,   2,   0, UNI_CASEDLETTER }   /* lc */,
+  {     0, 10027,  7112,   3,   3, UNI_JG__KAF }   /* jg=kaf */,
+  {     0,  8876,     0,   4,   0, UNI_GOTH }   /* goth */,
+  {     6,  6231,  2141,   3,   7, UNI_INCYRILLIC }   /* incyrillic */,
+  {     0,  8589,  1165,   9,   2, UNI_SC__SHRD }   /* script=shrd */,
+  {    40,  1552, 10180,   9,   2, UNI_ZS }   /* category=zs */,
+  {     0,  4033,  5713,  16,  13, UNI_XPOSIXDIGIT }   /* generalcategory=decimalnumber */,
+  {   577,  9015,  9255,   5,   5, -UNI_IDEO }   /* ideo=false */,
+  {     0,  8780,  9688,   6,   3, UNI_INNKO }   /* block=nko */,
+  {   132,  9277,  8414,   3,   7, UNI_ELBA }   /* sc=elbasan */,
+  {     0, 10048,  8720,   3,   3, UNI_NV__400 }   /* nv=400 */,
+  {     2,  1828,    26,   6,   1, UNI_CASED }   /* cased=y */,
+  {     0,   184,  8912,   2,   4, UNI_KHOJ }   /* iskhoj */,
+  {    32,  9768,  6181,   4,  12, UNI_GONG }   /* scx=gunjalagondi */,
+  {    21,   184,  6517,   2,  12, UNI_PLAYINGCARDS }   /* isplayingcards */,
+  {     0,  3097,  2280,  18,   3, UNI_DT__ISO }   /* decompositiontype=iso */,
+  {     0,  4033,  6598,  16,  11, UNI_CASEDLETTER }   /* generalcategory=casedletter */,
+  {    10,  8780,  4868,   6,  15, UNI_NARB }   /* block=oldnortharabian */,
+  {     0,   184,  3133,   2,  13, UNI_EMOD }   /* isemojimodifier */,
+  {    68, 10048,  8720,   3,   5, UNI_NV__40000 }   /* nv=40000 */,
+  {     4, 10048,  7819,   3,   8, UNI_NV__3_SLASH_16 }   /* nv=1.88e-01 */,
+  {     2,  9488,  6620,   4,  11, UNI_DOMINO }   /* blk=dominotiles */,
+  {   428,  9345,     1,   5,   1, -UNI_XIDC }   /* xidc=n */,
+  {     0,  3836,  2855,  17,   9, UNI_MONG }   /* scriptextensions=mongolian */,
+  {     5, 10333,  8277,   4,   6, UNI_SPECIALS }   /* isspecials */,
+  {    32, 10048,  7867,   3,   8, UNI_NV__1_SLASH_32 }   /* nv=3.12e-02 */,
+  {     0,  7088,    32,  10,   2, UNI_BC__CS }   /* bidiclass=cs */,
+  {     1,  9488,  7458,   4,  10, UNI_YIRADICALS }   /* blk=yiradicals */,
+  {     0,  4838,     0,  15,   0, UNI_nfkcqc_values_index }   /* nfkcquickcheck= */,
+  {     1,  8589,  8115,   7,   8, UNI_BASS }   /* script=bassavah */,
+  {    71,  7438,  4305,  10,   5, UNI_WB__XX }   /* wordbreak=other */,
+  {     1,  9277,  8498,   3,   4, UNI_SC__MULT }   /* sc=mult */,
+  {     3,  5817,     0,  13,   0, UNI_ZL }   /* lineseparator */,
+  {     5,  9277,  9832,   3,   4, UNI_TIBT }   /* sc=tibt */,
+  {     1, 10033, 10156,   3,   2, UNI_LB__BK }   /* lb=bk */,
+  {     0, 10030,  6664,   3,  11, UNI_JT__D }   /* jt=dualjoining */,
+  {    17,   184,  8344,   2,   7, UNI_BENG }   /* isbengali */,
+  {   108,  6231,   115,   4,  33, UNI_DIACRITICALSFORSYMBOLS }   /* incombiningdiacriticalmarksforsymbols */,
+  {     0,  9277,  8666,   3,   4, UNI_SC__TIRH }   /* sc=tirh */,
+  {    39,   184,  6110,   3,  11, UNI_CYRILLICEXTB }   /* iscyrillicextb */,
+  {     1,  6972,     0,   4,   0, UNI_SYLO }   /* sylo */,
+  {    60,    84,     0,   4,   0, UNI_MATH }   /* math */,
+  {     3,  1552,  3985,   9,  16, UNI_PE }   /* category=closepunctuation */,
+  {     0,  9768,  9032,   4,   6, UNI_WCHO }   /* scx=wancho */,
+  {     5,  7325,  9979,   3,   3, UNI_IN__6_DOT_1 }   /* in=6.1 */,
+  {     0,  1269,  9836,  25,   4, UNI_COMPEX }   /* fullcompositionexclusion=true */,
+  {     0,  6231,  4002,   3,  15, UNI_CYPRIOTSYLLABARY }   /* incypriotsyllabary */,
+  {    16,  7438,    34,  10,   6, UNI_WB__EXTEND }   /* wordbreak=extend */,
+  {     0,  9275,  2389,   5,  20, UNI_INSC__CONSONANTWITHSTACKER }   /* insc=consonantwithstacker */,
+  {    20,  9277,  9664,   3,   4, UNI_MRO }   /* sc=mroo */,
+  {     0,  1417,  6445,  24,  12, UNI_CCC__0 }   /* canonicalcombiningclass=notreordered */,
+  {   100,  9277,  9564,   3,   4, UNI_SC__GONM }   /* sc=gonm */,
+  {     0,  9444,  7867,   4,   3, UNI_AGE__3_DOT_1 }   /* age=3.1 */,
+  {     0,  4145,     0,  16,   0, UNI_LINEARBIDEOGRAMS }   /* linearbideograms */,
+  {     1,  7076,  3938,   3,  15, UNI_BOPOMOFOEXT }   /* inbopomofoextended */,
+  {     1,  8780,  7428,   6,  10, UNI_INWARANGCITI }   /* block=warangciti */,
+  {     1,  5564,     0,  14,   0, UNI_qmark_values_index }   /* quotationmark= */,
+  {    27,  9444,  7469,   4,   3, UNI_AGE__5 }   /* age=5.0 */,
+  {     0,  9488,  8203,   4,   8, UNI_JAMOEXTA }   /* blk=jamoexta */,
+  {    16,  8780,  1654,   6,   6, UNI_INHANGUL }   /* block=hangul */,
+  {     1,  8884, 10135,   4,   3, UNI_EXT }   /* ext=yes */,
+  {     0,  9002,     0,   4,   0, UNI_TELU }   /* telu */,
+  {     1, 10003, 10135,   3,   3, UNI_CI }   /* ci=yes */,
+  {     3,  9768,  4149,   5,   3, UNI_SARB }   /* scx=sarb */,
+  {     1,  5986,  7963,  13,   8, UNI_NV__11_SLASH_2 }   /* numericvalue=5.50e+00 */,
+  {   549,  6231,  7140,   4,   8, UNI_COMPATJAMO }   /* incompatjamo */,
+  {     0,  8780,  3241,   6,  18, UNI_GEORGIANSUP }   /* block=georgiansupplement */,
+  {     3,  4643,    36,  15,   1, UNI_ECOMP }   /* emojicomponent=t */,
+  {     0,  1269,  9255,  25,   5, -UNI_COMPEX }   /* fullcompositionexclusion=false */,
+  {     4,  1552,   467,   9,  11, UNI_P }   /* category=punctuation */,
+  {     3,  6241,    36,  12,   1, UNI_JT__T }   /* joiningtype=t */,
+  {     3,    21,  8463,   2,   7, UNI_KALI }   /* inkayahli */,
+  {   334,  9508,  2449,   4,   4, UNI_CCC__L }   /* ccc=left */,
+  {    41, 10033,  8251,   3,   8, UNI_LB__NL }   /* lb=nextline */,
+  {     6,  9335,     0,   5,   0, UNI_TAKR }   /* takri */,
+  {     2,  9488,   861,   4,   6, UNI_ARROWS }   /* blk=arrows */,
+  {     0,  9350,  9836,   5,   4, UNI_XIDS }   /* xids=true */,
+  {     7,  5986,  7933,  13,   2, UNI_NV__17 }   /* numericvalue=17 */,
+  {     0,   184,  8107,   2,   4, UNI_BALI }   /* isbali */,
+  {     0,  8780,  8617,   6,   7, UNI_INSOYOMBO }   /* block=soyombo */,
+  {     0, 10048,  7955,   3,   8, UNI_NV__1_SLASH_20 }   /* nv=5.00e-02 */,
+  {     4,  3836,  8187,  17,   8, UNI_HIRA }   /* scriptextensions=hiragana */,
+  {   512,  3836,  8611,  18,   3, UNI_SIDD }   /* scriptextensions=sidd */,
+  {     0,  9488,  8912,   4,   6, UNI_INKHOJKI }   /* blk=khojki */,
+  {     3,  9444,     0,   4,   0, UNI_age_values_index }   /* age= */,
+  {    67,  7666,     0,   9,   0, UNI_ORKH }   /* oldturkic */,
+  {     1, 10333,  4370,   3,   5, UNI_SYRC }   /* issyriac */,
+  {   399,   184,  8694,   2,   6, UNI_XPOSIXSPACE }   /* iswspace */,
+  {    64,   184,  1594,   2,  14, UNI_MUSIC }   /* ismusicalsymbols */,
+  {    16,  9488,  6505,   4,   8, UNI_PHAISTOS }   /* blk=phaistos */,
+  {     4,  9277,  7513,   3,   9, UNI_BHKS }   /* sc=bhaiksuki */,
+  {   164,  3836,  8337,  17,   7, UNI_AVST }   /* scriptextensions=avestan */,
+  {     5,  8589,  7513,   7,   9, UNI_BHKS }   /* script=bhaiksuki */,
+  {    18,  9508,    23,   4,   2, UNI_CCC__AL }   /* ccc=al */,
+  {     0,  8780,  6409,   6,  12, UNI_INMENDEKIKAKUI }   /* block=mendekikakui */,
+  {   104,  9768,  9752,   4,   4, UNI_ROHG }   /* scx=rohg */,
+  {   234,  2010,     0,  22,   0, UNI_MISCTECHNICAL }   /* miscellaneoustechnical */,
+  {     0,  3836,  2203,  17,   4, UNI_HAN }   /* scriptextensions=hani */,
+  {     6, 10333,   107,   3,   5, UNI_S }   /* issymbol */,
+  {     0,  6851,     0,  11,   0, UNI_LO }   /* otherletter */,
+  {     1,  5791,  4203,  13,   3, UNI_JG__LAM }   /* joininggroup=lam */,
+  {     0,  7438,  4360,  10,   9, UNI_WB__EB }   /* wordbreak=emodifier */,
+  {   263, 10027,  2203,   3,  21, UNI_JG__HANIFIROHINGYAKINNAYA }   /* jg=hanifirohingyakinnaya */,
+  {     0,  7218,  3985,  10,  16, UNI_LB__CL }   /* linebreak=closepunctuation */,
+  {     0,  9277,  9872,   3,   4, UNI_XPEO }   /* sc=xpeo */,
+  {   128, 10320,  3379,   7,   5, UNI_XPOSIXSPACE }   /* isxperlspace */,
+  {   280,  9488,  1878,   4,  19, UNI_CJKCOMPATIDEOGRAPHS }   /* blk=cjkcompatideographs */,
+  {     0,  8780,  2287,   6,   7, UNI_INSINHALA }   /* block=sinhala */,
+  {     2, 10033,  8701,   3,   7, UNI_LB__ZW }   /* lb=zwspace */,
+  {     7,  9488,  1594,   4,  14, UNI_MUSIC }   /* blk=musicalsymbols */,
+  {    64, 10288,    96,   8,   5, UNI_XPOSIXALPHA }   /* isxposixalpha */,
+  {     0,   184,  3169,   2,  18, UNI_ETHIOPICSUP }   /* isethiopicsupplement */,
+  {     0,  8688,  7060,   4,   8, UNI_ARABICEXTA }   /* isarabicexta */,
+  {    38, 10033,  6675,   3,  11, UNI_LB__EX }   /* lb=exclamation */,
+  {    12,  6231,  8394,   3,   6, UNI_CJKEXTG }   /* incjkextg */,
+  {     1,  9277,  9896,   3,   4, UNI_SC__ZYYY }   /* sc=zyyy */,
+  {     0,  5986,  9372,  13,   4, UNI_NV__1_SLASH_40 }   /* numericvalue=1/40 */,
+  {     2,    21,  9453,   3,   3, UNI_INAHOM }   /* inahom */,
+  {   512,  9277,  9752,   3,   4, UNI_SC__ROHG }   /* sc=rohg */,
+  {    11,  9444,  7931,   4,   3, UNI_AGE__4_DOT_1 }   /* age=4.1 */,
+  {     0,  4838, 10135,  15,   3, UNI_NFKCQC__Y }   /* nfkcquickcheck=yes */,
+  {     0,  8780,  3683,   6,  16, UNI_ETHIOPICEXT }   /* block=ethiopicextended */,
+  {     7,  9508,  1219,   4,   3, UNI_CCC__214 }   /* ccc=ata */,
+  {     0,  9277,  9460,   3,   4, UNI_ARMI }   /* sc=armi */,
+  {   512,   184,  2666,   3,  18, UNI_COUNTINGROD }   /* iscountingrodnumerals */,
+  {     3,  9277,  1900,   3,   6, UNI_SC__ZYYY }   /* sc=common */,
+  {     0,  5986,  8043,  13,   8, UNI_NV__4_SLASH_5 }   /* numericvalue=8.00e-01 */,
+  {     1,  7218,  6073,  10,  12, UNI_LB__SY }   /* linebreak=breaksymbols */,
+  {     0,  3836,  2140,  17,   8, UNI_CYRL }   /* scriptextensions=cyrillic */,
+  {     2,   867,     0,  28,   0, UNI_PHONETICEXTSUP }   /* phoneticextensionssupplement */,
+  {     2,  8780,  1033,   6,  27, UNI_ENCLOSEDCJK }   /* block=enclosedcjklettersandmonths */,
+  {     0,  8449,    26,   7,   1, UNI_HYPHEN }   /* hyphen=y */,
+  {     4,  1166,     3,  26,   1, -UNI_DI }   /* defaultignorablecodepoint=f */,
+  {     0,  1273,    26,  21,   1, UNI_CE }   /* compositionexclusion=y */,
+  {   132, 10048,  7875,   3,   8, UNI_NV__1_SLASH_32 }   /* nv=3.13e-02 */,
+  {    17,  8589,  9708,   7,   4, UNI_SC__ORYA }   /* script=orya */,
+  {     0,  9997,  2268,   3,   3, UNI_BC__PDI }   /* bc=pdi */,
+  {    44,  9265,    36,   5,   1, UNI_IDST }   /* idst=t */,
+  {    35,  1552,  4958,   9,  15, UNI_UPPERCASELETTER }   /* category=uppercaseletter */,
+  {     6,  9556,    73,   4,   2, UNI_WB__EB }   /* gcb=em */,
+  {     0, 10048,  8011,   3,   8, UNI_NV__13_SLASH_2 }   /* nv=6.50e+00 */,
+  {     1,  9250,  1025,   5,   2, -UNI_EMOD }   /* emod=no */,
+  {     0,  5986,  7763,  13,   8, UNI_NV__1_SLASH_8 }   /* numericvalue=1.25e-01 */,
+  {     0,  9020,    26,   6,   1, UNI_XPOSIXUPPER }   /* upper=y */,
+  {     0,  9277,  6277,   3,   4, UNI_SC__MAHJ }   /* sc=mahj */,
+  {     0,  5037,     3,   9,   1, -UNI_XPOSIXXDIGIT }   /* hexdigit=f */,
+  {   135,  9277,  1677,   3,   5, UNI_SC__LATN }   /* sc=latin */,
+  {    36, 10024,  1044,   3,   6, UNI_L }   /* gc=letter */,
+  {    15,  4033,  1066,  16,   2, UNI_CASEDLETTER }   /* generalcategory=lc */,
+  {     0, 10048,  8744,   3,   3, UNI_NV__700 }   /* nv=700 */,
+  {     0,  9508,  9166,   5,   4, UNI_CCC__27 }   /* ccc=ccc27 */,
+  {     3,   184,  6122,   3,  11, UNI_CYRILLICEXTC }   /* iscyrillicextc */,
+  {    64,  9262,    34,   3,   2, UNI_SB__EX }   /* sb=ex */,
+  {     0,   184,  9892,   2,   4, UNI_QAAI }   /* iszinh */,
+  {     1, 10024,   262,   3,   2, UNI_SM }   /* gc=sm */,
+  {   393,  9768,  7567,   4,   9, UNI_SIND }   /* scx=khudawadi */,
+  {     0, 10129,     1,   3,   1, -UNI_VS }   /* vs=n */,
+  {     2,  4369,     0,   9,   0, UNI_SYRIACSUP }   /* syriacsup */,
+  {   177,    21,  2590,   3,  18, UNI_ANCIENTGREEKNUMBERS }   /* inancientgreeknumbers */,
+  {     2,  3836,  4385,  17,   6, UNI_TANG }   /* scriptextensions=tangut */,
+  {     5, 10048,  8714,   3,   5, UNI_NV__30000 }   /* nv=30000 */,
+  {     2,  5986,  7747,  13,   8, UNI_NV__1_SLASH_10 }   /* numericvalue=1.00e-01 */,
+  {     1,   184,  9672,   2,   4, UNI_MYMR }   /* ismymr */,
+  {     1,  3836,  9065,  17,   5, UNI_ADLM }   /* scriptextensions=adlam */,
+  {    17,  8997,  9837,   6,   3, UNI_TERM }   /* term=true */,
+  {     0,  9556,  3385,   4,  17, UNI_RI }   /* gcb=regionalindicator */,
+  {     1,  7318,  9985,  10,   3, UNI_IN__7 }   /* presentin=7.0 */,
+  {     0, 10132,  6145,   3,  12, UNI_WB__EX }   /* wb=extendnumlet */,
+  {     0, 10333,  7292,   3,   6, UNI_SOGD }   /* issogdian */,
+  {     1,  7513,     0,   9,   0, UNI_BHKS }   /* bhaiksuki */,
+  {     0,  1114,     0,  25,   0, UNI_CWKCF }   /* changeswhennfkccasefolded */,
+  {     1,  3836,  7292,  18,   6, UNI_SOGD }   /* scriptextensions=sogdian */,
+  {     6,  1966,  2608,  22,  19, UNI_INSC__BRAHMIJOININGNUMBER }   /* indicsyllabiccategory=brahmijoiningnumber */,
+  {     3, 10033,   866,   3,   2, UNI_LB__SP }   /* lb=sp */,
+  {    22,  9488,  5200,   4,   7, UNI_KANASUP }   /* blk=kanasup */,
+  {     0,   184,  6253,   2,   5, UNI_KHMR }   /* iskhmer */,
+  {     4,  9664,     0,   3,   0, UNI_MRO }   /* mro */,
+  {     1,  1911,     0,  11,   0, UNI_NUMBERFORMS }   /* numberforms */,
+  {     3,  9768,  9600,   4,   4, UNI_KALI }   /* scx=kali */,
+  {     1, 10033,  4898,   3,  15, UNI_LB__OP }   /* lb=openpunctuation */,
+  {     1,  4033,  4245,  16,  10, UNI_SM }   /* generalcategory=mathsymbol */,
+  {     0,  8589,  7621,   7,   9, UNI_NBAT }   /* script=nabataean */,
+  {     5,  9488,  3938,   5,   7, UNI_INBOPOMOFO }   /* blk=bopomofo */,
+  {     0,  9488,  3115,   4,  18, UNI_DEVANAGARIEXT }   /* blk=devanagariextended */,
+  {     5,   117,     6,   3,   2, UNI_INIDC }   /* inidc */,
+  {     5,  9277,  3135,   5,   2, UNI_SC__KHOJ }   /* sc=khoj */,
+  {   598,  1319,     0,  25,   0, UNI_SYMBOLSANDPICTOGRAPHSEXTA }   /* symbolsandpictographsexta */,
+  {     0,  9768,  9580,   4,   4, UNI_HANO }   /* scx=hano */,
+  {    79,  8780,  1594,   6,  14, UNI_MUSIC }   /* block=musicalsymbols */,
+  {     0,  5791,  6157,  13,  12, UNI_JG__FINALSEMKATH }   /* joininggroup=finalsemkath */,
+  {    64,  4033,  4898,  16,  15, UNI_PS }   /* generalcategory=openpunctuation */,
+  {     1,  4989,  8674,   3,   6, UNI_UCASEXT }   /* isucasext */,
+  {     0,   184,  3785,   2,  10, UNI_MANI }   /* ismanichaean */,
+  {     0,   184,  1813,   3,  20, UNI_CWL }   /* ischangeswhenlowercased */,
+  {     0,  9740,     0,   4,   0, UNI_QAAI }   /* qaai */,
+  {     0,  5986,  8083,  13,   8, UNI_NV__11_SLASH_12 }   /* numericvalue=9.17e-01 */,
+  {     0,  9488,  1631,   4,  18, UNI_GEOMETRICSHAPESEXT }   /* blk=geometricshapesext */,
+  {     0,   184,  8463,   2,   7, UNI_KALI }   /* iskayahli */,
+  {     4, 10027,  4081,   3,  16, UNI_JG__HANIFIROHINGYAPA }   /* jg=hanifirohingyapa */,
+  {     0,  3836,  9512,  17,   4, UNI_CHRS }   /* scriptextensions=chrs */,
+  {    19,  7318,  7826,  10,   2, UNI_IN__12 }   /* presentin=12 */,
+  {    64,  9556,   262,   4,   2, UNI_GCB__SM }   /* gcb=sm */,
+  {     3, 10132,  5851,   3,   2, UNI_WB__ML }   /* wb=ml */,
+  {     1,  9488,  1586,   5,  13, UNI_BYZANTINEMUSIC }   /* blk=byzantinemusic */,
+  {     3,  3133,     0,  18,   0, UNI_ebase_values_index }   /* emojimodifierbase= */,
+  {   206, 10027,  9355,   3,   5, UNI_JG__ZHAIN }   /* jg=zhain */,
+  {   204,  9277,  3937,   3,   4, UNI_SC__BOPO }   /* sc=bopo */,
+  {     1, 10291,  9225,   5,   5, UNI_POSIXCNTRL }   /* posixcntrl */,
+  {     3,    34,     0,   3,   0, UNI_EXT }   /* ext */,
+  {    25,  7088,  2449,  10,  11, UNI_BC__L }   /* bidiclass=lefttoright */,
+  {     2,  5986,  9958,  13,   3, UNI_NV__3_SLASH_4 }   /* numericvalue=3/4 */,
+  {    66,  4973,     0,  15,   0, UNI_VEDICEXT }   /* vedicextensions */,
+  {     1,  9444,  9401,   4,   3, UNI_AGE__3 }   /* age=3.0 */,
+  {    41,  9014,     0,   6,   0, UNI_uideo_values_index }   /* uideo= */,
+  {    26,  9768,  3079,   4,   4, UNI_COPT }   /* scx=copt */,
+  {     0, 10024,  6873,   3,  11, UNI_SO }   /* gc=othersymbol */,
+  {    14,  9277,  6484,   3,   4, UNI_HUNG }   /* sc=hung */,
+  {     0,  1834,  9836,  22,   4, UNI_CWT }   /* changeswhentitlecased=true */,
+  {     0,  6277,     0,   7,   0, UNI_MAHJONG }   /* mahjong */,
+  {    41,  9015,  1025,   5,   2, -UNI_IDEO }   /* ideo=no */,
+  {   208,  9488,  8219,   4,   8, UNI_INJAVANESE }   /* blk=javanese */,
+  {     1,  9488,  1033,   4,  11, UNI_ENCLOSEDCJK }   /* blk=enclosedcjk */,
+  {     5,  9277,  6193,   3,   4, UNI_HEBR }   /* sc=hebr */,
+  {     0,  1217,     0,   2,   0, UNI_SK }   /* sk */,
+  {     4, 10024,  7408,   3,  10, UNI_CN }   /* gc=unassigned */,
+  {     0, 10030,  6753,   4,  10, UNI_JT__L }   /* jt=leftjoining */,
+  {     0,  9277,  9032,   3,   6, UNI_WCHO }   /* sc=wancho */,
+  {    16,  9444,  5648,   4,   2, UNI_AGE__10 }   /* age=10 */,
+  {     0,  2280,  9705,   3,   3, UNI_ORKH }   /* isorkh */,
+  {     0,  4658,    26,  15,   1, UNI_GREXT }   /* graphemeextend=y */,
+  {     0,  9997,  3187,   3,  18, UNI_BC__ET }   /* bc=europeanterminator */,
+  {   329,  7155,  2204,   3,  13, UNI_ROHG }   /* ishanifirohingya */,
+  {     0,  9508,  8799,   5,   5, UNI_CCC__107 }   /* ccc=ccc107 */,
+  {    74,  9508,  9216,   5,   4, UNI_CCC__84 }   /* ccc=ccc84 */,
+  {     1,  8589,  8463,   7,   7, UNI_SC__KALI }   /* script=kayahli */,
+  {     0, 10291,   467,   5,   5, UNI_POSIXPUNCT }   /* posixpunct */,
+  {     0,  8780,  2855,   6,  19, UNI_MONGOLIANSUP }   /* block=mongoliansupplement */,
+  {     0,  5986,  7930,  13,   2, UNI_NV__14 }   /* numericvalue=14 */,
+  {     1,  8589,  3894,   8,  10, UNI_SGNW }   /* script=signwriting */,
+  {    88, 10182, 10215,   6,  21, UNI__PERL_IS_IN_MULTI_CHAR_FOLD }   /* _perl_is_in_multi_char_fold */,
+  {    14,  8589,  3115,   7,   4, UNI_SC__DEVA }   /* script=deva */,
+  {     5,  7318,  5648,  10,   2, UNI_IN__10 }   /* presentin=10 */,
+  {     9,  6229,  9836,  12,   4, UNI_JOINC }   /* joincontrol=true */,
+  {     4,  9508,  8793,   5,   5, UNI_CCC__103 }   /* ccc=ccc103 */,
+  {    10,  9488,  1944,   4,  22, UNI_EARLYDYNASTICCUNEIFORM }   /* blk=earlydynasticcuneiform */,
+  {     1,  9508,  9949,   4,   3, UNI_CCC__DA }   /* ccc=234 */,
+  {   224,  3836,  9620,  17,   4, UNI_LANA }   /* scriptextensions=lana */,
+  {   292,  9488,  4433,   4,  15, UNI_ARABICEXTA }   /* blk=arabicextendeda */,
+  {     0,  2224,  8625,   3,   6, UNI_SUPPUAA }   /* insuppuaa */,
+  {     1,   184,  8387,   3,   6, UNI_CJKEXTF }   /* iscjkextf */,
+  {     1,  3424,  1129,   3,   3, UNI_UCAS }   /* inucas */,
+  {   516,  5508, 10135,  14,   3, UNI_PATSYN }   /* patternsyntax=yes */,
+  {     5,  8688,    27,   3,   2, UNI_ALL }   /* isall */,
+  {     0,   184,  8876,   2,   6, UNI_GOTH }   /* isgothic */,
+  {     0,  5739,    36,  13,   1, UNI_GRBASE }   /* graphemebase=t */,
+  {     2,  9556,  4305,   4,   5, UNI_GCB__XX }   /* gcb=other */,
+  {    21,    21,  1677,   2,  23, UNI_LATINEXTADDITIONAL }   /* inlatinextendedadditional */,
+  {     0,   184,   400,   2,   6, UNI_CF }   /* isformat */,
+  {   261,  7739,     0,   8,   0, UNI_ids_values_index }   /* idstart= */,
+  {     0,    21,  8906,   2,   6, UNI_KANBUN }   /* inkanbun */,
+  {    37,    21,  5214,   2,  14, UNI_KANGXI }   /* inkangxiradicals */,
+  {   334,  9235,    26,   5,   1, UNI_CWCM }   /* cwcm=y */,
+  {    37,  8780,  6253,   6,  12, UNI_KHMERSYMBOLS }   /* block=khmersymbols */,
+  {     0, 10048,  7883,   3,   8, UNI_NV__1_SLASH_320 }   /* nv=3.13e-03 */,
+  {    36,  4033, 10170,  16,   2, UNI_CASEDLETTER }   /* generalcategory=l_ */,
+  {     0,   184,  4369,   2,  16, UNI_SYRIACSUP }   /* issyriacsupplement */,
+  {     5,  8688,  7506,   4,   7, UNI_ARABICPFB }   /* isarabicpfb */,
+  {     0,  7739,     0,   7,   0, UNI_IDS }   /* idstart */,
+  {     1,   184,  6939,   2,  11, UNI_SORA }   /* issorasompeng */,
+  {     0,  7088,  2449,  10,  20, UNI_BC__LRE }   /* bidiclass=lefttorightembedding */,
+  {     0,  1966,  2646,  22,  19, UNI_INSC__CONSONANTHEADLETTER }   /* indicsyllabiccategory=consonantheadletter */,
+  {   135,  7218,  1822,  10,   2, UNI_LB__NL }   /* linebreak=nl */,
+  {     1,  9768,  2409,   4,  10, UNI_GLAG }   /* scx=glagolitic */,
+  {     0,  8589,  4883,   7,  15, UNI_SARB }   /* script=oldsoutharabian */,
+  {   207,  3133,     0,   5,   0, UNI_EMOJI }   /* emoji */,
+  {     5,  9444,  7754,   4,   2, UNI_AGE__11 }   /* age=11 */,
+  {     0,  4033,  4583,  16,  15, UNI_PD }   /* generalcategory=dashpunctuation */,
+  {    32,  5522,     0,  14,   0, UNI_PHONETICEXTSUP }   /* phoneticextsup */,
+  {   128,  9508,  1755,   4,   2, UNI_CCC__DB }   /* ccc=db */,
+  {     0,  9488,  6840,   4,  11, UNI_INNANDINAGARI }   /* blk=nandinagari */,
+  {   392,  1537,  3481,  24,  12, UNI_INPC__LEFTANDRIGHT }   /* indicpositionalcategory=leftandright */,
+  {     0,  8997,    26,   5,   1, UNI_TERM }   /* term=y */,
+  {     1,  9277,  9748,   3,   4, UNI_RJNG }   /* sc=rjng */,
+  {     0,  1790,     3,  22,   1, -UNI_CWCM }   /* changeswhencasemapped=f */,
+  {     0,   184,  6133,   2,  12, UNI_ETHIOPICEXTA }   /* isethiopicexta */,
+  {    26,  3241,     0,  18,   0, UNI_GEORGIANSUP }   /* georgiansupplement */,
+  {     0,  2280,  7659,   4,   7, UNI_PERM }   /* isoldpermic */,
+  {     8,  5986,  7782,  13,   1, UNI_NV__3 }   /* numericvalue=3 */,
+  {     9,  9488,  9330,   4,   5, UNI_INTAILE }   /* blk=taile */,
+  {    33,  6229,     3,  12,   1, -UNI_JOINC }   /* joincontrol=f */,
+  {   128,   184,  1879,   3,  18, UNI_CJKCOMPATIDEOGRAPHS }   /* iscjkcompatideographs */,
+  {     3, 10030,  6708,   3,  11, UNI_JT__C }   /* jt=joincausing */,
+  {   141,  6231,   570,   3,  29, UNI_CJKEXTC }   /* incjkunifiedideographsextensionc */,
+  {    32,  9277,  3025,   3,   8, UNI_CHER }   /* sc=cherokee */,
+  {     0,  3836,  8344,  17,   4, UNI_BENG }   /* scriptextensions=beng */,
+  {     2,  3151,  9836,  18,   4, UNI_EPRES }   /* emojipresentation=true */,
+  {     0,  9262,   751,   3,   2, UNI_SB__CL }   /* sb=cl */,
+  {    37,  6231,  8373,   3,   6, UNI_CJKEXTD }   /* incjkextd */,
+  {     4,  3836,  9793,  18,   3, UNI_SOGO }   /* scriptextensions=sogo */,
+  {     1,  3836,  8456,  17,   7, UNI_KNDA }   /* scriptextensions=kannada */,
+  {     4,  9488,  4385,   4,   6, UNI_INTANGUT }   /* blk=tangut */,
+  {    17,  8428,     0,   7,   0, UNI_GRAN }   /* grantha */,
+  {    48, 10006,     3,   3,   1, -UNI_DI }   /* di=f */,
+  {    32,  1552,  1529,  11,   7, UNI__PERL_SURROGATE }   /* category=surrogate */,
+  {    18, 10313,  3379,   7,   5, UNI_XPOSIXBLANK }   /* ishorizspace */,
+  {     0,  8589,  3025,   7,   4, UNI_CHER }   /* script=cher */,
+  {   193,  9270,  6983,   5,  11, UNI_INPC__TOPANDRIGHT }   /* inpc=topandright */,
+  {     0,  2779, 10135,  19,   3, UNI_IDST }   /* idstrinaryoperator=yes */,
+  {     0, 10027,  5424,   3,  14, UNI_JG__MANICHAEANYODH }   /* jg=manichaeanyodh */,
+  {     1, 10296,   468,   3,   4, UNI_P }   /* ispunct */,
+  {     0,  9508,  9161,   5,   4, UNI_CCC__26 }   /* ccc=ccc26 */,
+  {   290,  5986,  8744,  13,   2, UNI_NV__70 }   /* numericvalue=70 */,
+  {     1,  7218,  4898,  10,  15, UNI_LB__OP }   /* linebreak=openpunctuation */,
+  {     0,  7088,  3205,  10,  18, UNI_BC__FSI }   /* bidiclass=firststrongisolate */,
+  {     3,  6025,     0,  12,   0, UNI_ALPHABETICPF }   /* alphabeticpf */,
+  {     0,  9768,  9065,   4,   5, UNI_ADLM }   /* scx=adlam */,
+  {   257,  8519,     0,   9,   0, UNI_NFKDQC__N }   /* nfkdqc=no */,
+  {     4,  9488,  3785,   4,  10, UNI_INMANICHAEAN }   /* blk=manichaean */,
+  {     0,   117,   447,   3,  17, UNI_IDEOGRAPHICSYMBOLS }   /* inideographicsymbols */,
+  {    10,  8780,   867,   6,  28, UNI_PHONETICEXTSUP }   /* block=phoneticextensionssupplement */,
+  {    33,  8589,  9008,   7,   6, UNI_SC__THAA }   /* script=thaana */,
+  {     1,  2314,     0,   3,   0, UNI_XPOSIXXDIGIT }   /* hex */,
+  {     1,  9508,  7754,   4,   2, UNI_CCC__11 }   /* ccc=11 */,
+  {    34,  5791,  5908,  13,  13, UNI_JG__MANICHAEANTAW }   /* joininggroup=manichaeantaw */,
+  {     0,  3836,  8123,  17,   4, UNI_BUGI }   /* scriptextensions=bugi */,
+  {   118, 10048,  7891,   3,   8, UNI_NV__1_SLASH_3 }   /* nv=3.33e-01 */,
+  {     0,  8575,  1025,   7,   2, -UNI_PATSYN }   /* patsyn=no */,
+  {     0,   184,  1087,   2,  26, UNI_PCM }   /* isprependedconcatenationmark */,
+  {     0,  9015, 10135,   5,   3, UNI_IDEO }   /* ideo=yes */,
+  {    75, 10296,   468,   3,  10, UNI_P }   /* ispunctuation */,
+  {   108,  5986,  8756,  13,   5, UNI_NV__90000 }   /* numericvalue=90000 */,
+  {    32,  8589,  8652,   7,   7, UNI_TAVT }   /* script=taiviet */,
+  {     4,  2224,  1320,   3,  24, UNI_SYMBOLSANDPICTOGRAPHSEXTA }   /* insymbolsandpictographsexta */,
+  {    90,  8435,  9255,   7,   5, -UNI_GRBASE }   /* grbase=false */,
+  {    30,  1552,  3277,   9,  18, UNI_PI }   /* category=initialpunctuation */,
+  {     0,  8344,     0,   4,   0, UNI_BENG }   /* beng */,
+  {     1,  3169,     0,   8,   0, UNI_ETHI }   /* ethiopic */,
+  {     1,  1417,  8714,  24,   2, UNI_CCC__30 }   /* canonicalcombiningclass=30 */,
+  {     0,  9508,    16,   4,   1, UNI_CCC__B }   /* ccc=b */,
+  {   593,  9488,  9325,   4,   5, UNI_INRUNIC }   /* blk=runic */,
+  {     1,  7218,  5298,  10,  14, UNI_LB__BK }   /* linebreak=mandatorybreak */,
+  {    96,  3439,     0,  12,   0, UNI_SMALLKANAEXT }   /* smallkanaext */,
+  {   321,  3836,  9002,  17,   6, UNI_TELU }   /* scriptextensions=telugu */,
+  {     2,  9768,  9504,   4,   4, UNI_CANS }   /* scx=cans */,
+  {   338,  8688,  9453,   3,   3, UNI_AHOM }   /* isahom */,
+  {     0,  7318,  7826,  10,   4, UNI_IN__12 }   /* presentin=12.0 */,
+  {   518,  8688,   980,   3,  26, UNI_ALPHABETICPF }   /* isalphabeticpresentationforms */,
+  {     0,  2409,     0,  10,   0, UNI_GLAG }   /* glagolitic */,
+  {     1,  9508,  8813,   4,   3, UNI_CCC__122 }   /* ccc=122 */,
+  {   185,  1417,  1219,  24,   3, UNI_CCC__214 }   /* canonicalcombiningclass=ata */,
+  {    47,  9444,  9970,   4,   3, UNI_AGE__5_DOT_2 }   /* age=5.2 */,
+  {    70,  9260,  9836,   5,   4, UNI_IDSB }   /* idsb=true */,
+  {   416,  2224,  2913,   3,  18, UNI_SUNDANESESUP }   /* insundanesesupplement */,
+  {     0, 10048,  5648,   3,   5, UNI_NV__10000 }   /* nv=10000 */,
+  {     0, 10027,  5869,   3,  13, UNI_JG__MANICHAEANMEM }   /* jg=manichaeanmem */,
+  {    72, 10132,  5585,   3,   2, UNI_WB__EB }   /* wb=eb */,
+  {     1,  6241,  6752,  12,  11, UNI_JT__L }   /* joiningtype=leftjoining */,
+  {   129,  7318,  7877,  10,   2, UNI_IN__13 }   /* presentin=13 */,
+  {     0,  8575,    26,   7,   1, UNI_PATSYN }   /* patsyn=y */,
+  {    68,  9270,  4988,   5,  15, UNI_LOE }   /* inpc=visualorderleft */,
+  {     8,  5674,  9836,  13,   4, UNI_BIDIM }   /* bidimirrored=true */,
+  {     1,  5746,     0,   5,   0, UNI_EBASE }   /* ebase */,
+  {     7, 10027,  9280,   3,   5, UNI_JG__KHAPH }   /* jg=khaph */,
+  {     0,  9277,  8924,   3,   4, UNI_LEPC }   /* sc=lepc */,
+  {     0,  9277,  9676,   3,   4, UNI_NARB }   /* sc=narb */,
+  {     0,    21,  5284,   2,  14, UNI_LISUSUP }   /* inlisusupplement */,
+  {     2, 10024,  3349,   3,  18, UNI_ZP }   /* gc=paragraphseparator */,
+  {    84, 10126,  3493,   3,  18, UNI_VO__TR }   /* vo=transformedrotated */,
+  {     0,  9277,  9660,   3,   4, UNI_SC__MLYM }   /* sc=mlym */,
+  {   192,  9768,  3895,   5,   3, UNI_SGNW }   /* scx=sgnw */,
+  {    25,  6229,     0,  12,   0, UNI_joinc_values_index }   /* joincontrol= */,
+  {     0,   184,  1769,   3,  20, UNI_CWCF }   /* ischangeswhencasefolded */,
+  {     0,  8780,  1901,   7,  21, UNI_INDICNUMBERFORMS }   /* block=commonindicnumberforms */,
+  {     0,  9768,  7666,   4,   9, UNI_ORKH }   /* scx=oldturkic */,
+  {     5,  8780,  8463,   6,   7, UNI_KALI }   /* block=kayahli */,
+  {     6,  8147,  9836,   8,   4, UNI_EXTPICT }   /* extpict=true */,
+  {     0,  8780,  2245,   6,  11, UNI_INMEETEIMAYEK }   /* block=meeteimayek */,
+  {     3,  9277,  9692,   3,   4, UNI_NSHU }   /* sc=nshu */,
+  {     2,  2245,     0,  11,   0, UNI_MTEI }   /* meeteimayek */,
+  {   512,  9508,  8807,   4,   3, UNI_CCC__118 }   /* ccc=118 */,
+  {   135,  9270,  2988,   5,  19, UNI_INPC__TOPANDBOTTOMANDLEFT }   /* inpc=topandbottomandleft */,
+  {     1,  2485,     0,   4,   0, UNI_MONG }   /* mong */,
+  {     0,  9488,  3457,   4,  11, UNI_TAIXUANJING }   /* blk=taixuanjing */,
+  {   150, 10048,  5648,   3,   8, UNI_NV__10000000 }   /* nv=10000000 */,
+  {     2,  9488,  8888,   4,   6, UNI_INHATRAN }   /* blk=hatran */,
+  {     0,  2280,  8562,   3,   6, UNI_OSMA }   /* isosmanya */,
+  {     1,  9488,  9860,   4,   3, UNI_INVAI }   /* blk=vai */,
+  {   714,  9277,  8901,   4,   5, UNI_SC__KTHI }   /* sc=kaithi */,
+  {    69, 10296,  3599,   3,   3, UNI_PAUC }   /* ispauc */,
+  {   184,  1552,  8855,   9,   2, UNI_CF }   /* category=cf */,
+  {     2, 10027,  7045,   3,   2, UNI_JG__FE }   /* jg=fe */,
+  {   198, 10048,  7859,   3,   3, UNI_NV__200 }   /* nv=200 */,
+  {   288, 10027, 10072,   3,   3, UNI_JG__TAH }   /* jg=tah */,
+  {   128,  3097,  1253,  18,   7, UNI_DT__INIT }   /* decompositiontype=initial */,
+  {     1,  3836,  8912,  17,   6, UNI_KHOJ }   /* scriptextensions=khojki */,
+  {     0,  3836,  7684,  17,   4, UNI_PAUC }   /* scriptextensions=pauc */,
+  {     0,  5242,     0,  14,   0, UNI_LATINEXTC }   /* latinextendedc */,
+  {    11,  2569,     0,  20,   1, UNI_VO__U }   /* verticalorientation=u */,
+  {   585,  5986,  9108,  13,   2, UNI_NV__15 }   /* numericvalue=15 */,
+  {     0,  3241,     0,   4,   0, UNI_GEOR }   /* geor */,
+  {     0,  1013,     0,   5,   0, UNI_GREK }   /* greek */,
+  {     0,   184,  5214,   2,  14, UNI_KANGXI }   /* iskangxiradicals */,
+  {    12,  4943,     0,  15,   0, UNI_TITLE }   /* titlecaseletter */,
+  {    11,  9596,  6763,   4,  11, UNI_LB__H3 }   /* hst=lvtsyllable */,
+  {     0,  5324,  8487,   5,   4, UNI_INMANDAIC }   /* inmandaic */,
+  {     0,  6576,     0,  11,   0, UNI_alpha_values_index }   /* alphabetic= */,
+  {     0,  3836,  8428,  17,   7, UNI_GRAN }   /* scriptextensions=grantha */,
+  {   513,  5986,  8744,  13,   3, UNI_NV__700 }   /* numericvalue=700 */,
+  {     0, 10009,   567,   3,   2, UNI_DT__NB }   /* dt=nb */,
+  {     4,  8589,  8219,   7,   8, UNI_SC__JAVA }   /* script=javanese */,
+  {     9,  8780,  2054,   6,  22, UNI_MODIFIERLETTERS }   /* block=spacingmodifierletters */,
+  {   516,  3457,     0,  18,   0, UNI_TAIXUANJING }   /* taixuanjingsymbols */,
+  {     4,  7088,  6037,  10,  12, UNI_BC__AL }   /* bidiclass=arabicletter */,
+  {   128,  9488,   382,   4,  32, UNI_EGYPTIANHIEROGLYPHFORMATCONTROLS }   /* blk=egyptianhieroglyphformatcontrols */,
+  {    25,   148,     0,  35,   0, UNI_DIACRITICALSSUP }   /* combiningdiacriticalmarkssupplement */,
+  {     0,  1552,  2061,   9,  14, UNI_LM }   /* category=modifierletter */,
+  {     2,  9015,  9836,   5,   4, UNI_IDEO }   /* ideo=true */,
+  {     2,  7325, 10090,   3,   3, UNI_IN__4 }   /* in=v40 */,
+  {     1,  7158,  9255,  10,   5, -UNI_DIA }   /* diacritic=false */,
+  {     2,  3836,  9580,  17,   4, UNI_HANO }   /* scriptextensions=hano */,
+  {     7,  8780,  1585,   6,  23, UNI_BYZANTINEMUSIC }   /* block=byzantinemusicalsymbols */,
+  {     0,  5791,  5172,  13,  14, UNI_JG__HAMZAONHEHGOAL }   /* joininggroup=hamzaonhehgoal */,
+  {    13,  2280,  6483,   4,  10, UNI_HUNG }   /* isoldhungarian */,
+  {     0,  8589,  9636,   7,   4, UNI_SC__LINB }   /* script=linb */,
+  {     0,  8780,    78,   6,  35, UNI_ARABICMATH }   /* block=arabicmathematicalalphabeticsymbols */,
+  {     0,  8344,     0,   7,   0, UNI_BENG }   /* bengali */,
+  {     0,  8291,     0,   8,   0, UNI_TAGB }   /* tagbanwa */,
+  {     3, 10132,  2444,   3,   2, UNI_LB__HL }   /* wb=hl */,
+  {     0,  8589,  9860,   7,   4, UNI_VAI }   /* script=vaii */,
+  {   320,  8589,  8936,   7,   6, UNI_LYCI }   /* script=lycian */,
+  {     0,  9260,    26,   5,   1, UNI_IDSB }   /* idsb=y */,
+  {    20,  9524,     0,   3,   0, UNI_CWT }   /* cwt */,
+  {   512,  8978,    26,   6,   1, UNI__PERL_PATWS }   /* patws=y */,
+  {   256,  9892,     0,   4,   0, UNI_QAAI }   /* zinh */,
+  {     3, 10048,  8732,   3,   4, UNI_NV__5000 }   /* nv=5000 */,
+  {     0,  9488,  7514,   5,   8, UNI_INBHAIKSUKI }   /* blk=bhaiksuki */,
+  {    99,  9488,  2950,   4,  19, UNI_SUPARROWSB }   /* blk=supplementalarrowsb */,
+  {    11,  8786,     0,   4,   0, UNI_CARI }   /* cari */,
+  {     2,  2779,  9255,  19,   5, -UNI_IDST }   /* idstrinaryoperator=false */,
+  {     2,  5986,  7765,  13,   1, UNI_NV__2 }   /* numericvalue=2 */,
+  {   129,   184,  8498,   2,   7, UNI_MULT }   /* ismultani */,
+  {     3, 10027,  3802,   3,  17, UNI_JG__MANICHAEANHUNDRED }   /* jg=manichaeanhundred */,
+  {    27,  4033,  1899,  16,   2, UNI_PC }   /* generalcategory=pc */,
+  {     2, 10024,  6862,   3,  11, UNI_NO }   /* gc=othernumber */,
+  {     0,   184,  4257,   2,  16, UNI_MISCMATHSYMBOLSB }   /* ismiscmathsymbolsb */,
+  {    65,  3887,     0,  17,   0, UNI_SUTTONSIGNWRITING }   /* suttonsignwriting */,
+  {     0,  8519, 10135,   7,   3, UNI_DT__NONE }   /* nfkdqc=yes */,
+  {    47,  7249,     2,   5,   1, UNI_CARI }   /* iscari */,
+  {     0,  8888,     0,   6,   0, UNI_HATR }   /* hatran */,
+  {     0,  3097,  8948,  18,   6, UNI_DT__NAR }   /* decompositiontype=narrow */,
+  {     3,  9488,  9305,   4,   5, UNI_INNUSHU }   /* blk=nushu */,
+  {    12,  9277,  9609,   4,   3, UNI_KITS }   /* sc=kits */,
+  {     0,  9346,    26,   4,   1, UNI_IDC }   /* idc=y */,
+  {     0,  6928,    26,  11,   1, UNI_SD }   /* softdotted=y */,
+  {     1,   184,  3374,   2,  10, UNI_XPOSIXSPACE }   /* iswhitespace */,
+  {   290,  6554,     1,  11,   1, -UNI_IDC }   /* idcontinue=n */,
+  {    48,  7438,  1822,  10,   2, UNI_WB__NL }   /* wordbreak=nl */,
+  {    53,  4916,  1287,   4,   2, UNI_TELU }   /* istelu */,
+  {    97,   184,  2141,   3,   7, UNI_CYRL }   /* iscyrillic */,
+  {   513,  9277,  4928,   3,   5, UNI_SC__TAML }   /* sc=tamil */,
+  {     6,  3836,  8477,  17,   4, UNI_MAKA }   /* scriptextensions=maka */,
+  {     1,  6205,     1,  12,   1, -UNI_IDEO }   /* ideographic=n */,
+  {   153,   184,  5606,   2,  14, UNI_SUPPUNCTUATION }   /* issuppunctuation */,
+  {     2,  7358,     0,   4,   0, UNI_SAUR }   /* saur */,
+  {     4,  9508,  9937,   4,   3, UNI_CCC__AL }   /* ccc=228 */,
+  {     0,  8780,  5200,   6,  14, UNI_KANASUP }   /* block=kanasupplement */,
+  {     9,  9277,  8179,   3,   8, UNI_SC__GURU }   /* sc=gurmukhi */,
+  {     0,  9488,  9002,   4,   6, UNI_INTELUGU }   /* blk=telugu */,
+  {     6,  6231,  8380,   3,   6, UNI_CJKEXTE }   /* incjkexte */,
+  {   249, 10333,     0,   3,   0, UNI_S }   /* iss */,
+  {     1,  8589,  9740,   7,   4, UNI_SC__QAAI }   /* script=qaai */,
+  {     1,  9508,  9176,   5,   4, UNI_CCC__29 }   /* ccc=ccc29 */,
+  {     7, 10033,   533,   3,   2, UNI_LB__NS }   /* lb=ns */,
+  {    24,  7540,     0,   8,   0, UNI_EXT }   /* extender */,
+  {     1,  8780,  3115,   6,  10, UNI_INDEVANAGARI }   /* block=devanagari */,
+  {     1,  9277,    78,   3,   6, UNI_SC__ARAB }   /* sc=arabic */,
+  {     3,  9768,  9720,   4,   4, UNI_PHLP }   /* scx=phlp */,
+  {     0,  8589,  9452,   7,   4, UNI_AHOM }   /* script=ahom */,
+  {    10,  8414,     0,   4,   0, UNI_ELBA }   /* elba */,
+  {     0,  9508,  5648,   4,   2, UNI_CCC__10 }   /* ccc=10 */,
+  {     0, 10024,  1217,   3,   2, UNI_SK }   /* gc=sk */,
+  {     4, 10182, 10279,   6,   9, UNI__PERL_QUOTEMETA }   /* _perl_quotemeta */,
+  {     0,  4033,    38,  16,   2, UNI_XPOSIXDIGIT }   /* generalcategory=nd */,
+  {   131,  3853,     0,  16,   0, UNI_STERM }   /* sentenceterminal */,
+  {    37,   184,  5804,   2,  13, UNI_KANAEXTA }   /* iskanaextendeda */,
+  {   357,   861,     0,   6,   0, UNI_ARROWS }   /* arrows */,
+  {   133,   184,  8147,   2,   7, UNI_EXTPICT }   /* isextpict */,
+  {    64,  3836,  8638,  17,   7, UNI_TGLG }   /* scriptextensions=tagalog */,
+  {     1,    21,  2330,   3,  19, UNI_INANATOLIANHIEROGLYPHS }   /* inanatolianhieroglyphs */,
+  {     7,   184,  7438,   2,   4, UNI_XPOSIXWORD }   /* isword */,
+  {     2,   184,  7630,   2,   9, UNI_TALU }   /* isnewtailue */,
+  {    35,  5986,  9913,  13,   3, UNI_NV__2_SLASH_3 }   /* numericvalue=2/3 */,
+  {   146,  9350,    26,   5,   1, UNI_XIDS }   /* xids=y */,
+  {     0,  8780,  2120,   7,  20, UNI_CJKRADICALSSUP }   /* block=cjkradicalssupplement */,
+  {    33,  1922,     0,  12,   0, UNI_DIACRITICALS }   /* diacriticals */,
+  {     0,  1552, 10178,   9,   2, UNI_ZP }   /* category=zp */,
+  {     0, 10027,  8918,   3,   6, UNI_JG__LAMADH }   /* jg=lamadh */,
+  {     0,  8400,     0,   7,   0, UNI_compex_values_index }   /* compex= */,
+  {   215,  7278,     0,  10,   0, UNI_XPEO }   /* oldpersian */,
+  {   256,  4916,  4386,   3,   5, UNI_TANG }   /* istangut */,
+  {   516,  3853,    36,  17,   1, UNI_STERM }   /* sentenceterminal=t */,
+  {     0, 10333,  2288,   3,   3, UNI_SINH }   /* issinh */,
+  {     0,  9277,  3893,   3,  11, UNI_SGNW }   /* sc=signwriting */,
+  {   171,  1269,     1,  25,   1, -UNI_COMPEX }   /* fullcompositionexclusion=n */,
+  {   311,  9270,  2555,   5,  14, UNI_INPC__BOTTOMANDRIGHT }   /* inpc=bottomandright */,
+  {     0,  2224,  6962,   3,  10, UNI_SUPERANDSUB }   /* insuperandsub */,
+  {   314,  3241,     0,  11,   0, UNI_GEORGIANSUP }   /* georgiansup */,
+  {     0,  5791,  5869,  13,  13, UNI_JG__MANICHAEANMEM }   /* joininggroup=manichaeanmem */,
+  {   152,  5986,  8035,  13,   8, UNI_NV__3_SLASH_4 }   /* numericvalue=7.50e-01 */,
+  {   288,  8858,     0,   6,   0, UNI_ecomp_values_index }   /* ecomp= */,
+  {     0,  7739, 10135,   8,   3, UNI_IDS }   /* idstart=yes */,
+  {     1,  8780,  2912,   6,  19, UNI_SUNDANESESUP }   /* block=sundanesesupplement */,
+  {   512, 10060,  9255,   3,   5, -UNI_RI }   /* ri=false */,
+  {     4,  8589,  8477,   7,   4, UNI_MAKA }   /* script=maka */,
+  {     0,  9616,     0,   4,   0, UNI_KTHI }   /* kthi */,
+  {    35,  8589,  8442,   7,   7, UNI_SC__HANO }   /* script=hanunoo */,
+  {   603,  5791,  7148,  13,  10, UNI_JG__DALATHRISH }   /* joininggroup=dalathrish */,
+  {     2,  7088,     1,  11,   1, UNI_BC__BN }   /* bidiclass=bn */,
+  {   265,  2779,     0,   4,   0, UNI_IDST }   /* idst */,
+  {    28, 10048,  8035,   3,   8, UNI_NV__3_SLASH_4 }   /* nv=7.50e-01 */,
+  {     0, 10033,   495,   3,   7, UNI_LB__NU }   /* lb=numeric */,
+  {     0,  4989,    58,   3,   4, UNI_UIDEO }   /* isuideo */,
+  {    13,  8768,  9255,   6,   5, -UNI_BIDIC }   /* bidic=false */,
+  {   292,  3836,  2409,  17,   4, UNI_GLAG }   /* scriptextensions=glag */,
+  {     1,  9277,  9652,   3,   4, UNI_MERC }   /* sc=merc */,
+  {     1,  9277,  8666,   3,   7, UNI_SC__TIRH }   /* sc=tirhuta */,
+  {    64,  9277,  8291,   3,   4, UNI_SC__TAGB }   /* sc=tagb */,
+  {    13,  4916,  8639,   3,   6, UNI_TGLG }   /* istagalog */,
+  {     0,  9277,  8470,   3,   7, UNI_SC__LINA }   /* sc=lineara */,
+  {     5,   184,  5830,   2,  13, UNI_LOWSURROGATES }   /* islowsurrogates */,
+  {   714,   184,  2855,   2,   9, UNI_MONG }   /* ismongolian */,
+  {    73,  9070,     1,   5,   1, -UNI_POSIXXDIGIT }   /* ahex=n */,
+  {    36,  9488,  1018,   4,   5, UNI_MUSIC }   /* blk=music */,
+  {    65,  5746,  1025,   6,   2, -UNI_EBASE }   /* ebase=no */,
+  {   161, 10288,  7438,   8,   4, UNI_XPOSIXWORD }   /* isxposixword */,
+  {    25,  8107,     0,   8,   0, UNI_BALI }   /* balinese */,
+  {     2,  4613,     0,  15,   0, UNI_DIACRITICALSSUP }   /* diacriticalssup */,
+  {     0,  9596,  7720,   4,   9, UNI_GCB__V }   /* hst=voweljamo */,
+  {   212,  8780,  7684,   6,   9, UNI_INPAUCINHAU }   /* block=paucinhau */,
+  {     1,  9262,  1823,   3,   5, UNI_SB__LO }   /* sb=lower */,
+  {     0,  8498,     0,   4,   0, UNI_MULT }   /* mult */,
+  {     0,  2245,     0,  21,   0, UNI_MEETEIMAYEKEXT }   /* meeteimayekextensions */,
+  {     0,  9275,  2608,   5,  19, UNI_INSC__BRAHMIJOININGNUMBER }   /* insc=brahmijoiningnumber */,
+  {   543,  9488,  3052,   4,   9, UNI_HALFMARKS }   /* blk=halfmarks */,
+  {     0,  3097,  2785,  18,   3, UNI_DT__NAR }   /* decompositiontype=nar */,
+  {    16,  4916,  5850,   3,   3, UNI_TAML }   /* istaml */,
+  {     0,  3717,  7338,  17,  10, UNI_IDENTIFIERSTATUS__RESTRICTED }   /* identifierstatus=restricted */,
+  {     3,  4129,     0,  16,   0, UNI_LATIN1 }   /* latin1supplement */,
+  {     0,  3836,  2329,  17,  20, UNI_HLUW }   /* scriptextensions=anatolianhieroglyphs */,
+  {     0, 10024,  4245,   3,  10, UNI_SM }   /* gc=mathsymbol */,
+  {   389,   184,  1294,   2,  25, UNI_SUPERANDSUB }   /* issuperscriptsandsubscripts */,
+  {     0,  5674, 10135,  13,   3, UNI_BIDIM }   /* bidimirrored=yes */,
+  {    73,  4542,  1633,   4,  21, UNI_GEOMETRICSHAPESEXT }   /* ingeometricshapesextended */,
+  {     1,  9768,  9860,   4,   4, UNI_VAI }   /* scx=vaii */,
+  {  1024,  6576,  9255,  11,   5, -UNI_XPOSIXALPHA }   /* alphabetic=false */,
+  {     0,  5228,     0,  14,   0, UNI_LATINEXTB }   /* latinextendedb */,
+  {     0,    21,  3421,   2,  18, UNI_RUMI }   /* inruminumeralsymbols */,
+  {     0,  5986,  7826,  13,   2, UNI_NV__12 }   /* numericvalue=12 */,
+  {   513,  9488,  4129,   4,  16, UNI_LATIN1 }   /* blk=latin1supplement */,
+  {     1, 10291,  7438,   5,   4, UNI_POSIXWORD }   /* posixword */,
+  {     0,  8960,    26,   6,   1, UNI_NFCQC__Y }   /* nfcqc=y */,
+  {   199,  9508,  9472,   4,   4, UNI_WB__EB }   /* ccc=atbl */,
+  {     2,  9277,  8610,   3,   7, UNI_SIDD }   /* sc=siddham */,
+  {     0, 10009,  9868,   3,   4, UNI_EA__F }   /* dt=wide */,
+  {     0, 10048,  7469,   3,   8, UNI_NV__1_SLASH_2 }   /* nv=5.00e-01 */,
+  {    16,  5986,  8756,  13,   2, UNI_NV__90 }   /* numericvalue=90 */,
+  {     3,  2760,    36,  19,   1, UNI_GCB__T }   /* hangulsyllabletype=t */,
+  {    31,  9568,     0,   4,   0, UNI_GREK }   /* grek */,
+  {     0,   184,  8421,   2,   7, UNI_ELYM }   /* iselymaic */,
+  {     5,  3937,     0,   8,   0, UNI_BOPO }   /* bopomofo */,
+  {   815,  8680,     0,   7,   0, UNI_ZZZZ }   /* unknown */,
+  {     3,  5324,     0,  12,   0, UNI_INMANICHAEAN }   /* inmanichaean */,
+  {     2,  3836,  1222,  17,   4, UNI_KANA }   /* scriptextensions=kana */,
+  {     0,  9285,     0,   4,   0, UNI_LIMB }   /* limb */,
+  {    71,   184,  3115,   2,  13, UNI_DEVANAGARIEXT }   /* isdevanagariext */,
+  {   518,  1505,  3827,   4,   5, UNI_INGRANTHA }   /* ingrantha */,
+  {   151, 10033,  5298,   3,  14, UNI_LB__BK }   /* lb=mandatorybreak */,
+  {     0,  8589,  9816,   7,   4, UNI_TAVT }   /* script=tavt */,
+  {    67,  9488,  9245,   4,   5, UNI_INDOGRA }   /* blk=dogra */,
+  {     0,  3836,  9752,  17,   4, UNI_ROHG }   /* scriptextensions=rohg */,
+  {    32,  9270,  2549,   5,  12, UNI_INPC__TOPANDBOTTOM }   /* inpc=topandbottom */,
+  {     0,   184,  5003,   2,  15, UNI_ZANB }   /* iszanabazarsquare */,
+  {     6,  8203,     0,   8,   0, UNI_JAMOEXTA }   /* jamoexta */,
+  {     1,  5037,     0,   8,   0, UNI_XPOSIXXDIGIT }   /* hexdigit */,
+  {    48,  9335,     0,   4,   0, UNI_TAKR }   /* takr */,
+  {     0,  1537,  1924,   4,  10, UNI_DIACRITICALS }   /* indiacriticals */,
+  {     1,  9444,  7877,   4,   2, UNI_AGE__13 }   /* age=13 */,
+  {     0,   727,     0,   2,   0, UNI_MN }   /* mn */,
+  {     1,  9488,  2969,   4,  19, UNI_SUPARROWSC }   /* blk=supplementalarrowsc */,
+  {     1,  5986,  8027,  13,   8, UNI_NV__15_SLASH_2 }   /* numericvalue=7.50e+00 */,
+  {    34,  4838,     0,  16,   0, UNI_NFKCQC__N }   /* nfkcquickcheck=n */,
+  {     0,  4401,     0,   9,   0, UNI_TANGUTSUP }   /* tangutsup */,
+  {    32,  8589,  8131,   7,   8, UNI_SC__DUPL }   /* script=duployan */,
+  {    21,  9275,  4913,   5,  15, UNI_INSC__REGISTERSHIFTER }   /* insc=registershifter */,
+  {    52,  9528,     0,   3,   0, UNI_CWU }   /* cwu */,
+  {     2,   184,  6061,   2,  11, UNI_BIDIC }   /* isbidicontrol */,
+  {     0, 10033,  3969,   3,  16, UNI_LB__CP }   /* lb=closeparenthesis */,
+  {   128,  9488,  4703,   4,  15, UNI_INIMPERIALARAMAIC }   /* blk=imperialaramaic */,
+  {    84,  3529,    26,  18,   1, UNI_VS }   /* variationselector=y */,
+  {     0,  8582,     0,   7,   0, UNI_PHAG }   /* phagspa */,
+  {   545,  9277,  8491,   3,   4, UNI_MARC }   /* sc=marc */,
+  {     0, 10048,  8083,   3,   8, UNI_NV__11_SLASH_12 }   /* nv=9.17e-01 */,
+  {     0,  9768,    78,   4,   6, UNI_ARAB }   /* scx=arabic */,
+  {     4,  9452,     0,   4,   0, UNI_AHOM }   /* ahom */,
+  {     5,   184,  4241,   2,  16, UNI_MISCMATHSYMBOLSA }   /* ismiscmathsymbolsa */,
+  {   129,  9488,  3169,   4,  11, UNI_ETHIOPICSUP }   /* blk=ethiopicsup */,
+  {     0,  6229,     0,   5,   0, UNI_JOINC }   /* joinc */,
+  {     0,  9277,  5284,   3,   4, UNI_LISU }   /* sc=lisu */,
+  {   928,  8315,     0,   8,   0, UNI_UGAR }   /* ugaritic */,
+  {     0,  1552,   400,   9,   6, UNI_CF }   /* category=format */,
+  {     0, 10048,  9994,   3,   3, UNI_NV__9_SLASH_2 }   /* nv=9/2 */,
+  {   279, 10048,  7811,   3,   8, UNI_NV__1_SLASH_6 }   /* nv=1.67e-01 */,
+  {     0,  8978,  9255,   6,   5, -UNI__PERL_PATWS }   /* patws=false */,
+  {   581,  3836,  1677,  17,   5, UNI_LATN }   /* scriptextensions=latin */,
+  {   562,  9488,  1441,   4,  24, UNI_CJKSYMBOLS }   /* blk=cjksymbolsandpunctuation */,
+  {    32,  1417,  8819,  24,   3, UNI_CCC__129 }   /* canonicalcombiningclass=129 */,
+  {     1,  5452,    17,  15,   1, UNI_COMPEX }   /* nfcquickcheck=no */,
+  {   128,  9277,  9504,   3,   4, UNI_CANS }   /* sc=cans */,
+  {     0, 10006,     0,   3,   0, UNI_di_values_index }   /* di= */,
+  {     2,  8780,  6277,   6,   7, UNI_MAHJONG }   /* block=mahjong */,
+  {   145,  8780,  5186,   6,  14, UNI_HIGHSURROGATES }   /* block=highsurrogates */,
+  {     0,  1417,  9188,  24,   2, UNI_CCC__31 }   /* canonicalcombiningclass=31 */,
+  {     0,  1856,  9836,  22,   4, UNI_CWU }   /* changeswhenuppercased=true */,
+  {   139,  9277,  9588,   3,   4, UNI_HMNG }   /* sc=hmng */,
+  {   716,  9265,    26,   5,   1, UNI_IDST }   /* idst=y */,
+  {    12,  4688,  2023,  15,   9, UNI_IDENTIFIERTYPE__TECHNICAL }   /* identifiertype=technical */,
+  {     0,  7218, 10164,  10,   2, UNI_GCB__V }   /* linebreak=jv */,
+  {     1, 10182,  1527,   6,   9, UNI__PERL_SURROGATE }   /* _perl_surrogate */,
+  {     0,  2224,   350,   3,  32, UNI_SUPSYMBOLSANDPICTOGRAPHS }   /* insupplementalsymbolsandpictographs */,
+  {     0,  1505,  5161,   5,  11, UNI_INGREEK }   /* ingreekandcoptic */,
+  {    65,  8589,  4868,   7,  15, UNI_NARB }   /* script=oldnortharabian */,
+  {     0,  8589,  9656,   7,   4, UNI_MIAO }   /* script=miao */,
+  {   301,   184,  4583,   2,  15, UNI_PD }   /* isdashpunctuation */,
+  {     1,  9508,  9171,   5,   4, UNI_CCC__28 }   /* ccc=ccc28 */,
+  {     1,  4113,    67,   3,   4, UNI_VSSUP }   /* invssup */,
+  {   390,  2280,  4306,   3,  15, UNI_PO }   /* isotherpunctuation */,
+  {   138, 10024,  1465,   3,  13, UNI_M }   /* gc=combiningmark */,
+  {     1,  9508,  7877,   4,   2, UNI_CCC__13 }   /* ccc=13 */,
+  {     4,   184,  4129,   2,   6, UNI_LATIN1 }   /* islatin1 */,
+  {   147,  6241,  6529,  12,  12, UNI_JT__R }   /* joiningtype=rightjoining */,
+  {     2,  6231,  2667,   4,   9, UNI_COUNTINGROD }   /* incountingrod */,
+  {     2,  2280,  3332,   3,  17, UNI_ORNAMENTALDINGBATS }   /* isornamentaldingbats */,
+  {     0,  5986,  7771,  13,   8, UNI_NV__1_SLASH_80 }   /* numericvalue=1.25e-02 */,
+  {     0,  1417,    24,  24,   1, UNI_CCC__L }   /* canonicalcombiningclass=l */,
+  {     2,  9020,     3,   6,   1, -UNI_XPOSIXUPPER }   /* upper=f */,
+  {     3,  1746,     1,  22,   1, UNI_BPT__N }   /* bidipairedbrackettype=n */,
+  {     1,  6730,     0,  11,   0, UNI_KATAKANAEXT }   /* katakanaext */,
+  {     1,  9880,     0,   4,   0, UNI_YI }   /* yiii */,
+  {   321,  9556,   406,   4,   7, UNI_GCB__CN }   /* gcb=control */,
+  {     0,  9488,  3169,   4,   8, UNI_INETHIOPIC }   /* blk=ethiopic */,
+  {     0,  9768,  8291,   4,   4, UNI_TAGB }   /* scx=tagb */,
+  {     0, 10009,  8846,   3,   6, UNI_DT__ENC }   /* dt=circle */,
+  {     0,  4033,  1910,  16,   2, UNI_CN }   /* generalcategory=cn */,
+  {     0,  9508,  8811,   5,   5, UNI_CCC__122 }   /* ccc=ccc122 */,
+  {     0,  9768,  7684,   4,   9, UNI_PAUC }   /* scx=paucinhau */,
+  {     0,  2224,  8632,   3,   6, UNI_SUPPUAB }   /* insuppuab */,
+  {    38,  9768,  8407,   4,   7, UNI_DSRT }   /* scx=deseret */,
+  {     1,  8589,  3937,   7,   8, UNI_SC__BOPO }   /* script=bopomofo */,
+  {     0, 10027,   756,   3,   3, UNI_JG__DAL }   /* jg=dal */,
+  {   555,   435,     0,   5,   0, UNI__PERL_NCHAR }   /* nchar */,
+  {    19,  3836,  8428,  17,   4, UNI_GRAN }   /* scriptextensions=gran */,
+  {     0,  3097,     0,  18,   0, UNI_dt_values_index }   /* decompositiontype= */,
+  {     3,  7076,  7099,   3,   9, UNI_BOXDRAWING }   /* inboxdrawing */,
+  {     2,  1988,     0,  22,   0, UNI_loe_values_index }   /* logicalorderexception= */,
+  {   641,  1966,  3953,  22,  16, UNI_INSC__CANTILLATIONMARK }   /* indicsyllabiccategory=cantillationmark */,
+  {     0,  8870, 10135,   6,   3, UNI_EPRES }   /* epres=yes */,
+  {   523,  1790,  1025,  22,   2, -UNI_CWCM }   /* changeswhencasemapped=no */,
+  {     0,  9488,  2287,   4,   7, UNI_INSINHALA }   /* blk=sinhala */,
+  {    16,  1087,    26,  27,   1, UNI_PCM }   /* prependedconcatenationmark=y */,
+  {     0,  8780,  1561,   6,  24, UNI_SUPSYMBOLSANDPICTOGRAPHS }   /* block=supsymbolsandpictographs */,
+  {     0,  2665,     0,  11,   0, UNI_COUNTINGROD }   /* countingrod */,
+  {     0,  1417,  9106,  25,   4, UNI_CCC__15 }   /* canonicalcombiningclass=ccc15 */,
+  {     1,  8780,  8876,   6,   6, UNI_INGOTHIC }   /* block=gothic */,
+  {     0,    21,  7458,   2,  10, UNI_YIRADICALS }   /* inyiradicals */,
+  {     4,  3836,  9680,  17,   4, UNI_NBAT }   /* scriptextensions=nbat */,
+  {     1,  8780,  2429,   6,  20, UNI_ININSCRIPTIONALPAHLAVI }   /* block=inscriptionalpahlavi */,
+  {     9, 10003,  9836,   3,   4, UNI_CI }   /* ci=true */,
+  {   768,  7076,  5816,   3,   7, UNI_INBALINESE }   /* inbalinese */,
+  {     5,  2779,     0,  19,   0, UNI_idst_values_index }   /* idstrinaryoperator= */,
+  {     0,  8930,    26,   6,   1, UNI_XPOSIXLOWER }   /* lower=y */,
+  {     0,  9277,  4448,   3,   4, UNI_BAMU }   /* sc=bamu */,
+  {    14,  7318,  7754,  10,   2, UNI_IN__11 }   /* presentin=11 */,
+  {     0,  3115,     0,  18,   0, UNI_DEVANAGARIEXT }   /* devanagariextended */,
+  {     0,  9095,     0,   5,   0, UNI_BUHD }   /* buhid */,
+  {    32,  5452,     0,  15,   0, UNI_COMPEX }   /* nfcquickcheck=n */,
+  {     0,  1746,     0,  22,   0, UNI_bpt_values_index }   /* bidipairedbrackettype= */,
+  {    22,  3374,  9255,  11,   5, -UNI_XPOSIXSPACE }   /* whitespace=false */,
+  {    27,  8688,  2330,   3,  19, UNI_HLUW }   /* isanatolianhieroglyphs */,
+  {    40,  5497,     0,  11,   0, UNI_MC }   /* spacingmark */,
+  {     2,  9768,  9608,   4,   4, UNI_KITS }   /* scx=kits */,
+  {    43,  2784,  1395,   4,  22, UNI_ARABICPFB }   /* inarabicpresentationformsb */,
+  {     0,  9768,  6840,   4,   4, UNI_NAND }   /* scx=nand */,
+  {   104,  3836,  7188,  17,  10, UNI_KHAR }   /* scriptextensions=kharoshthi */,
+  {    23,  5986,  9392,  13,   4, UNI_NV__11_SLASH_2 }   /* numericvalue=11/2 */,
+  {   320, 10048,  9372,   3,   4, UNI_NV__1_SLASH_40 }   /* nv=1/40 */,
+  {     0,  9768,  6277,   4,   4, UNI_MAHJ }   /* scx=mahj */,
+  {     6,  9997,   407,   3,   2, UNI_BC__ON }   /* bc=on */,
+  {    72,  6205,  9255,  12,   5, -UNI_IDEO }   /* ideographic=false */,
+  {   258,   184,  6277,   2,   4, UNI_MAHJ }   /* ismahj */,
+  {   192,  7540,  1025,   9,   2, -UNI_EXT }   /* extender=no */,
+  {     0,  9277,  9892,   3,   4, UNI_SC__QAAI }   /* sc=zinh */,
+  {     9,  2912,     0,   4,   0, UNI_SUND }   /* sund */,
+  {     0,  8688,  1007,   3,  26, UNI_ANCIENTGREEKMUSIC }   /* isancientgreekmusicalnotation */,
+  {   379,  9488,   719,   4,  30, UNI_CUNEIFORMNUMBERS }   /* blk=cuneiformnumbersandpunctuation */,
+  {     0,    21,  8470,   2,   7, UNI_INLINEARA }   /* inlineara */,
+  {     0,  9277,  9624,   3,   4, UNI_LAO }   /* sc=laoo */,
+  {     1,  5791,  5364,  13,   4, UNI_JG__HETH }   /* joininggroup=heth */,
+  {     1,  3025,     0,   4,   0, UNI_CHER }   /* cher */,
+  {    38, 10048,  9907,   3,   3, UNI_NV__1_SLASH_7 }   /* nv=1/7 */,
+  {     0,  2224,  7399,   3,   9, UNI_SUPARROWSC }   /* insuparrowsc */,
+  {     6,  7325, 10093,   3,   3, UNI_IN__4_DOT_1 }   /* in=v41 */,
+  {     1, 10024,    48,   3,   1, UNI_P }   /* gc=p */,
+  {     0,  1921,     0,   2,   0, UNI_SD }   /* sd */,
+  {     0,  9488,    42,   4,   9, UNI_CJKCOMPAT }   /* blk=cjkcompat */,
+  {     0,  5791,  9784,  13,   4, UNI_JG__SHIN }   /* joininggroup=shin */,
+  {     0,  8589,  9544,   7,   4, UNI_DIAK }   /* script=diak */,
+  {   105,  9997,   426,   3,   2, UNI_BC__ES }   /* bc=es */,
+  {   459,  3904,    36,  17,   1, UNI_UIDEO }   /* unifiedideograph=t */,
+  {    40,  9345,  1025,   5,   2, -UNI_XIDC }   /* xidc=no */,
+  {     0,  5986,  7877,  13,   2, UNI_NV__13 }   /* numericvalue=13 */,
+  {     0,  1677,     0,  14,   0, UNI_LATINEXTA }   /* latinextendeda */,
+  {     0,  7218,    96,  10,  10, UNI_LB__AL }   /* linebreak=alphabetic */,
+  {     0, 10009,  2785,   3,   3, UNI_DT__NAR }   /* dt=nar */,
+  {   572,   283,     0,  33,   0, UNI_MISCMATHSYMBOLSB }   /* miscellaneousmathematicalsymbolsb */,
+  {     2,  9768,  4883,   4,  15, UNI_SARB }   /* scx=oldsoutharabian */,
+  {     0,  8526,     0,   7,   0, UNI_NB }   /* noblock */,
+  {    20,  9824,     0,   4,   0, UNI_TGLG }   /* tglg */,
+  {     0,  9768,  8561,   4,   4, UNI_OSMA }   /* scx=osma */,
+  {     0,  9285,     0,   5,   0, UNI_LIMB }   /* limbu */,
+  {     6,  9277,  4145,   3,   7, UNI_SC__LINB }   /* sc=linearb */,
+  {   330,  9275,  4508,   5,  15, UNI_INSC__CONSONANTKILLER }   /* insc=consonantkiller */,
+  {     0,  5986,  4134,  13,   1, UNI_NV__1 }   /* numericvalue=1 */,
+  {    20,  9640,     3,   4,   1, -UNI_LOE }   /* loe=f */,
+  {     0,  3836,  4001,  17,   7, UNI_CPRT }   /* scriptextensions=cypriot */,
+  {     0,  6972,     0,  11,   0, UNI_SYLO }   /* sylotinagri */,
+  {   306,  5986,  8710,  13,   4, UNI_NV__6000 }   /* numericvalue=6000 */,
+  {    11,  5746,  9255,   6,   5, -UNI_EBASE }   /* ebase=false */,
+  {   962,   184,  6397,   2,  12, UNI_MATHALPHANUM }   /* ismathalphanum */,
+  {     1,  5032,     0,  13,   0, UNI_POSIXXDIGIT }   /* asciihexdigit */,
+  {     0,  9277,  1013,   3,   5, UNI_SC__GREK }   /* sc=greek */,
+  {     0,  1979, 10171,  10,   1, UNI_CASEDLETTER }   /* category=l_ */,
+  {     0, 10126,   471,   3,   2, UNI_VO__TU }   /* vo=tu */,
+  {     0,  9508,  4912,   4,   2, UNI_CCC__0 }   /* ccc=nr */,
+  {     0,  9832,     0,   4,   0, UNI_TIBT }   /* tibt */,
+  {     1,  8435,    36,   7,   1, UNI_GRBASE }   /* grbase=t */,
+  {     0,  9508,   756,   4,   2, UNI_CCC__DA }   /* ccc=da */,
+  {     4,  8211,     0,   8,   0, UNI_JAMOEXTB }   /* jamoextb */,
+  {   125,  1537,  4988,  24,  15, UNI_LOE }   /* indicpositionalcategory=visualorderleft */,
+  {     0, 10048,  7843,   3,   8, UNI_NV__1_SLASH_4 }   /* nv=2.50e-01 */,
+  {     0,  5200,     0,   7,   0, UNI_KANASUP }   /* kanasup */,
+  {     0,  8780,   861,   6,   6, UNI_ARROWS }   /* block=arrows */,
+  {     1,  6805,   842,   6,  25, UNI_MISCARROWS }   /* inmiscellaneoussymbolsandarrows */,
+  {     0,  9596,    24,   4,   1, UNI_GCB__L }   /* hst=l */,
+  {     0,  5986,  8714,  13,   5, UNI_NV__30000 }   /* numericvalue=30000 */,
+  {     8,  9277,  4385,   3,   4, UNI_TANG }   /* sc=tang */,
+  {     0,  8575, 10135,   7,   3, UNI_PATSYN }   /* patsyn=yes */,
+  {     0,  1218,     0,  26,   0, UNI_KATAKANAEXT }   /* katakanaphoneticextensions */,
+  {     3,  5986,  5649,  13,   1, UNI_NV__0 }   /* numericvalue=0 */,
+  {    64, 10027,  5368,   3,  14, UNI_JG__MANICHAEANKAPH }   /* jg=manichaeankaph */,
+  {     0, 10048,  9409,   3,   3, UNI_NV__5_SLASH_2 }   /* nv=5/2 */,
+  {   776,   184,  5843,   2,   9, UNI_MLYM }   /* ismalayalam */,
+  {     0,  4116,  2430,   3,  19, UNI_PHLI }   /* isinscriptionalpahlavi */,
+  {   557,  9444,  7826,   4,   2, UNI_AGE__12 }   /* age=12 */,
+  {     9, 10009, 10066,   3,   3, UNI_DT__SML }   /* dt=sml */,
+  {     0,  9488,  4808,   4,  15, UNI_MISCPICTOGRAPHS }   /* blk=miscpictographs */,
+  {     0,  8589,  9652,   7,   4, UNI_MERC }   /* script=merc */,
+  {     1,  8589,  8315,   7,   4, UNI_UGAR }   /* script=ugar */,
+  {     3,  8589,  3025,   7,   8, UNI_CHER }   /* script=cherokee */,
+  {     0,  2529,     3,  20,   1, -UNI_TERM }   /* terminalpunctuation=f */,
+  {    66,  9262,  8996,   3,   5, UNI_SB__ST }   /* sb=sterm */,
+  {     0,  6012,     0,  13,   0, UNI_VERTICALFORMS }   /* verticalforms */,
+  {     0,  8990,     0,   6,   0, UNI_RJNG }   /* rejang */,
+  {     0,  9488,  6385,   4,  12, UNI_INMASARAMGONDI }   /* blk=masaramgondi */,
+  {     0,  8960, 10135,   6,   3, UNI_NFCQC__Y }   /* nfcqc=yes */,
+  {     4,  9520,    36,   4,   1, UNI_CWL }   /* cwl=t */,
+  {    75,  1222,     0,   4,   0, UNI_KANA }   /* kana */,
+  {    41,  4033,   341,  16,   2, UNI_PE }   /* generalcategory=pe */,
+  {    11,  9820,     0,   4,   0, UNI_TFNG }   /* tfng */,
+  {     0,  2288,  4068,   5,  13, UNI_HALFANDFULLFORMS }   /* inhalfandfullforms */,
+  {    10,  5060,  1025,  14,   2, -UNI_CI }   /* caseignorable=no */,
+  {     0,  9262,  4305,   3,   5, UNI_SB__XX }   /* sb=other */,
+  {    90,  7155,  3053,   3,   8, UNI_HALFMARKS }   /* ishalfmarks */,
+  {   404, 10290,  5040,   6,   5, UNI_XPOSIXDIGIT }   /* xposixdigit */,
+  {     0, 10027,  7711,   3,   9, UNI_JG__SYRIACWAW }   /* jg=syriacwaw */,
+  {   672,  7098,     0,  10,   0, UNI_BOXDRAWING }   /* boxdrawing */,
+  {     1,  9768,  1013,   4,   5, UNI_GREK }   /* scx=greek */,
+  {     0,  9444,  7987,   4,   3, UNI_AGE__6_DOT_2 }   /* age=6.2 */,
+  {     0,  3133,  1025,  18,   2, -UNI_EBASE }   /* emojimodifierbase=no */,
+  {    16,  1812,  9836,  22,   4, UNI_CWL }   /* changeswhenlowercased=true */,
+  {     1,   117,   447,   3,  31, UNI_IDEOGRAPHICSYMBOLS }   /* inideographicsymbolsandpunctuation */,
+  {    87,  1417,  8727,  24,   2, UNI_CCC__32 }   /* canonicalcombiningclass=32 */,
+  {   546,  9768,  7675,   4,   9, UNI_PALM }   /* scx=palmyrene */,
+  {    32,  9768,  3241,   4,   4, UNI_GEOR }   /* scx=geor */,
+  {     0,  9764,     0,   4,   0, UNI_SARB }   /* sarb */,
+  {     0, 10033,    73,   3,   2, UNI_EMOD }   /* lb=em */,
+  {     4,  3836,  9335,  17,   4, UNI_TAKR }   /* scriptextensions=takr */,
+  {  1097, 10291,  5039,   5,   6, UNI_POSIXXDIGIT }   /* posixxdigit */,
+  {   128,  7249,  3583,   4,  15, UNI_UCAS }   /* iscanadiansyllabics */,
+  {   268,  8589,  7308,   7,  10, UNI_PHNX }   /* script=phoenician */,
+  {    36,   184,  2485,   2,   4, UNI_MONG }   /* ismong */,
+  {     0,  8694,     0,   6,   0, UNI_XPOSIXSPACE }   /* wspace */,
+  {     2,  9508,  7826,   4,   2, UNI_CCC__12 }   /* ccc=12 */,
+  {    15,  1587,     0,   1,   0, UNI_Z }   /* z */,
+  {    10, 10048,  9436,   3,   4, UNI_NV__7_SLASH_12 }   /* nv=7/12 */,
+  {     2,  9488,  2308,   4,   6, UNI_YIJING }   /* blk=yijing */,
+  {     0,  2182, 10174,  21,   2, UNI_GCB__XX }   /* graphemeclusterbreak=xx */,
+  {     0,  1746,    17,  22,   1, UNI_BPT__O }   /* bidipairedbrackettype=o */,
+  {     0,  3836,   493,  17,   3, UNI_HAN }   /* scriptextensions=han */,
+  {     1,  1087,  9836,  27,   4, UNI_PCM }   /* prependedconcatenationmark=true */,
+  {     0,  7418,  9255,  10,   5, -UNI_XPOSIXUPPER }   /* uppercase=false */,
+  {     4,  1114,     3,  26,   1, -UNI_CWKCF }   /* changeswhennfkccasefolded=f */,
+  {     0,  7028,  9881,   3,   3, UNI_YI }   /* isyiii */,
+  {     4,  4033,    45,  16,   2, UNI_CO }   /* generalcategory=co */,
+  {     0,  4916,  2077,   3,  21, UNI_TRANSPORTANDMAP }   /* istransportandmapsymbols */,
+  {     0,  8780,  8203,   6,   8, UNI_JAMOEXTA }   /* block=jamoexta */,
+  {     7,  7155,  1116,   3,   3, UNI_HANG }   /* ishang */,
+  {    89,  8780,  2308,   6,   6, UNI_YIJING }   /* block=yijing */,
+  {    21,   184,  8171,   2,   8, UNI_GUJR }   /* isgujarati */,
+  {  1024,  9768,  8924,   4,   4, UNI_LEPC }   /* scx=lepc */,
+  {     5, 10129,     0,   3,   0, UNI_vs_values_index }   /* vs= */,
+  {     3,  9664,     0,   4,   0, UNI_MRO }   /* mroo */,
+  {     0,  8780,  2245,   6,  21, UNI_MEETEIMAYEKEXT }   /* block=meeteimayekextensions */,
+  {     0,  6576,  1025,  11,   2, -UNI_XPOSIXALPHA }   /* alphabetic=no */,
+  {    29,   184,   382,   2,  32, UNI_EGYPTIANHIEROGLYPHFORMATCONTROLS }   /* isegyptianhieroglyphformatcontrols */,
+  {     2,  9270,   868,   3,  17, UNI_PHONETICEXT }   /* inphoneticextensions */,
+  {     9,  9015,     0,   5,   0, UNI_ideo_values_index }   /* ideo= */,
+  {     0, 10033,  7448,   3,  10, UNI_LB__WJ }   /* lb=wordjoiner */,
+  {     7,  7239,     0,   2,   0, UNI_VS }   /* vs */,
+  {   352,  9488,  3938,   5,  15, UNI_BOPOMOFOEXT }   /* blk=bopomofoextended */,
+  {     0,  9488,  2477,   4,   3, UNI_PUA }   /* blk=pua */,
+  {     7,   184,  2817,   2,   4, UNI_MERO }   /* ismero */,
+  {     0,  5960,     0,  13,   0, UNI_MISCTECHNICAL }   /* misctechnical */,
+  {   160,  8840,     0,   6,   0, UNI_CAKM }   /* chakma */,
+  {   521,  5726,     0,  13,   0, UNI_ME }   /* enclosingmark */,
+  {    23,  1417,  9101,  25,   4, UNI_CCC__14 }   /* canonicalcombiningclass=ccc14 */,
+  {     2,  8688,   727,   4,   2, UNI_ARMN }   /* isarmn */,
+  {     2,   184,  2469,   2,  20, UNI_HMNP }   /* isnyiakengpuachuehmong */,
+  {   757, 10290,  1867,   6,   5, UNI_XPOSIXUPPER }   /* xposixupper */,
+  {     8, 10132,   125,   3,   2, UNI_LB__CR }   /* wb=cr */,
+  {   161,  9768,  4001,   4,   7, UNI_CPRT }   /* scx=cypriot */,
+  {     0,   184,  1442,   3,   9, UNI_CJKSYMBOLS }   /* iscjksymbols */,
+  {     0,  9768,  9548,   4,   4, UNI_DSRT }   /* scx=dsrt */,
+  {     0,  3836,  6792,  18,   3, UNI_SAMR }   /* scriptextensions=samr */,
+  {   144,  4542,  3226,   5,  15, UNI_INPUNCTUATION }   /* ingeneralpunctuation */,
+  {   634,  4116,  1308,   3,   2, UNI_IDS }   /* isids */,
+  {    10,  9346,  1025,   4,   2, -UNI_IDC }   /* idc=no */,
+  {    32,   184,  8421,   2,   4, UNI_ELYM }   /* iselym */,
+  {     4,  9275,  8099,   5,   8, UNI_INSC__AVAGRAHA }   /* insc=avagraha */,
+  {   132,  8575,    36,   7,   1, UNI_PATSYN }   /* patsyn=t */,
+  {     0,  3836,  8091,  17,   8, UNI_ARMN }   /* scriptextensions=armenian */,
+  {     0,  5791,  6565,  13,  11, UNI_JG__AFRICANNOON }   /* joininggroup=africannoon */,
+  {     1,  2288,  2724,   4,   8, UNI_JAMO }   /* inhanguljamo */,
+  {     0,  5452,    47,  14,   1, UNI_NFCQC__M }   /* nfcquickcheck=m */,
+  {     1,  9684,     0,   4,   0, UNI_NEWA }   /* newa */,
+  {   549,  9488,   867,   4,  11, UNI_PHONETICEXT }   /* blk=phoneticext */,
+  {   513,  8762,  1025,   6,   2, -UNI_XPOSIXALPHA }   /* alpha=no */,
+  {   455,  8780,  5804,   6,  13, UNI_KANAEXTA }   /* block=kanaextendeda */,
+  {     1,   184,  3937,   2,  11, UNI_BOPOMOFOEXT }   /* isbopomofoext */,
+  {   783,  5986,  9050,  13,   5, UNI_NV__1_SLASH_160 }   /* numericvalue=1/160 */,
+  {     7, 10024,  3277,   3,  18, UNI_PI }   /* gc=initialpunctuation */,
+  {     0,  9262,   339,   3,   2, UNI_SB__LO }   /* sb=lo */,
+  {     0,  2161,    26,  21,   1, UNI_EXTPICT }   /* extendedpictographic=y */,
+  {  1140,  7249,  3600,   4,  15, UNI_AGHB }   /* iscaucasianalbanian */,
+  {     3,  9768,  9320,   4,   5, UNI_OSGE }   /* scx=osage */,
+  {     0,  5060,     0,  13,   0, UNI_CI }   /* caseignorable */,
+  {   147, 10048,  9376,   3,   3, UNI_NV__1_SLASH_6 }   /* nv=1/6 */,
+  {   301,  7027,     0,  11,   0, UNI_YISYLLABLES }   /* yisyllables */,
+  {     9, 10033,  7268,   3,  10, UNI_LB__NS }   /* lb=nonstarter */,
+  {   192,  5508,  9255,  14,   5, -UNI_PATSYN }   /* patternsyntax=false */,
+  {     1,  8954,    26,   6,   1, UNI__PERL_NCHAR }   /* nchar=y */,
+  {     1,  5986,  5648,  13,   6, UNI_NV__100000 }   /* numericvalue=100000 */,
+  {     5,  2224,  7389,   3,   9, UNI_SUPARROWSB }   /* insuparrowsb */,
+  {     0, 10024,    25,   3,   1, UNI_S }   /* gc=s */,
+  {     0,  5986,  7835,  13,   8, UNI_NV__5_SLASH_2 }   /* numericvalue=2.50e+00 */,
+  {   303,  5986,  1249,  13,   3, UNI_NV__NAN }   /* numericvalue=nan */,
+  {     1,  1768,    36,  22,   1, UNI_CWCF }   /* changeswhencasefolded=t */,
+  {     0,  8688,  7497,   4,   7, UNI_ARABICPFA }   /* isarabicpfa */,
+  {   264,  8780,   183,   6,  20, UNI_MISCSYMBOLS }   /* block=miscellaneoussymbols */,
+  {     0,  9277,  6796,   3,  11, UNI_MEDF }   /* sc=medefaidrin */,
+  {   672,   184,  1466,   3,  23, UNI_DIACRITICALSFORSYMBOLS }   /* iscombiningmarksforsymbols */,
+  {     3,  9997,  3756,   3,   3, UNI_BC__NSM }   /* bc=nsm */,
+  {     4,  2569,    18,  20,   1, UNI_VO__R }   /* verticalorientation=r */,
+  {     3,  9508, 10166,   4,   2, UNI_CCC__8 }   /* ccc=kv */,
+  {     0,  8762,     0,   6,   0, UNI_alpha_values_index }   /* alpha= */,
+  {    13,  9768,  8498,   4,   4, UNI_MULT }   /* scx=mult */,
+  {     2,  5986,  5648,  13,   2, UNI_NV__10 }   /* numericvalue=10 */,
+  {     0,  8864,  9836,   6,   4, UNI_EMOJI }   /* emoji=true */,
+  {     0,  2224,  7359,   3,   9, UNI_INSAURASHTRA }   /* insaurashtra */,
+  {   514,  9444, 10111,   4,   3, UNI_AGE__6_DOT_2 }   /* age=v62 */,
+  {     1,   184,  2703,   2,  19, UNI_ENCLOSEDALPHANUMSUP }   /* isenclosedalphanumsup */,
+  {     0,  9768,  9305,   4,   5, UNI_NSHU }   /* scx=nushu */,
+  {   152,  1746,  4898,  22,   4, UNI_BPT__O }   /* bidipairedbrackettype=open */,
+  {    15,   184,   183,   2,  34, UNI_MISCPICTOGRAPHS }   /* ismiscellaneoussymbolsandpictographs */,
+  {   617,  7438,  7603,  10,   9, UNI_WB__ML }   /* wordbreak=midletter */,
+  {     0,  5986,  8019,  13,   8, UNI_NV__2_SLASH_3 }   /* numericvalue=6.67e-01 */,
+  {  2306,  9277,  9700,   3,   4, UNI_OLCK }   /* sc=olck */,
+  {  2184,  9488,   349,   4,  33, UNI_SUPSYMBOLSANDPICTOGRAPHS }   /* blk=supplementalsymbolsandpictographs */,
+  {     3,  5324,  8479,   4,   5, UNI_INMAKASAR }   /* inmakasar */,
+  {     1,  9277,  9500,   3,   4, UNI_SC__CAKM }   /* sc=cakm */,
+  {     2,  3836,  1176,  18,   3, UNI_SORA }   /* scriptextensions=sora */,
+  {     0,  8589,  7292,   8,   3, UNI_SC__SOGD }   /* script=sogd */,
+  {     0,  3836,  9038,  17,   6, UNI_YEZI }   /* scriptextensions=yezidi */,
+  {     0,  5791,  5944,  13,   3, UNI_JG__WAW }   /* joininggroup=waw */,
+  {    22,  6505,     0,  12,   0, UNI_PHAISTOS }   /* phaistosdisc */,
+  {     9,  8858,  9255,   6,   5, -UNI_ECOMP }   /* ecomp=false */,
+  {     1,  9020,  9836,   6,   4, UNI_XPOSIXUPPER }   /* upper=true */,
+  {   355,  2760,   911,  19,   1, UNI_GCB__V }   /* hangulsyllabletype=v */,
+  {     0,  1417,  8010,  24,   2, UNI_CCC__36 }   /* canonicalcombiningclass=36 */,
+  {     0,  9277,  9820,   3,   4, UNI_TFNG }   /* sc=tfng */,
+  {     1,  1537,  6983,  24,  11, UNI_INPC__TOPANDRIGHT }   /* indicpositionalcategory=topandright */,
+  {     0,  9277,     8,   4,   3, UNI_SC__KANA }   /* sc=kana */,
+  {     1,   184,  4718,   2,  15, UNI_LOWERCASELETTER }   /* islowercaseletter */,
+  {     1,  2529,     0,   4,   0, UNI_TERM }   /* term */,
+  {    90,  9768,  5171,   4,   4, UNI_CHAM }   /* scx=cham */,
+  {  1157,  8589,  3079,   7,   4, UNI_SC__COPT }   /* script=copt */,
+  {  1116,  9488,  2931,   4,  19, UNI_SUPARROWSA }   /* blk=supplementalarrowsa */,
+  {     1,  8589,  4928,   7,   5, UNI_SC__TAML }   /* script=tamil */,
+  {  2148,  4598,     0,  15,   0, UNI_DIACRITICALSEXT }   /* diacriticalsext */,
+  {    10,  9277,  8652,   3,   7, UNI_TAVT }   /* sc=taiviet */,
+  {     0,  9277,  6181,   3,  12, UNI_SC__GONG }   /* sc=gunjalagondi */,
+  {   531,  9277,  4448,   3,   5, UNI_BAMU }   /* sc=bamum */,
+  {    49,  6420,  9316,   3,   4, UNI_INORIYA }   /* inoriya */,
+  {     1, 10048,  7859,   3,   8, UNI_NV__20000000 }   /* nv=20000000 */,
+  {     0, 10048,  7851,   3,   8, UNI_NV__1_SLASH_40 }   /* nv=2.50e-02 */,
+  {     6,  9768,  8786,   4,   6, UNI_CARI }   /* scx=carian */,
+  {     1,  5986,  7814,  13,   1, UNI_NV__7 }   /* numericvalue=7 */,
+  {     1,  4033,  3277,  16,  18, UNI_PI }   /* generalcategory=initialpunctuation */,
+  {     0,  4916,  4386,   3,  15, UNI_TANGUTCOMPONENTS }   /* istangutcomponents */,
+  {   253,  8652,     0,   7,   0, UNI_TAVT }   /* taiviet */,
+  {     0,  9488,   908,   4,  14, UNI_PUA }   /* blk=privateusearea */,
+  {     0, 10288, 10303,   8,   5, UNI_XPOSIXBLANK }   /* isxposixblank */,
+  {     0, 10048,  7763,   3,   8, UNI_NV__1_SLASH_8 }   /* nv=1.25e-01 */,
+  {    26,  9488,  3421,   4,   4, UNI_RUMI }   /* blk=rumi */,
+  {     4,  9488,  4928,   4,   8, UNI_TAMILSUP }   /* blk=tamilsup */,
+  {  1540,  7088,  3313,  10,  18, UNI_BC__LRI }   /* bidiclass=lefttorightisolate */,
+  {     0,  3151, 10135,  18,   3, UNI_EPRES }   /* emojipresentation=yes */,
+  {     0,  4033,  2268,  16,   2, UNI_PD }   /* generalcategory=pd */,
+  {  2343,  4113,  4974,   3,  14, UNI_VEDICEXT }   /* invedicextensions */,
+  {   100,  9768,  8936,   4,   4, UNI_LYCI }   /* scx=lyci */,
+  {     0,  3836,  8291,  17,   8, UNI_TAGB }   /* scriptextensions=tagbanwa */,
+  {     0,   467,     0,  11,   0, UNI_P }   /* punctuation */,
+  {    17, 10048,  8710,   3,   3, UNI_NV__600 }   /* nv=600 */,
+  {     0,  3836,  8421,  17,   4, UNI_ELYM }   /* scriptextensions=elym */,
+  {    66,  8589,  8924,   7,   4, UNI_LEPC }   /* script=lepc */,
+  {     2,  9230,     1,   5,   1, -UNI_CWCF }   /* cwcf=n */,
+  {     6,  9488,  8617,   4,   7, UNI_INSOYOMBO }   /* blk=soyombo */,
+  {     0,  2608,     0,   6,   0, UNI_BRAH }   /* brahmi */,
+  {   357,   184,  6829,   2,  11, UNI_MYANMAREXTB }   /* ismyanmarextb */,
+  {  2136,  9444,  9982,   4,   3, UNI_AGE__6_DOT_3 }   /* age=6.3 */,
+  {  1655,  9768,  9688,   4,   3, UNI_NKO }   /* scx=nko */,
+  {  1541,  1417,  7890,  24,   2, UNI_CCC__33 }   /* canonicalcombiningclass=33 */,
+  {     1,  8774,     0,   6,   0, UNI_bidim_values_index }   /* bidim= */,
+  {     0,  9768,  9245,   4,   5, UNI_DOGR }   /* scx=dogra */,
+  {    12,  9508,  9108,   4,   2, UNI_CCC__15 }   /* ccc=15 */,
+  {     0, 10027,  9784,   3,   4, UNI_JG__SHIN }   /* jg=shin */,
+  {   280,  8589,  8659,   7,   7, UNI_TIBT }   /* script=tibetan */,
+  {    17, 10033,  1822,   3,   2, UNI_LB__NL }   /* lb=nl */,
+  {     1,  3904,  1025,  17,   2, -UNI_UIDEO }   /* unifiedideograph=no */,
+  {   227, 10048,  9988,   3,   3, UNI_NV__7_SLASH_8 }   /* nv=7/8 */,
+  {     0,  9768,  3025,   4,   4, UNI_CHER }   /* scx=cher */,
+  {     2,  3836,  9652,  17,   4, UNI_MERC }   /* scriptextensions=merc */,
+  {     0,  1417,    18,  24,   1, UNI_CCC__R }   /* canonicalcombiningclass=r */,
+  {     1,  3836,  8219,  17,   8, UNI_JAVA }   /* scriptextensions=javanese */,
+  {     0,  4989,   513,   3,  15, UNI_UIDEO }   /* isunifiedideograph */,
+  {     3,   184,  4478,   2,   4, UNI_BRAI }   /* isbrai */,
+  {    17,   184,  5158,   2,  14, UNI_INGREEK }   /* isgreekandcoptic */,
+  {   304,  3836,  7428,  17,  10, UNI_WARA }   /* scriptextensions=warangciti */,
+  {   832,  2779,  9836,  19,   4, UNI_IDST }   /* idstrinaryoperator=true */,
+  {   192,  9768,  9285,   4,   4, UNI_LIMB }   /* scx=limb */,
+  {     5,  3853,     0,  17,   0, UNI_sterm_values_index }   /* sentenceterminal= */,
+  {     0, 10024,  3985,   3,  16, UNI_PE }   /* gc=closepunctuation */,
+  {     0,  7088,  5494,  10,  14, UNI_BC__NSM }   /* bidiclass=nonspacingmark */,
+  {  1232,  4542,  3243,   4,  16, UNI_GEORGIANSUP }   /* ingeorgiansupplement */,
+  {  1026,  8780,  8211,   6,   8, UNI_JAMOEXTB }   /* block=jamoextb */,
+  {     8,  9556,  1910,   4,   2, UNI_GCB__CN }   /* gcb=cn */,
+  {     1,  3133,     3,  18,   1, -UNI_EBASE }   /* emojimodifierbase=f */,
+  {     0,  8589,  8912,   7,   4, UNI_SC__KHOJ }   /* script=khoj */,
+  {     0,   184,  8470,   2,   7, UNI_LINA }   /* islineara */,
+  {     1,  7218, 10030,  10,   2, UNI_GCB__T }   /* linebreak=jt */,
+  {   136, 10291,  3379,   5,   5, UNI_POSIXSPACE }   /* posixspace */,
+  {    26,  4116,  4704,   3,  14, UNI_ARMI }   /* isimperialaramaic */,
+  {     0,  5592,     0,  14,   0, UNI_ZS }   /* spaceseparator */,
+  {    39, 10048,  7468,   3,   9, UNI_NV___MINUS_1_SLASH_2 }   /* nv=-5.00e-01 */,
+  {  2405,  8984,  9255,   6,   5, -UNI_QMARK }   /* qmark=false */,
+  {     1,  8589,  9880,   7,   4, UNI_SC__YI }   /* script=yiii */,
+  {     0,    21,  6730,   2,  11, UNI_KATAKANAEXT }   /* inkatakanaext */,
+  {   776,   184,  8477,   2,   7, UNI_MAKA }   /* ismakasar */,
+  {     1,  2224,  2288,   3,  20, UNI_SINHALAARCHAICNUMBERS }   /* insinhalaarchaicnumbers */,
+  {  1540, 10296,  8583,   3,   6, UNI_PHAG }   /* isphagspa */,
+  {    19,  9508,  8793,   5,   4, UNI_CCC__10 }   /* ccc=ccc10 */,
+  {     0,  9270,  5551,   3,  13, UNI_INPSALTERPAHLAVI }   /* inpsalterpahlavi */,
+  {    36,  2032,  1025,  22,   2, -UNI__PERL_NCHAR }   /* noncharactercodepoint=no */,
+  {    23,  9488,  4145,   4,  16, UNI_LINEARBIDEOGRAMS }   /* blk=linearbideograms */,
+  {   617,  3379,    26,   6,   1, UNI_XPOSIXSPACE }   /* space=y */,
+  {   137,   184,  2912,   2,  19, UNI_SUNDANESESUP }   /* issundanesesupplement */,
+  {   770,  9508,  2809,   4,   2, UNI_CCC__1 }   /* ccc=ov */,
+  {     0,  1417,  9116,  25,   4, UNI_CCC__17 }   /* canonicalcombiningclass=ccc17 */,
+  {   271,  5986,  7907,  13,   8, UNI_NV__3_SLASH_8 }   /* numericvalue=3.75e-01 */,
+  {  1028,  8780,  4554,   7,  14, UNI_CONTROLPICTURES }   /* block=controlpictures */,
+  {   400,  8780,  8421,   6,   7, UNI_INELYMAIC }   /* block=elymaic */,
+  {     0,  9270,  2449,   5,   4, UNI_INPC__LEFT }   /* inpc=left */,
+  {     0,  8688,  9066,   3,   4, UNI_ADLM }   /* isadlam */,
+  {     0,  8589,  9748,   7,   4, UNI_RJNG }   /* script=rjng */,
+  {     0,  9230,  9255,   5,   5, -UNI_CWCF }   /* cwcf=false */,
+  {     3,  5116,  9255,  14,   5, -UNI_EMOD }   /* emojimodifier=false */,
+  {   259,  5578,    49,  14,   2, UNI_SB__AT }   /* sentencebreak=at */,
+  {     0,  9277,  7621,   3,   9, UNI_NBAT }   /* sc=nabataean */,
+  {     2,   184,  3098,   2,   5, UNI_ECOMP }   /* isecomp */,
+  {    36,  3836,  9872,  17,   4, UNI_XPEO }   /* scriptextensions=xpeo */,
+  {  1808, 10027,  2223,   3,   3, UNI_JG__AIN }   /* jg=ain */,
+  {     0,  4116,  3735,   3,  16, UNI_INDICSIYAQNUMBERS }   /* isindicsiyaqnumbers */,
+  {     0, 10033,  2640,   3,   2, UNI_LB__BA }   /* lb=ba */,
+  {     0, 10346,  8682,   4,   5, UNI_ZZZZ }   /* isunknown */,
+  {     1,  9277,  9560,   3,   4, UNI_SC__GONG }   /* sc=gong */,
+  {    14,  5508,     1,  14,   1, -UNI_PATSYN }   /* patternsyntax=n */,
+  {     1, 10009,  8163,   3,   8, UNI_DT__FRA }   /* dt=fraction */,
+  {    13,  8589,   382,   7,   4, UNI_EGYP }   /* script=egyp */,
+  {     0,  2182,  5746,  21,   5, UNI_WB__EB }   /* graphemeclusterbreak=ebase */,
+  {   542,   184,  7368,   2,  10, UNI_SMALLFORMS }   /* issmallforms */,
+  {     0,  9240,     1,   5,   1, -UNI_DASH }   /* dash=n */,
+  {     0,  3836,  6840,  17,   4, UNI_NAND }   /* scriptextensions=nand */,
+  {     0,  9277,  6840,   3,  11, UNI_SC__NAND }   /* sc=nandinagari */,
+  {     0,  8780,  1723,   6,  23, UNI_SUPPUNCTUATION }   /* block=supplementalpunctuation */,
+  {     0,  9492,    17,   4,   1, UNI_BPT__O }   /* bpt=o */,
+  {     1,  3600,     0,   4,   0, UNI_UCAS }   /* ucas */,
+  {   329,  5578,   495,  14,   2, UNI_SB__NU }   /* sentencebreak=nu */,
+  {     0,  8780, 10051,   6,   3, UNI_OCR }   /* block=ocr */,
+  {  1295, 10296,  6506,   3,   7, UNI_PHAISTOS }   /* isphaistos */,
+  {    72,  3836,  9804,  17,   4, UNI_TALE }   /* scriptextensions=tale */,
+  {     0, 10027,  5396,   3,  14, UNI_JG__MANICHAEANRESH }   /* jg=manichaeanresh */,
+  {     4, 10048,  9904,   3,   3, UNI_NV__1_SLASH_5 }   /* nv=1/5 */,
+  {  2184,   133,     0,   4,   0, UNI_M }   /* mark */,
+  {     1,   184,  6609,   2,  10, UNI_DEP }   /* isdeprecated */,
+  {    76,  4688,  6433,  15,  12, UNI_IDENTIFIERTYPE__NOTCHARACTER }   /* identifiertype=notcharacter */,
+  {     0,  2224,  1295,   3,  24, UNI_SUPERANDSUB }   /* insuperscriptsandsubscripts */,
+  {     0,  9277,  3115,   3,  10, UNI_SC__DEVA }   /* sc=devanagari */,
+  {     0,  2224,  7379,   3,   9, UNI_SUPARROWSA }   /* insuparrowsa */,
+  {     0, 10048,  8027,   3,   8, UNI_NV__15_SLASH_2 }   /* nv=7.50e+00 */,
+  {    12,  1552,    44,  10,   1, UNI_SK }   /* category=sk */,
+  {     0,   184,  2560,   2,   4, UNI_MAND }   /* ismand */,
+  {     0,  9508,     8,   4,   1, UNI_CCC__A }   /* ccc=a */,
+  {   261,  6385,     0,  12,   0, UNI_GONM }   /* masaramgondi */,
+  {     1,  8780,  1393,   6,  24, UNI_ARABICPFB }   /* block=arabicpresentationformsb */,
+  {    62,  1417,  8568,  24,   7, UNI_CCC__1 }   /* canonicalcombiningclass=overlay */,
+  {   386,  5986,  7754,  13,   2, UNI_NV__11 }   /* numericvalue=11 */,
+  {     0,  9628,     0,   4,   0, UNI_LATN }   /* latn */,
+  {     0,  9275,  5634,   5,  14, UNI_INSC__VOWELDEPENDENT }   /* insc=voweldependent */,
+  {     0,  9444, 10114,   4,   3, UNI_AGE__6_DOT_3 }   /* age=v63 */,
+  {   139,  8780,  2608,   6,   6, UNI_INBRAHMI }   /* block=brahmi */,
+  {     0,  8780,  4289,   6,  16, UNI_MYANMAREXTB }   /* block=myanmarextendedb */,
+  {    91, 10060,     3,   3,   1, -UNI_RI }   /* ri=f */,
+  {    74,  8589,  9824,   7,   4, UNI_SC__TGLG }   /* script=tglg */,
+  {    15,  9277,  3753,   5,  15, UNI_KITS }   /* sc=khitansmallscript */,
+  {     0,  9676,     0,   4,   0, UNI_NARB }   /* narb */,
+  {     1,  2784,  7060,   4,   8, UNI_ARABICEXTA }   /* inarabicexta */,
+  {     6,  8589,  9876,   7,   4, UNI_XSUX }   /* script=xsux */,
+  {     0,  2280,  7280,   4,   8, UNI_XPEO }   /* isoldpersian */,
+  {     0,   184,  5674,   2,  12, UNI_BIDIM }   /* isbidimirrored */,
+  {  1305,  8894,     3,   6,   1, -UNI_JOINC }   /* joinc=f */,
+  {    13,  5791,  6337,  13,  12, UNI_JG__MALAYALAMNYA }   /* joininggroup=malayalamnya */,
+  {   798,   184,  1631,   2,  15, UNI_GEOMETRICSHAPES }   /* isgeometricshapes */,
+  {     1,  1188,  4386,   3,  15, UNI_TANGUTCOMPONENTS }   /* intangutcomponents */,
+  {   513, 10033,  1527,   3,   9, UNI_LB__SG }   /* lb=surrogate */,
+  {     5,   184,  7119,   3,   9, UNI_CHRS }   /* ischorasmian */,
+  {   224,  9712,     0,   4,   0, UNI_OSGE }   /* osge */,
+  {     0,  8267,  9836,   8,   4, UNI_RADICAL }   /* radical=true */,
+  {    59,  9768,  6973,   5,  10, UNI_SYLO }   /* scx=sylotinagri */,
+  {     1,  8780,   218,   7,  32, UNI_DIACRITICALSEXT }   /* block=combiningdiacriticalmarksextended */,
+  {   608,  5986,  9976,  13,   3, UNI_NV__5_SLASH_8 }   /* numericvalue=5/8 */,
+  {     2,  5986,  9360,  13,   4, UNI_NV___MINUS_1_SLASH_2 }   /* numericvalue=-1/2 */,
+  {   705, 10024,  5726,   3,  13, UNI_ME }   /* gc=enclosingmark */,
+  {    82,  8589,  4149,   8,   3, UNI_SARB }   /* script=sarb */,
+  {     0,  7418,    36,  10,   1, UNI_XPOSIXUPPER }   /* uppercase=t */,
+  {     0,  5791,  8918,  13,   6, UNI_JG__LAMADH }   /* joininggroup=lamadh */,
+  {   514,  8589,  8107,   7,   8, UNI_BALI }   /* script=balinese */,
+  {     0,  2161,  9836,  21,   4, UNI_EXTPICT }   /* extendedpictographic=true */,
+  {    64,  3836,  8187,  17,   4, UNI_HIRA }   /* scriptextensions=hira */,
+  {    16,  9488,  7239,   4,   2, UNI_INVS }   /* blk=vs */,
+  {  1616,  8589,  7428,   7,  10, UNI_WARA }   /* script=warangciti */,
+  {     0, 10288,    62,   8,   5, UNI_XPOSIXGRAPH }   /* isxposixgraph */,
+  {     1,  3379,     0,   6,   0, UNI_wspace_values_index }   /* space= */,
+  {  1042,  4658,     0,  15,   0, UNI_grext_values_index }   /* graphemeextend= */,
+  {     1, 10048,  9379,   3,   2, UNI_NV__41 }   /* nv=41 */,
+  {     5,  2280,   262,   3,   3, UNI_OSMA }   /* isosma */,
+  {     0,  1966,  4913,  22,  15, UNI_INSC__REGISTERSHIFTER }   /* indicsyllabiccategory=registershifter */,
+  {     0,  1812,     3,  22,   1, -UNI_CWL }   /* changeswhenlowercased=f */,
+  {     0,   184,    27,   2,   2, UNI_LOWERCASELETTER }   /* isll */,
+  {     0,  8780,  1879,   7,  21, UNI_CJKCOMPATIDEOGRAPHSSUP }   /* block=cjkcompatideographssup */,
+  {     0, 10048,  9412,   3,   4, UNI_NV__17_SLASH_2 }   /* nv=17/2 */,
+  {     0,  9262,   866,   3,   2, UNI_SB__SP }   /* sb=sp */,
+  {    37,  4838,    47,  15,   1, UNI_NFCQC__M }   /* nfkcquickcheck=m */,
+  {   224,  8589,  9664,   7,   4, UNI_MRO }   /* script=mroo */,
+  {     1,  9488,   689,   4,  30, UNI_CJKEXTG }   /* blk=cjkunifiedideographsextensiong */,
+  {     1,   184,  9285,   2,   5, UNI_LIMB }   /* islimbu */,
+  {    17,  5986,  7806,  13,   1, UNI_NV__6 }   /* numericvalue=6 */,
+  {     0,  7540,    26,   9,   1, UNI_EXT }   /* extender=y */,
+  {   607,  9277,  9320,   3,   5, UNI_OSGE }   /* sc=osage */,
+  {     2,  9768,  8618,   5,   6, UNI_SOYO }   /* scx=soyombo */,
+  {     0,  5746,    36,   6,   1, UNI_EBASE }   /* ebase=t */,
+  {     0,  3836,  8990,  17,   6, UNI_RJNG }   /* scriptextensions=rejang */,
+  {     5,  9768,  9696,   4,   4, UNI_OGAM }   /* scx=ogam */,
+  {     4,  3374,     3,  11,   1, -UNI_XPOSIXSPACE }   /* whitespace=f */,
+  {    12,   184,  1901,   3,   5, UNI_ZYYY }   /* iscommon */,
+  {   546, 10296,  7685,   3,   8, UNI_PAUC }   /* ispaucinhau */,
+  {     0,  6469,  5904,  12,   4, UNI_NV__NAN }   /* numerictype=none */,
+  {    80,  9277,  4793,   3,  15, UNI_MERC }   /* sc=meroiticcursive */,
+  {   128,  8780,  6554,   6,   3, UNI_INIDC }   /* block=idc */,
+  {     2,  9444,  7979,   4,   3, UNI_AGE__6 }   /* age=6.0 */,
+  {     0,  1269,     0,  25,   0, UNI_compex_values_index }   /* fullcompositionexclusion= */,
+  {  1040,  9277,  8464,   4,   6, UNI_SC__KALI }   /* sc=kayahli */,
+  {     1,  1417,  9203,  24,   2, UNI_CCC__34 }   /* canonicalcombiningclass=34 */,
+  {    29,  3836,  6181,  17,  12, UNI_GONG }   /* scriptextensions=gunjalagondi */,
+  {     0,  3151,     1,  18,   1, -UNI_EPRES }   /* emojipresentation=n */,
+  {    45,  5791,  6373,  13,  12, UNI_JG__MANICHAEANPE }   /* joininggroup=manichaeanpe */,
+  {     0,  2224,  8611,   3,   6, UNI_INSIDDHAM }   /* insiddham */,
+  {    24,  6061,     1,  12,   1, -UNI_BIDIC }   /* bidicontrol=n */,
+  {     4,   184,  6505,   2,  12, UNI_PHAISTOS }   /* isphaistosdisc */,
+  {     0,  5986,  9405,  13,   3, UNI_NV__3_SLASH_2 }   /* numericvalue=3/2 */,
+  {     0,  1552,  4568,   9,  14, UNI_SC }   /* category=currencysymbol */,
+  {    80, 10333,  9789,   3,   3, UNI_SHRD }   /* isshrd */,
+  {     3,  9275,  3615,   5,  17, UNI_INSC__CONSONANTPREFIXED }   /* insc=consonantprefixed */,
+  {     0,  9508,  7930,   4,   2, UNI_CCC__14 }   /* ccc=14 */,
+  {     0,  9277,  6409,   3,  12, UNI_MEND }   /* sc=mendekikakui */,
+  {    33,  9277,  9576,   3,   4, UNI_SC__GURU }   /* sc=guru */,
+  {     0,  4916,  4929,   3,   7, UNI_TAMILSUP }   /* istamilsup */,
+  {    18,  9488,  3938,   5,  10, UNI_BOPOMOFOEXT }   /* blk=bopomofoext */,
+  {    19,   184,  2608,   2,   4, UNI_BRAH }   /* isbrah */,
+  {     1,  9488,  8900,   4,   6, UNI_INKAITHI }   /* blk=kaithi */,
+  {     0,  5791,  6950,  13,  11, UNI_JG__STRAIGHTWAW }   /* joininggroup=straightwaw */,
+  {    16,  9262,  1867,   3,   5, UNI_SB__UP }   /* sb=upper */,
+  {     2,  4916,  8667,   3,   6, UNI_TIRH }   /* istirhuta */,
+  {     3,  8267,  9255,   8,   5, -UNI_RADICAL }   /* radical=false */,
+  {  2185,  9488,  4129,   4,   6, UNI_LATIN1 }   /* blk=latin1 */,
+  {   986,   184,  2099,   3,  20, UNI_CJKCOMPATFORMS }   /* iscjkcompatibilityforms */,
+  {   680,  3901,  8181,   4,   6, UNI_INGURMUKHI }   /* ingurmukhi */,
+  {  1185,  1188,  8584,   3,   3, UNI_TAGS }   /* intags */,
+  {   242,  9768,  8604,   5,   6, UNI_SHAW }   /* scx=shavian */,
+  {     0,   184,  3576,   3,   2, UNI_CWL }   /* iscwl */,
+  {     0,  1417,  9925,  24,   3, UNI_CCC__BL }   /* canonicalcombiningclass=218 */,
+  {   436,  3836,  6385,  17,  12, UNI_GONM }   /* scriptextensions=masaramgondi */,
+  {     0,   184,  9568,   2,   4, UNI_GREK }   /* isgrek */,
+  {     6,  4542,  4051,   4,   9, UNI_GEORGIANEXT }   /* ingeorgianext */,
+  {     0,  3836,  9032,  17,   6, UNI_WCHO }   /* scriptextensions=wancho */,
+  {     0,  4688,  8972,  15,   6, UNI_IDENTIFIERTYPE__NOTXID }   /* identifiertype=notxid */,
+  {     1,  9520, 10135,   4,   3, UNI_CWL }   /* cwl=yes */,
+  {   232,   184,  1823,   2,   5, UNI_XPOSIXLOWER }   /* islower */,
+  {     2,   184,  6265,   2,  12, UNI_NL }   /* isletternumber */,
+  {   462,  9508,  9952,   4,   3, UNI_CCC__IS }   /* ccc=240 */,
+  {   133,  3836,  8470,  17,   7, UNI_LINA }   /* scriptextensions=lineara */,
+  {   164,  9716,  9255,   4,   5, -UNI_PCM }   /* pcm=false */,
+  {  1876, 10333,  1537,   3,   3, UNI_SIND }   /* issind */,
+  {     0,  9508,  8805,   5,   4, UNI_CCC__11 }   /* ccc=ccc11 */,
+  {     3,  8589,  4478,   7,   7, UNI_BRAI }   /* script=braille */,
+  {    17,  9508,  8819,   4,   3, UNI_CCC__129 }   /* ccc=129 */,
+  {     1,  3349,     0,  18,   0, UNI_ZP }   /* paragraphseparator */,
+  {  2098,  8780,  4385,   6,   6, UNI_INTANGUT }   /* block=tangut */,
+  {     0, 10027, 10021,   3,   3, UNI_JG__GAF }   /* jg=gaf */,
+  {     0,  7218,  5999,  10,  13, UNI_LB__PR }   /* linebreak=prefixnumeric */,
+  {    49,  1417,  9111,  25,   4, UNI_CCC__16 }   /* canonicalcombiningclass=ccc16 */,
+  {    45,  2779,  1025,  19,   2, -UNI_IDST }   /* idstrinaryoperator=no */,
+  {     0,  5324,  5949,   4,  11, UNI_MAYANNUMERALS }   /* inmayannumerals */,
+  {   216,  7218,  1465,  10,  13, UNI_LB__CM }   /* linebreak=combiningmark */,
+  {  1408,  4337,     0,  16,   0, UNI_SUPMATHOPERATORS }   /* supmathoperators */,
+  {     0,  1552,  2349,   9,  20, UNI_PC }   /* category=connectorpunctuation */,
+  {     0,  8930,    36,   6,   1, UNI_XPOSIXLOWER }   /* lower=t */,
+  {     0,  5578,   751,  14,   5, UNI_SB__CL }   /* sentencebreak=close */,
+  {     0,  5791,     0,  13,   0, UNI_jg_values_index }   /* joininggroup= */,
+  {     8,   184,  2912,   2,  12, UNI_SUNDANESESUP }   /* issundanesesup */,
+  {  1363,  5494,     0,  14,   0, UNI_MN }   /* nonspacingmark */,
+  {     0,  9488,  8491,   4,   7, UNI_INMARCHEN }   /* blk=marchen */,
+  {     0,  3836,  6973,  18,   3, UNI_SYLO }   /* scriptextensions=sylo */,
+  {     0,  7388,     0,  10,   0, UNI_SUPARROWSB }   /* suparrowsb */,
+  {   927,  9768,  9756,   4,   4, UNI_RUNR }   /* scx=runr */,
+  {     0,  3151,  9255,  18,   5, -UNI_EPRES }   /* emojipresentation=false */,
+  {     0,  6420,  8562,   3,   6, UNI_INOSMANYA }   /* inosmanya */,
+  {     5,  9488,  1006,   4,  17, UNI_ANCIENTGREEKMUSIC }   /* blk=ancientgreekmusic */,
+  {     0,  9556, 10015,   4,   3, UNI_WB__EB }   /* gcb=ebg */,
+  {     0,  8780,   867,   6,  18, UNI_PHONETICEXT }   /* block=phoneticextensions */,
+  {     0,  3836,  9644,  17,   4, UNI_MEDF }   /* scriptextensions=medf */,
+  {     0,  5986,  7931,  13,   8, UNI_NV__5_SLASH_12 }   /* numericvalue=4.17e-01 */,
+  {     0,  9275,   728,   5,   6, UNI_INSC__NUMBER }   /* insc=number */,
+  {     1,  5986,  8720,  13,   5, UNI_NV__40000 }   /* numericvalue=40000 */,
+  {   769,  5791,  5934,  13,  13, UNI_JG__MANICHAEANWAW }   /* joininggroup=manichaeanwaw */,
+  {  2308,  3836,  5003,  17,  15, UNI_ZANB }   /* scriptextensions=zanabazarsquare */,
+  {    10,  2784,  1371,   4,  22, UNI_ARABICPFA }   /* inarabicpresentationformsa */,
+  {     0,  9492,     1,   4,   1, UNI_BPT__N }   /* bpt=n */,
+  {     1,  9780,     0,   4,   0, UNI_SHAW }   /* shaw */,
+  {    40,  7076,  1586,   3,  13, UNI_BYZANTINEMUSIC }   /* inbyzantinemusic */,
+  {     0,  9488,  9096,   5,   4, UNI_INBUHID }   /* blk=buhid */,
+  {  1364,  8589,  2560,   7,   4, UNI_SC__MAND }   /* script=mand */,
+  {   541,  2280,  7668,   4,   7, UNI_ORKH }   /* isoldturkic */,
+  {    11, 10048,  9372,   3,   3, UNI_NV__1_SLASH_4 }   /* nv=1/4 */,
+  {     0,  3836,  9608,  17,   4, UNI_KITS }   /* scriptextensions=kits */,
+  {     1,  9277,  7651,   3,   4, UNI_ITAL }   /* sc=ital */,
+  {     0,  8780,  8171,   6,   8, UNI_INGUJARATI }   /* block=gujarati */,
+  {     4, 10027,  4763,   3,  15, UNI_JG__MANICHAEANSADHE }   /* jg=manichaeansadhe */,
+  {  2560,  8780,  3421,   6,  18, UNI_RUMI }   /* block=ruminumeralsymbols */,
+  {   691, 10027,  5918,   3,   3, UNI_JG__TAW }   /* jg=taw */,
+  {     1, 10024,  5040,   3,   5, UNI_XPOSIXDIGIT }   /* gc=digit */,
+  {     0,  8780,  1922,   6,  22, UNI_DIACRITICALSFORSYMBOLS }   /* block=diacriticalsforsymbols */,
+  {     7,  9768,  9460,   4,   4, UNI_ARMI }   /* scx=armi */,
+  {     0,  9768,  2329,   4,  20, UNI_HLUW }   /* scx=anatolianhieroglyphs */,
+  {   786,  1552,  5726,   9,  13, UNI_ME }   /* category=enclosingmark */,
+  {     5,  8267,     3,   8,   1, -UNI_RADICAL }   /* radical=f */,
+  {  3779,  8780,  1369,   6,  24, UNI_ARABICPFA }   /* block=arabicpresentationformsa */,
+  {     0,  7438,   400,  10,   6, UNI_WB__FO }   /* wordbreak=format */,
+  {  1028,  7218,  1527,  10,   9, UNI_LB__SG }   /* linebreak=surrogate */,
+  {     0,  9768,  9656,   4,   4, UNI_MIAO }   /* scx=miao */,
+  {     0,  9277,  9285,   3,   4, UNI_SC__LIMB }   /* sc=limb */,
+  {    21,  9444, 10105,   4,   3, UNI_AGE__6 }   /* age=v60 */,
+  {     0,  4448,     0,  15,   0, UNI_BAMUMSUP }   /* bamumsupplement */,
+  {   404,   184,  9245,   2,   5, UNI_DOGR }   /* isdogra */,
+  {     0,  3169,     0,  11,   0, UNI_ETHIOPICSUP }   /* ethiopicsup */,
+  {   833,   184,  4448,   2,  15, UNI_BAMUMSUP }   /* isbamumsupplement */,
+  {     0,  9488,  2722,   4,  10, UNI_JAMO }   /* blk=hanguljamo */,
+  {    11,  9696,     0,   4,   0, UNI_OGAM }   /* ogam */,
+  {  1713,  8589,  9335,   7,   4, UNI_SC__TAKR }   /* script=takr */,
+  {     5, 10060,  9836,   3,   4, UNI_RI }   /* ri=true */,
+  {     0,  8780,  7068,   6,  10, UNI_ASCII }   /* block=basiclatin */,
+  {    16,  9796,     0,   4,   0, UNI_SYRC }   /* syrc */,
+  {  1097,  6576,     1,  11,   1, -UNI_XPOSIXALPHA }   /* alphabetic=n */,
+  {     0,  4033, 10168,  16,   2, UNI_CASEDLETTER }   /* generalcategory=l& */,
+  {     0,  7076,  3938,   3,   7, UNI_INBOPOMOFO }   /* inbopomofo */,
+  {     0,  8780,  3796,   7,   3, UNI_INCHAM }   /* block=cham */,
+  {    18,   184,  6884,   2,  11, UNI_HMNG }   /* ispahawhhmong */,
+  {  1061,  8147,     1,   8,   1, -UNI_EXTPICT }   /* extpict=n */,
+  {  1898, 10296,   472,   3,   2, UNI_PUA }   /* ispua */,
+  {     1,  9786,  1702,   4,  21, UNI_SHORTHANDFORMATCONTROLS }   /* inshorthandformatcontrols */,
+  {  1921,  8780,  1442,   7,  23, UNI_CJKSYMBOLS }   /* block=cjksymbolsandpunctuation */,
+  {     5,  4808,     0,  15,   0, UNI_MISCPICTOGRAPHS }   /* miscpictographs */,
+  {     0,  1966,  1244,  22,  25, UNI_INSC__CONSONANTINITIALPOSTFIXED }   /* indicsyllabiccategory=consonantinitialpostfixed */,
+  {   576,  5986,  8756,  13,   4, UNI_NV__9000 }   /* numericvalue=9000 */,
+  {     2,  8780,  8380,   7,   6, UNI_CJKEXTE }   /* block=cjkexte */,
+  {     0,  9488,   316,   4,  33, UNI_SUPMATHOPERATORS }   /* blk=supplementalmathematicaloperators */,
+  {   243,  9488,   659,   4,  30, UNI_CJKEXTF }   /* blk=cjkunifiedideographsextensionf */,
+  {     0,   184,  9664,   2,   4, UNI_MRO }   /* ismroo */,
+  {     0,  9488,  3439,   4,  12, UNI_SMALLKANAEXT }   /* blk=smallkanaext */,
+  {   184,   184,  6253,   2,  12, UNI_KHMERSYMBOLS }   /* iskhmersymbols */,
+  {   476,  3836,  7278,  17,  10, UNI_XPEO }   /* scriptextensions=oldpersian */,
+  {     0,  8666,     0,   4,   0, UNI_TIRH }   /* tirh */,
+  {   224,   184,  2409,   2,  20, UNI_GLAGOLITICSUP }   /* isglagoliticsupplement */,
+  {   626,  8589,  5284,   7,   4, UNI_LISU }   /* script=lisu */,
+  {    20,  2280,  1061,   3,  26, UNI_OCR }   /* isopticalcharacterrecognition */,
+  {   568,  9277,  8299,   3,   8, UNI_TFNG }   /* sc=tifinagh */,
+  {     0,  6205, 10135,  12,   3, UNI_IDEO }   /* ideographic=yes */,
+  {     0,  5713,     0,  13,   0, UNI_XPOSIXDIGIT }   /* decimalnumber */,
+  {     0,    21,  7576,   2,   9, UNI_LATINEXTB }   /* inlatinextb */,
+  {  3194, 10048,  8720,   3,   2, UNI_NV__40 }   /* nv=40 */,
+  {     0,  5791,  5921,  13,  13, UNI_JG__MANICHAEANTEN }   /* joininggroup=manichaeanten */,
+  {     4,  6231,  4560,   9,   8, UNI_CONTROLPICTURES }   /* incontrolpictures */,
+  {  1284,  8768, 10135,   6,   3, UNI_BIDIC }   /* bidic=yes */,
+  {  3068,  2268,     0,   2,   0, UNI_PD }   /* pd */,
+  {     0,  6553,  1025,  12,   2, -UNI_XIDC }   /* xidcontinue=no */,
+  {    14,   184,   132,   2,   2, UNI_LM }   /* islm */,
+  {     8,  8589,  6481,   7,  12, UNI_HUNG }   /* script=oldhungarian */,
+  {     0, 10132,  7612,   3,   6, UNI_WB__MN }   /* wb=midnum */,
+  {     0,  4033,  6035,  16,   2, UNI_PF }   /* generalcategory=pf */,
+  {     4,  9520,    26,   4,   1, UNI_CWL }   /* cwl=y */,
+  {     1,  5986,  7469,  13,   1, UNI_NV__5 }   /* numericvalue=5 */,
+  {     0,  9488,  4449,   5,  14, UNI_BAMUMSUP }   /* blk=bamumsupplement */,
+  {     4,  8780,   908,   6,  14, UNI_PUA }   /* block=privateusearea */,
+  {  2707,  8694,     1,   7,   1, -UNI_XPOSIXSPACE }   /* wspace=n */,
+  {   292,  3683,     0,  17,   0, UNI_ETHIOPICEXTA }   /* ethiopicextendeda */,
+  {     0,  9768,  8680,   4,   7, UNI_ZZZZ }   /* scx=unknown */,
+  {   323,  4791,  2062,   3,  14, UNI_MODIFIERLETTERS }   /* inmodifierletters */,
+  {    20,  7028,  7028,   3,  10, UNI_YISYLLABLES }   /* isyisyllables */,
+  {     1,  9624,     0,   3,   0, UNI_LAO }   /* lao */,
+  {     2,  8870,  9255,   6,   5, -UNI_EPRES }   /* epres=false */,
+  {   529,  3836,  7694,  18,   8, UNI_SAMR }   /* scriptextensions=samaritan */,
+  {  3055,  9444,  9979,   4,   3, UNI_AGE__6_DOT_1 }   /* age=6.1 */,
+  {  3202, 10012,  7486,   3,   9, UNI_EA__A }   /* ea=ambiguous */,
+  {     0,  1417,  9208,  24,   2, UNI_CCC__35 }   /* canonicalcombiningclass=35 */,
+  {     1,   184,  9688,   2,   3, UNI_NKO }   /* isnko */,
+  {     0,  9350, 10135,   5,   3, UNI_XIDS }   /* xids=yes */,
+  {   161,  7418,  9836,  10,   4, UNI_XPOSIXUPPER }   /* uppercase=true */,
+  {     0,  1552,    47,  10,   1, UNI_SM }   /* category=sm */,
+  {     0,  9277,  9568,   3,   4, UNI_SC__GREK }   /* sc=grek */,
+  {     0,  8589,  6193,   7,   6, UNI_HEBR }   /* script=hebrew */,
+  {  3120,   184,  5550,   2,  14, UNI_PHLP }   /* ispsalterpahlavi */,
+  {  1046,  7155,  6321,   3,   3, UNI_HMNG }   /* ishmng */,
+  {     0,  8984,    26,   6,   1, UNI_QMARK }   /* qmark=y */,
+  {    73,  1218,     0,   8,   0, UNI_KANA }   /* katakana */,
+  {     0,  8589,  8344,   7,   4, UNI_SC__BENG }   /* script=beng */,
+  {  1289,     7,     0,  18,   0, UNI_CANS }   /* canadianaboriginal */,
+  {  1836,  1591,  3170,   3,  17, UNI_ETHIOPICSUP }   /* inethiopicsupplement */,
+  {  3201,  5032, 10135,  14,   3, UNI_POSIXXDIGIT }   /* asciihexdigit=yes */,
+  {     7,  8449,  1025,   7,   2, -UNI_HYPHEN }   /* hyphen=no */,
+  {   136,  9488,  1911,   4,  11, UNI_NUMBERFORMS }   /* blk=numberforms */,
+  {  1674,  9508,  7933,   4,   2, UNI_CCC__17 }   /* ccc=17 */,
+  {     0,  8512,    47,   7,   1, UNI_NFCQC__M }   /* nfkcqc=m */,
+  {   139,  9786,  8605,   4,   5, UNI_SHAW }   /* inshavian */,
+  {     0,  6420,  7658,   3,   8, UNI_INOLDPERMIC }   /* inoldpermic */,
+  {     0,  1654,     0,   6,   0, UNI_HANG }   /* hangul */,
+  {     0,  5578,     0,  16,   0, UNI_SB__SP }   /* sentencebreak=sp */,
+  {   332,  4033,  1025,  16,   2, UNI_NO }   /* generalcategory=no */,
+  {  2690,  1417,  9218,  24,   2, UNI_CCC__84 }   /* canonicalcombiningclass=84 */,
+  {     0,  1189,    11,   3,   2, UNI_NT__DI }   /* nt=di */,
+  {    12,  7218,  1140,  10,  26, UNI_LB__CJ }   /* linebreak=conditionaljapanesestarter */,
+  {  3801,  6241,  6994,  12,  11, UNI_JT__T }   /* joiningtype=transparent */,
+  {     0,  8688,  3548,   3,   9, UNI_ALCHEMICAL }   /* isalchemical */,
+  {   816,  6554,  1025,  11,   2, -UNI_IDC }   /* idcontinue=no */,
+  {     1, 10176,     0,   2,   0, UNI_ZL }   /* zl */,
+  {    24,  9250,     0,   6,   0, -UNI_EMOD }   /* emod=f */,
+  {     0,  1790,  9255,  22,   5, -UNI_CWCM }   /* changeswhencasemapped=false */,
+  {  2428, 10027,  9744,   3,   4, UNI_JG__QAPH }   /* jg=qaph */,
+  {     1,  3853,    26,  17,   1, UNI_STERM }   /* sentenceterminal=y */,
+  {  2398,  4542,  3243,   4,   6, UNI_INGEORGIAN }   /* ingeorgian */,
+  {   531,   184,  9676,   2,   4, UNI_NARB }   /* isnarb */,
+  {    12,  8780,  7693,   6,   9, UNI_INSAMARITAN }   /* block=samaritan */,
+  {     5,  1417,  8805,  25,   4, UNI_CCC__11 }   /* canonicalcombiningclass=ccc11 */,
+  {     0,  9488,  4369,   4,   9, UNI_SYRIACSUP }   /* blk=syriacsup */,
+  {  4367,  8780,  5752,   6,   8, UNI_GREEKEXT }   /* block=greekext */,
+  {     0,  1537,  1924,   4,  20, UNI_DIACRITICALSFORSYMBOLS }   /* indiacriticalsforsymbols */,
+  {     0,  3836,  8561,  17,   4, UNI_OSMA }   /* scriptextensions=osma */,
+  {  3590,  9508,  8811,   5,   4, UNI_CCC__12 }   /* ccc=ccc12 */,
+  {  7694,   509,     0,  30,   0, UNI_CJKEXTA }   /* cjkunifiedideographsextensiona */,
+  {     0,  8780,  6277,   6,  12, UNI_MAHJONG }   /* block=mahjongtiles */,
+  {     4,  5986,  5648,  13,   4, UNI_NV__1000 }   /* numericvalue=1000 */,
+  {     0,  2280,  4870,   4,  13, UNI_NARB }   /* isoldnortharabian */,
+  {  7122,  8780,  3751,   6,  17, UNI_INKHITANSMALLSCRIPT }   /* block=khitansmallscript */,
+  {     5,  9277,  8219,   3,   4, UNI_SC__JAVA }   /* sc=java */
 };
 
 MPH_VALt match_uniprop( const unsigned char * const key, const U16 key_len ) {
@@ -7217,7 +7468,7 @@ MPH_VALt match_uniprop( const unsigned char * const key, const U16 key_len ) {
     U32 s;
     U32 n;
     do {
-        h ^= *ptr;
+        h ^= NATIVE_TO_LATIN1(*ptr);    /* table collated in Latin1 */
         h *= MPH_FNV_CONST;
     } while ( ++ptr < ptr_end );
     n= h % MPH_BUCKETS;
@@ -7238,56 +7489,58 @@ MPH_VALt match_uniprop( const unsigned char * const key, const U16 key_len ) {
 }
 
 /* Generated from:
- * d34c77b7e7a94986cc82056919f4ffc1503b73091561e16bd8ef145ac0fd04c5 lib/Unicode/UCD.pm
- * 5e91b649379ec79af7cfb6b09410a24557cba4c6d733cd0a2b8a78a1448736d2 lib/unicore/ArabicShaping.txt
- * f5feb19cd084b2b1568fbc0f94f4b4b54941406e7fb36c7570f8352fd5022dbe lib/unicore/BidiBrackets.txt
- * e6cbd8ffe94f2e0fbfa6695d6c06c1e72eef7d3aa93cb6329d111285198b5e62 lib/unicore/BidiMirroring.txt
- * a28b205afe8625fffdb6544a5fe14cf02b91493d9900f07820fa2102a17548f7 lib/unicore/Blocks.txt
- * 9c772627c6ee77eea6a17b42927b8ee28ca05dc65d6a511062104baaf3d12294 lib/unicore/CaseFolding.txt
- * abc8394c5bde62453118b00c1c5842160a04d7fffb2e829ee5426b846596d081 lib/unicore/CompositionExclusions.txt
- * 2fc081011d8fabaf7cf4937732dd5a6d6a57e492c43f3adfeded513387ee0ec3 lib/unicore/DAge.txt
- * a6eb7a8671fb532fbd88c37fd7b20b5b2e7dbfc8b121f74c14abe2947db0da68 lib/unicore/DCoreProperties.txt
- * 92dcdda84142194a1596f22180fcdf8c0e7f86897f09cc9203c7dc636c549f5f lib/unicore/DNormalizationProps.txt
- * 904500178b2e752635bef27aaed3a2a3718a100bce35ff96b3890be7a8315d8f lib/unicore/EastAsianWidth.txt
- * 1989b03d93023d8f5cc33eebf0d2ea80c8bd8f8c97843059ea039acb582c2078 lib/unicore/EmojiData.txt
- * d7930c2a7318e66b4ba756d5e5b41fbc586c2ad43d450ae9d320a758510bae2e lib/unicore/EquivalentUnifiedIdeograph.txt
- * 8606af08712a8c18fe268d418e2e5a87eddee6e190cce4c2d5a76b4fadf035e8 lib/unicore/HangulSyllableType.txt
- * 49a1bf18b048454154881f6a8a605b5e2fc73e85fcc4df1cb26d52e8c2aeb9bf lib/unicore/IndicPositionalCategory.txt
- * 1b6f3ef6e00e5b2e2a93d2d3c954ca1cce368599c5f11874cd0f0ce222d4637b lib/unicore/IndicSyllabicCategory.txt
- * 285c5c1ae458bc3ccd6a1398a94d2d67ce6bc1d7fc0f098762836050345e9434 lib/unicore/Jamo.txt
- * 961f842fc70b5afd1d82c6645e68c10d1f701382aed38ae38cb2ff27f671903c lib/unicore/LineBreak.txt
- * ff61a0687d2f32c0dd1094254b8bde967883b43c2d4d50fd17531d498e41ab2c lib/unicore/NameAliases.txt
- * d3eb9a288ebeaf9de1237989f490705e287b6f610b59d2459fb1b7c2d8e39c39 lib/unicore/NamedSequences.txt
- * d30d3ee430cf3527449d024954f053e419fa4aa2246eb59e5cd8d621af0c4b3f lib/unicore/PropList.txt
- * efce54f7c715a332c19b3d14c6a0eea30c6cde91caf6ff0d21c755be933736f4 lib/unicore/PropValueAliases.txt
- * d3cc3f9f0b6a8f0b7ef1d6ef202675426c28f4a75de01fc69ed977a93a00982b lib/unicore/PropertyAliases.txt
- * 3746848c181b5dbc1e614dfac9b8a5e3568e6525c693ac14e692ac55dec57e91 lib/unicore/ScriptExtensions.txt
- * e6313a8edfd24f36c7a006fbcf1d1b7245b5dd009c6dde80441f0da08b822c43 lib/unicore/Scripts.txt
- * 817ce2e9edca8e075a153f54b8f3b020345e37652cd2bda9b1495c366af17e7e lib/unicore/SpecialCasing.txt
- * 93ab1acd8fd9d450463b50ae77eab151a7cda48f98b25b56baed8070f80fc936 lib/unicore/UnicodeData.txt
- * ec5ba64af58297a46de17848eb984d2b231adb304de92e9d0d3befdbf9dc2551 lib/unicore/VerticalOrientation.txt
- * 95bd55cf803b93eb0b4990cf0e1d70ede263b36412d9c6921fd6f15cef058961 lib/unicore/auxiliary/GCBTest.txt
- * 39d73448fd257e6082f83ddf4c8bf6feb191e85dc8fc56b1a8512482de5e3dea lib/unicore/auxiliary/GraphemeBreakProperty.txt
- * f385e70f79f5959ae66d64b00f4bda39db6cef78e5363a0cdd88db46eafc6c8f lib/unicore/auxiliary/LBTest.txt
- * 7d6c909af97d0ab545a132d412f6e4e65c7eb5158514a7feb9bf00bcd05875f9 lib/unicore/auxiliary/SBTest.txt
- * c47d674ef4170c46185bf56f7a4c6627f65f012295e0994f7dc4aea51f8fd8cf lib/unicore/auxiliary/SentenceBreakProperty.txt
- * 3e3320bbbe775de7f1a0b9a30021eb949116a9b05cb461c90596c5ecf1743831 lib/unicore/auxiliary/WBTest.txt
- * f221f89fe3bb3becc00de726d5694c4b7f464c316baff6d339b2ff3900bcb96c lib/unicore/auxiliary/WordBreakProperty.txt
- * db2c41c618bab54b00e58223ad11cec550f9b9fd1a471de236e660da92fe4870 lib/unicore/extracted/DBidiClass.txt
- * fecd8a1c49935d794c4c1012f4158aa536a13049a4c10d01aaf7b5f90f3b2cbc lib/unicore/extracted/DBinaryProperties.txt
- * db6f38fb4aa8b9181b5e6a9f320de9d5c2c9b5687116a619b3cb90138b025e0b lib/unicore/extracted/DCombiningClass.txt
- * 2524f69c175831fd84bfbaf13ea37992f41db167d728c51b1d0002c1d0b130b0 lib/unicore/extracted/DDecompositionType.txt
- * 16852301d54ae59b5cfe0daa6b8e17fb688ed055d59b2a5a11eaafc650cc9d30 lib/unicore/extracted/DEastAsianWidth.txt
- * 78f898b988049a5bea5039cea6ffe87a92596859ac660a6c438519b512fe2ee6 lib/unicore/extracted/DGeneralCategory.txt
- * 33441692403901287c834f96bd33b671133a6f74e2732c61a497608b9e434932 lib/unicore/extracted/DJoinGroup.txt
- * a792ac5ef602e3bace679cc96d7491701dcdb73d81c782253de88fdcc5e70e50 lib/unicore/extracted/DJoinType.txt
- * 78e2600e24fa7d5ab62117de50b382f8b31b08401c37a0782c38dacb340b64e7 lib/unicore/extracted/DLineBreak.txt
- * 1bde4ad73e271c6349fbd1972e54f38bba5cc1900c28f678e79b9e8909b31793 lib/unicore/extracted/DNumType.txt
- * 6278722699123f3890e4b1cc42011e96d8960e4958a3b93484361530983d2611 lib/unicore/extracted/DNumValues.txt
- * b3d90fc23817ea4e33e9a90107c0a6c7b23314efd5712905ed172624d5524693 lib/unicore/mktables
- * a712c758275b460d18fa77a26ed3589689bb3f69dcc1ea99b913e32db92a5cd2 lib/unicore/version
+ * d60b1a3dffe16c4aaaf3f00d21993bb320d05e9828b106182214764d4c69935c lib/Unicode/UCD.pm
+ * ce96627d4fc91b4fd886c409caeb9b76cf7bd345e12f05c6701add7f233f6437 lib/unicore/ArabicShaping.txt
+ * 0e69eef3da722cc104522d8372e86d5b86bb7afcc761b0c991e39e832294946d lib/unicore/BidiBrackets.txt
+ * a00d9d21585106a52113fb7b1d3d0373a5835be72e76862fb559ebddd474d70e lib/unicore/BidiMirroring.txt
+ * 81a82b6a9fcf1a9c12f588d7a1decd73a9afdc4cac95b0eb7e576e7942d6c19f lib/unicore/Blocks.txt
+ * 99d231d7c91688bbe8ca8ccebcc2f46b5b222f844babe4827295bae11e2abe5f lib/unicore/CaseFolding.txt
+ * 38badafd818d8405324fe298c0676be0c95186368c84b5368375fd871a645144 lib/unicore/CompositionExclusions.txt
+ * e779a443d3aa2a3166a15becaa2b737c922480e32c0453d5956093633555078f lib/unicore/DAge.txt
+ * a5d45f59b39deaab3c72ce8c1a2e212a5e086dff11b1f9d5bb0e352642e82248 lib/unicore/DCoreProperties.txt
+ * 3ac44e11c84bdaf6b207d2c2c20eed857ae17052393fc7f71b0fe951186ba906 lib/unicore/DNormalizationProps.txt
+ * 4f822ec7a9ebbb3138ad29bade8b9688d25b39c7a3c0b7431f01e7229e4fcb6e lib/unicore/EastAsianWidth.txt
+ * fc535aa1047a70105ab9a22c2b4c3f363a2ff02fe48ebbc5eeb9873b2752ff0b lib/unicore/EquivalentUnifiedIdeograph.txt
+ * b9c5158ce944d2fec57e0e4ecb716bdabfc3bdde73525f1772fe03f61a30d473 lib/unicore/HangulSyllableType.txt
+ * 36c1b2a626ff1fb23b8b21e6ea8712698f8ce668dded1cb48b8ddf6a6a1b04e9 lib/unicore/IdStatus.txt
+ * 4857c4ffa3898e6128b2d46b0a02e499a663fb91464a69ef3611096f01293acc lib/unicore/IdType.txt
+ * 69197b019fa5f2fb0d8c6ed1ed8acb9f2e8b5b8f45a947953ffa652f3bf54983 lib/unicore/IndicPositionalCategory.txt
+ * 6604e2f0fde7428675364aa0006bc686b79488dcc60ae8cb29800af2be3352e8 lib/unicore/IndicSyllabicCategory.txt
+ * 84ead63924aaa74b988b2eaf254a8733276ed108633ce2ef77a9ee1de7818162 lib/unicore/Jamo.txt
+ * d5abcd8f54c8a2aa912924c485ccf7f968ad98feaa303d8e9a29ad89172f1faf lib/unicore/LineBreak.txt
+ * 985128e8c8b2540233331d9b27d897d2c23bd5bcf1d05da960befce6efc59542 lib/unicore/NameAliases.txt
+ * 27282b8aa01d4d0c44aef436cb74195ae8639ffa187aeee4e6247af76febea76 lib/unicore/NamedSequences.txt
+ * 485b5a3ed25dbf1f94dfa5a9b69d8b4550ffd0c33045ccc55ccfd7c80b2a40cf lib/unicore/PropList.txt
+ * 6b3902e9268cd843fe65cbdea992108c9528343ec0679f800b96f356bb553e5a lib/unicore/PropValueAliases.txt
+ * 2bd5777847e3d6add3c7e5c0d1393ddcab89e5a0ac3ff498cb0c53041f0b86e4 lib/unicore/PropertyAliases.txt
+ * 03a61dc89422e44cc2b73e8e893321007880ab69e2a4d281c0f1bc29c602b9d0 lib/unicore/ScriptExtensions.txt
+ * 9a5ed1ec9b5f0d7147e9371ad792ab39203611af7637cff2aa4a5c663b172cde lib/unicore/Scripts.txt
+ * 6424312f1dc39b22e0ff9c0ffb13dfad424d9b03e6a6dc6bca941f6bf5ef1ffd lib/unicore/SpecialCasing.txt
+ * bdbffbbfc8ad4d3a6d01b5891510458f3d36f7170422af4ea2bed3211a73e8bb lib/unicore/UnicodeData.txt
+ * 160f41816234addb511901d5f21febd69574578dd93de6ef8153e35693325575 lib/unicore/VerticalOrientation.txt
+ * 32dfb37d21db530529a6ec3dc13d96f21f8e7c7faf7ff3db8a9760cd76cec81d lib/unicore/auxiliary/GCBTest.txt
+ * 2bd3c5e2d62701ff81fb3ec318e179a4618cabb1493b1e0dd2b4e7e56c5437c4 lib/unicore/auxiliary/GraphemeBreakProperty.txt
+ * c51fbebfa82a0f36473b44bfd71d5ef6cb6a1f81fb313375dc9a1910d79bb2b6 lib/unicore/auxiliary/LBTest.txt
+ * 80b0107750818d8f370bd120b6fe56b6855b60581f72affe8b60409a469b4b65 lib/unicore/auxiliary/SBTest.txt
+ * 09e3166ebab166ac630a227f77f4e794ebd433271abd5588f5a67e7f199c71ee lib/unicore/auxiliary/SentenceBreakProperty.txt
+ * bf5373ce28a5df06796c93dc159dd15a997bb2950c92704b40ae8190cfc3716d lib/unicore/auxiliary/WBTest.txt
+ * a2b7373cf2fe3fa3b26dbb53405ca849985f771ff47f1c61743978003ff80499 lib/unicore/auxiliary/WordBreakProperty.txt
+ * d2686f400a638c80775d7c662556fb8fa8dd3bbe4aa548d9d31624264c6e1bb1 lib/unicore/emoji/emoji.txt
+ * b827ae5da8c2b08947cc9a120a7b7fd2f1676fb160b508df78075381635b127c lib/unicore/extracted/DBidiClass.txt
+ * 6fdc5b5ef40444a8f0c772e6b67c00498d4216fe0c0fdf76744ce338f2ad3810 lib/unicore/extracted/DBinaryProperties.txt
+ * e14928a5bf6ad5958a80332bd42e96e14420080a95c660e5da29384e496755d0 lib/unicore/extracted/DCombiningClass.txt
+ * 579a03281fbe87b78d5d9a8523de4d255edd7e4ca6eab0e4c7729de97e9b89b1 lib/unicore/extracted/DDecompositionType.txt
+ * ad83c59b257e9d480ffd3001d4ac240c5fed7cb1919453e1c4e8877035256bcd lib/unicore/extracted/DEastAsianWidth.txt
+ * 4502f0969e4e6558c4b4c6ca4c23dad70b863d61dd3d5eed1a62a6c3c99fd570 lib/unicore/extracted/DGeneralCategory.txt
+ * 00bb88b89e2adb646f3177f9444e2d3192386b81a5de9556104b338274b253e1 lib/unicore/extracted/DJoinGroup.txt
+ * ac835b6e11a60c9820d3cf2d1cb0558dd68efb8f53f404a51632e4726690a6d7 lib/unicore/extracted/DJoinType.txt
+ * baba9dfc133e3cb770a89aaf0973b1341fa61c2da6c176baf6428898b3b568d8 lib/unicore/extracted/DLineBreak.txt
+ * 6d4a8c945dd7db83ed617cbb7d937de7f4ecf016ff22970d846e996a7c9a2a5d lib/unicore/extracted/DNumType.txt
+ * 5b7c14380d5cceeaffcfbc18db1ed936391d2af2d51f5a41f1a17b692c77e59b lib/unicore/extracted/DNumValues.txt
+ * ee0dd174fd5b158d82dfea95d7d822ca0bfcd490182669353dca3ab39a8ee807 lib/unicore/mktables
+ * 50b85a67451145545a65cea370dab8d3444fbfe07e9c34cef560c5b7da9d3eef lib/unicore/version
  * 2680b9254eb236c5c090f11b149605043e8c8433661b96efc4a42fb4709342a5 regen/charset_translations.pl
- * 03e51b0f07beebd5da62ab943899aa4934eee1f792fa27c1fb638c33bf4ac6ea regen/mk_PL_charclass.pl
- * 61ea8132bb9ea5c637609e2d026b0b85ce17d6bec544c2f08ce411e6f65e8386 regen/mk_invlists.pl
- * c56b78df81e0f96632246052d71580b212546ca02ba4075158965e11d892f21e regen/mph.pl
+ * 6bbad21de0848e0236b02f34f5fa0edd3cdae9ba8173cc9469a5513936b9e728 regen/mk_PL_charclass.pl
+ * 7a7e778e903508b1c244a77bae57ec57606ab775bb5f81719dbb122eb66d4259 regen/mk_invlists.pl
+ * cf1d68efb7d919d302c4005641eae8d36da6d7850816ad374b0c00b45e609f43 regen/mph.pl
  * ex: set ro: */
diff --git a/gnu/usr.bin/perl/utils/streamzip.PL b/gnu/usr.bin/perl/utils/streamzip.PL
new file mode 100644 (file)
index 0000000..82887ac
--- /dev/null
@@ -0,0 +1,51 @@
+#!/usr/local/bin/perl
+
+use Config;
+use File::Basename qw(&basename &dirname);
+use Cwd;
+
+# List explicitly here the variables you want Configure to
+# generate.  Metaconfig only looks for shell variables, so you
+# have to mention them as if they were shell variables, not
+# %Config entries.  Thus you write
+#  $startperl
+# to ensure Configure will look for $Config{startperl}.
+
+# This forces PL files to create target in same directory as PL file.
+# This is so that make depend always knows where to find PL derivatives.
+my $origdir = cwd;
+chdir dirname($0);
+my $file = basename($0, '.PL');
+$file .= '.com' if $^O eq 'VMS';
+
+open OUT, ">", $file or die "Can't create $file: $!";
+
+print "Extracting $file (with variable substitutions)\n";
+
+# In this section, perl variables will be expanded during extraction.
+# You can use $Config{...} to use Configure variables.
+
+print OUT <<"!GROK!THIS!";
+$Config{startperl}
+    eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
+       if \$running_under_some_shell;
+!GROK!THIS!
+
+use File::Spec;
+
+my $script = File::Spec->catfile(
+            File::Spec->catdir(
+                File::Spec->updir, qw[ cpan IO-Compress bin ]
+            ), "streamzip");
+
+if (open(IN, '<', $script)) {
+    print OUT <IN>;
+    close IN;
+} else {
+    die "$0: cannot find '$script'\n";
+}
+
+close OUT or die "Can't close $file: $!";
+chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
+exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
+chdir $origdir;
index 3ca85e3..09d42c6 100644 (file)
@@ -3,12 +3,7 @@
 
 /* Too late to include winsock2.h if winsock.h has already been loaded */
 #ifndef _WINSOCKAPI_
-#  if defined(UNDER_CE) && UNDER_CE <= 300
-     /* winsock2 only for 4.00+ */
-#    include <winsock.h>
-#  else
-#    include <winsock2.h>
-#  endif
+#  include <winsock2.h>
 #endif
 
 /* Ensure all the Exxx constants required by convert_wsa_error_to_errno() in
index c9b60cc..2fb391a 100644 (file)
 #define STMT_END while(0)
 #endif
 
-#ifndef ZAPHOD32_ALLOW_UNALIGNED_AND_LITTLE_ENDIAN
-/* ZAPHOD32_ALLOW_UNALIGNED_AND_LITTLE_ENDIAN only matters if nothing has defined U8TO64_LE etc,
- * and when built with Perl these should be defined before this file is loaded.
- */
-#ifdef U32_ALIGNMENT_REQUIRED
-#define ZAPHOD32_ALLOW_UNALIGNED_AND_LITTLE_ENDIAN 0
-#else
-#define ZAPHOD32_ALLOW_UNALIGNED_AND_LITTLE_ENDIAN 1
-#endif
-#endif
-
-#ifndef U8TO32_LE
-#if ZAPHOD32_ALLOW_UNALIGNED_AND_LITTLE_ENDIAN
-#define U8TO32_LE(ptr)  (*((const U32 *)(ptr)))
-#else
-#define U8TO32_LE(ptr)  (\
-    (U32)(ptr)[3] << 24 | \
-    (U32)(ptr)[2] << 16 | \
-    (U32)(ptr)[1] << 8  | \
-    (U32)(ptr)[0]         \
-)
-#endif
-#endif
-
-#ifndef U8TO16_LE
-#if ZAPHOD32_ALLOW_UNALIGNED_AND_LITTLE_ENDIAN
-#define U8TO16_LE(ptr)  (*((const U16 *)(ptr)))
-#else
-#define U8TO16_LE(ptr)  (\
-    (U16)(ptr)[1] << 8  | \
-    (U16)(ptr)[0]         \
-)
-#endif
-#endif
-
 /* This is two marsaglia xor-shift permutes, with a prime-multiple
  * sandwiched inside. The end result of doing this twice with different
  * primes is a completely avalanched v.  */